@perses-dev/timeseries-chart-plugin 0.13.0-beta.2 → 0.13.0-rc.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 (114) hide show
  1. package/__mf/js/TimeSeriesChart.3eab0aad.js +7 -0
  2. package/__mf/js/async/121.c3c0e54f.js +2 -0
  3. package/__mf/js/async/137.59c998ab.js +38 -0
  4. package/__mf/js/async/177.2fef2962.js +1 -0
  5. package/__mf/js/async/187.f5e8932b.js +1 -0
  6. package/__mf/js/async/192.c3dd56d5.js +1 -0
  7. package/__mf/js/async/2.60fa4a40.js +1 -0
  8. package/__mf/js/async/208.b9f374ad.js +7 -0
  9. package/__mf/js/async/235.d23c8ef0.js +1 -0
  10. package/__mf/js/async/274.72dfa9c8.js +2 -0
  11. package/__mf/js/async/356.8170c96d.js +1 -0
  12. package/__mf/js/async/392.b9ba5bf2.js +2 -0
  13. package/__mf/js/async/470.e09f33b7.js +2 -0
  14. package/__mf/js/async/491.85194549.js +1 -0
  15. package/__mf/js/async/52.0d78de2b.js +1 -0
  16. package/__mf/js/async/527.f97d1b86.js +110 -0
  17. package/__mf/js/async/558.8ac6d4e3.js +3 -0
  18. package/__mf/js/async/568.45da2c30.js +1 -0
  19. package/__mf/js/async/587.c9460696.js +1 -0
  20. package/__mf/js/async/588.0a1aa144.js +1 -0
  21. package/__mf/js/async/603.3b771310.js +2 -0
  22. package/__mf/js/async/603.3b771310.js.LICENSE.txt +9 -0
  23. package/__mf/js/async/616.79484ac8.js +1 -0
  24. package/__mf/js/async/655.dbf8c618.js +1 -0
  25. package/__mf/js/async/694.0fb9ee5a.js +2 -0
  26. package/__mf/js/async/702.785cd635.js +2 -0
  27. package/__mf/js/async/71.8c6cf914.js +1 -0
  28. package/__mf/js/async/724.c45dcf5b.js +1 -0
  29. package/__mf/js/async/873.04a201bf.js +1 -0
  30. package/__mf/js/async/941.b89f8595.js +2 -0
  31. package/__mf/js/async/955.176fe200.js +1 -0
  32. package/__mf/js/async/968.2a9fb1a0.js +1 -0
  33. package/__mf/js/async/978.a9865b23.js +1 -0
  34. package/__mf/js/async/984.4793f667.js +22 -0
  35. package/__mf/js/async/{90.16425d5a.js.LICENSE.txt → 984.4793f667.js.LICENSE.txt} +0 -10
  36. package/__mf/js/async/__federation_expose_TimeSeriesChart.62d8f589.js +1 -0
  37. package/__mf/js/async/lib-router.319c02cd.js +2 -0
  38. package/__mf/js/main.23e38819.js +7 -0
  39. package/lib/QuerySettingsEditor.d.ts.map +1 -1
  40. package/lib/QuerySettingsEditor.js +93 -14
  41. package/lib/QuerySettingsEditor.js.map +1 -1
  42. package/lib/TimeSeriesChartBase.d.ts +2 -0
  43. package/lib/TimeSeriesChartBase.d.ts.map +1 -1
  44. package/lib/TimeSeriesChartBase.js +90 -7
  45. package/lib/TimeSeriesChartBase.js.map +1 -1
  46. package/lib/TimeSeriesChartPanel.d.ts.map +1 -1
  47. package/lib/TimeSeriesChartPanel.js +24 -3
  48. package/lib/TimeSeriesChartPanel.js.map +1 -1
  49. package/lib/VisualOptionsEditor.js.map +1 -1
  50. package/lib/annotations/AnnotationTooltip.d.ts +18 -0
  51. package/lib/annotations/AnnotationTooltip.d.ts.map +1 -0
  52. package/lib/annotations/AnnotationTooltip.js +352 -0
  53. package/lib/annotations/AnnotationTooltip.js.map +1 -0
  54. package/lib/cjs/QuerySettingsEditor.js +91 -12
  55. package/lib/cjs/TimeSeriesChartBase.js +90 -7
  56. package/lib/cjs/TimeSeriesChartPanel.js +24 -3
  57. package/lib/cjs/annotations/AnnotationTooltip.js +370 -0
  58. package/lib/cjs/utils/annotation.js +37 -0
  59. package/lib/cjs/utils/data-transform.js +9 -13
  60. package/lib/time-series-chart-model.d.ts +7 -0
  61. package/lib/time-series-chart-model.d.ts.map +1 -1
  62. package/lib/time-series-chart-model.js.map +1 -1
  63. package/lib/utils/annotation.d.ts +5 -0
  64. package/lib/utils/annotation.d.ts.map +1 -0
  65. package/lib/utils/annotation.js +29 -0
  66. package/lib/utils/annotation.js.map +1 -0
  67. package/lib/utils/data-transform.d.ts +1 -0
  68. package/lib/utils/data-transform.d.ts.map +1 -1
  69. package/lib/utils/data-transform.js +9 -13
  70. package/lib/utils/data-transform.js.map +1 -1
  71. package/mf-manifest.json +61 -36
  72. package/mf-stats.json +68 -36
  73. package/package.json +5 -4
  74. package/__mf/js/TimeSeriesChart.e9912623.js +0 -7
  75. package/__mf/js/async/121.df4898d6.js +0 -2
  76. package/__mf/js/async/177.56f1be10.js +0 -1
  77. package/__mf/js/async/192.beef3a1a.js +0 -1
  78. package/__mf/js/async/2.c3740bb9.js +0 -1
  79. package/__mf/js/async/235.c24f24f7.js +0 -1
  80. package/__mf/js/async/274.d112354f.js +0 -2
  81. package/__mf/js/async/291.5ce0f3cb.js +0 -39
  82. package/__mf/js/async/356.9f551c8a.js +0 -1
  83. package/__mf/js/async/392.2350fb02.js +0 -2
  84. package/__mf/js/async/470.a4fd777e.js +0 -2
  85. package/__mf/js/async/491.6f81cf51.js +0 -1
  86. package/__mf/js/async/568.cdcaf97d.js +0 -1
  87. package/__mf/js/async/587.c12780da.js +0 -1
  88. package/__mf/js/async/588.6662e16a.js +0 -1
  89. package/__mf/js/async/616.52acb1b4.js +0 -1
  90. package/__mf/js/async/681.8d61b348.js +0 -110
  91. package/__mf/js/async/702.de247ad8.js +0 -2
  92. package/__mf/js/async/71.84e486c9.js +0 -1
  93. package/__mf/js/async/724.3439df06.js +0 -1
  94. package/__mf/js/async/78.91de282a.js +0 -1
  95. package/__mf/js/async/821.aa2ab3e8.js +0 -7
  96. package/__mf/js/async/873.9aad328a.js +0 -1
  97. package/__mf/js/async/90.16425d5a.js +0 -24
  98. package/__mf/js/async/941.c0e2d25e.js +0 -2
  99. package/__mf/js/async/968.6de5fa7c.js +0 -1
  100. package/__mf/js/async/978.5c14e175.js +0 -1
  101. package/__mf/js/async/__federation_expose_TimeSeriesChart.58a7f341.js +0 -1
  102. package/__mf/js/async/lib-router.7a3f7bb4.js +0 -2
  103. package/__mf/js/main.de1f5d2f.js +0 -7
  104. /package/__mf/css/async/{821.85c2cbf6.css → 208.85c2cbf6.css} +0 -0
  105. /package/__mf/js/async/{121.df4898d6.js.LICENSE.txt → 121.c3c0e54f.js.LICENSE.txt} +0 -0
  106. /package/__mf/js/async/{821.aa2ab3e8.js.LICENSE.txt → 208.b9f374ad.js.LICENSE.txt} +0 -0
  107. /package/__mf/js/async/{274.d112354f.js.LICENSE.txt → 274.72dfa9c8.js.LICENSE.txt} +0 -0
  108. /package/__mf/js/async/{392.2350fb02.js.LICENSE.txt → 392.b9ba5bf2.js.LICENSE.txt} +0 -0
  109. /package/__mf/js/async/{470.a4fd777e.js.LICENSE.txt → 470.e09f33b7.js.LICENSE.txt} +0 -0
  110. /package/__mf/js/async/{681.8d61b348.js.LICENSE.txt → 527.f97d1b86.js.LICENSE.txt} +0 -0
  111. /package/__mf/js/async/{291.5ce0f3cb.js.LICENSE.txt → 694.0fb9ee5a.js.LICENSE.txt} +0 -0
  112. /package/__mf/js/async/{702.de247ad8.js.LICENSE.txt → 702.785cd635.js.LICENSE.txt} +0 -0
  113. /package/__mf/js/async/{941.c0e2d25e.js.LICENSE.txt → 941.b89f8595.js.LICENSE.txt} +0 -0
  114. /package/__mf/js/async/{lib-router.7a3f7bb4.js.LICENSE.txt → lib-router.319c02cd.js.LICENSE.txt} +0 -0
@@ -0,0 +1,370 @@
1
+ // Copyright The Perses Authors
2
+ // Licensed under the Apache License, Version 2.0 (the "License");
3
+ // you may not use this file except in compliance with the License.
4
+ // You may obtain a copy of the License at
5
+ //
6
+ // http://www.apache.org/licenses/LICENSE-2.0
7
+ //
8
+ // Unless required by applicable law or agreed to in writing, software
9
+ // distributed under the License is distributed on an "AS IS" BASIS,
10
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ // See the License for the specific language governing permissions and
12
+ // limitations under the License.
13
+ "use strict";
14
+ Object.defineProperty(exports, "__esModule", {
15
+ value: true
16
+ });
17
+ function _export(target, all) {
18
+ for(var name in all)Object.defineProperty(target, name, {
19
+ enumerable: true,
20
+ get: Object.getOwnPropertyDescriptor(all, name).get
21
+ });
22
+ }
23
+ _export(exports, {
24
+ get AnnotationTooltip () {
25
+ return AnnotationTooltip;
26
+ },
27
+ get buildAnnotationSeries () {
28
+ return buildAnnotationSeries;
29
+ }
30
+ });
31
+ const _jsxruntime = require("react/jsx-runtime");
32
+ const _material = require("@mui/material");
33
+ const _Pin = /*#__PURE__*/ _interop_require_default(require("mdi-material-ui/Pin"));
34
+ const _PinOutline = /*#__PURE__*/ _interop_require_default(require("mdi-material-ui/PinOutline"));
35
+ const _useresizeobserver = /*#__PURE__*/ _interop_require_default(require("use-resize-observer"));
36
+ const _components = require("@perses-dev/components");
37
+ const _pluginsystem = require("@perses-dev/plugin-system");
38
+ function _interop_require_default(obj) {
39
+ return obj && obj.__esModule ? obj : {
40
+ default: obj
41
+ };
42
+ }
43
+ function AnnotationTooltip({ annotation, containerId, formatWithUserTimeZone, pinnedPos, enablePinning = true, onUnpinClick }) {
44
+ const mousePos = (0, _components.useMousePosition)();
45
+ const { height, width, ref: tooltipRef } = (0, _useresizeobserver.default)();
46
+ const isPinned = pinnedPos !== null;
47
+ if (!isPinned && mousePos === null) return null;
48
+ const containerElement = containerId ? document.querySelector(containerId) : undefined;
49
+ const maxHeight = containerElement ? containerElement.getBoundingClientRect().height : undefined;
50
+ const transform = (0, _components.assembleTransform)(mousePos, pinnedPos, height ?? 0, width ?? 0, containerElement);
51
+ const start = (0, _components.getDateAndTime)(annotation.start, formatWithUserTimeZone);
52
+ const end = annotation.end !== undefined ? (0, _components.getDateAndTime)(annotation.end, formatWithUserTimeZone) : null;
53
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Portal, {
54
+ container: containerElement,
55
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Box, {
56
+ ref: tooltipRef,
57
+ sx: (theme)=>(0, _components.getTooltipStyles)(theme, pinnedPos, maxHeight),
58
+ style: {
59
+ transform
60
+ },
61
+ children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Stack, {
62
+ spacing: 0.5,
63
+ children: [
64
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Box, {
65
+ sx: (theme)=>({
66
+ width: '100%',
67
+ maxWidth: _components.TOOLTIP_MAX_WIDTH,
68
+ padding: theme.spacing(1.5, 2, 0.5, 2),
69
+ backgroundColor: theme.palette.designSystem?.grey[800] ?? _components.TOOLTIP_BG_COLOR_FALLBACK,
70
+ position: 'sticky',
71
+ top: 0,
72
+ left: 0
73
+ }),
74
+ children: [
75
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Box, {
76
+ sx: {
77
+ display: 'flex',
78
+ alignItems: 'center',
79
+ paddingBottom: 0.5,
80
+ width: '100%'
81
+ },
82
+ children: [
83
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Box, {
84
+ sx: {
85
+ width: 8,
86
+ height: 8,
87
+ borderRadius: '50%',
88
+ backgroundColor: annotation.color ?? _pluginsystem.DEFAULT_ANNOTATION_COLOR,
89
+ marginRight: 1,
90
+ flexShrink: 0
91
+ }
92
+ }),
93
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Box, {
94
+ sx: {
95
+ flexGrow: 1,
96
+ minWidth: 0
97
+ },
98
+ children: [
99
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Typography, {
100
+ variant: "caption",
101
+ children: [
102
+ start.formattedDate,
103
+ " - ",
104
+ /*#__PURE__*/ (0, _jsxruntime.jsx)("strong", {
105
+ children: start.formattedTime
106
+ })
107
+ ]
108
+ }),
109
+ end && /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
110
+ children: [
111
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Typography, {
112
+ variant: "caption",
113
+ children: ' → '
114
+ }),
115
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Typography, {
116
+ variant: "caption",
117
+ children: [
118
+ end.formattedDate,
119
+ " - ",
120
+ /*#__PURE__*/ (0, _jsxruntime.jsx)("strong", {
121
+ children: end.formattedTime
122
+ })
123
+ ]
124
+ })
125
+ ]
126
+ })
127
+ ]
128
+ }),
129
+ enablePinning && /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Stack, {
130
+ direction: "row",
131
+ alignItems: "center",
132
+ sx: {
133
+ marginLeft: 1,
134
+ flexShrink: 0
135
+ },
136
+ children: [
137
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Typography, {
138
+ sx: {
139
+ marginRight: 0.5,
140
+ fontSize: 11,
141
+ verticalAlign: 'middle'
142
+ },
143
+ children: isPinned ? _components.UNPIN_TOOLTIP_HELP_TEXT : _components.PIN_TOOLTIP_HELP_TEXT
144
+ }),
145
+ isPinned ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_Pin.default, {
146
+ onClick: ()=>{
147
+ if (onUnpinClick !== undefined) onUnpinClick();
148
+ },
149
+ sx: {
150
+ fontSize: 16,
151
+ cursor: 'pointer'
152
+ }
153
+ }) : /*#__PURE__*/ (0, _jsxruntime.jsx)(_PinOutline.default, {
154
+ sx: {
155
+ fontSize: 16
156
+ }
157
+ })
158
+ ]
159
+ })
160
+ ]
161
+ }),
162
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Divider, {
163
+ sx: (theme)=>({
164
+ width: '100%',
165
+ borderColor: theme.palette.grey['500']
166
+ })
167
+ })
168
+ ]
169
+ }),
170
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Box, {
171
+ sx: (theme)=>({
172
+ padding: theme.spacing(0.5, 2, 1.5, 2)
173
+ }),
174
+ children: [
175
+ annotation.title && /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Typography, {
176
+ variant: "caption",
177
+ sx: {
178
+ display: 'block',
179
+ fontWeight: 'bold',
180
+ marginBottom: 0.5
181
+ },
182
+ children: annotation.title
183
+ }),
184
+ annotation.legend && /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Typography, {
185
+ variant: "caption",
186
+ sx: {
187
+ display: 'block',
188
+ marginBottom: 0.5
189
+ },
190
+ children: annotation.legend
191
+ }),
192
+ annotation.tags && Object.keys(annotation.tags).length > 0 && /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Box, {
193
+ sx: {
194
+ display: 'flex',
195
+ flexWrap: 'wrap',
196
+ gap: 0.5,
197
+ marginTop: 0.5
198
+ },
199
+ children: Object.entries(annotation.tags).map(([key, value])=>/*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Box, {
200
+ sx: (theme)=>({
201
+ backgroundColor: theme.palette.grey['700'],
202
+ borderRadius: '4px',
203
+ padding: '2px 6px',
204
+ fontSize: '0.7rem',
205
+ fontFamily: 'monospace'
206
+ }),
207
+ children: [
208
+ key,
209
+ ": ",
210
+ value
211
+ ]
212
+ }, key))
213
+ })
214
+ ]
215
+ })
216
+ ]
217
+ })
218
+ })
219
+ });
220
+ }
221
+ function buildAnnotationSeries(annotations) {
222
+ if (!annotations?.length) return [];
223
+ const markAreaData = [];
224
+ const markLineData = [];
225
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
226
+ const markPointData = [];
227
+ annotations.forEach((annotation, index)=>{
228
+ const color = annotation.color ?? _pluginsystem.DEFAULT_ANNOTATION_COLOR;
229
+ const opacity = 0.3;
230
+ if (annotation.end !== undefined) {
231
+ // Range annotation - use markArea and markLine (silent) + markers at start/end
232
+ markLineData.push({
233
+ xAxis: annotation.start,
234
+ lineStyle: {
235
+ color,
236
+ width: 2,
237
+ type: 'dashed'
238
+ },
239
+ label: {
240
+ show: false
241
+ },
242
+ annotationIndex: index
243
+ });
244
+ markLineData.push({
245
+ xAxis: annotation.end,
246
+ lineStyle: {
247
+ color,
248
+ width: 2,
249
+ type: 'dashed'
250
+ },
251
+ label: {
252
+ show: false
253
+ },
254
+ annotationIndex: index
255
+ });
256
+ markAreaData.push([
257
+ {
258
+ xAxis: annotation.start,
259
+ itemStyle: {
260
+ color,
261
+ opacity
262
+ }
263
+ },
264
+ {
265
+ xAxis: annotation.end
266
+ }
267
+ ]);
268
+ // Add start and end markers
269
+ for (const isStart of [
270
+ true,
271
+ false
272
+ ]){
273
+ markPointData.push({
274
+ coord: [
275
+ isStart ? annotation.start : annotation.end,
276
+ 0
277
+ ],
278
+ symbol: 'triangle',
279
+ symbolSize: [
280
+ 12,
281
+ 12
282
+ ],
283
+ symbolRotate: 0,
284
+ symbolOffset: [
285
+ 0,
286
+ 4
287
+ ],
288
+ itemStyle: {
289
+ color
290
+ },
291
+ annotationIndex: index,
292
+ emphasis: {
293
+ disabled: true
294
+ },
295
+ isStart: isStart,
296
+ isEnd: !isStart
297
+ });
298
+ }
299
+ } else {
300
+ // Point annotation - use markLine (silent) + single marker
301
+ markLineData.push({
302
+ xAxis: annotation.start,
303
+ lineStyle: {
304
+ color,
305
+ width: 2,
306
+ type: 'dashed'
307
+ },
308
+ label: {
309
+ show: false
310
+ },
311
+ annotationIndex: index
312
+ });
313
+ // Add point marker
314
+ markPointData.push({
315
+ coord: [
316
+ annotation.start,
317
+ 0
318
+ ],
319
+ symbol: 'triangle',
320
+ symbolSize: [
321
+ 12,
322
+ 10
323
+ ],
324
+ symbolRotate: 0,
325
+ symbolOffset: [
326
+ 0,
327
+ '120%'
328
+ ],
329
+ itemStyle: {
330
+ color
331
+ },
332
+ annotationIndex: index,
333
+ isPoint: true
334
+ });
335
+ }
336
+ });
337
+ const series = {
338
+ type: 'line',
339
+ data: [],
340
+ silent: false,
341
+ markArea: markAreaData.length > 0 ? {
342
+ silent: true,
343
+ data: markAreaData,
344
+ label: {
345
+ show: false
346
+ }
347
+ } : undefined,
348
+ markLine: markLineData.length > 0 ? {
349
+ silent: true,
350
+ symbol: [
351
+ 'none',
352
+ 'none'
353
+ ],
354
+ data: markLineData,
355
+ lineStyle: {
356
+ type: 'dashed'
357
+ }
358
+ } : undefined,
359
+ markPoint: markPointData.length > 0 ? {
360
+ silent: false,
361
+ data: markPointData,
362
+ label: {
363
+ show: false
364
+ }
365
+ } : undefined
366
+ };
367
+ return [
368
+ series
369
+ ];
370
+ }
@@ -0,0 +1,37 @@
1
+ // Copyright The Perses Authors
2
+ // Licensed under the Apache License, Version 2.0 (the \"License\");
3
+ // you may not use this file except in compliance with the License.
4
+ // You may obtain a copy of the License at
5
+ //
6
+ // http://www.apache.org/licenses/LICENSE-2.0
7
+ //
8
+ // Unless required by applicable law or agreed to in writing, software
9
+ // distributed under the License is distributed on an \"AS IS\" BASIS,
10
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ // See the License for the specific language governing permissions and
12
+ // limitations under the License.
13
+ "use strict";
14
+ Object.defineProperty(exports, "__esModule", {
15
+ value: true
16
+ });
17
+ Object.defineProperty(exports, "convertAnnotationToTimeSeriesAnnotation", {
18
+ enumerable: true,
19
+ get: function() {
20
+ return convertAnnotationToTimeSeriesAnnotation;
21
+ }
22
+ });
23
+ function convertAnnotationToTimeSeriesAnnotation(annotations) {
24
+ const result = [];
25
+ for (const annotation of annotations){
26
+ for (const item of annotation.data){
27
+ if (annotation.definition.display.hidden) {
28
+ continue;
29
+ }
30
+ result.push({
31
+ ...annotation.definition.display,
32
+ ...item
33
+ });
34
+ }
35
+ }
36
+ return result;
37
+ }
@@ -65,6 +65,7 @@ function getCommonTimeScaleForQueries(queries) {
65
65
  function getTimeSeries(id, datasetIndex, formattedName, visual, timeScale, paletteColor, querySettings, yAxisIndex) {
66
66
  const lineWidth = visual.lineWidth ?? _timeserieschartmodel.DEFAULT_LINE_WIDTH;
67
67
  const pointRadius = visual.pointRadius ?? _timeserieschartmodel.DEFAULT_POINT_RADIUS;
68
+ const shouldStack = querySettings?.stack !== undefined ? querySettings.stack : visual.stack === 'all';
68
69
  // Shows datapoint symbols when selected time range is roughly 15 minutes or less
69
70
  const minuteMs = 60000;
70
71
  let showPoints = timeScale.rangeMs <= minuteMs * 15;
@@ -79,7 +80,7 @@ function getTimeSeries(id, datasetIndex, formattedName, visual, timeScale, palet
79
80
  datasetIndex,
80
81
  name: formattedName,
81
82
  color: paletteColor,
82
- stack: visual.stack === 'all' ? visual.stack : undefined,
83
+ stack: shouldStack ? 'all' : undefined,
83
84
  yAxisIndex: yAxisIndex,
84
85
  label: {
85
86
  show: false
@@ -94,7 +95,7 @@ function getTimeSeries(id, datasetIndex, formattedName, visual, timeScale, palet
94
95
  name: formattedName,
95
96
  connectNulls: visual.connectNulls ?? _timeserieschartmodel.DEFAULT_CONNECT_NULLS,
96
97
  color: paletteColor,
97
- stack: visual.stack === 'all' ? visual.stack : undefined,
98
+ stack: shouldStack ? 'all' : undefined,
98
99
  yAxisIndex: yAxisIndex,
99
100
  sampling: 'lttb',
100
101
  progressiveThreshold: _components.OPTIMIZED_MODE_SERIES_LIMIT,
@@ -118,13 +119,6 @@ function getTimeSeries(id, datasetIndex, formattedName, visual, timeScale, palet
118
119
  type: visual.lineStyle
119
120
  }
120
121
  },
121
- selectedMode: 'single',
122
- select: {
123
- itemStyle: {
124
- borderColor: paletteColor,
125
- borderWidth: pointRadius + 0.5
126
- }
127
- },
128
122
  blur: {
129
123
  lineStyle: {
130
124
  width: lineWidth,
@@ -177,8 +171,10 @@ function findMax(data) {
177
171
  series.values.forEach((valueTuple)=>{
178
172
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
179
173
  const [_, value] = valueTuple;
180
- if (typeof value === 'number' && value > max) {
181
- max = value;
174
+ // Use the absolute value so percent thresholds compute correctly against
175
+ // negated series (e.g. when `querySettings[].negativeY` is enabled).
176
+ if (typeof value === 'number' && Math.abs(value) > max) {
177
+ max = Math.abs(value);
182
178
  }
183
179
  });
184
180
  });
@@ -186,8 +182,8 @@ function findMax(data) {
186
182
  data.forEach((series)=>{
187
183
  if (series.data !== undefined) {
188
184
  series.data.forEach((value)=>{
189
- if (typeof value === 'number' && value > max) {
190
- max = value;
185
+ if (typeof value === 'number' && Math.abs(value) > max) {
186
+ max = Math.abs(value);
191
187
  }
192
188
  });
193
189
  }
@@ -29,6 +29,13 @@ export interface QuerySettingsOptions {
29
29
  lineStyle?: LineStyleType;
30
30
  areaOpacity?: number;
31
31
  format?: FormatOptions;
32
+ /**
33
+ * If true, the query's series values are negated for display so they render
34
+ * below the X axis. The original (positive) values are preserved for legend
35
+ * calculations and CSV export, matching Grafana's `transform: "negative-Y"` behavior.
36
+ */
37
+ negativeY?: boolean;
38
+ stack?: boolean;
32
39
  }
33
40
  export type TimeSeriesChartOptionsEditorProps = OptionsEditorProps<TimeSeriesChartOptions>;
34
41
  export interface TimeSeriesChartYAxisOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"time-series-chart-model.d.ts","sourceRoot":"","sources":["../../src/time-series-chart-model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"time-series-chart-model.d.ts","sourceRoot":"","sources":["../../src/time-series-chart-model.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/time-series-chart-model.ts"],"sourcesContent":["// Copyright The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { FormatOptions, ThresholdOptions } from '@perses-dev/components';\nimport { OptionsEditorProps, LegendSpecOptions } from '@perses-dev/plugin-system';\nimport { Definition } from '@perses-dev/spec';\n\n/**\n * Line style options for time series charts.\n */\nexport type LineStyleType = 'solid' | 'dashed' | 'dotted';\n\n/**\n * The schema for a TimeSeriesChart panel.\n */\nexport interface TimeSeriesChartDefinition extends Definition<TimeSeriesChartOptions> {\n kind: 'TimeSeriesChart';\n}\n\n/**\n * The Options object supported by the TimeSeriesChartPanel plugin.\n */\nexport interface TimeSeriesChartOptions {\n legend?: LegendSpecOptions;\n yAxis?: TimeSeriesChartYAxisOptions;\n thresholds?: ThresholdOptions;\n visual?: TimeSeriesChartVisualOptions;\n tooltip?: TooltipSpecOptions;\n querySettings?: QuerySettingsOptions[];\n}\n\nexport interface QuerySettingsOptions {\n queryIndex: number;\n colorMode?: 'fixed' | 'fixed-single';\n colorValue?: string;\n lineStyle?: LineStyleType;\n areaOpacity?: number;\n format?: FormatOptions;\n}\n\nexport type TimeSeriesChartOptionsEditorProps = OptionsEditorProps<TimeSeriesChartOptions>;\n\nexport interface TimeSeriesChartYAxisOptions {\n show?: boolean;\n label?: string;\n format?: FormatOptions;\n min?: number;\n max?: number;\n logBase?: LOG_BASE;\n}\n\nexport interface TooltipSpecOptions {\n enablePinning: boolean;\n}\n\nexport interface TimeSeriesChartPaletteOptions {\n mode: 'auto' | 'categorical';\n}\n\nexport type TimeSeriesChartVisualOptions = {\n display?: 'line' | 'bar';\n lineWidth?: number;\n lineStyle?: LineStyleType;\n areaOpacity?: number;\n showPoints?: 'auto' | 'always';\n palette?: TimeSeriesChartPaletteOptions;\n pointRadius?: number;\n stack?: StackOptions;\n connectNulls?: boolean;\n};\n\nexport const DEFAULT_FORMAT: FormatOptions = {\n unit: 'decimal',\n shortValues: true,\n};\n\nexport const DEFAULT_Y_AXIS: TimeSeriesChartYAxisOptions = {\n show: true,\n label: '',\n format: DEFAULT_FORMAT,\n min: undefined,\n max: undefined,\n logBase: undefined,\n};\n\nexport const Y_AXIS_CONFIG = {\n show: { label: 'Show' },\n label: { label: 'Label' },\n unit: { label: 'Unit' },\n min: { label: 'Min' },\n max: { label: 'Max' },\n logBase: { label: 'Log Base' },\n};\n\nexport const DEFAULT_DISPLAY = 'line';\nexport const DEFAULT_LINE_WIDTH = 1.25;\nexport const DEFAULT_LINE_STYLE = 'solid';\nexport const DEFAULT_AREA_OPACITY = 0;\n// How much larger datapoint symbols are than line width, also applied in VisualOptionsEditor.\nexport const POINT_SIZE_OFFSET = 1.5;\nexport const DEFAULT_POINT_RADIUS = DEFAULT_LINE_WIDTH + POINT_SIZE_OFFSET;\nexport const DEFAULT_CONNECT_NULLS = false;\n\nexport const DEFAULT_VISUAL: TimeSeriesChartVisualOptions = {\n display: DEFAULT_DISPLAY,\n lineWidth: DEFAULT_LINE_WIDTH,\n lineStyle: DEFAULT_LINE_STYLE,\n areaOpacity: DEFAULT_AREA_OPACITY,\n pointRadius: DEFAULT_POINT_RADIUS,\n connectNulls: DEFAULT_CONNECT_NULLS,\n};\n\n// Controls how often static threshold values should be plotted so threshold data shows\n// in tooltip without flicker.\nexport const THRESHOLD_PLOT_INTERVAL = 15;\n\nexport const VISUAL_CONFIG = {\n lineWidth: {\n label: 'Line Width',\n testId: 'slider-line-width',\n min: 0.25,\n max: 3,\n step: 0.25,\n },\n lineStyle: {\n label: 'Line Style',\n },\n pointRadius: {\n label: 'Point Radius',\n testId: 'slider-point-radius',\n min: 0,\n max: 6,\n step: 0.25,\n },\n areaOpacity: {\n label: 'Area Opacity',\n testId: 'slider-area-opacity',\n min: 0,\n max: 1,\n step: 0.05,\n },\n stack: {\n label: 'Stack Series',\n },\n connectNulls: {\n label: 'Connect Nulls',\n },\n};\n\n// None is equivalent to undefined since stack is optional\nexport type StackOptions = 'none' | 'all'; // TODO: add percent option support\n\nexport const STACK_CONFIG = {\n none: { label: 'None' },\n all: { label: 'All' },\n // TODO: enable option after 'Percent' implemented\n // percent: { label: 'Percent', disabled: true }, // hidden since not implemented yet\n};\n\nexport const STACK_OPTIONS = Object.entries(STACK_CONFIG).map(([id, config]) => {\n return {\n id: id as StackOptions,\n ...config,\n };\n});\n\nexport const LINE_STYLE_CONFIG = {\n solid: { label: 'Solid' },\n dashed: { label: 'Dashes' },\n dotted: { label: 'Dots' },\n};\n\nexport const OPACITY_CONFIG = {\n label: 'Opacity',\n testId: 'slider-opacity',\n min: 0,\n max: 1,\n step: 0.05,\n};\n\n// LogBase outlines the allowed log bases for the log-supported charts.\nexport type LOG_BASE = undefined | 2 | 10;\n\n// Single source of truth for log base configuration\nexport const LOG_BASE_CONFIG: Record<string, { label: string; log: LOG_BASE }> = {\n none: { label: 'None', log: undefined },\n '2': { label: '2', log: 2 },\n '10': { label: '10', log: 10 },\n};\n\n// Options array for SettingsAutocomplete\nexport const LOG_BASE_OPTIONS = Object.entries(LOG_BASE_CONFIG).map(([id, config]) => ({\n id: id as string,\n ...config,\n}));\n\n// Both of these constants help produce a value that is LESS THAN the initial value.\n// For positive values, we multiply by a number less than 1 to get this outcome.\n// For negative values, we multiply to a number greater than 1 to get this outcome.\nexport const POSITIVE_MIN_VALUE_MULTIPLIER = 0.8;\nexport const NEGATIVE_MIN_VALUE_MULTIPLIER = 1.2;\n\n/**\n * Creates an initial/empty options object for the TimeSeriesChartPanel.\n */\nexport function createInitialTimeSeriesChartOptions(): TimeSeriesChartOptions {\n return {};\n}\n"],"names":["DEFAULT_FORMAT","unit","shortValues","DEFAULT_Y_AXIS","show","label","format","min","undefined","max","logBase","Y_AXIS_CONFIG","DEFAULT_DISPLAY","DEFAULT_LINE_WIDTH","DEFAULT_LINE_STYLE","DEFAULT_AREA_OPACITY","POINT_SIZE_OFFSET","DEFAULT_POINT_RADIUS","DEFAULT_CONNECT_NULLS","DEFAULT_VISUAL","display","lineWidth","lineStyle","areaOpacity","pointRadius","connectNulls","THRESHOLD_PLOT_INTERVAL","VISUAL_CONFIG","testId","step","stack","STACK_CONFIG","none","all","STACK_OPTIONS","Object","entries","map","id","config","LINE_STYLE_CONFIG","solid","dashed","dotted","OPACITY_CONFIG","LOG_BASE_CONFIG","log","LOG_BASE_OPTIONS","POSITIVE_MIN_VALUE_MULTIPLIER","NEGATIVE_MIN_VALUE_MULTIPLIER","createInitialTimeSeriesChartOptions"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/time-series-chart-model.ts"],"sourcesContent":["// Copyright The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { FormatOptions, ThresholdOptions } from '@perses-dev/components';\nimport { OptionsEditorProps, LegendSpecOptions } from '@perses-dev/plugin-system';\nimport { Definition } from '@perses-dev/spec';\n\n/**\n * Line style options for time series charts.\n */\nexport type LineStyleType = 'solid' | 'dashed' | 'dotted';\n\n/**\n * The schema for a TimeSeriesChart panel.\n */\nexport interface TimeSeriesChartDefinition extends Definition<TimeSeriesChartOptions> {\n kind: 'TimeSeriesChart';\n}\n\n/**\n * The Options object supported by the TimeSeriesChartPanel plugin.\n */\nexport interface TimeSeriesChartOptions {\n legend?: LegendSpecOptions;\n yAxis?: TimeSeriesChartYAxisOptions;\n thresholds?: ThresholdOptions;\n visual?: TimeSeriesChartVisualOptions;\n tooltip?: TooltipSpecOptions;\n querySettings?: QuerySettingsOptions[];\n}\n\nexport interface QuerySettingsOptions {\n queryIndex: number;\n colorMode?: 'fixed' | 'fixed-single';\n colorValue?: string;\n lineStyle?: LineStyleType;\n areaOpacity?: number;\n format?: FormatOptions;\n /**\n * If true, the query's series values are negated for display so they render\n * below the X axis. The original (positive) values are preserved for legend\n * calculations and CSV export, matching Grafana's `transform: \"negative-Y\"` behavior.\n */\n negativeY?: boolean;\n stack?: boolean;\n}\n\nexport type TimeSeriesChartOptionsEditorProps = OptionsEditorProps<TimeSeriesChartOptions>;\n\nexport interface TimeSeriesChartYAxisOptions {\n show?: boolean;\n label?: string;\n format?: FormatOptions;\n min?: number;\n max?: number;\n logBase?: LOG_BASE;\n}\n\nexport interface TooltipSpecOptions {\n enablePinning: boolean;\n}\n\nexport interface TimeSeriesChartPaletteOptions {\n mode: 'auto' | 'categorical';\n}\n\nexport type TimeSeriesChartVisualOptions = {\n display?: 'line' | 'bar';\n lineWidth?: number;\n lineStyle?: LineStyleType;\n areaOpacity?: number;\n showPoints?: 'auto' | 'always';\n palette?: TimeSeriesChartPaletteOptions;\n pointRadius?: number;\n stack?: StackOptions;\n connectNulls?: boolean;\n};\n\nexport const DEFAULT_FORMAT: FormatOptions = {\n unit: 'decimal',\n shortValues: true,\n};\n\nexport const DEFAULT_Y_AXIS: TimeSeriesChartYAxisOptions = {\n show: true,\n label: '',\n format: DEFAULT_FORMAT,\n min: undefined,\n max: undefined,\n logBase: undefined,\n};\n\nexport const Y_AXIS_CONFIG = {\n show: { label: 'Show' },\n label: { label: 'Label' },\n unit: { label: 'Unit' },\n min: { label: 'Min' },\n max: { label: 'Max' },\n logBase: { label: 'Log Base' },\n};\n\nexport const DEFAULT_DISPLAY = 'line';\nexport const DEFAULT_LINE_WIDTH = 1.25;\nexport const DEFAULT_LINE_STYLE = 'solid';\nexport const DEFAULT_AREA_OPACITY = 0;\n// How much larger datapoint symbols are than line width, also applied in VisualOptionsEditor.\nexport const POINT_SIZE_OFFSET = 1.5;\nexport const DEFAULT_POINT_RADIUS = DEFAULT_LINE_WIDTH + POINT_SIZE_OFFSET;\nexport const DEFAULT_CONNECT_NULLS = false;\n\nexport const DEFAULT_VISUAL: TimeSeriesChartVisualOptions = {\n display: DEFAULT_DISPLAY,\n lineWidth: DEFAULT_LINE_WIDTH,\n lineStyle: DEFAULT_LINE_STYLE,\n areaOpacity: DEFAULT_AREA_OPACITY,\n pointRadius: DEFAULT_POINT_RADIUS,\n connectNulls: DEFAULT_CONNECT_NULLS,\n};\n\n// Controls how often static threshold values should be plotted so threshold data shows\n// in tooltip without flicker.\nexport const THRESHOLD_PLOT_INTERVAL = 15;\n\nexport const VISUAL_CONFIG = {\n lineWidth: {\n label: 'Line Width',\n testId: 'slider-line-width',\n min: 0.25,\n max: 3,\n step: 0.25,\n },\n lineStyle: {\n label: 'Line Style',\n },\n pointRadius: {\n label: 'Point Radius',\n testId: 'slider-point-radius',\n min: 0,\n max: 6,\n step: 0.25,\n },\n areaOpacity: {\n label: 'Area Opacity',\n testId: 'slider-area-opacity',\n min: 0,\n max: 1,\n step: 0.05,\n },\n stack: {\n label: 'Stack Series',\n },\n connectNulls: {\n label: 'Connect Nulls',\n },\n};\n\n// None is equivalent to undefined since stack is optional\nexport type StackOptions = 'none' | 'all'; // TODO: add percent option support\n\nexport const STACK_CONFIG = {\n none: { label: 'None' },\n all: { label: 'All' },\n // TODO: enable option after 'Percent' implemented\n // percent: { label: 'Percent', disabled: true }, // hidden since not implemented yet\n};\n\nexport const STACK_OPTIONS = Object.entries(STACK_CONFIG).map(([id, config]) => {\n return {\n id: id as StackOptions,\n ...config,\n };\n});\n\nexport const LINE_STYLE_CONFIG = {\n solid: { label: 'Solid' },\n dashed: { label: 'Dashes' },\n dotted: { label: 'Dots' },\n};\n\nexport const OPACITY_CONFIG = {\n label: 'Opacity',\n testId: 'slider-opacity',\n min: 0,\n max: 1,\n step: 0.05,\n};\n\n// LogBase outlines the allowed log bases for the log-supported charts.\nexport type LOG_BASE = undefined | 2 | 10;\n\n// Single source of truth for log base configuration\nexport const LOG_BASE_CONFIG: Record<string, { label: string; log: LOG_BASE }> = {\n none: { label: 'None', log: undefined },\n '2': { label: '2', log: 2 },\n '10': { label: '10', log: 10 },\n};\n\n// Options array for SettingsAutocomplete\nexport const LOG_BASE_OPTIONS = Object.entries(LOG_BASE_CONFIG).map(([id, config]) => ({\n id: id as string,\n ...config,\n}));\n\n// Both of these constants help produce a value that is LESS THAN the initial value.\n// For positive values, we multiply by a number less than 1 to get this outcome.\n// For negative values, we multiply to a number greater than 1 to get this outcome.\nexport const POSITIVE_MIN_VALUE_MULTIPLIER = 0.8;\nexport const NEGATIVE_MIN_VALUE_MULTIPLIER = 1.2;\n\n/**\n * Creates an initial/empty options object for the TimeSeriesChartPanel.\n */\nexport function createInitialTimeSeriesChartOptions(): TimeSeriesChartOptions {\n return {};\n}\n"],"names":["DEFAULT_FORMAT","unit","shortValues","DEFAULT_Y_AXIS","show","label","format","min","undefined","max","logBase","Y_AXIS_CONFIG","DEFAULT_DISPLAY","DEFAULT_LINE_WIDTH","DEFAULT_LINE_STYLE","DEFAULT_AREA_OPACITY","POINT_SIZE_OFFSET","DEFAULT_POINT_RADIUS","DEFAULT_CONNECT_NULLS","DEFAULT_VISUAL","display","lineWidth","lineStyle","areaOpacity","pointRadius","connectNulls","THRESHOLD_PLOT_INTERVAL","VISUAL_CONFIG","testId","step","stack","STACK_CONFIG","none","all","STACK_OPTIONS","Object","entries","map","id","config","LINE_STYLE_CONFIG","solid","dashed","dotted","OPACITY_CONFIG","LOG_BASE_CONFIG","log","LOG_BASE_OPTIONS","POSITIVE_MIN_VALUE_MULTIPLIER","NEGATIVE_MIN_VALUE_MULTIPLIER","createInitialTimeSeriesChartOptions"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { AnnotationData, AnnotationDisplay } from '@perses-dev/spec';
2
+ import { AnnotationSpecWithData } from '@perses-dev/dashboards';
3
+ export type TimeSeriesAnnotation = AnnotationData & AnnotationDisplay;
4
+ export declare function convertAnnotationToTimeSeriesAnnotation(annotations: AnnotationSpecWithData[]): TimeSeriesAnnotation[];
5
+ //# sourceMappingURL=annotation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotation.d.ts","sourceRoot":"","sources":["../../../src/utils/annotation.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG,iBAAiB,CAAC;AAEtE,wBAAgB,uCAAuC,CAAC,WAAW,EAAE,sBAAsB,EAAE,GAAG,oBAAoB,EAAE,CAcrH"}
@@ -0,0 +1,29 @@
1
+ // Copyright The Perses Authors
2
+ // Licensed under the Apache License, Version 2.0 (the \"License\");
3
+ // you may not use this file except in compliance with the License.
4
+ // You may obtain a copy of the License at
5
+ //
6
+ // http://www.apache.org/licenses/LICENSE-2.0
7
+ //
8
+ // Unless required by applicable law or agreed to in writing, software
9
+ // distributed under the License is distributed on an \"AS IS\" BASIS,
10
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ // See the License for the specific language governing permissions and
12
+ // limitations under the License.
13
+ export function convertAnnotationToTimeSeriesAnnotation(annotations) {
14
+ const result = [];
15
+ for (const annotation of annotations){
16
+ for (const item of annotation.data){
17
+ if (annotation.definition.display.hidden) {
18
+ continue;
19
+ }
20
+ result.push({
21
+ ...annotation.definition.display,
22
+ ...item
23
+ });
24
+ }
25
+ }
26
+ return result;
27
+ }
28
+
29
+ //# sourceMappingURL=annotation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/annotation.ts"],"sourcesContent":["// Copyright The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { AnnotationData, AnnotationDisplay } from '@perses-dev/spec';\nimport { AnnotationSpecWithData } from '@perses-dev/dashboards';\n\nexport type TimeSeriesAnnotation = AnnotationData & AnnotationDisplay;\n\nexport function convertAnnotationToTimeSeriesAnnotation(annotations: AnnotationSpecWithData[]): TimeSeriesAnnotation[] {\n const result: TimeSeriesAnnotation[] = [];\n for (const annotation of annotations) {\n for (const item of annotation.data) {\n if (annotation.definition.display.hidden) {\n continue;\n }\n result.push({\n ...annotation.definition.display,\n ...item,\n });\n }\n }\n return result;\n}\n"],"names":["convertAnnotationToTimeSeriesAnnotation","annotations","result","annotation","item","data","definition","display","hidden","push"],"mappings":"AAAA,+BAA+B;AAC/B,oEAAoE;AACpE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,sEAAsE;AACtE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAOjC,OAAO,SAASA,wCAAwCC,WAAqC;IAC3F,MAAMC,SAAiC,EAAE;IACzC,KAAK,MAAMC,cAAcF,YAAa;QACpC,KAAK,MAAMG,QAAQD,WAAWE,IAAI,CAAE;YAClC,IAAIF,WAAWG,UAAU,CAACC,OAAO,CAACC,MAAM,EAAE;gBACxC;YACF;YACAN,OAAOO,IAAI,CAAC;gBACV,GAAGN,WAAWG,UAAU,CAACC,OAAO;gBAChC,GAAGH,IAAI;YACT;QACF;IACF;IACA,OAAOF;AACT"}
@@ -20,6 +20,7 @@ export declare function getCommonTimeScaleForQueries(queries: Array<PanelData<Ti
20
20
  export declare function getTimeSeries(id: string, datasetIndex: number, formattedName: string, visual: TimeSeriesChartVisualOptions, timeScale: TimeScale, paletteColor: string, querySettings?: {
21
21
  lineStyle?: LineStyleType;
22
22
  areaOpacity?: number;
23
+ stack?: boolean;
23
24
  }, yAxisIndex?: number): TimeSeriesOption;
24
25
  /**
25
26
  * Gets threshold-specific line series styles
@@ -1 +1 @@
1
- {"version":3,"file":"data-transform.d.ts","sourceRoot":"","sources":["../../../src/utils/data-transform.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAmB,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAEL,gBAAgB,EAChB,iBAAiB,EAEjB,gBAAgB,EAChB,WAAW,EAEZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAwB,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAQL,4BAA4B,EAC5B,2BAA2B,EAC3B,aAAa,EACd,MAAM,4BAA4B,CAAC;AAEpC,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE1E,eAAO,MAAM,gBAAgB,EAAE,iBAI9B,CAAC;AAEF,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS,CAG7G;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,4BAA4B,EACpC,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,MAAM,EACpB,aAAa,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,aAAa,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EACnE,UAAU,CAAC,EAAE,MAAM,GAClB,gBAAgB,CA2ElB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,gBAAgB,CA2B9G;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,gBAAgB,EAAE,GAAG,UAAU,EAAE,EACvC,GAAG,CAAC,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,MAAM,GACX,MAAM,CAMR;AA4BD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,GAAE,2BAAgC,GAAG,oBAAoB,CAgDnG;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI7C"}
1
+ {"version":3,"file":"data-transform.d.ts","sourceRoot":"","sources":["../../../src/utils/data-transform.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAmB,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAEL,gBAAgB,EAChB,iBAAiB,EAEjB,gBAAgB,EAChB,WAAW,EAEZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAwB,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAQL,4BAA4B,EAC5B,2BAA2B,EAC3B,aAAa,EACd,MAAM,4BAA4B,CAAC;AAEpC,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE1E,eAAO,MAAM,gBAAgB,EAAE,iBAI9B,CAAC;AAEF,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS,CAG7G;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,4BAA4B,EACpC,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,MAAM,EACpB,aAAa,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,aAAa,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EACpF,UAAU,CAAC,EAAE,MAAM,GAClB,gBAAgB,CAqElB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,gBAAgB,CA2B9G;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,gBAAgB,EAAE,GAAG,UAAU,EAAE,EACvC,GAAG,CAAC,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,MAAM,GACX,MAAM,CAMR;AA8BD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,GAAE,2BAAgC,GAAG,oBAAoB,CAgDnG;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI7C"}