@perses-dev/timeseries-chart-plugin 0.14.0-beta.7 → 0.14.0-beta.8

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 (75) hide show
  1. package/README.md +11 -0
  2. package/__mf/js/TimeSeriesChart.aa6aa96b.js +7 -0
  3. package/__mf/js/async/{1616.0201be33.js → 1616.2ad408f8.js} +1 -1
  4. package/__mf/js/async/2490.7e5650e7.js +2 -0
  5. package/__mf/js/async/{3068.40e94d1b.js → 3068.c95fecc7.js} +4 -4
  6. package/__mf/js/async/{3542.49a3ec8e.js → 3441.65e1728a.js} +6 -6
  7. package/__mf/js/async/{392.9e11af0e.js → 392.11188127.js} +2 -2
  8. package/__mf/js/async/{4077.a04f22de.js → 4077.cf1d675f.js} +1 -1
  9. package/__mf/js/async/{4121.bcbce5c8.js → 4121.2a21582b.js} +2 -2
  10. package/__mf/js/async/{4134.605db9d2.js → 4134.9d3e6a8b.js} +1 -1
  11. package/__mf/js/async/{4496.a1356301.js → 4496.eb53e477.js} +1 -1
  12. package/__mf/js/async/{4670.4afc93af.js → 4670.b5dafbaa.js} +1 -1
  13. package/__mf/js/async/{5002.5deda5b9.js → 5002.e3ab6daa.js} +1 -1
  14. package/__mf/js/async/{5071.77adf1ef.js → 5071.586de8fa.js} +1 -1
  15. package/__mf/js/async/{5182.99021d7d.js → 5182.375bbf8e.js} +2 -2
  16. package/__mf/js/async/{5394.b8a43124.js → 5394.f1c40599.js} +3 -3
  17. package/__mf/js/async/{5587.f79fd4b6.js → 5587.bfa64ec3.js} +1 -1
  18. package/__mf/js/async/{6274.de430473.js → 6274.c6a9892d.js} +2 -2
  19. package/__mf/js/async/6625.e3624f20.js +1 -0
  20. package/__mf/js/async/{7151.787a673e.js → 7151.f8879976.js} +1 -1
  21. package/__mf/js/async/{7192.40bdc52a.js → 7192.f5f93b5e.js} +1 -1
  22. package/__mf/js/async/{7319.7c14d9c0.js → 7319.3e3c9686.js} +1 -1
  23. package/__mf/js/async/{7384.d87e02fe.js → 7384.4be917ee.js} +1 -1
  24. package/__mf/js/async/{7633.1948ca18.js → 7633.9cb6de7a.js} +2 -2
  25. package/__mf/js/async/{7955.5c8d8ca0.js → 7955.877daa4d.js} +1 -1
  26. package/__mf/js/async/{7968.0fc6f62f.js → 7968.cf8a4d6a.js} +1 -1
  27. package/__mf/js/async/{7978.304ff469.js → 7978.67c99e22.js} +1 -1
  28. package/__mf/js/async/{8356.944b79cb.js → 8356.b7f7e7f3.js} +1 -1
  29. package/__mf/js/async/{8465.29071e09.js → 8465.56096f79.js} +1 -1
  30. package/__mf/js/async/{8470.b8fae2bf.js → 8470.f137ffe2.js} +2 -2
  31. package/__mf/js/async/{8724.69cc477a.js → 8724.0d169bb2.js} +1 -1
  32. package/__mf/js/async/{873.04fb51e6.js → 873.b41b449a.js} +1 -1
  33. package/__mf/js/async/{9235.6e9dbd11.js → 9235.4831e488.js} +1 -1
  34. package/__mf/js/async/{941.8ecc9c9a.js → 941.76f11ced.js} +2 -2
  35. package/__mf/js/async/{9588.523aa030.js → 9588.883e3395.js} +1 -1
  36. package/__mf/js/async/{9700.cd6d1e06.js → 9700.628e2532.js} +1 -1
  37. package/__mf/js/async/__federation_expose_TimeSeriesChart.40d2d053.js +1 -0
  38. package/__mf/js/async/lib-router.4f5ed027.js +2 -0
  39. package/__mf/js/async/{lib-router.f2c27853.js.LICENSE.txt → lib-router.4f5ed027.js.LICENSE.txt} +3 -3
  40. package/__mf/js/main.7434d87e.js +7 -0
  41. package/lib/TimeSeriesChartBase.d.ts +3 -0
  42. package/lib/TimeSeriesChartBase.d.ts.map +1 -1
  43. package/lib/TimeSeriesChartBase.js +183 -58
  44. package/lib/TimeSeriesChartBase.js.map +1 -1
  45. package/lib/TimeSeriesChartPanel.d.ts +3 -1
  46. package/lib/TimeSeriesChartPanel.d.ts.map +1 -1
  47. package/lib/TimeSeriesChartPanel.js +190 -113
  48. package/lib/TimeSeriesChartPanel.js.map +1 -1
  49. package/lib/test/mock-query-results.d.ts +2 -1
  50. package/lib/test/mock-query-results.d.ts.map +1 -1
  51. package/lib/test/mock-query-results.js +40 -0
  52. package/lib/test/mock-query-results.js.map +1 -1
  53. package/lib/utils/data-transform.d.ts +30 -3
  54. package/lib/utils/data-transform.d.ts.map +1 -1
  55. package/lib/utils/data-transform.js +41 -7
  56. package/lib/utils/data-transform.js.map +1 -1
  57. package/mf-manifest.json +43 -43
  58. package/mf-stats.json +43 -43
  59. package/package.json +5 -5
  60. package/__mf/js/TimeSeriesChart.e2219fd4.js +0 -7
  61. package/__mf/js/async/702.f83f9d6b.js +0 -2
  62. package/__mf/js/async/7491.0bfedc24.js +0 -1
  63. package/__mf/js/async/__federation_expose_TimeSeriesChart.dfd20d64.js +0 -1
  64. package/__mf/js/async/lib-router.f2c27853.js +0 -2
  65. package/__mf/js/main.3444641d.js +0 -7
  66. /package/__mf/js/async/{702.f83f9d6b.js.LICENSE.txt → 2490.7e5650e7.js.LICENSE.txt} +0 -0
  67. /package/__mf/js/async/{3068.40e94d1b.js.LICENSE.txt → 3068.c95fecc7.js.LICENSE.txt} +0 -0
  68. /package/__mf/js/async/{392.9e11af0e.js.LICENSE.txt → 392.11188127.js.LICENSE.txt} +0 -0
  69. /package/__mf/js/async/{4121.bcbce5c8.js.LICENSE.txt → 4121.2a21582b.js.LICENSE.txt} +0 -0
  70. /package/__mf/js/async/{5182.99021d7d.js.LICENSE.txt → 5182.375bbf8e.js.LICENSE.txt} +0 -0
  71. /package/__mf/js/async/{5394.b8a43124.js.LICENSE.txt → 5394.f1c40599.js.LICENSE.txt} +0 -0
  72. /package/__mf/js/async/{6274.de430473.js.LICENSE.txt → 6274.c6a9892d.js.LICENSE.txt} +0 -0
  73. /package/__mf/js/async/{7633.1948ca18.js.LICENSE.txt → 7633.9cb6de7a.js.LICENSE.txt} +0 -0
  74. /package/__mf/js/async/{8470.b8fae2bf.js.LICENSE.txt → 8470.f137ffe2.js.LICENSE.txt} +0 -0
  75. /package/__mf/js/async/{941.8ecc9c9a.js.LICENSE.txt → 941.76f11ced.js.LICENSE.txt} +0 -0
@@ -203,6 +203,46 @@ export const MOCK_TIME_SERIES_DATA_MULTIVALUE = {
203
203
  }
204
204
  ]
205
205
  };
206
+ export const MOCK_TIME_SERIES_EXEMPLARS = [
207
+ {
208
+ seriesLabels: {
209
+ device: '/dev/vda1',
210
+ env: 'demo',
211
+ fstype: 'ext4',
212
+ instance: 'demo.do.prometheus.io:9100',
213
+ job: 'node',
214
+ mountpoint: '/'
215
+ },
216
+ exemplars: [
217
+ {
218
+ labels: {
219
+ trace_id: 'trace-vda1'
220
+ },
221
+ value: 0.27700745551584494,
222
+ timestamp: 1666479357903
223
+ }
224
+ ]
225
+ },
226
+ {
227
+ seriesLabels: {
228
+ device: '/dev/vda15',
229
+ env: 'demo',
230
+ fstype: 'vfat',
231
+ instance: 'demo.do.prometheus.io:9100',
232
+ job: 'node',
233
+ mountpoint: '/boot/efi'
234
+ },
235
+ exemplars: [
236
+ {
237
+ labels: {
238
+ trace_id: 'trace-vda15'
239
+ },
240
+ value: 0.08486496097624485,
241
+ timestamp: 1666479382282
242
+ }
243
+ ]
244
+ }
245
+ ];
206
246
  export const MOCK_TIME_SERIES_DATA_SINGLEVALUE = {
207
247
  timeRange: {
208
248
  start: new Date(1666625535000),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/test/mock-query-results.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 type { TimeSeriesData } from '@perses-dev/spec';\n\nexport const MOCK_TIME_SERIES_QUERY_RESULT_MULTIVALUE = [\n {\n status: 'success',\n fetchStatus: 'idle',\n isLoading: false,\n isSuccess: true,\n isError: false,\n data: {\n timeRange: {\n start: new Date(1666625490000),\n end: new Date(1666625535000),\n },\n stepMs: 24379,\n series: [\n {\n name: 'device=\"/dev/vda1\", env=\"demo\", fstype=\"ext4\", instance=\"demo.do.prometheus.io:9100\", job=\"node\", mountpoint=\"/\"',\n values: [\n [1666479357903, 0.27700745551584494],\n [1666479382282, 0.27701284657366565],\n ],\n labels: {\n device: '/dev/vda1',\n env: 'demo',\n fstype: 'ext4',\n instance: 'demo.do.prometheus.io:9100',\n job: 'node',\n mountpoint: '/',\n },\n },\n {\n name: 'device=\"/dev/vda15\", env=\"demo\", fstype=\"vfat\", instance=\"demo.do.prometheus.io:9100\", job=\"node\", mountpoint=\"/boot/efi\"',\n values: [\n [1666479357903, 0.08486496097624885],\n [1666479382282, 0.08486496097624885],\n ],\n labels: {\n device: '/dev/vda15',\n env: 'demo',\n fstype: 'vfat',\n instance: 'demo.do.prometheus.io:9100',\n job: 'node',\n mountpoint: '/boot/efi',\n },\n },\n ],\n },\n dataUpdatedAt: 1666500979895,\n error: null,\n errorUpdatedAt: 0,\n failureCount: 0,\n errorUpdateCount: 0,\n isFetched: true,\n isFetchedAfterMount: true,\n isFetching: false,\n isRefetching: false,\n isLoadingError: false,\n isPaused: false,\n isPlaceholderData: false,\n isPreviousData: false,\n isRefetchError: false,\n isStale: true,\n },\n];\n\nexport const MOCK_TIME_SERIES_QUERY_RESULT_SINGLEVALUE = [\n {\n status: 'success',\n fetchStatus: 'idle',\n isLoading: false,\n isSuccess: true,\n isError: false,\n data: {\n timeRange: {\n start: new Date(1666625535000),\n end: new Date(1666625535000),\n },\n stepMs: 24379,\n series: [\n {\n name: 'device=\"/dev/vda1\", env=\"demo\", fstype=\"ext4\", instance=\"demo.do.prometheus.io:9100\", job=\"node\", mountpoint=\"/\"',\n values: [[1666479357903, 0.27700745551584494]],\n labels: {\n device: '/dev/vda1',\n env: 'demo',\n fstype: 'ext4',\n instance: 'demo.do.prometheus.io:9100',\n job: 'node',\n mountpoint: '/',\n },\n },\n {\n name: 'device=\"/dev/vda15\", env=\"demo\", fstype=\"vfat\", instance=\"demo.do.prometheus.io:9100\", job=\"node\", mountpoint=\"/boot/efi\"',\n values: [[1666479357903, 0.08486496097624885]],\n labels: {\n device: '/dev/vda15',\n env: 'demo',\n fstype: 'vfat',\n instance: 'demo.do.prometheus.io:9100',\n job: 'node',\n mountpoint: '/boot/efi',\n },\n },\n ],\n },\n dataUpdatedAt: 1666500979895,\n error: null,\n errorUpdatedAt: 0,\n failureCount: 0,\n errorUpdateCount: 0,\n isFetched: true,\n isFetchedAfterMount: true,\n isFetching: false,\n isRefetching: false,\n isLoadingError: false,\n isPaused: false,\n isPlaceholderData: false,\n isPreviousData: false,\n isRefetchError: false,\n isStale: true,\n },\n];\n\nexport const MOCK_TIME_SERIES_DATA_MULTIVALUE: TimeSeriesData = {\n timeRange: {\n start: new Date(1666625490000),\n end: new Date(1666625535000),\n },\n stepMs: 24379,\n series: [\n {\n name: 'device=\"/dev/vda1\", env=\"demo\", fstype=\"ext4\", instance=\"demo.do.prometheus.io:9100\", job=\"node\", mountpoint=\"/\"',\n values: [\n [1666479357903, 0.27700745551584494],\n [1666479382282, 0.27701284657366565],\n ],\n labels: {\n device: '/dev/vda1',\n env: 'demo',\n fstype: 'ext4',\n instance: 'demo.do.prometheus.io:9100',\n job: 'node',\n mountpoint: '/',\n },\n },\n {\n name: 'device=\"/dev/vda15\", env=\"demo\", fstype=\"vfat\", instance=\"demo.do.prometheus.io:9100\", job=\"node\", mountpoint=\"/boot/efi\"',\n values: [\n [1666479357903, 0.08486496097624885],\n [1666479382282, 0.08486496097624885],\n ],\n labels: {\n device: '/dev/vda15',\n env: 'demo',\n fstype: 'vfat',\n instance: 'demo.do.prometheus.io:9100',\n job: 'node',\n mountpoint: '/boot/efi',\n },\n },\n ],\n};\n\nexport const MOCK_TIME_SERIES_DATA_SINGLEVALUE: TimeSeriesData = {\n timeRange: {\n start: new Date(1666625535000),\n end: new Date(1666625535000),\n },\n stepMs: 24379,\n series: [\n {\n name: 'device=\"/dev/vda1\", env=\"demo\", fstype=\"ext4\", instance=\"demo.do.prometheus.io:9100\", job=\"node\", mountpoint=\"/\"',\n values: [[1666479357903, 0.27700745551584494]],\n labels: {\n device: '/dev/vda1',\n env: 'demo',\n fstype: 'ext4',\n instance: 'demo.do.prometheus.io:9100',\n job: 'node',\n mountpoint: '/',\n },\n },\n {\n name: 'device=\"/dev/vda15\", env=\"demo\", fstype=\"vfat\", instance=\"demo.do.prometheus.io:9100\", job=\"node\", mountpoint=\"/boot/efi\"',\n values: [[1666479357903, 0.08486496097624885]],\n labels: {\n device: '/dev/vda15',\n env: 'demo',\n fstype: 'vfat',\n instance: 'demo.do.prometheus.io:9100',\n job: 'node',\n mountpoint: '/boot/efi',\n },\n },\n ],\n};\n\nexport const MOCK_NULL_QUERY_RESULT = [\n {\n status: 'success',\n fetchStatus: 'idle',\n isLoading: false,\n isSuccess: true,\n isError: false,\n data: {\n timeRange: {\n start: new Date(1677376110000),\n end: new Date(1677376410000),\n },\n stepMs: 15000,\n series: [\n {\n name: 'node_memory_Buffers_bytes{env=\"demo\",instance=\"demo.do.prometheus.io:9100\",job=\"node\"}',\n values: [\n [1677376110000, 40000000],\n [1677376125000, 40000000],\n [1677376140000, null],\n [1677376155000, null],\n [1677376170000, null],\n [1677376185000, null],\n [1677376200000, null],\n [1677376215000, 40013824],\n [1677376230000, 40038400],\n [1677376245000, 40054784],\n [1677376260000, 40071168],\n [1677376275000, 40075264],\n [1677376290000, 40091648],\n [1677376305000, 40099840],\n [1677376320000, 40120320],\n [1677376335000, 40128512],\n [1677376350000, 40153088],\n [1677376365000, 40165376],\n [1677376380000, 40177664],\n [1677376395000, 40194048],\n [1677376410000, 40198144],\n ],\n formattedName: 'node_memory_Buffers_bytes{env=\"demo\",instance=\"demo.do.prometheus.io:9100\",job=\"node\"}',\n labels: {\n env: 'demo',\n instance: 'demo.do.prometheus.io:9100',\n job: 'node',\n },\n },\n ],\n },\n dataUpdatedAt: 1677376410000,\n error: null,\n errorUpdatedAt: 0,\n failureCount: 0,\n errorUpdateCount: 0,\n isFetched: true,\n isFetchedAfterMount: true,\n isFetching: false,\n isRefetching: false,\n isLoadingError: false,\n isPaused: false,\n isPlaceholderData: false,\n isPreviousData: false,\n isRefetchError: false,\n isStale: true,\n },\n];\n"],"names":["MOCK_TIME_SERIES_QUERY_RESULT_MULTIVALUE","status","fetchStatus","isLoading","isSuccess","isError","data","timeRange","start","Date","end","stepMs","series","name","values","labels","device","env","fstype","instance","job","mountpoint","dataUpdatedAt","error","errorUpdatedAt","failureCount","errorUpdateCount","isFetched","isFetchedAfterMount","isFetching","isRefetching","isLoadingError","isPaused","isPlaceholderData","isPreviousData","isRefetchError","isStale","MOCK_TIME_SERIES_QUERY_RESULT_SINGLEVALUE","MOCK_TIME_SERIES_DATA_MULTIVALUE","MOCK_TIME_SERIES_DATA_SINGLEVALUE","MOCK_NULL_QUERY_RESULT","formattedName"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/test/mock-query-results.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 type { TimeSeriesData, TimeSeriesExemplars } from '@perses-dev/spec';\n\nexport const MOCK_TIME_SERIES_QUERY_RESULT_MULTIVALUE = [\n {\n status: 'success',\n fetchStatus: 'idle',\n isLoading: false,\n isSuccess: true,\n isError: false,\n data: {\n timeRange: {\n start: new Date(1666625490000),\n end: new Date(1666625535000),\n },\n stepMs: 24379,\n series: [\n {\n name: 'device=\"/dev/vda1\", env=\"demo\", fstype=\"ext4\", instance=\"demo.do.prometheus.io:9100\", job=\"node\", mountpoint=\"/\"',\n values: [\n [1666479357903, 0.27700745551584494],\n [1666479382282, 0.27701284657366565],\n ],\n labels: {\n device: '/dev/vda1',\n env: 'demo',\n fstype: 'ext4',\n instance: 'demo.do.prometheus.io:9100',\n job: 'node',\n mountpoint: '/',\n },\n },\n {\n name: 'device=\"/dev/vda15\", env=\"demo\", fstype=\"vfat\", instance=\"demo.do.prometheus.io:9100\", job=\"node\", mountpoint=\"/boot/efi\"',\n values: [\n [1666479357903, 0.08486496097624885],\n [1666479382282, 0.08486496097624885],\n ],\n labels: {\n device: '/dev/vda15',\n env: 'demo',\n fstype: 'vfat',\n instance: 'demo.do.prometheus.io:9100',\n job: 'node',\n mountpoint: '/boot/efi',\n },\n },\n ],\n },\n dataUpdatedAt: 1666500979895,\n error: null,\n errorUpdatedAt: 0,\n failureCount: 0,\n errorUpdateCount: 0,\n isFetched: true,\n isFetchedAfterMount: true,\n isFetching: false,\n isRefetching: false,\n isLoadingError: false,\n isPaused: false,\n isPlaceholderData: false,\n isPreviousData: false,\n isRefetchError: false,\n isStale: true,\n },\n];\n\nexport const MOCK_TIME_SERIES_QUERY_RESULT_SINGLEVALUE = [\n {\n status: 'success',\n fetchStatus: 'idle',\n isLoading: false,\n isSuccess: true,\n isError: false,\n data: {\n timeRange: {\n start: new Date(1666625535000),\n end: new Date(1666625535000),\n },\n stepMs: 24379,\n series: [\n {\n name: 'device=\"/dev/vda1\", env=\"demo\", fstype=\"ext4\", instance=\"demo.do.prometheus.io:9100\", job=\"node\", mountpoint=\"/\"',\n values: [[1666479357903, 0.27700745551584494]],\n labels: {\n device: '/dev/vda1',\n env: 'demo',\n fstype: 'ext4',\n instance: 'demo.do.prometheus.io:9100',\n job: 'node',\n mountpoint: '/',\n },\n },\n {\n name: 'device=\"/dev/vda15\", env=\"demo\", fstype=\"vfat\", instance=\"demo.do.prometheus.io:9100\", job=\"node\", mountpoint=\"/boot/efi\"',\n values: [[1666479357903, 0.08486496097624885]],\n labels: {\n device: '/dev/vda15',\n env: 'demo',\n fstype: 'vfat',\n instance: 'demo.do.prometheus.io:9100',\n job: 'node',\n mountpoint: '/boot/efi',\n },\n },\n ],\n },\n dataUpdatedAt: 1666500979895,\n error: null,\n errorUpdatedAt: 0,\n failureCount: 0,\n errorUpdateCount: 0,\n isFetched: true,\n isFetchedAfterMount: true,\n isFetching: false,\n isRefetching: false,\n isLoadingError: false,\n isPaused: false,\n isPlaceholderData: false,\n isPreviousData: false,\n isRefetchError: false,\n isStale: true,\n },\n];\n\nexport const MOCK_TIME_SERIES_DATA_MULTIVALUE: TimeSeriesData = {\n timeRange: {\n start: new Date(1666625490000),\n end: new Date(1666625535000),\n },\n stepMs: 24379,\n series: [\n {\n name: 'device=\"/dev/vda1\", env=\"demo\", fstype=\"ext4\", instance=\"demo.do.prometheus.io:9100\", job=\"node\", mountpoint=\"/\"',\n values: [\n [1666479357903, 0.27700745551584494],\n [1666479382282, 0.27701284657366565],\n ],\n labels: {\n device: '/dev/vda1',\n env: 'demo',\n fstype: 'ext4',\n instance: 'demo.do.prometheus.io:9100',\n job: 'node',\n mountpoint: '/',\n },\n },\n {\n name: 'device=\"/dev/vda15\", env=\"demo\", fstype=\"vfat\", instance=\"demo.do.prometheus.io:9100\", job=\"node\", mountpoint=\"/boot/efi\"',\n values: [\n [1666479357903, 0.08486496097624885],\n [1666479382282, 0.08486496097624885],\n ],\n labels: {\n device: '/dev/vda15',\n env: 'demo',\n fstype: 'vfat',\n instance: 'demo.do.prometheus.io:9100',\n job: 'node',\n mountpoint: '/boot/efi',\n },\n },\n ],\n};\n\nexport const MOCK_TIME_SERIES_EXEMPLARS: TimeSeriesExemplars[] = [\n {\n seriesLabels: {\n device: '/dev/vda1',\n env: 'demo',\n fstype: 'ext4',\n instance: 'demo.do.prometheus.io:9100',\n job: 'node',\n mountpoint: '/',\n },\n exemplars: [\n {\n labels: { trace_id: 'trace-vda1' },\n value: 0.27700745551584494,\n timestamp: 1666479357903,\n },\n ],\n },\n {\n seriesLabels: {\n device: '/dev/vda15',\n env: 'demo',\n fstype: 'vfat',\n instance: 'demo.do.prometheus.io:9100',\n job: 'node',\n mountpoint: '/boot/efi',\n },\n exemplars: [\n {\n labels: { trace_id: 'trace-vda15' },\n value: 0.08486496097624485,\n timestamp: 1666479382282,\n },\n ],\n },\n];\n\nexport const MOCK_TIME_SERIES_DATA_SINGLEVALUE: TimeSeriesData = {\n timeRange: {\n start: new Date(1666625535000),\n end: new Date(1666625535000),\n },\n stepMs: 24379,\n series: [\n {\n name: 'device=\"/dev/vda1\", env=\"demo\", fstype=\"ext4\", instance=\"demo.do.prometheus.io:9100\", job=\"node\", mountpoint=\"/\"',\n values: [[1666479357903, 0.27700745551584494]],\n labels: {\n device: '/dev/vda1',\n env: 'demo',\n fstype: 'ext4',\n instance: 'demo.do.prometheus.io:9100',\n job: 'node',\n mountpoint: '/',\n },\n },\n {\n name: 'device=\"/dev/vda15\", env=\"demo\", fstype=\"vfat\", instance=\"demo.do.prometheus.io:9100\", job=\"node\", mountpoint=\"/boot/efi\"',\n values: [[1666479357903, 0.08486496097624885]],\n labels: {\n device: '/dev/vda15',\n env: 'demo',\n fstype: 'vfat',\n instance: 'demo.do.prometheus.io:9100',\n job: 'node',\n mountpoint: '/boot/efi',\n },\n },\n ],\n};\n\nexport const MOCK_NULL_QUERY_RESULT = [\n {\n status: 'success',\n fetchStatus: 'idle',\n isLoading: false,\n isSuccess: true,\n isError: false,\n data: {\n timeRange: {\n start: new Date(1677376110000),\n end: new Date(1677376410000),\n },\n stepMs: 15000,\n series: [\n {\n name: 'node_memory_Buffers_bytes{env=\"demo\",instance=\"demo.do.prometheus.io:9100\",job=\"node\"}',\n values: [\n [1677376110000, 40000000],\n [1677376125000, 40000000],\n [1677376140000, null],\n [1677376155000, null],\n [1677376170000, null],\n [1677376185000, null],\n [1677376200000, null],\n [1677376215000, 40013824],\n [1677376230000, 40038400],\n [1677376245000, 40054784],\n [1677376260000, 40071168],\n [1677376275000, 40075264],\n [1677376290000, 40091648],\n [1677376305000, 40099840],\n [1677376320000, 40120320],\n [1677376335000, 40128512],\n [1677376350000, 40153088],\n [1677376365000, 40165376],\n [1677376380000, 40177664],\n [1677376395000, 40194048],\n [1677376410000, 40198144],\n ],\n formattedName: 'node_memory_Buffers_bytes{env=\"demo\",instance=\"demo.do.prometheus.io:9100\",job=\"node\"}',\n labels: {\n env: 'demo',\n instance: 'demo.do.prometheus.io:9100',\n job: 'node',\n },\n },\n ],\n },\n dataUpdatedAt: 1677376410000,\n error: null,\n errorUpdatedAt: 0,\n failureCount: 0,\n errorUpdateCount: 0,\n isFetched: true,\n isFetchedAfterMount: true,\n isFetching: false,\n isRefetching: false,\n isLoadingError: false,\n isPaused: false,\n isPlaceholderData: false,\n isPreviousData: false,\n isRefetchError: false,\n isStale: true,\n },\n];\n"],"names":["MOCK_TIME_SERIES_QUERY_RESULT_MULTIVALUE","status","fetchStatus","isLoading","isSuccess","isError","data","timeRange","start","Date","end","stepMs","series","name","values","labels","device","env","fstype","instance","job","mountpoint","dataUpdatedAt","error","errorUpdatedAt","failureCount","errorUpdateCount","isFetched","isFetchedAfterMount","isFetching","isRefetching","isLoadingError","isPaused","isPlaceholderData","isPreviousData","isRefetchError","isStale","MOCK_TIME_SERIES_QUERY_RESULT_SINGLEVALUE","MOCK_TIME_SERIES_DATA_MULTIVALUE","MOCK_TIME_SERIES_EXEMPLARS","seriesLabels","exemplars","trace_id","value","timestamp","MOCK_TIME_SERIES_DATA_SINGLEVALUE","MOCK_NULL_QUERY_RESULT","formattedName"],"mappings":"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"}
@@ -1,13 +1,34 @@
1
1
  import type { LegacyTimeSeries, EChartsDataFormat, TimeSeriesOption, StepOptions } from '@perses-dev/components';
2
2
  import type { useTimeSeriesQueries, PanelData } from '@perses-dev/plugin-system';
3
- import type { TimeScale, TimeSeries, TimeSeriesData } from '@perses-dev/spec';
3
+ import type { Exemplar, Labels, TimeScale, TimeSeries, TimeSeriesData } from '@perses-dev/spec';
4
4
  import type { YAXisComponentOption } from 'echarts';
5
- import type { LineSeriesOption } from 'echarts/charts';
5
+ import type { LineSeriesOption, ScatterSeriesOption } from 'echarts/charts';
6
6
  import type { TimeSeriesChartVisualOptions, TimeSeriesChartYAxisOptions, LineStyleType } from '../time-series-chart-model';
7
7
  export type RunningQueriesState = ReturnType<typeof useTimeSeriesQueries>;
8
8
  export declare const EMPTY_GRAPH_DATA: EChartsDataFormat;
9
9
  export declare const HIDE_DATAPOINTS_LIMIT = 70;
10
10
  export declare const BLUR_FADEOUT_OPACITY = 0.5;
11
+ export declare const EXEMPLAR_SERIES_ID_PREFIX = "exemplar-";
12
+ export declare const EXEMPLAR_SYMBOL_SIZE = 14;
13
+ /**
14
+ * The exemplars of one series, converted to a chart-friendly shape with the
15
+ * rendering attributes (color, y axis) of the matching time series.
16
+ */
17
+ export interface ExemplarChartData {
18
+ seriesId: string;
19
+ seriesName: string;
20
+ color: string;
21
+ seriesLabels?: Labels;
22
+ yAxisIndex?: number;
23
+ /**
24
+ * When the matching series is rendered with `querySettings.negativeY`, its values are
25
+ * visually negated so it renders below the X axis. The same transform is applied to
26
+ * the exemplar markers' plotted Y values so they stay next to their series. The
27
+ * original (positive) values remain on each `exemplar` for metadata display.
28
+ */
29
+ negativeY?: boolean;
30
+ exemplars: Exemplar[];
31
+ }
11
32
  /**
12
33
  * Given a list of running queries, calculates a common time scale for use on
13
34
  * the x axis (i.e. start/end dates and a step that is divisible into all of
@@ -21,7 +42,13 @@ export declare function getTimeSeries(id: string, datasetIndex: number, formatte
21
42
  lineStyle?: LineStyleType;
22
43
  areaOpacity?: number;
23
44
  stack?: boolean;
24
- }, yAxisIndex?: number): TimeSeriesOption;
45
+ }, yAxisIndex?: number, visibleSeriesCount?: number): TimeSeriesOption;
46
+ /**
47
+ * Gets an ECharts scatter series rendering exemplar markers for a single series.
48
+ * Each data item embeds its exemplar (and series labels) so the metadata dialog
49
+ * can be populated when a marker is clicked.
50
+ */
51
+ export declare function getExemplarSeries(data: ExemplarChartData): ScatterSeriesOption;
25
52
  /**
26
53
  * Gets threshold-specific line series styles
27
54
  * markLine cannot be used since it does not update yAxis max / min
@@ -1 +1 @@
1
- {"version":3,"file":"data-transform.d.ts","sourceRoot":"","sources":["../../../src/utils/data-transform.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EAEjB,gBAAgB,EAChB,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAwB,MAAM,kBAAkB,CAAC;AACpG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAmB,MAAM,gBAAgB,CAAC;AAExE,OAAO,KAAK,EACV,4BAA4B,EAC5B,2BAA2B,EAC3B,aAAa,EACd,MAAM,4BAA4B,CAAC;AAWpC,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"}
1
+ {"version":3,"file":"data-transform.d.ts","sourceRoot":"","sources":["../../../src/utils/data-transform.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EAEjB,gBAAgB,EAChB,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAwB,MAAM,kBAAkB,CAAC;AACtH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAmB,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE7F,OAAO,KAAK,EACV,4BAA4B,EAC5B,2BAA2B,EAC3B,aAAa,EACd,MAAM,4BAA4B,CAAC;AAWpC,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,eAAO,MAAM,yBAAyB,cAAc,CAAC;AAErD,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED;;;;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,EACnB,kBAAkB,SAAI,GACrB,gBAAgB,CAsElB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,mBAAmB,CAmB9E;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"}
@@ -19,6 +19,8 @@ export const EMPTY_GRAPH_DATA = {
19
19
  };
20
20
  export const HIDE_DATAPOINTS_LIMIT = 70;
21
21
  export const BLUR_FADEOUT_OPACITY = 0.5;
22
+ export const EXEMPLAR_SERIES_ID_PREFIX = 'exemplar-';
23
+ export const EXEMPLAR_SYMBOL_SIZE = 14;
22
24
  /**
23
25
  * Given a list of running queries, calculates a common time scale for use on
24
26
  * the x axis (i.e. start/end dates and a step that is divisible into all of
@@ -29,13 +31,15 @@ export const BLUR_FADEOUT_OPACITY = 0.5;
29
31
  }
30
32
  /**
31
33
  * Gets ECharts line series option properties for regular trends
32
- */ export function getTimeSeries(id, datasetIndex, formattedName, visual, timeScale, paletteColor, querySettings, yAxisIndex) {
34
+ */ export function getTimeSeries(id, datasetIndex, formattedName, visual, timeScale, paletteColor, querySettings, yAxisIndex, visibleSeriesCount = 1) {
33
35
  const lineWidth = visual.lineWidth ?? DEFAULT_LINE_WIDTH;
34
36
  const pointRadius = visual.pointRadius ?? DEFAULT_POINT_RADIUS;
35
37
  const shouldStack = querySettings?.stack !== undefined ? querySettings.stack : visual.stack === 'all';
36
- // Shows datapoint symbols when selected time range is roughly 15 minutes or less
38
+ const areaOpacity = querySettings?.areaOpacity ?? visual.areaOpacity ?? DEFAULT_AREA_OPACITY;
39
+ // Show automatic point markers only on short, sparse charts. Dense charts
40
+ // otherwise create a symbol for every sample across every visible series.
37
41
  const minuteMs = 60000;
38
- let showPoints = timeScale.rangeMs <= minuteMs * 15;
42
+ let showPoints = timeScale.rangeMs <= minuteMs * 15 && visibleSeriesCount <= HIDE_DATAPOINTS_LIMIT;
39
43
  // Allows overriding default behavior and opt-in to always show all symbols (can hurt performance)
40
44
  if (visual.showPoints === 'always') {
41
45
  showPoints = true;
@@ -73,13 +77,16 @@ export const BLUR_FADEOUT_OPACITY = 0.5;
73
77
  width: lineWidth,
74
78
  type: querySettings?.lineStyle ?? visual.lineStyle
75
79
  },
76
- areaStyle: {
77
- opacity: querySettings?.areaOpacity ?? visual.areaOpacity ?? DEFAULT_AREA_OPACITY
78
- },
80
+ // ECharts builds an area polygon whenever areaStyle is set, including at opacity 0.
81
+ ...areaOpacity > 0 ? {
82
+ areaStyle: {
83
+ opacity: areaOpacity
84
+ }
85
+ } : {},
79
86
  // https://echarts.apache.org/en/option.html#series-line.emphasis
80
87
  emphasis: {
81
88
  focus: 'series',
82
- disabled: visual.areaOpacity !== undefined && visual.areaOpacity > 0,
89
+ disabled: areaOpacity > 0,
83
90
  lineStyle: {
84
91
  width: lineWidth + 1,
85
92
  opacity: 1,
@@ -96,6 +103,33 @@ export const BLUR_FADEOUT_OPACITY = 0.5;
96
103
  };
97
104
  return series;
98
105
  }
106
+ /**
107
+ * Gets an ECharts scatter series rendering exemplar markers for a single series.
108
+ * Each data item embeds its exemplar (and series labels) so the metadata dialog
109
+ * can be populated when a marker is clicked.
110
+ */ export function getExemplarSeries(data) {
111
+ return {
112
+ type: 'scatter',
113
+ id: `${EXEMPLAR_SERIES_ID_PREFIX}${data.seriesId}`,
114
+ name: data.seriesName,
115
+ color: data.color,
116
+ yAxisIndex: data.yAxisIndex,
117
+ symbol: 'diamond',
118
+ symbolSize: EXEMPLAR_SYMBOL_SIZE,
119
+ z: 10,
120
+ cursor: 'pointer',
121
+ data: data.exemplars.map((exemplar)=>({
122
+ // The plotted Y value is negated when negativeY is enabled for the matching series,
123
+ // while `exemplar.value` keeps the original value for the metadata tooltip.
124
+ value: [
125
+ exemplar.timestamp,
126
+ data.negativeY ? -exemplar.value : exemplar.value
127
+ ],
128
+ exemplar,
129
+ seriesLabels: data.seriesLabels
130
+ }))
131
+ };
132
+ }
99
133
  /**
100
134
  * Gets threshold-specific line series styles
101
135
  * markLine cannot be used since it does not update yAxis max / min
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/data-transform.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 type {\n LegacyTimeSeries,\n EChartsDataFormat,\n EChartsValues,\n TimeSeriesOption,\n StepOptions,\n} from '@perses-dev/components';\nimport { OPTIMIZED_MODE_SERIES_LIMIT, getCommonTimeScale } from '@perses-dev/components';\nimport type { useTimeSeriesQueries, PanelData } from '@perses-dev/plugin-system';\nimport type { TimeScale, TimeSeries, TimeSeriesData, TimeSeriesValueTuple } from '@perses-dev/spec';\nimport type { YAXisComponentOption } from 'echarts';\nimport type { LineSeriesOption, BarSeriesOption } from 'echarts/charts';\n\nimport type {\n TimeSeriesChartVisualOptions,\n TimeSeriesChartYAxisOptions,\n LineStyleType,\n} from '../time-series-chart-model';\nimport {\n DEFAULT_AREA_OPACITY,\n DEFAULT_CONNECT_NULLS,\n DEFAULT_LINE_WIDTH,\n DEFAULT_POINT_RADIUS,\n DEFAULT_Y_AXIS,\n POSITIVE_MIN_VALUE_MULTIPLIER,\n NEGATIVE_MIN_VALUE_MULTIPLIER,\n} from '../time-series-chart-model';\n\nexport type RunningQueriesState = ReturnType<typeof useTimeSeriesQueries>;\n\nexport const EMPTY_GRAPH_DATA: EChartsDataFormat = {\n timeSeries: [],\n xAxis: [],\n legendItems: [],\n};\n\nexport const HIDE_DATAPOINTS_LIMIT = 70;\n\nexport const BLUR_FADEOUT_OPACITY = 0.5;\n\n/**\n * Given a list of running queries, calculates a common time scale for use on\n * the x axis (i.e. start/end dates and a step that is divisible into all of\n * the queries' steps).\n */\nexport function getCommonTimeScaleForQueries(queries: Array<PanelData<TimeSeriesData>>): TimeScale | undefined {\n const seriesData = queries.map((query) => query.data);\n return getCommonTimeScale(seriesData);\n}\n\n/**\n * Gets ECharts line series option properties for regular trends\n */\nexport function getTimeSeries(\n id: string,\n datasetIndex: number,\n formattedName: string,\n visual: TimeSeriesChartVisualOptions,\n timeScale: TimeScale,\n paletteColor: string,\n querySettings?: { lineStyle?: LineStyleType; areaOpacity?: number; stack?: boolean },\n yAxisIndex?: number,\n): TimeSeriesOption {\n const lineWidth = visual.lineWidth ?? DEFAULT_LINE_WIDTH;\n const pointRadius = visual.pointRadius ?? DEFAULT_POINT_RADIUS;\n const shouldStack = querySettings?.stack !== undefined ? querySettings.stack : visual.stack === 'all';\n\n // Shows datapoint symbols when selected time range is roughly 15 minutes or less\n const minuteMs = 60000;\n let showPoints = timeScale.rangeMs <= minuteMs * 15;\n // Allows overriding default behavior and opt-in to always show all symbols (can hurt performance)\n if (visual.showPoints === 'always') {\n showPoints = true;\n }\n\n if (visual.display === 'bar') {\n const series: BarSeriesOption = {\n type: 'bar',\n id: id,\n datasetIndex,\n name: formattedName,\n color: paletteColor,\n stack: shouldStack ? 'all' : undefined,\n yAxisIndex: yAxisIndex,\n label: {\n show: false,\n },\n };\n return series;\n }\n\n const series: LineSeriesOption = {\n type: 'line',\n id: id,\n datasetIndex,\n name: formattedName,\n connectNulls: visual.connectNulls ?? DEFAULT_CONNECT_NULLS,\n color: paletteColor,\n stack: shouldStack ? 'all' : undefined,\n yAxisIndex: yAxisIndex,\n sampling: 'lttb',\n progressiveThreshold: OPTIMIZED_MODE_SERIES_LIMIT, // https://echarts.apache.org/en/option.html#series-lines.progressiveThreshold\n showSymbol: showPoints,\n showAllSymbol: true,\n symbolSize: pointRadius,\n lineStyle: {\n width: lineWidth,\n type: (querySettings?.lineStyle ?? visual.lineStyle) as LineStyleType,\n },\n areaStyle: {\n opacity: querySettings?.areaOpacity ?? visual.areaOpacity ?? DEFAULT_AREA_OPACITY,\n },\n // https://echarts.apache.org/en/option.html#series-line.emphasis\n emphasis: {\n focus: 'series',\n disabled: visual.areaOpacity !== undefined && visual.areaOpacity > 0, // prevents flicker when moving cursor between shaded regions\n lineStyle: {\n width: lineWidth + 1,\n opacity: 1,\n type: visual.lineStyle,\n },\n },\n blur: {\n lineStyle: {\n width: lineWidth,\n opacity: BLUR_FADEOUT_OPACITY,\n type: visual.lineStyle,\n },\n },\n };\n return series;\n}\n\n/**\n * Gets threshold-specific line series styles\n * markLine cannot be used since it does not update yAxis max / min\n * and threshold data needs to show in the tooltip\n */\nexport function getThresholdSeries(name: string, threshold: StepOptions, seriesIndex: number): LineSeriesOption {\n return {\n type: 'line',\n name: name,\n id: name,\n datasetId: name,\n datasetIndex: seriesIndex,\n color: threshold.color,\n label: {\n show: false,\n },\n lineStyle: {\n type: 'dashed',\n width: 2,\n },\n emphasis: {\n focus: 'series',\n lineStyle: {\n width: 2.5,\n },\n },\n blur: {\n lineStyle: {\n opacity: BLUR_FADEOUT_OPACITY,\n },\n },\n };\n}\n\n/**\n * Converts percent threshold into absolute step value\n * If max is undefined, use the max value from time series data as default\n */\nexport function convertPercentThreshold(\n percent: number,\n data: LegacyTimeSeries[] | TimeSeries[],\n max?: number,\n min?: number,\n): number {\n const percentDecimal = percent / 100;\n const adjustedMax = max ?? findMax(data);\n const adjustedMin = min ?? 0;\n const total = adjustedMax - adjustedMin;\n return percentDecimal * total + adjustedMin;\n}\n\nfunction findMax(data: LegacyTimeSeries[] | TimeSeries[]): number {\n let max = 0;\n if (data.length && data[0] !== undefined && (data as TimeSeries[])[0]?.values) {\n (data as TimeSeries[]).forEach((series) => {\n series.values.forEach((valueTuple: TimeSeriesValueTuple) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [_, value] = valueTuple;\n // Use the absolute value so percent thresholds compute correctly against\n // negated series (e.g. when `querySettings[].negativeY` is enabled).\n if (typeof value === 'number' && Math.abs(value) > max) {\n max = Math.abs(value);\n }\n });\n });\n } else {\n (data as LegacyTimeSeries[]).forEach((series) => {\n if (series.data !== undefined) {\n series.data.forEach((value: EChartsValues) => {\n if (typeof value === 'number' && Math.abs(value) > max) {\n max = Math.abs(value);\n }\n });\n }\n });\n }\n return max;\n}\n\n/**\n * Converts Perses panel yAxis from dashboard spec to ECharts supported yAxis options.\n * Handles both linear and logarithmic scales with appropriate min/max calculations.\n */\nexport function convertPanelYAxis(inputAxis: TimeSeriesChartYAxisOptions = {}): YAXisComponentOption {\n // Determine the appropriate min value based on scale type and user input\n let minValue: YAXisComponentOption['min'];\n if (inputAxis.logBase !== undefined) {\n // For logarithmic scales without explicit min:\n // Let ECharts auto-calculate the range based on data to avoid issues with\n // function-based calculations which can result in improper ranges (e.g., 1-10)\n minValue = undefined;\n } else if (inputAxis?.min !== undefined) {\n // User explicitly set a min value - use it for both linear and log scales\n minValue = inputAxis.min;\n } else {\n // For linear scales without explicit min:\n // Use dynamic calculation with padding for better visualization\n // https://echarts.apache.org/en/option.html#yAxis.min\n minValue = (value): number => {\n if (value.min >= 0 && value.min <= 1) {\n // Helps with PercentDecimal units, or datasets that return 0 or 1 booleans\n return 0;\n }\n\n // Note: We can tweak the MULTIPLIER constants if we want\n // TODO: Experiment with using a padding that is based on the difference between max value and min value\n if (value.min > 0) {\n return roundDown(value.min * POSITIVE_MIN_VALUE_MULTIPLIER);\n } else {\n return roundDown(value.min * NEGATIVE_MIN_VALUE_MULTIPLIER);\n }\n };\n }\n\n // Build the yAxis configuration\n const yAxis: YAXisComponentOption = {\n show: inputAxis?.show ?? DEFAULT_Y_AXIS.show,\n min: minValue,\n max: inputAxis?.max,\n };\n\n // Apply logarithmic scale settings if requested\n if (inputAxis.logBase !== undefined) {\n return {\n ...yAxis,\n type: 'log',\n logBase: inputAxis.logBase,\n };\n }\n\n return yAxis;\n}\n\n/**\n * Rounds down to nearest number with one significant digit.\n *\n * Examples:\n * 1. 675 --> 600\n * 2. 0.567 --> 0.5\n * 3. -12 --> -20\n */\nexport function roundDown(num: number): number {\n const magnitude = Math.floor(Math.log10(Math.abs(num)));\n const firstDigit = Math.floor(num / Math.pow(10, magnitude));\n return Number((firstDigit * Math.pow(10, magnitude)).toPrecision(1));\n}\n"],"names":["OPTIMIZED_MODE_SERIES_LIMIT","getCommonTimeScale","DEFAULT_AREA_OPACITY","DEFAULT_CONNECT_NULLS","DEFAULT_LINE_WIDTH","DEFAULT_POINT_RADIUS","DEFAULT_Y_AXIS","POSITIVE_MIN_VALUE_MULTIPLIER","NEGATIVE_MIN_VALUE_MULTIPLIER","EMPTY_GRAPH_DATA","timeSeries","xAxis","legendItems","HIDE_DATAPOINTS_LIMIT","BLUR_FADEOUT_OPACITY","getCommonTimeScaleForQueries","queries","seriesData","map","query","data","getTimeSeries","id","datasetIndex","formattedName","visual","timeScale","paletteColor","querySettings","yAxisIndex","lineWidth","pointRadius","shouldStack","stack","undefined","minuteMs","showPoints","rangeMs","display","series","type","name","color","label","show","connectNulls","sampling","progressiveThreshold","showSymbol","showAllSymbol","symbolSize","lineStyle","width","areaStyle","opacity","areaOpacity","emphasis","focus","disabled","blur","getThresholdSeries","threshold","seriesIndex","datasetId","convertPercentThreshold","percent","max","min","percentDecimal","adjustedMax","findMax","adjustedMin","total","length","values","forEach","valueTuple","_","value","Math","abs","convertPanelYAxis","inputAxis","minValue","logBase","roundDown","yAxis","num","magnitude","floor","log10","firstDigit","pow","Number","toPrecision"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/data-transform.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 type {\n LegacyTimeSeries,\n EChartsDataFormat,\n EChartsValues,\n TimeSeriesOption,\n StepOptions,\n} from '@perses-dev/components';\nimport { OPTIMIZED_MODE_SERIES_LIMIT, getCommonTimeScale } from '@perses-dev/components';\nimport type { useTimeSeriesQueries, PanelData } from '@perses-dev/plugin-system';\nimport type { Exemplar, Labels, TimeScale, TimeSeries, TimeSeriesData, TimeSeriesValueTuple } from '@perses-dev/spec';\nimport type { YAXisComponentOption } from 'echarts';\nimport type { LineSeriesOption, BarSeriesOption, ScatterSeriesOption } from 'echarts/charts';\n\nimport type {\n TimeSeriesChartVisualOptions,\n TimeSeriesChartYAxisOptions,\n LineStyleType,\n} from '../time-series-chart-model';\nimport {\n DEFAULT_AREA_OPACITY,\n DEFAULT_CONNECT_NULLS,\n DEFAULT_LINE_WIDTH,\n DEFAULT_POINT_RADIUS,\n DEFAULT_Y_AXIS,\n POSITIVE_MIN_VALUE_MULTIPLIER,\n NEGATIVE_MIN_VALUE_MULTIPLIER,\n} from '../time-series-chart-model';\n\nexport type RunningQueriesState = ReturnType<typeof useTimeSeriesQueries>;\n\nexport const EMPTY_GRAPH_DATA: EChartsDataFormat = {\n timeSeries: [],\n xAxis: [],\n legendItems: [],\n};\n\nexport const HIDE_DATAPOINTS_LIMIT = 70;\n\nexport const BLUR_FADEOUT_OPACITY = 0.5;\n\nexport const EXEMPLAR_SERIES_ID_PREFIX = 'exemplar-';\n\nexport const EXEMPLAR_SYMBOL_SIZE = 14;\n\n/**\n * The exemplars of one series, converted to a chart-friendly shape with the\n * rendering attributes (color, y axis) of the matching time series.\n */\nexport interface ExemplarChartData {\n seriesId: string;\n seriesName: string;\n color: string;\n seriesLabels?: Labels;\n yAxisIndex?: number;\n /**\n * When the matching series is rendered with `querySettings.negativeY`, its values are\n * visually negated so it renders below the X axis. The same transform is applied to\n * the exemplar markers' plotted Y values so they stay next to their series. The\n * original (positive) values remain on each `exemplar` for metadata display.\n */\n negativeY?: boolean;\n exemplars: Exemplar[];\n}\n\n/**\n * Given a list of running queries, calculates a common time scale for use on\n * the x axis (i.e. start/end dates and a step that is divisible into all of\n * the queries' steps).\n */\nexport function getCommonTimeScaleForQueries(queries: Array<PanelData<TimeSeriesData>>): TimeScale | undefined {\n const seriesData = queries.map((query) => query.data);\n return getCommonTimeScale(seriesData);\n}\n\n/**\n * Gets ECharts line series option properties for regular trends\n */\nexport function getTimeSeries(\n id: string,\n datasetIndex: number,\n formattedName: string,\n visual: TimeSeriesChartVisualOptions,\n timeScale: TimeScale,\n paletteColor: string,\n querySettings?: { lineStyle?: LineStyleType; areaOpacity?: number; stack?: boolean },\n yAxisIndex?: number,\n visibleSeriesCount = 1,\n): TimeSeriesOption {\n const lineWidth = visual.lineWidth ?? DEFAULT_LINE_WIDTH;\n const pointRadius = visual.pointRadius ?? DEFAULT_POINT_RADIUS;\n const shouldStack = querySettings?.stack !== undefined ? querySettings.stack : visual.stack === 'all';\n const areaOpacity = querySettings?.areaOpacity ?? visual.areaOpacity ?? DEFAULT_AREA_OPACITY;\n\n // Show automatic point markers only on short, sparse charts. Dense charts\n // otherwise create a symbol for every sample across every visible series.\n const minuteMs = 60000;\n let showPoints = timeScale.rangeMs <= minuteMs * 15 && visibleSeriesCount <= HIDE_DATAPOINTS_LIMIT;\n // Allows overriding default behavior and opt-in to always show all symbols (can hurt performance)\n if (visual.showPoints === 'always') {\n showPoints = true;\n }\n\n if (visual.display === 'bar') {\n const series: BarSeriesOption = {\n type: 'bar',\n id: id,\n datasetIndex,\n name: formattedName,\n color: paletteColor,\n stack: shouldStack ? 'all' : undefined,\n yAxisIndex: yAxisIndex,\n label: {\n show: false,\n },\n };\n return series;\n }\n\n const series: LineSeriesOption = {\n type: 'line',\n id: id,\n datasetIndex,\n name: formattedName,\n connectNulls: visual.connectNulls ?? DEFAULT_CONNECT_NULLS,\n color: paletteColor,\n stack: shouldStack ? 'all' : undefined,\n yAxisIndex: yAxisIndex,\n sampling: 'lttb',\n progressiveThreshold: OPTIMIZED_MODE_SERIES_LIMIT, // https://echarts.apache.org/en/option.html#series-lines.progressiveThreshold\n showSymbol: showPoints,\n showAllSymbol: true,\n symbolSize: pointRadius,\n lineStyle: {\n width: lineWidth,\n type: (querySettings?.lineStyle ?? visual.lineStyle) as LineStyleType,\n },\n // ECharts builds an area polygon whenever areaStyle is set, including at opacity 0.\n ...(areaOpacity > 0 ? { areaStyle: { opacity: areaOpacity } } : {}),\n // https://echarts.apache.org/en/option.html#series-line.emphasis\n emphasis: {\n focus: 'series',\n disabled: areaOpacity > 0, // prevents flicker when moving cursor between shaded regions\n lineStyle: {\n width: lineWidth + 1,\n opacity: 1,\n type: visual.lineStyle,\n },\n },\n blur: {\n lineStyle: {\n width: lineWidth,\n opacity: BLUR_FADEOUT_OPACITY,\n type: visual.lineStyle,\n },\n },\n };\n return series;\n}\n\n/**\n * Gets an ECharts scatter series rendering exemplar markers for a single series.\n * Each data item embeds its exemplar (and series labels) so the metadata dialog\n * can be populated when a marker is clicked.\n */\nexport function getExemplarSeries(data: ExemplarChartData): ScatterSeriesOption {\n return {\n type: 'scatter',\n id: `${EXEMPLAR_SERIES_ID_PREFIX}${data.seriesId}`,\n name: data.seriesName,\n color: data.color,\n yAxisIndex: data.yAxisIndex,\n symbol: 'diamond',\n symbolSize: EXEMPLAR_SYMBOL_SIZE,\n z: 10,\n cursor: 'pointer',\n data: data.exemplars.map((exemplar) => ({\n // The plotted Y value is negated when negativeY is enabled for the matching series,\n // while `exemplar.value` keeps the original value for the metadata tooltip.\n value: [exemplar.timestamp, data.negativeY ? -exemplar.value : exemplar.value],\n exemplar,\n seriesLabels: data.seriesLabels,\n })),\n };\n}\n\n/**\n * Gets threshold-specific line series styles\n * markLine cannot be used since it does not update yAxis max / min\n * and threshold data needs to show in the tooltip\n */\nexport function getThresholdSeries(name: string, threshold: StepOptions, seriesIndex: number): LineSeriesOption {\n return {\n type: 'line',\n name: name,\n id: name,\n datasetId: name,\n datasetIndex: seriesIndex,\n color: threshold.color,\n label: {\n show: false,\n },\n lineStyle: {\n type: 'dashed',\n width: 2,\n },\n emphasis: {\n focus: 'series',\n lineStyle: {\n width: 2.5,\n },\n },\n blur: {\n lineStyle: {\n opacity: BLUR_FADEOUT_OPACITY,\n },\n },\n };\n}\n\n/**\n * Converts percent threshold into absolute step value\n * If max is undefined, use the max value from time series data as default\n */\nexport function convertPercentThreshold(\n percent: number,\n data: LegacyTimeSeries[] | TimeSeries[],\n max?: number,\n min?: number,\n): number {\n const percentDecimal = percent / 100;\n const adjustedMax = max ?? findMax(data);\n const adjustedMin = min ?? 0;\n const total = adjustedMax - adjustedMin;\n return percentDecimal * total + adjustedMin;\n}\n\nfunction findMax(data: LegacyTimeSeries[] | TimeSeries[]): number {\n let max = 0;\n if (data.length && data[0] !== undefined && (data as TimeSeries[])[0]?.values) {\n (data as TimeSeries[]).forEach((series) => {\n series.values.forEach((valueTuple: TimeSeriesValueTuple) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [_, value] = valueTuple;\n // Use the absolute value so percent thresholds compute correctly against\n // negated series (e.g. when `querySettings[].negativeY` is enabled).\n if (typeof value === 'number' && Math.abs(value) > max) {\n max = Math.abs(value);\n }\n });\n });\n } else {\n (data as LegacyTimeSeries[]).forEach((series) => {\n if (series.data !== undefined) {\n series.data.forEach((value: EChartsValues) => {\n if (typeof value === 'number' && Math.abs(value) > max) {\n max = Math.abs(value);\n }\n });\n }\n });\n }\n return max;\n}\n\n/**\n * Converts Perses panel yAxis from dashboard spec to ECharts supported yAxis options.\n * Handles both linear and logarithmic scales with appropriate min/max calculations.\n */\nexport function convertPanelYAxis(inputAxis: TimeSeriesChartYAxisOptions = {}): YAXisComponentOption {\n // Determine the appropriate min value based on scale type and user input\n let minValue: YAXisComponentOption['min'];\n if (inputAxis.logBase !== undefined) {\n // For logarithmic scales without explicit min:\n // Let ECharts auto-calculate the range based on data to avoid issues with\n // function-based calculations which can result in improper ranges (e.g., 1-10)\n minValue = undefined;\n } else if (inputAxis?.min !== undefined) {\n // User explicitly set a min value - use it for both linear and log scales\n minValue = inputAxis.min;\n } else {\n // For linear scales without explicit min:\n // Use dynamic calculation with padding for better visualization\n // https://echarts.apache.org/en/option.html#yAxis.min\n minValue = (value): number => {\n if (value.min >= 0 && value.min <= 1) {\n // Helps with PercentDecimal units, or datasets that return 0 or 1 booleans\n return 0;\n }\n\n // Note: We can tweak the MULTIPLIER constants if we want\n // TODO: Experiment with using a padding that is based on the difference between max value and min value\n if (value.min > 0) {\n return roundDown(value.min * POSITIVE_MIN_VALUE_MULTIPLIER);\n } else {\n return roundDown(value.min * NEGATIVE_MIN_VALUE_MULTIPLIER);\n }\n };\n }\n\n // Build the yAxis configuration\n const yAxis: YAXisComponentOption = {\n show: inputAxis?.show ?? DEFAULT_Y_AXIS.show,\n min: minValue,\n max: inputAxis?.max,\n };\n\n // Apply logarithmic scale settings if requested\n if (inputAxis.logBase !== undefined) {\n return {\n ...yAxis,\n type: 'log',\n logBase: inputAxis.logBase,\n };\n }\n\n return yAxis;\n}\n\n/**\n * Rounds down to nearest number with one significant digit.\n *\n * Examples:\n * 1. 675 --> 600\n * 2. 0.567 --> 0.5\n * 3. -12 --> -20\n */\nexport function roundDown(num: number): number {\n const magnitude = Math.floor(Math.log10(Math.abs(num)));\n const firstDigit = Math.floor(num / Math.pow(10, magnitude));\n return Number((firstDigit * Math.pow(10, magnitude)).toPrecision(1));\n}\n"],"names":["OPTIMIZED_MODE_SERIES_LIMIT","getCommonTimeScale","DEFAULT_AREA_OPACITY","DEFAULT_CONNECT_NULLS","DEFAULT_LINE_WIDTH","DEFAULT_POINT_RADIUS","DEFAULT_Y_AXIS","POSITIVE_MIN_VALUE_MULTIPLIER","NEGATIVE_MIN_VALUE_MULTIPLIER","EMPTY_GRAPH_DATA","timeSeries","xAxis","legendItems","HIDE_DATAPOINTS_LIMIT","BLUR_FADEOUT_OPACITY","EXEMPLAR_SERIES_ID_PREFIX","EXEMPLAR_SYMBOL_SIZE","getCommonTimeScaleForQueries","queries","seriesData","map","query","data","getTimeSeries","id","datasetIndex","formattedName","visual","timeScale","paletteColor","querySettings","yAxisIndex","visibleSeriesCount","lineWidth","pointRadius","shouldStack","stack","undefined","areaOpacity","minuteMs","showPoints","rangeMs","display","series","type","name","color","label","show","connectNulls","sampling","progressiveThreshold","showSymbol","showAllSymbol","symbolSize","lineStyle","width","areaStyle","opacity","emphasis","focus","disabled","blur","getExemplarSeries","seriesId","seriesName","symbol","z","cursor","exemplars","exemplar","value","timestamp","negativeY","seriesLabels","getThresholdSeries","threshold","seriesIndex","datasetId","convertPercentThreshold","percent","max","min","percentDecimal","adjustedMax","findMax","adjustedMin","total","length","values","forEach","valueTuple","_","Math","abs","convertPanelYAxis","inputAxis","minValue","logBase","roundDown","yAxis","num","magnitude","floor","log10","firstDigit","pow","Number","toPrecision"],"mappings":"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"}
package/mf-manifest.json CHANGED
@@ -5,11 +5,11 @@
5
5
  "name": "TimeSeriesChart",
6
6
  "type": "app",
7
7
  "buildInfo": {
8
- "buildVersion": "0.14.0-beta.7",
8
+ "buildVersion": "0.14.0-beta.8",
9
9
  "buildName": "@perses-dev/timeseries-chart-plugin"
10
10
  },
11
11
  "remoteEntry": {
12
- "name": "__mf/js/TimeSeriesChart.e2219fd4.js",
12
+ "name": "__mf/js/TimeSeriesChart.aa6aa96b.js",
13
13
  "path": "",
14
14
  "type": "global"
15
15
  },
@@ -19,9 +19,9 @@
19
19
  "zip": "",
20
20
  "api": ""
21
21
  },
22
- "globalName": "TimeSeriesChart_0_14_0_beta_7",
23
- "pluginVersion": "2.6.0",
24
- "getPublicPath": "function() { const prefix = window.PERSES_PLUGIN_ASSETS_PATH || window.PERSES_APP_CONFIG?.api_prefix || \"\"; return prefix + \"/plugins/TimeSeriesChart~0.14.0-beta.7/\"; }"
22
+ "globalName": "TimeSeriesChart_0_14_0_beta_8",
23
+ "pluginVersion": "2.9.2",
24
+ "getPublicPath": "function() { const prefix = window.PERSES_PLUGIN_ASSETS_PATH || window.PERSES_APP_CONFIG?.api_prefix || \"\"; return prefix + \"/plugins/TimeSeriesChart~0.14.0-beta.8/\"; }"
25
25
  },
26
26
  "shared": [
27
27
  {
@@ -34,7 +34,7 @@
34
34
  "js": {
35
35
  "async": [],
36
36
  "sync": [
37
- "__mf/js/async/6274.de430473.js"
37
+ "__mf/js/async/6274.c6a9892d.js"
38
38
  ]
39
39
  },
40
40
  "css": {
@@ -54,8 +54,8 @@
54
54
  "js": {
55
55
  "async": [],
56
56
  "sync": [
57
- "__mf/js/async/1616.0201be33.js",
58
- "__mf/js/async/9235.6e9dbd11.js"
57
+ "__mf/js/async/1616.2ad408f8.js",
58
+ "__mf/js/async/9235.4831e488.js"
59
59
  ]
60
60
  },
61
61
  "css": {
@@ -75,8 +75,8 @@
75
75
  "js": {
76
76
  "async": [],
77
77
  "sync": [
78
- "__mf/js/async/5587.f79fd4b6.js",
79
- "__mf/js/async/7968.0fc6f62f.js"
78
+ "__mf/js/async/5587.bfa64ec3.js",
79
+ "__mf/js/async/7968.cf8a4d6a.js"
80
80
  ]
81
81
  },
82
82
  "css": {
@@ -89,14 +89,14 @@
89
89
  {
90
90
  "id": "TimeSeriesChart:@perses-dev/components",
91
91
  "name": "@perses-dev/components",
92
- "version": "0.55.0-beta.13",
92
+ "version": "0.55.0-beta.14",
93
93
  "singleton": true,
94
- "requiredVersion": "^0.55.0-beta.13",
94
+ "requiredVersion": "^0.55.0-beta.14",
95
95
  "assets": {
96
96
  "js": {
97
97
  "async": [],
98
98
  "sync": [
99
- "__mf/js/async/5394.b8a43124.js"
99
+ "__mf/js/async/5394.f1c40599.js"
100
100
  ]
101
101
  },
102
102
  "css": {
@@ -111,14 +111,14 @@
111
111
  {
112
112
  "id": "TimeSeriesChart:@perses-dev/dashboards",
113
113
  "name": "@perses-dev/dashboards",
114
- "version": "0.55.0-beta.13",
114
+ "version": "0.55.0-beta.14",
115
115
  "singleton": true,
116
- "requiredVersion": "^0.55.0-beta.13",
116
+ "requiredVersion": "^0.55.0-beta.14",
117
117
  "assets": {
118
118
  "js": {
119
119
  "async": [],
120
120
  "sync": [
121
- "__mf/js/async/3068.40e94d1b.js"
121
+ "__mf/js/async/3068.c95fecc7.js"
122
122
  ]
123
123
  },
124
124
  "css": {
@@ -131,14 +131,14 @@
131
131
  {
132
132
  "id": "TimeSeriesChart:@perses-dev/plugin-system",
133
133
  "name": "@perses-dev/plugin-system",
134
- "version": "0.55.0-beta.13",
134
+ "version": "0.55.0-beta.14",
135
135
  "singleton": true,
136
- "requiredVersion": "^0.55.0-beta.13",
136
+ "requiredVersion": "^0.55.0-beta.14",
137
137
  "assets": {
138
138
  "js": {
139
139
  "async": [],
140
140
  "sync": [
141
- "__mf/js/async/3542.49a3ec8e.js"
141
+ "__mf/js/async/3441.65e1728a.js"
142
142
  ]
143
143
  },
144
144
  "css": {
@@ -158,7 +158,7 @@
158
158
  "js": {
159
159
  "async": [],
160
160
  "sync": [
161
- "__mf/js/async/7192.40bdc52a.js"
161
+ "__mf/js/async/7192.f5f93b5e.js"
162
162
  ]
163
163
  },
164
164
  "css": {
@@ -178,7 +178,7 @@
178
178
  "js": {
179
179
  "async": [],
180
180
  "sync": [
181
- "__mf/js/async/873.04fb51e6.js"
181
+ "__mf/js/async/873.b41b449a.js"
182
182
  ]
183
183
  },
184
184
  "css": {
@@ -198,7 +198,7 @@
198
198
  "js": {
199
199
  "async": [],
200
200
  "sync": [
201
- "__mf/js/async/392.9e11af0e.js"
201
+ "__mf/js/async/392.11188127.js"
202
202
  ]
203
203
  },
204
204
  "css": {
@@ -218,7 +218,7 @@
218
218
  "js": {
219
219
  "async": [],
220
220
  "sync": [
221
- "__mf/js/async/8470.b8fae2bf.js"
221
+ "__mf/js/async/8470.f137ffe2.js"
222
222
  ]
223
223
  },
224
224
  "css": {
@@ -238,7 +238,7 @@
238
238
  "js": {
239
239
  "async": [],
240
240
  "sync": [
241
- "__mf/js/async/4121.bcbce5c8.js"
241
+ "__mf/js/async/4121.2a21582b.js"
242
242
  ]
243
243
  },
244
244
  "css": {
@@ -258,7 +258,7 @@
258
258
  "js": {
259
259
  "async": [],
260
260
  "sync": [
261
- "__mf/js/async/7978.304ff469.js"
261
+ "__mf/js/async/7978.67c99e22.js"
262
262
  ]
263
263
  },
264
264
  "css": {
@@ -277,26 +277,26 @@
277
277
  "assets": {
278
278
  "js": {
279
279
  "sync": [
280
- "__mf/js/async/7955.5c8d8ca0.js",
281
- "__mf/js/async/702.f83f9d6b.js",
282
- "__mf/js/async/5182.99021d7d.js",
283
- "__mf/js/async/7151.787a673e.js",
284
- "__mf/js/async/8724.69cc477a.js",
285
- "__mf/js/async/__federation_expose_TimeSeriesChart.dfd20d64.js"
280
+ "__mf/js/async/7955.877daa4d.js",
281
+ "__mf/js/async/2490.7e5650e7.js",
282
+ "__mf/js/async/5182.375bbf8e.js",
283
+ "__mf/js/async/7151.f8879976.js",
284
+ "__mf/js/async/8724.0d169bb2.js",
285
+ "__mf/js/async/__federation_expose_TimeSeriesChart.40d2d053.js"
286
286
  ],
287
287
  "async": [
288
- "__mf/js/async/4670.4afc93af.js",
289
- "__mf/js/async/7384.d87e02fe.js",
290
- "__mf/js/async/9588.523aa030.js",
291
- "__mf/js/async/5071.77adf1ef.js",
292
- "__mf/js/async/4134.605db9d2.js",
293
- "__mf/js/async/7491.0bfedc24.js",
294
- "__mf/js/async/lib-router.f2c27853.js",
295
- "__mf/js/async/8356.944b79cb.js",
296
- "__mf/js/async/7633.1948ca18.js",
297
- "__mf/js/async/4077.a04f22de.js",
298
- "__mf/js/async/4496.a1356301.js",
299
- "__mf/js/async/9700.cd6d1e06.js"
288
+ "__mf/js/async/4670.b5dafbaa.js",
289
+ "__mf/js/async/7384.4be917ee.js",
290
+ "__mf/js/async/9588.883e3395.js",
291
+ "__mf/js/async/5071.586de8fa.js",
292
+ "__mf/js/async/4134.9d3e6a8b.js",
293
+ "__mf/js/async/6625.e3624f20.js",
294
+ "__mf/js/async/lib-router.4f5ed027.js",
295
+ "__mf/js/async/8356.b7f7e7f3.js",
296
+ "__mf/js/async/7633.9cb6de7a.js",
297
+ "__mf/js/async/4077.cf1d675f.js",
298
+ "__mf/js/async/4496.eb53e477.js",
299
+ "__mf/js/async/9700.628e2532.js"
300
300
  ]
301
301
  },
302
302
  "css": {