@grafana/scenes 6.40.0--canary.1265.18713433534.0 → 6.40.0--canary.1281.18720650291.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 (58) hide show
  1. package/dist/esm/{performance → behaviors}/LongFrameDetector.js +11 -11
  2. package/dist/esm/behaviors/LongFrameDetector.js.map +1 -0
  3. package/dist/esm/behaviors/SceneInteractionTracker.js.map +1 -1
  4. package/dist/esm/behaviors/SceneQueryController.js.map +1 -1
  5. package/dist/esm/{performance → behaviors}/SceneRenderProfiler.js +132 -87
  6. package/dist/esm/behaviors/SceneRenderProfiler.js.map +1 -0
  7. package/dist/esm/components/SceneRefreshPicker.js +1 -1
  8. package/dist/esm/components/SceneRefreshPicker.js.map +1 -1
  9. package/dist/esm/components/VizPanel/VizPanel.js +0 -26
  10. package/dist/esm/components/VizPanel/VizPanel.js.map +1 -1
  11. package/dist/esm/components/VizPanel/VizPanelRenderer.js +1 -18
  12. package/dist/esm/components/VizPanel/VizPanelRenderer.js.map +1 -1
  13. package/dist/esm/core/SceneTimeRange.js +1 -1
  14. package/dist/esm/core/SceneTimeRange.js.map +1 -1
  15. package/dist/esm/index.js +3 -5
  16. package/dist/esm/index.js.map +1 -1
  17. package/dist/esm/querying/SceneDataTransformer.js +0 -57
  18. package/dist/esm/querying/SceneDataTransformer.js.map +1 -1
  19. package/dist/esm/querying/SceneQueryRunner.js +6 -11
  20. package/dist/esm/querying/SceneQueryRunner.js.map +1 -1
  21. package/dist/esm/querying/registerQueryWithController.js +2 -39
  22. package/dist/esm/querying/registerQueryWithController.js.map +1 -1
  23. package/dist/esm/services/UniqueUrlKeyMapper.js +21 -12
  24. package/dist/esm/services/UniqueUrlKeyMapper.js.map +1 -1
  25. package/dist/esm/utils/writeSceneLog.js +10 -1
  26. package/dist/esm/utils/writeSceneLog.js.map +1 -1
  27. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +1 -1
  28. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js.map +1 -1
  29. package/dist/esm/variables/adhoc/AdHocFiltersVariable.js +1 -1
  30. package/dist/esm/variables/adhoc/AdHocFiltersVariable.js.map +1 -1
  31. package/dist/esm/variables/components/VariableValueSelect.js +1 -1
  32. package/dist/esm/variables/components/VariableValueSelect.js.map +1 -1
  33. package/dist/esm/variables/groupby/GroupByVariable.js +1 -1
  34. package/dist/esm/variables/groupby/GroupByVariable.js.map +1 -1
  35. package/dist/esm/variables/variants/MultiValueVariable.js +1 -1
  36. package/dist/esm/variables/variants/MultiValueVariable.js.map +1 -1
  37. package/dist/esm/variables/variants/ScopesVariable.js +1 -1
  38. package/dist/esm/variables/variants/ScopesVariable.js.map +1 -1
  39. package/dist/index.d.ts +95 -326
  40. package/dist/index.js +6385 -6939
  41. package/dist/index.js.map +1 -1
  42. package/package.json +2 -2
  43. package/dist/esm/performance/LongFrameDetector.js.map +0 -1
  44. package/dist/esm/performance/PanelProfilingManager.js +0 -65
  45. package/dist/esm/performance/PanelProfilingManager.js.map +0 -1
  46. package/dist/esm/performance/ScenePerformanceTracker.js +0 -78
  47. package/dist/esm/performance/ScenePerformanceTracker.js.map +0 -1
  48. package/dist/esm/performance/SceneRenderProfiler.js.map +0 -1
  49. package/dist/esm/performance/VizPanelRenderProfiler.js +0 -316
  50. package/dist/esm/performance/VizPanelRenderProfiler.js.map +0 -1
  51. package/dist/esm/performance/index.js +0 -3
  52. package/dist/esm/performance/index.js.map +0 -1
  53. package/dist/esm/performance/interactionConstants.js +0 -13
  54. package/dist/esm/performance/interactionConstants.js.map +0 -1
  55. package/dist/esm/utils/findPanelProfiler.js +0 -18
  56. package/dist/esm/utils/findPanelProfiler.js.map +0 -1
  57. package/dist/esm/utils/writePerformanceLog.js +0 -12
  58. package/dist/esm/utils/writePerformanceLog.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { writePerformanceLog } from '../utils/writePerformanceLog.js';
1
+ import { writeSceneLog } from '../utils/writeSceneLog.js';
2
2
 
3
3
  var __typeError = (msg) => {
4
4
  throw TypeError(msg);
@@ -49,8 +49,8 @@ class LongFrameDetector {
49
49
  performance.mark(measureName);
50
50
  }
51
51
  }
52
- writePerformanceLog(
53
- "LFD",
52
+ writeSceneLog(
53
+ "LongFrameDetector",
54
54
  `Long frame detected (manual): ${frameLength}ms (threshold: ${LONG_FRAME_THRESHOLD}ms)`
55
55
  );
56
56
  }
@@ -71,7 +71,7 @@ class LongFrameDetector {
71
71
  */
72
72
  start(callback) {
73
73
  if (__privateGet(this, _isTracking)) {
74
- writePerformanceLog("LFD", "Already tracking frames, stopping previous session");
74
+ writeSceneLog("LongFrameDetector", "Already tracking frames, stopping previous session");
75
75
  this.stop();
76
76
  }
77
77
  __privateSet(this, _callback, callback);
@@ -81,8 +81,8 @@ class LongFrameDetector {
81
81
  } else {
82
82
  this.startManualFrameTracking();
83
83
  }
84
- writePerformanceLog(
85
- "LFD",
84
+ writeSceneLog(
85
+ "LongFrameDetector",
86
86
  `Started tracking with ${this.isLoAFAvailable() ? "LoAF API" : "manual"} method, threshold: ${LONG_FRAME_THRESHOLD}ms`
87
87
  );
88
88
  }
@@ -110,7 +110,7 @@ class LongFrameDetector {
110
110
  */
111
111
  startLoAFTracking() {
112
112
  if (!this.isLoAFAvailable()) {
113
- writePerformanceLog("LFD", "LoAF API not available, falling back to manual tracking");
113
+ writeSceneLog("LongFrameDetector", "LoAF API not available, falling back to manual tracking");
114
114
  this.startManualFrameTracking();
115
115
  return;
116
116
  }
@@ -138,12 +138,12 @@ class LongFrameDetector {
138
138
  performance.mark(measureName);
139
139
  }
140
140
  }
141
- writePerformanceLog("LFD", `Long frame detected (LoAF): ${entry.duration}ms at ${entry.startTime}ms`);
141
+ writeSceneLog("LongFrameDetector", `Long frame detected (LoAF): ${entry.duration}ms at ${entry.startTime}ms`);
142
142
  }
143
143
  }));
144
144
  __privateGet(this, _loafObserver).observe({ type: "long-animation-frame", buffered: false });
145
145
  } catch (error) {
146
- writePerformanceLog("LFD", "Failed to start LoAF tracking, falling back to manual:", error);
146
+ writeSceneLog("LongFrameDetector", "Failed to start LoAF tracking, falling back to manual:", error);
147
147
  this.startManualFrameTracking();
148
148
  }
149
149
  }
@@ -154,7 +154,7 @@ class LongFrameDetector {
154
154
  if (__privateGet(this, _loafObserver)) {
155
155
  __privateGet(this, _loafObserver).disconnect();
156
156
  __privateSet(this, _loafObserver, null);
157
- writePerformanceLog("LFD", "Stopped LoAF tracking");
157
+ writeSceneLog("LongFrameDetector", "Stopped LoAF tracking");
158
158
  }
159
159
  }
160
160
  /**
@@ -171,7 +171,7 @@ class LongFrameDetector {
171
171
  if (__privateGet(this, _frameTrackingId)) {
172
172
  cancelAnimationFrame(__privateGet(this, _frameTrackingId));
173
173
  __privateSet(this, _frameTrackingId, null);
174
- writePerformanceLog("LFD", "Stopped manual frame tracking");
174
+ writeSceneLog("LongFrameDetector", "Stopped manual frame tracking");
175
175
  }
176
176
  }
177
177
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LongFrameDetector.js","sources":["../../../src/behaviors/LongFrameDetector.ts"],"sourcesContent":["import { writeSceneLog } from '../utils/writeSceneLog';\n\nconst LONG_FRAME_THRESHOLD = 50; // Threshold for both LoAF and manual tracking (ms)\n\nexport interface LongFrameEvent {\n duration: number; // Frame duration in milliseconds\n timestamp: number; // When the frame occurred\n method: 'manual' | 'loaf'; // Which detection method was used\n}\n\nexport type LongFrameCallback = (event: LongFrameEvent) => void;\n\n/**\n * LongFrameDetector is a module for detecting long animation frames.\n *\n * It supports two detection methods with automatic fallback:\n * 1. LoAF API (default when available): Uses Long Animation Frame API with 50ms threshold\n * 2. Manual tracking (fallback): Uses requestAnimationFrame with configurable threshold (default: 50ms)\n *\n * The detector automatically uses LoAF when available for better attribution and performance,\n * falling back to manual tracking for broader browser support.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Performance_API/Long_animation_frame_timing\n */\nexport class LongFrameDetector {\n #isTracking = false;\n #callback: LongFrameCallback | null = null;\n\n // Manual tracking state\n #frameTrackingId: number | null = null;\n #lastFrameTime = 0;\n\n // LoAF tracking state\n #loafObserver: PerformanceObserver | null = null;\n\n /**\n * Check if LoAF API is available in the browser\n */\n private isLoAFAvailable(): boolean {\n return (\n typeof PerformanceObserver !== 'undefined' &&\n PerformanceObserver.supportedEntryTypes &&\n PerformanceObserver.supportedEntryTypes.includes('long-animation-frame')\n );\n }\n\n /**\n * Start detecting long frames and call the provided callback when they occur\n */\n public start(callback: LongFrameCallback): void {\n if (this.#isTracking) {\n writeSceneLog('LongFrameDetector', 'Already tracking frames, stopping previous session');\n this.stop();\n }\n\n this.#callback = callback;\n this.#isTracking = true;\n\n if (this.isLoAFAvailable()) {\n this.startLoAFTracking();\n } else {\n this.startManualFrameTracking();\n }\n\n writeSceneLog(\n 'LongFrameDetector',\n `Started tracking with ${\n this.isLoAFAvailable() ? 'LoAF API' : 'manual'\n } method, threshold: ${LONG_FRAME_THRESHOLD}ms`\n );\n }\n\n /**\n * Stop detecting long frames\n */\n public stop(): void {\n if (!this.#isTracking) {\n return;\n }\n\n this.#isTracking = false;\n this.#callback = null;\n\n // Stop both tracking methods to ensure cleanup\n this.stopLoAFTracking();\n this.stopManualFrameTracking();\n }\n\n /**\n * Check if currently tracking frames\n */\n public isTracking(): boolean {\n return this.#isTracking;\n }\n\n /**\n * Start tracking using the Long Animation Frame API\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongAnimationFrameTiming\n */\n private startLoAFTracking(): void {\n if (!this.isLoAFAvailable()) {\n writeSceneLog('LongFrameDetector', 'LoAF API not available, falling back to manual tracking');\n this.startManualFrameTracking();\n return;\n }\n\n try {\n this.#loafObserver = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n // No duration check needed - LoAF API already filters for long frames (>50ms)\n const event: LongFrameEvent = {\n duration: entry.duration,\n timestamp: entry.startTime,\n method: 'loaf',\n };\n\n if (this.#callback) {\n this.#callback(event);\n }\n\n // Add performance marks and measurements for debugging in dev tools\n if (typeof performance !== 'undefined' && performance.mark && performance.measure) {\n const frameId = `long-frame-${entry.startTime.toFixed(0)}`;\n const startMarkName = `${frameId}-start`;\n const endMarkName = `${frameId}-end`;\n const measureName = `Long Frame (LoAF): ${entry.duration.toFixed(1)}ms`;\n\n try {\n // Create start and end marks\n performance.mark(startMarkName, { startTime: entry.startTime });\n performance.mark(endMarkName, { startTime: entry.startTime + entry.duration });\n\n // Create measurement span\n performance.measure(measureName, startMarkName, endMarkName);\n } catch {\n // Fallback for browsers that don't support startTime option\n performance.mark(measureName);\n }\n }\n\n writeSceneLog('LongFrameDetector', `Long frame detected (LoAF): ${entry.duration}ms at ${entry.startTime}ms`);\n }\n });\n\n this.#loafObserver.observe({ type: 'long-animation-frame', buffered: false });\n } catch (error) {\n writeSceneLog('LongFrameDetector', 'Failed to start LoAF tracking, falling back to manual:', error);\n this.startManualFrameTracking();\n }\n }\n\n /**\n * Stop LoAF tracking\n */\n private stopLoAFTracking(): void {\n if (this.#loafObserver) {\n this.#loafObserver.disconnect();\n this.#loafObserver = null;\n writeSceneLog('LongFrameDetector', 'Stopped LoAF tracking');\n }\n }\n\n /**\n * Start manual frame tracking using requestAnimationFrame\n */\n private startManualFrameTracking(): void {\n this.#lastFrameTime = performance.now();\n this.#frameTrackingId = requestAnimationFrame(() => this.measureFrames());\n }\n\n /**\n * Stop manual frame tracking\n */\n private stopManualFrameTracking(): void {\n if (this.#frameTrackingId) {\n cancelAnimationFrame(this.#frameTrackingId);\n this.#frameTrackingId = null;\n writeSceneLog('LongFrameDetector', 'Stopped manual frame tracking');\n }\n }\n\n /**\n * Measure frame durations using requestAnimationFrame\n */\n private measureFrames = (): void => {\n if (!this.#isTracking) {\n return;\n }\n\n const currentFrameTime = performance.now();\n const frameLength = currentFrameTime - this.#lastFrameTime;\n\n // Check if frame exceeds threshold\n if (frameLength > LONG_FRAME_THRESHOLD) {\n const event: LongFrameEvent = {\n duration: frameLength,\n timestamp: currentFrameTime,\n method: 'manual',\n };\n\n if (this.#callback) {\n this.#callback(event);\n }\n\n // Add performance marks and measurements for debugging in dev tools\n if (typeof performance !== 'undefined' && performance.mark && performance.measure) {\n const frameId = `long-frame-manual-${currentFrameTime.toFixed(0)}`;\n const startMarkName = `${frameId}-start`;\n const endMarkName = `${frameId}-end`;\n const measureName = `Long Frame (Manual): ${frameLength.toFixed(1)}ms`;\n\n try {\n // Create start and end marks\n performance.mark(startMarkName, { startTime: currentFrameTime - frameLength });\n performance.mark(endMarkName, { startTime: currentFrameTime });\n\n // Create measurement span\n performance.measure(measureName, startMarkName, endMarkName);\n } catch {\n // Fallback for browsers that don't support startTime option\n performance.mark(measureName);\n }\n }\n\n writeSceneLog(\n 'LongFrameDetector',\n `Long frame detected (manual): ${frameLength}ms (threshold: ${LONG_FRAME_THRESHOLD}ms)`\n );\n }\n\n this.#lastFrameTime = currentFrameTime;\n\n // Continue tracking\n if (this.#isTracking) {\n this.#frameTrackingId = requestAnimationFrame(this.measureFrames);\n }\n };\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SceneInteractionTracker.js","sources":["../../../src/behaviors/SceneInteractionTracker.ts"],"sourcesContent":["import { SceneObjectBase } from '../core/SceneObjectBase';\nimport { SceneObject, SceneStatelessBehavior } from '../core/types';\nimport { SceneRenderProfiler } from '../performance/SceneRenderProfiler';\nimport { SceneInteractionTrackerState } from './types';\n\nexport function isInteractionTracker(s: SceneObject | SceneStatelessBehavior): s is SceneInteractionTracker {\n return 'isInteractionTracker' in s;\n}\n\nexport class SceneInteractionTracker extends SceneObjectBase<SceneInteractionTrackerState> {\n public isInteractionTracker: true = true;\n\n public constructor(state: Partial<SceneInteractionTrackerState> = {}, private renderProfiler?: SceneRenderProfiler) {\n super(state);\n\n if (renderProfiler) {\n this.renderProfiler = renderProfiler;\n this.renderProfiler.setInteractionCompleteHandler(state.onInteractionComplete);\n }\n }\n\n public startInteraction(name: string) {\n if (!this.state.enableInteractionTracking) {\n return;\n }\n\n this.renderProfiler?.startInteraction(name);\n }\n\n public stopInteraction() {\n this.renderProfiler?.stopInteraction();\n }\n}\n"],"names":[],"mappings":";;AAKO,SAAS,qBAAqB,CAAuE,EAAA;AAC1G,EAAA,OAAO,sBAA0B,IAAA,CAAA;AACnC;AAEO,MAAM,gCAAgC,eAA8C,CAAA;AAAA,EAGlF,WAAY,CAAA,KAAA,GAA+C,EAAC,EAAW,cAAsC,EAAA;AAClH,IAAA,KAAA,CAAM,KAAK,CAAA;AADiE,IAAA,IAAA,CAAA,cAAA,GAAA,cAAA;AAF9E,IAAA,IAAA,CAAO,oBAA6B,GAAA,IAAA;AAKlC,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAA,IAAA,CAAK,cAAiB,GAAA,cAAA;AACtB,MAAK,IAAA,CAAA,cAAA,CAAe,6BAA8B,CAAA,KAAA,CAAM,qBAAqB,CAAA;AAAA;AAC/E;AACF,EAEO,iBAAiB,IAAc,EAAA;AArBxC,IAAA,IAAA,EAAA;AAsBI,IAAI,IAAA,CAAC,IAAK,CAAA,KAAA,CAAM,yBAA2B,EAAA;AACzC,MAAA;AAAA;AAGF,IAAK,CAAA,EAAA,GAAA,IAAA,CAAA,cAAA,KAAL,mBAAqB,gBAAiB,CAAA,IAAA,CAAA;AAAA;AACxC,EAEO,eAAkB,GAAA;AA7B3B,IAAA,IAAA,EAAA;AA8BI,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,mBAAL,IAAqB,GAAA,MAAA,GAAA,EAAA,CAAA,eAAA,EAAA;AAAA;AAEzB;;;;"}
1
+ {"version":3,"file":"SceneInteractionTracker.js","sources":["../../../src/behaviors/SceneInteractionTracker.ts"],"sourcesContent":["import { SceneObjectBase } from '../core/SceneObjectBase';\nimport { SceneObject, SceneStatelessBehavior } from '../core/types';\nimport { SceneRenderProfiler } from './SceneRenderProfiler';\nimport { SceneInteractionTrackerState } from './types';\n\nexport function isInteractionTracker(s: SceneObject | SceneStatelessBehavior): s is SceneInteractionTracker {\n return 'isInteractionTracker' in s;\n}\n\nexport class SceneInteractionTracker extends SceneObjectBase<SceneInteractionTrackerState> {\n public isInteractionTracker: true = true;\n\n public constructor(state: Partial<SceneInteractionTrackerState> = {}, private renderProfiler?: SceneRenderProfiler) {\n super(state);\n\n if (renderProfiler) {\n this.renderProfiler = renderProfiler;\n this.renderProfiler.setInteractionCompleteHandler(state.onInteractionComplete);\n }\n }\n\n public startInteraction(name: string) {\n if (!this.state.enableInteractionTracking) {\n return;\n }\n\n this.renderProfiler?.startInteraction(name);\n }\n\n public stopInteraction() {\n this.renderProfiler?.stopInteraction();\n }\n}\n"],"names":[],"mappings":";;AAKO,SAAS,qBAAqB,CAAuE,EAAA;AAC1G,EAAA,OAAO,sBAA0B,IAAA,CAAA;AACnC;AAEO,MAAM,gCAAgC,eAA8C,CAAA;AAAA,EAGlF,WAAY,CAAA,KAAA,GAA+C,EAAC,EAAW,cAAsC,EAAA;AAClH,IAAA,KAAA,CAAM,KAAK,CAAA;AADiE,IAAA,IAAA,CAAA,cAAA,GAAA,cAAA;AAF9E,IAAA,IAAA,CAAO,oBAA6B,GAAA,IAAA;AAKlC,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAA,IAAA,CAAK,cAAiB,GAAA,cAAA;AACtB,MAAK,IAAA,CAAA,cAAA,CAAe,6BAA8B,CAAA,KAAA,CAAM,qBAAqB,CAAA;AAAA;AAC/E;AACF,EAEO,iBAAiB,IAAc,EAAA;AArBxC,IAAA,IAAA,EAAA;AAsBI,IAAI,IAAA,CAAC,IAAK,CAAA,KAAA,CAAM,yBAA2B,EAAA;AACzC,MAAA;AAAA;AAGF,IAAK,CAAA,EAAA,GAAA,IAAA,CAAA,cAAA,KAAL,mBAAqB,gBAAiB,CAAA,IAAA,CAAA;AAAA;AACxC,EAEO,eAAkB,GAAA;AA7B3B,IAAA,IAAA,EAAA;AA8BI,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,mBAAL,IAAqB,GAAA,MAAA,GAAA,EAAA,CAAA,eAAA,EAAA;AAAA;AAEzB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SceneQueryController.js","sources":["../../../src/behaviors/SceneQueryController.ts"],"sourcesContent":["import { SceneObjectBase } from '../core/SceneObjectBase';\nimport { SceneObject, SceneStatelessBehavior } from '../core/types';\nimport { writeSceneLog } from '../utils/writeSceneLog';\nimport { SceneRenderProfiler } from '../performance/SceneRenderProfiler';\nimport { SceneQueryControllerEntry, SceneQueryControllerLike, SceneQueryStateControllerState } from './types';\n\nexport function isQueryController(s: SceneObject | SceneStatelessBehavior): s is SceneQueryControllerLike {\n return 'isQueryController' in s;\n}\n\nexport class SceneQueryController\n extends SceneObjectBase<SceneQueryStateControllerState>\n implements SceneQueryControllerLike\n{\n public isQueryController: true = true;\n\n #running = new Set<SceneQueryControllerEntry>();\n\n #tryCompleteProfileFrameId: number | null = null;\n\n public constructor(state: Partial<SceneQueryStateControllerState> = {}, private profiler?: SceneRenderProfiler) {\n super({ ...state, isRunning: false });\n\n if (profiler) {\n this.profiler = profiler;\n profiler.setQueryController(this);\n }\n\n // Clear running state on deactivate\n this.addActivationHandler(() => {\n // In cases of re-activation, we need to set the query controller again as it might have been set by other scene\n this.profiler?.setQueryController(this);\n return () => this.#running.clear();\n });\n }\n\n public runningQueriesCount = () => {\n return this.#running.size;\n };\n\n public startProfile(name: string) {\n if (!this.state.enableProfiling) {\n return;\n }\n this.profiler?.startProfile(name);\n }\n\n public cancelProfile() {\n this.profiler?.cancelProfile();\n }\n\n public queryStarted(entry: SceneQueryControllerEntry) {\n this.#running.add(entry);\n this.changeRunningQueryCount(1, entry);\n\n if (!this.state.isRunning) {\n this.setState({ isRunning: true });\n }\n }\n\n public queryCompleted(entry: SceneQueryControllerEntry) {\n if (!this.#running.has(entry)) {\n return;\n }\n\n this.#running.delete(entry);\n\n this.changeRunningQueryCount(-1);\n\n if (this.#running.size === 0) {\n this.setState({ isRunning: false });\n }\n }\n\n private changeRunningQueryCount(dir: 1 | -1, entry?: SceneQueryControllerEntry) {\n /**\n * Used by grafana-image-renderer to know when all queries are completed.\n */\n (window as any).__grafanaRunningQueryCount = ((window as any).__grafanaRunningQueryCount ?? 0) + dir;\n\n if (dir === 1 && this.state.enableProfiling) {\n if (entry) {\n // Collect profile crumbs, variables, annotations, queries and plugins\n this.profiler?.addCrumb(`${entry.type}`);\n }\n if (this.profiler?.isTailRecording()) {\n writeSceneLog('SceneQueryController', 'New query started, cancelling tail recording');\n this.profiler?.cancelTailRecording();\n }\n }\n\n if (this.state.enableProfiling) {\n // Delegate to next frame to check if all queries are completed\n // This is to account for scenarios when there's \"yet another\" query that's started\n if (this.#tryCompleteProfileFrameId) {\n cancelAnimationFrame(this.#tryCompleteProfileFrameId);\n }\n\n this.#tryCompleteProfileFrameId = requestAnimationFrame(() => {\n this.profiler?.tryCompletingProfile();\n });\n }\n }\n\n public cancelAll() {\n for (const entry of this.#running.values()) {\n entry.cancel?.();\n }\n }\n}\n"],"names":["_a"],"mappings":"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"}
1
+ {"version":3,"file":"SceneQueryController.js","sources":["../../../src/behaviors/SceneQueryController.ts"],"sourcesContent":["import { SceneObjectBase } from '../core/SceneObjectBase';\nimport { SceneObject, SceneStatelessBehavior } from '../core/types';\nimport { writeSceneLog } from '../utils/writeSceneLog';\nimport { SceneRenderProfiler } from './SceneRenderProfiler';\nimport { SceneQueryControllerEntry, SceneQueryControllerLike, SceneQueryStateControllerState } from './types';\n\nexport function isQueryController(s: SceneObject | SceneStatelessBehavior): s is SceneQueryControllerLike {\n return 'isQueryController' in s;\n}\n\nexport class SceneQueryController\n extends SceneObjectBase<SceneQueryStateControllerState>\n implements SceneQueryControllerLike\n{\n public isQueryController: true = true;\n\n #running = new Set<SceneQueryControllerEntry>();\n\n #tryCompleteProfileFrameId: number | null = null;\n\n public constructor(state: Partial<SceneQueryStateControllerState> = {}, private profiler?: SceneRenderProfiler) {\n super({ ...state, isRunning: false });\n\n if (profiler) {\n this.profiler = profiler;\n profiler.setQueryController(this);\n }\n\n // Clear running state on deactivate\n this.addActivationHandler(() => {\n // In cases of re-activation, we need to set the query controller again as it might have been set by other scene\n this.profiler?.setQueryController(this);\n return () => this.#running.clear();\n });\n }\n\n public runningQueriesCount = () => {\n return this.#running.size;\n };\n\n public startProfile(name: string) {\n if (!this.state.enableProfiling) {\n return;\n }\n this.profiler?.startProfile(name);\n }\n\n public cancelProfile() {\n this.profiler?.cancelProfile();\n }\n\n public queryStarted(entry: SceneQueryControllerEntry) {\n this.#running.add(entry);\n this.changeRunningQueryCount(1, entry);\n\n if (!this.state.isRunning) {\n this.setState({ isRunning: true });\n }\n }\n\n public queryCompleted(entry: SceneQueryControllerEntry) {\n if (!this.#running.has(entry)) {\n return;\n }\n\n this.#running.delete(entry);\n\n this.changeRunningQueryCount(-1);\n\n if (this.#running.size === 0) {\n this.setState({ isRunning: false });\n }\n }\n\n private changeRunningQueryCount(dir: 1 | -1, entry?: SceneQueryControllerEntry) {\n /**\n * Used by grafana-image-renderer to know when all queries are completed.\n */\n (window as any).__grafanaRunningQueryCount = ((window as any).__grafanaRunningQueryCount ?? 0) + dir;\n\n if (dir === 1 && this.state.enableProfiling) {\n if (entry) {\n // Collect profile crumbs, variables, annotations, queries and plugins\n this.profiler?.addCrumb(`${entry.type}`);\n }\n if (this.profiler?.isTailRecording()) {\n writeSceneLog('SceneQueryController', 'New query started, cancelling tail recording');\n this.profiler?.cancelTailRecording();\n }\n }\n\n if (this.state.enableProfiling) {\n // Delegate to next frame to check if all queries are completed\n // This is to account for scenarios when there's \"yet another\" query that's started\n if (this.#tryCompleteProfileFrameId) {\n cancelAnimationFrame(this.#tryCompleteProfileFrameId);\n }\n\n this.#tryCompleteProfileFrameId = requestAnimationFrame(() => {\n this.profiler?.tryCompletingProfile();\n });\n }\n }\n\n public cancelAll() {\n for (const entry of this.#running.values()) {\n entry.cancel?.();\n }\n }\n}\n"],"names":["_a"],"mappings":"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"}
@@ -1,6 +1,4 @@
1
- import { writePerformanceLog } from '../utils/writePerformanceLog.js';
2
- import { generateOperationId, getScenePerformanceTracker } from './ScenePerformanceTracker.js';
3
- import { PanelProfilingManager } from './PanelProfilingManager.js';
1
+ import { writeSceneLog, writeSceneLogStyled } from '../utils/writeSceneLog.js';
4
2
  import { LongFrameDetector } from './LongFrameDetector.js';
5
3
 
6
4
  var __typeError = (msg) => {
@@ -18,20 +16,17 @@ var __privateWrapper = (obj, member, setter, getter) => ({
18
16
  return __privateGet(obj, member, getter);
19
17
  }
20
18
  });
21
- var _profileInProgress, _interactionInProgress, _profileStartTs, _trailAnimationFrameId, _currentOperationId, _recordedTrailingSpans, _longFrameDetector, _longFramesCount, _longFramesTotalTime, _visibilityChangeHandler, _onInteractionComplete;
19
+ var _profileInProgress, _interactionInProgress, _profileStartTs, _trailAnimationFrameId, _recordedTrailingSpans, _longFrameDetector, _longFramesCount, _longFramesTotalTime, _visibilityChangeHandler, _onInteractionComplete;
22
20
  const POST_STORM_WINDOW = 2e3;
23
21
  const DEFAULT_LONG_FRAME_THRESHOLD = 30;
24
22
  class SceneRenderProfiler {
25
- constructor(panelProfilingConfig) {
23
+ constructor(queryController) {
24
+ this.queryController = queryController;
26
25
  __privateAdd(this, _profileInProgress, null);
27
26
  __privateAdd(this, _interactionInProgress, null);
28
27
  __privateAdd(this, _profileStartTs, null);
29
28
  __privateAdd(this, _trailAnimationFrameId, null);
30
- // Generic metadata for observer notifications
31
- this.metadata = {};
32
- // Operation ID for correlating dashboard interaction events
33
- __privateAdd(this, _currentOperationId);
34
- // Trailing frame measurements
29
+ // Will keep measured lengths trailing frames
35
30
  __privateAdd(this, _recordedTrailingSpans, []);
36
31
  // Long frame tracking
37
32
  __privateAdd(this, _longFrameDetector);
@@ -40,6 +35,7 @@ class SceneRenderProfiler {
40
35
  __privateAdd(this, _visibilityChangeHandler, null);
41
36
  __privateAdd(this, _onInteractionComplete, null);
42
37
  this.measureTrailingFrames = (measurementStartTs, lastFrameTime, profileStartTs) => {
38
+ var _a, _b, _c, _d;
43
39
  const currentFrameTime = performance.now();
44
40
  const frameLength = currentFrameTime - lastFrameTime;
45
41
  __privateGet(this, _recordedTrailingSpans).push(frameLength);
@@ -52,73 +48,108 @@ class SceneRenderProfiler {
52
48
  } else {
53
49
  const slowFrames = processRecordedSpans(__privateGet(this, _recordedTrailingSpans));
54
50
  const slowFramesTime = slowFrames.reduce((acc, val) => acc + val, 0);
55
- writePerformanceLog(
56
- "SRP",
57
- "Profile tail recorded, slow frames duration:",
58
- slowFramesTime,
59
- slowFrames,
60
- __privateGet(this, _profileInProgress)
51
+ writeSceneLog(
52
+ "SceneRenderProfiler",
53
+ `Profile tail recorded - Slow frames: ${slowFramesTime.toFixed(1)}ms (${slowFrames.length} frames)`
61
54
  );
55
+ writeSceneLog("", ` \u251C\u2500 Origin: ${((_a = __privateGet(this, _profileInProgress)) == null ? void 0 : _a.origin) || "unknown"}`);
56
+ writeSceneLog("", ` \u2514\u2500 Crumbs:`, ((_b = __privateGet(this, _profileInProgress)) == null ? void 0 : _b.crumbs) || []);
62
57
  __privateSet(this, _recordedTrailingSpans, []);
63
58
  const profileDuration = measurementStartTs - profileStartTs;
64
- const slowFrameSummary = slowFrames.length > 0 ? `${slowFramesTime.toFixed(1)}ms slow frames[tail recording] (${slowFrames.length}) \u26A0\uFE0F` : `${slowFramesTime.toFixed(1)}ms slow frames[tail recording] (${slowFrames.length})`;
65
- const longFrameSummary = __privateGet(this, _longFramesCount) > 0 ? `${__privateGet(this, _longFramesTotalTime).toFixed(1)}ms long frames[LoAF] (${__privateGet(this, _longFramesCount)}) \u26A0\uFE0F` : `${__privateGet(this, _longFramesTotalTime).toFixed(1)}ms long frames[LoAF] (${__privateGet(this, _longFramesCount)})`;
66
- writePerformanceLog(
67
- "SRP",
68
- `[PROFILER] Complete: ${(profileDuration + slowFramesTime).toFixed(
69
- 1
70
- )}ms total | ${slowFrameSummary} | ${longFrameSummary}`
71
- );
59
+ if (typeof performance !== "undefined" && performance.mark) {
60
+ const profileName = ((_c = __privateGet(this, _profileInProgress)) == null ? void 0 : _c.origin) || "unknown";
61
+ const totalTime = profileDuration + slowFramesTime;
62
+ performance.mark(`Dashboard Profile End: ${profileName}`);
63
+ const startMarkName = `Dashboard Profile Start: ${profileName}`;
64
+ try {
65
+ performance.measure(
66
+ `Dashboard Profile: ${profileName} (${totalTime.toFixed(1)}ms)`,
67
+ startMarkName,
68
+ `Dashboard Profile End: ${profileName}`
69
+ );
70
+ } catch (e) {
71
+ performance.mark(`Dashboard Profile Complete: ${profileName} (${totalTime.toFixed(1)}ms)`);
72
+ }
73
+ if (slowFrames.length > 0) {
74
+ const slowFramesMarkName = `Slow Frames Summary: ${slowFrames.length} frames (${slowFramesTime.toFixed(
75
+ 1
76
+ )}ms)`;
77
+ performance.mark(slowFramesMarkName);
78
+ slowFrames.forEach((frameTime, index) => {
79
+ if (frameTime > 16) {
80
+ try {
81
+ const frameStartTime = __privateGet(this, _profileStartTs) + profileDuration + (index > 0 ? slowFrames.slice(0, index).reduce((sum, t) => sum + t, 0) : 0);
82
+ const frameId = `slow-frame-${index}`;
83
+ const frameStartMark = `${frameId}-start`;
84
+ const frameEndMark = `${frameId}-end`;
85
+ performance.mark(frameStartMark, { startTime: frameStartTime });
86
+ performance.mark(frameEndMark, { startTime: frameStartTime + frameTime });
87
+ performance.measure(`Slow Frame ${index + 1}: ${frameTime.toFixed(1)}ms`, frameStartMark, frameEndMark);
88
+ } catch (e) {
89
+ performance.mark(`Slow Frame ${index + 1}: ${frameTime.toFixed(1)}ms`);
90
+ }
91
+ }
92
+ });
93
+ }
94
+ }
95
+ const completionTimestamp = performance.now();
96
+ writeSceneLog("SceneRenderProfiler", "Profile completed");
97
+ writeSceneLog("", ` \u251C\u2500 Timestamp: ${completionTimestamp.toFixed(1)}ms`);
98
+ writeSceneLog("", ` \u251C\u2500 Total time: ${(profileDuration + slowFramesTime).toFixed(1)}ms`);
99
+ writeSceneLog("", ` \u251C\u2500 Slow frames: ${slowFramesTime}ms (${slowFrames.length} frames)`);
100
+ writeSceneLog("", ` \u2514\u2500 Long frames: ${__privateGet(this, _longFramesTotalTime)}ms (${__privateGet(this, _longFramesCount)} frames)`);
72
101
  __privateGet(this, _longFrameDetector).stop();
102
+ writeSceneLogStyled(
103
+ "SceneRenderProfiler",
104
+ `Stopped long frame detection - profile complete at ${completionTimestamp.toFixed(1)}ms`,
105
+ "color: #00CC00; font-weight: bold;"
106
+ );
73
107
  __privateSet(this, _trailAnimationFrameId, null);
74
108
  const profileEndTs = profileStartTs + profileDuration + slowFramesTime;
75
109
  if (!__privateGet(this, _profileInProgress)) {
76
110
  return;
77
111
  }
112
+ performance.measure(`DashboardInteraction ${__privateGet(this, _profileInProgress).origin}`, {
113
+ start: profileStartTs,
114
+ end: profileEndTs
115
+ });
78
116
  const networkDuration = captureNetwork(profileStartTs, profileEndTs);
79
- if (__privateGet(this, _profileInProgress)) {
80
- const dashboardData = {
81
- operationId: __privateGet(this, _currentOperationId) || generateOperationId("dashboard-fallback"),
82
- interactionType: __privateGet(this, _profileInProgress).origin,
83
- timestamp: profileEndTs,
117
+ if (((_d = this.queryController) == null ? void 0 : _d.state.onProfileComplete) && __privateGet(this, _profileInProgress)) {
118
+ this.queryController.state.onProfileComplete({
119
+ origin: __privateGet(this, _profileInProgress).origin,
120
+ crumbs: __privateGet(this, _profileInProgress).crumbs,
84
121
  duration: profileDuration + slowFramesTime,
85
122
  networkDuration,
123
+ startTs: profileStartTs,
124
+ endTs: profileEndTs,
86
125
  longFramesCount: __privateGet(this, _longFramesCount),
87
126
  longFramesTotalTime: __privateGet(this, _longFramesTotalTime),
88
- metadata: this.metadata
89
- };
90
- const tracker = getScenePerformanceTracker();
91
- tracker.notifyDashboardInteractionComplete(dashboardData);
127
+ // @ts-ignore
128
+ jsHeapSizeLimit: performance.memory ? performance.memory.jsHeapSizeLimit : 0,
129
+ // @ts-ignore
130
+ usedJSHeapSize: performance.memory ? performance.memory.usedJSHeapSize : 0,
131
+ // @ts-ignore
132
+ totalJSHeapSize: performance.memory ? performance.memory.totalJSHeapSize : 0
133
+ });
92
134
  __privateSet(this, _profileInProgress, null);
93
135
  __privateSet(this, _trailAnimationFrameId, null);
94
136
  }
137
+ if (window.__runs) {
138
+ window.__runs += `${Date.now()}, ${profileDuration + slowFramesTime}
139
+ `;
140
+ } else {
141
+ window.__runs = `${Date.now()}, ${profileDuration + slowFramesTime}
142
+ `;
143
+ }
95
144
  }
96
145
  };
97
146
  __privateSet(this, _longFrameDetector, new LongFrameDetector());
98
147
  this.setupVisibilityChangeHandler();
99
148
  __privateSet(this, _interactionInProgress, null);
100
- if (panelProfilingConfig) {
101
- this._panelProfilingManager = new PanelProfilingManager(panelProfilingConfig);
102
- }
103
- }
104
- /** Set generic metadata for observer notifications */
105
- setMetadata(metadata) {
106
- this.metadata = { ...metadata };
107
149
  }
108
150
  setQueryController(queryController) {
109
151
  this.queryController = queryController;
110
152
  }
111
- /** Attach panel profiling to a scene object */
112
- attachPanelProfiling(sceneObject) {
113
- var _a;
114
- (_a = this._panelProfilingManager) == null ? void 0 : _a.attachToScene(sceneObject);
115
- }
116
- /** Attach profiler to a specific panel */
117
- attachProfilerToPanel(panel) {
118
- var _a;
119
- writePerformanceLog("SRP", "Attaching profiler to panel", panel.state.key);
120
- (_a = this._panelProfilingManager) == null ? void 0 : _a.attachProfilerToPanel(panel);
121
- }
122
153
  setInteractionCompleteHandler(handler) {
123
154
  __privateSet(this, _onInteractionComplete, handler != null ? handler : null);
124
155
  }
@@ -128,7 +159,7 @@ class SceneRenderProfiler {
128
159
  }
129
160
  __privateSet(this, _visibilityChangeHandler, () => {
130
161
  if (document.hidden && __privateGet(this, _profileInProgress)) {
131
- writePerformanceLog("SRP", "Tab became inactive, cancelling profile");
162
+ writeSceneLog("SceneRenderProfiler", "Tab became inactive, cancelling profile");
132
163
  this.cancelProfile();
133
164
  }
134
165
  });
@@ -137,18 +168,16 @@ class SceneRenderProfiler {
137
168
  }
138
169
  }
139
170
  cleanup() {
140
- var _a;
141
171
  if (__privateGet(this, _visibilityChangeHandler) && typeof document !== "undefined") {
142
172
  document.removeEventListener("visibilitychange", __privateGet(this, _visibilityChangeHandler));
143
173
  __privateSet(this, _visibilityChangeHandler, null);
144
174
  }
145
175
  __privateGet(this, _longFrameDetector).stop();
146
176
  this.cancelProfile();
147
- (_a = this._panelProfilingManager) == null ? void 0 : _a.cleanup();
148
177
  }
149
178
  startProfile(name) {
150
179
  if (document.hidden) {
151
- writePerformanceLog("SRP", "Tab is inactive, skipping profile", name);
180
+ writeSceneLog("SceneRenderProfiler", "Tab is inactive, skipping profile", name);
152
181
  return;
153
182
  }
154
183
  if (__privateGet(this, _profileInProgress)) {
@@ -164,14 +193,14 @@ class SceneRenderProfiler {
164
193
  }
165
194
  startInteraction(interaction) {
166
195
  if (__privateGet(this, _interactionInProgress)) {
167
- writePerformanceLog("SRP", "Cancelled interaction:", __privateGet(this, _interactionInProgress));
196
+ writeSceneLog("profile", "Cancelled interaction:", __privateGet(this, _interactionInProgress));
168
197
  __privateSet(this, _interactionInProgress, null);
169
198
  }
170
199
  __privateSet(this, _interactionInProgress, {
171
200
  interaction,
172
201
  startTs: performance.now()
173
202
  });
174
- writePerformanceLog("SRP", "Started interaction:", interaction);
203
+ writeSceneLog("SceneRenderProfiler", "Started interaction:", interaction);
175
204
  }
176
205
  stopInteraction() {
177
206
  if (!__privateGet(this, _interactionInProgress)) {
@@ -180,10 +209,11 @@ class SceneRenderProfiler {
180
209
  const endTs = performance.now();
181
210
  const interactionDuration = endTs - __privateGet(this, _interactionInProgress).startTs;
182
211
  const networkDuration = captureNetwork(__privateGet(this, _interactionInProgress).startTs, endTs);
183
- writePerformanceLog(
184
- "SRP",
185
- `[INTERACTION] Complete: ${interactionDuration.toFixed(1)}ms total | ${networkDuration.toFixed(1)}ms network`
186
- );
212
+ writeSceneLog("SceneRenderProfiler", "Completed interaction:");
213
+ writeSceneLog("", ` \u251C\u2500 Total time: ${interactionDuration.toFixed(1)}ms`);
214
+ writeSceneLog("", ` \u251C\u2500 Network duration: ${networkDuration.toFixed(1)}ms`);
215
+ writeSceneLog("", ` \u251C\u2500 StartTs: ${__privateGet(this, _interactionInProgress).startTs.toFixed(1)}ms`);
216
+ writeSceneLog("", ` \u2514\u2500 EndTs: ${endTs.toFixed(1)}ms`);
187
217
  if (__privateGet(this, _onInteractionComplete) && __privateGet(this, _profileInProgress)) {
188
218
  __privateGet(this, _onInteractionComplete).call(this, {
189
219
  origin: __privateGet(this, _interactionInProgress).interaction,
@@ -211,24 +241,32 @@ class SceneRenderProfiler {
211
241
  return (_b = (_a = __privateGet(this, _interactionInProgress)) == null ? void 0 : _a.interaction) != null ? _b : null;
212
242
  }
213
243
  /**
214
- * Start new performance profile
215
- * @param name - Profile trigger (e.g., 'time_range_change')
216
- * @param force - True if canceling existing profile, false if starting clean
244
+ * Starts a new profile for performance measurement.
245
+ *
246
+ * @param name - The origin/trigger of the profile (e.g., 'time_range_change', 'variable_value_changed')
247
+ * @param force - Whether this is a "forced" profile (true) or "clean" profile (false)
248
+ * - "forced": Started by canceling an existing profile that was recording trailing frames
249
+ * This happens when a new user interaction occurs before the previous one
250
+ * finished measuring its performance impact
251
+ * - "clean": Started when no profile is currently active
217
252
  */
218
253
  _startNewProfile(name, force = false) {
219
- const profileType = force ? "forced" : "clean";
220
- writePerformanceLog("SRP", `[PROFILER] ${name} started (${profileType})`);
254
+ var _a;
221
255
  __privateSet(this, _profileInProgress, { origin: name, crumbs: [] });
222
256
  __privateSet(this, _profileStartTs, performance.now());
223
257
  __privateSet(this, _longFramesCount, 0);
224
258
  __privateSet(this, _longFramesTotalTime, 0);
225
- __privateSet(this, _currentOperationId, generateOperationId("dashboard"));
226
- getScenePerformanceTracker().notifyDashboardInteractionStart({
227
- operationId: __privateGet(this, _currentOperationId),
228
- interactionType: name,
229
- timestamp: __privateGet(this, _profileStartTs),
230
- metadata: this.metadata
231
- });
259
+ if (typeof performance !== "undefined" && performance.mark) {
260
+ const markName = `Dashboard Profile Start: ${name}`;
261
+ performance.mark(markName);
262
+ }
263
+ writeSceneLogStyled(
264
+ "SceneRenderProfiler",
265
+ `Profile started[${force ? "forced" : "clean"}]`,
266
+ "color: #FFCC00; font-weight: bold;"
267
+ );
268
+ writeSceneLog("", ` \u251C\u2500 Origin: ${((_a = __privateGet(this, _profileInProgress)) == null ? void 0 : _a.origin) || "unknown"}`);
269
+ writeSceneLog("", ` \u2514\u2500 Timestamp: ${__privateGet(this, _profileStartTs).toFixed(1)}ms`);
232
270
  __privateGet(this, _longFrameDetector).start((event) => {
233
271
  if (!__privateGet(this, _profileInProgress) || !__privateGet(this, _profileStartTs)) {
234
272
  return;
@@ -247,9 +285,12 @@ class SceneRenderProfiler {
247
285
  }
248
286
  tryCompletingProfile() {
249
287
  var _a;
250
- writePerformanceLog("SRP", "Trying to complete profile", __privateGet(this, _profileInProgress));
288
+ if (!__privateGet(this, _profileInProgress)) {
289
+ return;
290
+ }
291
+ writeSceneLog("SceneRenderProfiler", "Trying to complete profile", __privateGet(this, _profileInProgress));
251
292
  if (((_a = this.queryController) == null ? void 0 : _a.runningQueriesCount()) === 0 && __privateGet(this, _profileInProgress)) {
252
- writePerformanceLog("SRP", "All queries completed, stopping profile");
293
+ writeSceneLog("SceneRenderProfiler", "All queries completed, starting tail measurement");
253
294
  this.recordProfileTail(performance.now(), __privateGet(this, _profileStartTs));
254
295
  }
255
296
  }
@@ -260,19 +301,20 @@ class SceneRenderProfiler {
260
301
  if (__privateGet(this, _trailAnimationFrameId)) {
261
302
  cancelAnimationFrame(__privateGet(this, _trailAnimationFrameId));
262
303
  __privateSet(this, _trailAnimationFrameId, null);
263
- writePerformanceLog("SRP", "Cancelled recording frames, new profile started");
304
+ writeSceneLog("SceneRenderProfiler", "Cancelled recording frames, new profile started");
264
305
  }
265
306
  }
307
+ // cancel profile
266
308
  cancelProfile() {
267
309
  if (__privateGet(this, _profileInProgress)) {
268
- writePerformanceLog("SRP", "Cancelling profile", __privateGet(this, _profileInProgress));
310
+ writeSceneLog("SceneRenderProfiler", "Cancelling profile", __privateGet(this, _profileInProgress));
269
311
  __privateSet(this, _profileInProgress, null);
270
312
  if (__privateGet(this, _trailAnimationFrameId)) {
271
313
  cancelAnimationFrame(__privateGet(this, _trailAnimationFrameId));
272
314
  __privateSet(this, _trailAnimationFrameId, null);
273
315
  }
274
316
  __privateGet(this, _longFrameDetector).stop();
275
- writePerformanceLog("SRP", "Stopped long frame detection - profile cancelled");
317
+ writeSceneLog("SceneRenderProfiler", "Stopped long frame detection - profile cancelled");
276
318
  __privateSet(this, _recordedTrailingSpans, []);
277
319
  __privateSet(this, _longFramesCount, 0);
278
320
  __privateSet(this, _longFramesTotalTime, 0);
@@ -280,13 +322,7 @@ class SceneRenderProfiler {
280
322
  }
281
323
  addCrumb(crumb) {
282
324
  if (__privateGet(this, _profileInProgress)) {
283
- getScenePerformanceTracker().notifyDashboardInteractionMilestone({
284
- operationId: generateOperationId("dashboard-milestone"),
285
- interactionType: __privateGet(this, _profileInProgress).origin,
286
- timestamp: performance.now(),
287
- milestone: crumb,
288
- metadata: this.metadata
289
- });
325
+ writeSceneLog("SceneRenderProfiler", "Adding crumb:", crumb);
290
326
  __privateGet(this, _profileInProgress).crumbs.push(crumb);
291
327
  }
292
328
  }
@@ -295,7 +331,6 @@ _profileInProgress = new WeakMap();
295
331
  _interactionInProgress = new WeakMap();
296
332
  _profileStartTs = new WeakMap();
297
333
  _trailAnimationFrameId = new WeakMap();
298
- _currentOperationId = new WeakMap();
299
334
  _recordedTrailingSpans = new WeakMap();
300
335
  _longFrameDetector = new WeakMap();
301
336
  _longFramesCount = new WeakMap();
@@ -344,6 +379,16 @@ function calculateNetworkTime(requests) {
344
379
  totalNetworkTime += currentEnd - currentStart;
345
380
  return totalNetworkTime;
346
381
  }
382
+ const REFRESH_INTERACTION = "refresh";
383
+ const TIME_RANGE_CHANGE_INTERACTION = "time_range_change";
384
+ const FILTER_REMOVED_INTERACTION = "filter_removed";
385
+ const FILTER_CHANGED_INTERACTION = "filter_changed";
386
+ const FILTER_RESTORED_INTERACTION = "filter_restored";
387
+ const VARIABLE_VALUE_CHANGED_INTERACTION = "variable_value_changed";
388
+ const SCOPES_CHANGED_INTERACTION = "scopes_changed";
389
+ const ADHOC_KEYS_DROPDOWN_INTERACTION = "adhoc_keys_dropdown";
390
+ const ADHOC_VALUES_DROPDOWN_INTERACTION = "adhoc_values_dropdown";
391
+ const GROUPBY_DIMENSIONS_INTERACTION = "groupby_dimensions";
347
392
 
348
- export { SceneRenderProfiler, calculateNetworkTime, captureNetwork, processRecordedSpans };
393
+ export { ADHOC_KEYS_DROPDOWN_INTERACTION, ADHOC_VALUES_DROPDOWN_INTERACTION, FILTER_CHANGED_INTERACTION, FILTER_REMOVED_INTERACTION, FILTER_RESTORED_INTERACTION, GROUPBY_DIMENSIONS_INTERACTION, REFRESH_INTERACTION, SCOPES_CHANGED_INTERACTION, SceneRenderProfiler, TIME_RANGE_CHANGE_INTERACTION, VARIABLE_VALUE_CHANGED_INTERACTION, calculateNetworkTime, captureNetwork, processRecordedSpans };
349
394
  //# sourceMappingURL=SceneRenderProfiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SceneRenderProfiler.js","sources":["../../../src/behaviors/SceneRenderProfiler.ts"],"sourcesContent":["import { writeSceneLog, writeSceneLogStyled } from '../utils/writeSceneLog';\nimport { SceneQueryControllerLike, LongFrameEvent, SceneComponentInteractionEvent } from './types';\nimport { LongFrameDetector } from './LongFrameDetector';\n\nconst POST_STORM_WINDOW = 2000; // Time after last query to observe slow frames\nconst DEFAULT_LONG_FRAME_THRESHOLD = 30; // Threshold for tail recording slow frames\n\n/**\n * SceneRenderProfiler tracks dashboard interaction performance including:\n * - Total interaction duration\n * - Network time\n * - Long frame detection (50ms threshold) during interaction using LoAF API (default) or manual tracking (fallback)\n * - Slow frame detection (30ms threshold) for tail recording after interaction\n *\n * Long frame detection during interaction:\n * - 50ms threshold aligned with LoAF API default\n * - LoAF API preferred (Chrome 123+) with manual fallback\n * - Provides script attribution when using LoAF API\n *\n * Slow frame detection for tail recording:\n * - 30ms threshold for post-interaction monitoring\n * - Manual frame timing measurement\n * - Captures rendering delays after user interaction completes\n */\n\nexport class SceneRenderProfiler {\n #profileInProgress: {\n // Profile origin, i.e. scene refresh picker\n origin: string;\n crumbs: string[];\n } | null = null;\n\n #interactionInProgress: {\n interaction: string;\n startTs: number;\n } | null = null;\n\n #profileStartTs: number | null = null;\n #trailAnimationFrameId: number | null = null;\n\n // Will keep measured lengths trailing frames\n #recordedTrailingSpans: number[] = [];\n\n // Long frame tracking\n #longFrameDetector: LongFrameDetector;\n #longFramesCount = 0;\n #longFramesTotalTime = 0;\n\n #visibilityChangeHandler: (() => void) | null = null;\n #onInteractionComplete: ((event: SceneComponentInteractionEvent) => void) | null = null;\n\n public constructor(private queryController?: SceneQueryControllerLike) {\n this.#longFrameDetector = new LongFrameDetector();\n this.setupVisibilityChangeHandler();\n this.#interactionInProgress = null;\n }\n\n public setQueryController(queryController: SceneQueryControllerLike) {\n this.queryController = queryController;\n }\n\n public setInteractionCompleteHandler(handler?: (event: SceneComponentInteractionEvent) => void) {\n this.#onInteractionComplete = handler ?? null;\n }\n\n private setupVisibilityChangeHandler() {\n // Ensure event listener is only added once\n if (this.#visibilityChangeHandler) {\n return;\n }\n\n // Handle tab switching with Page Visibility API\n this.#visibilityChangeHandler = () => {\n if (document.hidden && this.#profileInProgress) {\n writeSceneLog('SceneRenderProfiler', 'Tab became inactive, cancelling profile');\n this.cancelProfile();\n }\n };\n\n if (typeof document !== 'undefined') {\n document.addEventListener('visibilitychange', this.#visibilityChangeHandler);\n }\n }\n\n public cleanup() {\n // Remove event listener to prevent memory leaks\n if (this.#visibilityChangeHandler && typeof document !== 'undefined') {\n document.removeEventListener('visibilitychange', this.#visibilityChangeHandler);\n this.#visibilityChangeHandler = null;\n }\n\n // Cleanup long frame tracking\n this.#longFrameDetector.stop();\n\n // Cancel any ongoing profiling\n this.cancelProfile();\n }\n\n public startProfile(name: string) {\n // Only start profile if tab is active. This makes sure we don't start a profile when i.e. someone opens a dashboard in a new tab\n // and doesn't interact with it.\n if (document.hidden) {\n writeSceneLog('SceneRenderProfiler', 'Tab is inactive, skipping profile', name);\n return;\n }\n\n if (this.#profileInProgress) {\n if (this.#trailAnimationFrameId) {\n this.cancelProfile();\n this._startNewProfile(name, true);\n } else {\n this.addCrumb(name);\n }\n } else {\n this._startNewProfile(name);\n }\n }\n\n public startInteraction(interaction: string) {\n // Cancel any existing interaction recording\n if (this.#interactionInProgress) {\n writeSceneLog('profile', 'Cancelled interaction:', this.#interactionInProgress);\n this.#interactionInProgress = null;\n }\n\n this.#interactionInProgress = {\n interaction,\n startTs: performance.now(),\n };\n\n writeSceneLog('SceneRenderProfiler', 'Started interaction:', interaction);\n }\n\n public stopInteraction() {\n if (!this.#interactionInProgress) {\n return;\n }\n\n const endTs = performance.now();\n const interactionDuration = endTs - this.#interactionInProgress.startTs;\n\n // Capture network requests that occurred during the interaction\n const networkDuration = captureNetwork(this.#interactionInProgress.startTs, endTs);\n\n writeSceneLog('SceneRenderProfiler', 'Completed interaction:');\n writeSceneLog('', ` ├─ Total time: ${interactionDuration.toFixed(1)}ms`);\n writeSceneLog('', ` ├─ Network duration: ${networkDuration.toFixed(1)}ms`);\n writeSceneLog('', ` ├─ StartTs: ${this.#interactionInProgress.startTs.toFixed(1)}ms`);\n writeSceneLog('', ` └─ EndTs: ${endTs.toFixed(1)}ms`);\n\n if (this.#onInteractionComplete && this.#profileInProgress) {\n this.#onInteractionComplete({\n origin: this.#interactionInProgress.interaction,\n duration: interactionDuration,\n networkDuration,\n startTs: this.#interactionInProgress.startTs,\n endTs,\n });\n }\n\n // Create performance marks for browser dev tools\n performance.mark(`${this.#interactionInProgress.interaction}_start`, {\n startTime: this.#interactionInProgress.startTs,\n });\n performance.mark(`${this.#interactionInProgress.interaction}_end`, {\n startTime: endTs,\n });\n performance.measure(\n `Interaction_${this.#interactionInProgress.interaction}`,\n `${this.#interactionInProgress.interaction}_start`,\n `${this.#interactionInProgress.interaction}_end`\n );\n\n this.#interactionInProgress = null;\n }\n\n public getCurrentInteraction(): string | null {\n return this.#interactionInProgress?.interaction ?? null;\n }\n\n /**\n * Starts a new profile for performance measurement.\n *\n * @param name - The origin/trigger of the profile (e.g., 'time_range_change', 'variable_value_changed')\n * @param force - Whether this is a \"forced\" profile (true) or \"clean\" profile (false)\n * - \"forced\": Started by canceling an existing profile that was recording trailing frames\n * This happens when a new user interaction occurs before the previous one\n * finished measuring its performance impact\n * - \"clean\": Started when no profile is currently active\n */\n private _startNewProfile(name: string, force = false) {\n this.#profileInProgress = { origin: name, crumbs: [] };\n this.#profileStartTs = performance.now();\n this.#longFramesCount = 0;\n this.#longFramesTotalTime = 0;\n\n // Add performance mark for debugging in dev tools\n if (typeof performance !== 'undefined' && performance.mark) {\n const markName = `Dashboard Profile Start: ${name}`;\n performance.mark(markName);\n }\n\n // Log profile start in structured format\n writeSceneLogStyled(\n 'SceneRenderProfiler',\n `Profile started[${force ? 'forced' : 'clean'}]`,\n 'color: #FFCC00; font-weight: bold;'\n );\n writeSceneLog('', ` ├─ Origin: ${this.#profileInProgress?.origin || 'unknown'}`);\n writeSceneLog('', ` └─ Timestamp: ${this.#profileStartTs.toFixed(1)}ms`);\n\n // Start long frame detection with callback\n this.#longFrameDetector.start((event: LongFrameEvent) => {\n // Only record long frames during active profiling\n if (!this.#profileInProgress || !this.#profileStartTs) {\n return;\n }\n\n // Only record frames that occur after profile started\n if (event.timestamp < this.#profileStartTs) {\n return;\n }\n\n this.#longFramesCount++;\n this.#longFramesTotalTime += event.duration;\n });\n }\n\n private recordProfileTail(measurementStartTime: number, profileStartTs: number) {\n this.#trailAnimationFrameId = requestAnimationFrame(() =>\n this.measureTrailingFrames(measurementStartTime, measurementStartTime, profileStartTs)\n );\n }\n\n private measureTrailingFrames = (measurementStartTs: number, lastFrameTime: number, profileStartTs: number) => {\n const currentFrameTime = performance.now();\n const frameLength = currentFrameTime - lastFrameTime;\n\n this.#recordedTrailingSpans.push(frameLength);\n\n if (currentFrameTime - measurementStartTs! < POST_STORM_WINDOW) {\n if (this.#profileInProgress) {\n this.#trailAnimationFrameId = requestAnimationFrame(() =>\n this.measureTrailingFrames(measurementStartTs, currentFrameTime, profileStartTs)\n );\n }\n } else {\n const slowFrames = processRecordedSpans(this.#recordedTrailingSpans);\n const slowFramesTime = slowFrames.reduce((acc, val) => acc + val, 0);\n\n // Log tail recording in structured format\n writeSceneLog(\n 'SceneRenderProfiler',\n `Profile tail recorded - Slow frames: ${slowFramesTime.toFixed(1)}ms (${slowFrames.length} frames)`\n );\n writeSceneLog('', ` ├─ Origin: ${this.#profileInProgress?.origin || 'unknown'}`);\n writeSceneLog('', ` └─ Crumbs:`, this.#profileInProgress?.crumbs || []);\n\n this.#recordedTrailingSpans = [];\n\n const profileDuration = measurementStartTs - profileStartTs;\n\n // Add performance marks for debugging in dev tools\n if (typeof performance !== 'undefined' && performance.mark) {\n const profileName = this.#profileInProgress?.origin || 'unknown';\n const totalTime = profileDuration + slowFramesTime;\n\n // Mark profile completion\n performance.mark(`Dashboard Profile End: ${profileName}`);\n\n // Add measure from start to end if possible\n const startMarkName = `Dashboard Profile Start: ${profileName}`;\n try {\n performance.measure(\n `Dashboard Profile: ${profileName} (${totalTime.toFixed(1)}ms)`,\n startMarkName,\n `Dashboard Profile End: ${profileName}`\n );\n } catch {\n // Start mark might not exist, create a simple end mark\n performance.mark(`Dashboard Profile Complete: ${profileName} (${totalTime.toFixed(1)}ms)`);\n }\n\n // Add measurements for slow frame details if significant\n if (slowFrames.length > 0) {\n const slowFramesMarkName = `Slow Frames Summary: ${slowFrames.length} frames (${slowFramesTime.toFixed(\n 1\n )}ms)`;\n performance.mark(slowFramesMarkName);\n\n // Create individual measurements for each slow frame during tail\n slowFrames.forEach((frameTime, index) => {\n if (frameTime > 16) {\n // Only measure frames slower than 16ms (60fps)\n try {\n const frameStartTime =\n this.#profileStartTs! +\n profileDuration +\n (index > 0 ? slowFrames.slice(0, index).reduce((sum, t) => sum + t, 0) : 0);\n const frameId = `slow-frame-${index}`;\n const frameStartMark = `${frameId}-start`;\n const frameEndMark = `${frameId}-end`;\n\n performance.mark(frameStartMark, { startTime: frameStartTime });\n performance.mark(frameEndMark, { startTime: frameStartTime + frameTime });\n performance.measure(`Slow Frame ${index + 1}: ${frameTime.toFixed(1)}ms`, frameStartMark, frameEndMark);\n } catch {\n // Fallback if startTime not supported\n performance.mark(`Slow Frame ${index + 1}: ${frameTime.toFixed(1)}ms`);\n }\n }\n });\n }\n }\n\n // Log performance summary in a structured format\n const completionTimestamp = performance.now();\n writeSceneLog('SceneRenderProfiler', 'Profile completed');\n writeSceneLog('', ` ├─ Timestamp: ${completionTimestamp.toFixed(1)}ms`);\n writeSceneLog('', ` ├─ Total time: ${(profileDuration + slowFramesTime).toFixed(1)}ms`);\n writeSceneLog('', ` ├─ Slow frames: ${slowFramesTime}ms (${slowFrames.length} frames)`);\n writeSceneLog('', ` └─ Long frames: ${this.#longFramesTotalTime}ms (${this.#longFramesCount} frames)`);\n\n // Stop long frame detection now that the profile is complete\n this.#longFrameDetector.stop();\n writeSceneLogStyled(\n 'SceneRenderProfiler',\n `Stopped long frame detection - profile complete at ${completionTimestamp.toFixed(1)}ms`,\n 'color: #00CC00; font-weight: bold;'\n );\n\n this.#trailAnimationFrameId = null;\n\n const profileEndTs = profileStartTs + profileDuration + slowFramesTime;\n\n // Guard against race condition where profile might be cancelled during execution\n if (!this.#profileInProgress) {\n return;\n }\n\n performance.measure(`DashboardInteraction ${this.#profileInProgress.origin}`, {\n start: profileStartTs,\n end: profileEndTs,\n });\n\n const networkDuration = captureNetwork(profileStartTs, profileEndTs);\n\n if (this.queryController?.state.onProfileComplete && this.#profileInProgress) {\n this.queryController.state.onProfileComplete({\n origin: this.#profileInProgress.origin,\n crumbs: this.#profileInProgress.crumbs,\n duration: profileDuration + slowFramesTime,\n networkDuration,\n startTs: profileStartTs,\n endTs: profileEndTs,\n longFramesCount: this.#longFramesCount,\n longFramesTotalTime: this.#longFramesTotalTime,\n // @ts-ignore\n jsHeapSizeLimit: performance.memory ? performance.memory.jsHeapSizeLimit : 0,\n // @ts-ignore\n usedJSHeapSize: performance.memory ? performance.memory.usedJSHeapSize : 0,\n // @ts-ignore\n totalJSHeapSize: performance.memory ? performance.memory.totalJSHeapSize : 0,\n });\n\n this.#profileInProgress = null;\n this.#trailAnimationFrameId = null;\n }\n // @ts-ignore\n if (window.__runs) {\n // @ts-ignore\n window.__runs += `${Date.now()}, ${profileDuration + slowFramesTime}\\n`;\n } else {\n // @ts-ignore\n window.__runs = `${Date.now()}, ${profileDuration + slowFramesTime}\\n`;\n }\n }\n };\n\n public tryCompletingProfile() {\n if (!this.#profileInProgress) {\n return;\n }\n\n writeSceneLog('SceneRenderProfiler', 'Trying to complete profile', this.#profileInProgress);\n if (this.queryController?.runningQueriesCount() === 0 && this.#profileInProgress) {\n writeSceneLog('SceneRenderProfiler', 'All queries completed, starting tail measurement');\n // Note: Long frame detector continues running during tail measurement\n // It will be stopped when the profile completely finishes\n this.recordProfileTail(performance.now(), this.#profileStartTs!);\n }\n }\n\n public isTailRecording() {\n return Boolean(this.#trailAnimationFrameId);\n }\n\n public cancelTailRecording() {\n if (this.#trailAnimationFrameId) {\n cancelAnimationFrame(this.#trailAnimationFrameId);\n this.#trailAnimationFrameId = null;\n writeSceneLog('SceneRenderProfiler', 'Cancelled recording frames, new profile started');\n }\n }\n\n // cancel profile\n public cancelProfile() {\n if (this.#profileInProgress) {\n writeSceneLog('SceneRenderProfiler', 'Cancelling profile', this.#profileInProgress);\n this.#profileInProgress = null;\n // Cancel any pending animation frame to prevent accessing null profileInProgress\n if (this.#trailAnimationFrameId) {\n cancelAnimationFrame(this.#trailAnimationFrameId);\n this.#trailAnimationFrameId = null;\n }\n // Stop long frame tracking\n this.#longFrameDetector.stop();\n writeSceneLog('SceneRenderProfiler', 'Stopped long frame detection - profile cancelled');\n // Reset recorded spans to ensure complete cleanup\n this.#recordedTrailingSpans = [];\n this.#longFramesCount = 0;\n this.#longFramesTotalTime = 0;\n }\n }\n\n public addCrumb(crumb: string) {\n if (this.#profileInProgress) {\n writeSceneLog('SceneRenderProfiler', 'Adding crumb:', crumb);\n this.#profileInProgress.crumbs.push(crumb);\n }\n }\n}\n\nexport function processRecordedSpans(spans: number[]) {\n // identify last span in spans that's bigger than default threshold\n for (let i = spans.length - 1; i >= 0; i--) {\n if (spans[i] > DEFAULT_LONG_FRAME_THRESHOLD) {\n return spans.slice(0, i + 1);\n }\n }\n return [spans[0]];\n}\n\nexport function captureNetwork(startTs: number, endTs: number) {\n const entries = performance.getEntriesByType('resource') as PerformanceResourceTiming[];\n performance.clearResourceTimings();\n // Only include network entries that both started AND ended within the time window\n const networkEntries = entries.filter(\n (entry) =>\n entry.startTime >= startTs &&\n entry.startTime <= endTs &&\n entry.responseEnd >= startTs &&\n entry.responseEnd <= endTs\n );\n for (const entry of networkEntries) {\n performance.measure('Network entry ' + entry.name, {\n start: entry.startTime,\n end: entry.responseEnd,\n });\n }\n\n return calculateNetworkTime(networkEntries);\n}\n\n// Will calculate total time spent on Network\nexport function calculateNetworkTime(requests: PerformanceResourceTiming[]): number {\n if (requests.length === 0) {\n return 0;\n }\n\n // Step 1: Sort the requests by startTs\n requests.sort((a, b) => a.startTime - b.startTime);\n\n // Step 2: Initialize variables\n let totalNetworkTime = 0;\n let currentStart = requests[0].startTime;\n let currentEnd = requests[0].responseEnd;\n\n // Step 3: Iterate through the sorted list and merge overlapping intervals\n for (let i = 1; i < requests.length; i++) {\n if (requests[i].startTime <= currentEnd) {\n // Overlapping intervals, merge them\n currentEnd = Math.max(currentEnd, requests[i].responseEnd);\n } else {\n // Non-overlapping interval, add the duration to total time\n totalNetworkTime += currentEnd - currentStart;\n\n // Update current interval\n currentStart = requests[i].startTime;\n currentEnd = requests[i].responseEnd;\n }\n }\n\n // Step 4: Add the last interval\n totalNetworkTime += currentEnd - currentStart;\n\n return totalNetworkTime;\n}\n\nexport const REFRESH_INTERACTION = 'refresh';\nexport const TIME_RANGE_CHANGE_INTERACTION = 'time_range_change';\nexport const FILTER_ADDED_INTERACTION = 'filter_added';\nexport const FILTER_REMOVED_INTERACTION = 'filter_removed';\nexport const FILTER_CHANGED_INTERACTION = 'filter_changed';\nexport const FILTER_RESTORED_INTERACTION = 'filter_restored';\nexport const VARIABLE_VALUE_CHANGED_INTERACTION = 'variable_value_changed';\nexport const SCOPES_CHANGED_INTERACTION = 'scopes_changed';\nexport const ADHOC_KEYS_DROPDOWN_INTERACTION = 'adhoc_keys_dropdown';\nexport const ADHOC_VALUES_DROPDOWN_INTERACTION = 'adhoc_values_dropdown';\nexport const GROUPBY_DIMENSIONS_INTERACTION = 'groupby_dimensions';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,IAAA,kBAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,sBAAA;AAIA,MAAM,iBAAoB,GAAA,GAAA;AAC1B,MAAM,4BAA+B,GAAA,EAAA;AAoB9B,MAAM,mBAAoB,CAAA;AAAA,EA0BxB,YAAoB,eAA4C,EAAA;AAA5C,IAAA,IAAA,CAAA,eAAA,GAAA,eAAA;AAzB3B,IAIW,YAAA,CAAA,IAAA,EAAA,kBAAA,EAAA,IAAA,CAAA;AAEX,IAGW,YAAA,CAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,CAAA;AAEX,IAAiC,YAAA,CAAA,IAAA,EAAA,eAAA,EAAA,IAAA,CAAA;AACjC,IAAwC,YAAA,CAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,CAAA;AAGxC;AAAA,IAAA,YAAA,CAAA,IAAA,EAAA,sBAAA,EAAmC,EAAC,CAAA;AAGpC;AAAA,IAAA,YAAA,CAAA,IAAA,EAAA,kBAAA,CAAA;AACA,IAAmB,YAAA,CAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,CAAA;AACnB,IAAuB,YAAA,CAAA,IAAA,EAAA,oBAAA,EAAA,CAAA,CAAA;AAEvB,IAAgD,YAAA,CAAA,IAAA,EAAA,wBAAA,EAAA,IAAA,CAAA;AAChD,IAAmF,YAAA,CAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,CAAA;AAyLnF,IAAA,IAAA,CAAQ,qBAAwB,GAAA,CAAC,kBAA4B,EAAA,aAAA,EAAuB,cAA2B,KAAA;AA1OjH,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA2OI,MAAM,MAAA,gBAAA,GAAmB,YAAY,GAAI,EAAA;AACzC,MAAA,MAAM,cAAc,gBAAmB,GAAA,aAAA;AAEvC,MAAK,YAAA,CAAA,IAAA,EAAA,sBAAA,CAAA,CAAuB,KAAK,WAAW,CAAA;AAE5C,MAAI,IAAA,gBAAA,GAAmB,qBAAsB,iBAAmB,EAAA;AAC9D,QAAA,IAAI,mBAAK,kBAAoB,CAAA,EAAA;AAC3B,UAAA,YAAA,CAAA,IAAA,EAAK,sBAAyB,EAAA,qBAAA;AAAA,YAAsB,MAClD,IAAA,CAAK,qBAAsB,CAAA,kBAAA,EAAoB,kBAAkB,cAAc;AAAA,WACjF,CAAA;AAAA;AACF,OACK,MAAA;AACL,QAAM,MAAA,UAAA,GAAa,oBAAqB,CAAA,YAAA,CAAA,IAAA,EAAK,sBAAsB,CAAA,CAAA;AACnE,QAAM,MAAA,cAAA,GAAiB,WAAW,MAAO,CAAA,CAAC,KAAK,GAAQ,KAAA,GAAA,GAAM,KAAK,CAAC,CAAA;AAGnE,QAAA,aAAA;AAAA,UACE,qBAAA;AAAA,UACA,wCAAwC,cAAe,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAA,IAAA,EAAO,WAAW,MAAM,CAAA,QAAA;AAAA,SAC3F;AACA,QAAA,aAAA,CAAc,IAAI,CAAgB,uBAAA,EAAA,CAAA,CAAA,EAAA,GAAA,YAAA,CAAA,IAAA,EAAK,wBAAL,IAAyB,GAAA,MAAA,GAAA,EAAA,CAAA,MAAA,KAAU,SAAS,CAAE,CAAA,CAAA;AAChF,QAAA,aAAA,CAAc,IAAI,CAAgB,sBAAA,CAAA,EAAA,CAAA,CAAA,EAAA,GAAA,YAAA,CAAA,IAAA,EAAK,wBAAL,IAAyB,GAAA,MAAA,GAAA,EAAA,CAAA,MAAA,KAAU,EAAE,CAAA;AAEvE,QAAA,YAAA,CAAA,IAAA,EAAK,wBAAyB,EAAC,CAAA;AAE/B,QAAA,MAAM,kBAAkB,kBAAqB,GAAA,cAAA;AAG7C,QAAA,IAAI,OAAO,WAAA,KAAgB,WAAe,IAAA,WAAA,CAAY,IAAM,EAAA;AAC1D,UAAA,MAAM,WAAc,GAAA,CAAA,CAAA,EAAA,GAAA,YAAA,CAAA,IAAA,EAAK,kBAAL,CAAA,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAyB,MAAU,KAAA,SAAA;AACvD,UAAA,MAAM,YAAY,eAAkB,GAAA,cAAA;AAGpC,UAAY,WAAA,CAAA,IAAA,CAAK,CAA0B,uBAAA,EAAA,WAAW,CAAE,CAAA,CAAA;AAGxD,UAAM,MAAA,aAAA,GAAgB,4BAA4B,WAAW,CAAA,CAAA;AAC7D,UAAI,IAAA;AACF,YAAY,WAAA,CAAA,OAAA;AAAA,cACV,sBAAsB,WAAW,CAAA,EAAA,EAAK,SAAU,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAA;AAAA,cAC1D,aAAA;AAAA,cACA,0BAA0B,WAAW,CAAA;AAAA,aACvC;AAAA,WACM,CAAA,OAAA,CAAA,EAAA;AAEN,YAAY,WAAA,CAAA,IAAA,CAAK,+BAA+B,WAAW,CAAA,EAAA,EAAK,UAAU,OAAQ,CAAA,CAAC,CAAC,CAAK,GAAA,CAAA,CAAA;AAAA;AAI3F,UAAI,IAAA,UAAA,CAAW,SAAS,CAAG,EAAA;AACzB,YAAA,MAAM,kBAAqB,GAAA,CAAA,qBAAA,EAAwB,UAAW,CAAA,MAAM,YAAY,cAAe,CAAA,OAAA;AAAA,cAC7F;AAAA,aACD,CAAA,GAAA,CAAA;AACD,YAAA,WAAA,CAAY,KAAK,kBAAkB,CAAA;AAGnC,YAAW,UAAA,CAAA,OAAA,CAAQ,CAAC,SAAA,EAAW,KAAU,KAAA;AACvC,cAAA,IAAI,YAAY,EAAI,EAAA;AAElB,gBAAI,IAAA;AACF,kBAAA,MAAM,iBACJ,YAAK,CAAA,IAAA,EAAA,eAAA,CAAA,GACL,mBACC,KAAQ,GAAA,CAAA,GAAI,WAAW,KAAM,CAAA,CAAA,EAAG,KAAK,CAAA,CAAE,OAAO,CAAC,GAAA,EAAK,MAAM,GAAM,GAAA,CAAA,EAAG,CAAC,CAAI,GAAA,CAAA,CAAA;AAC3E,kBAAM,MAAA,OAAA,GAAU,cAAc,KAAK,CAAA,CAAA;AACnC,kBAAM,MAAA,cAAA,GAAiB,GAAG,OAAO,CAAA,MAAA,CAAA;AACjC,kBAAM,MAAA,YAAA,GAAe,GAAG,OAAO,CAAA,IAAA,CAAA;AAE/B,kBAAA,WAAA,CAAY,IAAK,CAAA,cAAA,EAAgB,EAAE,SAAA,EAAW,gBAAgB,CAAA;AAC9D,kBAAA,WAAA,CAAY,KAAK,YAAc,EAAA,EAAE,SAAW,EAAA,cAAA,GAAiB,WAAW,CAAA;AACxE,kBAAY,WAAA,CAAA,OAAA,CAAQ,CAAc,WAAA,EAAA,KAAA,GAAQ,CAAC,CAAA,EAAA,EAAK,SAAU,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAM,EAAA,CAAA,EAAA,cAAA,EAAgB,YAAY,CAAA;AAAA,iBAChG,CAAA,OAAA,CAAA,EAAA;AAEN,kBAAY,WAAA,CAAA,IAAA,CAAK,cAAc,KAAQ,GAAA,CAAC,KAAK,SAAU,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAI,EAAA,CAAA,CAAA;AAAA;AACvE;AACF,aACD,CAAA;AAAA;AACH;AAIF,QAAM,MAAA,mBAAA,GAAsB,YAAY,GAAI,EAAA;AAC5C,QAAA,aAAA,CAAc,uBAAuB,mBAAmB,CAAA;AACxD,QAAA,aAAA,CAAc,IAAI,CAAmB,0BAAA,EAAA,mBAAA,CAAoB,OAAQ,CAAA,CAAC,CAAC,CAAI,EAAA,CAAA,CAAA;AACvE,QAAA,aAAA,CAAc,IAAI,CAAqB,2BAAA,EAAA,CAAA,eAAA,GAAkB,gBAAgB,OAAQ,CAAA,CAAC,CAAC,CAAI,EAAA,CAAA,CAAA;AACvF,QAAA,aAAA,CAAc,IAAI,CAAqB,4BAAA,EAAA,cAAc,CAAO,IAAA,EAAA,UAAA,CAAW,MAAM,CAAU,QAAA,CAAA,CAAA;AACvF,QAAA,aAAA,CAAc,IAAI,CAAqB,4BAAA,EAAA,YAAA,CAAA,IAAA,EAAK,qBAAoB,CAAO,IAAA,EAAA,YAAA,CAAA,IAAA,EAAK,iBAAgB,CAAU,QAAA,CAAA,CAAA;AAGtG,QAAA,YAAA,CAAA,IAAA,EAAK,oBAAmB,IAAK,EAAA;AAC7B,QAAA,mBAAA;AAAA,UACE,qBAAA;AAAA,UACA,CAAsD,mDAAA,EAAA,mBAAA,CAAoB,OAAQ,CAAA,CAAC,CAAC,CAAA,EAAA,CAAA;AAAA,UACpF;AAAA,SACF;AAEA,QAAA,YAAA,CAAA,IAAA,EAAK,sBAAyB,EAAA,IAAA,CAAA;AAE9B,QAAM,MAAA,YAAA,GAAe,iBAAiB,eAAkB,GAAA,cAAA;AAGxD,QAAI,IAAA,CAAC,mBAAK,kBAAoB,CAAA,EAAA;AAC5B,UAAA;AAAA;AAGF,QAAA,WAAA,CAAY,OAAQ,CAAA,CAAA,qBAAA,EAAwB,YAAK,CAAA,IAAA,EAAA,kBAAA,CAAA,CAAmB,MAAM,CAAI,CAAA,EAAA;AAAA,UAC5E,KAAO,EAAA,cAAA;AAAA,UACP,GAAK,EAAA;AAAA,SACN,CAAA;AAED,QAAM,MAAA,eAAA,GAAkB,cAAe,CAAA,cAAA,EAAgB,YAAY,CAAA;AAEnE,QAAA,IAAA,CAAA,CAAI,UAAK,eAAL,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,KAAM,CAAA,iBAAA,KAAqB,mBAAK,kBAAoB,CAAA,EAAA;AAC5E,UAAK,IAAA,CAAA,eAAA,CAAgB,MAAM,iBAAkB,CAAA;AAAA,YAC3C,MAAA,EAAQ,mBAAK,kBAAmB,CAAA,CAAA,MAAA;AAAA,YAChC,MAAA,EAAQ,mBAAK,kBAAmB,CAAA,CAAA,MAAA;AAAA,YAChC,UAAU,eAAkB,GAAA,cAAA;AAAA,YAC5B,eAAA;AAAA,YACA,OAAS,EAAA,cAAA;AAAA,YACT,KAAO,EAAA,YAAA;AAAA,YACP,iBAAiB,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA;AAAA,YACtB,qBAAqB,YAAK,CAAA,IAAA,EAAA,oBAAA,CAAA;AAAA;AAAA,YAE1B,eAAiB,EAAA,WAAA,CAAY,MAAS,GAAA,WAAA,CAAY,OAAO,eAAkB,GAAA,CAAA;AAAA;AAAA,YAE3E,cAAgB,EAAA,WAAA,CAAY,MAAS,GAAA,WAAA,CAAY,OAAO,cAAiB,GAAA,CAAA;AAAA;AAAA,YAEzE,eAAiB,EAAA,WAAA,CAAY,MAAS,GAAA,WAAA,CAAY,OAAO,eAAkB,GAAA;AAAA,WAC5E,CAAA;AAED,UAAA,YAAA,CAAA,IAAA,EAAK,kBAAqB,EAAA,IAAA,CAAA;AAC1B,UAAA,YAAA,CAAA,IAAA,EAAK,sBAAyB,EAAA,IAAA,CAAA;AAAA;AAGhC,QAAA,IAAI,OAAO,MAAQ,EAAA;AAEjB,UAAA,MAAA,CAAO,UAAU,CAAG,EAAA,IAAA,CAAK,KAAK,CAAA,EAAA,EAAK,kBAAkB,cAAc;AAAA,CAAA;AAAA,SAC9D,MAAA;AAEL,UAAA,MAAA,CAAO,SAAS,CAAG,EAAA,IAAA,CAAK,KAAK,CAAA,EAAA,EAAK,kBAAkB,cAAc;AAAA,CAAA;AAAA;AACpE;AACF,KACF;AArUE,IAAK,YAAA,CAAA,IAAA,EAAA,kBAAA,EAAqB,IAAI,iBAAkB,EAAA,CAAA;AAChD,IAAA,IAAA,CAAK,4BAA6B,EAAA;AAClC,IAAA,YAAA,CAAA,IAAA,EAAK,sBAAyB,EAAA,IAAA,CAAA;AAAA;AAChC,EAEO,mBAAmB,eAA2C,EAAA;AACnE,IAAA,IAAA,CAAK,eAAkB,GAAA,eAAA;AAAA;AACzB,EAEO,8BAA8B,OAA2D,EAAA;AAC9F,IAAA,YAAA,CAAA,IAAA,EAAK,wBAAyB,OAAW,IAAA,IAAA,GAAA,OAAA,GAAA,IAAA,CAAA;AAAA;AAC3C,EAEQ,4BAA+B,GAAA;AAErC,IAAA,IAAI,mBAAK,wBAA0B,CAAA,EAAA;AACjC,MAAA;AAAA;AAIF,IAAA,YAAA,CAAA,IAAA,EAAK,0BAA2B,MAAM;AACpC,MAAI,IAAA,QAAA,CAAS,MAAU,IAAA,YAAA,CAAA,IAAA,EAAK,kBAAoB,CAAA,EAAA;AAC9C,QAAA,aAAA,CAAc,uBAAuB,yCAAyC,CAAA;AAC9E,QAAA,IAAA,CAAK,aAAc,EAAA;AAAA;AACrB,KACF,CAAA;AAEA,IAAI,IAAA,OAAO,aAAa,WAAa,EAAA;AACnC,MAAS,QAAA,CAAA,gBAAA,CAAiB,kBAAoB,EAAA,YAAA,CAAA,IAAA,EAAK,wBAAwB,CAAA,CAAA;AAAA;AAC7E;AACF,EAEO,OAAU,GAAA;AAEf,IAAA,IAAI,YAAK,CAAA,IAAA,EAAA,wBAAA,CAAA,IAA4B,OAAO,QAAA,KAAa,WAAa,EAAA;AACpE,MAAS,QAAA,CAAA,mBAAA,CAAoB,kBAAoB,EAAA,YAAA,CAAA,IAAA,EAAK,wBAAwB,CAAA,CAAA;AAC9E,MAAA,YAAA,CAAA,IAAA,EAAK,wBAA2B,EAAA,IAAA,CAAA;AAAA;AAIlC,IAAA,YAAA,CAAA,IAAA,EAAK,oBAAmB,IAAK,EAAA;AAG7B,IAAA,IAAA,CAAK,aAAc,EAAA;AAAA;AACrB,EAEO,aAAa,IAAc,EAAA;AAGhC,IAAA,IAAI,SAAS,MAAQ,EAAA;AACnB,MAAc,aAAA,CAAA,qBAAA,EAAuB,qCAAqC,IAAI,CAAA;AAC9E,MAAA;AAAA;AAGF,IAAA,IAAI,mBAAK,kBAAoB,CAAA,EAAA;AAC3B,MAAA,IAAI,mBAAK,sBAAwB,CAAA,EAAA;AAC/B,QAAA,IAAA,CAAK,aAAc,EAAA;AACnB,QAAK,IAAA,CAAA,gBAAA,CAAiB,MAAM,IAAI,CAAA;AAAA,OAC3B,MAAA;AACL,QAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AAAA;AACpB,KACK,MAAA;AACL,MAAA,IAAA,CAAK,iBAAiB,IAAI,CAAA;AAAA;AAC5B;AACF,EAEO,iBAAiB,WAAqB,EAAA;AAE3C,IAAA,IAAI,mBAAK,sBAAwB,CAAA,EAAA;AAC/B,MAAc,aAAA,CAAA,SAAA,EAAW,wBAA0B,EAAA,YAAA,CAAA,IAAA,EAAK,sBAAsB,CAAA,CAAA;AAC9E,MAAA,YAAA,CAAA,IAAA,EAAK,sBAAyB,EAAA,IAAA,CAAA;AAAA;AAGhC,IAAA,YAAA,CAAA,IAAA,EAAK,sBAAyB,EAAA;AAAA,MAC5B,WAAA;AAAA,MACA,OAAA,EAAS,YAAY,GAAI;AAAA,KAC3B,CAAA;AAEA,IAAc,aAAA,CAAA,qBAAA,EAAuB,wBAAwB,WAAW,CAAA;AAAA;AAC1E,EAEO,eAAkB,GAAA;AACvB,IAAI,IAAA,CAAC,mBAAK,sBAAwB,CAAA,EAAA;AAChC,MAAA;AAAA;AAGF,IAAM,MAAA,KAAA,GAAQ,YAAY,GAAI,EAAA;AAC9B,IAAM,MAAA,mBAAA,GAAsB,KAAQ,GAAA,YAAA,CAAA,IAAA,EAAK,sBAAuB,CAAA,CAAA,OAAA;AAGhE,IAAA,MAAM,eAAkB,GAAA,cAAA,CAAe,YAAK,CAAA,IAAA,EAAA,sBAAA,CAAA,CAAuB,SAAS,KAAK,CAAA;AAEjF,IAAA,aAAA,CAAc,uBAAuB,wBAAwB,CAAA;AAC7D,IAAA,aAAA,CAAc,IAAI,CAAoB,2BAAA,EAAA,mBAAA,CAAoB,OAAQ,CAAA,CAAC,CAAC,CAAI,EAAA,CAAA,CAAA;AACxE,IAAA,aAAA,CAAc,IAAI,CAA0B,iCAAA,EAAA,eAAA,CAAgB,OAAQ,CAAA,CAAC,CAAC,CAAI,EAAA,CAAA,CAAA;AAC1E,IAAc,aAAA,CAAA,EAAA,EAAI,2BAAiB,YAAK,CAAA,IAAA,EAAA,sBAAA,CAAA,CAAuB,QAAQ,OAAQ,CAAA,CAAC,CAAC,CAAI,EAAA,CAAA,CAAA;AACrF,IAAA,aAAA,CAAc,IAAI,CAAe,sBAAA,EAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,CAAC,CAAI,EAAA,CAAA,CAAA;AAErD,IAAI,IAAA,YAAA,CAAA,IAAA,EAAK,sBAA0B,CAAA,IAAA,YAAA,CAAA,IAAA,EAAK,kBAAoB,CAAA,EAAA;AAC1D,MAAA,YAAA,CAAA,IAAA,EAAK,wBAAL,IAA4B,CAAA,IAAA,EAAA;AAAA,QAC1B,MAAA,EAAQ,mBAAK,sBAAuB,CAAA,CAAA,WAAA;AAAA,QACpC,QAAU,EAAA,mBAAA;AAAA,QACV,eAAA;AAAA,QACA,OAAA,EAAS,mBAAK,sBAAuB,CAAA,CAAA,OAAA;AAAA,QACrC;AAAA,OACF,CAAA;AAAA;AAIF,IAAA,WAAA,CAAY,IAAK,CAAA,CAAA,EAAG,YAAK,CAAA,IAAA,EAAA,sBAAA,CAAA,CAAuB,WAAW,CAAU,MAAA,CAAA,EAAA;AAAA,MACnE,SAAA,EAAW,mBAAK,sBAAuB,CAAA,CAAA;AAAA,KACxC,CAAA;AACD,IAAA,WAAA,CAAY,IAAK,CAAA,CAAA,EAAG,YAAK,CAAA,IAAA,EAAA,sBAAA,CAAA,CAAuB,WAAW,CAAQ,IAAA,CAAA,EAAA;AAAA,MACjE,SAAW,EAAA;AAAA,KACZ,CAAA;AACD,IAAY,WAAA,CAAA,OAAA;AAAA,MACV,CAAA,YAAA,EAAe,YAAK,CAAA,IAAA,EAAA,sBAAA,CAAA,CAAuB,WAAW,CAAA,CAAA;AAAA,MACtD,CAAA,EAAG,YAAK,CAAA,IAAA,EAAA,sBAAA,CAAA,CAAuB,WAAW,CAAA,MAAA,CAAA;AAAA,MAC1C,CAAA,EAAG,YAAK,CAAA,IAAA,EAAA,sBAAA,CAAA,CAAuB,WAAW,CAAA,IAAA;AAAA,KAC5C;AAEA,IAAA,YAAA,CAAA,IAAA,EAAK,sBAAyB,EAAA,IAAA,CAAA;AAAA;AAChC,EAEO,qBAAuC,GAAA;AAhLhD,IAAA,IAAA,EAAA,EAAA,EAAA;AAiLI,IAAA,OAAA,CAAO,EAAK,GAAA,CAAA,EAAA,GAAA,YAAA,CAAA,IAAA,EAAA,sBAAA,CAAA,KAAL,IAA6B,GAAA,MAAA,GAAA,EAAA,CAAA,WAAA,KAA7B,IAA4C,GAAA,EAAA,GAAA,IAAA;AAAA;AACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYQ,gBAAA,CAAiB,IAAc,EAAA,KAAA,GAAQ,KAAO,EAAA;AA9LxD,IAAA,IAAA,EAAA;AA+LI,IAAA,YAAA,CAAA,IAAA,EAAK,oBAAqB,EAAE,MAAA,EAAQ,IAAM,EAAA,MAAA,EAAQ,EAAG,EAAA,CAAA;AACrD,IAAK,YAAA,CAAA,IAAA,EAAA,eAAA,EAAkB,YAAY,GAAI,EAAA,CAAA;AACvC,IAAA,YAAA,CAAA,IAAA,EAAK,gBAAmB,EAAA,CAAA,CAAA;AACxB,IAAA,YAAA,CAAA,IAAA,EAAK,oBAAuB,EAAA,CAAA,CAAA;AAG5B,IAAA,IAAI,OAAO,WAAA,KAAgB,WAAe,IAAA,WAAA,CAAY,IAAM,EAAA;AAC1D,MAAM,MAAA,QAAA,GAAW,4BAA4B,IAAI,CAAA,CAAA;AACjD,MAAA,WAAA,CAAY,KAAK,QAAQ,CAAA;AAAA;AAI3B,IAAA,mBAAA;AAAA,MACE,qBAAA;AAAA,MACA,CAAA,gBAAA,EAAmB,KAAQ,GAAA,QAAA,GAAW,OAAO,CAAA,CAAA,CAAA;AAAA,MAC7C;AAAA,KACF;AACA,IAAA,aAAA,CAAc,IAAI,CAAgB,uBAAA,EAAA,CAAA,CAAA,EAAA,GAAA,YAAA,CAAA,IAAA,EAAK,wBAAL,IAAyB,GAAA,MAAA,GAAA,EAAA,CAAA,MAAA,KAAU,SAAS,CAAE,CAAA,CAAA;AAChF,IAAA,aAAA,CAAc,IAAI,CAAmB,0BAAA,EAAA,YAAA,CAAA,IAAA,EAAK,iBAAgB,OAAQ,CAAA,CAAC,CAAC,CAAI,EAAA,CAAA,CAAA;AAGxE,IAAK,YAAA,CAAA,IAAA,EAAA,kBAAA,CAAA,CAAmB,KAAM,CAAA,CAAC,KAA0B,KAAA;AAEvD,MAAA,IAAI,CAAC,YAAA,CAAA,IAAA,EAAK,kBAAsB,CAAA,IAAA,CAAC,mBAAK,eAAiB,CAAA,EAAA;AACrD,QAAA;AAAA;AAIF,MAAI,IAAA,KAAA,CAAM,SAAY,GAAA,YAAA,CAAA,IAAA,EAAK,eAAiB,CAAA,EAAA;AAC1C,QAAA;AAAA;AAGF,MAAA,gBAAA,CAAA,IAAA,EAAK,gBAAL,CAAA,CAAA,CAAA,EAAA;AACA,MAAK,YAAA,CAAA,IAAA,EAAA,oBAAA,EAAL,YAAK,CAAA,IAAA,EAAA,oBAAA,CAAA,GAAwB,KAAM,CAAA,QAAA,CAAA;AAAA,KACpC,CAAA;AAAA;AACH,EAEQ,iBAAA,CAAkB,sBAA8B,cAAwB,EAAA;AAC9E,IAAA,YAAA,CAAA,IAAA,EAAK,sBAAyB,EAAA,qBAAA;AAAA,MAAsB,MAClD,IAAA,CAAK,qBAAsB,CAAA,oBAAA,EAAsB,sBAAsB,cAAc;AAAA,KACvF,CAAA;AAAA;AACF,EAmJO,oBAAuB,GAAA;AA3XhC,IAAA,IAAA,EAAA;AA4XI,IAAI,IAAA,CAAC,mBAAK,kBAAoB,CAAA,EAAA;AAC5B,MAAA;AAAA;AAGF,IAAc,aAAA,CAAA,qBAAA,EAAuB,4BAA8B,EAAA,YAAA,CAAA,IAAA,EAAK,kBAAkB,CAAA,CAAA;AAC1F,IAAA,IAAA,CAAA,CAAI,UAAK,eAAL,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,mBAA0B,EAAA,MAAA,CAAA,IAAK,mBAAK,kBAAoB,CAAA,EAAA;AAChF,MAAA,aAAA,CAAc,uBAAuB,kDAAkD,CAAA;AAGvF,MAAA,IAAA,CAAK,iBAAkB,CAAA,WAAA,CAAY,GAAI,EAAA,EAAG,mBAAK,eAAgB,CAAA,CAAA;AAAA;AACjE;AACF,EAEO,eAAkB,GAAA;AACvB,IAAO,OAAA,OAAA,CAAQ,mBAAK,sBAAsB,CAAA,CAAA;AAAA;AAC5C,EAEO,mBAAsB,GAAA;AAC3B,IAAA,IAAI,mBAAK,sBAAwB,CAAA,EAAA;AAC/B,MAAA,oBAAA,CAAqB,mBAAK,sBAAsB,CAAA,CAAA;AAChD,MAAA,YAAA,CAAA,IAAA,EAAK,sBAAyB,EAAA,IAAA,CAAA;AAC9B,MAAA,aAAA,CAAc,uBAAuB,iDAAiD,CAAA;AAAA;AACxF;AACF;AAAA,EAGO,aAAgB,GAAA;AACrB,IAAA,IAAI,mBAAK,kBAAoB,CAAA,EAAA;AAC3B,MAAc,aAAA,CAAA,qBAAA,EAAuB,oBAAsB,EAAA,YAAA,CAAA,IAAA,EAAK,kBAAkB,CAAA,CAAA;AAClF,MAAA,YAAA,CAAA,IAAA,EAAK,kBAAqB,EAAA,IAAA,CAAA;AAE1B,MAAA,IAAI,mBAAK,sBAAwB,CAAA,EAAA;AAC/B,QAAA,oBAAA,CAAqB,mBAAK,sBAAsB,CAAA,CAAA;AAChD,QAAA,YAAA,CAAA,IAAA,EAAK,sBAAyB,EAAA,IAAA,CAAA;AAAA;AAGhC,MAAA,YAAA,CAAA,IAAA,EAAK,oBAAmB,IAAK,EAAA;AAC7B,MAAA,aAAA,CAAc,uBAAuB,kDAAkD,CAAA;AAEvF,MAAA,YAAA,CAAA,IAAA,EAAK,wBAAyB,EAAC,CAAA;AAC/B,MAAA,YAAA,CAAA,IAAA,EAAK,gBAAmB,EAAA,CAAA,CAAA;AACxB,MAAA,YAAA,CAAA,IAAA,EAAK,oBAAuB,EAAA,CAAA,CAAA;AAAA;AAC9B;AACF,EAEO,SAAS,KAAe,EAAA;AAC7B,IAAA,IAAI,mBAAK,kBAAoB,CAAA,EAAA;AAC3B,MAAc,aAAA,CAAA,qBAAA,EAAuB,iBAAiB,KAAK,CAAA;AAC3D,MAAK,YAAA,CAAA,IAAA,EAAA,kBAAA,CAAA,CAAmB,MAAO,CAAA,IAAA,CAAK,KAAK,CAAA;AAAA;AAC3C;AAEJ;AArZE,kBAAA,GAAA,IAAA,OAAA,EAAA;AAMA,sBAAA,GAAA,IAAA,OAAA,EAAA;AAKA,eAAA,GAAA,IAAA,OAAA,EAAA;AACA,sBAAA,GAAA,IAAA,OAAA,EAAA;AAGA,sBAAA,GAAA,IAAA,OAAA,EAAA;AAGA,kBAAA,GAAA,IAAA,OAAA,EAAA;AACA,gBAAA,GAAA,IAAA,OAAA,EAAA;AACA,oBAAA,GAAA,IAAA,OAAA,EAAA;AAEA,wBAAA,GAAA,IAAA,OAAA,EAAA;AACA,sBAAA,GAAA,IAAA,OAAA,EAAA;AAgYK,SAAS,qBAAqB,KAAiB,EAAA;AAEpD,EAAA,KAAA,IAAS,IAAI,KAAM,CAAA,MAAA,GAAS,CAAG,EAAA,CAAA,IAAK,GAAG,CAAK,EAAA,EAAA;AAC1C,IAAI,IAAA,KAAA,CAAM,CAAC,CAAA,GAAI,4BAA8B,EAAA;AAC3C,MAAA,OAAO,KAAM,CAAA,KAAA,CAAM,CAAG,EAAA,CAAA,GAAI,CAAC,CAAA;AAAA;AAC7B;AAEF,EAAO,OAAA,CAAC,KAAM,CAAA,CAAC,CAAC,CAAA;AAClB;AAEgB,SAAA,cAAA,CAAe,SAAiB,KAAe,EAAA;AAC7D,EAAM,MAAA,OAAA,GAAU,WAAY,CAAA,gBAAA,CAAiB,UAAU,CAAA;AACvD,EAAA,WAAA,CAAY,oBAAqB,EAAA;AAEjC,EAAA,MAAM,iBAAiB,OAAQ,CAAA,MAAA;AAAA,IAC7B,CAAC,KAAA,KACC,KAAM,CAAA,SAAA,IAAa,OACnB,IAAA,KAAA,CAAM,SAAa,IAAA,KAAA,IACnB,KAAM,CAAA,WAAA,IAAe,OACrB,IAAA,KAAA,CAAM,WAAe,IAAA;AAAA,GACzB;AACA,EAAA,KAAA,MAAW,SAAS,cAAgB,EAAA;AAClC,IAAY,WAAA,CAAA,OAAA,CAAQ,gBAAmB,GAAA,KAAA,CAAM,IAAM,EAAA;AAAA,MACjD,OAAO,KAAM,CAAA,SAAA;AAAA,MACb,KAAK,KAAM,CAAA;AAAA,KACZ,CAAA;AAAA;AAGH,EAAA,OAAO,qBAAqB,cAAc,CAAA;AAC5C;AAGO,SAAS,qBAAqB,QAA+C,EAAA;AAClF,EAAI,IAAA,QAAA,CAAS,WAAW,CAAG,EAAA;AACzB,IAAO,OAAA,CAAA;AAAA;AAIT,EAAA,QAAA,CAAS,KAAK,CAAC,CAAA,EAAG,MAAM,CAAE,CAAA,SAAA,GAAY,EAAE,SAAS,CAAA;AAGjD,EAAA,IAAI,gBAAmB,GAAA,CAAA;AACvB,EAAI,IAAA,YAAA,GAAe,QAAS,CAAA,CAAC,CAAE,CAAA,SAAA;AAC/B,EAAI,IAAA,UAAA,GAAa,QAAS,CAAA,CAAC,CAAE,CAAA,WAAA;AAG7B,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,QAAA,CAAS,QAAQ,CAAK,EAAA,EAAA;AACxC,IAAA,IAAI,QAAS,CAAA,CAAC,CAAE,CAAA,SAAA,IAAa,UAAY,EAAA;AAEvC,MAAA,UAAA,GAAa,KAAK,GAAI,CAAA,UAAA,EAAY,QAAS,CAAA,CAAC,EAAE,WAAW,CAAA;AAAA,KACpD,MAAA;AAEL,MAAA,gBAAA,IAAoB,UAAa,GAAA,YAAA;AAGjC,MAAe,YAAA,GAAA,QAAA,CAAS,CAAC,CAAE,CAAA,SAAA;AAC3B,MAAa,UAAA,GAAA,QAAA,CAAS,CAAC,CAAE,CAAA,WAAA;AAAA;AAC3B;AAIF,EAAA,gBAAA,IAAoB,UAAa,GAAA,YAAA;AAEjC,EAAO,OAAA,gBAAA;AACT;AAEO,MAAM,mBAAsB,GAAA;AAC5B,MAAM,6BAAgC,GAAA;AAEtC,MAAM,0BAA6B,GAAA;AACnC,MAAM,0BAA6B,GAAA;AACnC,MAAM,2BAA8B,GAAA;AACpC,MAAM,kCAAqC,GAAA;AAC3C,MAAM,0BAA6B,GAAA;AACnC,MAAM,+BAAkC,GAAA;AACxC,MAAM,iCAAoC,GAAA;AAC1C,MAAM,8BAAiC,GAAA;;;;"}
@@ -5,7 +5,7 @@ import { RefreshPicker } from '@grafana/ui';
5
5
  import { SceneObjectBase } from '../core/SceneObjectBase.js';
6
6
  import { sceneGraph } from '../core/sceneGraph/index.js';
7
7
  import { SceneObjectUrlSyncConfig } from '../services/SceneObjectUrlSyncConfig.js';
8
- import { REFRESH_INTERACTION } from '../performance/interactionConstants.js';
8
+ import { REFRESH_INTERACTION } from '../behaviors/SceneRenderProfiler.js';
9
9
 
10
10
  const DEFAULT_INTERVALS = ["5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d"];
11
11
  class SceneRefreshPicker extends SceneObjectBase {