diff --git a/.config/.eslintrc b/.config/.eslintrc index 3f8c381..adb4846 100644 --- a/.config/.eslintrc +++ b/.config/.eslintrc @@ -2,9 +2,9 @@ * ⚠️⚠️⚠️ THIS FILE WAS SCAFFOLDED BY `@grafana/create-plugin`. DO NOT EDIT THIS FILE DIRECTLY. ⚠️⚠️⚠️ * * In order to extend the configuration follow the steps in - * https://grafana.github.io/plugin-tools/docs/advanced-configuration#extending-the-eslint-config + * https://grafana.com/developers/plugin-tools/create-a-plugin/extend-a-plugin/extend-configurations#extend-the-eslint-config */ - { +{ "extends": ["@grafana/eslint-config"], "root": true, "rules": { diff --git a/.config/.prettierrc.js b/.config/.prettierrc.js index 66a76ec..bf506f5 100644 --- a/.config/.prettierrc.js +++ b/.config/.prettierrc.js @@ -5,12 +5,12 @@ */ module.exports = { - "endOfLine": "auto", - "printWidth": 120, - "trailingComma": "es5", - "semi": true, - "jsxSingleQuote": false, - "singleQuote": true, - "useTabs": false, - "tabWidth": 2 -}; \ No newline at end of file + endOfLine: 'auto', + printWidth: 120, + trailingComma: 'es5', + semi: true, + jsxSingleQuote: false, + singleQuote: true, + useTabs: false, + tabWidth: 2, +}; diff --git a/.config/jest-setup.js b/.config/jest-setup.ts similarity index 82% rename from .config/jest-setup.js rename to .config/jest-setup.ts index 575b354..f5e45c2 100644 --- a/.config/jest-setup.js +++ b/.config/jest-setup.ts @@ -2,7 +2,7 @@ * ⚠️⚠️⚠️ THIS FILE WAS SCAFFOLDED BY `@grafana/create-plugin`. DO NOT EDIT THIS FILE DIRECTLY. ⚠️⚠️⚠️ * * In order to extend the configuration follow the steps in - * https://grafana.github.io/plugin-tools/docs/advanced-configuration#extending-the-jest-config + * https://grafana.com/developers/plugin-tools/create-a-plugin/extend-a-plugin/extend-configurations#extend-the-jest-config */ import '@testing-library/jest-dom'; @@ -21,5 +21,3 @@ Object.defineProperty(global, 'matchMedia', { dispatchEvent: jest.fn(), })), }); - -HTMLCanvasElement.prototype.getContext = () => {}; diff --git a/.config/jest.config.js b/.config/jest.config.js index 3cb011e..94489cb 100644 --- a/.config/jest.config.js +++ b/.config/jest.config.js @@ -2,7 +2,7 @@ * ⚠️⚠️⚠️ THIS FILE WAS SCAFFOLDED BY `@grafana/create-plugin`. DO NOT EDIT THIS FILE DIRECTLY. ⚠️⚠️⚠️ * * In order to extend the configuration follow the steps in - * https://grafana.github.io/plugin-tools/docs/advanced-configuration#extending-the-jest-config + * https://grafana.com/developers/plugin-tools/create-a-plugin/extend-a-plugin/extend-configurations#extend-the-jest-config */ const path = require('path'); diff --git a/.config/jest/utils.js b/.config/jest/utils.js index f8ae417..fdca0de 100644 --- a/.config/jest/utils.js +++ b/.config/jest/utils.js @@ -8,11 +8,12 @@ * This utility function is useful in combination with jest `transformIgnorePatterns` config * to transform specific packages (e.g.ES modules) in a projects node_modules folder. */ -const nodeModulesToTransform = (moduleNames) => `node_modules\/(?!(${moduleNames.join('|')})\/)`; +const nodeModulesToTransform = (moduleNames) => `node_modules\/(?!.*(${moduleNames.join('|')})\/.*)`; // Array of known nested grafana package dependencies that only bundle an ESM version const grafanaESModules = [ '.pnpm', // Support using pnpm symlinked packages + '@grafana/schema', 'd3', 'd3-color', 'd3-force', @@ -20,10 +21,11 @@ const grafanaESModules = [ 'd3-scale-chromatic', 'ol', 'react-colorful', + 'rxjs', 'uuid', ]; module.exports = { nodeModulesToTransform, - grafanaESModules -} \ No newline at end of file + grafanaESModules, +}; diff --git a/.config/tsconfig.json b/.config/tsconfig.json index 64b3769..75329b7 100644 --- a/.config/tsconfig.json +++ b/.config/tsconfig.json @@ -2,9 +2,9 @@ * ⚠️⚠️⚠️ THIS FILE WAS SCAFFOLDED BY `@grafana/create-plugin`. DO NOT EDIT THIS FILE DIRECTLY. ⚠️⚠️⚠️ * * In order to extend the configuration follow the steps in - * https://grafana.github.io/plugin-tools/docs/advanced-configuration#extending-the-typescript-config + * https://grafana.com/developers/plugin-tools/create-a-plugin/extend-a-plugin/extend-configurations#extend-the-typescript-config */ - { +{ "compilerOptions": { "alwaysStrict": true, "declaration": false, @@ -21,6 +21,6 @@ }, "transpileOnly": true }, - "include": ["../src", "./types"], + "include": ["../src", "./types", "./jest-setup.ts"], "extends": "@grafana/tsconfig" } diff --git a/.config/webpack/utils.ts b/.config/webpack/utils.ts index c2691e6..07eea6e 100644 --- a/.config/webpack/utils.ts +++ b/.config/webpack/utils.ts @@ -1,9 +1,26 @@ import fs from 'fs'; +import process from 'process'; +import os from 'os'; import path from 'path'; -import util from 'util'; import { glob } from 'glob'; import { SOURCE_DIR } from './constants'; +export function isWSL() { + if (process.platform !== 'linux') { + return false; + } + + if (os.release().toLowerCase().includes('microsoft')) { + return true; + } + + try { + return fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft'); + } catch { + return false; + } +} + export function getPackageJson() { return require(path.resolve(process.cwd(), 'package.json')); } @@ -21,7 +38,8 @@ export function hasReadme() { export async function getEntries(): Promise> { const pluginsJson = await glob('**/src/**/plugin.json', { absolute: true }); - const plugins = await Promise.all(pluginsJson.map((pluginJson) => { + const plugins = await Promise.all( + pluginsJson.map((pluginJson) => { const folder = path.dirname(pluginJson); return glob(`${folder}/module.{ts,tsx,js,jsx}`, { absolute: true }); }) diff --git a/.config/webpack/webpack.config.ts b/.config/webpack/webpack.config.ts index 22cb86c..1c2739e 100644 --- a/.config/webpack/webpack.config.ts +++ b/.config/webpack/webpack.config.ts @@ -2,7 +2,7 @@ * ⚠️⚠️⚠️ THIS FILE WAS SCAFFOLDED BY `@grafana/create-plugin`. DO NOT EDIT THIS FILE DIRECTLY. ⚠️⚠️⚠️ * * In order to extend the configuration follow the steps in - * https://grafana.github.io/plugin-tools/docs/advanced-configuration#extending-the-webpack-config + * https://grafana.com/developers/plugin-tools/create-a-plugin/extend-a-plugin/extend-configurations#extend-the-webpack-config */ import CopyWebpackPlugin from 'copy-webpack-plugin'; @@ -13,189 +13,200 @@ import path from 'path'; import ReplaceInFileWebpackPlugin from 'replace-in-file-webpack-plugin'; import { Configuration } from 'webpack'; -import { getPackageJson, getPluginJson, hasReadme, getEntries } from './utils'; +import { getPackageJson, getPluginJson, hasReadme, getEntries, isWSL } from './utils'; import { SOURCE_DIR, DIST_DIR } from './constants'; const pluginJson = getPluginJson(); -const config = async (env): Promise => ({ - cache: { - type: 'filesystem', - buildDependencies: { - config: [__filename], - }, - }, - - context: path.join(process.cwd(), SOURCE_DIR), - - devtool: env.production ? 'source-map' : 'eval-source-map', - - entry: await getEntries(), - - externals: [ - 'lodash', - 'jquery', - 'moment', - 'slate', - 'emotion', - '@emotion/react', - '@emotion/css', - 'prismjs', - 'slate-plain-serializer', - '@grafana/slate-react', - 'react', - 'react-dom', - 'react-redux', - 'redux', - 'rxjs', - 'react-router', - 'react-router-dom', - 'd3', - 'angular', - '@grafana/ui', - '@grafana/runtime', - '@grafana/data', - - // Mark legacy SDK imports as external if their name starts with the "grafana/" prefix - ({ request }, callback) => { - const prefix = 'grafana/'; - const hasPrefix = (request) => request.indexOf(prefix) === 0; - const stripPrefix = (request) => request.substr(prefix.length); - - if (hasPrefix(request)) { - return callback(undefined, stripPrefix(request)); - } - - callback(); +const config = async (env): Promise => { + const baseConfig: Configuration = { + cache: { + type: 'filesystem', + buildDependencies: { + config: [__filename], + }, }, - ], - - mode: env.production ? 'production' : 'development', - - module: { - rules: [ - { - exclude: /(node_modules)/, - test: /\.[tj]sx?$/, - use: { - loader: 'swc-loader', - options: { - jsc: { - baseUrl: './src', - target: 'es2015', - loose: false, - parser: { - syntax: 'typescript', - tsx: true, - decorators: false, - dynamicImport: true, + + context: path.join(process.cwd(), SOURCE_DIR), + + devtool: env.production ? 'source-map' : 'eval-source-map', + + entry: await getEntries(), + + externals: [ + 'lodash', + 'jquery', + 'moment', + 'slate', + 'emotion', + '@emotion/react', + '@emotion/css', + 'prismjs', + 'slate-plain-serializer', + '@grafana/slate-react', + 'react', + 'react-dom', + 'react-redux', + 'redux', + 'rxjs', + 'react-router', + 'react-router-dom', + 'd3', + 'angular', + '@grafana/ui', + '@grafana/runtime', + '@grafana/data', + + // Mark legacy SDK imports as external if their name starts with the "grafana/" prefix + ({ request }, callback) => { + const prefix = 'grafana/'; + const hasPrefix = (request) => request.indexOf(prefix) === 0; + const stripPrefix = (request) => request.substr(prefix.length); + + if (hasPrefix(request)) { + return callback(undefined, stripPrefix(request)); + } + + callback(); + }, + ], + + mode: env.production ? 'production' : 'development', + + module: { + rules: [ + { + exclude: /(node_modules)/, + test: /\.[tj]sx?$/, + use: { + loader: 'swc-loader', + options: { + jsc: { + baseUrl: path.resolve(__dirname, 'src'), + target: 'es2015', + loose: false, + parser: { + syntax: 'typescript', + tsx: true, + decorators: false, + dynamicImport: true, + }, }, }, }, }, + { + test: /\.css$/, + use: ['style-loader', 'css-loader'], + }, + { + test: /\.s[ac]ss$/, + use: ['style-loader', 'css-loader', 'sass-loader'], + }, + { + test: /\.(png|jpe?g|gif|svg)$/, + type: 'asset/resource', + generator: { + // Keep publicPath relative for host.com/grafana/ deployments + publicPath: `public/plugins/${pluginJson.id}/img/`, + outputPath: 'img/', + filename: Boolean(env.production) ? '[hash][ext]' : '[name][ext]', + }, + }, + { + test: /\.(woff|woff2|eot|ttf|otf)(\?v=\d+\.\d+\.\d+)?$/, + type: 'asset/resource', + generator: { + // Keep publicPath relative for host.com/grafana/ deployments + publicPath: `public/plugins/${pluginJson.id}/fonts/`, + outputPath: 'fonts/', + filename: Boolean(env.production) ? '[hash][ext]' : '[name][ext]', + }, + }, + ], + }, + + output: { + clean: { + keep: new RegExp(`(.*?_(amd64|arm(64)?)(.exe)?|go_plugin_build_manifest)`), }, - { - test: /\.css$/, - use: ["style-loader", "css-loader"] - }, - { - test: /\.s[ac]ss$/, - use: ['style-loader', 'css-loader', 'sass-loader'], + filename: '[name].js', + library: { + type: 'amd', }, - { - test: /\.(png|jpe?g|gif|svg)$/, - type: 'asset/resource', - generator: { - // Keep publicPath relative for host.com/grafana/ deployments - publicPath: `public/plugins/${pluginJson.id}/img/`, - outputPath: 'img/', - filename: Boolean(env.production) ? '[hash][ext]' : '[name][ext]', + path: path.resolve(process.cwd(), DIST_DIR), + publicPath: `public/plugins/${pluginJson.id}/`, + }, + + plugins: [ + new CopyWebpackPlugin({ + patterns: [ + // If src/README.md exists use it; otherwise the root README + // To `compiler.options.output` + { from: hasReadme() ? 'README.md' : '../README.md', to: '.', force: true }, + { from: 'plugin.json', to: '.' }, + { from: '../LICENSE', to: '.' }, + { from: '../CHANGELOG.md', to: '.', force: true }, + { from: '**/*.json', to: '.' }, // TODO + { from: '**/*.svg', to: '.', noErrorOnMissing: true }, // Optional + { from: '**/*.png', to: '.', noErrorOnMissing: true }, // Optional + { from: '**/*.html', to: '.', noErrorOnMissing: true }, // Optional + { from: 'img/**/*', to: '.', noErrorOnMissing: true }, // Optional + { from: 'libs/**/*', to: '.', noErrorOnMissing: true }, // Optional + { from: 'static/**/*', to: '.', noErrorOnMissing: true }, // Optional + ], + }), + // Replace certain template-variables in the README and plugin.json + new ReplaceInFileWebpackPlugin([ + { + dir: DIST_DIR, + files: ['plugin.json', 'README.md'], + rules: [ + { + search: /\%VERSION\%/g, + replace: getPackageJson().version, + }, + { + search: /\%TODAY\%/g, + replace: new Date().toISOString().substring(0, 10), + }, + { + search: /\%PLUGIN_ID\%/g, + replace: pluginJson.id, + }, + ], }, - }, - { - test: /\.(woff|woff2|eot|ttf|otf)(\?v=\d+\.\d+\.\d+)?$/, - type: 'asset/resource', - generator: { - // Keep publicPath relative for host.com/grafana/ deployments - publicPath: `public/plugins/${pluginJson.id}/fonts/`, - outputPath: 'fonts/', - filename: Boolean(env.production) ? '[hash][ext]' : '[name][ext]', + ]), + new ForkTsCheckerWebpackPlugin({ + async: Boolean(env.development), + issue: { + include: [{ file: '**/*.{ts,tsx}' }], }, - }, + typescript: { configFile: path.join(process.cwd(), 'tsconfig.json') }, + }), + new ESLintPlugin({ + extensions: ['.ts', '.tsx'], + lintDirtyModulesOnly: Boolean(env.development), // don't lint on start, only lint changed files + }), + ...(env.development ? [new LiveReloadPlugin()] : []), ], - }, - output: { - clean: { - keep: new RegExp(`.*?_(amd64|arm(64)?)(.exe)?`), + resolve: { + extensions: ['.js', '.jsx', '.ts', '.tsx'], + // handle resolving "rootDir" paths + modules: [path.resolve(process.cwd(), 'src'), 'node_modules'], + unsafeCache: true, }, - filename: '[name].js', - library: { - type: 'amd', - }, - path: path.resolve(process.cwd(), DIST_DIR), - publicPath: '/', - }, - - plugins: [ - new CopyWebpackPlugin({ - patterns: [ - // If src/README.md exists use it; otherwise the root README - // To `compiler.options.output` - { from: hasReadme() ? 'README.md' : '../README.md', to: '.', force: true }, - { from: 'plugin.json', to: '.' }, - { from: '../LICENSE', to: '.' }, - { from: '../CHANGELOG.md', to: '.', force: true }, - { from: '**/*.json', to: '.' }, // TODO - { from: '**/*.svg', to: '.', noErrorOnMissing: true }, // Optional - { from: '**/*.png', to: '.', noErrorOnMissing: true }, // Optional - { from: '**/*.html', to: '.', noErrorOnMissing: true }, // Optional - { from: 'img/**/*', to: '.', noErrorOnMissing: true }, // Optional - { from: 'libs/**/*', to: '.', noErrorOnMissing: true }, // Optional - { from: 'static/**/*', to: '.', noErrorOnMissing: true }, // Optional - ], - }), - // Replace certain template-variables in the README and plugin.json - new ReplaceInFileWebpackPlugin([ - { - dir: DIST_DIR, - files: ['plugin.json', 'README.md'], - rules: [ - { - search: /\%VERSION\%/g, - replace: getPackageJson().version, - }, - { - search: /\%TODAY\%/g, - replace: new Date().toISOString().substring(0, 10), - }, - { - search: /\%PLUGIN_ID\%/g, - replace: pluginJson.id, - }, - ], - }, - ]), - new ForkTsCheckerWebpackPlugin({ - async: Boolean(env.development), - issue: { - include: [{ file: '**/*.{ts,tsx}' }], - }, - typescript: { configFile: path.join(process.cwd(), 'tsconfig.json') }, - }), - new ESLintPlugin({ - extensions: ['.ts', '.tsx'], - lintDirtyModulesOnly: Boolean(env.development), // don't lint on start, only lint changed files - }), - ...(env.development ? [new LiveReloadPlugin()] : []), - ], - - resolve: { - extensions: ['.js', '.jsx', '.ts', '.tsx'], - // handle resolving "rootDir" paths - modules: [path.resolve(process.cwd(), 'src'), 'node_modules'], - unsafeCache: true, - }, -}); + }; + + if (isWSL()) { + baseConfig.watchOptions = { + poll: 3000, + ignored: /node_modules/, + }; + } + + return baseConfig; +}; export default config; diff --git a/.eslintrc b/.eslintrc index 4c801b9..99c3ab5 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,20 +1,17 @@ { - "extends": "./.config/.eslintrc", + "extends": ["./.config/.eslintrc", "@volkovlabs/eslint-config"], "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": "latest", "project": "./tsconfig.json", "sourceType": "module" }, - "plugins": ["deprecation"], - "rules": { - "deprecation/deprecation": ["error"], - "sort-imports": [ - "error", - { - "ignoreCase": true, - "ignoreDeclarationSort": true + "overrides": [ + { + "files": ["**/*.test.tsx", "**/*.test.ts", "src/__testUtils__/**/*", "**/__mocks__/**/*"], + "rules": { + "@typescript-eslint/no-explicit-any": "off" } - ] - } + } + ] } diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 33c520a..f2a8490 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -36,7 +36,7 @@ jobs: - name: Sign plugin run: npm run sign env: - GRAFANA_API_KEY: ${{ secrets.GRAFANA_API_KEY }} + GRAFANA_ACCESS_POLICY_TOKEN: ${{ secrets.GRAFANA_ACCESS_POLICY_TOKEN }} - name: Get plugin metadata id: metadata diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 6a8ed25..e59d545 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -18,7 +18,7 @@ on: # The branches below must be a subset of the branches above branches: [ "main" ] schedule: - - cron: '35 3 * * 5' + - cron: '39 19 * * 1' jobs: analyze: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index af5a7ff..2cf9660 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,7 +27,7 @@ jobs: - name: Sign plugin run: npm run sign env: - GRAFANA_API_KEY: ${{ secrets.GRAFANA_API_KEY }} + GRAFANA_ACCESS_POLICY_TOKEN: ${{ secrets.GRAFANA_ACCESS_POLICY_TOKEN }} - name: Get plugin metadata id: metadata diff --git a/CHANGELOG.md b/CHANGELOG.md index 75f6e83..9ad3b7f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Updated README and documentation (#214) - Add visual editor for working with data sources (#211) +- Update ESLint configuration and refactoring (#237) ## 5.1.0 (2023-08-11) @@ -123,7 +124,7 @@ - Update to Grafana 9.3.1 (#97) - Add Google map support (#98) - Refactor Maps support (#99) -- Update to Apache ECharts 5.4.1 (#101) +- Update to Apache ECharts 5.4.1 (#101) ### Bug fixes diff --git a/cypress/integration/01-view-panel.test.ts b/cypress/integration/01-view-panel.test.ts index 26b3bcc..69b2416 100644 --- a/cypress/integration/01-view-panel.test.ts +++ b/cypress/integration/01-view-panel.test.ts @@ -1,11 +1,11 @@ import { e2e } from '@grafana/e2e'; -import { TestIds } from '../../src/constants'; +import { TEST_IDS } from '../../src/constants'; /** * Dashboard */ -const json = require('../../provisioning/dashboards/e2e.json'); -const testedPanel = json.panels[0]; +const testedPanelTitle = 'Bar Chart'; +const uid = 'fdd5dbe3-794c-4441-9d1c-024a537bbe99'; /** * Selector @@ -18,18 +18,18 @@ const getTestIdSelector = (testId: string) => `[data-testid="${testId}"]`; describe('Viewing a panel with Apache ECharts', () => { beforeEach(() => { e2e.flows.openDashboard({ - uid: json.uid, + uid: uid, }); }); it('Should display a Bar Chart', () => { - const currentPanel = e2e.components.Panels.Panel.title(testedPanel.title); + const currentPanel = e2e.components.Panels.Panel.title(testedPanelTitle); currentPanel.should('be.visible'); /** * Chart */ - const chart = currentPanel.find(getTestIdSelector(TestIds.panel.chart)); + const chart = currentPanel.find(getTestIdSelector(TEST_IDS.panel.chart)); chart.should('be.visible'); /** @@ -40,7 +40,7 @@ describe('Viewing a panel with Apache ECharts', () => { /** * Screenshot */ - chart.screenshot(testedPanel.title); - e2e().compareScreenshots({ name: testedPanel.title, threshold: 0.05 }); + chart.screenshot(testedPanelTitle); + e2e().compareScreenshots({ name: testedPanelTitle, threshold: 0.05 }); }); }); diff --git a/package-lock.json b/package-lock.json index a862340..e6f5646 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "volkovlabs-echarts-panel", - "version": "5.1.0", + "version": "5.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "volkovlabs-echarts-panel", - "version": "5.1.0", + "version": "5.2.0", "license": "Apache-2.0", "dependencies": { "@emotion/css": "^11.11.2", @@ -15,6 +15,7 @@ "@grafana/ui": "^10.0.0", "@types/echarts": "^4.9.18", "@types/googlemaps": "^3.43.3", + "@volkovlabs/components": "^1.2.1", "echarts": "^5.4.3", "echarts-extension-amap": "^1.11.0", "echarts-extension-gmap": "^1.6.0", @@ -46,6 +47,7 @@ "@types/uuid": "^9.0.3", "@types/webpack-env": "^1.18.1", "@typescript-eslint/eslint-plugin": "^5.62.0", + "@volkovlabs/eslint-config": "^1.2.2", "@volkovlabs/jest-selectors": "^1.2.0", "copy-webpack-plugin": "^11.0.0", "css-loader": "^6.8.1", @@ -1673,9 +1675,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.10.tgz", - "integrity": "sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", + "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2071,26 +2073,62 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.4.1.tgz", - "integrity": "sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", + "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", "dependencies": { - "@floating-ui/utils": "^0.1.1" + "@floating-ui/utils": "^0.2.1" } }, + "node_modules/@floating-ui/core/node_modules/@floating-ui/utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + }, "node_modules/@floating-ui/dom": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.1.tgz", - "integrity": "sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.1.tgz", + "integrity": "sha512-iA8qE43/H5iGozC3W0YSnVSW42Vh522yyM1gj+BqRwVsTNOyr231PsXDaV04yT39PsO0QL2QpbI/M0ZaLUQgRQ==", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.1" + } + }, + "node_modules/@floating-ui/dom/node_modules/@floating-ui/utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + }, + "node_modules/@floating-ui/react": { + "version": "0.26.4", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.4.tgz", + "integrity": "sha512-pRiEz+SiPyfTcckAtLkEf3KJ/sUbB4X4fWMcDm27HT2kfAq+dH+hMc2VoOkNaGpDE35a2PKo688ugWeHaToL3g==", + "dependencies": { + "@floating-ui/react-dom": "^2.0.3", + "@floating-ui/utils": "^0.1.5", + "tabbable": "^6.0.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", + "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", "dependencies": { - "@floating-ui/core": "^1.4.1", - "@floating-ui/utils": "^0.1.1" + "@floating-ui/dom": "^1.6.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" } }, "node_modules/@floating-ui/utils": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.1.tgz", - "integrity": "sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw==" + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz", + "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==" }, "node_modules/@formatjs/ecma402-abstract": { "version": "1.17.0", @@ -3008,14 +3046,12 @@ "dev": true }, "node_modules/@grafana/faro-core": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@grafana/faro-core/-/faro-core-1.1.2.tgz", - "integrity": "sha512-bkDRivNUEjk2oOzsC+xJEr2hhFZDsHBoXqGbZiR2rQ4BT3qN5Mm4Eb3GOaHrRBLXp82HeV6ZXP0Gfsv3+YMEQA==", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@grafana/faro-core/-/faro-core-1.3.7.tgz", + "integrity": "sha512-QSQBTa32zCAGAQ/fsooNYspvINrCXWoS3NRg7r7/C6ToFOGgcZNIdRoPqCr/sZK9NcICSIoNV6ulGph8gjogYA==", "dependencies": { - "@opentelemetry/api": "^1.4.1", - "@opentelemetry/api-metrics": "^0.33.0", - "@opentelemetry/otlp-transformer": "^0.37.0", - "murmurhash-js": "^1.0.0" + "@opentelemetry/api": "^1.7.0", + "@opentelemetry/otlp-transformer": "^0.45.1" } }, "node_modules/@grafana/faro-web-sdk": { @@ -4779,18 +4815,17 @@ } }, "node_modules/@opentelemetry/api": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.4.1.tgz", - "integrity": "sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.7.0.tgz", + "integrity": "sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw==", "engines": { "node": ">=8.0.0" } }, - "node_modules/@opentelemetry/api-metrics": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-metrics/-/api-metrics-0.33.0.tgz", - "integrity": "sha512-78evfPRRRnJA6uZ3xuBuS3VZlXTO/LRs+Ff1iv3O/7DgibCtq9k27T6Zlj8yRdJDFmcjcbQrvC0/CpDpWHaZYA==", - "deprecated": "Please use @opentelemetry/api >= 1.3.0", + "node_modules/@opentelemetry/api-logs": { + "version": "0.45.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.45.1.tgz", + "integrity": "sha512-zVGq/k70l+kB/Wuv3O/zhptP2hvDhEbhDu9EtHde1iWZJf3FedeYS/nWVcMBkkyPAjS/JKNk86WN4CBQLGUuOw==", "dependencies": { "@opentelemetry/api": "^1.0.0" }, @@ -4799,87 +4834,105 @@ } }, "node_modules/@opentelemetry/core": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.11.0.tgz", - "integrity": "sha512-aP1wHSb+YfU0pM63UAkizYPuS4lZxzavHHw5KJfFNN2oWQ79HSm6JR3CzwFKHwKhSzHN8RE9fgP1IdVJ8zmo1w==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.18.1.tgz", + "integrity": "sha512-kvnUqezHMhsQvdsnhnqTNfAJs3ox/isB0SVrM1dhVFw7SsB7TstuVa6fgWnN2GdPyilIFLUvvbTZoVRmx6eiRg==", "dependencies": { - "@opentelemetry/semantic-conventions": "1.11.0" + "@opentelemetry/semantic-conventions": "1.18.1" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.5.0" + "@opentelemetry/api": ">=1.0.0 <1.8.0" } }, "node_modules/@opentelemetry/otlp-transformer": { - "version": "0.37.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.37.0.tgz", - "integrity": "sha512-cIzV9x2DhJ5gN0mld8OqN+XM95sDiuAJJvXsRjVuz9vu8TSNbbao/QCKNfJLOXqe8l3Ge05nKzQ6Q2gDDEN36w==", + "version": "0.45.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.45.1.tgz", + "integrity": "sha512-FhIHgfC0b0XtoBrS5ISfva939yWffNl47ypXR8I7Ru+dunlySpmf2TLocKHYLHGcWiuoeSNO5O4dZCmSKOtpXw==", "dependencies": { - "@opentelemetry/core": "1.11.0", - "@opentelemetry/resources": "1.11.0", - "@opentelemetry/sdk-metrics": "1.11.0", - "@opentelemetry/sdk-trace-base": "1.11.0" + "@opentelemetry/api-logs": "0.45.1", + "@opentelemetry/core": "1.18.1", + "@opentelemetry/resources": "1.18.1", + "@opentelemetry/sdk-logs": "0.45.1", + "@opentelemetry/sdk-metrics": "1.18.1", + "@opentelemetry/sdk-trace-base": "1.18.1" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.5.0" + "@opentelemetry/api": ">=1.3.0 <1.8.0" } }, "node_modules/@opentelemetry/resources": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.11.0.tgz", - "integrity": "sha512-y0z2YJTqk0ag+hGT4EXbxH/qPhDe8PfwltYb4tXIEsozgEFfut/bqW7H7pDvylmCjBRMG4NjtLp57V1Ev++brA==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.18.1.tgz", + "integrity": "sha512-JjbcQLYMttXcIabflLRuaw5oof5gToYV9fuXbcsoOeQ0BlbwUn6DAZi++PNsSz2jjPeASfDls10iaO/8BRIPRA==", + "dependencies": { + "@opentelemetry/core": "1.18.1", + "@opentelemetry/semantic-conventions": "1.18.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.8.0" + } + }, + "node_modules/@opentelemetry/sdk-logs": { + "version": "0.45.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.45.1.tgz", + "integrity": "sha512-z0RRgW4LeKEKnhXS4F/HnqB6+7gsy63YK47F4XAJYHs4s1KKg8XnQ2RkbuL31i/a9nXkylttYtvsT50CGr487g==", "dependencies": { - "@opentelemetry/core": "1.11.0", - "@opentelemetry/semantic-conventions": "1.11.0" + "@opentelemetry/core": "1.18.1", + "@opentelemetry/resources": "1.18.1" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.5.0" + "@opentelemetry/api": ">=1.4.0 <1.8.0", + "@opentelemetry/api-logs": ">=0.39.1" } }, "node_modules/@opentelemetry/sdk-metrics": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.11.0.tgz", - "integrity": "sha512-knuq3pwU0+46FEMdw9Ses+alXL9cbcLUUTdYBBBsaKkqKwoVMHfhBufW7u6YCu4i+47Wg6ZZTN/eGc4LbTbK5Q==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.18.1.tgz", + "integrity": "sha512-TEFgeNFhdULBYiCoHbz31Y4PDsfjjxRp8Wmdp6ybLQZPqMNEb+dRq+XN8Xw3ivIgTaf9gYsomgV5ensX99RuEQ==", "dependencies": { - "@opentelemetry/core": "1.11.0", - "@opentelemetry/resources": "1.11.0", - "lodash.merge": "4.6.2" + "@opentelemetry/core": "1.18.1", + "@opentelemetry/resources": "1.18.1", + "lodash.merge": "^4.6.2" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.5.0" + "@opentelemetry/api": ">=1.3.0 <1.8.0" } }, "node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.11.0.tgz", - "integrity": "sha512-DV8e5/Qo42V8FMBlQ0Y0Liv6Hl/Pp5bAZ73s7r1euX8w4bpRes1B7ACiA4yujADbWMJxBgSo4fGbi4yjmTMG2A==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.18.1.tgz", + "integrity": "sha512-tRHfDxN5dO+nop78EWJpzZwHsN1ewrZRVVwo03VJa3JQZxToRDH29/+MB24+yoa+IArerdr7INFJiX/iN4gjqg==", "dependencies": { - "@opentelemetry/core": "1.11.0", - "@opentelemetry/resources": "1.11.0", - "@opentelemetry/semantic-conventions": "1.11.0" + "@opentelemetry/core": "1.18.1", + "@opentelemetry/resources": "1.18.1", + "@opentelemetry/semantic-conventions": "1.18.1" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.5.0" + "@opentelemetry/api": ">=1.0.0 <1.8.0" } }, "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.11.0.tgz", - "integrity": "sha512-fG4D0AktoHyHwGhFGv+PzKrZjxbKJfckJauTJdq2A+ej5cTazmNYjJVAODXXkYyrsI10muMl+B1iO2q1R6Lp+w==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.18.1.tgz", + "integrity": "sha512-+NLGHr6VZwcgE/2lw8zDIufOCGnzsA5CbQIMleXZTrgkBd0TanCX+MiDYJ1TOS4KL/Tqk0nFRxawnaYr6pkZkA==", "engines": { "node": ">=14" } @@ -4926,17 +4979,16 @@ } }, "node_modules/@rc-component/trigger": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@rc-component/trigger/-/trigger-1.15.3.tgz", - "integrity": "sha512-C25WdL8PxX9UrE9S4vZsB2zU920S+pihN9S9mGd/DgfjM5XWYZBonLZfTWAZz54w9cYr5dt/Ln8futCesoBSZA==", + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/@rc-component/trigger/-/trigger-1.18.3.tgz", + "integrity": "sha512-Ksr25pXreYe1gX6ayZ1jLrOrl9OAUHUqnuhEx6MeHnNa1zVM5Y2Aj3Q35UrER0ns8D2cJYtmJtVli+i+4eKrvA==", "dependencies": { - "@babel/runtime": "^7.18.3", + "@babel/runtime": "^7.23.2", "@rc-component/portal": "^1.1.0", "classnames": "^2.3.2", - "rc-align": "^4.0.0", "rc-motion": "^2.0.0", "rc-resize-observer": "^1.3.1", - "rc-util": "^5.33.0" + "rc-util": "^5.38.0" }, "engines": { "node": ">=8.x" @@ -6218,8 +6270,15 @@ "node_modules/@types/lodash": { "version": "4.14.196", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.196.tgz", - "integrity": "sha512-22y3o88f4a94mKljsZcanlNWPzO0uBsBdzLAngf2tp533LzZcQzb6+eZPJ+vCTt+bqF2XnvT9gejTLsAcJAJyQ==", - "dev": true + "integrity": "sha512-22y3o88f4a94mKljsZcanlNWPzO0uBsBdzLAngf2tp533LzZcQzb6+eZPJ+vCTt+bqF2XnvT9gejTLsAcJAJyQ==" + }, + "node_modules/@types/lodash.memoize": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/lodash.memoize/-/lodash.memoize-4.1.9.tgz", + "integrity": "sha512-glY1nQuoqX4Ft8Uk+KfJudOD7DQbbEDF6k9XpGncaohW3RW4eSWBlx6AA0fZCrh40tZcQNH4jS/Oc59J6Eq+aw==", + "dependencies": { + "@types/lodash": "*" + } }, "node_modules/@types/node": { "version": "18.17.4", @@ -6354,54 +6413,1070 @@ "@types/yargs-parser": "*" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/zrender": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/zrender/-/zrender-4.0.3.tgz", + "integrity": "sha512-EPI269lkHNsObwILJ1k1z7znLjKyePuWRy/XKK0shSGpBb9cIX307arcwJV4+2NeZj5wEjN06r4D8yFv7sI06g==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "peer": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true, + "peer": true + }, + "node_modules/@volkovlabs/components": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@volkovlabs/components/-/components-1.3.2.tgz", + "integrity": "sha512-lmgZQPLzFaFp4ut8xucH89LPvSQ9yu3P7XyrHWHW8aIt/jZoQmlnxrwGNUbpVByUCtWUXVhM5EF0sh4sVfoMGA==", + "dependencies": { + "@emotion/css": "^11.11.2", + "@grafana/data": "^10.2.1", + "@grafana/ui": "^10.2.1", + "rc-slider": "^10.5.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@volkovlabs/components/node_modules/@emotion/react": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", + "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@volkovlabs/components/node_modules/@grafana/data": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/@grafana/data/-/data-10.3.1.tgz", + "integrity": "sha512-Sok3UVhaXmSLaGyehx8gsCh6jVI+8GH4UiMtvGN2mDvN7ogTOdyBHVqxiYMFwkWrzPOJ0d8dJyG1qwRRr7M8LQ==", + "dependencies": { + "@braintree/sanitize-url": "6.0.2", + "@grafana/schema": "10.3.1", + "@types/d3-interpolate": "^3.0.0", + "@types/string-hash": "1.1.1", + "d3-interpolate": "3.0.1", + "date-fns": "2.30.0", + "dompurify": "^2.4.3", + "eventemitter3": "5.0.1", + "fast_array_intersect": "1.1.0", + "history": "4.10.1", + "lodash": "4.17.21", + "marked": "5.1.1", + "marked-mangle": "1.1.0", + "moment": "2.29.4", + "moment-timezone": "0.5.43", + "ol": "7.4.0", + "papaparse": "5.4.1", + "react-use": "17.4.0", + "regenerator-runtime": "0.14.0", + "rxjs": "7.8.1", + "string-hash": "^1.1.3", + "tinycolor2": "1.6.0", + "tslib": "2.6.0", + "uplot": "1.6.28", + "xss": "^1.0.14" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + } + }, + "node_modules/@volkovlabs/components/node_modules/@grafana/e2e-selectors": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/@grafana/e2e-selectors/-/e2e-selectors-10.3.1.tgz", + "integrity": "sha512-+qWAXViafuJYH7rN54iQmt7nbCWcA+FTpMGlzfezCdXAwcU3NiIvo4PD5kxR7nYcm1+s5G5pTZ00DQHxO5vBRw==", + "dependencies": { + "@grafana/tsconfig": "^1.2.0-rc1", + "tslib": "2.6.0", + "typescript": "5.2.2" + } + }, + "node_modules/@volkovlabs/components/node_modules/@grafana/faro-web-sdk": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@grafana/faro-web-sdk/-/faro-web-sdk-1.3.7.tgz", + "integrity": "sha512-D85pCkgPqfKY/Mz1hZnQGT1Yb63lJUlnxdnMGuto2xxb4UzQSyoKY1vnPhBvJvdYQMMvaiEC/DcvsLILzPvaSA==", + "dependencies": { + "@grafana/faro-core": "^1.3.7", + "ua-parser-js": "^1.0.32", + "web-vitals": "^3.1.1" + } + }, + "node_modules/@volkovlabs/components/node_modules/@grafana/schema": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/@grafana/schema/-/schema-10.3.1.tgz", + "integrity": "sha512-newt0qGm3ZNQxOFApYBzyTLh0HTslWEfkp+DiKLK/W0Fyxl+RlSYf99gh7gv+/QlIa0wpQRaGIknSlI85Ho7yA==", + "dependencies": { + "tslib": "2.6.0" + } + }, + "node_modules/@volkovlabs/components/node_modules/@grafana/tsconfig": { + "version": "1.2.0-rc1", + "resolved": "https://registry.npmjs.org/@grafana/tsconfig/-/tsconfig-1.2.0-rc1.tgz", + "integrity": "sha512-+SgQeBQ1pT6D/E3/dEdADqTrlgdIGuexUZ8EU+8KxQFKUeFeU7/3z/ayI2q/wpJ/Kr6WxBBNlrST6aOKia19Ag==" + }, + "node_modules/@volkovlabs/components/node_modules/@grafana/ui": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/@grafana/ui/-/ui-10.3.1.tgz", + "integrity": "sha512-dH+HqtTy1Jl3ymelzF/qHCmwCE+b5+CIyWPMSH6YVf+9xzkNOoX11g2WkCFUxhM7LUB0yaXzN9/0bIpN4wwsGQ==", + "dependencies": { + "@emotion/css": "11.11.2", + "@emotion/react": "11.11.1", + "@floating-ui/react": "0.26.4", + "@grafana/data": "10.3.1", + "@grafana/e2e-selectors": "10.3.1", + "@grafana/faro-web-sdk": "^1.3.5", + "@grafana/schema": "10.3.1", + "@leeoniya/ufuzzy": "1.0.13", + "@monaco-editor/react": "4.6.0", + "@popperjs/core": "2.11.8", + "@react-aria/button": "3.8.0", + "@react-aria/dialog": "3.5.3", + "@react-aria/focus": "3.13.0", + "@react-aria/menu": "3.10.0", + "@react-aria/overlays": "3.15.0", + "@react-aria/utils": "3.18.0", + "@react-stately/menu": "3.5.3", + "ansicolor": "1.1.100", + "calculate-size": "1.1.1", + "classnames": "2.3.2", + "d3": "7.8.5", + "date-fns": "2.30.0", + "hoist-non-react-statics": "3.3.2", + "i18next": "^22.0.0", + "i18next-browser-languagedetector": "^7.0.2", + "immutable": "4.3.1", + "is-hotkey": "0.2.0", + "jquery": "3.7.0", + "lodash": "4.17.21", + "micro-memoize": "^4.1.2", + "moment": "2.29.4", + "monaco-editor": "0.34.0", + "ol": "7.4.0", + "prismjs": "1.29.0", + "rc-cascader": "3.20.0", + "rc-drawer": "6.5.2", + "rc-slider": "10.3.1", + "rc-time-picker": "^3.7.3", + "rc-tooltip": "6.1.1", + "react-beautiful-dnd": "13.1.1", + "react-calendar": "4.6.0", + "react-colorful": "5.6.1", + "react-custom-scrollbars-2": "4.5.0", + "react-dropzone": "14.2.3", + "react-highlight-words": "0.20.0", + "react-hook-form": "^7.49.2", + "react-i18next": "^12.0.0", + "react-inlinesvg": "3.0.2", + "react-loading-skeleton": "3.3.1", + "react-popper": "2.3.0", + "react-router-dom": "5.3.3", + "react-select": "5.7.4", + "react-table": "7.8.0", + "react-transition-group": "4.4.5", + "react-use": "17.4.0", + "react-window": "1.8.9", + "rxjs": "7.8.1", + "slate": "0.47.9", + "slate-plain-serializer": "0.7.13", + "slate-react": "0.22.10", + "tinycolor2": "1.6.0", + "tslib": "2.6.0", + "uplot": "1.6.28", + "uuid": "9.0.0" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + } + }, + "node_modules/@volkovlabs/components/node_modules/@grafana/ui/node_modules/rc-slider": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-10.3.1.tgz", + "integrity": "sha512-XszsZLkbjcG9ogQy/zUC0n2kndoKUAnY/Vnk1Go5Gx+JJQBz0Tl15d5IfSiglwBUZPS9vsUJZkfCmkIZSqWbcA==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.27.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@volkovlabs/components/node_modules/@leeoniya/ufuzzy": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@leeoniya/ufuzzy/-/ufuzzy-1.0.13.tgz", + "integrity": "sha512-w7cOuME1F8e4TOrSAGQWPczj60eIcQiU31X1RU65yiZBz1zpDWfynVJUw8d2QzhkUsEObAV0nN4RTIqxpCvJGg==" + }, + "node_modules/@volkovlabs/components/node_modules/@monaco-editor/react": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@monaco-editor/react/-/react-4.6.0.tgz", + "integrity": "sha512-RFkU9/i7cN2bsq/iTkurMWOEErmYcY6JiQI3Jn+WeR/FGISH8JbHERjpS9oRuSOPvDMJI0Z8nJeKkbOs9sBYQw==", + "dependencies": { + "@monaco-editor/loader": "^1.4.0" + }, + "peerDependencies": { + "monaco-editor": ">= 0.25.0 < 1", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@volkovlabs/components/node_modules/@monaco-editor/react/node_modules/@monaco-editor/loader": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.4.0.tgz", + "integrity": "sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg==", + "dependencies": { + "state-local": "^1.0.6" + }, + "peerDependencies": { + "monaco-editor": ">= 0.21.0 < 1" + } + }, + "node_modules/@volkovlabs/components/node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@volkovlabs/components/node_modules/@react-aria/button": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@react-aria/button/-/button-3.8.0.tgz", + "integrity": "sha512-QdvXTQgn+QEWOHoMbUIPXSBIN5P2r1zthRvqDJMTCzuT0I6LbNAq7RoojEbRrcn0DbTa/nZPzOOYsZXjgteRdw==", + "dependencies": { + "@react-aria/focus": "^3.13.0", + "@react-aria/interactions": "^3.16.0", + "@react-aria/utils": "^3.18.0", + "@react-stately/toggle": "^3.6.0", + "@react-types/button": "^3.7.3", + "@react-types/shared": "^3.18.1", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@volkovlabs/components/node_modules/@react-aria/dialog": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/@react-aria/dialog/-/dialog-3.5.3.tgz", + "integrity": "sha512-wXpAqnt6TtR4X/5Xk5HCTBM0qyPcF2bXFQ5z2gSwl1olgoQ5znZEgMqMLbMmwb4dsWGGtAueULs6fVZk766ygA==", + "dependencies": { + "@react-aria/focus": "^3.13.0", + "@react-aria/overlays": "^3.15.0", + "@react-aria/utils": "^3.18.0", + "@react-stately/overlays": "^3.6.0", + "@react-types/dialog": "^3.5.3", + "@react-types/shared": "^3.18.1", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@volkovlabs/components/node_modules/@react-aria/focus": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.13.0.tgz", + "integrity": "sha512-9DW7RqgbFWiImZmkmTIJGe9LrQBqEeLYwlKY+F1FTVXerIPiCCQ3JO3ESEa4lFMmkaHoueFLUrq2jkYjRNqoTw==", + "dependencies": { + "@react-aria/interactions": "^3.16.0", + "@react-aria/utils": "^3.18.0", + "@react-types/shared": "^3.18.1", + "@swc/helpers": "^0.5.0", + "clsx": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@volkovlabs/components/node_modules/@react-aria/menu": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@react-aria/menu/-/menu-3.10.0.tgz", + "integrity": "sha512-zOOOXvx21aGSxZsXvLa3NV48hLk0jBC/zu5WZHT0Mo/wAe0+43f8p/U3AT8Gc4WnxYbIestcdLaIwgeagSoLtQ==", + "dependencies": { + "@react-aria/focus": "^3.13.0", + "@react-aria/i18n": "^3.8.0", + "@react-aria/interactions": "^3.16.0", + "@react-aria/overlays": "^3.15.0", + "@react-aria/selection": "^3.16.0", + "@react-aria/utils": "^3.18.0", + "@react-stately/collections": "^3.9.0", + "@react-stately/menu": "^3.5.3", + "@react-stately/tree": "^3.7.0", + "@react-types/button": "^3.7.3", + "@react-types/menu": "^3.9.2", + "@react-types/shared": "^3.18.1", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@volkovlabs/components/node_modules/@react-aria/overlays": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.15.0.tgz", + "integrity": "sha512-MeLn74GvXZfi881NSx5sSd5eTduki/PMk4vPvMNp2Xm+9nGHm0FbGu2GMIGgarYy5JC7l/bOO7H01YrS4AozPg==", + "dependencies": { + "@react-aria/focus": "^3.13.0", + "@react-aria/i18n": "^3.8.0", + "@react-aria/interactions": "^3.16.0", + "@react-aria/ssr": "^3.7.0", + "@react-aria/utils": "^3.18.0", + "@react-aria/visually-hidden": "^3.8.2", + "@react-stately/overlays": "^3.6.0", + "@react-types/button": "^3.7.3", + "@react-types/overlays": "^3.8.0", + "@react-types/shared": "^3.18.1", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@volkovlabs/components/node_modules/@react-aria/utils": { + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.18.0.tgz", + "integrity": "sha512-eLs0ExzXx/D3P9qe6ophJ87ZFcI1oRTyRa51M59pCad7grrpk0gWcYrBjMwcR457YWOQQWCeLuq8QJl2QxCW6Q==", + "dependencies": { + "@react-aria/ssr": "^3.7.0", + "@react-stately/utils": "^3.7.0", + "@react-types/shared": "^3.18.1", + "@swc/helpers": "^0.5.0", + "clsx": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@volkovlabs/components/node_modules/@react-stately/menu": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/@react-stately/menu/-/menu-3.5.3.tgz", + "integrity": "sha512-RFgwVD/4BgTtJkexi1WaHpAEkQWZPvpyri0LQUgXWVqBf9PpjB8wigF3XBLMDNkL+YXE0QtzQZBNS1nJECf7rg==", + "dependencies": { + "@react-stately/overlays": "^3.6.0", + "@react-stately/utils": "^3.7.0", + "@react-types/menu": "^3.9.2", + "@react-types/shared": "^3.18.1", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@volkovlabs/components/node_modules/d3": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", + "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@volkovlabs/components/node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/@volkovlabs/components/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "node_modules/@volkovlabs/components/node_modules/get-user-locale": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-user-locale/-/get-user-locale-2.3.1.tgz", + "integrity": "sha512-VEvcsqKYx7zhZYC1CjecrDC5ziPSpl1gSm0qFFJhHSGDrSC+x4+p1KojWC/83QX//j476gFhkVXP/kNUc9q+bQ==", + "dependencies": { + "@types/lodash.memoize": "^4.1.7", + "lodash.memoize": "^4.1.1" + }, + "funding": { + "url": "https://github.com/wojtekmaj/get-user-locale?sponsor=1" + } + }, + "node_modules/@volkovlabs/components/node_modules/immutable": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.1.tgz", + "integrity": "sha512-lj9cnmB/kVS0QHsJnYKD1uo3o39nrbKxszjnqS9Fr6NB7bZzW45U6WSGBPKXDL/CvDKqDNPA4r3DoDQ8GTxo2A==" + }, + "node_modules/@volkovlabs/components/node_modules/jquery": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.0.tgz", + "integrity": "sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ==" + }, + "node_modules/@volkovlabs/components/node_modules/marked": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.1.tgz", + "integrity": "sha512-bTmmGdEINWmOMDjnPWDxGPQ4qkDLeYorpYbEtFOXzOruTwUE671q4Guiuchn4N8h/v6NGd7916kXsm3Iz4iUSg==", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@volkovlabs/components/node_modules/moment-timezone": { + "version": "0.5.43", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.43.tgz", + "integrity": "sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==", + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@volkovlabs/components/node_modules/ol": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/ol/-/ol-7.4.0.tgz", + "integrity": "sha512-bgBbiah694HhC0jt8ptEFNRXwgO8d6xWH3G97PCg4bmn9Li5nLLbi59oSrvqUI6VPVwonPQF1YcqJymxxyMC6A==", + "dependencies": { + "earcut": "^2.2.3", + "geotiff": "^2.0.7", + "ol-mapbox-style": "^10.1.0", + "pbf": "3.2.1", + "rbush": "^3.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/openlayers" + } + }, + "node_modules/@volkovlabs/components/node_modules/ol-mapbox-style": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/ol-mapbox-style/-/ol-mapbox-style-10.7.0.tgz", + "integrity": "sha512-S/UdYBuOjrotcR95Iq9AejGYbifKeZE85D9VtH11ryJLQPTZXZSW1J5bIXcr4AlAH6tyjPPHTK34AdkwB32Myw==", + "dependencies": { + "@mapbox/mapbox-gl-style-spec": "^13.23.1", + "mapbox-to-css-font": "^2.4.1", + "ol": "^7.3.0" + } + }, + "node_modules/@volkovlabs/components/node_modules/papaparse": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.4.1.tgz", + "integrity": "sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==" + }, + "node_modules/@volkovlabs/components/node_modules/rc-cascader": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.20.0.tgz", + "integrity": "sha512-lkT9EEwOcYdjZ/jvhLoXGzprK1sijT3/Tp4BLxQQcHDZkkOzzwYQC9HgmKoJz0K7CukMfgvO9KqHeBdgE+pELw==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "array-tree-filter": "^2.1.0", + "classnames": "^2.3.1", + "rc-select": "~14.10.0", + "rc-tree": "~5.8.1", + "rc-util": "^5.37.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@volkovlabs/components/node_modules/rc-drawer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-6.5.2.tgz", + "integrity": "sha512-QckxAnQNdhh4vtmKN0ZwDf3iakO83W9eZcSKWYYTDv4qcD2fHhRAZJJ/OE6v2ZlQ2kSqCJX5gYssF4HJFvsEPQ==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/portal": "^1.1.1", + "classnames": "^2.2.6", + "rc-motion": "^2.6.1", + "rc-util": "^5.36.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@volkovlabs/components/node_modules/rc-select": { + "version": "14.10.0", + "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-14.10.0.tgz", + "integrity": "sha512-TsIJTYafTTapCA32LLNpx/AD6ntepR1TG8jEVx35NiAAWCPymhUfuca8kRcUNd3WIGVMDcMKn9kkphoxEz+6Ag==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/trigger": "^1.5.0", + "classnames": "2.x", + "rc-motion": "^2.0.1", + "rc-overflow": "^1.3.1", + "rc-util": "^5.16.1", + "rc-virtual-list": "^3.5.2" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@volkovlabs/components/node_modules/rc-slider": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-10.5.0.tgz", + "integrity": "sha512-xiYght50cvoODZYI43v3Ylsqiw14+D7ELsgzR40boDZaya1HFa1Etnv9MDkQE8X/UrXAffwv2AcNAhslgYuDTw==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.27.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@volkovlabs/components/node_modules/rc-tooltip": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-6.1.1.tgz", + "integrity": "sha512-YoxL0Ev4htsX37qgN23eKr0L5PIRpZaLVL9GX6aJ4x6UEnwgXZYUNCAEHfKlKT3eD1felDq3ob4+Cn9lprLDBw==", + "dependencies": { + "@babel/runtime": "^7.11.2", + "@rc-component/trigger": "^1.17.0", + "classnames": "^2.3.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@volkovlabs/components/node_modules/rc-tree": { + "version": "5.8.5", + "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-5.8.5.tgz", + "integrity": "sha512-PRfcZtVDNkR7oh26RuNe1hpw11c1wfgzwmPFL0lnxGnYefe9lDAO6cg5wJKIAwyXFVt5zHgpjYmaz0CPy1ZtKg==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.0.1", + "rc-util": "^5.16.1", + "rc-virtual-list": "^3.5.1" + }, + "engines": { + "node": ">=10.x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@volkovlabs/components/node_modules/react-calendar": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/react-calendar/-/react-calendar-4.6.0.tgz", + "integrity": "sha512-GJ6ZipKMQmlK666t+0hgmecu6WHydEnMWJjKdEkUxW6F471hiM5DkbWXkfr8wlAg9tc9feNCBhXw3SqsPOm01A==", + "dependencies": { + "@wojtekmaj/date-utils": "^1.1.3", + "clsx": "^2.0.0", + "get-user-locale": "^2.2.1", + "prop-types": "^15.6.0", + "tiny-warning": "^1.0.0" + }, + "funding": { + "url": "https://github.com/wojtekmaj/react-calendar?sponsor=1" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@volkovlabs/components/node_modules/react-calendar/node_modules/clsx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", + "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@volkovlabs/components/node_modules/react-select": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.4.tgz", + "integrity": "sha512-NhuE56X+p9QDFh4BgeygHFIvJJszO1i1KSkg/JPcIJrbovyRtI+GuOEa4XzFCEpZRAEoEI8u/cAHK+jG/PgUzQ==", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@floating-ui/dom": "^1.0.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^6.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0", + "use-isomorphic-layout-effect": "^1.1.2" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@volkovlabs/components/node_modules/react-window": { + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.9.tgz", + "integrity": "sha512-+Eqx/fj1Aa5WnhRfj9dJg4VYATGwIUP2ItwItiJ6zboKWA6EX3lYDAXfGF2hyNqplEprhbtjbipiADEcwQ823Q==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "memoize-one": ">=3.1.1 <6" + }, + "engines": { + "node": ">8.0.0" + }, + "peerDependencies": { + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@volkovlabs/components/node_modules/react-window/node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + }, + "node_modules/@volkovlabs/components/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@volkovlabs/components/node_modules/tslib": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" + }, + "node_modules/@volkovlabs/components/node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@volkovlabs/components/node_modules/uplot": { + "version": "1.6.28", + "resolved": "https://registry.npmjs.org/uplot/-/uplot-1.6.28.tgz", + "integrity": "sha512-6AQ/Hu2ZvwF1P6PtIELdWKFml8Vvf3PUqrkVndL4A1+s/0loHwXfsk3yMwy4WGkRAt0MAMpf0uKLa9h0Yt3miw==" }, - "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "node_modules/@volkovlabs/eslint-config": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@volkovlabs/eslint-config/-/eslint-config-1.3.0.tgz", + "integrity": "sha512-xrzF9aj1tP/LEiKYJJSfEKiaIVm7mBhYFdAVaYqejL/NIgcRPDhP8EzL120rggDEaGc5yO/zy82cFTfE/3UiNw==", "dev": true, - "optional": true, "dependencies": { - "@types/node": "*" + "@typescript-eslint/eslint-plugin": "^6.0.0", + "@typescript-eslint/parser": "^6.0.0", + "eslint-plugin-deprecation": "^2.0.0", + "eslint-plugin-simple-import-sort": "^10.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.0" } }, - "node_modules/@types/zrender": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/zrender/-/zrender-4.0.3.tgz", - "integrity": "sha512-EPI269lkHNsObwILJ1k1z7znLjKyePuWRy/XKK0shSGpBb9cIX307arcwJV4+2NeZj5wEjN06r4D8yFv7sI06g==" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "node_modules/@volkovlabs/eslint-config/node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.20.0.tgz", + "integrity": "sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.20.0", + "@typescript-eslint/type-utils": "6.20.0", + "@typescript-eslint/utils": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0", "debug": "^4.3.4", "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -6409,60 +7484,27 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "node_modules/@volkovlabs/eslint-config/node_modules/@typescript-eslint/parser": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.20.0.tgz", + "integrity": "sha512-bYerPDF/H5v6V76MdMYhjwmwgMA+jlPVqjSDq2cRqMi8bP5sR3Z+RLOiOMad3nsnmDVmn2gAFCyNgh/dIrfP/w==", "dev": true, - "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/scope-manager": "6.20.0", + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/typescript-estree": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0", "debug": "^4.3.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -6470,43 +7512,43 @@ } } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "node_modules/@volkovlabs/eslint-config/node_modules/@typescript-eslint/scope-manager": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.20.0.tgz", + "integrity": "sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "node_modules/@volkovlabs/eslint-config/node_modules/@typescript-eslint/type-utils": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.20.0.tgz", + "integrity": "sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@typescript-eslint/typescript-estree": "6.20.0", + "@typescript-eslint/utils": "6.20.0", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -6514,35 +7556,36 @@ } } }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "node_modules/@volkovlabs/eslint-config/node_modules/@typescript-eslint/types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.20.0.tgz", + "integrity": "sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "node_modules/@volkovlabs/eslint-config/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.20.0.tgz", + "integrity": "sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -6554,66 +7597,73 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/@volkovlabs/eslint-config/node_modules/@typescript-eslint/utils": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.20.0.tgz", + "integrity": "sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.20.0", + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/typescript-estree": "6.20.0", + "semver": "^7.5.4" }, "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" + "node": "^16.0.0 || >=18.0.0" }, - "bin": { - "semver": "bin/semver.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "node_modules/@volkovlabs/eslint-config/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.20.0.tgz", + "integrity": "sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@typescript-eslint/types": "6.20.0", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@volkovlabs/eslint-config/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@volkovlabs/eslint-config/node_modules/eslint-plugin-deprecation": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-deprecation/-/eslint-plugin-deprecation-2.0.0.tgz", + "integrity": "sha512-OAm9Ohzbj11/ZFyICyR5N6LbOIvQMp7ZU2zI7Ej0jIc8kiGUERXPNMfw2QqqHD1ZHtjMub3yPZILovYEYucgoQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^6.0.0", + "tslib": "^2.3.1", + "tsutils": "^3.21.0" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0", + "typescript": "^4.2.4 || ^5.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "node_modules/@volkovlabs/eslint-config/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", @@ -6625,7 +7675,22 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { + "node_modules/@volkovlabs/eslint-config/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@volkovlabs/eslint-config/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", @@ -6640,36 +7705,12 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "node_modules/@volkovlabs/eslint-config/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true, - "peer": true - }, "node_modules/@volkovlabs/jest-selectors": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@volkovlabs/jest-selectors/-/jest-selectors-1.2.0.tgz", @@ -10115,6 +11156,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/eslint-plugin-simple-import-sort": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz", + "integrity": "sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==", + "dev": true, + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -11621,6 +12671,14 @@ "@babel/runtime": "^7.20.6" } }, + "node_modules/i18next-browser-languagedetector": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.2.0.tgz", + "integrity": "sha512-U00DbDtFIYD3wkWsr2aVGfXGAj2TgnELzOX9qv8bT0aJtvPV9CRO77h+vgmHFBMe7LAxdwvT/7VkCWGya6L3tA==", + "dependencies": { + "@babel/runtime": "^7.23.2" + } + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -15850,6 +16908,14 @@ "node": ">= 12" } }, + "node_modules/marked-mangle": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/marked-mangle/-/marked-mangle-1.1.0.tgz", + "integrity": "sha512-ed2W2gMB2HIBaYasBZveMFJfDRTL2OFycr0GgUSPcBSNl5dX+1r6lHG6u1eFXw7kej2hBTWa1m6YZqcfn4Coxw==", + "peerDependencies": { + "marked": "^4 || ^5" + } + }, "node_modules/mdn-data": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", @@ -15936,6 +17002,11 @@ "node": ">= 8" } }, + "node_modules/micro-memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-4.1.2.tgz", + "integrity": "sha512-+HzcV2H+rbSJzApgkj0NdTakkC+bnyeiUxgT6/m7mjcz1CmM22KYFKp+EVj1sWe4UYcnriJr5uqHQD/gMHLD+g==" + }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -16404,11 +17475,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/murmurhash-js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", - "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==" - }, "node_modules/nano-css": { "version": "5.3.5", "resolved": "https://registry.npmjs.org/nano-css/-/nano-css-5.3.5.tgz", @@ -17749,18 +18815,23 @@ } }, "node_modules/rc-util": { - "version": "5.36.0", - "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.36.0.tgz", - "integrity": "sha512-a4uUvT+UNHvYL+awzbN8H8zAjfduwY4KAp2wQy40wOz3NyBdo3Xhx/EAAPyDkHLoGm535jIACaMhIqExGiAjHw==", + "version": "5.38.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.38.1.tgz", + "integrity": "sha512-e4ZMs7q9XqwTuhIK7zBIVFltUtMSjphuPPQXHoHlzRzNdOwUxDejo0Zls5HYaJfRKNURcsS/ceKVULlhjBrxng==", "dependencies": { "@babel/runtime": "^7.18.3", - "react-is": "^16.12.0" + "react-is": "^18.2.0" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, + "node_modules/rc-util/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, "node_modules/rc-virtual-list": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.5.3.tgz", @@ -17913,6 +18984,22 @@ "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-4.0.3.tgz", "integrity": "sha512-QmpUu4KqDmX0plH4u+tf0riMc1KHE1+lw95cMrLlXQAFOx/xnBtwhZ52XJxd9X2O6kwKBqX32kmhbhlobD0cuw==" }, + "node_modules/react-hook-form": { + "version": "7.49.3", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.49.3.tgz", + "integrity": "sha512-foD6r3juidAT1cOZzpmD/gOKt7fRsDhXXZ0y28+Al1CHgX+AY1qIN9VSIIItXRq1dN68QrRwl1ORFlwjBaAqeQ==", + "engines": { + "node": ">=18", + "pnpm": "8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18" + } + }, "node_modules/react-i18next": { "version": "12.3.1", "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-12.3.1.tgz", @@ -17967,6 +19054,14 @@ "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, + "node_modules/react-loading-skeleton": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/react-loading-skeleton/-/react-loading-skeleton-3.3.1.tgz", + "integrity": "sha512-NilqqwMh2v9omN7LteiDloEVpFyMIa0VGqF+ukqp0ncVlYu1sKYbYGX9JEl+GtOT9TKsh04zCHAbavnQ2USldA==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, "node_modules/react-popper": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz", @@ -19673,6 +20768,11 @@ "resolved": "https://registry.npmjs.org/systemjs/-/systemjs-0.20.19.tgz", "integrity": "sha512-H/rKwNEEyej/+IhkmFNmKFyJul8tbH/muiPq5TyNoVTwsGhUjRsN3NlFnFQUvFXA3+GQmsXkCNXU6QKPl779aw==" }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -20054,6 +21154,18 @@ "integrity": "sha512-T2Vkpa/7Vdm3sV8nXRn8vZ0tnq6wlnO4Zx7Pux+JA1W6DMlg5EtbNcPZu/L7XRTPc9S0eAKhEFR4p/u0GcsDpQ==", "dev": true }, + "node_modules/ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-easing": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz", diff --git a/package.json b/package.json index 1dc901f..52b884d 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "@grafana/ui": "^10.0.0", "@types/echarts": "^4.9.18", "@types/googlemaps": "^3.43.3", + "@volkovlabs/components": "^1.2.1", "echarts": "^5.4.3", "echarts-extension-amap": "^1.11.0", "echarts-extension-gmap": "^1.6.0", @@ -39,6 +40,7 @@ "@types/uuid": "^9.0.3", "@types/webpack-env": "^1.18.1", "@typescript-eslint/eslint-plugin": "^5.62.0", + "@volkovlabs/eslint-config": "^1.2.2", "@volkovlabs/jest-selectors": "^1.2.0", "copy-webpack-plugin": "^11.0.0", "css-loader": "^6.8.1", diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts new file mode 100644 index 0000000..7a4f72b --- /dev/null +++ b/src/@types/global.d.ts @@ -0,0 +1,16 @@ +/** + * Extend window interface + */ +interface Window { + /** + * Gaode Maps + */ + // eslint-disable-next-line @typescript-eslint/naming-convention + AMap?: unknown; + + /** + * Baidu Maps + */ + // eslint-disable-next-line @typescript-eslint/naming-convention + BMap?: unknown; +} diff --git a/src/components/Collapse/Collapse.styles.ts b/src/components/Collapse/Collapse.styles.ts deleted file mode 100644 index cadd47c..0000000 --- a/src/components/Collapse/Collapse.styles.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { css } from '@emotion/css'; -import { GrafanaTheme2 } from '@grafana/data'; - -/** - * Styles - */ -export const Styles = (theme: GrafanaTheme2) => { - return { - root: css` - border: 1px solid ${theme.colors.border.weak}; - background-color: ${theme.colors.background.primary}; - `, - header: css` - label: Header; - padding: ${theme.spacing(0.5, 0.5)}; - min-height: ${theme.spacing(4)}; - display: flex; - align-items: center; - justify-content: space-between; - white-space: nowrap; - - &:focus { - outline: none; - } - `, - title: css` - font-weight: ${theme.typography.fontWeightBold}; - margin-left: ${theme.spacing(0.5)}; - overflow: hidden; - text-overflow: ellipsis; - `, - collapseIcon: css` - margin-left: ${theme.spacing(0.5)}; - color: ${theme.colors.text.disabled}; - `, - actions: css` - margin-left: auto; - display: flex; - align-items: center; - `, - content: css` - padding: ${theme.spacing(1)}; - `, - }; -}; diff --git a/src/components/Collapse/Collapse.test.tsx b/src/components/Collapse/Collapse.test.tsx deleted file mode 100644 index 98549d9..0000000 --- a/src/components/Collapse/Collapse.test.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React from 'react'; -import { fireEvent, render, screen } from '@testing-library/react'; -import { Collapse } from './Collapse'; - -type Props = React.ComponentProps; - -/** - * In Test Ids - */ -const InTestIds = { - header: 'data-testid header', - content: 'data-testid content', - buttonRemove: 'data-testid button-remove', -}; - -describe('Collapse', () => { - /** - * Get Tested Component - */ - const getComponent = (props: Partial) => { - return ; - }; - - it('Should expand content', () => { - const { rerender } = render(getComponent({ isOpen: false })); - - expect(screen.queryByTestId(InTestIds.content)).not.toBeInTheDocument(); - - rerender(getComponent({ isOpen: true })); - - expect(screen.getByTestId(InTestIds.content)).toBeInTheDocument(); - }); - - it('Actions should not affect collapse state', () => { - const onToggle = jest.fn(); - - render(getComponent({ onToggle, actions: })); - - fireEvent.click(screen.getByTestId(InTestIds.buttonRemove)); - - expect(onToggle).not.toHaveBeenCalled(); - }); -}); diff --git a/src/components/Collapse/Collapse.tsx b/src/components/Collapse/Collapse.tsx deleted file mode 100644 index dae055f..0000000 --- a/src/components/Collapse/Collapse.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import React from 'react'; -import { IconButton, useStyles2 } from '@grafana/ui'; -import { Styles } from './Collapse.styles'; - -/** - * Properties - */ -interface Props { - /** - * Title - */ - title?: React.ReactElement | string; - - /** - * Actions - */ - actions?: React.ReactElement; - - /** - * Children - */ - children?: React.ReactElement | string; - - /** - * Is Open? - */ - isOpen?: boolean; - - /** - * On Toggle - */ - onToggle?: () => void; - - /** - * Header Test Id - */ - headerTestId?: string; - - /** - * Content Test Id - */ - contentTestId?: string; -} - -/** - * Collapse - */ -export const Collapse: React.FC = ({ - title, - actions, - children, - isOpen = false, - onToggle, - headerTestId, - contentTestId, -}) => { - /** - * Styles - */ - const styles = useStyles2(Styles); - - return ( -
-
- -
{title}
- {actions && ( -
event.stopPropagation()}> - {actions} -
- )} -
- {isOpen && ( -
- {children} -
- )} -
- ); -}; diff --git a/src/components/Collapse/index.ts b/src/components/Collapse/index.ts deleted file mode 100644 index 5fda998..0000000 --- a/src/components/Collapse/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Collapse'; diff --git a/src/components/DatasetEditor/DatasetEditor.styles.ts b/src/components/DatasetEditor/DatasetEditor.styles.ts index eb88331..eb534da 100644 --- a/src/components/DatasetEditor/DatasetEditor.styles.ts +++ b/src/components/DatasetEditor/DatasetEditor.styles.ts @@ -4,7 +4,7 @@ import { GrafanaTheme2 } from '@grafana/data'; /** * Styles */ -export const Styles = (theme: GrafanaTheme2) => { +export const getStyles = (theme: GrafanaTheme2) => { return { root: css` margin-bottom: ${theme.spacing(2)}; diff --git a/src/components/DatasetEditor/DatasetEditor.test.tsx b/src/components/DatasetEditor/DatasetEditor.test.tsx index 1905640..f53ffbe 100644 --- a/src/components/DatasetEditor/DatasetEditor.test.tsx +++ b/src/components/DatasetEditor/DatasetEditor.test.tsx @@ -1,10 +1,11 @@ -import React from 'react'; +import { toDataFrame } from '@grafana/data'; import { act, fireEvent, render, screen, within } from '@testing-library/react'; import { getJestSelectors } from '@volkovlabs/jest-selectors'; +import React from 'react'; import { DragDropContext, DropResult } from 'react-beautiful-dnd'; -import { TestIds } from '../../constants'; + +import { TEST_IDS } from '../../constants'; import { DatasetEditor } from './DatasetEditor'; -import { toDataFrame } from '@grafana/data'; /** * Properties @@ -58,7 +59,7 @@ describe('Dataset Editor', () => { /** * Selectors */ - const getSelectors = getJestSelectors(TestIds.datasetEditor); + const getSelectors = getJestSelectors(TEST_IDS.datasetEditor); const selectors = getSelectors(screen); /** @@ -163,7 +164,7 @@ describe('Dataset Editor', () => { */ describe('Items order', () => { it('Should reorder items', async () => { - let onDragEndHandler: (result: DropResult) => void = () => {}; + let onDragEndHandler: (result: DropResult) => void = () => null; jest.mocked(DragDropContext).mockImplementation(({ children, onDragEnd }: any) => { onDragEndHandler = onDragEnd; return children; @@ -200,7 +201,7 @@ describe('Dataset Editor', () => { }); it('Should not reorder items if drop outside the list', async () => { - let onDragEndHandler: (result: DropResult) => void = () => {}; + let onDragEndHandler: (result: DropResult) => void = () => null; jest.mocked(DragDropContext).mockImplementation(({ children, onDragEnd }: any) => { onDragEndHandler = onDragEnd; return children; diff --git a/src/components/DatasetEditor/DatasetEditor.tsx b/src/components/DatasetEditor/DatasetEditor.tsx index 3a35f3f..729fe29 100644 --- a/src/components/DatasetEditor/DatasetEditor.tsx +++ b/src/components/DatasetEditor/DatasetEditor.tsx @@ -1,5 +1,7 @@ -import React, { useCallback, useMemo, useState } from 'react'; import { cx } from '@emotion/css'; +import { DataFrame, SelectableValue } from '@grafana/data'; +import { Button, Icon, IconButton, InlineField, InlineFieldRow, Select, useStyles2 } from '@grafana/ui'; +import React, { useCallback, useMemo, useState } from 'react'; import { DragDropContext, Draggable, @@ -8,12 +10,11 @@ import { DropResult, NotDraggingStyle, } from 'react-beautiful-dnd'; -import { Button, Icon, IconButton, InlineField, InlineFieldRow, Select, useStyles2 } from '@grafana/ui'; -import { DataFrame, SelectableValue } from '@grafana/data'; -import { TestIds } from '../../constants'; + +import { TEST_IDS } from '../../constants'; import { DatasetItem } from '../../types'; import { getDatasetItemUniqueName, reorder } from '../../utils'; -import { Styles } from './DatasetEditor.styles'; +import { getStyles } from './DatasetEditor.styles'; /** * Get Item Style @@ -58,7 +59,7 @@ export const DatasetEditor: React.FC = ({ value, onChange, data }) => { /** * Styles and Theme */ - const styles = useStyles2(Styles); + const styles = useStyles2(getStyles); /** * States @@ -127,7 +128,7 @@ export const DatasetEditor: React.FC = ({ value, onChange, data }) => { }, [items, newItem, onChangeItems]); return ( -
+
{(provided) => ( @@ -145,7 +146,7 @@ export const DatasetEditor: React.FC = ({ value, onChange, data }) => { {...provided.dragHandleProps} style={getItemStyle(snapshot.isDragging, provided.draggableProps.style)} className={styles.item} - data-testid={TestIds.datasetEditor.item(getDatasetItemUniqueName(item))} + data-testid={TEST_IDS.datasetEditor.item(getDatasetItemUniqueName(item))} >
@@ -169,7 +170,7 @@ export const DatasetEditor: React.FC = ({ value, onChange, data }) => { ) ) } - data-testid={TestIds.datasetEditor.buttonRemove} + data-testid={TEST_IDS.datasetEditor.buttonRemove} /> = ({ value, onChange, data }) => { - + { if (event.value) { onChange(getSeriesWithNewType(value, event.value)); } }} - aria-label={TestIds.seriesEditor.fieldType} + aria-label={TEST_IDS.seriesEditor.fieldType} /> @@ -70,7 +71,7 @@ export const SeriesItemEditor: React.FC = ({ value, onChange, dataset }) name: event.currentTarget.value, }); }} - data-testid={TestIds.seriesEditor.fieldName} + data-testid={TEST_IDS.seriesEditor.fieldName} /> @@ -96,7 +97,7 @@ export const SeriesItemEditor: React.FC = ({ value, onChange, dataset }) }, }); }} - aria-label={TestIds.seriesEditor.fieldEncodeY} + aria-label={TEST_IDS.seriesEditor.fieldEncodeY} /> @@ -120,7 +121,7 @@ export const SeriesItemEditor: React.FC = ({ value, onChange, dataset }) }, }); }} - aria-label={TestIds.seriesEditor.fieldEncodeX} + aria-label={TEST_IDS.seriesEditor.fieldEncodeX} /> diff --git a/src/components/VisualEditor/VisualEditor.test.tsx b/src/components/VisualEditor/VisualEditor.test.tsx index 7a38972..2ea0ce8 100644 --- a/src/components/VisualEditor/VisualEditor.test.tsx +++ b/src/components/VisualEditor/VisualEditor.test.tsx @@ -1,9 +1,10 @@ -import React from 'react'; +import { toDataFrame } from '@grafana/data'; import { fireEvent, render, screen } from '@testing-library/react'; import { getJestSelectors } from '@volkovlabs/jest-selectors'; -import { TestIds } from '../../constants'; +import React from 'react'; + +import { TEST_IDS } from '../../constants'; import { VisualEditor } from './VisualEditor'; -import { toDataFrame } from '@grafana/data'; /** * Properties @@ -30,8 +31,8 @@ describe('Visual Editor', () => { /** * Selectors */ - const seriesEditorSelectors = getJestSelectors(TestIds.seriesEditor)(screen); - const datasetEditorSelectors = getJestSelectors(TestIds.datasetEditor)(screen); + const seriesEditorSelectors = getJestSelectors(TEST_IDS.seriesEditor)(screen); + const datasetEditorSelectors = getJestSelectors(TEST_IDS.datasetEditor)(screen); /** * Data diff --git a/src/components/VisualEditor/VisualEditor.tsx b/src/components/VisualEditor/VisualEditor.tsx index 312d859..47fdb1f 100644 --- a/src/components/VisualEditor/VisualEditor.tsx +++ b/src/components/VisualEditor/VisualEditor.tsx @@ -1,6 +1,7 @@ -import React from 'react'; import { StandardEditorProps } from '@grafana/data'; import { Label } from '@grafana/ui'; +import React from 'react'; + import { VisualEditorOptions } from '../../types'; import { DatasetEditor } from '../DatasetEditor'; import { SeriesEditor } from '../SeriesEditor'; @@ -8,7 +9,7 @@ import { SeriesEditor } from '../SeriesEditor'; /** * Properties */ -interface Props extends StandardEditorProps {} +type Props = StandardEditorProps /** * Visual Editor diff --git a/src/components/index.ts b/src/components/index.ts index d57a976..3b98d3d 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -1,3 +1,3 @@ -export * from './EChartsEditor'; -export * from './EChartsPanel'; +export * from './EchartsEditor'; +export * from './EchartsPanel'; export * from './VisualEditor'; diff --git a/src/constants/default.ts b/src/constants/default.ts index ba4474f..923b081 100644 --- a/src/constants/default.ts +++ b/src/constants/default.ts @@ -6,10 +6,10 @@ import { Map } from './maps'; /** * ECharts Example */ -const getOption = `const series = data.series.map((s) => { +const GET_OPTION = `const series = data.series.map((s) => { const sData = s.fields.find((f) => f.type === 'number').values.buffer || s.fields.find((f) => f.type === 'number').values; const sTime = s.fields.find((f) => f.type === 'time').values.buffer || s.fields.find((f) => f.type === 'time').values; - + return { name: s.refId, type: 'line', @@ -84,7 +84,7 @@ return { series, };`; -const visualEditorCode = `console.log(context); +const VISUAL_EDITOR_CODE = `console.log(context); return { dataset: context.editor.dataset, series: context.editor.series, @@ -101,8 +101,8 @@ return { /** * Default Options */ -export const DefaultOptions: PanelOptions = { - getOption, +export const DEFAULT_OPTIONS: PanelOptions = { + getOption: GET_OPTION, renderer: Renderer.CANVAS, themeEditor: { name: Theme.DEFAULT, config: '{}', height: 400 }, editor: { height: 600, format: Format.AUTO }, @@ -122,7 +122,7 @@ export const DefaultOptions: PanelOptions = { visualEditor: { dataset: [], series: [], - code: visualEditorCode, + code: VISUAL_EDITOR_CODE, codeHeight: 600, }, }; diff --git a/src/constants/echarts.ts b/src/constants/echarts.ts index 204331b..8b588c1 100644 --- a/src/constants/echarts.ts +++ b/src/constants/echarts.ts @@ -17,7 +17,7 @@ export enum Theme { /** * Theme options */ -export const ThemeOptions = [ +export const THEME_OPTIONS = [ { value: Theme.DEFAULT, label: 'Default', description: 'Default ECharts theme' }, { value: Theme.CUSTOM, label: 'Custom', description: 'Ability to use custom ECharts theme' }, ]; @@ -25,7 +25,7 @@ export const ThemeOptions = [ /** * Renderer Options */ -export const RendererOptions = [ +export const RENDERER_OPTIONS = [ { value: Renderer.CANVAS, label: 'Canvas', description: 'More suitable for charts with a large number of elements.' }, { value: Renderer.SVG, label: 'SVG', description: 'Has less memory usage, no blur when using the browser zoom.' }, ]; diff --git a/src/constants/editor.ts b/src/constants/editor.ts index b4e5d48..b10dfac 100644 --- a/src/constants/editor.ts +++ b/src/constants/editor.ts @@ -36,7 +36,7 @@ export enum EditorMode { /** * Editor Mode Options */ -export const EditorModeOptions = [ +export const EDITOR_MODE_OPTIONS = [ { value: EditorMode.CODE, label: 'Code' }, { value: EditorMode.VISUAL, label: 'Visual' }, ]; @@ -44,7 +44,7 @@ export const EditorModeOptions = [ /** * Format Options */ -export const FormatOptions = [ +export const FORMAT_OPTIONS = [ { value: Format.AUTO, label: 'Auto' }, { value: Format.NONE, label: 'Disabled' }, ]; @@ -52,7 +52,7 @@ export const FormatOptions = [ /** * Suggestions */ -export const CodeEditorSuggestions: CodeEditorSuggestionItem[] = [ +export const CODE_EDITOR_SUGGESTIONS: CodeEditorSuggestionItem[] = [ { label: 'data', kind: CodeEditorSuggestionItemKind.Property, @@ -143,7 +143,7 @@ export const CodeEditorSuggestions: CodeEditorSuggestionItem[] = [ /** * Visual Code Editor Suggestions */ -export const VisualCodeEditorSuggestions: CodeEditorSuggestionItem[] = [ +export const VISUAL_CODE_EDITOR_SUGGESTIONS: CodeEditorSuggestionItem[] = [ { label: 'context.editor', kind: CodeEditorSuggestionItemKind.Property, diff --git a/src/constants/maps.ts b/src/constants/maps.ts index c328a17..a46965b 100644 --- a/src/constants/maps.ts +++ b/src/constants/maps.ts @@ -12,7 +12,7 @@ export enum Map { /** * Map Extensions Options */ -export const MapOptions = [ +export const MAP_OPTIONS = [ { value: Map.BMAP, label: 'Baidu', description: 'Requires Baidu Maps.' }, { value: Map.AMAP, label: 'Gaode', description: 'Requires Gaode Maps.' }, { value: Map.GMAP, label: 'Google', description: 'Requires Google Maps.' }, @@ -23,7 +23,7 @@ export const MapOptions = [ /** * API */ -export const MapApi = { +export const MAP_API = { baidu: 'https://api.map.baidu.com/api', gaode: 'https://webapi.amap.com/maps', google: 'https://maps.googleapis.com/maps/api/js', diff --git a/src/constants/tests.ts b/src/constants/tests.ts index 9b337b7..44367ca 100644 --- a/src/constants/tests.ts +++ b/src/constants/tests.ts @@ -1,7 +1,7 @@ /** * Tests Identifiers */ -export const TestIds = { +export const TEST_IDS = { panel: { chart: 'data-testid chart', error: 'data-testid chart error', diff --git a/src/constants/visual-editor.ts b/src/constants/visual-editor.ts index ecfa87e..f37306b 100644 --- a/src/constants/visual-editor.ts +++ b/src/constants/visual-editor.ts @@ -1,6 +1,6 @@ import { SeriesType } from '../types'; -export const SeriesTypeOptions = Object.values(SeriesType).map((type) => ({ +export const SERIES_TYPE_OPTIONS = Object.values(SeriesType).map((type) => ({ label: type.charAt(0).toUpperCase() + type.slice(1), value: type, })); diff --git a/src/maps.test.ts b/src/maps.test.ts index fa6d7ef..ac24464 100644 --- a/src/maps.test.ts +++ b/src/maps.test.ts @@ -1,4 +1,4 @@ -import { MapApi } from './constants'; +import { MAP_API } from './constants'; import { loadBaidu, loadGaode, loadGoogle } from './maps'; /** @@ -25,7 +25,7 @@ describe('Maps', () => { expect(document.body.appendChild).toBeCalledWith( expect.objectContaining({ - src: expect.stringContaining(MapApi.baidu), + src: expect.stringContaining(MAP_API.baidu), }) ); expect(document.body.appendChild).toBeCalledWith( @@ -60,7 +60,7 @@ describe('Maps', () => { expect(document.body.appendChild).toBeCalledWith( expect.objectContaining({ - src: expect.stringContaining(MapApi.gaode), + src: expect.stringContaining(MAP_API.gaode), }) ); expect(document.body.appendChild).toBeCalledWith( @@ -95,7 +95,7 @@ describe('Maps', () => { expect(document.body.appendChild).toBeCalledWith( expect.objectContaining({ - src: expect.stringContaining(MapApi.google), + src: expect.stringContaining(MAP_API.google), }) ); expect(document.body.appendChild).toBeCalledWith( diff --git a/src/maps.ts b/src/maps.ts index 748293b..dfc22df 100644 --- a/src/maps.ts +++ b/src/maps.ts @@ -1,5 +1,6 @@ import * as echarts from 'echarts'; -import { MapApi } from './constants'; + +import { MAP_API } from './constants'; import { BaiduOptions, GaodeOptions, GoogleOptions } from './types'; /** @@ -21,13 +22,13 @@ export const registerMaps = () => { * Load Baidu Maps */ export const loadBaidu = (options: BaiduOptions) => { - if ((window as any).BMap) { + if (window.BMap) { return; } const script = document.createElement('script'); script.type = 'text/javascript'; - script.src = `${MapApi.baidu}?v=3.0&ak=${options.key}&callback=${options.callback}`; + script.src = `${MAP_API.baidu}?v=3.0&ak=${options.key}&callback=${options.callback}`; document.body.appendChild(script); }; @@ -36,13 +37,13 @@ export const loadBaidu = (options: BaiduOptions) => { * Load Gaode Maps */ export const loadGaode = (options: GaodeOptions) => { - if ((window as any).AMap) { + if (window.AMap) { return; } const script = document.createElement('script'); script.type = 'text/javascript'; - script.src = `${MapApi.gaode}?v=1.4.15&ak=${options.key}&plugin=${options.plugin}`; + script.src = `${MAP_API.gaode}?v=1.4.15&ak=${options.key}&plugin=${options.plugin}`; document.body.appendChild(script); }; @@ -57,7 +58,7 @@ export const loadGoogle = (options: GoogleOptions) => { const script = document.createElement('script'); script.type = 'text/javascript'; - script.src = `${MapApi.google}?key=${options.key}&callback=${options.callback}`; + script.src = `${MAP_API.google}?key=${options.key}&callback=${options.callback}`; document.body.appendChild(script); }; diff --git a/src/module.test.ts b/src/module.test.ts index 8d7c515..b019ad1 100644 --- a/src/module.test.ts +++ b/src/module.test.ts @@ -1,4 +1,5 @@ import { PanelPlugin } from '@grafana/data'; + import { Map, Theme } from './constants'; import { plugin } from './module'; diff --git a/src/module.ts b/src/module.ts index ccf68ac..a2e506f 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1,23 +1,24 @@ import { PanelPlugin } from '@grafana/data'; -import { EChartsEditor, EChartsPanel, VisualEditor } from './components'; + +import { EchartsEditor, EchartsPanel, VisualEditor } from './components'; import { - DefaultOptions, + DEFAULT_OPTIONS, Editor, + EDITOR_MODE_OPTIONS, EditorMode, - EditorModeOptions, - FormatOptions, + FORMAT_OPTIONS, Map, - MapOptions, - RendererOptions, + MAP_OPTIONS, + RENDERER_OPTIONS, Theme, - ThemeOptions, + THEME_OPTIONS, } from './constants'; import { PanelOptions } from './types'; /** * Panel Plugin */ -export const plugin = new PanelPlugin(EChartsPanel) +export const plugin = new PanelPlugin(EchartsPanel) .setNoPadding() .setPanelOptions((builder) => { const isCodeEditor = (config: PanelOptions) => config.editorMode !== EditorMode.VISUAL; @@ -28,23 +29,23 @@ export const plugin = new PanelPlugin(EChartsPanel) path: 'renderer', name: 'Renderer', settings: { - options: RendererOptions, + options: RENDERER_OPTIONS, }, - defaultValue: DefaultOptions.renderer, + defaultValue: DEFAULT_OPTIONS.renderer, }) .addRadio({ path: 'map', name: 'Maps', settings: { - options: MapOptions, + options: MAP_OPTIONS, }, - defaultValue: DefaultOptions.map, + defaultValue: DEFAULT_OPTIONS.map, }) .addRadio({ path: 'themeEditor.name', name: 'Theme', settings: { - options: ThemeOptions, + options: THEME_OPTIONS, }, defaultValue: Theme.DEFAULT, }); @@ -58,7 +59,7 @@ export const plugin = new PanelPlugin(EChartsPanel) name: 'Access Key', description: 'Set Access Key to use Baidu Maps. You can get it from https://lbsyun.baidu.com/apiconsole/key#/home', - defaultValue: DefaultOptions.baidu.key, + defaultValue: DEFAULT_OPTIONS.baidu.key, showIf: (config) => config.map === Map.BMAP, category: ['Baidu'], }) @@ -66,7 +67,7 @@ export const plugin = new PanelPlugin(EChartsPanel) path: 'baidu.callback', name: 'Callback', description: 'Name of the Callback function.', - defaultValue: DefaultOptions.baidu.callback, + defaultValue: DEFAULT_OPTIONS.baidu.callback, showIf: (config) => config.map === Map.BMAP, category: ['Baidu'], }); @@ -79,7 +80,7 @@ export const plugin = new PanelPlugin(EChartsPanel) path: 'gaode.key', name: 'Access Key', description: 'Set Access Key to use Gaode Maps. You can get it from https://console.amap.com/dev/key/app', - defaultValue: DefaultOptions.gaode.key, + defaultValue: DEFAULT_OPTIONS.gaode.key, showIf: (config) => config.map === Map.AMAP, category: ['Gaode'], }) @@ -87,7 +88,7 @@ export const plugin = new PanelPlugin(EChartsPanel) path: 'gaode.plugin', name: 'Plugins', description: 'Name of the Plugins to use.', - defaultValue: DefaultOptions.gaode.plugin, + defaultValue: DEFAULT_OPTIONS.gaode.plugin, showIf: (config) => config.map === Map.AMAP, category: ['Gaode'], }); @@ -101,7 +102,7 @@ export const plugin = new PanelPlugin(EChartsPanel) name: 'Access Key', description: 'Set Access Key to use Google Maps. You can get it from https://console.cloud.google.com/apis/credentials', - defaultValue: DefaultOptions.google.key, + defaultValue: DEFAULT_OPTIONS.google.key, showIf: (config) => config.map === Map.GMAP, category: ['Google'], }) @@ -109,7 +110,7 @@ export const plugin = new PanelPlugin(EChartsPanel) path: 'google.callback', name: 'Callback', description: 'Name of the Callback function.', - defaultValue: DefaultOptions.google.callback, + defaultValue: DEFAULT_OPTIONS.google.callback, showIf: (config) => config.map === Map.GMAP, category: ['Google'], }); @@ -122,7 +123,7 @@ export const plugin = new PanelPlugin(EChartsPanel) name: 'Editor Mode', defaultValue: EditorMode.CODE, settings: { - options: EditorModeOptions, + options: EDITOR_MODE_OPTIONS, }, category: ['Editor'], }); @@ -135,7 +136,7 @@ export const plugin = new PanelPlugin(EChartsPanel) id: 'visualEditor', path: 'visualEditor', name: 'Visual Editor', - defaultValue: DefaultOptions.visualEditor, + defaultValue: DEFAULT_OPTIONS.visualEditor, editor: VisualEditor, category: ['Visual Editor'], showIf: isVisualEditor, @@ -143,7 +144,7 @@ export const plugin = new PanelPlugin(EChartsPanel) .addSliderInput({ path: 'visualEditor.codeHeight', name: 'Height, px', - defaultValue: DefaultOptions.visualEditor.codeHeight, + defaultValue: DEFAULT_OPTIONS.visualEditor.codeHeight, settings: { min: 100, max: 2000, @@ -156,8 +157,8 @@ export const plugin = new PanelPlugin(EChartsPanel) path: 'visualEditor.code', name: 'Function', description: 'Should return parameters and data for setOption() or an extended result object.', - defaultValue: DefaultOptions.visualEditor.code, - editor: EChartsEditor, + defaultValue: DEFAULT_OPTIONS.visualEditor.code, + editor: EchartsEditor, category: ['Visual Editor'], showIf: isVisualEditor, }); @@ -169,7 +170,7 @@ export const plugin = new PanelPlugin(EChartsPanel) .addSliderInput({ path: 'editor.height', name: 'Height, px', - defaultValue: DefaultOptions.editor.height, + defaultValue: DEFAULT_OPTIONS.editor.height, settings: { min: 100, max: 2000, @@ -181,9 +182,9 @@ export const plugin = new PanelPlugin(EChartsPanel) path: 'editor.format', name: 'Formatting', settings: { - options: FormatOptions, + options: FORMAT_OPTIONS, }, - defaultValue: DefaultOptions.editor.format, + defaultValue: DEFAULT_OPTIONS.editor.format, category: ['Code'], showIf: isCodeEditor, }) @@ -192,8 +193,8 @@ export const plugin = new PanelPlugin(EChartsPanel) path: 'getOption', name: 'Function', description: 'Should return parameters and data for setOption() or an extended result object.', - defaultValue: DefaultOptions.getOption, - editor: EChartsEditor, + defaultValue: DEFAULT_OPTIONS.getOption, + editor: EchartsEditor, category: ['Code'], showIf: isCodeEditor, }); @@ -205,7 +206,7 @@ export const plugin = new PanelPlugin(EChartsPanel) .addSliderInput({ path: 'themeEditor.height', name: 'Height, px', - defaultValue: DefaultOptions.themeEditor.height, + defaultValue: DEFAULT_OPTIONS.themeEditor.height, settings: { min: 100, max: 2000, @@ -218,8 +219,8 @@ export const plugin = new PanelPlugin(EChartsPanel) path: 'themeEditor.config', name: 'Configuration', description: 'Custom Theme from the Theme Builder.', - defaultValue: DefaultOptions.themeEditor.config, - editor: EChartsEditor, + defaultValue: DEFAULT_OPTIONS.themeEditor.config, + editor: EchartsEditor, category: ['Theme'], showIf: (config) => config.themeEditor.name === Theme.CUSTOM, }); diff --git a/src/types/editor.ts b/src/types/editor.ts index dd4d375..0ac9a62 100644 --- a/src/types/editor.ts +++ b/src/types/editor.ts @@ -1,4 +1,5 @@ import { EChartOption, EChartsOptionConfig } from 'echarts'; + import { Format } from '../constants'; /** diff --git a/src/types/visual-editor.ts b/src/types/visual-editor.ts index 057d843..79163d3 100644 --- a/src/types/visual-editor.ts +++ b/src/types/visual-editor.ts @@ -162,4 +162,4 @@ export interface VisualEditorOptions { /** * Series By Type */ -export type SeriesByType = Extract; +export type SeriesByType = Extract; diff --git a/src/utils/visual-editor.test.ts b/src/utils/visual-editor.test.ts index da28571..41dfb89 100644 --- a/src/utils/visual-editor.test.ts +++ b/src/utils/visual-editor.test.ts @@ -1,4 +1,5 @@ import { toDataFrame } from '@grafana/data'; + import { getDatasetSource } from './visual-editor'; describe('Visual Editor Utils', () => { diff --git a/src/utils/visual-editor.ts b/src/utils/visual-editor.ts index 6a9664c..66f5471 100644 --- a/src/utils/visual-editor.ts +++ b/src/utils/visual-editor.ts @@ -1,5 +1,6 @@ -import { v4 as uuidv4 } from 'uuid'; import { DataFrame } from '@grafana/data'; +import { v4 as uuidv4 } from 'uuid'; + import { DatasetItem, SeriesByType, SeriesItem, SeriesType } from '../types'; import { getFieldValues } from './data-frame'; @@ -31,7 +32,7 @@ export const getDatasetItemUniqueName = (item: DatasetItem) => { * @param items */ export const getDatasetSource = (frames: DataFrame[], items: DatasetItem[]): [string[], ...unknown[]] => { - const itemValuesMap = items.reduce((acc: Map, item) => { + const itemValuesMap = items.reduce((acc: Map, item) => { const frame = frames.find((frame) => item.source ? frame.refId === item.source : frame.fields.some((field) => field.name === item.name) ); @@ -61,8 +62,8 @@ export const getDatasetSource = (frames: DataFrame[], items: DatasetItem[]): [st * @param item * @param newType */ -export const getSeriesWithNewType = ( - item: SeriesItem, +export const getSeriesWithNewType = >( + item: TItem, newType: SeriesType ): SeriesByType => { const commonValues = {