@grafana/scenes 0.3.0 → 0.4.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.
Files changed (56) hide show
  1. package/CHANGELOG.md +51 -5
  2. package/README.md +1 -1
  3. package/dist/esm/components/EmbeddedScene.js +8 -5
  4. package/dist/esm/components/EmbeddedScene.js.map +1 -1
  5. package/dist/esm/components/NestedScene.js.map +1 -1
  6. package/dist/esm/components/SceneApp/SceneApp.js +2 -5
  7. package/dist/esm/components/SceneApp/SceneApp.js.map +1 -1
  8. package/dist/esm/components/SceneApp/SceneAppPage.js +122 -104
  9. package/dist/esm/components/SceneApp/SceneAppPage.js.map +1 -1
  10. package/dist/esm/components/SceneApp/SceneAppPageView.js +82 -0
  11. package/dist/esm/components/SceneApp/SceneAppPageView.js.map +1 -0
  12. package/dist/esm/components/SceneApp/utils.js +5 -1
  13. package/dist/esm/components/SceneApp/utils.js.map +1 -1
  14. package/dist/esm/components/layout/SceneFlexLayout.js +40 -19
  15. package/dist/esm/components/layout/SceneFlexLayout.js.map +1 -1
  16. package/dist/esm/components/layout/grid/LazyLoader.js +87 -0
  17. package/dist/esm/components/layout/grid/LazyLoader.js.map +1 -0
  18. package/dist/esm/components/layout/grid/SceneGridLayout.js +2 -50
  19. package/dist/esm/components/layout/grid/SceneGridLayout.js.map +1 -1
  20. package/dist/esm/components/layout/grid/SceneGridLayoutRenderer.js +70 -0
  21. package/dist/esm/components/layout/grid/SceneGridLayoutRenderer.js.map +1 -0
  22. package/dist/esm/core/SceneComponentWrapper.js +8 -1
  23. package/dist/esm/core/SceneComponentWrapper.js.map +1 -1
  24. package/dist/esm/core/SceneObjectBase.js +16 -2
  25. package/dist/esm/core/SceneObjectBase.js.map +1 -1
  26. package/dist/esm/core/sceneGraph.js +49 -30
  27. package/dist/esm/core/sceneGraph.js.map +1 -1
  28. package/dist/esm/core/types.js.map +1 -1
  29. package/dist/esm/index.js +1 -1
  30. package/dist/esm/querying/SceneQueryRunner.js +11 -14
  31. package/dist/esm/querying/SceneQueryRunner.js.map +1 -1
  32. package/dist/esm/services/UrlSyncManager.js +52 -17
  33. package/dist/esm/services/UrlSyncManager.js.map +1 -1
  34. package/dist/esm/utils/getDataSource.js.map +1 -1
  35. package/dist/esm/variables/interpolation/ScopedVarsVariable.js +4 -13
  36. package/dist/esm/variables/interpolation/ScopedVarsVariable.js.map +1 -1
  37. package/dist/esm/variables/interpolation/fieldAccessorCache.js +13 -0
  38. package/dist/esm/variables/interpolation/fieldAccessorCache.js.map +1 -0
  39. package/dist/esm/variables/macros/dataMacros.js +134 -0
  40. package/dist/esm/variables/macros/dataMacros.js.map +1 -0
  41. package/dist/esm/variables/macros/index.js +5 -2
  42. package/dist/esm/variables/macros/index.js.map +1 -1
  43. package/dist/esm/variables/macros/templateProxies.js +51 -0
  44. package/dist/esm/variables/macros/templateProxies.js.map +1 -0
  45. package/dist/esm/variables/sets/SceneVariableSet.js +17 -1
  46. package/dist/esm/variables/sets/SceneVariableSet.js.map +1 -1
  47. package/dist/esm/variables/variants/TestVariable.js +3 -1
  48. package/dist/esm/variables/variants/TestVariable.js.map +1 -1
  49. package/dist/esm/variables/variants/query/QueryVariable.js +1 -17
  50. package/dist/esm/variables/variants/query/QueryVariable.js.map +1 -1
  51. package/dist/index.d.ts +84 -32
  52. package/dist/index.js +986 -585
  53. package/dist/index.js.map +1 -1
  54. package/package.json +2 -2
  55. package/dist/esm/variables/macros/DataValueMacro.js +0 -60
  56. package/dist/esm/variables/macros/DataValueMacro.js.map +0 -1
package/dist/index.js CHANGED
@@ -32,43 +32,50 @@ class SceneObjectStateChangedEvent extends data.BusEventWithPayload {
32
32
  }
33
33
  SceneObjectStateChangedEvent.type = "scene-object-state-change";
34
34
 
35
- var __defProp$k = Object.defineProperty;
36
- var __defProps$9 = Object.defineProperties;
37
- var __getOwnPropDescs$9 = Object.getOwnPropertyDescriptors;
38
- var __getOwnPropSymbols$l = Object.getOwnPropertySymbols;
39
- var __hasOwnProp$l = Object.prototype.hasOwnProperty;
40
- var __propIsEnum$l = Object.prototype.propertyIsEnumerable;
41
- var __defNormalProp$k = (obj, key, value) => key in obj ? __defProp$k(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
42
- var __spreadValues$k = (a, b) => {
35
+ var __defProp$n = Object.defineProperty;
36
+ var __defProps$b = Object.defineProperties;
37
+ var __getOwnPropDescs$b = Object.getOwnPropertyDescriptors;
38
+ var __getOwnPropSymbols$o = Object.getOwnPropertySymbols;
39
+ var __hasOwnProp$o = Object.prototype.hasOwnProperty;
40
+ var __propIsEnum$o = Object.prototype.propertyIsEnumerable;
41
+ var __defNormalProp$n = (obj, key, value) => key in obj ? __defProp$n(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
42
+ var __spreadValues$n = (a, b) => {
43
43
  for (var prop in b || (b = {}))
44
- if (__hasOwnProp$l.call(b, prop))
45
- __defNormalProp$k(a, prop, b[prop]);
46
- if (__getOwnPropSymbols$l)
47
- for (var prop of __getOwnPropSymbols$l(b)) {
48
- if (__propIsEnum$l.call(b, prop))
49
- __defNormalProp$k(a, prop, b[prop]);
44
+ if (__hasOwnProp$o.call(b, prop))
45
+ __defNormalProp$n(a, prop, b[prop]);
46
+ if (__getOwnPropSymbols$o)
47
+ for (var prop of __getOwnPropSymbols$o(b)) {
48
+ if (__propIsEnum$o.call(b, prop))
49
+ __defNormalProp$n(a, prop, b[prop]);
50
50
  }
51
51
  return a;
52
52
  };
53
- var __spreadProps$9 = (a, b) => __defProps$9(a, __getOwnPropDescs$9(b));
54
- var __objRest$1 = (source, exclude) => {
53
+ var __spreadProps$b = (a, b) => __defProps$b(a, __getOwnPropDescs$b(b));
54
+ var __objRest$2 = (source, exclude) => {
55
55
  var target = {};
56
56
  for (var prop in source)
57
- if (__hasOwnProp$l.call(source, prop) && exclude.indexOf(prop) < 0)
57
+ if (__hasOwnProp$o.call(source, prop) && exclude.indexOf(prop) < 0)
58
58
  target[prop] = source[prop];
59
- if (source != null && __getOwnPropSymbols$l)
60
- for (var prop of __getOwnPropSymbols$l(source)) {
61
- if (exclude.indexOf(prop) < 0 && __propIsEnum$l.call(source, prop))
59
+ if (source != null && __getOwnPropSymbols$o)
60
+ for (var prop of __getOwnPropSymbols$o(source)) {
61
+ if (exclude.indexOf(prop) < 0 && __propIsEnum$o.call(source, prop))
62
62
  target[prop] = source[prop];
63
63
  }
64
64
  return target;
65
65
  };
66
66
  function SceneComponentWrapperWithoutMemo(_a) {
67
- var _b = _a, { model } = _b, otherProps = __objRest$1(_b, ["model"]);
67
+ var _b = _a, { model } = _b, otherProps = __objRest$2(_b, ["model"]);
68
68
  var _a2;
69
69
  const Component = (_a2 = model.constructor["Component"]) != null ? _a2 : EmptyRenderer;
70
- React.useEffect(() => model.activate(), [model]);
71
- return /* @__PURE__ */ React__default["default"].createElement(Component, __spreadProps$9(__spreadValues$k({}, otherProps), {
70
+ const [activated, setActivated] = React__default["default"].useState(false);
71
+ React.useEffect(() => {
72
+ setActivated(true);
73
+ return model.activate();
74
+ }, [model]);
75
+ if (!activated) {
76
+ return null;
77
+ }
78
+ return /* @__PURE__ */ React__default["default"].createElement(Component, __spreadProps$b(__spreadValues$n({}, otherProps), {
72
79
  model
73
80
  }));
74
81
  }
@@ -77,24 +84,24 @@ function EmptyRenderer(_) {
77
84
  return null;
78
85
  }
79
86
 
80
- var __defProp$j = Object.defineProperty;
81
- var __getOwnPropSymbols$k = Object.getOwnPropertySymbols;
82
- var __hasOwnProp$k = Object.prototype.hasOwnProperty;
83
- var __propIsEnum$k = Object.prototype.propertyIsEnumerable;
84
- var __defNormalProp$j = (obj, key, value) => key in obj ? __defProp$j(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
85
- var __spreadValues$j = (a, b) => {
87
+ var __defProp$m = Object.defineProperty;
88
+ var __getOwnPropSymbols$n = Object.getOwnPropertySymbols;
89
+ var __hasOwnProp$n = Object.prototype.hasOwnProperty;
90
+ var __propIsEnum$n = Object.prototype.propertyIsEnumerable;
91
+ var __defNormalProp$m = (obj, key, value) => key in obj ? __defProp$m(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
92
+ var __spreadValues$m = (a, b) => {
86
93
  for (var prop in b || (b = {}))
87
- if (__hasOwnProp$k.call(b, prop))
88
- __defNormalProp$j(a, prop, b[prop]);
89
- if (__getOwnPropSymbols$k)
90
- for (var prop of __getOwnPropSymbols$k(b)) {
91
- if (__propIsEnum$k.call(b, prop))
92
- __defNormalProp$j(a, prop, b[prop]);
94
+ if (__hasOwnProp$n.call(b, prop))
95
+ __defNormalProp$m(a, prop, b[prop]);
96
+ if (__getOwnPropSymbols$n)
97
+ for (var prop of __getOwnPropSymbols$n(b)) {
98
+ if (__propIsEnum$n.call(b, prop))
99
+ __defNormalProp$m(a, prop, b[prop]);
93
100
  }
94
101
  return a;
95
102
  };
96
103
  function cloneSceneObject(sceneObject, withState) {
97
- const clonedState = __spreadValues$j({}, sceneObject.state);
104
+ const clonedState = __spreadValues$m({}, sceneObject.state);
98
105
  for (const key in clonedState) {
99
106
  const propValue = clonedState[key];
100
107
  if (propValue instanceof SceneObjectBase) {
@@ -116,19 +123,19 @@ function cloneSceneObject(sceneObject, withState) {
116
123
  return new sceneObject.constructor(clonedState);
117
124
  }
118
125
 
119
- var __defProp$i = Object.defineProperty;
120
- var __getOwnPropSymbols$j = Object.getOwnPropertySymbols;
121
- var __hasOwnProp$j = Object.prototype.hasOwnProperty;
122
- var __propIsEnum$j = Object.prototype.propertyIsEnumerable;
123
- var __defNormalProp$i = (obj, key, value) => key in obj ? __defProp$i(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
124
- var __spreadValues$i = (a, b) => {
126
+ var __defProp$l = Object.defineProperty;
127
+ var __getOwnPropSymbols$m = Object.getOwnPropertySymbols;
128
+ var __hasOwnProp$m = Object.prototype.hasOwnProperty;
129
+ var __propIsEnum$m = Object.prototype.propertyIsEnumerable;
130
+ var __defNormalProp$l = (obj, key, value) => key in obj ? __defProp$l(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
131
+ var __spreadValues$l = (a, b) => {
125
132
  for (var prop in b || (b = {}))
126
- if (__hasOwnProp$j.call(b, prop))
127
- __defNormalProp$i(a, prop, b[prop]);
128
- if (__getOwnPropSymbols$j)
129
- for (var prop of __getOwnPropSymbols$j(b)) {
130
- if (__propIsEnum$j.call(b, prop))
131
- __defNormalProp$i(a, prop, b[prop]);
133
+ if (__hasOwnProp$m.call(b, prop))
134
+ __defNormalProp$l(a, prop, b[prop]);
135
+ if (__getOwnPropSymbols$m)
136
+ for (var prop of __getOwnPropSymbols$m(b)) {
137
+ if (__propIsEnum$m.call(b, prop))
138
+ __defNormalProp$l(a, prop, b[prop]);
132
139
  }
133
140
  return a;
134
141
  };
@@ -165,7 +172,9 @@ class SceneObjectBase {
165
172
  return SceneComponentWrapper;
166
173
  }
167
174
  _setParent() {
168
- this.forEachChild((child) => child._parent = this);
175
+ this.forEachChild((child) => {
176
+ child._parent = this;
177
+ });
169
178
  }
170
179
  subscribeToState(handler) {
171
180
  return this._events.subscribe(SceneObjectStateChangedEvent, (event) => {
@@ -179,7 +188,7 @@ class SceneObjectBase {
179
188
  }
180
189
  setState(update) {
181
190
  const prevState = this._state;
182
- const newState = __spreadValues$i(__spreadValues$i({}, this._state), update);
191
+ const newState = __spreadValues$l(__spreadValues$l({}, this._state), update);
183
192
  this._state = Object.freeze(newState);
184
193
  this._setParent();
185
194
  this.publishEvent(
@@ -203,7 +212,7 @@ class SceneObjectBase {
203
212
  }
204
213
  _internalActivate() {
205
214
  this._isActive = true;
206
- const { $data, $variables, $timeRange } = this.state;
215
+ const { $data, $variables, $timeRange, $behaviors } = this.state;
207
216
  if ($timeRange && !$timeRange.isActive) {
208
217
  this._deactivationHandlers.push($timeRange.activate());
209
218
  }
@@ -213,6 +222,18 @@ class SceneObjectBase {
213
222
  if ($data && !$data.isActive) {
214
223
  this._deactivationHandlers.push($data.activate());
215
224
  }
225
+ if ($behaviors) {
226
+ for (const behavior of $behaviors) {
227
+ if (behavior instanceof SceneObjectBase) {
228
+ this._deactivationHandlers.push(behavior.activate());
229
+ } else if (typeof behavior === "function") {
230
+ const deactivationHandler = behavior(this);
231
+ if (deactivationHandler) {
232
+ this._deactivationHandlers.push();
233
+ }
234
+ }
235
+ }
236
+ }
216
237
  this._activationHandlers.forEach((handler) => {
217
238
  const result = handler();
218
239
  if (result) {
@@ -283,25 +304,25 @@ function useSceneObjectState(model) {
283
304
  return model.state;
284
305
  }
285
306
 
286
- var __defProp$h = Object.defineProperty;
287
- var __getOwnPropSymbols$i = Object.getOwnPropertySymbols;
288
- var __hasOwnProp$i = Object.prototype.hasOwnProperty;
289
- var __propIsEnum$i = Object.prototype.propertyIsEnumerable;
290
- var __defNormalProp$h = (obj, key, value) => key in obj ? __defProp$h(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
291
- var __spreadValues$h = (a, b) => {
307
+ var __defProp$k = Object.defineProperty;
308
+ var __getOwnPropSymbols$l = Object.getOwnPropertySymbols;
309
+ var __hasOwnProp$l = Object.prototype.hasOwnProperty;
310
+ var __propIsEnum$l = Object.prototype.propertyIsEnumerable;
311
+ var __defNormalProp$k = (obj, key, value) => key in obj ? __defProp$k(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
312
+ var __spreadValues$k = (a, b) => {
292
313
  for (var prop in b || (b = {}))
293
- if (__hasOwnProp$i.call(b, prop))
294
- __defNormalProp$h(a, prop, b[prop]);
295
- if (__getOwnPropSymbols$i)
296
- for (var prop of __getOwnPropSymbols$i(b)) {
297
- if (__propIsEnum$i.call(b, prop))
298
- __defNormalProp$h(a, prop, b[prop]);
314
+ if (__hasOwnProp$l.call(b, prop))
315
+ __defNormalProp$k(a, prop, b[prop]);
316
+ if (__getOwnPropSymbols$l)
317
+ for (var prop of __getOwnPropSymbols$l(b)) {
318
+ if (__propIsEnum$l.call(b, prop))
319
+ __defNormalProp$k(a, prop, b[prop]);
299
320
  }
300
321
  return a;
301
322
  };
302
323
  class SceneDataNode extends SceneObjectBase {
303
324
  constructor(state) {
304
- super(__spreadValues$h({
325
+ super(__spreadValues$k({
305
326
  data: emptyPanelData
306
327
  }, state));
307
328
  }
@@ -328,19 +349,19 @@ class SceneObjectUrlSyncConfig {
328
349
  }
329
350
  }
330
351
 
331
- var __defProp$g = Object.defineProperty;
332
- var __getOwnPropSymbols$h = Object.getOwnPropertySymbols;
333
- var __hasOwnProp$h = Object.prototype.hasOwnProperty;
334
- var __propIsEnum$h = Object.prototype.propertyIsEnumerable;
335
- var __defNormalProp$g = (obj, key, value) => key in obj ? __defProp$g(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
336
- var __spreadValues$g = (a, b) => {
352
+ var __defProp$j = Object.defineProperty;
353
+ var __getOwnPropSymbols$k = Object.getOwnPropertySymbols;
354
+ var __hasOwnProp$k = Object.prototype.hasOwnProperty;
355
+ var __propIsEnum$k = Object.prototype.propertyIsEnumerable;
356
+ var __defNormalProp$j = (obj, key, value) => key in obj ? __defProp$j(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
357
+ var __spreadValues$j = (a, b) => {
337
358
  for (var prop in b || (b = {}))
338
- if (__hasOwnProp$h.call(b, prop))
339
- __defNormalProp$g(a, prop, b[prop]);
340
- if (__getOwnPropSymbols$h)
341
- for (var prop of __getOwnPropSymbols$h(b)) {
342
- if (__propIsEnum$h.call(b, prop))
343
- __defNormalProp$g(a, prop, b[prop]);
359
+ if (__hasOwnProp$k.call(b, prop))
360
+ __defNormalProp$j(a, prop, b[prop]);
361
+ if (__getOwnPropSymbols$k)
362
+ for (var prop of __getOwnPropSymbols$k(b)) {
363
+ if (__propIsEnum$k.call(b, prop))
364
+ __defNormalProp$j(a, prop, b[prop]);
344
365
  }
345
366
  return a;
346
367
  };
@@ -351,7 +372,7 @@ class SceneTimeRange extends SceneObjectBase {
351
372
  const to = (_b = state.to) != null ? _b : "now";
352
373
  const timeZone = (_c = state.timeZone) != null ? _c : data.getTimeZone();
353
374
  const value = evaluateTimeRange(from, to, timeZone);
354
- super(__spreadValues$g({ from, to, timeZone, value }, state));
375
+ super(__spreadValues$j({ from, to, timeZone, value }, state));
355
376
  this._urlSync = new SceneObjectUrlSyncConfig(this, { keys: ["from", "to"] });
356
377
  this.onTimeRangeChange = (timeRange) => {
357
378
  const update = {};
@@ -453,7 +474,16 @@ function isCustomVariableValue(value) {
453
474
  return typeof value === "object" && "formatter" in value;
454
475
  }
455
476
 
456
- const _ScopedVarsVariable = class {
477
+ let fieldAccessorCache = {};
478
+ function getFieldAccessor(fieldPath) {
479
+ const accessor = fieldAccessorCache[fieldPath];
480
+ if (accessor) {
481
+ return accessor;
482
+ }
483
+ return fieldAccessorCache[fieldPath] = lodash.property(fieldPath);
484
+ }
485
+
486
+ class ScopedVarsVariable {
457
487
  constructor(name, value) {
458
488
  this.state = { name, value, type: "scopedvar" };
459
489
  }
@@ -461,7 +491,7 @@ const _ScopedVarsVariable = class {
461
491
  let { value } = this.state;
462
492
  let realValue = value.value;
463
493
  if (fieldPath) {
464
- realValue = this.getFieldAccessor(fieldPath)(value.value);
494
+ realValue = getFieldAccessor(fieldPath)(value.value);
465
495
  } else {
466
496
  realValue = value.value;
467
497
  }
@@ -477,16 +507,7 @@ const _ScopedVarsVariable = class {
477
507
  }
478
508
  return String(value);
479
509
  }
480
- getFieldAccessor(fieldPath) {
481
- const accessor = _ScopedVarsVariable.fieldAccessorCache[fieldPath];
482
- if (accessor) {
483
- return accessor;
484
- }
485
- return _ScopedVarsVariable.fieldAccessorCache[fieldPath] = lodash.property(fieldPath);
486
- }
487
- };
488
- let ScopedVarsVariable = _ScopedVarsVariable;
489
- ScopedVarsVariable.fieldAccessorCache = {};
510
+ }
490
511
  let scopedVarsVariable;
491
512
  function getSceneVariableForScopedVar(name, value) {
492
513
  if (!scopedVarsVariable) {
@@ -861,11 +882,58 @@ function collectAllVariables(sceneObject, record = {}) {
861
882
  return record;
862
883
  }
863
884
 
864
- class DataValueMacro {
885
+ var __defProp$i = Object.defineProperty;
886
+ var __defProps$a = Object.defineProperties;
887
+ var __getOwnPropDescs$a = Object.getOwnPropertyDescriptors;
888
+ var __getOwnPropSymbols$j = Object.getOwnPropertySymbols;
889
+ var __hasOwnProp$j = Object.prototype.hasOwnProperty;
890
+ var __propIsEnum$j = Object.prototype.propertyIsEnumerable;
891
+ var __defNormalProp$i = (obj, key, value) => key in obj ? __defProp$i(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
892
+ var __spreadValues$i = (a, b) => {
893
+ for (var prop in b || (b = {}))
894
+ if (__hasOwnProp$j.call(b, prop))
895
+ __defNormalProp$i(a, prop, b[prop]);
896
+ if (__getOwnPropSymbols$j)
897
+ for (var prop of __getOwnPropSymbols$j(b)) {
898
+ if (__propIsEnum$j.call(b, prop))
899
+ __defNormalProp$i(a, prop, b[prop]);
900
+ }
901
+ return a;
902
+ };
903
+ var __spreadProps$a = (a, b) => __defProps$a(a, __getOwnPropDescs$a(b));
904
+ function getTemplateProxyForField(field, frame, frames) {
905
+ return new Proxy(
906
+ {},
907
+ {
908
+ get: (obj, key) => {
909
+ if (key === "name") {
910
+ return field.name;
911
+ }
912
+ if (key === "displayName") {
913
+ return data.getFieldDisplayName(field, frame, frames);
914
+ }
915
+ if (key === "labels" || key === "formattedLabels") {
916
+ if (!field.labels) {
917
+ return "";
918
+ }
919
+ return __spreadProps$a(__spreadValues$i({}, field.labels), {
920
+ __values: Object.values(field.labels).sort().join(", "),
921
+ toString: () => {
922
+ return data.formatLabels(field.labels, "", true);
923
+ }
924
+ });
925
+ }
926
+ return void 0;
927
+ }
928
+ }
929
+ );
930
+ }
931
+
932
+ class ValueMacro {
865
933
  constructor(name, sceneObject, _match, _scopedVars) {
866
934
  this._match = _match;
867
935
  this._scopedVars = _scopedVars;
868
- this.state = { name, type: "url_variable" };
936
+ this.state = { name, type: "__value" };
869
937
  }
870
938
  getValue(fieldPath) {
871
939
  var _a, _b;
@@ -887,7 +955,7 @@ class DataValueMacro {
887
955
  return data.formattedValueToString(calculatedValue);
888
956
  }
889
957
  }
890
- if (!rowIndex) {
958
+ if (rowIndex == null) {
891
959
  return this._match;
892
960
  }
893
961
  if (fieldPath === "time") {
@@ -916,11 +984,86 @@ class DataValueMacro {
916
984
  }
917
985
  }
918
986
  const fallbackDisplayProcessor = data.getDisplayProcessor();
987
+ class DataMacro {
988
+ constructor(name, sceneObject, _match, _scopedVars) {
989
+ this._match = _match;
990
+ this._scopedVars = _scopedVars;
991
+ this.state = { name, type: "__data" };
992
+ }
993
+ getValue(fieldPath) {
994
+ var _a, _b;
995
+ const dataContext = (_a = this._scopedVars) == null ? void 0 : _a.__dataContext;
996
+ if (!dataContext || !fieldPath) {
997
+ return this._match;
998
+ }
999
+ const { frame, rowIndex } = dataContext.value;
1000
+ if (rowIndex === void 0 || fieldPath === void 0) {
1001
+ return this._match;
1002
+ }
1003
+ const obj = {
1004
+ name: frame.name,
1005
+ refId: frame.refId,
1006
+ fields: data.getFieldDisplayValuesProxy({ frame, rowIndex })
1007
+ };
1008
+ return (_b = getFieldAccessor(fieldPath)(obj)) != null ? _b : "";
1009
+ }
1010
+ getValueText() {
1011
+ return "";
1012
+ }
1013
+ }
1014
+ class SeriesMacro {
1015
+ constructor(name, sceneObject, _match, _scopedVars) {
1016
+ this._match = _match;
1017
+ this._scopedVars = _scopedVars;
1018
+ this.state = { name, type: "__series" };
1019
+ }
1020
+ getValue(fieldPath) {
1021
+ var _a;
1022
+ const dataContext = (_a = this._scopedVars) == null ? void 0 : _a.__dataContext;
1023
+ if (!dataContext || !fieldPath) {
1024
+ return this._match;
1025
+ }
1026
+ if (fieldPath !== "name") {
1027
+ return this._match;
1028
+ }
1029
+ const { frame, frameIndex } = dataContext.value;
1030
+ return data.getFrameDisplayName(frame, frameIndex);
1031
+ }
1032
+ getValueText() {
1033
+ return "";
1034
+ }
1035
+ }
1036
+ class FieldMacro {
1037
+ constructor(name, sceneObject, _match, _scopedVars) {
1038
+ this._match = _match;
1039
+ this._scopedVars = _scopedVars;
1040
+ this.state = { name, type: "__field" };
1041
+ }
1042
+ getValue(fieldPath) {
1043
+ var _a, _b;
1044
+ const dataContext = (_a = this._scopedVars) == null ? void 0 : _a.__dataContext;
1045
+ if (!dataContext || !fieldPath) {
1046
+ return this._match;
1047
+ }
1048
+ if (fieldPath === void 0 || fieldPath === "") {
1049
+ return this._match;
1050
+ }
1051
+ const { frame, field, data } = dataContext.value;
1052
+ const obj = getTemplateProxyForField(field, frame, data);
1053
+ return (_b = getFieldAccessor(fieldPath)(obj)) != null ? _b : "";
1054
+ }
1055
+ getValueText() {
1056
+ return "";
1057
+ }
1058
+ }
919
1059
 
920
1060
  const macrosIndex = {
921
1061
  [data.DataLinkBuiltInVars.includeVars]: AllVariablesMacro,
922
1062
  [data.DataLinkBuiltInVars.keepTime]: UrlTimeRangeMacro,
923
- ["__value"]: DataValueMacro
1063
+ ["__value"]: ValueMacro,
1064
+ ["__data"]: DataMacro,
1065
+ ["__series"]: SeriesMacro,
1066
+ ["__field"]: FieldMacro
924
1067
  };
925
1068
 
926
1069
  function sceneInterpolator(sceneObject, target, scopedVars, format) {
@@ -990,41 +1133,34 @@ function formatValue(variable, value, formatNameOrFn) {
990
1133
  return formatter.formatter(value, args, variable);
991
1134
  }
992
1135
 
1136
+ function getClosest(sceneObject, extract) {
1137
+ let curSceneObject = sceneObject;
1138
+ let extracted = void 0;
1139
+ while (curSceneObject && !extracted) {
1140
+ extracted = extract(curSceneObject);
1141
+ curSceneObject = curSceneObject.parent;
1142
+ }
1143
+ return extracted;
1144
+ }
993
1145
  function getVariables(sceneObject) {
994
- if (sceneObject.state.$variables) {
995
- return sceneObject.state.$variables;
996
- }
997
- if (sceneObject.parent) {
998
- return getVariables(sceneObject.parent);
999
- }
1000
- return EmptyVariableSet;
1146
+ var _a;
1147
+ return (_a = getClosest(sceneObject, (s) => s.state.$variables)) != null ? _a : EmptyVariableSet;
1001
1148
  }
1002
1149
  function getData(sceneObject) {
1003
- const { $data } = sceneObject.state;
1004
- if ($data) {
1005
- return $data;
1006
- }
1007
- if (sceneObject.parent) {
1008
- return getData(sceneObject.parent);
1009
- }
1010
- return EmptyDataNode;
1150
+ var _a;
1151
+ return (_a = getClosest(sceneObject, (s) => s.state.$data)) != null ? _a : EmptyDataNode;
1011
1152
  }
1012
1153
  function getTimeRange(sceneObject) {
1013
- const { $timeRange } = sceneObject.state;
1014
- if ($timeRange) {
1015
- return $timeRange;
1016
- }
1017
- if (sceneObject.parent) {
1018
- return getTimeRange(sceneObject.parent);
1019
- }
1020
- return DefaultTimeRange;
1154
+ var _a;
1155
+ return (_a = getClosest(sceneObject, (s) => s.state.$timeRange)) != null ? _a : DefaultTimeRange;
1156
+ }
1157
+ function isSceneLayout(s) {
1158
+ return "isDraggable" in s;
1021
1159
  }
1022
1160
  function getLayout(scene) {
1023
- if ("isDraggable" in scene) {
1024
- return scene;
1025
- }
1026
- if (scene.parent) {
1027
- return getLayout(scene.parent);
1161
+ const parent = getClosest(scene, (s) => isSceneLayout(s) ? s : void 0);
1162
+ if (parent) {
1163
+ return parent;
1028
1164
  }
1029
1165
  throw new Error("No layout found in scene tree");
1030
1166
  }
@@ -1048,6 +1184,31 @@ function hasVariableDependencyInLoadingState(sceneObject) {
1048
1184
  }
1049
1185
  return false;
1050
1186
  }
1187
+ function findObjectInternal(scene, check, alreadySearchedChild, shouldSearchUp) {
1188
+ if (check(scene)) {
1189
+ return scene;
1190
+ }
1191
+ let found = null;
1192
+ scene.forEachChild((child) => {
1193
+ if (child === alreadySearchedChild) {
1194
+ return;
1195
+ }
1196
+ let maybe = findObjectInternal(child, check);
1197
+ if (maybe) {
1198
+ found = maybe;
1199
+ }
1200
+ });
1201
+ if (found) {
1202
+ return found;
1203
+ }
1204
+ if (shouldSearchUp && scene.parent) {
1205
+ return findObjectInternal(scene.parent, check, scene, true);
1206
+ }
1207
+ return null;
1208
+ }
1209
+ function findObject(scene, check) {
1210
+ return findObjectInternal(scene, check, void 0, true);
1211
+ }
1051
1212
  const sceneGraph = {
1052
1213
  getVariables,
1053
1214
  getData,
@@ -1055,7 +1216,8 @@ const sceneGraph = {
1055
1216
  getLayout,
1056
1217
  interpolate,
1057
1218
  lookupVariable,
1058
- hasVariableDependencyInLoadingState
1219
+ hasVariableDependencyInLoadingState,
1220
+ findObject
1059
1221
  };
1060
1222
 
1061
1223
  async function getDataSource(datasource, scopedVars) {
@@ -1323,11 +1485,8 @@ class SceneQueryRunner extends SceneObjectBase {
1323
1485
  __sceneObject: { text: "__sceneObject", value: this }
1324
1486
  };
1325
1487
  if (!(queries == null ? void 0 : queries.length)) {
1326
- this.onDataReceived({
1327
- state: schema.LoadingState.Done,
1328
- series: [],
1329
- timeRange
1330
- });
1488
+ this._setNoDataState();
1489
+ return;
1331
1490
  }
1332
1491
  const request = {
1333
1492
  app: data.CoreApp.Dashboard,
@@ -1367,35 +1526,36 @@ class SceneQueryRunner extends SceneObjectBase {
1367
1526
  console.error("PanelQueryRunner Error", err);
1368
1527
  }
1369
1528
  }
1370
- }
1371
- function findFirstDatasource(targets) {
1372
- for (const t of targets) {
1373
- if (t.datasource != null) {
1374
- return t.datasource;
1529
+ _setNoDataState() {
1530
+ if (this.state.data !== emptyPanelData) {
1531
+ this.setState({ data: emptyPanelData });
1375
1532
  }
1376
1533
  }
1377
- return void 0;
1534
+ }
1535
+ function findFirstDatasource(targets) {
1536
+ var _a, _b;
1537
+ return (_b = (_a = targets.find((t) => t.datasource !== null)) == null ? void 0 : _a.datasource) != null ? _b : void 0;
1378
1538
  }
1379
1539
 
1380
- var __defProp$f = Object.defineProperty;
1381
- var __defProps$8 = Object.defineProperties;
1382
- var __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;
1383
- var __getOwnPropSymbols$g = Object.getOwnPropertySymbols;
1384
- var __hasOwnProp$g = Object.prototype.hasOwnProperty;
1385
- var __propIsEnum$g = Object.prototype.propertyIsEnumerable;
1386
- var __defNormalProp$f = (obj, key, value) => key in obj ? __defProp$f(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1387
- var __spreadValues$f = (a, b) => {
1540
+ var __defProp$h = Object.defineProperty;
1541
+ var __defProps$9 = Object.defineProperties;
1542
+ var __getOwnPropDescs$9 = Object.getOwnPropertyDescriptors;
1543
+ var __getOwnPropSymbols$i = Object.getOwnPropertySymbols;
1544
+ var __hasOwnProp$i = Object.prototype.hasOwnProperty;
1545
+ var __propIsEnum$i = Object.prototype.propertyIsEnumerable;
1546
+ var __defNormalProp$h = (obj, key, value) => key in obj ? __defProp$h(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1547
+ var __spreadValues$h = (a, b) => {
1388
1548
  for (var prop in b || (b = {}))
1389
- if (__hasOwnProp$g.call(b, prop))
1390
- __defNormalProp$f(a, prop, b[prop]);
1391
- if (__getOwnPropSymbols$g)
1392
- for (var prop of __getOwnPropSymbols$g(b)) {
1393
- if (__propIsEnum$g.call(b, prop))
1394
- __defNormalProp$f(a, prop, b[prop]);
1549
+ if (__hasOwnProp$i.call(b, prop))
1550
+ __defNormalProp$h(a, prop, b[prop]);
1551
+ if (__getOwnPropSymbols$i)
1552
+ for (var prop of __getOwnPropSymbols$i(b)) {
1553
+ if (__propIsEnum$i.call(b, prop))
1554
+ __defNormalProp$h(a, prop, b[prop]);
1395
1555
  }
1396
1556
  return a;
1397
1557
  };
1398
- var __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));
1558
+ var __spreadProps$9 = (a, b) => __defProps$9(a, __getOwnPropDescs$9(b));
1399
1559
  class SceneDataTransformer extends SceneObjectBase {
1400
1560
  constructor(state) {
1401
1561
  super(state);
@@ -1452,7 +1612,7 @@ class SceneDataTransformer extends SceneObjectBase {
1452
1612
  return sceneGraph.interpolate(this, value, (_a = data$1.request) == null ? void 0 : _a.scopedVars);
1453
1613
  }
1454
1614
  };
1455
- this._transformSub = data.transformDataFrame(transformations, data$1.series, ctx).pipe(rxjs.map((series) => __spreadProps$8(__spreadValues$f({}, data$1), { series }))).subscribe((data2) => this.setState({ data: data2 }));
1615
+ this._transformSub = data.transformDataFrame(transformations, data$1.series, ctx).pipe(rxjs.map((series) => __spreadProps$9(__spreadValues$h({}, data$1), { series }))).subscribe((data2) => this.setState({ data: data2 }));
1456
1616
  }
1457
1617
  }
1458
1618
 
@@ -1536,12 +1696,18 @@ class SceneVariableSet extends SceneObjectBase {
1536
1696
  this._updating = /* @__PURE__ */ new Map();
1537
1697
  this._variableValueRecorder = new VariableValueRecorder();
1538
1698
  this._onActivate = () => {
1699
+ const timeRange = sceneGraph.getTimeRange(this);
1539
1700
  this._subs.add(
1540
1701
  this.subscribeToEvent(SceneVariableValueChangedEvent, (event) => this._handleVariableValueChanged(event.payload))
1541
1702
  );
1542
- this._subs.add(this.subscribeToState(this._onStateChanged));
1543
- this._checkForVariablesThatChangedWhileInactive();
1544
- for (const variable of this.state.variables) {
1703
+ this._subs.add(
1704
+ timeRange.subscribeToState(() => {
1705
+ this._refreshTimeRangeBasedVariables();
1706
+ })
1707
+ );
1708
+ this._subs.add(this.subscribeToState(this._onStateChanged));
1709
+ this._checkForVariablesThatChangedWhileInactive();
1710
+ for (const variable of this.state.variables) {
1545
1711
  if (this._variableNeedsUpdate(variable)) {
1546
1712
  this._variablesToUpdate.add(variable);
1547
1713
  }
@@ -1590,6 +1756,14 @@ class SceneVariableSet extends SceneObjectBase {
1590
1756
  getByName(name) {
1591
1757
  return this.state.variables.find((x) => x.state.name === name);
1592
1758
  }
1759
+ _refreshTimeRangeBasedVariables() {
1760
+ for (const variable of this.state.variables) {
1761
+ if ("refresh" in variable.state && variable.state.refresh === data.VariableRefresh.onTimeRangeChanged) {
1762
+ this._variablesToUpdate.add(variable);
1763
+ }
1764
+ }
1765
+ this._updateNextBatch();
1766
+ }
1593
1767
  _checkForVariablesThatChangedWhileInactive() {
1594
1768
  if (!this._variableValueRecorder.hasValues()) {
1595
1769
  return;
@@ -1679,7 +1853,7 @@ class SceneVariableSet extends SceneObjectBase {
1679
1853
  for (const otherVariable of this.state.variables) {
1680
1854
  if (otherVariable.variableDependency) {
1681
1855
  if (otherVariable.variableDependency.hasDependencyOn(variableThatChanged.state.name)) {
1682
- writeVariableTraceLog(otherVariable, "Added to update quee, dependant variable value changed");
1856
+ writeVariableTraceLog(otherVariable, "Added to update queue, dependant variable value changed");
1683
1857
  this._variablesToUpdate.add(otherVariable);
1684
1858
  }
1685
1859
  }
@@ -1715,28 +1889,28 @@ function writeVariableTraceLog(variable, message, err) {
1715
1889
  writeSceneLog("SceneVariableSet", `Variable[${variable.state.name}]: ${message}`, err);
1716
1890
  }
1717
1891
 
1718
- var __defProp$e = Object.defineProperty;
1719
- var __defProps$7 = Object.defineProperties;
1720
- var __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;
1721
- var __getOwnPropSymbols$f = Object.getOwnPropertySymbols;
1722
- var __hasOwnProp$f = Object.prototype.hasOwnProperty;
1723
- var __propIsEnum$f = Object.prototype.propertyIsEnumerable;
1724
- var __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1725
- var __spreadValues$e = (a, b) => {
1892
+ var __defProp$g = Object.defineProperty;
1893
+ var __defProps$8 = Object.defineProperties;
1894
+ var __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;
1895
+ var __getOwnPropSymbols$h = Object.getOwnPropertySymbols;
1896
+ var __hasOwnProp$h = Object.prototype.hasOwnProperty;
1897
+ var __propIsEnum$h = Object.prototype.propertyIsEnumerable;
1898
+ var __defNormalProp$g = (obj, key, value) => key in obj ? __defProp$g(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1899
+ var __spreadValues$g = (a, b) => {
1726
1900
  for (var prop in b || (b = {}))
1727
- if (__hasOwnProp$f.call(b, prop))
1728
- __defNormalProp$e(a, prop, b[prop]);
1729
- if (__getOwnPropSymbols$f)
1730
- for (var prop of __getOwnPropSymbols$f(b)) {
1731
- if (__propIsEnum$f.call(b, prop))
1732
- __defNormalProp$e(a, prop, b[prop]);
1901
+ if (__hasOwnProp$h.call(b, prop))
1902
+ __defNormalProp$g(a, prop, b[prop]);
1903
+ if (__getOwnPropSymbols$h)
1904
+ for (var prop of __getOwnPropSymbols$h(b)) {
1905
+ if (__propIsEnum$h.call(b, prop))
1906
+ __defNormalProp$g(a, prop, b[prop]);
1733
1907
  }
1734
1908
  return a;
1735
1909
  };
1736
- var __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));
1910
+ var __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));
1737
1911
  class ConstantVariable extends SceneObjectBase {
1738
1912
  constructor(initialState) {
1739
- super(__spreadProps$7(__spreadValues$e({
1913
+ super(__spreadProps$8(__spreadValues$g({
1740
1914
  type: "constant",
1741
1915
  value: "",
1742
1916
  name: ""
@@ -1985,25 +2159,25 @@ class CustomAllValue {
1985
2159
  }
1986
2160
  }
1987
2161
 
1988
- var __defProp$d = Object.defineProperty;
1989
- var __getOwnPropSymbols$e = Object.getOwnPropertySymbols;
1990
- var __hasOwnProp$e = Object.prototype.hasOwnProperty;
1991
- var __propIsEnum$e = Object.prototype.propertyIsEnumerable;
1992
- var __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1993
- var __spreadValues$d = (a, b) => {
2162
+ var __defProp$f = Object.defineProperty;
2163
+ var __getOwnPropSymbols$g = Object.getOwnPropertySymbols;
2164
+ var __hasOwnProp$g = Object.prototype.hasOwnProperty;
2165
+ var __propIsEnum$g = Object.prototype.propertyIsEnumerable;
2166
+ var __defNormalProp$f = (obj, key, value) => key in obj ? __defProp$f(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2167
+ var __spreadValues$f = (a, b) => {
1994
2168
  for (var prop in b || (b = {}))
1995
- if (__hasOwnProp$e.call(b, prop))
1996
- __defNormalProp$d(a, prop, b[prop]);
1997
- if (__getOwnPropSymbols$e)
1998
- for (var prop of __getOwnPropSymbols$e(b)) {
1999
- if (__propIsEnum$e.call(b, prop))
2000
- __defNormalProp$d(a, prop, b[prop]);
2169
+ if (__hasOwnProp$g.call(b, prop))
2170
+ __defNormalProp$f(a, prop, b[prop]);
2171
+ if (__getOwnPropSymbols$g)
2172
+ for (var prop of __getOwnPropSymbols$g(b)) {
2173
+ if (__propIsEnum$g.call(b, prop))
2174
+ __defNormalProp$f(a, prop, b[prop]);
2001
2175
  }
2002
2176
  return a;
2003
2177
  };
2004
2178
  class CustomVariable extends MultiValueVariable {
2005
2179
  constructor(initialState) {
2006
- super(__spreadValues$d({
2180
+ super(__spreadValues$f({
2007
2181
  type: "custom",
2008
2182
  query: "",
2009
2183
  value: "",
@@ -2036,25 +2210,25 @@ CustomVariable.Component = ({ model }) => {
2036
2210
  return renderSelectForVariable(model);
2037
2211
  };
2038
2212
 
2039
- var __defProp$c = Object.defineProperty;
2040
- var __getOwnPropSymbols$d = Object.getOwnPropertySymbols;
2041
- var __hasOwnProp$d = Object.prototype.hasOwnProperty;
2042
- var __propIsEnum$d = Object.prototype.propertyIsEnumerable;
2043
- var __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2044
- var __spreadValues$c = (a, b) => {
2213
+ var __defProp$e = Object.defineProperty;
2214
+ var __getOwnPropSymbols$f = Object.getOwnPropertySymbols;
2215
+ var __hasOwnProp$f = Object.prototype.hasOwnProperty;
2216
+ var __propIsEnum$f = Object.prototype.propertyIsEnumerable;
2217
+ var __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2218
+ var __spreadValues$e = (a, b) => {
2045
2219
  for (var prop in b || (b = {}))
2046
- if (__hasOwnProp$d.call(b, prop))
2047
- __defNormalProp$c(a, prop, b[prop]);
2048
- if (__getOwnPropSymbols$d)
2049
- for (var prop of __getOwnPropSymbols$d(b)) {
2050
- if (__propIsEnum$d.call(b, prop))
2051
- __defNormalProp$c(a, prop, b[prop]);
2220
+ if (__hasOwnProp$f.call(b, prop))
2221
+ __defNormalProp$e(a, prop, b[prop]);
2222
+ if (__getOwnPropSymbols$f)
2223
+ for (var prop of __getOwnPropSymbols$f(b)) {
2224
+ if (__propIsEnum$f.call(b, prop))
2225
+ __defNormalProp$e(a, prop, b[prop]);
2052
2226
  }
2053
2227
  return a;
2054
2228
  };
2055
2229
  class DataSourceVariable extends MultiValueVariable {
2056
2230
  constructor(initialState) {
2057
- super(__spreadValues$c({
2231
+ super(__spreadValues$e({
2058
2232
  type: "datasource",
2059
2233
  value: "",
2060
2234
  text: "",
@@ -2142,25 +2316,25 @@ const hasCustomVariableSupport = (datasource) => {
2142
2316
  return "query" in variableSupport && "editor" in variableSupport && Boolean(variableSupport.query) && Boolean(variableSupport.editor);
2143
2317
  };
2144
2318
 
2145
- var __defProp$b = Object.defineProperty;
2146
- var __defProps$6 = Object.defineProperties;
2147
- var __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;
2148
- var __getOwnPropSymbols$c = Object.getOwnPropertySymbols;
2149
- var __hasOwnProp$c = Object.prototype.hasOwnProperty;
2150
- var __propIsEnum$c = Object.prototype.propertyIsEnumerable;
2151
- var __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2152
- var __spreadValues$b = (a, b) => {
2319
+ var __defProp$d = Object.defineProperty;
2320
+ var __defProps$7 = Object.defineProperties;
2321
+ var __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;
2322
+ var __getOwnPropSymbols$e = Object.getOwnPropertySymbols;
2323
+ var __hasOwnProp$e = Object.prototype.hasOwnProperty;
2324
+ var __propIsEnum$e = Object.prototype.propertyIsEnumerable;
2325
+ var __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2326
+ var __spreadValues$d = (a, b) => {
2153
2327
  for (var prop in b || (b = {}))
2154
- if (__hasOwnProp$c.call(b, prop))
2155
- __defNormalProp$b(a, prop, b[prop]);
2156
- if (__getOwnPropSymbols$c)
2157
- for (var prop of __getOwnPropSymbols$c(b)) {
2158
- if (__propIsEnum$c.call(b, prop))
2159
- __defNormalProp$b(a, prop, b[prop]);
2328
+ if (__hasOwnProp$e.call(b, prop))
2329
+ __defNormalProp$d(a, prop, b[prop]);
2330
+ if (__getOwnPropSymbols$e)
2331
+ for (var prop of __getOwnPropSymbols$e(b)) {
2332
+ if (__propIsEnum$e.call(b, prop))
2333
+ __defNormalProp$d(a, prop, b[prop]);
2160
2334
  }
2161
2335
  return a;
2162
2336
  };
2163
- var __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));
2337
+ var __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));
2164
2338
  class StandardQueryRunner {
2165
2339
  constructor(datasource, _runRequest = runtime.getRunRequest()) {
2166
2340
  this.datasource = datasource;
@@ -2197,7 +2371,7 @@ class LegacyQueryRunner {
2197
2371
  return getEmptyMetricFindValueObservable();
2198
2372
  }
2199
2373
  return rxjs.from(
2200
- this.datasource.metricFindQuery(variable.state.query, __spreadProps$6(__spreadValues$b({}, request), {
2374
+ this.datasource.metricFindQuery(variable.state.query, __spreadProps$7(__spreadValues$d({}, request), {
2201
2375
  variable: {
2202
2376
  name: variable.state.name,
2203
2377
  type: variable.state.type
@@ -2428,25 +2602,25 @@ function areMetricFindValues(data$1) {
2428
2602
  return false;
2429
2603
  }
2430
2604
 
2431
- var __defProp$a = Object.defineProperty;
2432
- var __getOwnPropSymbols$b = Object.getOwnPropertySymbols;
2433
- var __hasOwnProp$b = Object.prototype.hasOwnProperty;
2434
- var __propIsEnum$b = Object.prototype.propertyIsEnumerable;
2435
- var __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2436
- var __spreadValues$a = (a, b) => {
2605
+ var __defProp$c = Object.defineProperty;
2606
+ var __getOwnPropSymbols$d = Object.getOwnPropertySymbols;
2607
+ var __hasOwnProp$d = Object.prototype.hasOwnProperty;
2608
+ var __propIsEnum$d = Object.prototype.propertyIsEnumerable;
2609
+ var __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2610
+ var __spreadValues$c = (a, b) => {
2437
2611
  for (var prop in b || (b = {}))
2438
- if (__hasOwnProp$b.call(b, prop))
2439
- __defNormalProp$a(a, prop, b[prop]);
2440
- if (__getOwnPropSymbols$b)
2441
- for (var prop of __getOwnPropSymbols$b(b)) {
2442
- if (__propIsEnum$b.call(b, prop))
2443
- __defNormalProp$a(a, prop, b[prop]);
2612
+ if (__hasOwnProp$d.call(b, prop))
2613
+ __defNormalProp$c(a, prop, b[prop]);
2614
+ if (__getOwnPropSymbols$d)
2615
+ for (var prop of __getOwnPropSymbols$d(b)) {
2616
+ if (__propIsEnum$d.call(b, prop))
2617
+ __defNormalProp$c(a, prop, b[prop]);
2444
2618
  }
2445
2619
  return a;
2446
2620
  };
2447
2621
  class QueryVariable extends MultiValueVariable {
2448
2622
  constructor(initialState) {
2449
- super(__spreadValues$a({
2623
+ super(__spreadValues$c({
2450
2624
  type: "query",
2451
2625
  name: "",
2452
2626
  value: "",
@@ -2461,22 +2635,6 @@ class QueryVariable extends MultiValueVariable {
2461
2635
  this._variableDependency = new VariableDependencyConfig(this, {
2462
2636
  statePaths: ["regex", "query", "datasource"]
2463
2637
  });
2464
- this.addActivationHandler(() => this._onActivate());
2465
- }
2466
- _onActivate() {
2467
- const timeRange = sceneGraph.getTimeRange(this);
2468
- if (this.state.refresh === data.VariableRefresh.onTimeRangeChanged) {
2469
- this._subs.add(
2470
- timeRange.subscribeToState(() => {
2471
- this.updateSubscription = this.validateAndUpdate().subscribe();
2472
- })
2473
- );
2474
- }
2475
- return () => {
2476
- if (this.updateSubscription) {
2477
- this.updateSubscription.unsubscribe();
2478
- }
2479
- };
2480
2638
  }
2481
2639
  getValueOptions(args) {
2482
2640
  if (this.state.query === "" || !this.state.datasource) {
@@ -2595,31 +2753,32 @@ function queryMetricTree(query) {
2595
2753
  return queryTree(children, query.split("."), 0);
2596
2754
  }
2597
2755
 
2598
- var __defProp$9 = Object.defineProperty;
2599
- var __getOwnPropSymbols$a = Object.getOwnPropertySymbols;
2600
- var __hasOwnProp$a = Object.prototype.hasOwnProperty;
2601
- var __propIsEnum$a = Object.prototype.propertyIsEnumerable;
2602
- var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2603
- var __spreadValues$9 = (a, b) => {
2756
+ var __defProp$b = Object.defineProperty;
2757
+ var __getOwnPropSymbols$c = Object.getOwnPropertySymbols;
2758
+ var __hasOwnProp$c = Object.prototype.hasOwnProperty;
2759
+ var __propIsEnum$c = Object.prototype.propertyIsEnumerable;
2760
+ var __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2761
+ var __spreadValues$b = (a, b) => {
2604
2762
  for (var prop in b || (b = {}))
2605
- if (__hasOwnProp$a.call(b, prop))
2606
- __defNormalProp$9(a, prop, b[prop]);
2607
- if (__getOwnPropSymbols$a)
2608
- for (var prop of __getOwnPropSymbols$a(b)) {
2609
- if (__propIsEnum$a.call(b, prop))
2610
- __defNormalProp$9(a, prop, b[prop]);
2763
+ if (__hasOwnProp$c.call(b, prop))
2764
+ __defNormalProp$b(a, prop, b[prop]);
2765
+ if (__getOwnPropSymbols$c)
2766
+ for (var prop of __getOwnPropSymbols$c(b)) {
2767
+ if (__propIsEnum$c.call(b, prop))
2768
+ __defNormalProp$b(a, prop, b[prop]);
2611
2769
  }
2612
2770
  return a;
2613
2771
  };
2614
2772
  class TestVariable extends MultiValueVariable {
2615
2773
  constructor(initialState) {
2616
- super(__spreadValues$9({
2774
+ super(__spreadValues$b({
2617
2775
  type: "custom",
2618
2776
  name: "Test",
2619
2777
  value: "Value",
2620
2778
  text: "Text",
2621
2779
  query: "Query",
2622
- options: []
2780
+ options: [],
2781
+ refresh: data.VariableRefresh.onDashboardLoad
2623
2782
  }, initialState));
2624
2783
  this.completeUpdate = new rxjs.Subject();
2625
2784
  this.isGettingValues = true;
@@ -2692,25 +2851,25 @@ function VariableValueInput({ model }) {
2692
2851
  });
2693
2852
  }
2694
2853
 
2695
- var __defProp$8 = Object.defineProperty;
2696
- var __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;
2697
- var __hasOwnProp$9 = Object.prototype.hasOwnProperty;
2698
- var __propIsEnum$9 = Object.prototype.propertyIsEnumerable;
2699
- var __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2700
- var __spreadValues$8 = (a, b) => {
2854
+ var __defProp$a = Object.defineProperty;
2855
+ var __getOwnPropSymbols$b = Object.getOwnPropertySymbols;
2856
+ var __hasOwnProp$b = Object.prototype.hasOwnProperty;
2857
+ var __propIsEnum$b = Object.prototype.propertyIsEnumerable;
2858
+ var __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2859
+ var __spreadValues$a = (a, b) => {
2701
2860
  for (var prop in b || (b = {}))
2702
- if (__hasOwnProp$9.call(b, prop))
2703
- __defNormalProp$8(a, prop, b[prop]);
2704
- if (__getOwnPropSymbols$9)
2705
- for (var prop of __getOwnPropSymbols$9(b)) {
2706
- if (__propIsEnum$9.call(b, prop))
2707
- __defNormalProp$8(a, prop, b[prop]);
2861
+ if (__hasOwnProp$b.call(b, prop))
2862
+ __defNormalProp$a(a, prop, b[prop]);
2863
+ if (__getOwnPropSymbols$b)
2864
+ for (var prop of __getOwnPropSymbols$b(b)) {
2865
+ if (__propIsEnum$b.call(b, prop))
2866
+ __defNormalProp$a(a, prop, b[prop]);
2708
2867
  }
2709
2868
  return a;
2710
2869
  };
2711
2870
  class TextBoxVariable extends SceneObjectBase {
2712
2871
  constructor(initialState) {
2713
- super(__spreadValues$8({
2872
+ super(__spreadValues$a({
2714
2873
  type: "textbox",
2715
2874
  value: "",
2716
2875
  name: ""
@@ -2746,13 +2905,14 @@ TextBoxVariable.Component = ({ model }) => {
2746
2905
  };
2747
2906
 
2748
2907
  class UrlSyncManager {
2749
- constructor(sceneRoot) {
2750
- this.sceneRoot = sceneRoot;
2908
+ constructor() {
2751
2909
  this.urlKeyMapper = new UniqueUrlKeyMapper();
2910
+ this._stateSub = null;
2911
+ this._locationSub = null;
2752
2912
  this._onLocationUpdate = (location) => {
2753
2913
  const urlParams = new URLSearchParams(location.search);
2754
- this.urlKeyMapper.rebuldIndex(this.sceneRoot);
2755
- this._syncSceneStateFromUrl(this.sceneRoot, urlParams);
2914
+ this.urlKeyMapper.rebuldIndex(this._sceneRoot);
2915
+ this._syncSceneStateFromUrl(this._sceneRoot, urlParams);
2756
2916
  };
2757
2917
  this._onStateChanged = ({ payload }) => {
2758
2918
  const changedObject = payload.changedObject;
@@ -2760,7 +2920,7 @@ class UrlSyncManager {
2760
2920
  const newUrlState = changedObject.urlSync.getUrlState();
2761
2921
  const searchParams = runtime.locationService.getSearch();
2762
2922
  const mappedUpdated = {};
2763
- this.urlKeyMapper.rebuldIndex(this.sceneRoot);
2923
+ this.urlKeyMapper.rebuldIndex(this._sceneRoot);
2764
2924
  for (const [key, newUrlValue] of Object.entries(newUrlState)) {
2765
2925
  const uniqueKey = this.urlKeyMapper.getUniqueKey(key, changedObject);
2766
2926
  const currentUrlValue = searchParams.getAll(uniqueKey);
@@ -2774,18 +2934,44 @@ class UrlSyncManager {
2774
2934
  }
2775
2935
  };
2776
2936
  }
2777
- initSync() {
2778
- this.sceneRoot.addActivationHandler(() => {
2779
- const stateChangeSub = this.sceneRoot.subscribeToEvent(SceneObjectStateChangedEvent, this._onStateChanged);
2780
- const locationListenerUnsub = runtime.locationService.getHistory().listen(this._onLocationUpdate);
2781
- return () => {
2782
- stateChangeSub.unsubscribe();
2783
- locationListenerUnsub();
2784
- };
2785
- });
2937
+ initSync(root) {
2938
+ if (!this._locationSub) {
2939
+ writeSceneLog("UrlSyncManager", "New location listen");
2940
+ this._locationSub = runtime.locationService.getHistory().listen(this._onLocationUpdate);
2941
+ }
2942
+ if (this._stateSub) {
2943
+ writeSceneLog("UrlSyncManager", "Unregister previous scene state subscription", this._sceneRoot.state.key);
2944
+ this._stateSub.unsubscribe();
2945
+ }
2946
+ this._sceneRoot = root;
2947
+ this._stateSub = root.subscribeToEvent(SceneObjectStateChangedEvent, this._onStateChanged);
2948
+ this.syncFrom(this._sceneRoot);
2949
+ }
2950
+ cleanUp(root) {
2951
+ if (this._sceneRoot !== root) {
2952
+ return;
2953
+ }
2954
+ writeSceneLog("UrlSyncManager", "Clean up");
2955
+ if (this._locationSub) {
2956
+ this._locationSub();
2957
+ writeSceneLog("UrlSyncManager", "Unregister history listen");
2958
+ this._locationSub = null;
2959
+ }
2960
+ if (this._stateSub) {
2961
+ this._stateSub.unsubscribe();
2962
+ this._stateSub = null;
2963
+ writeSceneLog(
2964
+ "UrlSyncManager",
2965
+ "Root deactived, unsub to state",
2966
+ "same key",
2967
+ this._sceneRoot.state.key === root.state.key
2968
+ );
2969
+ }
2970
+ }
2971
+ syncFrom(sceneObj) {
2786
2972
  const urlParams = runtime.locationService.getSearch();
2787
- this.urlKeyMapper.rebuldIndex(this.sceneRoot);
2788
- this._syncSceneStateFromUrl(this.sceneRoot, urlParams);
2973
+ this.urlKeyMapper.rebuldIndex(this._sceneRoot);
2974
+ this._syncSceneStateFromUrl(sceneObj, urlParams);
2789
2975
  }
2790
2976
  _syncSceneStateFromUrl(sceneObject, urlParams) {
2791
2977
  if (sceneObject.urlSync) {
@@ -2861,13 +3047,23 @@ function isUrlValueEqual(currentUrlValue, newUrlValue) {
2861
3047
  }
2862
3048
  return lodash.isEqual(currentUrlValue, newUrlValue);
2863
3049
  }
3050
+ let urlSyncManager;
3051
+ function getUrlSyncManager() {
3052
+ if (!urlSyncManager) {
3053
+ urlSyncManager = new UrlSyncManager();
3054
+ }
3055
+ return urlSyncManager;
3056
+ }
2864
3057
 
2865
3058
  class EmbeddedScene extends SceneObjectBase {
3059
+ constructor(state) {
3060
+ super(state);
3061
+ this.addActivationHandler(() => {
3062
+ return () => getUrlSyncManager().cleanUp(this);
3063
+ });
3064
+ }
2866
3065
  initUrlSync() {
2867
- if (!this.urlSyncManager) {
2868
- this.urlSyncManager = new UrlSyncManager(this);
2869
- }
2870
- this.urlSyncManager.initSync();
3066
+ getUrlSyncManager().initSync(this);
2871
3067
  }
2872
3068
  }
2873
3069
  EmbeddedScene.Component = EmbeddedSceneRenderer;
@@ -2910,17 +3106,17 @@ function getStyles$1(theme) {
2910
3106
  };
2911
3107
  }
2912
3108
 
2913
- var __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;
2914
- var __hasOwnProp$8 = Object.prototype.hasOwnProperty;
2915
- var __propIsEnum$8 = Object.prototype.propertyIsEnumerable;
2916
- var __objRest = (source, exclude) => {
3109
+ var __getOwnPropSymbols$a = Object.getOwnPropertySymbols;
3110
+ var __hasOwnProp$a = Object.prototype.hasOwnProperty;
3111
+ var __propIsEnum$a = Object.prototype.propertyIsEnumerable;
3112
+ var __objRest$1 = (source, exclude) => {
2917
3113
  var target = {};
2918
3114
  for (var prop in source)
2919
- if (__hasOwnProp$8.call(source, prop) && exclude.indexOf(prop) < 0)
3115
+ if (__hasOwnProp$a.call(source, prop) && exclude.indexOf(prop) < 0)
2920
3116
  target[prop] = source[prop];
2921
- if (source != null && __getOwnPropSymbols$8)
2922
- for (var prop of __getOwnPropSymbols$8(source)) {
2923
- if (exclude.indexOf(prop) < 0 && __propIsEnum$8.call(source, prop))
3117
+ if (source != null && __getOwnPropSymbols$a)
3118
+ for (var prop of __getOwnPropSymbols$a(source)) {
3119
+ if (exclude.indexOf(prop) < 0 && __propIsEnum$a.call(source, prop))
2924
3120
  target[prop] = source[prop];
2925
3121
  }
2926
3122
  return target;
@@ -2938,7 +3134,7 @@ function VizPanelRenderer({ model }) {
2938
3134
  displayMode,
2939
3135
  hoverHeader,
2940
3136
  menu
2941
- } = _a, state = __objRest(_a, [
3137
+ } = _a, state = __objRest$1(_a, [
2942
3138
  "title",
2943
3139
  "description",
2944
3140
  "options",
@@ -3034,25 +3230,25 @@ function getChromeStatusMessage(data, pluginLoadingError) {
3034
3230
  return data.error ? data.error.message : void 0;
3035
3231
  }
3036
3232
 
3037
- var __defProp$7 = Object.defineProperty;
3038
- var __defProps$5 = Object.defineProperties;
3039
- var __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;
3040
- var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;
3041
- var __hasOwnProp$7 = Object.prototype.hasOwnProperty;
3042
- var __propIsEnum$7 = Object.prototype.propertyIsEnumerable;
3043
- var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3044
- var __spreadValues$7 = (a, b) => {
3233
+ var __defProp$9 = Object.defineProperty;
3234
+ var __defProps$6 = Object.defineProperties;
3235
+ var __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;
3236
+ var __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;
3237
+ var __hasOwnProp$9 = Object.prototype.hasOwnProperty;
3238
+ var __propIsEnum$9 = Object.prototype.propertyIsEnumerable;
3239
+ var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3240
+ var __spreadValues$9 = (a, b) => {
3045
3241
  for (var prop in b || (b = {}))
3046
- if (__hasOwnProp$7.call(b, prop))
3047
- __defNormalProp$7(a, prop, b[prop]);
3048
- if (__getOwnPropSymbols$7)
3049
- for (var prop of __getOwnPropSymbols$7(b)) {
3050
- if (__propIsEnum$7.call(b, prop))
3051
- __defNormalProp$7(a, prop, b[prop]);
3242
+ if (__hasOwnProp$9.call(b, prop))
3243
+ __defNormalProp$9(a, prop, b[prop]);
3244
+ if (__getOwnPropSymbols$9)
3245
+ for (var prop of __getOwnPropSymbols$9(b)) {
3246
+ if (__propIsEnum$9.call(b, prop))
3247
+ __defNormalProp$9(a, prop, b[prop]);
3052
3248
  }
3053
3249
  return a;
3054
3250
  };
3055
- var __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));
3251
+ var __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));
3056
3252
  const displayOverrideRef = "hideSeriesFrom";
3057
3253
  const isHideSeriesOverride = data.isSystemOverrideWithRef(displayOverrideRef);
3058
3254
  function seriesVisibilityConfigFactory(label, mode, fieldConfig, data) {
@@ -3062,13 +3258,13 @@ function seriesVisibilityConfigFactory(label, mode, fieldConfig, data) {
3062
3258
  if (currentIndex < 0) {
3063
3259
  if (mode === ui.SeriesVisibilityChangeMode.ToggleSelection) {
3064
3260
  const override3 = createOverride$1([displayName, ...getNamesOfHiddenFields(overrides, data)]);
3065
- return __spreadProps$5(__spreadValues$7({}, fieldConfig), {
3261
+ return __spreadProps$6(__spreadValues$9({}, fieldConfig), {
3066
3262
  overrides: [...fieldConfig.overrides, override3]
3067
3263
  });
3068
3264
  }
3069
3265
  const displayNames = getDisplayNames(data, displayName);
3070
3266
  const override2 = createOverride$1(displayNames);
3071
- return __spreadProps$5(__spreadValues$7({}, fieldConfig), {
3267
+ return __spreadProps$6(__spreadValues$9({}, fieldConfig), {
3072
3268
  overrides: [...fieldConfig.overrides, override2]
3073
3269
  });
3074
3270
  }
@@ -3081,22 +3277,22 @@ function seriesVisibilityConfigFactory(label, mode, fieldConfig, data) {
3081
3277
  existing = existing.filter((el) => nameOfHiddenFields.indexOf(el) < 0);
3082
3278
  }
3083
3279
  if (existing[0] === displayName && existing.length === 1) {
3084
- return __spreadProps$5(__spreadValues$7({}, fieldConfig), {
3280
+ return __spreadProps$6(__spreadValues$9({}, fieldConfig), {
3085
3281
  overrides: overridesCopy
3086
3282
  });
3087
3283
  }
3088
3284
  const override2 = createOverride$1([displayName, ...nameOfHiddenFields]);
3089
- return __spreadProps$5(__spreadValues$7({}, fieldConfig), {
3285
+ return __spreadProps$6(__spreadValues$9({}, fieldConfig), {
3090
3286
  overrides: [...overridesCopy, override2]
3091
3287
  });
3092
3288
  }
3093
3289
  const override = createExtendedOverride(current, displayName);
3094
3290
  if (allFieldsAreExcluded(override, data)) {
3095
- return __spreadProps$5(__spreadValues$7({}, fieldConfig), {
3291
+ return __spreadProps$6(__spreadValues$9({}, fieldConfig), {
3096
3292
  overrides: overridesCopy
3097
3293
  });
3098
3294
  }
3099
- return __spreadProps$5(__spreadValues$7({}, fieldConfig), {
3295
+ return __spreadProps$6(__spreadValues$9({}, fieldConfig), {
3100
3296
  overrides: [...overridesCopy, override]
3101
3297
  });
3102
3298
  }
@@ -3121,7 +3317,7 @@ function createOverride$1(names, mode = data.ByNamesMatcherMode.exclude, propert
3121
3317
  }
3122
3318
  },
3123
3319
  properties: [
3124
- __spreadProps$5(__spreadValues$7({}, property), {
3320
+ __spreadProps$6(__spreadValues$9({}, property), {
3125
3321
  value: {
3126
3322
  viz: true,
3127
3323
  legend: false,
@@ -3193,32 +3389,32 @@ const getNamesOfHiddenFields = (overrides, data$1) => {
3193
3389
  return names;
3194
3390
  };
3195
3391
 
3196
- var __defProp$6 = Object.defineProperty;
3197
- var __defProps$4 = Object.defineProperties;
3198
- var __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;
3199
- var __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;
3200
- var __hasOwnProp$6 = Object.prototype.hasOwnProperty;
3201
- var __propIsEnum$6 = Object.prototype.propertyIsEnumerable;
3202
- var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3203
- var __spreadValues$6 = (a, b) => {
3392
+ var __defProp$8 = Object.defineProperty;
3393
+ var __defProps$5 = Object.defineProperties;
3394
+ var __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;
3395
+ var __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;
3396
+ var __hasOwnProp$8 = Object.prototype.hasOwnProperty;
3397
+ var __propIsEnum$8 = Object.prototype.propertyIsEnumerable;
3398
+ var __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3399
+ var __spreadValues$8 = (a, b) => {
3204
3400
  for (var prop in b || (b = {}))
3205
- if (__hasOwnProp$6.call(b, prop))
3206
- __defNormalProp$6(a, prop, b[prop]);
3207
- if (__getOwnPropSymbols$6)
3208
- for (var prop of __getOwnPropSymbols$6(b)) {
3209
- if (__propIsEnum$6.call(b, prop))
3210
- __defNormalProp$6(a, prop, b[prop]);
3401
+ if (__hasOwnProp$8.call(b, prop))
3402
+ __defNormalProp$8(a, prop, b[prop]);
3403
+ if (__getOwnPropSymbols$8)
3404
+ for (var prop of __getOwnPropSymbols$8(b)) {
3405
+ if (__propIsEnum$8.call(b, prop))
3406
+ __defNormalProp$8(a, prop, b[prop]);
3211
3407
  }
3212
3408
  return a;
3213
3409
  };
3214
- var __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));
3410
+ var __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));
3215
3411
  const changeSeriesColorConfigFactory = (label, color, fieldConfig) => {
3216
3412
  const { overrides } = fieldConfig;
3217
3413
  const currentIndex = fieldConfig.overrides.findIndex((override) => {
3218
3414
  return override.matcher.id === data.FieldMatcherID.byName && override.matcher.options === label;
3219
3415
  });
3220
3416
  if (currentIndex < 0) {
3221
- return __spreadProps$4(__spreadValues$6({}, fieldConfig), {
3417
+ return __spreadProps$5(__spreadValues$8({}, fieldConfig), {
3222
3418
  overrides: [...fieldConfig.overrides, createOverride(label, color)]
3223
3419
  });
3224
3420
  }
@@ -3226,19 +3422,19 @@ const changeSeriesColorConfigFactory = (label, color, fieldConfig) => {
3226
3422
  const existing = overridesCopy[currentIndex];
3227
3423
  const propertyIndex = existing.properties.findIndex((p) => p.id === "color");
3228
3424
  if (propertyIndex < 0) {
3229
- overridesCopy[currentIndex] = __spreadProps$4(__spreadValues$6({}, existing), {
3425
+ overridesCopy[currentIndex] = __spreadProps$5(__spreadValues$8({}, existing), {
3230
3426
  properties: [...existing.properties, createProperty(color)]
3231
3427
  });
3232
- return __spreadProps$4(__spreadValues$6({}, fieldConfig), {
3428
+ return __spreadProps$5(__spreadValues$8({}, fieldConfig), {
3233
3429
  overrides: overridesCopy
3234
3430
  });
3235
3431
  }
3236
3432
  const propertiesCopy = Array.from(existing.properties);
3237
3433
  propertiesCopy[propertyIndex] = createProperty(color);
3238
- overridesCopy[currentIndex] = __spreadProps$4(__spreadValues$6({}, existing), {
3434
+ overridesCopy[currentIndex] = __spreadProps$5(__spreadValues$8({}, existing), {
3239
3435
  properties: propertiesCopy
3240
3436
  });
3241
- return __spreadProps$4(__spreadValues$6({}, fieldConfig), {
3437
+ return __spreadProps$5(__spreadValues$8({}, fieldConfig), {
3242
3438
  overrides: overridesCopy
3243
3439
  });
3244
3440
  };
@@ -3261,28 +3457,28 @@ const createProperty = (color) => {
3261
3457
  };
3262
3458
  };
3263
3459
 
3264
- var __defProp$5 = Object.defineProperty;
3265
- var __defProps$3 = Object.defineProperties;
3266
- var __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;
3267
- var __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;
3268
- var __hasOwnProp$5 = Object.prototype.hasOwnProperty;
3269
- var __propIsEnum$5 = Object.prototype.propertyIsEnumerable;
3270
- var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3271
- var __spreadValues$5 = (a, b) => {
3460
+ var __defProp$7 = Object.defineProperty;
3461
+ var __defProps$4 = Object.defineProperties;
3462
+ var __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;
3463
+ var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;
3464
+ var __hasOwnProp$7 = Object.prototype.hasOwnProperty;
3465
+ var __propIsEnum$7 = Object.prototype.propertyIsEnumerable;
3466
+ var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3467
+ var __spreadValues$7 = (a, b) => {
3272
3468
  for (var prop in b || (b = {}))
3273
- if (__hasOwnProp$5.call(b, prop))
3274
- __defNormalProp$5(a, prop, b[prop]);
3275
- if (__getOwnPropSymbols$5)
3276
- for (var prop of __getOwnPropSymbols$5(b)) {
3277
- if (__propIsEnum$5.call(b, prop))
3278
- __defNormalProp$5(a, prop, b[prop]);
3469
+ if (__hasOwnProp$7.call(b, prop))
3470
+ __defNormalProp$7(a, prop, b[prop]);
3471
+ if (__getOwnPropSymbols$7)
3472
+ for (var prop of __getOwnPropSymbols$7(b)) {
3473
+ if (__propIsEnum$7.call(b, prop))
3474
+ __defNormalProp$7(a, prop, b[prop]);
3279
3475
  }
3280
3476
  return a;
3281
3477
  };
3282
- var __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));
3478
+ var __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));
3283
3479
  class VizPanel extends SceneObjectBase {
3284
3480
  constructor(state) {
3285
- super(__spreadValues$5({
3481
+ super(__spreadValues$7({
3286
3482
  options: {},
3287
3483
  fieldConfig: { defaults: {}, overrides: [] },
3288
3484
  title: "Title",
@@ -3343,8 +3539,8 @@ class VizPanel extends SceneObjectBase {
3343
3539
  sortDesc = !sortDesc;
3344
3540
  sortBy = sortKey;
3345
3541
  }
3346
- this.onOptionsChange(__spreadProps$3(__spreadValues$5({}, this.state.options), {
3347
- legend: __spreadProps$3(__spreadValues$5({}, legendOptions), { sortBy, sortDesc })
3542
+ this.onOptionsChange(__spreadProps$4(__spreadValues$7({}, this.state.options), {
3543
+ legend: __spreadProps$4(__spreadValues$7({}, legendOptions), { sortBy, sortDesc })
3348
3544
  }));
3349
3545
  };
3350
3546
  this._panelContext = {
@@ -3419,7 +3615,7 @@ class VizPanel extends SceneObjectBase {
3419
3615
  if (rawData.structureRev == null && newFrames && prevFrames && !data.compareArrayValues(newFrames, prevFrames, data.compareDataFrameStructures)) {
3420
3616
  this._structureRev++;
3421
3617
  }
3422
- this._dataWithFieldConfig = __spreadProps$3(__spreadValues$5({}, rawData), {
3618
+ this._dataWithFieldConfig = __spreadProps$4(__spreadValues$7({}, rawData), {
3423
3619
  structureRev: this._structureRev,
3424
3620
  series: data.applyFieldOverrides({
3425
3621
  data: newFrames,
@@ -3635,30 +3831,30 @@ function SceneTimePickerRenderer({ model }) {
3635
3831
  });
3636
3832
  }
3637
3833
 
3638
- var __defProp$4 = Object.defineProperty;
3639
- var __defProps$2 = Object.defineProperties;
3640
- var __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;
3641
- var __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;
3642
- var __hasOwnProp$4 = Object.prototype.hasOwnProperty;
3643
- var __propIsEnum$4 = Object.prototype.propertyIsEnumerable;
3644
- var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3645
- var __spreadValues$4 = (a, b) => {
3834
+ var __defProp$6 = Object.defineProperty;
3835
+ var __defProps$3 = Object.defineProperties;
3836
+ var __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;
3837
+ var __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;
3838
+ var __hasOwnProp$6 = Object.prototype.hasOwnProperty;
3839
+ var __propIsEnum$6 = Object.prototype.propertyIsEnumerable;
3840
+ var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3841
+ var __spreadValues$6 = (a, b) => {
3646
3842
  for (var prop in b || (b = {}))
3647
- if (__hasOwnProp$4.call(b, prop))
3648
- __defNormalProp$4(a, prop, b[prop]);
3649
- if (__getOwnPropSymbols$4)
3650
- for (var prop of __getOwnPropSymbols$4(b)) {
3651
- if (__propIsEnum$4.call(b, prop))
3652
- __defNormalProp$4(a, prop, b[prop]);
3843
+ if (__hasOwnProp$6.call(b, prop))
3844
+ __defNormalProp$6(a, prop, b[prop]);
3845
+ if (__getOwnPropSymbols$6)
3846
+ for (var prop of __getOwnPropSymbols$6(b)) {
3847
+ if (__propIsEnum$6.call(b, prop))
3848
+ __defNormalProp$6(a, prop, b[prop]);
3653
3849
  }
3654
3850
  return a;
3655
3851
  };
3656
- var __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));
3852
+ var __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));
3657
3853
  const DEFAULT_INTERVALS = ["5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d"];
3658
3854
  class SceneRefreshPicker extends SceneObjectBase {
3659
3855
  constructor(state) {
3660
3856
  var _a;
3661
- super(__spreadProps$2(__spreadValues$4({
3857
+ super(__spreadProps$3(__spreadValues$6({
3662
3858
  refresh: ""
3663
3859
  }, state), {
3664
3860
  intervals: (_a = state.intervals) != null ? _a : DEFAULT_INTERVALS
@@ -3769,6 +3965,22 @@ SceneControlsSpacer.Component = (_props) => {
3769
3965
  });
3770
3966
  };
3771
3967
 
3968
+ var __defProp$5 = Object.defineProperty;
3969
+ var __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;
3970
+ var __hasOwnProp$5 = Object.prototype.hasOwnProperty;
3971
+ var __propIsEnum$5 = Object.prototype.propertyIsEnumerable;
3972
+ var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3973
+ var __spreadValues$5 = (a, b) => {
3974
+ for (var prop in b || (b = {}))
3975
+ if (__hasOwnProp$5.call(b, prop))
3976
+ __defNormalProp$5(a, prop, b[prop]);
3977
+ if (__getOwnPropSymbols$5)
3978
+ for (var prop of __getOwnPropSymbols$5(b)) {
3979
+ if (__propIsEnum$5.call(b, prop))
3980
+ __defNormalProp$5(a, prop, b[prop]);
3981
+ }
3982
+ return a;
3983
+ };
3772
3984
  class SceneFlexLayout extends SceneObjectBase {
3773
3985
  toggleDirection() {
3774
3986
  this.setState({
@@ -3780,9 +3992,12 @@ class SceneFlexLayout extends SceneObjectBase {
3780
3992
  }
3781
3993
  }
3782
3994
  SceneFlexLayout.Component = SceneFlexLayoutRenderer;
3783
- function SceneFlexLayoutRenderer({ model }) {
3784
- const { direction = "row", children, wrap } = model.useState();
3785
- const style = {
3995
+ function SceneFlexLayoutRenderer({ model, parentDirection }) {
3996
+ const { direction = "row", children, wrap, isHidden } = model.useState();
3997
+ if (isHidden) {
3998
+ return null;
3999
+ }
4000
+ let style = {
3786
4001
  display: "flex",
3787
4002
  flexGrow: 1,
3788
4003
  flexDirection: direction,
@@ -3791,28 +4006,33 @@ function SceneFlexLayoutRenderer({ model }) {
3791
4006
  alignContent: "baseline",
3792
4007
  minHeight: 0
3793
4008
  };
4009
+ if (parentDirection) {
4010
+ style = __spreadValues$5(__spreadValues$5({}, getFlexItemItemStyles(parentDirection || "row", model)), style);
4011
+ }
3794
4012
  return /* @__PURE__ */ React__default["default"].createElement("div", {
3795
4013
  style
3796
- }, children.map((item) => /* @__PURE__ */ React__default["default"].createElement(item.Component, {
3797
- key: item.state.key,
3798
- model: item
3799
- })));
4014
+ }, children.map((item) => {
4015
+ const Component = item.Component;
4016
+ return /* @__PURE__ */ React__default["default"].createElement(Component, {
4017
+ key: item.state.key,
4018
+ model: item,
4019
+ parentDirection: direction
4020
+ });
4021
+ }));
3800
4022
  }
3801
4023
  class SceneFlexItem extends SceneObjectBase {
3802
4024
  }
3803
4025
  SceneFlexItem.Component = SceneFlexItemRenderer;
3804
- function SceneFlexItemRenderer({ model }) {
3805
- const { body } = model.useState();
3806
- const parent = model.parent;
4026
+ function SceneFlexItemRenderer({ model, parentDirection }) {
4027
+ const { body, isHidden } = model.useState();
4028
+ if (!body || isHidden) {
4029
+ return null;
4030
+ }
3807
4031
  let style = {};
3808
- if (parent && isSceneFlexLayout(parent)) {
3809
- style = getFlexItemItemStyles(parent.state.direction || "row", model);
3810
- } else {
4032
+ if (!parentDirection) {
3811
4033
  throw new Error("SceneFlexItem must be a child of SceneFlexLayout");
3812
4034
  }
3813
- if (!body) {
3814
- return null;
3815
- }
4035
+ style = getFlexItemItemStyles(parentDirection, model);
3816
4036
  return /* @__PURE__ */ React__default["default"].createElement("div", {
3817
4037
  style
3818
4038
  }, /* @__PURE__ */ React__default["default"].createElement(body.Component, {
@@ -3855,15 +4075,155 @@ function getFlexItemItemStyles(direction, item) {
3855
4075
  }
3856
4076
  return style;
3857
4077
  }
3858
- function isSceneFlexLayout(model) {
3859
- return model instanceof SceneFlexLayout;
3860
- }
3861
4078
 
3862
4079
  const DEFAULT_PANEL_SPAN = 4;
3863
4080
  const GRID_CELL_HEIGHT = 30;
3864
4081
  const GRID_CELL_VMARGIN = 8;
3865
4082
  const GRID_COLUMN_COUNT = 24;
3866
4083
 
4084
+ var __defProp$4 = Object.defineProperty;
4085
+ var __defProps$2 = Object.defineProperties;
4086
+ var __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;
4087
+ var __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;
4088
+ var __hasOwnProp$4 = Object.prototype.hasOwnProperty;
4089
+ var __propIsEnum$4 = Object.prototype.propertyIsEnumerable;
4090
+ var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4091
+ var __spreadValues$4 = (a, b) => {
4092
+ for (var prop in b || (b = {}))
4093
+ if (__hasOwnProp$4.call(b, prop))
4094
+ __defNormalProp$4(a, prop, b[prop]);
4095
+ if (__getOwnPropSymbols$4)
4096
+ for (var prop of __getOwnPropSymbols$4(b)) {
4097
+ if (__propIsEnum$4.call(b, prop))
4098
+ __defNormalProp$4(a, prop, b[prop]);
4099
+ }
4100
+ return a;
4101
+ };
4102
+ var __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));
4103
+ var __objRest = (source, exclude) => {
4104
+ var target = {};
4105
+ for (var prop in source)
4106
+ if (__hasOwnProp$4.call(source, prop) && exclude.indexOf(prop) < 0)
4107
+ target[prop] = source[prop];
4108
+ if (source != null && __getOwnPropSymbols$4)
4109
+ for (var prop of __getOwnPropSymbols$4(source)) {
4110
+ if (exclude.indexOf(prop) < 0 && __propIsEnum$4.call(source, prop))
4111
+ target[prop] = source[prop];
4112
+ }
4113
+ return target;
4114
+ };
4115
+ function useUniqueId() {
4116
+ var _a;
4117
+ const idRefLazy = React.useRef(void 0);
4118
+ (_a = idRefLazy.current) != null ? _a : idRefLazy.current = lodash.uniqueId();
4119
+ return idRefLazy.current;
4120
+ }
4121
+ function LazyLoader(_a) {
4122
+ var _b = _a, { children, width, height, onLoad, onChange, style } = _b, rest = __objRest(_b, ["children", "width", "height", "onLoad", "onChange", "style"]);
4123
+ const id = useUniqueId();
4124
+ const [loaded, setLoaded] = React.useState(false);
4125
+ const [isInView, setIsInView] = React.useState(false);
4126
+ const wrapperRef = React.useRef(null);
4127
+ reactUse.useEffectOnce(() => {
4128
+ LazyLoader.addCallback(id, (entry) => {
4129
+ if (!loaded && entry.isIntersecting) {
4130
+ setLoaded(true);
4131
+ onLoad == null ? void 0 : onLoad();
4132
+ }
4133
+ setIsInView(entry.isIntersecting);
4134
+ onChange == null ? void 0 : onChange(entry.isIntersecting);
4135
+ });
4136
+ const wrapperEl = wrapperRef.current;
4137
+ if (wrapperEl) {
4138
+ LazyLoader.observer.observe(wrapperEl);
4139
+ }
4140
+ return () => {
4141
+ delete LazyLoader.callbacks[id];
4142
+ wrapperEl && LazyLoader.observer.unobserve(wrapperEl);
4143
+ if (Object.keys(LazyLoader.callbacks).length === 0) {
4144
+ LazyLoader.observer.disconnect();
4145
+ }
4146
+ };
4147
+ });
4148
+ return /* @__PURE__ */ React__default["default"].createElement("div", __spreadValues$4({
4149
+ id,
4150
+ ref: wrapperRef,
4151
+ style: __spreadProps$2(__spreadValues$4({}, style), { width, height })
4152
+ }, rest), loaded && (typeof children === "function" ? children({ isInView }) : children));
4153
+ }
4154
+ LazyLoader.callbacks = {};
4155
+ LazyLoader.addCallback = (id, c) => LazyLoader.callbacks[id] = c;
4156
+ LazyLoader.observer = new IntersectionObserver(
4157
+ (entries) => {
4158
+ for (const entry of entries) {
4159
+ LazyLoader.callbacks[entry.target.id](entry);
4160
+ }
4161
+ },
4162
+ { rootMargin: "100px" }
4163
+ );
4164
+
4165
+ function SceneGridLayoutRenderer({ model }) {
4166
+ const { children, isLazy } = model.useState();
4167
+ const LazyWrapper = isLazy ? LazyLoader : ({ style, children: children2 }) => /* @__PURE__ */ React__default["default"].createElement("div", {
4168
+ style
4169
+ }, children2);
4170
+ validateChildrenSize(children);
4171
+ return /* @__PURE__ */ React__default["default"].createElement(AutoSizer__default["default"], {
4172
+ disableHeight: true
4173
+ }, ({ width }) => {
4174
+ if (width === 0) {
4175
+ return null;
4176
+ }
4177
+ const layout = model.buildGridLayout(width);
4178
+ const cellWidth = (width - (GRID_COLUMN_COUNT - 1) * GRID_CELL_VMARGIN) / GRID_COLUMN_COUNT;
4179
+ return /* @__PURE__ */ React__default["default"].createElement("div", {
4180
+ style: { width: `${width}px`, height: "100%" }
4181
+ }, /* @__PURE__ */ React__default["default"].createElement(ReactGridLayout__default["default"], {
4182
+ width,
4183
+ isDraggable: width > 768,
4184
+ isResizable: false,
4185
+ containerPadding: [0, 0],
4186
+ useCSSTransforms: false,
4187
+ margin: [GRID_CELL_VMARGIN, GRID_CELL_VMARGIN],
4188
+ cols: GRID_COLUMN_COUNT,
4189
+ rowHeight: GRID_CELL_HEIGHT,
4190
+ draggableHandle: `.grid-drag-handle-${model.state.key}`,
4191
+ draggableCancel: ".grid-drag-cancel",
4192
+ layout,
4193
+ onDragStop: model.onDragStop,
4194
+ onResizeStop: model.onResizeStop,
4195
+ onLayoutChange: model.onLayoutChange,
4196
+ isBounded: false
4197
+ }, layout.map((gridItem) => {
4198
+ var _a, _b;
4199
+ const sceneChild = model.getSceneLayoutChild(gridItem.i);
4200
+ const pixelWidth = cellToPixelSize((_a = sceneChild.state.width) != null ? _a : 0, cellWidth, GRID_CELL_VMARGIN);
4201
+ const pixelHeight = cellToPixelSize((_b = sceneChild.state.height) != null ? _b : 0, GRID_CELL_HEIGHT, GRID_CELL_VMARGIN);
4202
+ return /* @__PURE__ */ React__default["default"].createElement("div", {
4203
+ style: { display: "flex" },
4204
+ key: sceneChild.state.key
4205
+ }, /* @__PURE__ */ React__default["default"].createElement(LazyWrapper, {
4206
+ width: pixelWidth,
4207
+ height: pixelHeight,
4208
+ style: { display: "flex" }
4209
+ }, /* @__PURE__ */ React__default["default"].createElement(sceneChild.Component, {
4210
+ model: sceneChild,
4211
+ key: sceneChild.state.key
4212
+ })));
4213
+ })));
4214
+ });
4215
+ }
4216
+ function validateChildrenSize(children) {
4217
+ if (children.some(
4218
+ (c) => c.state.height === void 0 || c.state.width === void 0 || c.state.x === void 0 || c.state.y === void 0
4219
+ )) {
4220
+ throw new Error("All children must have a size specified");
4221
+ }
4222
+ }
4223
+ function cellToPixelSize(sizeInCells, sizeOfCellInPx, margin = 0) {
4224
+ return Math.max(Math.round(sizeInCells * (sizeOfCellInPx + margin) - margin), 0);
4225
+ }
4226
+
3867
4227
  function SceneDragHandle({ className, dragClass }) {
3868
4228
  return /* @__PURE__ */ React__default["default"].createElement("div", {
3869
4229
  className: `${className} ${dragClass}`,
@@ -4215,46 +4575,6 @@ const _SceneGridLayout = class extends SceneObjectBase {
4215
4575
  };
4216
4576
  let SceneGridLayout = _SceneGridLayout;
4217
4577
  SceneGridLayout.Component = SceneGridLayoutRenderer;
4218
- function SceneGridLayoutRenderer({ model }) {
4219
- const { children } = model.useState();
4220
- validateChildrenSize(children);
4221
- return /* @__PURE__ */ React__default["default"].createElement(AutoSizer__default["default"], {
4222
- disableHeight: true
4223
- }, ({ width }) => {
4224
- if (width === 0) {
4225
- return null;
4226
- }
4227
- const layout = model.buildGridLayout(width);
4228
- return /* @__PURE__ */ React__default["default"].createElement("div", {
4229
- style: { width: `${width}px`, height: "100%" }
4230
- }, /* @__PURE__ */ React__default["default"].createElement(ReactGridLayout__default["default"], {
4231
- width,
4232
- isDraggable: width > 768,
4233
- isResizable: false,
4234
- containerPadding: [0, 0],
4235
- useCSSTransforms: false,
4236
- margin: [GRID_CELL_VMARGIN, GRID_CELL_VMARGIN],
4237
- cols: GRID_COLUMN_COUNT,
4238
- rowHeight: GRID_CELL_HEIGHT,
4239
- draggableHandle: `.grid-drag-handle-${model.state.key}`,
4240
- draggableCancel: ".grid-drag-cancel",
4241
- layout,
4242
- onDragStop: model.onDragStop,
4243
- onResizeStop: model.onResizeStop,
4244
- onLayoutChange: model.onLayoutChange,
4245
- isBounded: false
4246
- }, layout.map((gridItem) => {
4247
- const sceneChild = model.getSceneLayoutChild(gridItem.i);
4248
- return /* @__PURE__ */ React__default["default"].createElement("div", {
4249
- key: sceneChild.state.key,
4250
- style: { display: "flex" }
4251
- }, /* @__PURE__ */ React__default["default"].createElement(sceneChild.Component, {
4252
- model: sceneChild,
4253
- key: sceneChild.state.key
4254
- }));
4255
- })));
4256
- });
4257
- }
4258
4578
  class SceneGridItem extends SceneObjectBase {
4259
4579
  }
4260
4580
  SceneGridItem.Component = SceneGridItemRenderer;
@@ -4271,13 +4591,6 @@ function SceneGridItemRenderer({ model }) {
4271
4591
  model: body
4272
4592
  });
4273
4593
  }
4274
- function validateChildrenSize(children) {
4275
- if (children.find(
4276
- (c) => c.state.height === void 0 || c.state.width === void 0 || c.state.x === void 0 || c.state.y === void 0
4277
- )) {
4278
- throw new Error("All children must have a size specified");
4279
- }
4280
- }
4281
4594
  function isItemSizeEqual(a, b) {
4282
4595
  return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;
4283
4596
  }
@@ -4296,22 +4609,6 @@ function isSceneGridLayout(child) {
4296
4609
  return child instanceof SceneGridLayout;
4297
4610
  }
4298
4611
 
4299
- class SceneApp extends SceneObjectBase {
4300
- }
4301
- SceneApp.Component = ({ model }) => {
4302
- const { pages } = model.useState();
4303
- return /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Switch, null, pages.map((page) => /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Route, {
4304
- key: page.state.url,
4305
- exact: false,
4306
- path: page.state.url,
4307
- render: () => {
4308
- return page && /* @__PURE__ */ React__default["default"].createElement(page.Component, {
4309
- model: page
4310
- });
4311
- }
4312
- })));
4313
- };
4314
-
4315
4612
  var __defProp$1 = Object.defineProperty;
4316
4613
  var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;
4317
4614
  var __hasOwnProp$1 = Object.prototype.hasOwnProperty;
@@ -4343,47 +4640,205 @@ function getLinkUrlWithAppUrlState(path, params, preserveParams) {
4343
4640
  }
4344
4641
  return data.urlUtil.renderUrl(path, paramsCopy);
4345
4642
  }
4643
+ function renderSceneComponentWithRouteProps(sceneObject, routeProps) {
4644
+ return React__default["default"].createElement(sceneObject.Component, { model: sceneObject, routeProps });
4645
+ }
4646
+
4647
+ class SceneApp extends SceneObjectBase {
4648
+ }
4649
+ SceneApp.Component = ({ model }) => {
4650
+ const { pages } = model.useState();
4651
+ return /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Switch, null, pages.map((page) => /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Route, {
4652
+ key: page.state.url,
4653
+ exact: false,
4654
+ path: page.state.url,
4655
+ render: (props) => renderSceneComponentWithRouteProps(page, props)
4656
+ })));
4657
+ };
4658
+
4659
+ var __defProp = Object.defineProperty;
4660
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
4661
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4662
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
4663
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4664
+ var __spreadValues = (a, b) => {
4665
+ for (var prop in b || (b = {}))
4666
+ if (__hasOwnProp.call(b, prop))
4667
+ __defNormalProp(a, prop, b[prop]);
4668
+ if (__getOwnPropSymbols)
4669
+ for (var prop of __getOwnPropSymbols(b)) {
4670
+ if (__propIsEnum.call(b, prop))
4671
+ __defNormalProp(a, prop, b[prop]);
4672
+ }
4673
+ return a;
4674
+ };
4675
+ class SceneReactObject extends SceneObjectBase {
4676
+ }
4677
+ SceneReactObject.Component = ({ model }) => {
4678
+ const { component: Component, props, reactNode } = model.useState();
4679
+ if (Component) {
4680
+ return /* @__PURE__ */ React__default["default"].createElement(Component, __spreadValues({}, props));
4681
+ }
4682
+ if (reactNode) {
4683
+ return reactNode;
4684
+ }
4685
+ return null;
4686
+ };
4687
+
4688
+ function SceneAppPageView({ page, routeProps }) {
4689
+ const containerPage = getParentPageIfTab(page);
4690
+ const containerState = containerPage.useState();
4691
+ const params = useAppQueryParams();
4692
+ const scene = page.getScene(routeProps.match);
4693
+ const [initialized, setInitialized] = React.useState(false);
4694
+ React.useLayoutEffect(() => {
4695
+ if (!initialized) {
4696
+ containerPage.initializeScene(scene);
4697
+ setInitialized(true);
4698
+ }
4699
+ }, [initialized, scene, containerPage]);
4700
+ if (!initialized) {
4701
+ return null;
4702
+ }
4703
+ const pageNav = {
4704
+ text: containerState.title,
4705
+ subTitle: containerState.subTitle,
4706
+ img: containerState.titleImg,
4707
+ icon: containerState.titleIcon,
4708
+ url: getLinkUrlWithAppUrlState(containerState.url, params, containerState.preserveUrlKeys),
4709
+ hideFromBreadcrumbs: containerState.hideFromBreadcrumbs,
4710
+ parentItem: getParentBreadcrumbs(
4711
+ containerState.getParentPage ? containerState.getParentPage() : page.parent,
4712
+ params
4713
+ )
4714
+ };
4715
+ if (containerState.tabs) {
4716
+ pageNav.children = containerState.tabs.map((tab) => {
4717
+ return {
4718
+ text: tab.state.title,
4719
+ active: page === tab,
4720
+ url: getLinkUrlWithAppUrlState(tab.state.url, params, tab.state.preserveUrlKeys),
4721
+ parentItem: pageNav
4722
+ };
4723
+ });
4724
+ }
4725
+ let pageActions = void 0;
4726
+ if (containerState.controls) {
4727
+ pageActions = containerState.controls.map((control) => /* @__PURE__ */ React__default["default"].createElement(control.Component, {
4728
+ model: control,
4729
+ key: control.state.key
4730
+ }));
4731
+ }
4732
+ return /* @__PURE__ */ React__default["default"].createElement(runtime.PluginPage, {
4733
+ pageNav,
4734
+ actions: pageActions
4735
+ }, /* @__PURE__ */ React__default["default"].createElement(scene.Component, {
4736
+ model: scene
4737
+ }));
4738
+ }
4739
+ function getParentPageIfTab(page) {
4740
+ if (page.parent instanceof SceneAppPage) {
4741
+ return page.parent;
4742
+ }
4743
+ return page;
4744
+ }
4745
+ function getParentBreadcrumbs(parent, params) {
4746
+ if (parent instanceof SceneAppPage) {
4747
+ return {
4748
+ text: parent.state.title,
4749
+ url: getLinkUrlWithAppUrlState(parent.state.url, params, parent.state.preserveUrlKeys),
4750
+ hideFromBreadcrumbs: parent.state.hideFromBreadcrumbs,
4751
+ parentItem: getParentBreadcrumbs(
4752
+ parent.state.getParentPage ? parent.state.getParentPage() : parent.parent,
4753
+ params
4754
+ )
4755
+ };
4756
+ }
4757
+ return void 0;
4758
+ }
4759
+ function SceneAppDrilldownViewRender({ drilldown, parent, routeProps }) {
4760
+ return renderSceneComponentWithRouteProps(parent.getDrilldownPage(drilldown, routeProps.match), routeProps);
4761
+ }
4346
4762
 
4347
- const sceneCache = /* @__PURE__ */ new Map();
4348
4763
  class SceneAppPage extends SceneObjectBase {
4764
+ constructor(state) {
4765
+ super(state);
4766
+ this._sceneCache = /* @__PURE__ */ new Map();
4767
+ this._drilldownCache = /* @__PURE__ */ new Map();
4768
+ this.addActivationHandler(() => {
4769
+ return () => getUrlSyncManager().cleanUp(this);
4770
+ });
4771
+ }
4772
+ initializeScene(scene) {
4773
+ this.setState({ initializedScene: scene });
4774
+ getUrlSyncManager().initSync(this);
4775
+ }
4776
+ getScene(routeMatch) {
4777
+ let scene = this._sceneCache.get(routeMatch.url);
4778
+ if (scene) {
4779
+ return scene;
4780
+ }
4781
+ if (!this.state.getScene) {
4782
+ throw new Error("Missing getScene on SceneAppPage " + this.state.title);
4783
+ }
4784
+ scene = this.state.getScene(routeMatch);
4785
+ this._sceneCache.set(routeMatch.url, scene);
4786
+ return scene;
4787
+ }
4788
+ getDrilldownPage(drilldown, routeMatch) {
4789
+ let page = this._drilldownCache.get(routeMatch.url);
4790
+ if (page) {
4791
+ return page;
4792
+ }
4793
+ page = drilldown.getPage(routeMatch, this);
4794
+ this._drilldownCache.set(routeMatch.url, page);
4795
+ return page;
4796
+ }
4349
4797
  }
4350
4798
  SceneAppPage.Component = SceneAppPageRenderer;
4351
- function SceneAppPageRenderer({ model }) {
4352
- var _a;
4353
- const { tabs, drilldowns, url, routePath } = model.state;
4799
+ function SceneAppPageRenderer({ model, routeProps }) {
4800
+ var _a, _b;
4801
+ const { tabs, drilldowns } = model.useState();
4354
4802
  const routes = [];
4355
- if (tabs) {
4356
- for (const page2 of tabs) {
4803
+ if (tabs && tabs.length > 0) {
4804
+ for (let tabIndex = 0; tabIndex < tabs.length; tabIndex++) {
4805
+ const tab = tabs[tabIndex];
4806
+ if (tabIndex === 0) {
4807
+ routes.push(
4808
+ /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Route, {
4809
+ exact: true,
4810
+ key: model.state.url,
4811
+ path: (_a = model.state.routePath) != null ? _a : model.state.url,
4812
+ render: (props) => renderSceneComponentWithRouteProps(tab, props)
4813
+ })
4814
+ );
4815
+ }
4357
4816
  routes.push(
4358
4817
  /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Route, {
4359
4818
  exact: true,
4360
- key: page2.state.url,
4361
- path: (_a = page2.state.routePath) != null ? _a : page2.state.url,
4362
- render: () => {
4363
- return /* @__PURE__ */ React__default["default"].createElement(page2.Component, {
4364
- model: page2
4365
- });
4366
- }
4819
+ key: tab.state.url,
4820
+ path: (_b = tab.state.routePath) != null ? _b : tab.state.url,
4821
+ render: (props) => renderSceneComponentWithRouteProps(tab, props)
4367
4822
  })
4368
4823
  );
4369
- if (page2.state.drilldowns) {
4370
- for (const drilldown of page2.state.drilldowns) {
4824
+ if (tab.state.drilldowns) {
4825
+ for (const drilldown of tab.state.drilldowns) {
4371
4826
  routes.push(
4372
4827
  /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Route, {
4373
4828
  exact: false,
4374
4829
  key: drilldown.routePath,
4375
4830
  path: drilldown.routePath,
4376
- render: () => {
4377
- return /* @__PURE__ */ React__default["default"].createElement(SceneAppDrilldownViewRender, {
4378
- drilldown,
4379
- parent: page2
4380
- });
4381
- }
4831
+ render: (props) => /* @__PURE__ */ React__default["default"].createElement(SceneAppDrilldownViewRender, {
4832
+ drilldown,
4833
+ parent: tab,
4834
+ routeProps: props
4835
+ })
4382
4836
  })
4383
4837
  );
4384
4838
  }
4385
4839
  }
4386
4840
  }
4841
+ routes.push(getFallbackRoute(model, routeProps));
4387
4842
  return /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Switch, null, routes);
4388
4843
  }
4389
4844
  if (drilldowns) {
@@ -4393,128 +4848,74 @@ function SceneAppPageRenderer({ model }) {
4393
4848
  key: drilldown.routePath,
4394
4849
  exact: false,
4395
4850
  path: drilldown.routePath,
4396
- render: () => {
4397
- return /* @__PURE__ */ React__default["default"].createElement(SceneAppDrilldownViewRender, {
4398
- drilldown,
4399
- parent: model
4400
- });
4401
- }
4851
+ render: (props) => /* @__PURE__ */ React__default["default"].createElement(SceneAppDrilldownViewRender, {
4852
+ drilldown,
4853
+ parent: model,
4854
+ routeProps: props
4855
+ })
4402
4856
  })
4403
4857
  );
4404
4858
  }
4405
4859
  }
4406
- let page = /* @__PURE__ */ React__default["default"].createElement(ScenePageRenderer, {
4407
- page: model
4408
- });
4409
- if (model.parent instanceof SceneAppPage) {
4410
- page = /* @__PURE__ */ React__default["default"].createElement(ScenePageRenderer, {
4411
- page: model.parent,
4412
- activeTab: model,
4413
- tabs: model.parent.state.tabs
4860
+ if (isCurrentPageRouteMatch(model, routeProps.match)) {
4861
+ return /* @__PURE__ */ React__default["default"].createElement(SceneAppPageView, {
4862
+ page: model,
4863
+ routeProps
4414
4864
  });
4415
4865
  }
4416
- return /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Switch, null, /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Route, {
4417
- key: url,
4418
- exact: true,
4419
- path: routePath != null ? routePath : url,
4420
- render: () => {
4421
- return page;
4422
- }
4423
- }), routes);
4866
+ routes.push(getFallbackRoute(model, routeProps));
4867
+ return /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Switch, null, routes);
4424
4868
  }
4425
- function ScenePageRenderer({ page, tabs, activeTab }) {
4426
- const [isInitialized, setIsInitialized] = React.useState(false);
4427
- const params = useAppQueryParams();
4428
- const routeMatch = reactRouterDom.useRouteMatch();
4429
- let scene = sceneCache.get(routeMatch.url);
4430
- if (!scene) {
4431
- scene = activeTab ? activeTab.state.getScene(routeMatch) : page.state.getScene(routeMatch);
4432
- sceneCache.set(routeMatch.url, scene);
4433
- }
4434
- React.useEffect(() => {
4435
- if (!isInitialized && scene) {
4436
- scene.initUrlSync();
4437
- setIsInitialized(true);
4869
+ function getFallbackRoute(page, routeProps) {
4870
+ return /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Route, {
4871
+ key: "fallback route",
4872
+ render: (props) => {
4873
+ const fallbackPage = getDefaultFallbackPage();
4874
+ return /* @__PURE__ */ React__default["default"].createElement(SceneAppPageView, {
4875
+ page: fallbackPage,
4876
+ routeProps
4877
+ });
4438
4878
  }
4439
- }, [isInitialized, scene]);
4440
- if (!isInitialized) {
4441
- return null;
4442
- }
4443
- const pageNav = {
4444
- text: page.state.title,
4445
- subTitle: page.state.subTitle,
4446
- img: page.state.titleImg,
4447
- icon: page.state.titleIcon,
4448
- url: getLinkUrlWithAppUrlState(page.state.url, params, page.state.preserveUrlKeys),
4449
- hideFromBreadcrumbs: page.state.hideFromBreadcrumbs,
4450
- parentItem: getParentBreadcrumbs(page.state.getParentPage ? page.state.getParentPage() : page.parent, params)
4451
- };
4452
- if (tabs) {
4453
- pageNav.children = tabs.map((tab) => {
4454
- return {
4455
- text: tab.state.title,
4456
- active: activeTab === tab,
4457
- url: getLinkUrlWithAppUrlState(tab.state.url, params, tab.state.preserveUrlKeys),
4458
- parentItem: pageNav
4459
- };
4460
- });
4461
- }
4462
- return /* @__PURE__ */ React__default["default"].createElement(runtime.PluginPage, {
4463
- pageNav
4464
- }, /* @__PURE__ */ React__default["default"].createElement(scene.Component, {
4465
- model: scene
4466
- }));
4467
- }
4468
- function SceneAppDrilldownViewRender(props) {
4469
- const routeMatch = reactRouterDom.useRouteMatch();
4470
- const scene = props.drilldown.getPage(routeMatch, props.parent);
4471
- return /* @__PURE__ */ React__default["default"].createElement(scene.Component, {
4472
- model: scene
4473
4879
  });
4474
4880
  }
4475
- function getParentBreadcrumbs(parent, params) {
4476
- if (parent instanceof SceneAppPage) {
4477
- return {
4478
- text: parent.state.title,
4479
- url: getLinkUrlWithAppUrlState(parent.state.url, params, parent.state.preserveUrlKeys),
4480
- hideFromBreadcrumbs: parent.state.hideFromBreadcrumbs,
4481
- parentItem: getParentBreadcrumbs(
4482
- parent.state.getParentPage ? parent.state.getParentPage() : parent.parent,
4483
- params
4484
- )
4485
- };
4881
+ function isCurrentPageRouteMatch(page, match) {
4882
+ if (!match.isExact) {
4883
+ return false;
4486
4884
  }
4487
- return void 0;
4885
+ if (match.url === page.state.url) {
4886
+ return true;
4887
+ }
4888
+ if (page.parent instanceof SceneAppPage && page.parent.state.tabs[0] === page && page.parent.state.url === match.url) {
4889
+ return true;
4890
+ }
4891
+ return false;
4488
4892
  }
4489
-
4490
- var __defProp = Object.defineProperty;
4491
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
4492
- var __hasOwnProp = Object.prototype.hasOwnProperty;
4493
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
4494
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4495
- var __spreadValues = (a, b) => {
4496
- for (var prop in b || (b = {}))
4497
- if (__hasOwnProp.call(b, prop))
4498
- __defNormalProp(a, prop, b[prop]);
4499
- if (__getOwnPropSymbols)
4500
- for (var prop of __getOwnPropSymbols(b)) {
4501
- if (__propIsEnum.call(b, prop))
4502
- __defNormalProp(a, prop, b[prop]);
4893
+ function getDefaultFallbackPage() {
4894
+ return new SceneAppPage({
4895
+ url: "",
4896
+ title: "Not found",
4897
+ subTitle: "The url did not match any page",
4898
+ getScene: () => {
4899
+ return new EmbeddedScene({
4900
+ body: new SceneFlexLayout({
4901
+ direction: "column",
4902
+ children: [
4903
+ new SceneFlexItem({
4904
+ flexGrow: 1,
4905
+ body: new SceneReactObject({
4906
+ component: () => {
4907
+ return /* @__PURE__ */ React__default["default"].createElement("div", {
4908
+ "data-testid": "default-fallback-content"
4909
+ }, "If you found your way here using a link then there might be a bug in this application.");
4910
+ }
4911
+ })
4912
+ })
4913
+ ]
4914
+ })
4915
+ });
4503
4916
  }
4504
- return a;
4505
- };
4506
- class SceneReactObject extends SceneObjectBase {
4917
+ });
4507
4918
  }
4508
- SceneReactObject.Component = ({ model }) => {
4509
- const { component: Component, props, reactNode } = model.useState();
4510
- if (Component) {
4511
- return /* @__PURE__ */ React__default["default"].createElement(Component, __spreadValues({}, props));
4512
- }
4513
- if (reactNode) {
4514
- return reactNode;
4515
- }
4516
- return null;
4517
- };
4518
4919
 
4519
4920
  exports.ConstantVariable = ConstantVariable;
4520
4921
  exports.CustomVariable = CustomVariable;
@@ -4548,12 +4949,12 @@ exports.SceneVariableSet = SceneVariableSet;
4548
4949
  exports.SceneVariableValueChangedEvent = SceneVariableValueChangedEvent;
4549
4950
  exports.TestVariable = TestVariable;
4550
4951
  exports.TextBoxVariable = TextBoxVariable;
4551
- exports.UrlSyncManager = UrlSyncManager;
4552
4952
  exports.VariableDependencyConfig = VariableDependencyConfig;
4553
4953
  exports.VariableValueSelectors = VariableValueSelectors;
4554
4954
  exports.VizPanel = VizPanel;
4555
4955
  exports.VizPanelMenu = VizPanelMenu;
4556
4956
  exports.formatRegistry = formatRegistry;
4957
+ exports.getUrlSyncManager = getUrlSyncManager;
4557
4958
  exports.isCustomVariableValue = isCustomVariableValue;
4558
4959
  exports.isSceneObject = isSceneObject;
4559
4960
  exports.sceneGraph = sceneGraph;