diff --git a/barchart/package.json b/barchart/package.json index 2f4c43d9d..4a56f8194 100644 --- a/barchart/package.json +++ b/barchart/package.json @@ -29,7 +29,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", diff --git a/clickhouse/package.json b/clickhouse/package.json index a1a81d98a..87188e02b 100644 --- a/clickhouse/package.json +++ b/clickhouse/package.json @@ -21,9 +21,9 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/dashboards": "^0.53.1", + "@perses-dev/dashboards": "file:../../shared/dashboards", "@perses-dev/explore": "^0.53.1", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "@tanstack/react-query": "^4.39.1", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", diff --git a/datasourcevariable/package.json b/datasourcevariable/package.json index f4110d36a..e513124a4 100644 --- a/datasourcevariable/package.json +++ b/datasourcevariable/package.json @@ -29,7 +29,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", diff --git a/flamechart/package.json b/flamechart/package.json index 4d29a0a07..cdbe5ffd7 100644 --- a/flamechart/package.json +++ b/flamechart/package.json @@ -32,7 +32,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "@tanstack/react-table": "^8.20.5", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", diff --git a/gaugechart/package.json b/gaugechart/package.json index 9135487c9..5a2fa0a57 100644 --- a/gaugechart/package.json +++ b/gaugechart/package.json @@ -29,7 +29,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", diff --git a/heatmapchart/package.json b/heatmapchart/package.json index c8a879d9e..5505f97f1 100644 --- a/heatmapchart/package.json +++ b/heatmapchart/package.json @@ -26,7 +26,7 @@ "peerDependencies": { "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "echarts": "5.5.0", "lodash": "^4.17.21", "react": "^17.0.2 || ^18.0.0", diff --git a/histogramchart/package.json b/histogramchart/package.json index e977b6bd6..29221402d 100644 --- a/histogramchart/package.json +++ b/histogramchart/package.json @@ -26,7 +26,7 @@ "peerDependencies": { "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "echarts": "5.5.0", "lodash": "^4.17.21", "react": "^17.0.2 || ^18.0.0", diff --git a/logstable/package.json b/logstable/package.json index bd74ed857..0e4fcc42d 100644 --- a/logstable/package.json +++ b/logstable/package.json @@ -29,8 +29,8 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", - "@perses-dev/dashboards": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", + "@perses-dev/dashboards": "file:../../shared/dashboards", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", diff --git a/loki/package.json b/loki/package.json index e07f09955..e91b471a8 100644 --- a/loki/package.json +++ b/loki/package.json @@ -24,9 +24,9 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/dashboards": "^0.53.1", + "@perses-dev/dashboards": "file:../../shared/dashboards", "@perses-dev/explore": "^0.53.1", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "@tanstack/react-query": "^4.39.1", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", diff --git a/markdown/package.json b/markdown/package.json index c8d5fef28..f6b943e34 100644 --- a/markdown/package.json +++ b/markdown/package.json @@ -33,7 +33,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", diff --git a/package-lock.json b/package-lock.json index e48556576..7ce67d4ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,9 +38,9 @@ "@module-federation/rsbuild-plugin": "^0.21.6", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/dashboards": "^0.53.1", + "@perses-dev/dashboards": "file:../shared/dashboards", "@perses-dev/explore": "^0.53.1", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../shared/plugin-system", "@rsbuild/core": "^1.6.7", "@rsbuild/plugin-react": "^1.4.2", "@swc/cli": "^0.7.9", @@ -82,6 +82,66 @@ "react-dom": "^17.0.2 || ^18.0.0" } }, + "../shared/dashboards": { + "name": "@perses-dev/dashboards", + "version": "0.53.1", + "license": "Apache-2.0", + "dependencies": { + "@perses-dev/components": "0.53.1", + "@perses-dev/core": "0.53.0", + "@perses-dev/plugin-system": "0.53.1", + "@perses-dev/spec": "0.2.0-beta.1", + "@types/react-grid-layout": "^1.3.2", + "date-fns": "^4.1.0", + "immer": "^10.1.1", + "mdi-material-ui": "^7.9.2", + "react-grid-layout": "^1.3.4", + "react-hook-form": "^7.46.1", + "react-intersection-observer": "^9.4.0", + "use-immer": "^0.11.0", + "use-query-params": "^2.2.1", + "use-resize-observer": "^9.0.0", + "yaml": "^2.7.0", + "zustand": "^4.3.3" + }, + "devDependencies": { + "history": "^5.3.0", + "intersection-observer": "^0.12.2" + }, + "peerDependencies": { + "@mui/material": "^6.1.10", + "@tanstack/react-query": "^4.39.1", + "react": "^17.0.2 || ^18.0.0", + "react-dom": "^17.0.2 || ^18.0.0" + } + }, + "../shared/plugin-system": { + "name": "@perses-dev/plugin-system", + "version": "0.53.1", + "license": "Apache-2.0", + "dependencies": { + "@module-federation/enhanced": "^0.21.4", + "@perses-dev/components": "0.53.1", + "@perses-dev/core": "0.53.0", + "@perses-dev/spec": "0.2.0-beta.1", + "date-fns": "^4.1.0", + "date-fns-tz": "^3.2.0", + "immer": "^10.1.1", + "react-hook-form": "^7.46.1", + "use-immer": "^0.11.0", + "use-query-params": "^2.2.1", + "zod": "^3.25.76" + }, + "peerDependencies": { + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.1", + "@hookform/resolvers": "^3.2.0", + "@mui/material": "^6.1.10", + "@tanstack/react-query": "^4.39.1", + "react": "^17.0.2 || ^18.0.0", + "react-dom": "^17.0.2 || ^18.0.0" + } + }, "barchart": { "name": "@perses-dev/bar-chart-plugin", "version": "0.12.0", @@ -91,7 +151,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", @@ -111,9 +171,9 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/dashboards": "^0.53.1", + "@perses-dev/dashboards": "file:../../shared/dashboards", "@perses-dev/explore": "^0.53.1", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "@tanstack/react-query": "^4.39.1", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", @@ -135,7 +195,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", @@ -165,7 +225,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "@tanstack/react-table": "^8.20.5", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", @@ -186,7 +246,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", @@ -203,7 +263,7 @@ "peerDependencies": { "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "echarts": "5.5.0", "immer": "^10.1.1", "lodash": "^4.17.21", @@ -217,7 +277,7 @@ "peerDependencies": { "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "echarts": "5.5.0", "immer": "^10.1.1", "lodash": "^4.17.21", @@ -234,8 +294,8 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/dashboards": "^0.53.1", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/dashboards": "file:../../shared/dashboards", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", @@ -257,9 +317,9 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/dashboards": "^0.53.1", + "@perses-dev/dashboards": "file:../../shared/dashboards", "@perses-dev/explore": "^0.53.1", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "@tanstack/react-query": "^4.39.1", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", @@ -285,7 +345,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", @@ -1165,6 +1225,7 @@ "version": "1.7.1", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -1176,6 +1237,7 @@ "version": "1.7.1", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -1186,6 +1248,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -2532,7 +2595,7 @@ "version": "0.3.11", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -2607,6 +2670,7 @@ "version": "0.21.6", "resolved": "https://registry.npmjs.org/@module-federation/bridge-react-webpack-plugin/-/bridge-react-webpack-plugin-0.21.6.tgz", "integrity": "sha512-lJMmdhD4VKVkeg8RHb+Jwe6Ou9zKVgjtb1inEURDG/sSS2ksdZA8pVKLYbRPRbdmjr193Y8gJfqFbI2dqoyc/g==", + "dev": true, "license": "MIT", "dependencies": { "@module-federation/sdk": "0.21.6", @@ -2618,6 +2682,7 @@ "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2630,6 +2695,7 @@ "version": "0.21.6", "resolved": "https://registry.npmjs.org/@module-federation/cli/-/cli-0.21.6.tgz", "integrity": "sha512-qNojnlc8pTyKtK7ww3i/ujLrgWwgXqnD5DcDPsjADVIpu7STaoaVQ0G5GJ7WWS/ajXw6EyIAAGW/AMFh4XUxsQ==", + "dev": true, "license": "MIT", "dependencies": { "@module-federation/dts-plugin": "0.21.6", @@ -2649,6 +2715,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -2662,6 +2729,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "dev": true, "license": "MIT", "bin": { "jiti": "lib/jiti-cli.mjs" @@ -2671,6 +2739,7 @@ "version": "0.21.6", "resolved": "https://registry.npmjs.org/@module-federation/data-prefetch/-/data-prefetch-0.21.6.tgz", "integrity": "sha512-8HD7ZhtWZ9vl6i3wA7M8cEeCRdtvxt09SbMTfqIPm+5eb/V4ijb8zGTYSRhNDb5RCB+BAixaPiZOWKXJ63/rVw==", + "dev": true, "license": "MIT", "dependencies": { "@module-federation/runtime": "0.21.6", @@ -2686,6 +2755,7 @@ "version": "0.21.6", "resolved": "https://registry.npmjs.org/@module-federation/dts-plugin/-/dts-plugin-0.21.6.tgz", "integrity": "sha512-YIsDk8/7QZIWn0I1TAYULniMsbyi2LgKTi9OInzVmZkwMC6644x/ratTWBOUDbdY1Co+feNkoYeot1qIWv2L7w==", + "dev": true, "license": "MIT", "dependencies": { "@module-federation/error-codes": "0.21.6", @@ -2719,6 +2789,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -2732,6 +2803,7 @@ "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, "license": "MIT", "engines": { "node": ">=10.0.0" @@ -2753,6 +2825,7 @@ "version": "0.21.6", "resolved": "https://registry.npmjs.org/@module-federation/enhanced/-/enhanced-0.21.6.tgz", "integrity": "sha512-8PFQxtmXc6ukBC4CqGIoc96M2Ly9WVwCPu4Ffvt+K/SB6rGbeFeZoYAwREV1zGNMJ5v5ly6+AHIEOBxNuSnzSg==", + "dev": true, "license": "MIT", "dependencies": { "@module-federation/bridge-react-webpack-plugin": "0.21.6", @@ -2794,12 +2867,14 @@ "version": "0.21.6", "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.21.6.tgz", "integrity": "sha512-MLJUCQ05KnoVl8xd6xs9a5g2/8U+eWmVxg7xiBMeR0+7OjdWUbHwcwgVFatRIwSZvFgKHfWEiI7wsU1q1XbTRQ==", + "dev": true, "license": "MIT" }, "node_modules/@module-federation/inject-external-runtime-core-plugin": { "version": "0.21.6", "resolved": "https://registry.npmjs.org/@module-federation/inject-external-runtime-core-plugin/-/inject-external-runtime-core-plugin-0.21.6.tgz", "integrity": "sha512-DJQne7NQ988AVi3QB8byn12FkNb+C2lBeU1NRf8/WbL0gmHsr6kW8hiEJCm8LYaURwtsQqtsEV7i+8+51qjSmQ==", + "dev": true, "license": "MIT", "peerDependencies": { "@module-federation/runtime-tools": "0.21.6" @@ -2809,6 +2884,7 @@ "version": "0.21.6", "resolved": "https://registry.npmjs.org/@module-federation/managers/-/managers-0.21.6.tgz", "integrity": "sha512-BeV6m2/7kF5MDVz9JJI5T8h8lMosnXkH2bOxxFewcra7ZjvDOgQu7WIio0mgk5l1zjNPvnEVKhnhrenEdcCiWg==", + "dev": true, "license": "MIT", "dependencies": { "@module-federation/sdk": "0.21.6", @@ -2820,6 +2896,7 @@ "version": "0.21.6", "resolved": "https://registry.npmjs.org/@module-federation/manifest/-/manifest-0.21.6.tgz", "integrity": "sha512-yg93+I1qjRs5B5hOSvjbjmIoI2z3th8/yst9sfwvx4UDOG1acsE3HHMyPN0GdoIGwplC/KAnU5NmUz4tREUTGQ==", + "dev": true, "license": "MIT", "dependencies": { "@module-federation/dts-plugin": "0.21.6", @@ -2833,6 +2910,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -2926,6 +3004,7 @@ "version": "0.21.6", "resolved": "https://registry.npmjs.org/@module-federation/rspack/-/rspack-0.21.6.tgz", "integrity": "sha512-SB+z1P+Bqe3R6geZje9dp0xpspX6uash+zO77nodmUy8PTTBlkL7800Cq2FMLKUdoTZHJTBVXf0K6CqQWSlItg==", + "dev": true, "license": "MIT", "dependencies": { "@module-federation/bridge-react-webpack-plugin": "0.21.6", @@ -2955,6 +3034,7 @@ "version": "0.21.6", "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.21.6.tgz", "integrity": "sha512-+caXwaQqwTNh+CQqyb4mZmXq7iEemRDrTZQGD+zyeH454JAYnJ3s/3oDFizdH6245pk+NiqDyOOkHzzFQorKhQ==", + "dev": true, "license": "MIT", "dependencies": { "@module-federation/error-codes": "0.21.6", @@ -2966,6 +3046,7 @@ "version": "0.21.6", "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.21.6.tgz", "integrity": "sha512-5Hd1Y5qp5lU/aTiK66lidMlM/4ji2gr3EXAtJdreJzkY+bKcI5+21GRcliZ4RAkICmvdxQU5PHPL71XmNc7Lsw==", + "dev": true, "license": "MIT", "dependencies": { "@module-federation/error-codes": "0.21.6", @@ -2976,6 +3057,7 @@ "version": "0.21.6", "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.21.6.tgz", "integrity": "sha512-fnP+ZOZTFeBGiTAnxve+axGmiYn2D60h86nUISXjXClK3LUY1krUfPgf6MaD4YDJ4i51OGXZWPekeMe16pkd8Q==", + "dev": true, "license": "MIT", "dependencies": { "@module-federation/runtime": "0.21.6", @@ -2986,12 +3068,14 @@ "version": "0.21.6", "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.21.6.tgz", "integrity": "sha512-x6hARETb8iqHVhEsQBysuWpznNZViUh84qV2yE7AD+g7uIzHKiYdoWqj10posbo5XKf/147qgWDzKZoKoEP2dw==", + "dev": true, "license": "MIT" }, "node_modules/@module-federation/third-party-dts-extractor": { "version": "0.21.6", "resolved": "https://registry.npmjs.org/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.21.6.tgz", "integrity": "sha512-Il6x4hLsvCgZNk1DFwuMBNeoxD1BsZ5AW2BI/nUgu0k5FiAvfcz1OFawRFEHtaM/kVrCsymMOW7pCao90DaX3A==", + "dev": true, "license": "MIT", "dependencies": { "find-pkg": "2.0.0", @@ -3003,6 +3087,7 @@ "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", @@ -3020,6 +3105,7 @@ "version": "0.21.6", "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.21.6.tgz", "integrity": "sha512-7zIp3LrcWbhGuFDTUMLJ2FJvcwjlddqhWGxi/MW3ur1a+HaO8v5tF2nl+vElKmbG1DFLU/52l3PElVcWf/YcsQ==", + "dev": true, "license": "MIT", "dependencies": { "@module-federation/runtime": "0.21.6", @@ -3664,6 +3750,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz", "integrity": "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -3772,33 +3859,8 @@ } }, "node_modules/@perses-dev/dashboards": { - "version": "0.53.1", - "resolved": "https://registry.npmjs.org/@perses-dev/dashboards/-/dashboards-0.53.1.tgz", - "integrity": "sha512-JxbqWuSubJb8qm98Vb+dQHFPbZwg9Gh0mCBCJrcIzlz4u2tevPE+Jtmzig6+fPKscjQJ0tqL7GGc38bJlzrA7A==", - "license": "Apache-2.0", - "dependencies": { - "@perses-dev/components": "0.53.1", - "@perses-dev/core": "0.53.0", - "@perses-dev/plugin-system": "0.53.1", - "@types/react-grid-layout": "^1.3.2", - "date-fns": "^4.1.0", - "immer": "^10.1.1", - "mdi-material-ui": "^7.9.2", - "react-grid-layout": "^1.3.4", - "react-hook-form": "^7.46.1", - "react-intersection-observer": "^9.4.0", - "use-immer": "^0.11.0", - "use-query-params": "^2.2.1", - "use-resize-observer": "^9.0.0", - "yaml": "^2.7.0", - "zustand": "^4.3.3" - }, - "peerDependencies": { - "@mui/material": "^6.1.10", - "@tanstack/react-query": "^4.39.1", - "react": "^17.0.2 || ^18.0.0", - "react-dom": "^17.0.2 || ^18.0.0" - } + "resolved": "../shared/dashboards", + "link": true }, "node_modules/@perses-dev/datasource-variable-plugin": { "resolved": "datasourcevariable", @@ -3870,29 +3932,8 @@ "link": true }, "node_modules/@perses-dev/plugin-system": { - "version": "0.53.1", - "resolved": "https://registry.npmjs.org/@perses-dev/plugin-system/-/plugin-system-0.53.1.tgz", - "integrity": "sha512-woR+k+aJsWHSAfQFEov+unBt9Loqr8J5pNDAQ66EJD3H1UXVd30OqGNaMoJ9fNzZGLVzHn6rxfj1XNnX7DgUkw==", - "license": "Apache-2.0", - "dependencies": { - "@module-federation/enhanced": "^0.21.4", - "@perses-dev/components": "0.53.1", - "@perses-dev/core": "0.53.0", - "date-fns": "^4.1.0", - "date-fns-tz": "^3.2.0", - "immer": "^10.1.1", - "react-hook-form": "^7.46.1", - "use-immer": "^0.11.0", - "use-query-params": "^2.2.1", - "zod": "^3.22.2" - }, - "peerDependencies": { - "@hookform/resolvers": "^3.2.0", - "@mui/material": "^6.1.10", - "@tanstack/react-query": "^4.39.1", - "react": "^17.0.2 || ^18.0.0", - "react-dom": "^17.0.2 || ^18.0.0" - } + "resolved": "../shared/plugin-system", + "link": true }, "node_modules/@perses-dev/plugins-e2e": { "resolved": "e2e", @@ -3910,6 +3951,66 @@ "resolved": "scatterchart", "link": true }, + "node_modules/@perses-dev/spec": { + "version": "0.2.0-beta.0", + "resolved": "https://registry.npmjs.org/@perses-dev/spec/-/spec-0.2.0-beta.0.tgz", + "integrity": "sha512-9qT3ofOjBcO7okudC9Rz8t8ugNcTscYincvvmyFtZ/9oHrkDTiJPcRHLZYoCPE6r70OEj27JpvCqWCCil5yA1Q==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "date-fns": "^4.1.0", + "mathjs": "^15.1.1", + "zod": "^3.21.4" + } + }, + "node_modules/@perses-dev/spec/node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/@perses-dev/spec/node_modules/mathjs": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-15.2.0.tgz", + "integrity": "sha512-UAQzSVob9rNLdGpqcFMYmSu9dkuLYy7Lr2hBEQS5SHQdknA9VppJz3cy2KkpMzTODunad6V6cNv+5kOLsePLow==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.26.10", + "complex.js": "^2.2.5", + "decimal.js": "^10.4.3", + "escape-latex": "^1.2.0", + "fraction.js": "^5.2.1", + "javascript-natural-sort": "^0.7.1", + "seedrandom": "^3.0.5", + "tiny-emitter": "^2.1.0", + "typed-function": "^4.2.1" + }, + "bin": { + "mathjs": "bin/cli.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@perses-dev/spec/node_modules/typed-function": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.2.2.tgz", + "integrity": "sha512-VwaXim9Gp1bngi/q3do8hgttYn2uC3MoT/gfuMWylnj1IeZBUAyPddHZlo1K05BDoj8DYPpMdiHqH1dDYdJf2A==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 18" + } + }, "node_modules/@perses-dev/stat-chart-plugin": { "resolved": "statchart", "link": true @@ -4076,6 +4177,7 @@ "version": "1.6.4", "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.6.4.tgz", "integrity": "sha512-vUxc/zUdsCuyysOvP4CTdIYxsZPb2jIXST5vrLABiTPIaHpXZ0hVdgKif2XPJwJeuCVS6w25xvyPN0mBCU0MvQ==", + "dev": true, "license": "MIT", "optionalDependencies": { "@rspack/binding-darwin-arm64": "1.6.4", @@ -4097,6 +4199,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4110,6 +4213,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4123,6 +4227,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4136,6 +4241,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4149,6 +4255,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4162,6 +4269,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4175,6 +4283,7 @@ "cpu": [ "wasm32" ], + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -4188,6 +4297,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4201,6 +4311,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4214,6 +4325,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4224,6 +4336,7 @@ "version": "1.6.4", "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.6.4.tgz", "integrity": "sha512-5F1+MQD8rfbFbUHnaiZe4jqOu9pnSb+PliqQvi0lj+uvpMpcS3sJDIs/mz6P1u87lfkfBXChIT4zSLAzeOgMWw==", + "dev": true, "license": "MIT", "dependencies": { "@module-federation/runtime-tools": "0.21.4", @@ -4246,12 +4359,14 @@ "version": "0.21.4", "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.21.4.tgz", "integrity": "sha512-ClpL5MereWNXh+EgDjz7w4RrC1JlisQTvXDa1gLxpviHafzNDfdViVmuhi9xXVuj+EYo8KU70Y999KHhk9424Q==", + "dev": true, "license": "MIT" }, "node_modules/@rspack/core/node_modules/@module-federation/runtime": { "version": "0.21.4", "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.21.4.tgz", "integrity": "sha512-wgvGqryurVEvkicufJmTG0ZehynCeNLklv8kIk5BLIsWYSddZAE+xe4xov1kgH5fIJQAoQNkRauFFjVNlHoAkA==", + "dev": true, "license": "MIT", "dependencies": { "@module-federation/error-codes": "0.21.4", @@ -4263,6 +4378,7 @@ "version": "0.21.4", "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.21.4.tgz", "integrity": "sha512-SGpmoOLGNxZofpTOk6Lxb2ewaoz5wMi93AFYuuJB04HTVcngEK+baNeUZ2D/xewrqNIJoMY6f5maUjVfIIBPUA==", + "dev": true, "license": "MIT", "dependencies": { "@module-federation/error-codes": "0.21.4", @@ -4273,6 +4389,7 @@ "version": "0.21.4", "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.21.4.tgz", "integrity": "sha512-RzFKaL0DIjSmkn76KZRfzfB6dD07cvID84950jlNQgdyoQFUGkqD80L6rIpVCJTY/R7LzR3aQjHnoqmq4JPo3w==", + "dev": true, "license": "MIT", "dependencies": { "@module-federation/runtime": "0.21.4", @@ -4283,12 +4400,14 @@ "version": "0.21.4", "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.21.4.tgz", "integrity": "sha512-tzvhOh/oAfX++6zCDDxuvioHY4Jurf8vcfoCbKFxusjmyKr32GPbwFDazUP+OPhYCc3dvaa9oWU6X/qpUBLfJw==", + "dev": true, "license": "MIT" }, "node_modules/@rspack/core/node_modules/@module-federation/webpack-bundler-runtime": { "version": "0.21.4", "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.21.4.tgz", "integrity": "sha512-dusmR3uPnQh9u9ChQo3M+GLOuGFthfvnh7WitF/a1eoeTfRmXqnMFsXtZCUK+f/uXf+64874Zj/bhAgbBcVHZA==", + "dev": true, "license": "MIT", "dependencies": { "@module-federation/runtime": "0.21.4", @@ -4299,6 +4418,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rspack/lite-tapable/-/lite-tapable-1.1.0.tgz", "integrity": "sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==", + "dev": true, "license": "MIT" }, "node_modules/@rspack/plugin-react-refresh": { @@ -4646,7 +4766,7 @@ "version": "0.5.17", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", - "devOptional": true, + "dev": true, "dependencies": { "tslib": "^2.8.0" } @@ -4905,6 +5025,7 @@ "version": "0.10.1", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -5002,7 +5123,7 @@ "version": "9.6.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -5014,7 +5135,7 @@ "version": "3.7.7", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -5026,7 +5147,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true }, @@ -5167,6 +5288,7 @@ "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, "license": "MIT" }, "node_modules/@types/json5": { @@ -5194,7 +5316,7 @@ "version": "25.2.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.3.tgz", "integrity": "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "undici-types": "~7.16.0" @@ -5269,6 +5391,7 @@ "version": "7.5.8", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true, "license": "MIT" }, "node_modules/@types/send": { @@ -5590,7 +5713,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -5602,7 +5725,7 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true }, @@ -5610,7 +5733,7 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true }, @@ -5618,7 +5741,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true }, @@ -5626,7 +5749,7 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -5639,7 +5762,7 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true }, @@ -5647,7 +5770,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -5661,7 +5784,7 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -5672,7 +5795,7 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "peer": true, "dependencies": { @@ -5683,7 +5806,7 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true }, @@ -5691,7 +5814,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -5709,7 +5832,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -5724,7 +5847,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -5738,7 +5861,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -5754,7 +5877,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -5914,7 +6037,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "peer": true }, @@ -5922,7 +6045,7 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "peer": true }, @@ -5938,6 +6061,7 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, "license": "MIT", "dependencies": { "mime-types": "~2.1.34", @@ -5951,7 +6075,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "devOptional": true, + "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -5975,7 +6099,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "engines": { @@ -6012,6 +6136,7 @@ "version": "0.5.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=12.0" @@ -6051,6 +6176,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, "license": "MIT", "dependencies": { "ajv": "^8.0.0" @@ -6068,6 +6194,7 @@ "version": "8.18.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -6084,12 +6211,14 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, "license": "MIT" }, "node_modules/ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -6138,6 +6267,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -6393,12 +6523,14 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, "license": "MIT" }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, "license": "ISC", "engines": { "node": ">= 4.0.0" @@ -6434,6 +6566,7 @@ "version": "1.13.5", "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==", + "dev": true, "license": "MIT", "dependencies": { "follow-redirects": "^1.15.11", @@ -6637,7 +6770,7 @@ "version": "2.9.19", "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.js" @@ -6788,7 +6921,7 @@ "version": "4.28.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", - "devOptional": true, + "dev": true, "funding": [ { "type": "opencollective", @@ -6832,6 +6965,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "dev": true, "license": "(MIT OR Apache-2.0)", "bin": { "btoa": "bin/btoa.js" @@ -6877,7 +7011,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/bytes": { @@ -6987,7 +7121,7 @@ "version": "1.0.30001769", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz", "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==", - "devOptional": true, + "dev": true, "funding": [ { "type": "opencollective", @@ -7041,7 +7175,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "engines": { @@ -7132,6 +7266,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -7150,12 +7285,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" @@ -7168,6 +7305,7 @@ "version": "11.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=16" @@ -7237,6 +7375,7 @@ "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" @@ -7249,6 +7388,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -7282,6 +7422,7 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz", "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==", + "dev": true, "license": "MIT", "dependencies": { "depd": "~2.0.0", @@ -7369,6 +7510,7 @@ "version": "4.9.0", "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", + "dev": true, "license": "MIT", "dependencies": { "luxon": "^3.2.1" @@ -7542,6 +7684,7 @@ "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-3.2.0.tgz", "integrity": "sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ==", "license": "MIT", + "peer": true, "peerDependencies": { "date-fns": "^3.0.0 || ^4.0.0" } @@ -7550,6 +7693,7 @@ "version": "4.0.14", "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "dev": true, "license": "MIT", "engines": { "node": ">=4.0" @@ -7624,6 +7768,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", + "dev": true, "license": "MIT" }, "node_modules/deep-is": { @@ -7704,6 +7849,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.4.0" @@ -7713,12 +7859,14 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true, "license": "MIT" }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -7738,6 +7886,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8", @@ -7863,13 +8012,14 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, "license": "MIT" }, "node_modules/electron-to-chromium": { "version": "1.5.286", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/emittery": { @@ -7896,6 +8046,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -7928,7 +8079,7 @@ "version": "5.19.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -8087,7 +8238,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true }, @@ -8107,6 +8258,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -8194,7 +8346,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -8204,6 +8356,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, "license": "MIT" }, "node_modules/escape-latex": { @@ -8766,7 +8919,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "devOptional": true, + "dev": true, "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" @@ -8779,7 +8932,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "devOptional": true, + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -8809,7 +8962,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "engines": { @@ -8853,6 +9006,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "dev": true, "license": "MIT", "dependencies": { "homedir-polyfill": "^1.0.1" @@ -8970,6 +9124,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, "license": "MIT" }, "node_modules/fast-diff": { @@ -9039,6 +9194,7 @@ "version": "3.0.6", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true, "funding": [ { "type": "github", @@ -9210,6 +9366,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-2.0.1.tgz", "integrity": "sha512-qVdaUhYO39zmh28/JLQM5CoYN9byEOKEH4qfa8K1eNV17W0UUMJ9WgbR/hHFH+t5rcl+6RTb5UC7ck/I+uRkpQ==", + "dev": true, "license": "MIT", "dependencies": { "resolve-dir": "^1.0.1" @@ -9222,6 +9379,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-2.0.0.tgz", "integrity": "sha512-WgZ+nKbELDa6N3i/9nrHeNznm+lY3z4YfhDDWgW+5P0pdmMj26bxaxU11ookgY3NyP9GC7HvZ9etp0jRFqGEeQ==", + "dev": true, "license": "MIT", "dependencies": { "find-file-up": "^2.0.1" @@ -9288,12 +9446,14 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, "license": "ISC" }, "node_modules/follow-redirects": { "version": "1.15.11", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "dev": true, "funding": [ { "type": "individual", @@ -9330,6 +9490,7 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", @@ -9378,6 +9539,7 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -9387,6 +9549,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", @@ -9402,6 +9565,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 10.0.0" @@ -9619,7 +9783,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "devOptional": true, + "dev": true, "license": "BSD-2-Clause", "peer": true }, @@ -9651,6 +9815,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, "license": "MIT", "dependencies": { "global-prefix": "^1.0.1", @@ -9665,6 +9830,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "dev": true, "license": "MIT", "dependencies": { "expand-tilde": "^2.0.2", @@ -9681,6 +9847,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -9772,6 +9939,7 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, "license": "ISC" }, "node_modules/graphemer": { @@ -9798,6 +9966,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9848,6 +10017,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -9892,6 +10062,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, "license": "MIT", "dependencies": { "parse-passwd": "^1.0.0" @@ -9941,6 +10112,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", + "dev": true, "license": "MIT", "dependencies": { "deep-equal": "~1.0.1", @@ -9954,6 +10126,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -9963,6 +10136,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, "license": "MIT", "dependencies": { "depd": "~1.1.2", @@ -9979,6 +10153,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -9994,6 +10169,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, "license": "MIT", "dependencies": { "depd": "2.0.0", @@ -10182,12 +10358,14 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, "license": "ISC" }, "node_modules/inspect-with-kind": { @@ -10670,6 +10848,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -10686,12 +10865,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, "license": "ISC" }, "node_modules/isomorphic-ws": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", + "dev": true, "license": "MIT", "peerDependencies": { "ws": "*" @@ -11856,6 +12037,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "license": "MIT", "dependencies": { "universalify": "^2.0.0" @@ -11868,6 +12050,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 10.0.0" @@ -11894,6 +12077,7 @@ "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, "license": "MIT", "dependencies": { "tsscmp": "1.0.6" @@ -11935,6 +12119,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/koa/-/koa-3.0.3.tgz", "integrity": "sha512-MeuwbCoN1daWS32/Ni5qkzmrOtQO2qrnfdxDHjrm6s4b59yG4nexAJ0pTEFyzjLp0pBVO80CZp0vW8Ze30Ebow==", + "dev": true, "license": "MIT", "dependencies": { "accepts": "^1.3.8", @@ -11964,12 +12149,14 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", + "dev": true, "license": "MIT" }, "node_modules/koa/node_modules/media-typer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -11979,6 +12166,7 @@ "version": "1.54.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -11988,6 +12176,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dev": true, "license": "MIT", "dependencies": { "mime-db": "^1.54.0" @@ -12004,6 +12193,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "dev": true, "license": "MIT", "dependencies": { "content-type": "^1.0.5", @@ -12068,7 +12258,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "engines": { @@ -12105,6 +12295,7 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeepwith/-/lodash.clonedeepwith-4.5.0.tgz", "integrity": "sha512-QRBRSxhbtsX1nc0baxSkkK5WlVTTm/s48DSukcGcWZwIyI8Zz+lB+kFiELJXtzfH4Aj6kMWQ1VWW4U5uUDgZMA==", + "dev": true, "license": "MIT" }, "node_modules/lodash.merge": { @@ -12118,6 +12309,7 @@ "version": "6.9.1", "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "dev": true, "license": "Apache-2.0", "dependencies": { "date-format": "^4.0.14", @@ -12134,6 +12326,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", "integrity": "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==", + "dev": true, "license": "MIT" }, "node_modules/loose-envify": { @@ -12174,6 +12367,7 @@ "version": "3.5.0", "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==", + "devOptional": true, "license": "MIT", "engines": { "node": ">=12" @@ -12300,7 +12494,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/merge2": { @@ -12354,6 +12548,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -12363,6 +12558,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, "license": "MIT", "dependencies": { "mime-db": "1.52.0" @@ -12446,6 +12642,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -12455,7 +12652,7 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true }, @@ -12516,13 +12713,14 @@ "version": "2.0.27", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/node-schedule": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-2.1.1.tgz", "integrity": "sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==", + "dev": true, "license": "MIT", "dependencies": { "cron-parser": "^4.2.0", @@ -12743,6 +12941,7 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, "license": "MIT", "dependencies": { "ee-first": "1.1.1" @@ -12898,6 +13097,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -12920,6 +13120,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -13278,6 +13479,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, "license": "MIT" }, "node_modules/psl": { @@ -13385,6 +13587,7 @@ "version": "9.4.2", "resolved": "https://registry.npmjs.org/rambda/-/rambda-9.4.2.tgz", "integrity": "sha512-++euMfxnl7OgaEKwXh9QqThOjMeta2HH001N1v4mYQzBjJBnmXBh2BCK6dZAbICFVXOFUVD3xFG0R3ZPU0mxXw==", + "dev": true, "license": "MIT" }, "node_modules/range-parser": { @@ -13730,6 +13933,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -13807,6 +14011,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "dev": true, "license": "MIT", "dependencies": { "expand-tilde": "^2.0.0", @@ -13875,6 +14080,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, "license": "MIT" }, "node_modules/rimraf": { @@ -13981,6 +14187,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, "funding": [ { "type": "github", @@ -14066,6 +14273,7 @@ "version": "4.3.3", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "dev": true, "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", @@ -14085,6 +14293,7 @@ "version": "8.18.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -14101,6 +14310,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" @@ -14113,6 +14323,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, "license": "MIT" }, "node_modules/seedrandom": { @@ -14310,6 +14521,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, "license": "ISC" }, "node_modules/shebang-command": { @@ -14471,13 +14683,14 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz", "integrity": "sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==", + "dev": true, "license": "MIT" }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -14535,6 +14748,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -14544,6 +14758,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", + "dev": true, "license": "MIT", "dependencies": { "date-format": "^4.0.14", @@ -14558,6 +14773,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -14572,6 +14788,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" @@ -14581,6 +14798,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 4.0.0" @@ -14851,6 +15069,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -14899,7 +15118,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "engines": { @@ -14925,7 +15144,7 @@ "version": "5.46.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", - "devOptional": true, + "dev": true, "license": "BSD-2-Clause", "peer": true, "dependencies": { @@ -14945,7 +15164,7 @@ "version": "5.3.17", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.17.tgz", "integrity": "sha512-YR7PtUp6GMU91BgSJmlaX/rS2lGDbAF7D+Wtq7hRO+MiljNmodYvqslzCFiYVAgW+Qoaaia/QUIP4lGXufjdZw==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -14980,7 +15199,7 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -14996,7 +15215,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -15013,7 +15232,7 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true }, @@ -15021,7 +15240,7 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -15168,6 +15387,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.6" @@ -15325,13 +15545,14 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "devOptional": true, + "dev": true, "license": "0BSD" }, "node_modules/tsscmp": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.6.x" @@ -15599,6 +15820,7 @@ "version": "5.8.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -15653,7 +15875,7 @@ "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/universalify": { @@ -15680,6 +15902,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "dev": true, "license": "MIT", "engines": { "node": ">=4", @@ -15690,7 +15913,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", - "devOptional": true, + "dev": true, "funding": [ { "type": "opencollective", @@ -15829,6 +16052,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -15867,7 +16091,7 @@ "version": "2.5.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -15892,7 +16116,7 @@ "version": "5.105.1", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.1.tgz", "integrity": "sha512-Gdj3X74CLJJ8zy4URmK42W7wTZUJrqL+z8nyGEr4dTN0kb3nVs+ZvjbTOqRYPD7qX4tUmwyHL9Q9K6T1seW6Yw==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -15942,7 +16166,7 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "engines": { @@ -15953,7 +16177,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "devOptional": true, + "dev": true, "license": "BSD-2-Clause", "peer": true, "dependencies": { @@ -15968,7 +16192,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "devOptional": true, + "dev": true, "license": "BSD-2-Clause", "peer": true, "engines": { @@ -16183,6 +16407,7 @@ "version": "8.18.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "dev": true, "license": "MIT", "engines": { "node": ">=10.0.0" @@ -16234,18 +16459,6 @@ "dev": true, "license": "ISC" }, - "node_modules/yaml": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", - "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", @@ -16372,7 +16585,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", @@ -16402,9 +16615,10 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/dashboards": "^0.53.1", + "@perses-dev/dashboards": "file:../../shared/dashboards", "@perses-dev/explore": "^0.53.1", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", + "@perses-dev/spec": "^0.2.0-beta.0", "@tanstack/react-query": "^4.39.1", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", @@ -16431,9 +16645,9 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/dashboards": "^0.53.1", + "@perses-dev/dashboards": "file:../../shared/dashboards", "@perses-dev/explore": "^0.53.1", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "@tanstack/react-query": "^4.39.1", "@uiw/react-codemirror": "^4.19.1", "date-fns": "^4.1.0", @@ -16462,7 +16676,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", @@ -16487,7 +16701,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", @@ -16510,7 +16724,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", @@ -16529,7 +16743,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", @@ -16549,8 +16763,8 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/dashboards": "^0.53.1", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/dashboards": "file:../../shared/dashboards", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "@tanstack/react-table": "^8.20.5", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", @@ -16575,9 +16789,9 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/dashboards": "^0.53.1", + "@perses-dev/dashboards": "file:../../shared/dashboards", "@perses-dev/explore": "^0.53.1", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "@tanstack/react-query": "^4.39.1", "@uiw/react-codemirror": "^4.25.3", "date-fns": "^4.1.0", @@ -16603,7 +16817,9 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/dashboards": "file:../../shared/dashboards", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", + "@perses-dev/spec": "^0.2.0-beta.0", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", @@ -16623,8 +16839,8 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/dashboards": "^0.53.1", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/dashboards": "file:../../shared/dashboards", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", @@ -16649,7 +16865,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", @@ -16674,7 +16890,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", @@ -16696,9 +16912,9 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/dashboards": "^0.53.1", + "@perses-dev/dashboards": "file:../../shared/dashboards", "@perses-dev/explore": "^0.53.1", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "@tanstack/react-query": "^4.39.1", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", diff --git a/package.json b/package.json index 383e2c2ef..a40e975e1 100644 --- a/package.json +++ b/package.json @@ -46,9 +46,9 @@ "@module-federation/rsbuild-plugin": "^0.21.6", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/dashboards": "^0.53.1", + "@perses-dev/dashboards": "file:../shared/dashboards", "@perses-dev/explore": "^0.53.1", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../shared/plugin-system", "@rsbuild/core": "^1.6.7", "@rsbuild/plugin-react": "^1.4.2", "@swc/cli": "^0.7.9", diff --git a/piechart/package.json b/piechart/package.json index 2f906e37a..526f35827 100644 --- a/piechart/package.json +++ b/piechart/package.json @@ -29,7 +29,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", diff --git a/prometheus/package.json b/prometheus/package.json index 95a1be596..14d893ede 100644 --- a/prometheus/package.json +++ b/prometheus/package.json @@ -35,10 +35,11 @@ "@emotion/styled": "^11.6.0", "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", + "@perses-dev/spec": "^0.2.0-beta.0", "@perses-dev/core": "^0.53.0", - "@perses-dev/dashboards": "^0.53.1", + "@perses-dev/dashboards": "file:../../shared/dashboards", "@perses-dev/explore": "^0.53.1", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "@tanstack/react-query": "^4.39.1", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", @@ -116,6 +117,15 @@ }, "name": "PrometheusExplorer" } + }, + { + "kind": "Annotation", + "spec": { + "display": { + "name": "Prometheus Annotation" + }, + "name": "PrometheusPromQLAnnotation" + } } ] } diff --git a/prometheus/rsbuild.config.ts b/prometheus/rsbuild.config.ts index cdf2ae1a9..c4956cbb4 100644 --- a/prometheus/rsbuild.config.ts +++ b/prometheus/rsbuild.config.ts @@ -28,6 +28,7 @@ export default createConfigForPlugin({ './PrometheusLabelNamesVariable': './src/plugins/PrometheusLabelNamesVariable.tsx', './PrometheusPromQLVariable': './src/plugins/PrometheusPromQLVariable.tsx', './PrometheusExplorer': './src/explore/PrometheusExplorer.tsx', + './PrometheusPromQLAnnotation': './src/annotations/PrometheusPromQLAnnotation.tsx', }, shared: { react: { requiredVersion: '18.2.0', singleton: true }, diff --git a/prometheus/schemas/prometheus-promql-annotation/prometheus-promql-annotation.cue b/prometheus/schemas/prometheus-promql-annotation/prometheus-promql-annotation.cue new file mode 100644 index 000000000..2e181e9d4 --- /dev/null +++ b/prometheus/schemas/prometheus-promql-annotation/prometheus-promql-annotation.cue @@ -0,0 +1,28 @@ +// Copyright The Perses Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package model + +import ( + "strings" + promDs "github.com/perses/plugins/prometheus/schemas/datasource:model" +) + +kind: "PrometheusPromQLAnnotation" +spec: close({ + promDs.#selector + expr: strings.MinRunes(1) + title?: string + legend?: string + tags?: [string] +}) diff --git a/prometheus/src/annotations/PrometheusPromQLAnnotation.tsx b/prometheus/src/annotations/PrometheusPromQLAnnotation.tsx new file mode 100644 index 000000000..7b641253a --- /dev/null +++ b/prometheus/src/annotations/PrometheusPromQLAnnotation.tsx @@ -0,0 +1,16 @@ +import { AnnotationPlugin, AnnotationQueryQueryPluginDependencies, parseVariables } from '@perses-dev/plugin-system'; +import { PrometheusPromQLAnnotationOptions } from '../plugins'; +import { PrometheusPromQLAnnotationOptionEditor } from './PrometheusPromQLAnnotationOptionEditor'; +import { getAnnotationData } from './get-annotation-data'; + +export const PrometheusPromQLAnnotation: AnnotationPlugin = { + getAnnotationData: getAnnotationData, + dependsOn: (spec: PrometheusPromQLAnnotationOptions): AnnotationQueryQueryPluginDependencies => { + const queryVariables = parseVariables(spec.expr); + return { + variables: [...queryVariables], + }; + }, + OptionsEditorComponent: PrometheusPromQLAnnotationOptionEditor, + createInitialOptions: () => ({ expr: '' }), +}; diff --git a/prometheus/src/annotations/PrometheusPromQLAnnotationOptionEditor.tsx b/prometheus/src/annotations/PrometheusPromQLAnnotationOptionEditor.tsx new file mode 100644 index 000000000..da208ff26 --- /dev/null +++ b/prometheus/src/annotations/PrometheusPromQLAnnotationOptionEditor.tsx @@ -0,0 +1,168 @@ +import { ReactElement } from 'react'; +import { useId } from '@perses-dev/components'; +import { produce } from 'immer'; +import { Autocomplete, Chip, FormControl, Stack, TextField } from '@mui/material'; +import { + DatasourceSelect, + DatasourceSelectProps, + DatasourceSelectValue, + OptionsEditorProps, + useDatasourceClient, + useDatasourceSelectValueToSelector, +} from '@perses-dev/plugin-system'; +import { + DEFAULT_PROM, + isDefaultPromSelector, + isPrometheusDatasourceSelector, + PROM_DATASOURCE_KIND, + PrometheusClient, + PrometheusDatasourceSelector, +} from '../model'; + +import { PromQLEditor } from '../components'; + +export interface PrometheusAnnotationsQuerySpec { + expr: string; + datasource?: DatasourceSelectValue; + title?: string; + legend?: string; + tags?: string[]; +} + +export type PrometheusAnnotationsQueryEditorProps = OptionsEditorProps; + +export function PrometheusPromQLAnnotationOptionEditor(props: PrometheusAnnotationsQueryEditorProps): ReactElement { + const { + onChange, + value, + value: { expr, datasource, title, legend, tags }, + isReadonly, + } = props; + + const datasourceSelectValue = datasource ?? DEFAULT_PROM; + + const datasourceSelectLabelID = useId('prom-datasource-label'); // for panels with multiple queries, this component is rendered multiple times on the same page + + const selectedDatasource = useDatasourceSelectValueToSelector( + datasourceSelectValue, + PROM_DATASOURCE_KIND + ) as PrometheusDatasourceSelector; + + const { data: client } = useDatasourceClient(selectedDatasource); + const promURL = client?.options.datasourceUrl; + + const handleDatasourceChange: DatasourceSelectProps['onChange'] = (next) => { + if (isPrometheusDatasourceSelector(next)) { + /* Good to know: The usage of onchange here causes an immediate spec update which eventually updates the panel + This was probably intentional to allow for quick switching between datasources. + Could have been triggered only with Run Query button as well. + */ + onChange( + produce(value, (draft) => { + // If they're using the default, just omit the datasource prop (i.e. set to undefined) + const nextDatasource = isDefaultPromSelector(next) ? undefined : next; + draft.datasource = nextDatasource; + }) + ); + return; + } + + throw new Error('Got unexpected non-Prometheus datasource selector'); + }; + + const handleExprChange = (next: string): void => { + onChange( + produce(value, (draft) => { + draft.expr = next; + }) + ); + }; + + const handleTitleChange = (next: string): void => { + onChange( + produce(value, (draft) => { + draft.title = next || undefined; + }) + ); + }; + + const handleLegendChange = (next: string): void => { + onChange( + produce(value, (draft) => { + draft.legend = next || undefined; + }) + ); + }; + + const handleTagsChange = (next: string[]): void => { + onChange( + produce(value, (draft) => { + draft.tags = next.length > 0 ? next : undefined; + }) + ); + }; + + return ( + + + + + + handleTitleChange(e.target.value)} + slotProps={{ + inputLabel: { shrink: isReadonly ? true : undefined }, + input: { readOnly: isReadonly }, + }} + /> + handleLegendChange(e.target.value)} + slotProps={{ + inputLabel: { shrink: isReadonly ? true : undefined }, + input: { readOnly: isReadonly }, + }} + /> + handleTagsChange(next as string[])} + readOnly={isReadonly} + renderInput={(params) => ( + + )} + /> + + ); +} diff --git a/prometheus/src/annotations/get-annotation-data.ts b/prometheus/src/annotations/get-annotation-data.ts new file mode 100644 index 000000000..14cf8b131 --- /dev/null +++ b/prometheus/src/annotations/get-annotation-data.ts @@ -0,0 +1,97 @@ +import { AnnotationData } from '@perses-dev/spec'; +import { AnnotationContext, datasourceSelectValueToSelector, replaceVariables } from '@perses-dev/plugin-system'; +import { DatasourceSpec, parseDurationString } from '@perses-dev/core'; +import { milliseconds } from 'date-fns'; +import { DEFAULT_SCRAPE_INTERVAL, PrometheusDatasourceSpec, PrometheusPromQLAnnotationOptions } from '../plugins'; +import { DEFAULT_PROM, getPrometheusTimeRange, getRangeStep, PROM_DATASOURCE_KIND, PrometheusClient } from '../model'; +import { formatSeriesName } from '../utils'; + +export const getAnnotationData = async ( + spec: PrometheusPromQLAnnotationOptions, + context: AnnotationContext, + abortSignal?: AbortSignal +): Promise => { + if (!spec.expr) { + return []; + } + + const listDatasourceSelectItems = await context.datasourceStore.listDatasourceSelectItems(PROM_DATASOURCE_KIND); + + const datasourceSelector = + datasourceSelectValueToSelector( + spec.datasource ?? DEFAULT_PROM, + context.variableState, + listDatasourceSelectItems + ) ?? DEFAULT_PROM; + + const client: PrometheusClient = await context.datasourceStore.getDatasourceClient(datasourceSelector); + + const datasource = (await context.datasourceStore.getDatasource( + datasourceSelector + )) as DatasourceSpec; + + const datasourceScrapeInterval = Math.trunc( + milliseconds(parseDurationString(datasource.plugin.spec.scrapeInterval ?? DEFAULT_SCRAPE_INTERVAL)) / 1000 + ); + + const timeRange = getPrometheusTimeRange(context.absoluteTimeRange); + + const step = getRangeStep(timeRange, datasourceScrapeInterval); + + const utcOffsetSec = new Date().getTimezoneOffset() * 60; + + const alignedStart = Math.floor((timeRange.start + utcOffsetSec) / step) * step - utcOffsetSec; + let alignedEnd = Math.floor((timeRange.end + utcOffsetSec) / step) * step - utcOffsetSec; + + /* Ensure end is always greater than start: + If the step is greater than equal to the diff of end and start, + both start, and end will eventually be rounded to the same value, + Consequently, the time range will be zero, which does not return any valid value + */ + if (alignedStart === alignedEnd) { + alignedEnd = alignedStart + step; + console.warn(`Step (${step}) was larger than the time range! end of time range was set accordingly.`); + } + + const { data } = await client.rangeQuery( + { + query: replaceVariables(spec.expr, context.variableState), + start: alignedStart, + end: alignedEnd, + step: step, + }, + undefined, + abortSignal + ); + + const result: AnnotationData[] = []; + for (const series of data?.result ?? []) { + const start = series.values[0]?.[0]; + const end = series.values[series.values.length - 1]?.[0]; + + if (start !== undefined && end !== undefined) { + const labels = series.metric ?? {}; + const title = spec.title ? formatSeriesName(spec.title, labels) : undefined; + const legend = spec.legend ? formatSeriesName(spec.legend, labels) : undefined; + // If spec.tags is provided, only expose the selected label names as tags. + // Otherwise, expose all labels. + const tags = + spec.tags && spec.tags.length > 0 + ? spec.tags.reduce>((acc, name) => { + const v = labels[name]; + if (v !== undefined) acc[name] = v; + return acc; + }, {}) + : labels; + result.push({ + start: start * 1000, + end: end * 1000, + title: title, + legend: legend, + tags: tags, + }); + } + } + + return result; +}; diff --git a/prometheus/src/annotations/index.ts b/prometheus/src/annotations/index.ts new file mode 100644 index 000000000..ed674aa35 --- /dev/null +++ b/prometheus/src/annotations/index.ts @@ -0,0 +1,14 @@ +// Copyright The Perses Authors +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +export * from './PrometheusPromQLAnnotation'; diff --git a/prometheus/src/index.ts b/prometheus/src/index.ts index 1832fbac9..8cfe439ff 100644 --- a/prometheus/src/index.ts +++ b/prometheus/src/index.ts @@ -11,6 +11,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +export * from './annotations'; export * from './components'; export * from './explore'; export { getPluginModule } from './getPluginModule'; diff --git a/prometheus/src/plugins/types.ts b/prometheus/src/plugins/types.ts index b7c91693c..d1596618d 100644 --- a/prometheus/src/plugins/types.ts +++ b/prometheus/src/plugins/types.ts @@ -44,3 +44,11 @@ export type PrometheusPromQLVariableOptions = PrometheusVariableOptionsBase & { // Note: This field is not part of the Prometheus API. labelName: string; }; + +export interface PrometheusPromQLAnnotationOptions { + datasource?: DatasourceSelectValue; + expr: string; + title?: string; + legend?: string; + tags?: string[]; +} diff --git a/pyroscope/package.json b/pyroscope/package.json index 6ea8c7d61..251d8f436 100644 --- a/pyroscope/package.json +++ b/pyroscope/package.json @@ -33,8 +33,8 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/dashboards": "^0.53.1", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/dashboards": "file:../../shared/dashboards", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "@perses-dev/explore": "^0.53.1", "@tanstack/react-query": "^4.39.1", "@uiw/react-codemirror": "^4.19.1", diff --git a/scatterchart/package.json b/scatterchart/package.json index 2f2e9c968..5dd9a97f7 100644 --- a/scatterchart/package.json +++ b/scatterchart/package.json @@ -32,7 +32,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", diff --git a/statchart/package.json b/statchart/package.json index ff92864e1..768e1e646 100644 --- a/statchart/package.json +++ b/statchart/package.json @@ -29,7 +29,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", diff --git a/staticlistvariable/package.json b/staticlistvariable/package.json index a5ce07467..75c7e6b86 100644 --- a/staticlistvariable/package.json +++ b/staticlistvariable/package.json @@ -32,7 +32,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", diff --git a/statushistorychart/package.json b/statushistorychart/package.json index 6eb5ae2f1..c3e10075d 100644 --- a/statushistorychart/package.json +++ b/statushistorychart/package.json @@ -29,7 +29,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", diff --git a/table/package.json b/table/package.json index 6554262e5..c9095e56c 100644 --- a/table/package.json +++ b/table/package.json @@ -29,8 +29,8 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", - "@perses-dev/dashboards": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", + "@perses-dev/dashboards": "file:../../shared/dashboards", "@tanstack/react-table": "^8.20.5", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", diff --git a/tempo/package.json b/tempo/package.json index 9c3fde304..62aa4830e 100644 --- a/tempo/package.json +++ b/tempo/package.json @@ -34,9 +34,9 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/dashboards": "^0.53.1", + "@perses-dev/dashboards": "file:../../shared/dashboards", "@perses-dev/explore": "^0.53.1", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "@tanstack/react-query": "^4.39.1", "@uiw/react-codemirror": "^4.25.3", "date-fns": "^4.1.0", diff --git a/timeserieschart/package.json b/timeserieschart/package.json index e74c1943d..a644d9cc0 100644 --- a/timeserieschart/package.json +++ b/timeserieschart/package.json @@ -30,9 +30,11 @@ "@emotion/react": "^11.7.1", "@emotion/styled": "^11.6.0", "@hookform/resolvers": "^3.2.0", + "@perses-dev/spec": "^0.2.0-beta.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", + "@perses-dev/dashboards": "file:../../shared/dashboards", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", diff --git a/timeserieschart/rsbuild.config.ts b/timeserieschart/rsbuild.config.ts index 6eb1d36ae..af5637e6c 100644 --- a/timeserieschart/rsbuild.config.ts +++ b/timeserieschart/rsbuild.config.ts @@ -33,6 +33,7 @@ export default createConfigForPlugin({ lodash: { singleton: true }, '@perses-dev/components': { singleton: true }, '@perses-dev/plugin-system': { singleton: true }, + '@perses-dev/dashboards': { singleton: true }, '@emotion/react': { requiredVersion: '^11.11.3', singleton: true }, '@emotion/styled': { singleton: true }, '@hookform/resolvers': { singleton: true }, diff --git a/timeserieschart/src/TimeSeriesChartBase.tsx b/timeserieschart/src/TimeSeriesChartBase.tsx index 6702d597e..b1d6f9491 100644 --- a/timeserieschart/src/TimeSeriesChartBase.tsx +++ b/timeserieschart/src/TimeSeriesChartBase.tsx @@ -60,6 +60,8 @@ import { } from '@perses-dev/components'; import { DatasetOption } from 'echarts/types/dist/shared'; import { createTimezoneAwareAxisFormatter } from './utils/timezone-formatter'; +import { TimeSeriesAnnotation } from './utils/annotation'; +import { AnnotationTooltip, buildAnnotationSeries } from './annotations/AnnotationTooltip'; use([ EChartsLineChart, @@ -80,6 +82,7 @@ export interface TimeChartProps { height: number; data: TimeSeries[]; seriesMapping: TimeChartSeriesMapping; + annotations?: TimeSeriesAnnotation[]; timeScale?: TimeScale; yAxis?: YAXisComponentOption | YAXisComponentOption[]; format?: FormatOptions; @@ -102,6 +105,7 @@ export const TimeSeriesChartBase = forwardRef(fun height, data, seriesMapping, + annotations, timeScale: timeScaleProp, yAxis, format, @@ -126,7 +130,10 @@ export const TimeSeriesChartBase = forwardRef(fun const [pinnedCrosshair, setPinnedCrosshair] = useState(null); const [isDragging, setIsDragging] = useState(false); const [startX, setStartX] = useState(0); - const { timeZone } = useTimeZone(); + const [hoveredAnnotation, setHoveredAnnotation] = useState(null); + const [pinnedAnnotation, setPinnedAnnotation] = useState(null); + const [pinnedAnnotationPos, setPinnedAnnotationPos] = useState(null); + const { timeZone, formatWithUserTimeZone } = useTimeZone(); const getTimezoneAwareAxisFormatter = useCallback( (rangeMs: number): ((value: number) => string) => createTimezoneAwareAxisFormatter(rangeMs, timeZone), @@ -196,8 +203,45 @@ export const TimeSeriesChartBase = forwardRef(fun enableDataZoom(chartRef.current); } }, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + mouseover: (params: any): void => { + // Only markPoint (triangles under the X-axis) opens the annotation tooltip. + // Hovering markLine or anything else keeps the regular TimeSeries tooltip visible + // and clears any stale hovered annotation (mouseout is sometimes missed by ECharts). + if (annotations && params.componentType === 'markPoint' && params.data?.annotationIndex !== undefined) { + const matchedAnnotation = annotations[params.data.annotationIndex] || null; + if (matchedAnnotation) { + setHoveredAnnotation(matchedAnnotation); + return; + } + } + setHoveredAnnotation(null); + }, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + mouseout: (params: any): void => { + if ( + annotations && + params.componentType === 'markPoint' && + params.data?.annotationIndex !== undefined && + annotations + ) { + // Only clear if the mouseout corresponds to the currently hovered annotation, so that + // a quick move from one markPoint to another isn't cancelled by a late mouseout event. + const leaving = annotations[params.data.annotationIndex] || null; + setHoveredAnnotation((current) => (current === leaving ? null : current)); + } + }, + globalout: (): void => { + if (annotations) { + // Cursor left the chart canvas — guarantee the annotation tooltip is dismissed. + setHoveredAnnotation(null); + } + }, }; - }, [onDataZoom, setTooltipPinnedCoords]); + }, [annotations, onDataZoom]); + + // Generate annotation series for ECharts markArea (range), markLine (point), and markPoint (markers under X-axis) + const annotationSeries = useMemo(() => buildAnnotationSeries(annotations), [annotations]); const { noDataOption } = chartsTheme; @@ -218,7 +262,9 @@ export const TimeSeriesChartBase = forwardRef(fun }); const updatedSeriesMapping = - enablePinning && pinnedCrosshair !== null ? [...seriesMapping, pinnedCrosshair] : seriesMapping; + enablePinning && pinnedCrosshair !== null + ? [...seriesMapping, pinnedCrosshair, ...annotationSeries] + : [...seriesMapping, ...annotationSeries]; const option: EChartsCoreOption = { dataset: dataset, @@ -273,6 +319,7 @@ export const TimeSeriesChartBase = forwardRef(fun }, [ data, seriesMapping, + annotationSeries, timeScale, yAxis, format, @@ -311,6 +358,26 @@ export const TimeSeriesChartBase = forwardRef(fun // e.preventDefault(); // Prevent the default behaviour when right clicked // }} onClick={(e) => { + // If clicking while hovering an annotation, toggle the annotation tooltip pin + // instead of pinning the TimeChartTooltip, so pinned TimeChartTooltip is preserved. + if (hoveredAnnotation !== null && e.target instanceof HTMLCanvasElement) { + const pinnedPos: CursorCoordinates = { + page: { x: e.pageX, y: e.pageY }, + client: { x: e.clientX, y: e.clientY }, + plotCanvas: { x: e.nativeEvent.offsetX, y: e.nativeEvent.offsetY }, + target: e.target, + }; + setPinnedAnnotation((current) => { + if (current === hoveredAnnotation) { + setPinnedAnnotationPos(null); + return null; + } + setPinnedAnnotationPos(pinnedPos); + return hoveredAnnotation; + }); + return; + } + // Allows user to opt-in to multi tooltip pinning when Ctrl or Cmd key held down const isControlKeyPressed = e.ctrlKey || e.metaKey; if (isControlKeyPressed) { @@ -410,6 +477,8 @@ export const TimeSeriesChartBase = forwardRef(fun if (tooltipPinnedCoords === null) { setShowTooltip(false); } + // Defensive: clear hovered annotation in case ECharts missed a mouseout event. + setHoveredAnnotation(null); if (chartRef.current !== undefined) { clearHighlightedSeries(chartRef.current); } @@ -432,8 +501,10 @@ export const TimeSeriesChartBase = forwardRef(fun } }} > - {/* Allows overrides prop to hide custom tooltip and use the ECharts option.tooltip instead */} + {/* Allows overrides prop to hide custom tooltip and use the ECharts option.tooltip instead. + Keep the time chart tooltip visible when pinned even if user hovers an annotation. */} {showTooltip === true && + (tooltipPinnedCoords !== null || hoveredAnnotation === null) && (option.tooltip as TooltipComponentOption)?.showContent === false && tooltipConfig.hidden !== true && ( (fun }} /> )} + {/* Pinned annotation takes priority over hovered. */} + {(pinnedAnnotation ?? hoveredAnnotation) && ( + { + setPinnedAnnotation(null); + setPinnedAnnotationPos(null); + }} + /> + )} ; @@ -158,6 +160,13 @@ export function TimeSeriesChartPanel(props: TimeSeriesChartProps): ReactElement const { setTimeRange } = useTimeRange(); + const annotationsWithData = useAnnotationsWithData(); + + const annotations: TimeSeriesAnnotation[] = useMemo( + () => convertAnnotationToTimeSeriesAnnotation(annotationsWithData), + [annotationsWithData] + ); + // Populate series data based on query results const { timeScale, @@ -498,6 +507,7 @@ export function TimeSeriesChartPanel(props: TimeSeriesChartProps): ReactElement height={height} data={timeChartData} seriesMapping={timeSeriesMapping} + annotations={annotations} timeScale={timeScale} yAxis={multipleYAxes ?? echartsYAxis} format={format} diff --git a/timeserieschart/src/annotations/AnnotationTooltip.tsx b/timeserieschart/src/annotations/AnnotationTooltip.tsx new file mode 100644 index 000000000..495dd6069 --- /dev/null +++ b/timeserieschart/src/annotations/AnnotationTooltip.tsx @@ -0,0 +1,300 @@ +// Copyright The Perses Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Box, Divider, Portal, Stack, Typography } from '@mui/material'; +import Pin from 'mdi-material-ui/Pin'; +import PinOutline from 'mdi-material-ui/PinOutline'; +import useResizeObserver from 'use-resize-observer'; +import type { LineSeriesOption } from 'echarts'; +import { + assembleTransform, + CursorCoordinates, + getTooltipStyles, + PIN_TOOLTIP_HELP_TEXT, + TOOLTIP_BG_COLOR_FALLBACK, + TOOLTIP_MAX_WIDTH, + UNPIN_TOOLTIP_HELP_TEXT, + useMousePosition, +} from '@perses-dev/components'; +import { TimeSeriesAnnotation } from '../utils/annotation'; + +export interface AnnotationTooltipProps { + annotation: TimeSeriesAnnotation; + containerId?: string; + formatWithUserTimeZone: (date: Date, formatString: string) => string; + pinnedPos: CursorCoordinates | null; + enablePinning?: boolean; + onUnpinClick?: () => void; +} + +export function AnnotationTooltip({ + annotation, + containerId, + formatWithUserTimeZone, + pinnedPos, + enablePinning = true, + onUnpinClick, +}: AnnotationTooltipProps): JSX.Element | null { + const mousePos = useMousePosition(); + const { height, width, ref: tooltipRef } = useResizeObserver(); + + const isPinned = pinnedPos !== null; + if (!isPinned && mousePos === null) return null; + + const containerElement = containerId ? document.querySelector(containerId) : undefined; + const maxHeight = containerElement ? containerElement.getBoundingClientRect().height : undefined; + const transform = assembleTransform(mousePos, pinnedPos, height ?? 0, width ?? 0, containerElement); + + const formatDate = (timeMs: number): { date: string; time: string } => { + const d = new Date(timeMs); + return { + date: formatWithUserTimeZone(d, 'MMM dd, yyyy'), + time: formatWithUserTimeZone(d, 'HH:mm:ss'), + }; + }; + + const start = formatDate(annotation.start); + const end = annotation.end !== undefined ? formatDate(annotation.end) : null; + + return ( + + getTooltipStyles(theme, pinnedPos, maxHeight)} style={{ transform }}> + + ({ + width: '100%', + maxWidth: TOOLTIP_MAX_WIDTH, + padding: theme.spacing(1.5, 2, 0.5, 2), + backgroundColor: theme.palette.designSystem?.grey[800] ?? TOOLTIP_BG_COLOR_FALLBACK, + position: 'sticky', + top: 0, + left: 0, + })} + > + + + + + {start.date} - {start.time} + + {end && ( + <> + {' → '} + + {end.date} - {end.time} + + + )} + + {enablePinning && ( + + + {isPinned ? UNPIN_TOOLTIP_HELP_TEXT : PIN_TOOLTIP_HELP_TEXT} + + {isPinned ? ( + { + if (onUnpinClick !== undefined) onUnpinClick(); + }} + sx={{ fontSize: 16, cursor: 'pointer' }} + /> + ) : ( + + )} + + )} + + ({ width: '100%', borderColor: theme.palette.grey['500'] })} /> + + ({ padding: theme.spacing(0.5, 2, 1.5, 2) })}> + {annotation.title && ( + + {annotation.title} + + )} + {annotation.legend && ( + + {annotation.legend} + + )} + {annotation.tags && Object.keys(annotation.tags).length > 0 && ( + + {Object.entries(annotation.tags).map(([key, value]) => ( + ({ + backgroundColor: theme.palette.grey['700'], + borderRadius: '4px', + padding: '2px 6px', + fontSize: '0.7rem', + fontFamily: 'monospace', + })} + > + {key}: {value} + + ))} + + )} + + + + + ); +} + +/** + * Build ECharts series options for rendering annotations as markArea (range), + * markLine (vertical dashed lines) and markPoint (triangle markers under the X-axis). + */ +export function buildAnnotationSeries(annotations: TimeSeriesAnnotation[] | undefined): LineSeriesOption[] { + if (!annotations || annotations.length === 0) return []; + + const markAreaData: Array<[{ xAxis: number; itemStyle?: { color: string; opacity: number } }, { xAxis: number }]> = + []; + const markLineData: Array<{ + xAxis: number; + lineStyle?: { color: string; width: number; type: 'dashed' | 'solid' | 'dotted' }; + label?: { show: boolean }; + annotationIndex?: number; + }> = []; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const markPointData: any[] = []; + + annotations.forEach((annotation, index) => { + const color = annotation.color ?? '#FF6B6B'; + const opacity = 0.3; + + if (annotation.end !== undefined) { + // Range annotation - use markArea and markLine (silent) + markers at start/end + markLineData.push({ + xAxis: annotation.start, + lineStyle: { color, width: 2, type: 'dashed' as const }, + label: { show: false }, + annotationIndex: index, + }); + + markLineData.push({ + xAxis: annotation.end, + lineStyle: { color, width: 2, type: 'dashed' as const }, + label: { show: false }, + annotationIndex: index, + }); + + markAreaData.push([ + { + xAxis: annotation.start, + itemStyle: { color, opacity }, + }, + { xAxis: annotation.end }, + ]); + + // Add start marker + markPointData.push({ + coord: [annotation.start, 0], + symbol: 'triangle', + symbolSize: [12, 12], + symbolRotate: 0, + symbolOffset: [0, 4], // Position below X-axis + itemStyle: { color }, + annotationIndex: index, + emphasis: { + disabled: true, + }, + isStart: true, + }); + + // Add end marker + markPointData.push({ + coord: [annotation.end, 0], + symbol: 'triangle', + symbolSize: [12, 12], + symbolRotate: 0, + symbolOffset: [0, 4], // Position below X-axis + itemStyle: { color }, + annotationIndex: index, + emphasis: { + disabled: true, + }, + isEnd: true, + }); + } else { + // Point annotation - use markLine (silent) + single marker + markLineData.push({ + xAxis: annotation.start, + lineStyle: { color, width: 2, type: 'dashed' as const }, + label: { show: false }, + annotationIndex: index, + }); + + // Add point marker + markPointData.push({ + coord: [annotation.start, 0], + symbol: 'triangle', + symbolSize: [12, 10], + symbolRotate: 0, + symbolOffset: [0, '120%'], // Position below X-axis + itemStyle: { color }, + annotationIndex: index, + isPoint: true, + }); + } + }); + + const series: LineSeriesOption = { + type: 'line', + data: [], + silent: false, + markArea: + markAreaData.length > 0 + ? { + silent: true, // Make area silent, only markers are interactive + data: markAreaData, + label: { + show: false, + }, + } + : undefined, + markLine: + markLineData.length > 0 + ? { + silent: true, // Non-interactive: hovering the dashed line keeps the TimeSeries tooltip + symbol: ['none', 'none'], + data: markLineData, + lineStyle: { + type: 'dashed', + }, + } + : undefined, + markPoint: + markPointData.length > 0 + ? { + silent: false, // Markers are interactive + data: markPointData, + label: { + show: false, + }, + } + : undefined, + }; + + return [series]; +} diff --git a/timeserieschart/src/utils/annotation.ts b/timeserieschart/src/utils/annotation.ts new file mode 100644 index 000000000..813d94b90 --- /dev/null +++ b/timeserieschart/src/utils/annotation.ts @@ -0,0 +1,20 @@ +import { AnnotationData, AnnotationDisplay } from '@perses-dev/spec'; +import { AnnotationSpecWithData } from '@perses-dev/dashboards'; + +export type TimeSeriesAnnotation = AnnotationData & AnnotationDisplay; + +export function convertAnnotationToTimeSeriesAnnotation(annotations: AnnotationSpecWithData[]): TimeSeriesAnnotation[] { + const result: TimeSeriesAnnotation[] = []; + for (const annotation of annotations) { + for (const item of annotation.data) { + if (annotation.definition.display.hidden) { + continue; + } + result.push({ + ...annotation.definition.display, + ...item, + }); + } + } + return result; +} diff --git a/timeseriestable/package.json b/timeseriestable/package.json index cbc44e6dd..6d7776a63 100644 --- a/timeseriestable/package.json +++ b/timeseriestable/package.json @@ -29,8 +29,8 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", - "@perses-dev/dashboards": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", + "@perses-dev/dashboards": "file:../../shared/dashboards", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", diff --git a/tracetable/package.json b/tracetable/package.json index 556fc86e5..56746c5c4 100644 --- a/tracetable/package.json +++ b/tracetable/package.json @@ -32,7 +32,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", diff --git a/tracingganttchart/package.json b/tracingganttchart/package.json index 4bea875f9..62805bdd2 100644 --- a/tracingganttchart/package.json +++ b/tracingganttchart/package.json @@ -32,7 +32,7 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "echarts": "5.5.0", diff --git a/victorialogs/package.json b/victorialogs/package.json index 8aa738f00..528f55986 100644 --- a/victorialogs/package.json +++ b/victorialogs/package.json @@ -24,9 +24,9 @@ "@hookform/resolvers": "^3.2.0", "@perses-dev/components": "^0.53.1", "@perses-dev/core": "^0.53.0", - "@perses-dev/dashboards": "^0.53.1", + "@perses-dev/dashboards": "file:../../shared/dashboards", "@perses-dev/explore": "^0.53.1", - "@perses-dev/plugin-system": "^0.53.1", + "@perses-dev/plugin-system": "file:../../shared/plugin-system", "@tanstack/react-query": "^4.39.1", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0",