diff --git a/.eslintrc b/.eslintrc
index af03540019..5f81ea8606 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -1,12 +1,26 @@
{
- "extends": ["@gravity-ui/eslint-config", "@gravity-ui/eslint-config/prettier"],
+ "extends": [
+ "@gravity-ui/eslint-config",
+ "@gravity-ui/eslint-config/import-order",
+ "@gravity-ui/eslint-config/prettier",
+ ],
"root": true,
"overrides": [
{
"files": ["config-overrides.js", "commitlint.config.js"],
"env": {
- "node": true
- }
- }
- ]
+ "node": true,
+ },
+ },
+ ],
+ "parserOptions": {
+ "project": "./tsconfig.json",
+ },
+ "rules": {
+ "import/consistent-type-specifier-style": ["error", "prefer-top-level"],
+ "@typescript-eslint/consistent-type-imports": [
+ "error",
+ {"prefer": "type-imports", "fixStyle": "separate-type-imports"},
+ ],
+ },
}
diff --git a/.husky/commit-msg b/.husky/commit-msg
index 8796e175e7..a78cc751d8 100755
--- a/.husky/commit-msg
+++ b/.husky/commit-msg
@@ -1,4 +1 @@
-#!/bin/sh
-. "$(dirname "$0")/_/husky.sh"
-
-npx commitlint --edit $1
\ No newline at end of file
+npx commitlint --edit $1
diff --git a/.husky/pre-commit b/.husky/pre-commit
index c37466e2b3..2312dc587f 100755
--- a/.husky/pre-commit
+++ b/.husky/pre-commit
@@ -1,4 +1 @@
-#!/bin/sh
-. "$(dirname "$0")/_/husky.sh"
-
-npx lint-staged
\ No newline at end of file
+npx lint-staged
diff --git a/.stylelintrc b/.stylelintrc
index 4fd50f6803..7e9b288436 100644
--- a/.stylelintrc
+++ b/.stylelintrc
@@ -5,7 +5,6 @@
"@gravity-ui/stylelint-config/prettier"
],
"rules": {
- "declaration-colon-space-after": "always-single-line",
"declaration-no-important": null
}
}
diff --git a/package-lock.json b/package-lock.json
index 47dde1c6bc..2c736bbf3c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,88 +8,88 @@
"name": "ydb-embedded-ui",
"version": "5.5.0",
"dependencies": {
+ "@bem-react/classname": "^1.6.0",
"@gravity-ui/axios-wrapper": "^1.4.1",
- "@gravity-ui/chartkit": "^4.23.0",
- "@gravity-ui/components": "^2.12.0",
- "@gravity-ui/date-utils": "^1.4.2",
- "@gravity-ui/i18n": "^1.2.0",
- "@gravity-ui/icons": "^2.8.1",
- "@gravity-ui/navigation": "^1.9.0",
- "@gravity-ui/paranoid": "^1.4.0",
- "@gravity-ui/react-data-table": "^1.2.0",
- "@gravity-ui/uikit": "^5.30.1",
+ "@gravity-ui/chartkit": "^5.2.2",
+ "@gravity-ui/components": "^3.4.1",
+ "@gravity-ui/date-utils": "^2.2.0",
+ "@gravity-ui/i18n": "^1.4.0",
+ "@gravity-ui/icons": "^2.9.1",
+ "@gravity-ui/navigation": "^2.7.0",
+ "@gravity-ui/paranoid": "^1.4.1",
+ "@gravity-ui/react-data-table": "^2.0.1",
+ "@gravity-ui/uikit": "^6.10.2",
"@gravity-ui/websql-autocomplete": "^8.0.2",
- "@reduxjs/toolkit": "^2.2.1",
- "axios": "^1.6.7",
- "bem-cn-lite": "^4.1.0",
+ "@reduxjs/toolkit": "^2.2.3",
+ "axios": "^1.6.8",
"colord": "^2.9.3",
"copy-to-clipboard": "^3.3.3",
"crc-32": "^1.2.2",
"history": "^4.10.1",
- "lodash": "^4.17.11",
- "monaco-editor": "^0.31.1",
+ "lodash": "^4.17.21",
+ "monaco-editor": "^0.44.0",
"numeral": "^2.0.6",
"path-to-regexp": "^3.0.0",
- "qs": "^6.11.0",
- "react-error-boundary": "^4.0.12",
+ "qs": "^6.12.0",
+ "react-error-boundary": "^4.0.13",
"react-helmet-async": "2.0.4",
"react-json-inspector": "^7.1.1",
- "react-list": "^0.8.11",
- "react-monaco-editor": "^0.47.0",
- "react-redux": "^7.2.6",
- "react-router": "^5.2.1",
- "react-router-dom": "^5.3.0",
+ "react-list": "^0.8.17",
+ "react-monaco-editor": "^0.55.0",
+ "react-redux": "^9.1.0",
+ "react-router": "^5.3.4",
+ "react-router-dom": "^5.3.4",
"react-split": "^2.0.14",
"redux": "^5.0.1",
"redux-location-state": "^2.8.2",
"tslib": "^2.6.2",
- "url": "^0.11.0",
+ "url": "^0.11.3",
"use-query-params": "^2.2.1",
"web-vitals": "^1.1.2",
- "ydb-ui-components": "^3.6.0"
+ "ydb-ui-components": "^4.0.0"
},
"devDependencies": {
- "@commitlint/cli": "^15.0.0",
- "@commitlint/config-conventional": "^15.0.0",
- "@gravity-ui/eslint-config": "^1.0.2",
- "@gravity-ui/prettier-config": "^1.0.1",
- "@gravity-ui/stylelint-config": "^1.0.1",
+ "@commitlint/cli": "^19.2.1",
+ "@commitlint/config-conventional": "^19.1.0",
+ "@gravity-ui/eslint-config": "^3.1.1",
+ "@gravity-ui/prettier-config": "^1.1.0",
+ "@gravity-ui/stylelint-config": "^4.0.1",
"@gravity-ui/tsconfig": "^1.0.0",
- "@playwright/test": "^1.31.1",
- "@testing-library/jest-dom": "^5.15.0",
- "@testing-library/react": "^11.2.7",
- "@testing-library/user-event": "^12.8.3",
- "@types/lodash": "^4.14.178",
- "@types/numeral": "^2.0.2",
- "@types/qs": "^6.9.7",
- "@types/react": "^17.0.58",
- "@types/react-dom": "^17.0.11",
- "@types/react-router": "^5.1.17",
- "@types/react-router-dom": "^5.3.2",
+ "@playwright/test": "^1.42.1",
+ "@testing-library/jest-dom": "^6.4.2",
+ "@testing-library/react": "^14.2.2",
+ "@testing-library/user-event": "^14.5.2",
+ "@types/jest": "^29.5.12",
+ "@types/lodash": "^4.17.0",
+ "@types/numeral": "^2.0.5",
+ "@types/qs": "^6.9.14",
+ "@types/react": "^18.2.73",
+ "@types/react-dom": "^18.2.23",
+ "@types/react-router": "^5.1.20",
+ "@types/react-router-dom": "^5.3.3",
"copyfiles": "^2.4.1",
- "eslint-config-prettier": "^8.3.0",
"http-proxy-middleware": "^2.0.6",
- "husky": "^7.0.4",
- "jest-transform-css": "^4.0.1",
- "lint-staged": "^12.3.7",
+ "husky": "^9.0.11",
+ "jest-transform-css": "^6.0.1",
+ "lint-staged": "^15.2.2",
"npm-run-all": "^4.1.5",
- "postcss": "^8.4.6",
- "prettier": "^2.5.1",
+ "postcss": "^8.4.38",
+ "prettier": "^3.2.5",
"prop-types": "^15.8.1",
- "react": "^17.0.2",
- "react-app-rewired": "^2.1.11",
- "react-dom": "^17.0.2",
+ "react": "^18.2.0",
+ "react-app-rewired": "^2.2.1",
+ "react-dom": "^18.2.0",
"react-scripts": "^5.0.1",
- "sass": "^1.32.8",
+ "sass": "^1.72.0",
"source-map-explorer": "^2.5.3",
- "stylelint": "^14.3.0",
- "ts-jest": "^28.0.7",
- "typescript": "^4.5.5"
+ "stylelint": "^15.0.0",
+ "ts-jest": "^29.1.2",
+ "typescript": "^5.4.3"
},
"peerDependencies": {
"prop-types": "^15.8.1",
- "react": "^17.0.2",
- "react-dom": "^17.0.2"
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
}
},
"node_modules/@aashutoshrathi/word-wrap": {
@@ -101,6 +101,25 @@
"node": ">=0.10.0"
}
},
+ "node_modules/@adobe/css-tools": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz",
+ "integrity": "sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==",
+ "dev": true
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/@apideck/better-ajv-errors": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz",
@@ -119,80 +138,18 @@
}
},
"node_modules/@babel/code-frame": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
- "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
+ "version": "7.24.2",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
+ "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==",
"dev": true,
"dependencies": {
- "@babel/highlight": "^7.23.4",
- "chalk": "^2.4.2"
+ "@babel/highlight": "^7.24.2",
+ "picocolors": "^1.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/code-frame/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/code-frame/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/code-frame/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/@babel/code-frame/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "node_modules/@babel/code-frame/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/code-frame/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/@babel/compat-data": {
"version": "7.23.5",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz",
@@ -203,26 +160,26 @@
}
},
"node_modules/@babel/core": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz",
- "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.16.0",
- "@babel/generator": "^7.16.0",
- "@babel/helper-compilation-targets": "^7.16.0",
- "@babel/helper-module-transforms": "^7.16.0",
- "@babel/helpers": "^7.16.0",
- "@babel/parser": "^7.16.0",
- "@babel/template": "^7.16.0",
- "@babel/traverse": "^7.16.0",
- "@babel/types": "^7.16.0",
- "convert-source-map": "^1.7.0",
+ "version": "7.24.3",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz",
+ "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==",
+ "dev": true,
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.24.2",
+ "@babel/generator": "^7.24.1",
+ "@babel/helper-compilation-targets": "^7.23.6",
+ "@babel/helper-module-transforms": "^7.23.3",
+ "@babel/helpers": "^7.24.1",
+ "@babel/parser": "^7.24.1",
+ "@babel/template": "^7.24.0",
+ "@babel/traverse": "^7.24.1",
+ "@babel/types": "^7.24.0",
+ "convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
- "json5": "^2.1.2",
- "semver": "^6.3.0",
- "source-map": "^0.5.0"
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
@@ -232,6 +189,12 @@
"url": "https://opencollective.com/babel"
}
},
+ "node_modules/@babel/core/node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true
+ },
"node_modules/@babel/core/node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -241,30 +204,21 @@
"semver": "bin/semver.js"
}
},
- "node_modules/@babel/core/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/@babel/eslint-parser": {
- "version": "7.16.3",
- "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.16.3.tgz",
- "integrity": "sha512-iB4ElZT0jAt7PKVaeVulOECdGe6UnmA/O0P9jlF5g5GBOwDVbna8AXhHRu4s27xQf6OkveyA8iTDv1jHdDejgQ==",
+ "version": "7.24.1",
+ "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.1.tgz",
+ "integrity": "sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==",
"dev": true,
"dependencies": {
- "eslint-scope": "^5.1.1",
+ "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1",
"eslint-visitor-keys": "^2.1.0",
- "semver": "^6.3.0"
+ "semver": "^6.3.1"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || >=14.0.0"
},
"peerDependencies": {
- "@babel/core": ">=7.11.0",
+ "@babel/core": "^7.11.0",
"eslint": "^7.5.0 || ^8.0.0"
}
},
@@ -278,14 +232,14 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
- "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
+ "version": "7.24.1",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz",
+ "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.23.6",
- "@jridgewell/gen-mapping": "^0.3.2",
- "@jridgewell/trace-mapping": "^0.3.17",
+ "@babel/types": "^7.24.0",
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1"
},
"engines": {
@@ -293,12 +247,12 @@
}
},
"node_modules/@babel/helper-annotate-as-pure": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
- "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
+ "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.18.6"
+ "@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -523,9 +477,9 @@
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
- "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
+ "version": "7.24.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz",
+ "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==",
"dev": true,
"engines": {
"node": ">=6.9.0"
@@ -645,28 +599,29 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.23.9",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz",
- "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==",
+ "version": "7.24.1",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz",
+ "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==",
"dev": true,
"dependencies": {
- "@babel/template": "^7.23.9",
- "@babel/traverse": "^7.23.9",
- "@babel/types": "^7.23.9"
+ "@babel/template": "^7.24.0",
+ "@babel/traverse": "^7.24.1",
+ "@babel/types": "^7.24.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/highlight": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
- "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
+ "version": "7.24.2",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz",
+ "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==",
"dev": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.22.20",
"chalk": "^2.4.2",
- "js-tokens": "^4.0.0"
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.0.0"
},
"engines": {
"node": ">=6.9.0"
@@ -735,9 +690,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.23.9",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz",
- "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==",
+ "version": "7.24.1",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz",
+ "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@@ -1206,12 +1161,12 @@
}
},
"node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz",
- "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==",
+ "version": "7.24.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz",
+ "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.24.0"
},
"engines": {
"node": ">=6.9.0"
@@ -1738,12 +1693,12 @@
}
},
"node_modules/@babel/plugin-transform-react-display-name": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz",
- "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==",
+ "version": "7.24.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz",
+ "integrity": "sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.0"
},
"engines": {
"node": ">=6.9.0"
@@ -1753,16 +1708,16 @@
}
},
"node_modules/@babel/plugin-transform-react-jsx": {
- "version": "7.20.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.13.tgz",
- "integrity": "sha512-MmTZx/bkUrfJhhYAYt3Urjm+h8DQGrPrnKQ94jLo7NLuOU+T89a7IByhKmrb8SKhrIYIQ0FN0CHMbnFRen4qNw==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz",
+ "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==",
"dev": true,
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/plugin-syntax-jsx": "^7.18.6",
- "@babel/types": "^7.20.7"
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-module-imports": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-jsx": "^7.23.3",
+ "@babel/types": "^7.23.4"
},
"engines": {
"node": ">=6.9.0"
@@ -1772,12 +1727,12 @@
}
},
"node_modules/@babel/plugin-transform-react-jsx-development": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz",
- "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz",
+ "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==",
"dev": true,
"dependencies": {
- "@babel/plugin-transform-react-jsx": "^7.18.6"
+ "@babel/plugin-transform-react-jsx": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1787,13 +1742,13 @@
}
},
"node_modules/@babel/plugin-transform-react-pure-annotations": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz",
- "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==",
+ "version": "7.24.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.1.tgz",
+ "integrity": "sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==",
"dev": true,
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.24.0"
},
"engines": {
"node": ">=6.9.0"
@@ -2101,17 +2056,17 @@
}
},
"node_modules/@babel/preset-react": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.0.tgz",
- "integrity": "sha512-d31IFW2bLRB28uL1WoElyro8RH5l6531XfxMtCeCmp6RVAF1uTfxxUA0LH1tXl+psZdwfmIbwoG4U5VwgbhtLw==",
+ "version": "7.24.1",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.1.tgz",
+ "integrity": "sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-validator-option": "^7.14.5",
- "@babel/plugin-transform-react-display-name": "^7.16.0",
- "@babel/plugin-transform-react-jsx": "^7.16.0",
- "@babel/plugin-transform-react-jsx-development": "^7.16.0",
- "@babel/plugin-transform-react-pure-annotations": "^7.16.0"
+ "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-validator-option": "^7.23.5",
+ "@babel/plugin-transform-react-display-name": "^7.24.1",
+ "@babel/plugin-transform-react-jsx": "^7.23.4",
+ "@babel/plugin-transform-react-jsx-development": "^7.22.5",
+ "@babel/plugin-transform-react-pure-annotations": "^7.24.1"
},
"engines": {
"node": ">=6.9.0"
@@ -2154,52 +2109,39 @@
"node": ">=6.9.0"
}
},
- "node_modules/@babel/runtime-corejs3": {
- "version": "7.17.2",
- "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.2.tgz",
- "integrity": "sha512-NcKtr2epxfIrNM4VOmPKO46TvDMCBhgi2CrSHaEarrz+Plk2K5r9QemmOFTGpZaoKnWoGH5MO+CzeRsih/Fcgg==",
- "dev": true,
- "dependencies": {
- "core-js-pure": "^3.20.2",
- "regenerator-runtime": "^0.13.4"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
"node_modules/@babel/runtime/node_modules/regenerator-runtime": {
"version": "0.14.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
},
"node_modules/@babel/template": {
- "version": "7.23.9",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz",
- "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==",
+ "version": "7.24.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz",
+ "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.23.5",
- "@babel/parser": "^7.23.9",
- "@babel/types": "^7.23.9"
+ "@babel/parser": "^7.24.0",
+ "@babel/types": "^7.24.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.23.9",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz",
- "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==",
+ "version": "7.24.1",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz",
+ "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.23.5",
- "@babel/generator": "^7.23.6",
+ "@babel/code-frame": "^7.24.1",
+ "@babel/generator": "^7.24.1",
"@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.23.9",
- "@babel/types": "^7.23.9",
+ "@babel/parser": "^7.24.1",
+ "@babel/types": "^7.24.0",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -2208,9 +2150,9 @@
}
},
"node_modules/@babel/types": {
- "version": "7.23.9",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz",
- "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==",
+ "version": "7.24.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz",
+ "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==",
"dev": true,
"dependencies": {
"@babel/helper-string-parser": "^7.23.4",
@@ -2233,26 +2175,24 @@
"integrity": "sha512-SFBwUHMcb7TFFK5ld88+JhecoEun3/kHZ6KvLDjj3w5hv/tfRV8mtGHA8N42uMctXLF4bPEcr96xwXXcRFuweg=="
},
"node_modules/@commitlint/cli": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-15.0.0.tgz",
- "integrity": "sha512-Y5xmDCweytqzo4N4lOI2YRiuX35xTjcs8n5hUceBH8eyK0YbwtgWX50BJOH2XbkwEmII9blNhlBog6AdQsqicg==",
- "dev": true,
- "dependencies": {
- "@commitlint/format": "^15.0.0",
- "@commitlint/lint": "^15.0.0",
- "@commitlint/load": "^15.0.0",
- "@commitlint/read": "^15.0.0",
- "@commitlint/types": "^15.0.0",
- "lodash": "^4.17.19",
- "resolve-from": "5.0.0",
- "resolve-global": "1.0.0",
+ "version": "19.2.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.2.1.tgz",
+ "integrity": "sha512-cbkYUJsLqRomccNxvoJTyv5yn0bSy05BBizVyIcLACkRbVUqYorC351Diw/XFSWC/GtpwiwT2eOvQgFZa374bg==",
+ "dev": true,
+ "dependencies": {
+ "@commitlint/format": "^19.0.3",
+ "@commitlint/lint": "^19.1.0",
+ "@commitlint/load": "^19.2.0",
+ "@commitlint/read": "^19.2.1",
+ "@commitlint/types": "^19.0.3",
+ "execa": "^8.0.1",
"yargs": "^17.0.0"
},
"bin": {
"commitlint": "cli.js"
},
"engines": {
- "node": ">=v12"
+ "node": ">=v18"
}
},
"node_modules/@commitlint/cli/node_modules/cliui": {
@@ -2269,13 +2209,138 @@
"node": ">=12"
}
},
- "node_modules/@commitlint/cli/node_modules/resolve-from": {
+ "node_modules/@commitlint/cli/node_modules/execa": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^8.0.1",
+ "human-signals": "^5.0.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=16.17"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/@commitlint/cli/node_modules/get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+ "dev": true,
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@commitlint/cli/node_modules/human-signals": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">=16.17.0"
+ }
+ },
+ "node_modules/@commitlint/cli/node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@commitlint/cli/node_modules/mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@commitlint/cli/node_modules/npm-run-path": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+ "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@commitlint/cli/node_modules/onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@commitlint/cli/node_modules/path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@commitlint/cli/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@commitlint/cli/node_modules/strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@commitlint/cli/node_modules/wrap-ansi": {
@@ -2323,499 +2388,760 @@
}
},
"node_modules/@commitlint/config-conventional": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-15.0.0.tgz",
- "integrity": "sha512-eZBRL8Lk3hMNHp1wUMYj0qrZQEsST1ai7KHR8J1IDD9aHgT7L2giciibuQ+Og7vxVhR5WtYDvh9xirXFVPaSkQ==",
+ "version": "19.1.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.1.0.tgz",
+ "integrity": "sha512-KIKD2xrp6Uuk+dcZVj3++MlzIr/Su6zLE8crEDQCZNvWHNQSeeGbzOlNtsR32TUy6H3JbP7nWgduAHCaiGQ6EA==",
+ "dev": true,
+ "dependencies": {
+ "@commitlint/types": "^19.0.3",
+ "conventional-changelog-conventionalcommits": "^7.0.2"
+ },
+ "engines": {
+ "node": ">=v18"
+ }
+ },
+ "node_modules/@commitlint/config-validator": {
+ "version": "19.0.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.0.3.tgz",
+ "integrity": "sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q==",
"dev": true,
"dependencies": {
- "conventional-changelog-conventionalcommits": "^4.3.1"
+ "@commitlint/types": "^19.0.3",
+ "ajv": "^8.11.0"
},
"engines": {
- "node": ">=v12"
+ "node": ">=v18"
}
},
"node_modules/@commitlint/ensure": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-15.0.0.tgz",
- "integrity": "sha512-7DV4iNIald3vycwaWBNGk5FbonaNzOlU8nBe5m5AgU2dIeNKuXwLm+zzJzG27j0Ho56rgz//3F6RIvmsoxY9ZA==",
+ "version": "19.0.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.0.3.tgz",
+ "integrity": "sha512-SZEpa/VvBLoT+EFZVb91YWbmaZ/9rPH3ESrINOl0HD2kMYsjvl0tF7nMHh0EpTcv4+gTtZBAe1y/SS6/OhfZzQ==",
"dev": true,
"dependencies": {
- "@commitlint/types": "^15.0.0",
- "lodash": "^4.17.19"
+ "@commitlint/types": "^19.0.3",
+ "lodash.camelcase": "^4.3.0",
+ "lodash.kebabcase": "^4.1.1",
+ "lodash.snakecase": "^4.1.1",
+ "lodash.startcase": "^4.4.0",
+ "lodash.upperfirst": "^4.3.1"
},
"engines": {
- "node": ">=v12"
+ "node": ">=v18"
}
},
"node_modules/@commitlint/execute-rule": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-15.0.0.tgz",
- "integrity": "sha512-pyE4ApxjbWhb1TXz5vRiGwI2ssdMMgZbaaheZq1/7WC0xRnqnIhE1yUC1D2q20qPtvkZPstTYvMiRVtF+DvjUg==",
+ "version": "19.0.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.0.0.tgz",
+ "integrity": "sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw==",
"dev": true,
"engines": {
- "node": ">=v12"
+ "node": ">=v18"
}
},
"node_modules/@commitlint/format": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-15.0.0.tgz",
- "integrity": "sha512-bPhAfqwRhPk92WiuY0ktEJNpRRHSCd+Eg1MdhGyL9Bl3U25E5zvuInA+dNctnzZiOBSH/37ZaD0eOKCpQE6acg==",
+ "version": "19.0.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.0.3.tgz",
+ "integrity": "sha512-QjjyGyoiVWzx1f5xOteKHNLFyhyweVifMgopozSgx1fGNrGV8+wp7k6n1t6StHdJ6maQJ+UUtO2TcEiBFRyR6Q==",
"dev": true,
"dependencies": {
- "@commitlint/types": "^15.0.0",
- "chalk": "^4.0.0"
+ "@commitlint/types": "^19.0.3",
+ "chalk": "^5.3.0"
},
"engines": {
- "node": ">=v12"
+ "node": ">=v18"
}
},
"node_modules/@commitlint/format/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
"dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
"engines": {
- "node": ">=10"
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/@commitlint/is-ignored": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-15.0.0.tgz",
- "integrity": "sha512-edtnkf2QZ/7e/YCJDgn1WDw9wfF1WfOitW5YEoSOb4SxjJEb/oE87kxNPZ2j8mnDMuunspcMfGHeg6fRlwaEWg==",
+ "version": "19.0.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.0.3.tgz",
+ "integrity": "sha512-MqDrxJaRSVSzCbPsV6iOKG/Lt52Y+PVwFVexqImmYYFhe51iVJjK2hRhOG2jUAGiUHk4jpdFr0cZPzcBkSzXDQ==",
"dev": true,
"dependencies": {
- "@commitlint/types": "^15.0.0",
- "semver": "7.3.5"
+ "@commitlint/types": "^19.0.3",
+ "semver": "^7.6.0"
},
"engines": {
- "node": ">=v12"
+ "node": ">=v18"
}
},
"node_modules/@commitlint/lint": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-15.0.0.tgz",
- "integrity": "sha512-hUi2+Im/2dJ5FBvWnodypTkg+5haCgsDzB0fyMApWLUA1IucYUAqRCQCW5em1Mhk9Crw1pd5YzFNikhIclkqCw==",
+ "version": "19.1.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.1.0.tgz",
+ "integrity": "sha512-ESjaBmL/9cxm+eePyEr6SFlBUIYlYpI80n+Ltm7IA3MAcrmiP05UMhJdAD66sO8jvo8O4xdGn/1Mt2G5VzfZKw==",
"dev": true,
"dependencies": {
- "@commitlint/is-ignored": "^15.0.0",
- "@commitlint/parse": "^15.0.0",
- "@commitlint/rules": "^15.0.0",
- "@commitlint/types": "^15.0.0"
+ "@commitlint/is-ignored": "^19.0.3",
+ "@commitlint/parse": "^19.0.3",
+ "@commitlint/rules": "^19.0.3",
+ "@commitlint/types": "^19.0.3"
},
"engines": {
- "node": ">=v12"
+ "node": ">=v18"
}
},
"node_modules/@commitlint/load": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-15.0.0.tgz",
- "integrity": "sha512-Ak1YPeOhvxmY3ioe0o6m1yLGvUAYb4BdfGgShU8jiTCmU3Mnmms0Xh/kfQz8AybhezCC3AmVTyBLaBZxOHR8kg==",
- "dev": true,
- "dependencies": {
- "@commitlint/execute-rule": "^15.0.0",
- "@commitlint/resolve-extends": "^15.0.0",
- "@commitlint/types": "^15.0.0",
- "@endemolshinegroup/cosmiconfig-typescript-loader": "^3.0.2",
- "chalk": "^4.0.0",
- "cosmiconfig": "^7.0.0",
- "lodash": "^4.17.19",
- "resolve-from": "^5.0.0",
- "typescript": "^4.4.3"
+ "version": "19.2.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.2.0.tgz",
+ "integrity": "sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ==",
+ "dev": true,
+ "dependencies": {
+ "@commitlint/config-validator": "^19.0.3",
+ "@commitlint/execute-rule": "^19.0.0",
+ "@commitlint/resolve-extends": "^19.1.0",
+ "@commitlint/types": "^19.0.3",
+ "chalk": "^5.3.0",
+ "cosmiconfig": "^9.0.0",
+ "cosmiconfig-typescript-loader": "^5.0.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.merge": "^4.6.2",
+ "lodash.uniq": "^4.5.0"
},
"engines": {
- "node": ">=v12"
+ "node": ">=v18"
}
},
+ "node_modules/@commitlint/load/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
"node_modules/@commitlint/load/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+ "dev": true,
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@commitlint/load/node_modules/cosmiconfig": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
+ "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
"dev": true,
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "env-paths": "^2.2.1",
+ "import-fresh": "^3.3.0",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.2.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=14"
},
"funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "url": "https://github.com/sponsors/d-fischer"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.9.5"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
- "node_modules/@commitlint/load/node_modules/resolve-from": {
+ "node_modules/@commitlint/load/node_modules/cosmiconfig-typescript-loader": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.0.0.tgz",
+ "integrity": "sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==",
"dev": true,
+ "dependencies": {
+ "jiti": "^1.19.1"
+ },
"engines": {
- "node": ">=8"
+ "node": ">=v16"
+ },
+ "peerDependencies": {
+ "@types/node": "*",
+ "cosmiconfig": ">=8.2",
+ "typescript": ">=4"
+ }
+ },
+ "node_modules/@commitlint/load/node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
}
},
"node_modules/@commitlint/message": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-15.0.0.tgz",
- "integrity": "sha512-L8euabzboKavPuDJsdIYAY2wx97LbiGEYsckMo6NmV8pOun50c8hQx6ouXFSAx4pp+mX9yUGmMiVqfrk2LKDJQ==",
+ "version": "19.0.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.0.0.tgz",
+ "integrity": "sha512-c9czf6lU+9oF9gVVa2lmKaOARJvt4soRsVmbR7Njwp9FpbBgste5i7l/2l5o8MmbwGh4yE1snfnsy2qyA2r/Fw==",
"dev": true,
"engines": {
- "node": ">=v12"
+ "node": ">=v18"
}
},
"node_modules/@commitlint/parse": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-15.0.0.tgz",
- "integrity": "sha512-7fweM67tZfBNS7zw1KTuuT5K2u9nGytUJqFqT/1Ln3Na9cBCsoAqR47mfsNOTlRCgGwakm4xiQ7BpS2gN0OGuw==",
+ "version": "19.0.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.0.3.tgz",
+ "integrity": "sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA==",
"dev": true,
"dependencies": {
- "@commitlint/types": "^15.0.0",
- "conventional-changelog-angular": "^5.0.11",
- "conventional-commits-parser": "^3.2.2"
+ "@commitlint/types": "^19.0.3",
+ "conventional-changelog-angular": "^7.0.0",
+ "conventional-commits-parser": "^5.0.0"
},
"engines": {
- "node": ">=v12"
+ "node": ">=v18"
}
},
"node_modules/@commitlint/read": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-15.0.0.tgz",
- "integrity": "sha512-5yI1o2HKZFVe7RTjL7IhuhHMKar/MDNY34vEHqqz9gMI7BK/rdP8uVb4Di1efl2V0UPnwID0nPKWESjQ8Ti0gw==",
+ "version": "19.2.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.2.1.tgz",
+ "integrity": "sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw==",
"dev": true,
"dependencies": {
- "@commitlint/top-level": "^15.0.0",
- "@commitlint/types": "^15.0.0",
- "fs-extra": "^10.0.0",
- "git-raw-commits": "^2.0.0"
+ "@commitlint/top-level": "^19.0.0",
+ "@commitlint/types": "^19.0.3",
+ "execa": "^8.0.1",
+ "git-raw-commits": "^4.0.0",
+ "minimist": "^1.2.8"
},
"engines": {
- "node": ">=v12"
+ "node": ">=v18"
}
},
- "node_modules/@commitlint/resolve-extends": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-15.0.0.tgz",
- "integrity": "sha512-7apfRJjgJsKja7lHsPfEFixKjA/fk/UeD3owkOw1174yYu4u8xBDLSeU3IinGPdMuF9m245eX8wo7vLUy+EBSg==",
+ "node_modules/@commitlint/read/node_modules/execa": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
"dev": true,
"dependencies": {
- "import-fresh": "^3.0.0",
- "lodash": "^4.17.19",
- "resolve-from": "^5.0.0",
- "resolve-global": "^1.0.0"
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^8.0.1",
+ "human-signals": "^5.0.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^3.0.0"
},
"engines": {
- "node": ">=v12"
+ "node": ">=16.17"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
- "node_modules/@commitlint/resolve-extends/node_modules/resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "node_modules/@commitlint/read/node_modules/get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@commitlint/rules": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-15.0.0.tgz",
- "integrity": "sha512-SqXfp6QUlwBS+0IZm4FEA/NmmAwcFQIkG3B05BtemOVWXQdZ8j1vV6hDwvA9oMPCmUSrrGpHOtZK7HaHhng2yA==",
+ "node_modules/@commitlint/read/node_modules/human-signals": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
"dev": true,
- "dependencies": {
- "@commitlint/ensure": "^15.0.0",
- "@commitlint/message": "^15.0.0",
- "@commitlint/to-lines": "^15.0.0",
- "@commitlint/types": "^15.0.0",
- "execa": "^5.0.0"
- },
"engines": {
- "node": ">=v12"
+ "node": ">=16.17.0"
}
},
- "node_modules/@commitlint/to-lines": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-15.0.0.tgz",
- "integrity": "sha512-mY3MNA9ujPqVpiJjTYG9MDsYCobue5PJFO0MfcIzS1mCVvngH8ZFTPAh1fT5t+t1h876boS88+9WgqjRvbYItw==",
+ "node_modules/@commitlint/read/node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
"dev": true,
"engines": {
- "node": ">=v12"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@commitlint/top-level": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-15.0.0.tgz",
- "integrity": "sha512-7Gz3t7xcuuUw1d1Nou6YLaztzp2Em+qZ6YdCzrqYc+aquca3Vt0O696nuiBDU/oE+tls4Hx2CNpAbWhTgEwB5A==",
+ "node_modules/@commitlint/read/node_modules/mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
"dev": true,
- "dependencies": {
- "find-up": "^5.0.0"
- },
"engines": {
- "node": ">=v12"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@commitlint/top-level/node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "node_modules/@commitlint/read/node_modules/npm-run-path": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+ "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
"dev": true,
"dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
+ "path-key": "^4.0.0"
},
"engines": {
- "node": ">=10"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@commitlint/top-level/node_modules/locate-path": {
+ "node_modules/@commitlint/read/node_modules/onetime": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
"dev": true,
"dependencies": {
- "p-locate": "^5.0.0"
+ "mimic-fn": "^4.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@commitlint/top-level/node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "node_modules/@commitlint/read/node_modules/path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
"dev": true,
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
"engines": {
- "node": ">=10"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@commitlint/top-level/node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "node_modules/@commitlint/read/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"dev": true,
- "dependencies": {
- "p-limit": "^3.0.2"
+ "engines": {
+ "node": ">=14"
},
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@commitlint/read/node_modules/strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@commitlint/types": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-15.0.0.tgz",
- "integrity": "sha512-OMSLX+QJnyNoTwws54ULv9sOvuw9GdVezln76oyUd4YbMMJyaav62aSXDuCdWyL2sm9hTkSzyEi52PNaIj/vqw==",
+ "node_modules/@commitlint/resolve-extends": {
+ "version": "19.1.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.1.0.tgz",
+ "integrity": "sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==",
"dev": true,
"dependencies": {
- "chalk": "^4.0.0"
+ "@commitlint/config-validator": "^19.0.3",
+ "@commitlint/types": "^19.0.3",
+ "global-directory": "^4.0.1",
+ "import-meta-resolve": "^4.0.0",
+ "lodash.mergewith": "^4.6.2",
+ "resolve-from": "^5.0.0"
},
"engines": {
- "node": ">=v12"
+ "node": ">=v18"
}
},
- "node_modules/@commitlint/types/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/@commitlint/resolve-extends/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "node": ">=8"
}
},
- "node_modules/@csstools/normalize.css": {
- "version": "12.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz",
- "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==",
- "dev": true
- },
- "node_modules/@csstools/postcss-cascade-layers": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz",
- "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==",
+ "node_modules/@commitlint/rules": {
+ "version": "19.0.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.0.3.tgz",
+ "integrity": "sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw==",
"dev": true,
"dependencies": {
- "@csstools/selector-specificity": "^2.0.2",
- "postcss-selector-parser": "^6.0.10"
+ "@commitlint/ensure": "^19.0.3",
+ "@commitlint/message": "^19.0.0",
+ "@commitlint/to-lines": "^19.0.0",
+ "@commitlint/types": "^19.0.3",
+ "execa": "^8.0.1"
},
"engines": {
- "node": "^12 || ^14 || >=16"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- },
- "peerDependencies": {
- "postcss": "^8.2"
+ "node": ">=v18"
}
},
- "node_modules/@csstools/postcss-color-function": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz",
- "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==",
+ "node_modules/@commitlint/rules/node_modules/execa": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
"dev": true,
"dependencies": {
- "@csstools/postcss-progressive-custom-properties": "^1.1.0",
- "postcss-value-parser": "^4.2.0"
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^8.0.1",
+ "human-signals": "^5.0.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^3.0.0"
},
"engines": {
- "node": "^12 || ^14 || >=16"
+ "node": ">=16.17"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- },
- "peerDependencies": {
- "postcss": "^8.2"
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
- "node_modules/@csstools/postcss-font-format-keywords": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz",
- "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==",
+ "node_modules/@commitlint/rules/node_modules/get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
"dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
"engines": {
- "node": "^12 || ^14 || >=16"
+ "node": ">=16"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- },
- "peerDependencies": {
- "postcss": "^8.2"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@csstools/postcss-hwb-function": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz",
- "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==",
+ "node_modules/@commitlint/rules/node_modules/human-signals": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
"dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
"engines": {
- "node": "^12 || ^14 || >=16"
+ "node": ">=16.17.0"
+ }
+ },
+ "node_modules/@commitlint/rules/node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- },
- "peerDependencies": {
- "postcss": "^8.2"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@csstools/postcss-ic-unit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz",
- "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==",
+ "node_modules/@commitlint/rules/node_modules/mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
"dev": true,
- "dependencies": {
- "@csstools/postcss-progressive-custom-properties": "^1.1.0",
- "postcss-value-parser": "^4.2.0"
- },
"engines": {
- "node": "^12 || ^14 || >=16"
+ "node": ">=12"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- },
- "peerDependencies": {
- "postcss": "^8.2"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@csstools/postcss-is-pseudo-class": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz",
- "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==",
+ "node_modules/@commitlint/rules/node_modules/npm-run-path": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+ "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
"dev": true,
"dependencies": {
- "@csstools/selector-specificity": "^2.0.0",
- "postcss-selector-parser": "^6.0.10"
+ "path-key": "^4.0.0"
},
"engines": {
- "node": "^12 || ^14 || >=16"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- },
- "peerDependencies": {
- "postcss": "^8.2"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@csstools/postcss-nested-calc": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz",
- "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==",
+ "node_modules/@commitlint/rules/node_modules/onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
"dev": true,
"dependencies": {
- "postcss-value-parser": "^4.2.0"
+ "mimic-fn": "^4.0.0"
},
"engines": {
- "node": "^12 || ^14 || >=16"
+ "node": ">=12"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@commitlint/rules/node_modules/path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
},
- "peerDependencies": {
- "postcss": "^8.2"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@csstools/postcss-normalize-display-values": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz",
- "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==",
+ "node_modules/@commitlint/rules/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@commitlint/rules/node_modules/strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@commitlint/to-lines": {
+ "version": "19.0.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.0.0.tgz",
+ "integrity": "sha512-vkxWo+VQU5wFhiP9Ub9Sre0FYe019JxFikrALVoD5UGa8/t3yOJEpEhxC5xKiENKKhUkTpEItMTRAjHw2SCpZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=v18"
+ }
+ },
+ "node_modules/@commitlint/top-level": {
+ "version": "19.0.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.0.0.tgz",
+ "integrity": "sha512-KKjShd6u1aMGNkCkaX4aG1jOGdn7f8ZI8TR1VEuNqUOjWTOdcDSsmglinglJ18JTjuBX5I1PtjrhQCRcixRVFQ==",
"dev": true,
"dependencies": {
- "postcss-value-parser": "^4.2.0"
+ "find-up": "^7.0.0"
},
"engines": {
- "node": "^12 || ^14 || >=16"
+ "node": ">=v18"
+ }
+ },
+ "node_modules/@commitlint/top-level/node_modules/find-up": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz",
+ "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^7.2.0",
+ "path-exists": "^5.0.0",
+ "unicorn-magic": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=18"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@commitlint/top-level/node_modules/locate-path": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
+ "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^6.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@commitlint/top-level/node_modules/p-limit": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
+ "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^1.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@commitlint/top-level/node_modules/p-locate": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
+ "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@commitlint/top-level/node_modules/path-exists": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
+ "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ }
+ },
+ "node_modules/@commitlint/top-level/node_modules/yocto-queue": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
+ "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@commitlint/types": {
+ "version": "19.0.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.0.3.tgz",
+ "integrity": "sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==",
+ "dev": true,
+ "dependencies": {
+ "@types/conventional-commits-parser": "^5.0.0",
+ "chalk": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=v18"
+ }
+ },
+ "node_modules/@commitlint/types/node_modules/chalk": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+ "dev": true,
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@csstools/css-parser-algorithms": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.1.tgz",
+ "integrity": "sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "engines": {
+ "node": "^14 || ^16 || >=18"
},
"peerDependencies": {
- "postcss": "^8.2"
+ "@csstools/css-tokenizer": "^2.2.4"
}
},
- "node_modules/@csstools/postcss-oklab-function": {
+ "node_modules/@csstools/css-tokenizer": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.4.tgz",
+ "integrity": "sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "engines": {
+ "node": "^14 || ^16 || >=18"
+ }
+ },
+ "node_modules/@csstools/media-query-list-parser": {
+ "version": "2.1.9",
+ "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.9.tgz",
+ "integrity": "sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "engines": {
+ "node": "^14 || ^16 || >=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^2.6.1",
+ "@csstools/css-tokenizer": "^2.2.4"
+ }
+ },
+ "node_modules/@csstools/normalize.css": {
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz",
+ "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==",
+ "dev": true
+ },
+ "node_modules/@csstools/postcss-cascade-layers": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz",
- "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz",
+ "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==",
"dev": true,
"dependencies": {
- "@csstools/postcss-progressive-custom-properties": "^1.1.0",
- "postcss-value-parser": "^4.2.0"
+ "@csstools/selector-specificity": "^2.0.2",
+ "postcss-selector-parser": "^6.0.10"
},
"engines": {
"node": "^12 || ^14 || >=16"
@@ -2828,25 +3154,30 @@
"postcss": "^8.2"
}
},
- "node_modules/@csstools/postcss-progressive-custom-properties": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz",
- "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==",
+ "node_modules/@csstools/postcss-color-function": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz",
+ "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==",
"dev": true,
"dependencies": {
+ "@csstools/postcss-progressive-custom-properties": "^1.1.0",
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ },
"peerDependencies": {
- "postcss": "^8.3"
+ "postcss": "^8.2"
}
},
- "node_modules/@csstools/postcss-stepped-value-functions": {
+ "node_modules/@csstools/postcss-font-format-keywords": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz",
- "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz",
+ "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
@@ -2862,10 +3193,10 @@
"postcss": "^8.2"
}
},
- "node_modules/@csstools/postcss-text-decoration-shorthand": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz",
- "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==",
+ "node_modules/@csstools/postcss-hwb-function": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz",
+ "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
@@ -2881,16 +3212,17 @@
"postcss": "^8.2"
}
},
- "node_modules/@csstools/postcss-trigonometric-functions": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz",
- "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==",
+ "node_modules/@csstools/postcss-ic-unit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz",
+ "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==",
"dev": true,
"dependencies": {
+ "@csstools/postcss-progressive-custom-properties": "^1.1.0",
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^14 || >=16"
+ "node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
@@ -2900,11 +3232,15 @@
"postcss": "^8.2"
}
},
- "node_modules/@csstools/postcss-unset-value": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz",
- "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==",
+ "node_modules/@csstools/postcss-is-pseudo-class": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz",
+ "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==",
"dev": true,
+ "dependencies": {
+ "@csstools/selector-specificity": "^2.0.0",
+ "postcss-selector-parser": "^6.0.10"
+ },
"engines": {
"node": "^12 || ^14 || >=16"
},
@@ -2916,40 +3252,168 @@
"postcss": "^8.2"
}
},
- "node_modules/@csstools/selector-specificity": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz",
- "integrity": "sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==",
+ "node_modules/@csstools/postcss-nested-calc": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz",
+ "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==",
"dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
"engines": {
- "node": "^14 || ^16 || >=18"
+ "node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
- "postcss": "^8.4",
- "postcss-selector-parser": "^6.0.10"
+ "postcss": "^8.2"
}
},
- "node_modules/@endemolshinegroup/cosmiconfig-typescript-loader": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz",
- "integrity": "sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA==",
+ "node_modules/@csstools/postcss-normalize-display-values": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz",
+ "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==",
"dev": true,
"dependencies": {
- "lodash.get": "^4",
- "make-error": "^1",
- "ts-node": "^9",
- "tslib": "^2"
+ "postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": ">=10.0.0"
+ "node": "^12 || ^14 || >=16"
},
- "peerDependencies": {
- "cosmiconfig": ">=6"
- }
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2"
+ }
+ },
+ "node_modules/@csstools/postcss-oklab-function": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz",
+ "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==",
+ "dev": true,
+ "dependencies": {
+ "@csstools/postcss-progressive-custom-properties": "^1.1.0",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >=16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2"
+ }
+ },
+ "node_modules/@csstools/postcss-progressive-custom-properties": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz",
+ "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >=16"
+ },
+ "peerDependencies": {
+ "postcss": "^8.3"
+ }
+ },
+ "node_modules/@csstools/postcss-stepped-value-functions": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz",
+ "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >=16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2"
+ }
+ },
+ "node_modules/@csstools/postcss-text-decoration-shorthand": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz",
+ "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >=16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2"
+ }
+ },
+ "node_modules/@csstools/postcss-trigonometric-functions": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz",
+ "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^14 || >=16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2"
+ }
+ },
+ "node_modules/@csstools/postcss-unset-value": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz",
+ "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==",
+ "dev": true,
+ "engines": {
+ "node": "^12 || ^14 || >=16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2"
+ }
+ },
+ "node_modules/@csstools/selector-specificity": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz",
+ "integrity": "sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==",
+ "dev": true,
+ "engines": {
+ "node": "^14 || ^16 || >=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4",
+ "postcss-selector-parser": "^6.0.10"
+ }
},
"node_modules/@eslint-community/eslint-utils": {
"version": "4.4.0",
@@ -3075,96 +3539,111 @@
}
},
"node_modules/@gravity-ui/chartkit": {
- "version": "4.23.0",
- "resolved": "https://registry.npmjs.org/@gravity-ui/chartkit/-/chartkit-4.23.0.tgz",
- "integrity": "sha512-lshwcFKf8u5WvL2d2A+UFZ2XEYVF3XDlh5dfn+ui5h4x2Odapz6jC7bWvLU8zP1/ovmgbH4lUwJw2gSiIhmyQg==",
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/@gravity-ui/chartkit/-/chartkit-5.2.2.tgz",
+ "integrity": "sha512-2cTIshm23Vm2UCadUWZOaLLYCkGNsoP/l0M3tNs6sjkMrdu8XHNF4FB3ePHHJnbgO4vUy8hNyld5e/gi+jAwSw==",
"dependencies": {
"@bem-react/classname": "^1.6.0",
- "@gravity-ui/date-utils": "^1.4.2",
+ "@gravity-ui/date-utils": "^2.1.0",
+ "@gravity-ui/i18n": "^1.0.0",
"@gravity-ui/yagr": "^4.2.3",
"afterframe": "^1.0.2",
"d3": "^7.8.5",
"lodash": "^4.17.21",
- "react-split-pane": "^0.1.92"
+ "react-split-pane": "^0.1.92",
+ "tslib": "^2.6.2"
},
"peerDependencies": {
- "@gravity-ui/uikit": "^5.0.0",
+ "@gravity-ui/uikit": "^6.0.0",
"react": "^16.0.0 || ^17.0.0 || ^18.0.0"
}
},
"node_modules/@gravity-ui/components": {
- "version": "2.12.0",
- "resolved": "https://registry.npmjs.org/@gravity-ui/components/-/components-2.12.0.tgz",
- "integrity": "sha512-T1TZS+/BfApcYwQXEhlzoabiww70zzigv8yI3S//gaQg0Esrbtas5kq5BYR+K2YWblf8ldZgzTJK5IbO9YTMsg==",
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@gravity-ui/components/-/components-3.4.1.tgz",
+ "integrity": "sha512-fH/N8IIi6LaSvl2rSpO+Q2X+EKJi8FbP7jFrUA8dmGJqryx1ddJszYFAik5TxFnxhOU9j9fYvwVe8ulLfd4lfQ==",
"dependencies": {
"@bem-react/classname": "^1.6.0",
- "@gravity-ui/i18n": "^1.1.0",
- "@gravity-ui/icons": "^2.4.0",
+ "@gravity-ui/date-utils": "^2.1.0",
+ "@gravity-ui/i18n": "^1.2.0",
+ "@gravity-ui/icons": "^2.8.1",
"lodash": "^4.17.21",
"resize-observer-polyfill": "^1.5.1",
- "universal-cookie": "^6.1.1"
+ "universal-cookie": "^6.1.3"
},
"peerDependencies": {
- "@gravity-ui/uikit": "^5.12.0",
+ "@gravity-ui/uikit": "^6.0.0",
"react": "^16.0.0 || ^17.0.0 || ^18.0.0",
"react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0"
}
},
"node_modules/@gravity-ui/date-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/@gravity-ui/date-utils/-/date-utils-1.4.2.tgz",
- "integrity": "sha512-q966eCe6fJkVVYMixgDnpoWYahMvlJGxMymKipP9pkZPJKR9epmQ4RKdKFs+m8umosj8aIHrXH/aVMRveQKUCQ==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@gravity-ui/date-utils/-/date-utils-2.2.0.tgz",
+ "integrity": "sha512-OYz0QulIRiXy1b5lXAPNf5PUg9/a94CZJaEeXcEqIppnB2j6PCdQ4Id82R8J6Y8ohZ3g9DpAbP9Ngq9VbmaM0w==",
"dependencies": {
- "dayjs": "^1.11.7",
+ "dayjs": "1.11.10",
"lodash": "^4.17.0"
}
},
"node_modules/@gravity-ui/eslint-config": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@gravity-ui/eslint-config/-/eslint-config-1.0.2.tgz",
- "integrity": "sha512-988w7swpqZ8bwhPTNSVNvwJK3hJ4EBKA4dY7Sd0sTgXtjKLZhpff/I7Rncr76c8pgcXsvmHD2++kPnXe5oqx2Q==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@gravity-ui/eslint-config/-/eslint-config-3.1.1.tgz",
+ "integrity": "sha512-iOfvKASXHp+3XVtJxaBOJHWWXAM4yqnYNxK5EVzQXfnPC4ELNaNq0cww/8NaV8o3gpBGwi4r4C+YXFu2cc2AhA==",
"dev": true,
"dependencies": {
- "@babel/core": "7.16.0",
- "@babel/eslint-parser": "7.16.3",
- "@babel/preset-react": "7.16.0",
- "@typescript-eslint/eslint-plugin": "5.3.1",
- "@typescript-eslint/parser": "5.3.1",
- "eslint-config-prettier": "8.3.0",
- "eslint-plugin-prettier": "4.0.0",
- "eslint-plugin-react": "7.27.0",
- "eslint-plugin-react-hooks": "4.3.0",
- "eslint-plugin-security": "1.4.0"
+ "@babel/core": "^7.22.0",
+ "@babel/eslint-parser": "^7.22.0",
+ "@babel/preset-react": "^7.22.0",
+ "@typescript-eslint/eslint-plugin": "^6.4.1",
+ "@typescript-eslint/parser": "^6.4.1",
+ "eslint-config-prettier": "^9.0.0",
+ "eslint-import-resolver-typescript": "^3.6.0",
+ "eslint-plugin-import": "^2.28.1",
+ "eslint-plugin-jsx-a11y": "^6.7.1",
+ "eslint-plugin-prettier": "^5.0.0",
+ "eslint-plugin-react": "^7.33.2",
+ "eslint-plugin-react-hooks": "^4.6.0",
+ "eslint-plugin-security": "^1.7.1"
},
"peerDependencies": {
- "eslint": "^8.0.0"
+ "eslint": "^8.0.0",
+ "prettier": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "prettier": {
+ "optional": true
+ }
}
},
"node_modules/@gravity-ui/eslint-config/node_modules/@typescript-eslint/eslint-plugin": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.3.1.tgz",
- "integrity": "sha512-cFImaoIr5Ojj358xI/SDhjog57OK2NqlpxwdcgyxDA3bJlZcJq5CPzUXtpD7CxI2Hm6ATU7w5fQnnkVnmwpHqw==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz",
+ "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/experimental-utils": "5.3.1",
- "@typescript-eslint/scope-manager": "5.3.1",
- "debug": "^4.3.2",
- "functional-red-black-tree": "^1.0.1",
- "ignore": "^5.1.8",
- "regexpp": "^3.2.0",
- "semver": "^7.3.5",
- "tsutils": "^3.21.0"
+ "@eslint-community/regexpp": "^4.5.1",
+ "@typescript-eslint/scope-manager": "6.21.0",
+ "@typescript-eslint/type-utils": "6.21.0",
+ "@typescript-eslint/utils": "6.21.0",
+ "@typescript-eslint/visitor-keys": "6.21.0",
+ "debug": "^4.3.4",
+ "graphemer": "^1.4.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": {
@@ -3172,41 +3651,27 @@
}
}
},
- "node_modules/@gravity-ui/eslint-config/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/@gravity-ui/eslint-config/node_modules/@typescript-eslint/parser": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.3.1.tgz",
- "integrity": "sha512-TD+ONlx5c+Qhk21x9gsJAMRohWAUMavSOmJgv3JGy9dgPhuBd5Wok0lmMClZDyJNLLZK1JRKiATzCKZNUmoyfw==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz",
+ "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "5.3.1",
- "@typescript-eslint/types": "5.3.1",
- "@typescript-eslint/typescript-estree": "5.3.1",
- "debug": "^4.3.2"
+ "@typescript-eslint/scope-manager": "6.21.0",
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/typescript-estree": "6.21.0",
+ "@typescript-eslint/visitor-keys": "6.21.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": {
@@ -3215,29 +3680,56 @@
}
},
"node_modules/@gravity-ui/eslint-config/node_modules/@typescript-eslint/scope-manager": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.3.1.tgz",
- "integrity": "sha512-XksFVBgAq0Y9H40BDbuPOTUIp7dn4u8oOuhcgGq7EoDP50eqcafkMVGrypyVGvDYHzjhdUCUwuwVUK4JhkMAMg==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz",
+ "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.3.1",
- "@typescript-eslint/visitor-keys": "5.3.1"
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/visitor-keys": "6.21.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/@gravity-ui/eslint-config/node_modules/@typescript-eslint/type-utils": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz",
+ "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "6.21.0",
+ "@typescript-eslint/utils": "6.21.0",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
"node_modules/@gravity-ui/eslint-config/node_modules/@typescript-eslint/types": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.1.tgz",
- "integrity": "sha512-bG7HeBLolxKHtdHG54Uac750eXuQQPpdJfCYuw4ZI3bZ7+GgKClMWM8jExBtp7NSP4m8PmLRM8+lhzkYnSmSxQ==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz",
+ "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==",
"dev": true,
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^16.0.0 || >=18.0.0"
},
"funding": {
"type": "opencollective",
@@ -3245,21 +3737,22 @@
}
},
"node_modules/@gravity-ui/eslint-config/node_modules/@typescript-eslint/typescript-estree": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.1.tgz",
- "integrity": "sha512-PwFbh/PKDVo/Wct6N3w+E4rLZxUDgsoII/GrWM2A62ETOzJd4M6s0Mu7w4CWsZraTbaC5UQI+dLeyOIFF1PquQ==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz",
+ "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.3.1",
- "@typescript-eslint/visitor-keys": "5.3.1",
- "debug": "^4.3.2",
- "globby": "^11.0.4",
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/visitor-keys": "6.21.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
"is-glob": "^4.0.3",
- "semver": "^7.3.5",
- "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",
@@ -3271,82 +3764,61 @@
}
}
},
- "node_modules/@gravity-ui/eslint-config/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==",
+ "node_modules/@gravity-ui/eslint-config/node_modules/@typescript-eslint/utils": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz",
+ "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==",
"dev": true,
"dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@types/json-schema": "^7.0.12",
+ "@types/semver": "^7.5.0",
+ "@typescript-eslint/scope-manager": "6.21.0",
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/typescript-estree": "6.21.0",
+ "semver": "^7.5.4"
},
"engines": {
- "node": ">=10"
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
}
},
"node_modules/@gravity-ui/eslint-config/node_modules/@typescript-eslint/visitor-keys": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.1.tgz",
- "integrity": "sha512-3cHUzUuVTuNHx0Gjjt5pEHa87+lzyqOiHXy/Gz+SJOCW1mpw9xQHIIEwnKn+Thph1mgWyZ90nboOcSuZr/jTTQ==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz",
+ "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.3.1",
- "eslint-visitor-keys": "^3.0.0"
+ "@typescript-eslint/types": "6.21.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/@gravity-ui/eslint-config/node_modules/doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "node_modules/@gravity-ui/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": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
+ "balanced-match": "^1.0.0"
}
},
- "node_modules/@gravity-ui/eslint-config/node_modules/eslint-plugin-react": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.27.0.tgz",
- "integrity": "sha512-0Ut+CkzpppgFtoIhdzi2LpdpxxBvgFf99eFqWxJnUrO7mMe0eOiNpou6rvNYeVVV6lWZvTah0BFne7k5xHjARg==",
- "dev": true,
- "dependencies": {
- "array-includes": "^3.1.4",
- "array.prototype.flatmap": "^1.2.5",
- "doctrine": "^2.1.0",
- "estraverse": "^5.3.0",
- "jsx-ast-utils": "^2.4.1 || ^3.0.0",
- "minimatch": "^3.0.4",
- "object.entries": "^1.1.5",
- "object.fromentries": "^2.0.5",
- "object.hasown": "^1.1.0",
- "object.values": "^1.1.5",
- "prop-types": "^15.7.2",
- "resolve": "^2.0.0-next.3",
- "semver": "^6.3.0",
- "string.prototype.matchall": "^4.0.6"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
- }
- },
- "node_modules/@gravity-ui/eslint-config/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "node_modules/@gravity-ui/eslint-config/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -3355,135 +3827,112 @@
"url": "https://opencollective.com/eslint"
}
},
- "node_modules/@gravity-ui/eslint-config/node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/@gravity-ui/eslint-config/node_modules/resolve": {
- "version": "2.0.0-next.5",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
- "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
+ "node_modules/@gravity-ui/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": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
+ "brace-expansion": "^2.0.1"
},
- "bin": {
- "resolve": "bin/resolve"
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/@gravity-ui/eslint-config/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/@gravity-ui/i18n": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@gravity-ui/i18n/-/i18n-1.2.0.tgz",
- "integrity": "sha512-1FNZmbxeT3arwU2bv1p77u/K7rYoX4pGrXf0SNwg45HbbgI0XV0WapXbWr/GIB7EXdjiOvQ7kzXCfVIFV4ifYw=="
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@gravity-ui/i18n/-/i18n-1.4.0.tgz",
+ "integrity": "sha512-zeszlWxzZuqzX509Vnc3KujGqq9Ln5NKYRaIpgkF2/ODvZMsWToGtNV3MibtljN8moiCQCtVrmW50/oKiF2+qA=="
},
"node_modules/@gravity-ui/icons": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/@gravity-ui/icons/-/icons-2.8.1.tgz",
- "integrity": "sha512-cldaFAN3W2OAzEZBiurD7RsqyqGhS7xoVS9TC4DrOG9bXy8dWUvNEeeOnKgpIvZgAGFlTmg01BK6jMH0IFFSPw=="
+ "version": "2.9.1",
+ "resolved": "https://registry.npmjs.org/@gravity-ui/icons/-/icons-2.9.1.tgz",
+ "integrity": "sha512-0OH6YrVxFpHjk3x1f5GWlC+3Ek7LncNy95C9g94C13MhRtMRe0l/ZwSgbOmQ72lDxvQrmidt095Ft+mfID9XmQ==",
+ "peerDependencies": {
+ "react": "*"
+ },
+ "peerDependenciesMeta": {
+ "react": {
+ "optional": true
+ }
+ }
},
"node_modules/@gravity-ui/navigation": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@gravity-ui/navigation/-/navigation-1.9.0.tgz",
- "integrity": "sha512-0NweIUakKIvBR0TxjXr/NGp6FZIQaQbJcZomS436N9GCtkLUxQxDlpqjQ4QEHGdw3Mex25zXDsYaMHuZCxkiiA==",
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/@gravity-ui/navigation/-/navigation-2.7.0.tgz",
+ "integrity": "sha512-HsKB0GiiNQyBoMTv6YYzt7kkoSlalVxf+V/u4BVrNQsUijpIqrnO1/zG8tK2mBKFNSaehZ6rsbNQ5AOY4r697Q==",
"dependencies": {
- "@gravity-ui/i18n": "^1.1.0",
"react-transition-group": "^4.4.1",
"tslib": "^2.4.0"
},
"peerDependencies": {
"@bem-react/classname": "^1.6.0",
- "@gravity-ui/components": "^2.0.0",
+ "@gravity-ui/components": "^3.0.0",
"@gravity-ui/icons": "^2.2.0",
- "@gravity-ui/uikit": "^5.1.0",
+ "@gravity-ui/uikit": "^6.0.0",
"react": "^16.0.0 || ^17.0.0 || ^18.0.0",
"react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0"
}
},
"node_modules/@gravity-ui/paranoid": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@gravity-ui/paranoid/-/paranoid-1.4.0.tgz",
- "integrity": "sha512-Rubd4TNTbi6gYysMkz6rbLWRSaUjaoOWnJUYHonWBrBaGuDWY6sF/oDB4xFWxe64cLUuzi05y9PVuUshAFcs9Q==",
- "dependencies": {
- "copy-to-clipboard": "3.3.1",
- "fabric": "4.2.0",
- "resize-observer-polyfill": "1.5.1"
- }
- },
- "node_modules/@gravity-ui/paranoid/node_modules/copy-to-clipboard": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz",
- "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/@gravity-ui/paranoid/-/paranoid-1.4.1.tgz",
+ "integrity": "sha512-XXkUnSolGnTajnImPZyKeFmgotiaYOuYCbKItTDmsj3YS3GkCo7zfmUkClDYZgnXxN/KfnTlL4PXbTEGqf7SKA==",
"dependencies": {
- "toggle-selection": "^1.0.6"
+ "copy-to-clipboard": "^3.3.1",
+ "fabric": "^4.2.0",
+ "lodash": "^4.17.20",
+ "resize-observer-polyfill": "^1.5.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.12.0"
}
},
"node_modules/@gravity-ui/prettier-config": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@gravity-ui/prettier-config/-/prettier-config-1.0.1.tgz",
- "integrity": "sha512-VpTM+OiUMgXjwc7HBo0ekxBFghzELsnE/RFBYwbkbIqm0NrL4SiEPzne1IyEY/WsfI8om1hpn81t+qjGbicMSw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@gravity-ui/prettier-config/-/prettier-config-1.1.0.tgz",
+ "integrity": "sha512-Q97lMSOqdAf337qblkq06mLgK9OEEGglPAj8ncs3WnaZ2rBtOxtNsCIubv5U64TZkxaNPzxd7rDL24VIv1sxJg==",
"dev": true,
"peerDependencies": {
- "prettier": "^2.2.1"
+ "prettier": "*"
}
},
"node_modules/@gravity-ui/react-data-table": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@gravity-ui/react-data-table/-/react-data-table-1.2.0.tgz",
- "integrity": "sha512-+FzUT7KlNy3MrakMxRHWSRjhph01EkH6Oil4pFptdp2QNXBZlyr8Y5fMu6pzAybbPs/E/pFbrpBo3oxT1QGWYw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@gravity-ui/react-data-table/-/react-data-table-2.0.1.tgz",
+ "integrity": "sha512-b926wU0jHEJyLS28VnYLD88IICYqUI6ys1YEnM/+vIUcyJ/9fUP56xQFCrlLZnxbqww6TIXEQ9RC3GJ5qJwdaA==",
"dependencies": {
- "react-list": "0.8.16"
- },
- "peerDependencies": {
"@bem-react/classname": ">=1.6.0",
- "prop-types": ">=15.8.0",
- "react": ">=16.14.0"
- }
- },
- "node_modules/@gravity-ui/react-data-table/node_modules/react-list": {
- "version": "0.8.16",
- "resolved": "https://registry.npmjs.org/react-list/-/react-list-0.8.16.tgz",
- "integrity": "sha512-LSxfvdwB9Ip+E+8NBtLPW2pcIngzuV0rSoH9nMt9C2lFjZEbnoBY/ib/Zx121jPgFgg3xYkMlMXSzx5gaiP5ig==",
- "dependencies": {
- "prop-types": "15"
+ "react-list": "^0.8.17",
+ "tslib": "^2.6.2"
},
"peerDependencies": {
- "react": "0.14 || 15 || 16 || 17"
+ "react": ">=16.14.0"
}
},
"node_modules/@gravity-ui/stylelint-config": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@gravity-ui/stylelint-config/-/stylelint-config-1.0.1.tgz",
- "integrity": "sha512-vm2ST9/5BmSsw3IcuU6inQZ38wbY19dk4ePkPo1UUzcFB39AKW+7JBnHlnWuwzrv0VwYCk8wahDFm7zkwHDurw==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@gravity-ui/stylelint-config/-/stylelint-config-4.0.1.tgz",
+ "integrity": "sha512-Yn5gnfnLt46e0XqTAt41c7OTEMGVt2Cx7cLv1awTKYo7GLTyWuW3Ir7zx5N0J2QiC/LWfouwglOF+KqwVUkXug==",
"dev": true,
"dependencies": {
- "postcss-scss": "4.0.2",
- "stylelint-config-prettier": "9.0.3",
- "stylelint-order": "5.0.0",
- "stylelint-prettier": "2.0.0",
- "stylelint-scss": "4.0.0"
+ "postcss-scss": "^4.0.7",
+ "stylelint-order": "^6.0.3",
+ "stylelint-prettier": "^4.0.2",
+ "stylelint-scss": "^5.1.0"
},
"peerDependencies": {
"postcss": "^8.0.0",
- "stylelint": "^14.0.0"
+ "prettier": "^3.0.0",
+ "stylelint": "^15.8.0"
+ },
+ "peerDependenciesMeta": {
+ "prettier": {
+ "optional": true
+ }
}
},
"node_modules/@gravity-ui/tsconfig": {
@@ -3493,37 +3942,32 @@
"dev": true
},
"node_modules/@gravity-ui/uikit": {
- "version": "5.30.1",
- "resolved": "https://registry.npmjs.org/@gravity-ui/uikit/-/uikit-5.30.1.tgz",
- "integrity": "sha512-FWM1j8F37jzSPMzRA4UD/Xhst7JEYjGwVqCOCVim9F3uACjcQcBlE0LiFPUMeu8katl+6pDcFqG1DNZuvDFDHw==",
+ "version": "6.10.2",
+ "resolved": "https://registry.npmjs.org/@gravity-ui/uikit/-/uikit-6.10.2.tgz",
+ "integrity": "sha512-pa9rRJPMECbQnLUJRkHWJNHa+ym5awW33sGevJyYyWb9J3M8gzzqfcj+ZCQE89i1N8nRKPpcmh7VrZK+DNU0yg==",
"dependencies": {
"@bem-react/classname": "^1.6.0",
- "@gravity-ui/i18n": "^1.1.0",
- "@gravity-ui/icons": "^2.5.0",
+ "@gravity-ui/i18n": "^1.3.0",
+ "@gravity-ui/icons": "^2.8.1",
"@popperjs/core": "^2.11.8",
"blueimp-md5": "^2.19.0",
- "focus-trap": "^7.5.2",
+ "focus-trap": "^7.5.4",
"lodash": "^4.17.21",
+ "rc-slider": "^10.5.0",
"react-beautiful-dnd": "^13.1.1",
"react-copy-to-clipboard": "^5.1.0",
"react-popper": "^2.3.0",
"react-transition-group": "^4.4.5",
- "react-virtualized-auto-sizer": "^1.0.20",
- "react-window": "^1.8.9",
+ "react-virtualized-auto-sizer": "^1.0.21",
+ "react-window": "^1.8.10",
"tabbable": "^6.2.0",
- "tslib": "^2.6.1",
- "utility-types": "^3.10.0"
+ "tslib": "^2.6.2"
},
"peerDependencies": {
"react": "^16.0.0 || ^17.0.0 || ^18.0.0",
"react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/@gravity-ui/uikit/node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
- },
"node_modules/@gravity-ui/websql-autocomplete": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@gravity-ui/websql-autocomplete/-/websql-autocomplete-8.0.2.tgz",
@@ -3624,20 +4068,21 @@
}
},
"node_modules/@jest/console": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz",
- "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
+ "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
- "jest-message-util": "^28.1.3",
- "jest-util": "^28.1.3",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
"slash": "^3.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/console/node_modules/chalk": {
@@ -3645,6 +4090,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
+ "peer": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -3657,12 +4103,13 @@
}
},
"node_modules/@jest/console/node_modules/jest-util": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
- "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -3670,48 +4117,47 @@
"picomatch": "^2.2.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/core": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz",
- "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
+ "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/console": "^28.1.3",
- "@jest/reporters": "^28.1.3",
- "@jest/test-result": "^28.1.3",
- "@jest/transform": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/console": "^29.7.0",
+ "@jest/reporters": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.9",
- "jest-changed-files": "^28.1.3",
- "jest-config": "^28.1.3",
- "jest-haste-map": "^28.1.3",
- "jest-message-util": "^28.1.3",
- "jest-regex-util": "^28.0.2",
- "jest-resolve": "^28.1.3",
- "jest-resolve-dependencies": "^28.1.3",
- "jest-runner": "^28.1.3",
- "jest-runtime": "^28.1.3",
- "jest-snapshot": "^28.1.3",
- "jest-util": "^28.1.3",
- "jest-validate": "^28.1.3",
- "jest-watcher": "^28.1.3",
+ "jest-changed-files": "^29.7.0",
+ "jest-config": "^29.7.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-resolve-dependencies": "^29.7.0",
+ "jest-runner": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "jest-watcher": "^29.7.0",
"micromatch": "^4.0.4",
- "pretty-format": "^28.1.3",
- "rimraf": "^3.0.0",
+ "pretty-format": "^29.7.0",
"slash": "^3.0.0",
"strip-ansi": "^6.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
@@ -3740,70 +4186,70 @@
}
},
"node_modules/@jest/core/node_modules/jest-haste-map": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz",
- "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
+ "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/graceful-fs": "^4.1.3",
"@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
"graceful-fs": "^4.2.9",
- "jest-regex-util": "^28.0.2",
- "jest-util": "^28.1.3",
- "jest-worker": "^28.1.3",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
"micromatch": "^4.0.4",
"walker": "^1.0.8"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"optionalDependencies": {
"fsevents": "^2.3.2"
}
},
"node_modules/@jest/core/node_modules/jest-regex-util": {
- "version": "28.0.2",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz",
- "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
+ "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
"dev": true,
"peer": true,
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/core/node_modules/jest-resolve": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz",
- "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
+ "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
"dev": true,
"peer": true,
"dependencies": {
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^28.1.3",
+ "jest-haste-map": "^29.7.0",
"jest-pnp-resolver": "^1.2.2",
- "jest-util": "^28.1.3",
- "jest-validate": "^28.1.3",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
"resolve": "^1.20.0",
- "resolve.exports": "^1.1.0",
+ "resolve.exports": "^2.0.0",
"slash": "^3.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/core/node_modules/jest-util": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
- "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -3811,40 +4257,41 @@
"picomatch": "^2.2.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/core/node_modules/jest-validate": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz",
- "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
+ "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"camelcase": "^6.2.0",
"chalk": "^4.0.0",
- "jest-get-type": "^28.0.2",
+ "jest-get-type": "^29.6.3",
"leven": "^3.1.0",
- "pretty-format": "^28.1.3"
+ "pretty-format": "^29.7.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/core/node_modules/jest-worker": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz",
- "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
+ "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
"dev": true,
"peer": true,
"dependencies": {
"@types/node": "*",
+ "jest-util": "^29.7.0",
"merge-stream": "^2.0.0",
"supports-color": "^8.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/core/node_modules/jest-worker/node_modules/supports-color": {
@@ -3863,65 +4310,74 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
+ "node_modules/@jest/core/node_modules/resolve.exports": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
+ "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/@jest/environment": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz",
- "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
+ "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/fake-timers": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
- "jest-mock": "^28.1.3"
+ "jest-mock": "^29.7.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/expect": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz",
- "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
+ "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
"dev": true,
"peer": true,
"dependencies": {
- "expect": "^28.1.3",
- "jest-snapshot": "^28.1.3"
+ "expect": "^29.7.0",
+ "jest-snapshot": "^29.7.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/expect-utils": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz",
- "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
+ "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
"dev": true,
- "peer": true,
"dependencies": {
- "jest-get-type": "^28.0.2"
+ "jest-get-type": "^29.6.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/fake-timers": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz",
- "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
+ "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
- "@sinonjs/fake-timers": "^9.1.2",
+ "@jest/types": "^29.6.3",
+ "@sinonjs/fake-timers": "^10.0.2",
"@types/node": "*",
- "jest-message-util": "^28.1.3",
- "jest-mock": "^28.1.3",
- "jest-util": "^28.1.3"
+ "jest-message-util": "^29.7.0",
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/fake-timers/node_modules/chalk": {
@@ -3942,13 +4398,13 @@
}
},
"node_modules/@jest/fake-timers/node_modules/jest-util": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
- "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -3956,37 +4412,38 @@
"picomatch": "^2.2.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/globals": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz",
- "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
+ "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/environment": "^28.1.3",
- "@jest/expect": "^28.1.3",
- "@jest/types": "^28.1.3"
+ "@jest/environment": "^29.7.0",
+ "@jest/expect": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "jest-mock": "^29.7.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/reporters": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz",
- "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
+ "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
"dev": true,
"peer": true,
"dependencies": {
"@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^28.1.3",
- "@jest/test-result": "^28.1.3",
- "@jest/transform": "^28.1.3",
- "@jest/types": "^28.1.3",
- "@jridgewell/trace-mapping": "^0.3.13",
+ "@jest/console": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@jridgewell/trace-mapping": "^0.3.18",
"@types/node": "*",
"chalk": "^4.0.0",
"collect-v8-coverage": "^1.0.0",
@@ -3994,21 +4451,20 @@
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
"istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^5.1.0",
+ "istanbul-lib-instrument": "^6.0.0",
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.1.3",
- "jest-message-util": "^28.1.3",
- "jest-util": "^28.1.3",
- "jest-worker": "^28.1.3",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
"slash": "^3.0.0",
"string-length": "^4.0.1",
"strip-ansi": "^6.0.0",
- "terminal-link": "^2.0.0",
"v8-to-istanbul": "^9.0.1"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
@@ -4036,14 +4492,31 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
+ "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz",
+ "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@babel/core": "^7.23.9",
+ "@babel/parser": "^7.23.9",
+ "@istanbuljs/schema": "^0.1.3",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/@jest/reporters/node_modules/jest-util": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
- "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -4051,22 +4524,23 @@
"picomatch": "^2.2.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/reporters/node_modules/jest-worker": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz",
- "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
+ "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
"dev": true,
"peer": true,
"dependencies": {
"@types/node": "*",
+ "jest-util": "^29.7.0",
"merge-stream": "^2.0.0",
"supports-color": "^8.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/reporters/node_modules/jest-worker/node_modules/supports-color": {
@@ -4086,61 +4560,62 @@
}
},
"node_modules/@jest/schemas": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz",
- "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
+ "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
"dev": true,
"dependencies": {
- "@sinclair/typebox": "^0.24.1"
+ "@sinclair/typebox": "^0.27.8"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/source-map": {
- "version": "28.1.2",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz",
- "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
+ "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
"dev": true,
"peer": true,
"dependencies": {
- "@jridgewell/trace-mapping": "^0.3.13",
+ "@jridgewell/trace-mapping": "^0.3.18",
"callsites": "^3.0.0",
"graceful-fs": "^4.2.9"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/test-result": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz",
- "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
+ "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@jest/console": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/console": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"collect-v8-coverage": "^1.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/test-sequencer": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz",
- "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
+ "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/test-result": "^28.1.3",
+ "@jest/test-result": "^29.7.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^28.1.3",
+ "jest-haste-map": "^29.7.0",
"slash": "^3.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/test-sequencer/node_modules/chalk": {
@@ -4161,49 +4636,49 @@
}
},
"node_modules/@jest/test-sequencer/node_modules/jest-haste-map": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz",
- "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
+ "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/graceful-fs": "^4.1.3",
"@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
"graceful-fs": "^4.2.9",
- "jest-regex-util": "^28.0.2",
- "jest-util": "^28.1.3",
- "jest-worker": "^28.1.3",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
"micromatch": "^4.0.4",
"walker": "^1.0.8"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"optionalDependencies": {
"fsevents": "^2.3.2"
}
},
"node_modules/@jest/test-sequencer/node_modules/jest-regex-util": {
- "version": "28.0.2",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz",
- "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
+ "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
"dev": true,
"peer": true,
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/test-sequencer/node_modules/jest-util": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
- "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -4211,22 +4686,23 @@
"picomatch": "^2.2.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/test-sequencer/node_modules/jest-worker": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz",
- "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
+ "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
"dev": true,
"peer": true,
"dependencies": {
"@types/node": "*",
+ "jest-util": "^29.7.0",
"merge-stream": "^2.0.0",
"supports-color": "^8.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/test-sequencer/node_modules/jest-worker/node_modules/supports-color": {
@@ -4246,30 +4722,30 @@
}
},
"node_modules/@jest/transform": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz",
- "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
+ "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
"dev": true,
"peer": true,
"dependencies": {
"@babel/core": "^7.11.6",
- "@jest/types": "^28.1.3",
- "@jridgewell/trace-mapping": "^0.3.13",
+ "@jest/types": "^29.6.3",
+ "@jridgewell/trace-mapping": "^0.3.18",
"babel-plugin-istanbul": "^6.1.1",
"chalk": "^4.0.0",
- "convert-source-map": "^1.4.0",
- "fast-json-stable-stringify": "^2.0.0",
+ "convert-source-map": "^2.0.0",
+ "fast-json-stable-stringify": "^2.1.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^28.1.3",
- "jest-regex-util": "^28.0.2",
- "jest-util": "^28.1.3",
+ "jest-haste-map": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
"micromatch": "^4.0.4",
"pirates": "^4.0.4",
"slash": "^3.0.0",
- "write-file-atomic": "^4.0.1"
+ "write-file-atomic": "^4.0.2"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/transform/node_modules/chalk": {
@@ -4289,50 +4765,57 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
+ "node_modules/@jest/transform/node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "peer": true
+ },
"node_modules/@jest/transform/node_modules/jest-haste-map": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz",
- "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
+ "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/graceful-fs": "^4.1.3",
"@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
"graceful-fs": "^4.2.9",
- "jest-regex-util": "^28.0.2",
- "jest-util": "^28.1.3",
- "jest-worker": "^28.1.3",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
"micromatch": "^4.0.4",
"walker": "^1.0.8"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"optionalDependencies": {
"fsevents": "^2.3.2"
}
},
"node_modules/@jest/transform/node_modules/jest-regex-util": {
- "version": "28.0.2",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz",
- "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
+ "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
"dev": true,
"peer": true,
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/transform/node_modules/jest-util": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
- "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -4340,22 +4823,23 @@
"picomatch": "^2.2.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/transform/node_modules/jest-worker": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz",
- "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
+ "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
"dev": true,
"peer": true,
"dependencies": {
"@types/node": "*",
+ "jest-util": "^29.7.0",
"merge-stream": "^2.0.0",
"supports-color": "^8.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/transform/node_modules/jest-worker/node_modules/supports-color": {
@@ -4375,12 +4859,12 @@
}
},
"node_modules/@jest/types": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz",
- "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^28.1.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -4388,7 +4872,7 @@
"chalk": "^4.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/types/node_modules/chalk": {
@@ -4408,14 +4892,14 @@
}
},
"node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
- "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
"dev": true,
"dependencies": {
- "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
+ "@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
@@ -4431,9 +4915,9 @@
}
},
"node_modules/@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
"dev": true,
"engines": {
"node": ">=6.0.0"
@@ -4456,13 +4940,13 @@
"dev": true
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.17",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
- "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
"dev": true,
"dependencies": {
- "@jridgewell/resolve-uri": "3.1.0",
- "@jridgewell/sourcemap-codec": "1.4.14"
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"node_modules/@leichtgewicht/ip-codec": {
@@ -4491,6 +4975,15 @@
"node-pre-gyp": "bin/node-pre-gyp"
}
},
+ "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
+ "version": "5.1.1-v1",
+ "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
+ "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==",
+ "dev": true,
+ "dependencies": {
+ "eslint-scope": "5.1.1"
+ }
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -4526,35 +5019,31 @@
"node": ">= 8"
}
},
- "node_modules/@playwright/test": {
- "version": "1.31.1",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.31.1.tgz",
- "integrity": "sha512-IsytVZ+0QLDh1Hj83XatGp/GsI1CDJWbyDaBGbainsh0p2zC7F4toUocqowmjS6sQff2NGT3D9WbDj/3K2CJiA==",
+ "node_modules/@pkgr/core": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz",
+ "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==",
"dev": true,
- "dependencies": {
- "@types/node": "*",
- "playwright-core": "1.31.1"
- },
- "bin": {
- "playwright": "cli.js"
- },
"engines": {
- "node": ">=14"
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
},
- "optionalDependencies": {
- "fsevents": "2.3.2"
+ "funding": {
+ "url": "https://opencollective.com/unts"
}
},
- "node_modules/@playwright/test/node_modules/playwright-core": {
- "version": "1.31.1",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.31.1.tgz",
- "integrity": "sha512-JTyX4kV3/LXsvpHkLzL2I36aCdml4zeE35x+G5aPc4bkLsiRiQshU5lWeVpHFAuC8xAcbI6FDcw/8z3q2xtJSQ==",
+ "node_modules/@playwright/test": {
+ "version": "1.42.1",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.42.1.tgz",
+ "integrity": "sha512-Gq9rmS54mjBL/7/MvBaNOBwbfnh7beHvS6oS4srqXFcQHpQCV1+c8JXWE8VLPyRDhgS3H8x8A7hztqI9VnwrAQ==",
"dev": true,
+ "dependencies": {
+ "playwright": "1.42.1"
+ },
"bin": {
"playwright": "cli.js"
},
"engines": {
- "node": ">=14"
+ "node": ">=16"
}
},
"node_modules/@pmmmwh/react-refresh-webpack-plugin": {
@@ -4687,9 +5176,9 @@
}
},
"node_modules/@reduxjs/toolkit": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.2.1.tgz",
- "integrity": "sha512-8CREoqJovQW/5I4yvvijm/emUiCCmcs4Ev4XPWd4mizSO+dD3g5G6w34QK5AGeNrSH7qM8Fl66j4vuV7dpOdkw==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.2.3.tgz",
+ "integrity": "sha512-76dll9EnJXg4EVcI5YNxZA/9hSAmZsFqzMmNRHvIlzw2WS/twfcVX3ysYrWGJMClwEmChQFC4yRq74tn6fdzRA==",
"dependencies": {
"immer": "^10.0.3",
"redux": "^5.0.1",
@@ -4798,9 +5287,9 @@
"dev": true
},
"node_modules/@sinclair/typebox": {
- "version": "0.24.27",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.27.tgz",
- "integrity": "sha512-K7C7IlQ3zLePEZleUN21ceBA2aLcMnLHTLph8QWk1JK37L90obdpY+QGY8bXMKxf1ht1Z0MNewvXxWv0oGDYFg==",
+ "version": "0.27.8",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
+ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
"dev": true
},
"node_modules/@sinonjs/commons": {
@@ -4813,13 +5302,23 @@
}
},
"node_modules/@sinonjs/fake-timers": {
- "version": "9.1.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz",
- "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==",
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
+ "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
"dev": true,
"peer": true,
"dependencies": {
- "@sinonjs/commons": "^1.7.0"
+ "@sinonjs/commons": "^3.0.0"
+ }
+ },
+ "node_modules/@sinonjs/fake-timers/node_modules/@sinonjs/commons": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
+ "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "type-detect": "4.0.8"
}
},
"node_modules/@surma/rollup-plugin-off-main-thread": {
@@ -5056,47 +5555,22 @@
}
},
"node_modules/@testing-library/dom": {
- "version": "7.31.2",
- "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.31.2.tgz",
- "integrity": "sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ==",
+ "version": "9.3.4",
+ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz",
+ "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.10.4",
"@babel/runtime": "^7.12.5",
- "@types/aria-query": "^4.2.0",
- "aria-query": "^4.2.2",
+ "@types/aria-query": "^5.0.1",
+ "aria-query": "5.1.3",
"chalk": "^4.1.0",
- "dom-accessibility-api": "^0.5.6",
- "lz-string": "^1.4.4",
- "pretty-format": "^26.6.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@testing-library/dom/node_modules/@jest/types": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
- "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
- "dev": true,
- "dependencies": {
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^15.0.0",
- "chalk": "^4.0.0"
+ "dom-accessibility-api": "^0.5.9",
+ "lz-string": "^1.5.0",
+ "pretty-format": "^27.0.2"
},
"engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/@testing-library/dom/node_modules/@types/yargs": {
- "version": "15.0.19",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz",
- "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
+ "node": ">=14"
}
},
"node_modules/@testing-library/dom/node_modules/chalk": {
@@ -5116,69 +5590,116 @@
}
},
"node_modules/@testing-library/dom/node_modules/pretty-format": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz",
- "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==",
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
+ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
"dev": true,
"dependencies": {
- "@jest/types": "^26.6.2",
- "ansi-regex": "^5.0.0",
- "ansi-styles": "^4.0.0",
+ "ansi-regex": "^5.0.1",
+ "ansi-styles": "^5.0.0",
"react-is": "^17.0.1"
},
"engines": {
- "node": ">= 10"
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ }
+ },
+ "node_modules/@testing-library/dom/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/@testing-library/jest-dom": {
- "version": "5.15.0",
- "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.15.0.tgz",
- "integrity": "sha512-lOMuQidnL1tWHLEWIhL6UvSZC1Qt3OkNe1khvi2h6xFiqpe5O8arYs46OU0qyUGq0cSTbroQyMktYNXu3a7sAA==",
+ "version": "6.4.2",
+ "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.2.tgz",
+ "integrity": "sha512-CzqH0AFymEMG48CpzXFriYYkOjk6ZGPCLMhW9e9jg3KMCn5OfJecF8GtGW7yGfR/IgCe3SX8BSwjdzI6BBbZLw==",
"dev": true,
"dependencies": {
+ "@adobe/css-tools": "^4.3.2",
"@babel/runtime": "^7.9.2",
- "@types/testing-library__jest-dom": "^5.9.1",
- "aria-query": "^4.2.2",
+ "aria-query": "^5.0.0",
"chalk": "^3.0.0",
- "css": "^3.0.0",
"css.escape": "^1.5.1",
- "dom-accessibility-api": "^0.5.6",
+ "dom-accessibility-api": "^0.6.3",
"lodash": "^4.17.15",
"redent": "^3.0.0"
},
"engines": {
- "node": ">=8",
+ "node": ">=14",
"npm": ">=6",
"yarn": ">=1"
+ },
+ "peerDependencies": {
+ "@jest/globals": ">= 28",
+ "@types/bun": "latest",
+ "@types/jest": ">= 28",
+ "jest": ">= 28",
+ "vitest": ">= 0.32"
+ },
+ "peerDependenciesMeta": {
+ "@jest/globals": {
+ "optional": true
+ },
+ "@types/bun": {
+ "optional": true
+ },
+ "@types/jest": {
+ "optional": true
+ },
+ "jest": {
+ "optional": true
+ },
+ "vitest": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@testing-library/jest-dom/node_modules/aria-query": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
+ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
+ "dev": true,
+ "dependencies": {
+ "dequal": "^2.0.3"
}
},
+ "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz",
+ "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==",
+ "dev": true
+ },
"node_modules/@testing-library/react": {
- "version": "11.2.7",
- "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-11.2.7.tgz",
- "integrity": "sha512-tzRNp7pzd5QmbtXNG/mhdcl7Awfu/Iz1RaVHY75zTdOkmHCuzMhRL83gWHSgOAcjS3CCbyfwUHMZgRJb4kAfpA==",
+ "version": "14.2.2",
+ "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.2.2.tgz",
+ "integrity": "sha512-SOUuM2ysCvjUWBXTNfQ/ztmnKDmqaiPV3SvoIuyxMUca45rbSWWAT/qB8CUs/JQ/ux/8JFs9DNdFQ3f6jH3crA==",
"dev": true,
"dependencies": {
"@babel/runtime": "^7.12.5",
- "@testing-library/dom": "^7.28.1"
+ "@testing-library/dom": "^9.0.0",
+ "@types/react-dom": "^18.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=14"
},
"peerDependencies": {
- "react": "*",
- "react-dom": "*"
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0"
}
},
"node_modules/@testing-library/user-event": {
- "version": "12.8.3",
- "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-12.8.3.tgz",
- "integrity": "sha512-IR0iWbFkgd56Bu5ZI/ej8yQwrkCv8Qydx6RzwbKz9faXazR/+5tvYKsZQgyXJiwgpcva127YO6JcWy7YlCfofQ==",
+ "version": "14.5.2",
+ "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz",
+ "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==",
"dev": true,
- "dependencies": {
- "@babel/runtime": "^7.12.5"
- },
"engines": {
- "node": ">=10",
+ "node": ">=12",
"npm": ">=6"
},
"peerDependencies": {
@@ -5204,9 +5725,9 @@
}
},
"node_modules/@types/aria-query": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz",
- "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==",
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
+ "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==",
"dev": true
},
"node_modules/@types/babel__core": {
@@ -5288,10 +5809,19 @@
"@types/node": "*"
}
},
+ "node_modules/@types/conventional-commits-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz",
+ "integrity": "sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@types/cookie": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.4.tgz",
- "integrity": "sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA=="
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA=="
},
"node_modules/@types/eslint": {
"version": "8.21.1",
@@ -5358,9 +5888,9 @@
"dev": true
},
"node_modules/@types/hoist-non-react-statics": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz",
- "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==",
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz",
+ "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==",
"dependencies": {
"@types/react": "*",
"hoist-non-react-statics": "^3.3.0"
@@ -5406,19 +5936,19 @@
}
},
"node_modules/@types/jest": {
- "version": "28.1.6",
- "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.6.tgz",
- "integrity": "sha512-0RbGAFMfcBJKOmqRazM8L98uokwuwD5F8rHrv/ZMbrZBwVOWZUyPG6VFNscjYr/vjM3Vu4fRrCPbOs42AfemaQ==",
+ "version": "29.5.12",
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz",
+ "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==",
"dev": true,
"dependencies": {
- "jest-matcher-utils": "^28.0.0",
- "pretty-format": "^28.0.0"
+ "expect": "^29.0.0",
+ "pretty-format": "^29.0.0"
}
},
"node_modules/@types/json-schema": {
- "version": "7.0.9",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
- "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
"dev": true
},
"node_modules/@types/json5": {
@@ -5428,9 +5958,9 @@
"dev": true
},
"node_modules/@types/lodash": {
- "version": "4.14.178",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz",
- "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==",
+ "version": "4.17.0",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz",
+ "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==",
"dev": true
},
"node_modules/@types/mime": {
@@ -5440,9 +5970,9 @@
"dev": true
},
"node_modules/@types/minimist": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz",
- "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==",
"dev": true
},
"node_modules/@types/node": {
@@ -5452,15 +5982,15 @@
"dev": true
},
"node_modules/@types/normalize-package-data": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
- "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
"dev": true
},
"node_modules/@types/numeral": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@types/numeral/-/numeral-2.0.2.tgz",
- "integrity": "sha512-A8F30k2gYJ/6e07spSCPpkuZu79LCnkPTvqmIWQzNGcrzwFKpVOydG41lNt5wZXjSI149qjyzC2L1+F2PD/NUA==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@types/numeral/-/numeral-2.0.5.tgz",
+ "integrity": "sha512-kH8I7OSSwQu9DS9JYdFWbuvhVzvFRoCPCkGxNwoGgaPeDfEPJlcxNvEOypZhQ3XXHsGbfIuYcxcJxKUfJHnRfw==",
"dev": true
},
"node_modules/@types/parse-json": {
@@ -5487,9 +6017,9 @@
"dev": true
},
"node_modules/@types/qs": {
- "version": "6.9.7",
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
- "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==",
+ "version": "6.9.14",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz",
+ "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==",
"dev": true
},
"node_modules/@types/range-parser": {
@@ -5499,28 +6029,27 @@
"dev": true
},
"node_modules/@types/react": {
- "version": "17.0.58",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.58.tgz",
- "integrity": "sha512-c1GzVY97P0fGxwGxhYq989j4XwlcHQoto6wQISOC2v6wm3h0PORRWJFHlkRjfGsiG3y1609WdQ+J+tKxvrEd6A==",
+ "version": "18.2.73",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.73.tgz",
+ "integrity": "sha512-XcGdod0Jjv84HOC7N5ziY3x+qL0AfmubvKOZ9hJjJ2yd5EE+KYjWhdOjt387e9HPheHkdggF9atTifMRtyAaRA==",
"dependencies": {
"@types/prop-types": "*",
- "@types/scheduler": "*",
"csstype": "^3.0.2"
}
},
"node_modules/@types/react-dom": {
- "version": "17.0.11",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.11.tgz",
- "integrity": "sha512-f96K3k+24RaLGVu/Y2Ng3e1EbZ8/cVJvypZWd7cy0ofCBaf2lcM46xNhycMZ2xGwbBjRql7hOlZ+e2WlJ5MH3Q==",
+ "version": "18.2.23",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.23.tgz",
+ "integrity": "sha512-ZQ71wgGOTmDYpnav2knkjr3qXdAFu0vsk8Ci5w3pGAIdj7/kKAyn+VsQDhXsmzzzepAiI9leWMmubXz690AI/A==",
"dev": true,
"dependencies": {
"@types/react": "*"
}
},
"node_modules/@types/react-redux": {
- "version": "7.1.23",
- "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.23.tgz",
- "integrity": "sha512-D02o3FPfqQlfu2WeEYwh3x2otYd2Dk1o8wAfsA0B1C2AJEFxE663Ozu7JzuWbznGgW248NaOF6wsqCGNq9d3qw==",
+ "version": "7.1.33",
+ "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.33.tgz",
+ "integrity": "sha512-NF8m5AjWCkert+fosDsN3hAlHzpjSiXlVy9EgQEmLoBhaNXbmyeGs/aj5dQzKuF+/q+S7JQagorGDW8pJ28Hmg==",
"dependencies": {
"@types/hoist-non-react-statics": "^3.3.0",
"@types/react": "*",
@@ -5529,22 +6058,22 @@
}
},
"node_modules/@types/react-router": {
- "version": "5.1.17",
- "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.17.tgz",
- "integrity": "sha512-RNSXOyb3VyRs/EOGmjBhhGKTbnN6fHWvy5FNLzWfOWOGjgVUKqJZXfpKzLmgoU8h6Hj8mpALj/mbXQASOb92wQ==",
+ "version": "5.1.20",
+ "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz",
+ "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==",
"dev": true,
"dependencies": {
- "@types/history": "*",
+ "@types/history": "^4.7.11",
"@types/react": "*"
}
},
"node_modules/@types/react-router-dom": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.2.tgz",
- "integrity": "sha512-ELEYRUie2czuJzaZ5+ziIp9Hhw+juEw8b7C11YNA4QdLCVbQ3qLi2l4aq8XnlqM7V31LZX8dxUuFUCrzHm6sqQ==",
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz",
+ "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==",
"dev": true,
"dependencies": {
- "@types/history": "*",
+ "@types/history": "^4.7.11",
"@types/react": "*",
"@types/react-router": "*"
}
@@ -5564,15 +6093,10 @@
"integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==",
"dev": true
},
- "node_modules/@types/scheduler": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
- "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew=="
- },
"node_modules/@types/semver": {
- "version": "7.3.13",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz",
- "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==",
+ "version": "7.5.8",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
+ "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
"dev": true
},
"node_modules/@types/serve-index": {
@@ -5609,21 +6133,17 @@
"integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
"dev": true
},
- "node_modules/@types/testing-library__jest-dom": {
- "version": "5.14.5",
- "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz",
- "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==",
- "dev": true,
- "dependencies": {
- "@types/jest": "*"
- }
- },
"node_modules/@types/trusted-types": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz",
"integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==",
"dev": true
},
+ "node_modules/@types/use-sync-external-store": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz",
+ "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA=="
+ },
"node_modules/@types/ws": {
"version": "8.5.4",
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz",
@@ -5682,21 +6202,6 @@
}
}
},
- "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/experimental-utils": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.1.tgz",
@@ -5918,21 +6423,6 @@
}
}
},
- "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/utils": {
"version": "5.62.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
@@ -5959,21 +6449,6 @@
"eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
- "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/visitor-keys": {
"version": "5.62.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
@@ -6319,19 +6794,6 @@
"node": ">= 6.0.0"
}
},
- "node_modules/aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "dev": true,
- "dependencies": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/ajv": {
"version": "8.12.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
@@ -6501,7 +6963,9 @@
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
- "dev": true
+ "dev": true,
+ "optional": true,
+ "peer": true
},
"node_modules/argparse": {
"version": "1.0.10",
@@ -6513,26 +6977,25 @@
}
},
"node_modules/aria-query": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz",
- "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==",
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz",
+ "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==",
"dev": true,
"dependencies": {
- "@babel/runtime": "^7.10.2",
- "@babel/runtime-corejs3": "^7.10.2"
- },
- "engines": {
- "node": ">=6.0"
+ "deep-equal": "^2.0.5"
}
},
"node_modules/array-buffer-byte-length": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
- "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
+ "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "is-array-buffer": "^3.0.1"
+ "call-bind": "^1.0.5",
+ "is-array-buffer": "^3.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -6553,7 +7016,7 @@
"node_modules/array-ify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
- "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=",
+ "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==",
"dev": true
},
"node_modules/array-includes": {
@@ -6584,15 +7047,35 @@
"node": ">=8"
}
},
+ "node_modules/array.prototype.findlastindex": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
+ "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/array.prototype.flat": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
- "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
+ "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
"es-shim-unscopables": "^1.0.0"
},
"engines": {
@@ -6603,14 +7086,14 @@
}
},
"node_modules/array.prototype.flatmap": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
- "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
+ "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
"es-shim-unscopables": "^1.0.0"
},
"engines": {
@@ -6653,17 +7136,18 @@
}
},
"node_modules/arraybuffer.prototype.slice": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz",
- "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+ "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
"dev": true,
"dependencies": {
- "array-buffer-byte-length": "^1.0.0",
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "get-intrinsic": "^1.2.1",
- "is-array-buffer": "^3.0.2",
+ "array-buffer-byte-length": "^1.0.1",
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.22.3",
+ "es-errors": "^1.2.1",
+ "get-intrinsic": "^1.2.3",
+ "is-array-buffer": "^3.0.4",
"is-shared-array-buffer": "^1.0.2"
},
"engines": {
@@ -6673,6 +7157,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
@@ -6741,18 +7234,6 @@
"node": ">= 4.0.0"
}
},
- "node_modules/atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true,
- "bin": {
- "atob": "bin/atob.js"
- },
- "engines": {
- "node": ">= 4.5.0"
- }
- },
"node_modules/autoprefixer": {
"version": "10.4.13",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz",
@@ -6787,10 +7268,13 @@
}
},
"node_modules/available-typed-arrays": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz",
- "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
"dev": true,
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
"engines": {
"node": ">= 0.4"
},
@@ -6823,11 +7307,11 @@
}
},
"node_modules/axios": {
- "version": "1.6.7",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz",
- "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==",
+ "version": "1.6.8",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz",
+ "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==",
"dependencies": {
- "follow-redirects": "^1.15.4",
+ "follow-redirects": "^1.15.6",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
}
@@ -6855,22 +7339,22 @@
}
},
"node_modules/babel-jest": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz",
- "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
+ "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/transform": "^28.1.3",
+ "@jest/transform": "^29.7.0",
"@types/babel__core": "^7.1.14",
"babel-plugin-istanbul": "^6.1.1",
- "babel-preset-jest": "^28.1.3",
+ "babel-preset-jest": "^29.6.3",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"slash": "^3.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"@babel/core": "^7.8.0"
@@ -6978,9 +7462,9 @@
}
},
"node_modules/babel-plugin-jest-hoist": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz",
- "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
+ "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
"dev": true,
"peer": true,
"dependencies": {
@@ -6990,7 +7474,7 @@
"@types/babel__traverse": "^7.0.6"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/babel-plugin-macros": {
@@ -7095,17 +7579,17 @@
}
},
"node_modules/babel-preset-jest": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz",
- "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
+ "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
"dev": true,
"peer": true,
"dependencies": {
- "babel-plugin-jest-hoist": "^28.1.3",
+ "babel-plugin-jest-hoist": "^29.6.3",
"babel-preset-current-node-syntax": "^1.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
@@ -7156,19 +7640,6 @@
"tweetnacl": "^0.14.3"
}
},
- "node_modules/bem-cn": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/bem-cn/-/bem-cn-3.0.1.tgz",
- "integrity": "sha512-kWC76a09vSk6cJXDYsH1erjxdBf856HTxl0IHOvYItSmBC6wQCsRCf9bmKR0hmeUDcUP5XPMr8MNXDgKbKJi0A=="
- },
- "node_modules/bem-cn-lite": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bem-cn-lite/-/bem-cn-lite-4.1.0.tgz",
- "integrity": "sha512-0IEVRYK2MQKQO00P3sY3hNv7vH8P+Z8mR46qFcaiwsQAWp0MuMWpLSuUUhZEjKD2HzTGXMqMsFysWEeeJa1drQ==",
- "dependencies": {
- "bem-cn": "^3.0.1"
- }
- },
"node_modules/bfj": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz",
@@ -7261,6 +7732,21 @@
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true
},
+ "node_modules/body-parser/node_modules/qs": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "dev": true,
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/bonjour-service": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.0.tgz",
@@ -7400,13 +7886,18 @@
}
},
"node_modules/call-bind": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
- "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
"dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
"function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.1",
- "set-function-length": "^1.1.1"
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -7453,29 +7944,33 @@
}
},
"node_modules/camelcase-keys": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
- "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz",
+ "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==",
"dev": true,
"dependencies": {
- "camelcase": "^5.3.1",
- "map-obj": "^4.0.0",
- "quick-lru": "^4.0.1"
+ "camelcase": "^6.3.0",
+ "map-obj": "^4.1.0",
+ "quick-lru": "^5.1.1",
+ "type-fest": "^1.2.1"
},
"engines": {
- "node": ">=8"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/camelcase-keys/node_modules/camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "node_modules/camelcase-keys/node_modules/type-fest": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
"dev": true,
"engines": {
- "node": ">=6"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/caniuse-api": {
@@ -7640,6 +8135,11 @@
"integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==",
"dev": true
},
+ "node_modules/classnames": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz",
+ "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="
+ },
"node_modules/clean-css": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz",
@@ -7652,38 +8152,32 @@
"node": ">= 10.0"
}
},
- "node_modules/clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
+ "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==",
"dev": true,
"dependencies": {
- "restore-cursor": "^3.1.0"
+ "restore-cursor": "^4.0.0"
},
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/cli-truncate": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz",
- "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz",
+ "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==",
"dev": true,
"dependencies": {
"slice-ansi": "^5.0.0",
- "string-width": "^5.0.0"
+ "string-width": "^7.0.0"
},
"engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -7714,9 +8208,9 @@
}
},
"node_modules/cli-truncate/node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
+ "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
"dev": true
},
"node_modules/cli-truncate/node_modules/is-fullwidth-code-point": {
@@ -7748,17 +8242,17 @@
}
},
"node_modules/cli-truncate/node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz",
+ "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==",
"dev": true,
"dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -7807,27 +8301,6 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
- "node_modules/clone-regexp": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz",
- "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==",
- "dev": true,
- "dependencies": {
- "is-regexp": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/clone-regexp/node_modules/is-regexp": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz",
- "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -7953,9 +8426,9 @@
"integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw=="
},
"node_modules/colorette": {
- "version": "2.0.16",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
- "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
"dev": true
},
"node_modules/combined-stream": {
@@ -8108,59 +8581,45 @@
}
},
"node_modules/conventional-changelog-angular": {
- "version": "5.0.13",
- "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz",
- "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz",
+ "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==",
"dev": true,
"dependencies": {
- "compare-func": "^2.0.0",
- "q": "^1.5.1"
+ "compare-func": "^2.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=16"
}
},
"node_modules/conventional-changelog-conventionalcommits": {
- "version": "4.6.3",
- "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz",
- "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==",
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz",
+ "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==",
"dev": true,
"dependencies": {
- "compare-func": "^2.0.0",
- "lodash": "^4.17.15",
- "q": "^1.5.1"
+ "compare-func": "^2.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=16"
}
},
"node_modules/conventional-commits-parser": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz",
- "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz",
+ "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==",
"dev": true,
"dependencies": {
- "is-text-path": "^1.0.1",
- "JSONStream": "^1.0.4",
- "lodash": "^4.17.15",
- "meow": "^8.0.0",
- "split2": "^3.0.0",
- "through2": "^4.0.0"
+ "is-text-path": "^2.0.0",
+ "JSONStream": "^1.3.5",
+ "meow": "^12.0.1",
+ "split2": "^4.0.0"
},
"bin": {
- "conventional-commits-parser": "cli.js"
+ "conventional-commits-parser": "cli.mjs"
},
"engines": {
- "node": ">=10"
- }
- },
- "node_modules/conventional-commits-parser/node_modules/through2": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz",
- "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==",
- "dev": true,
- "dependencies": {
- "readable-stream": "3"
+ "node": ">=16"
}
},
"node_modules/convert-source-map": {
@@ -8173,6 +8632,7 @@
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
"integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
+ "dev": true,
"engines": {
"node": ">= 0.6"
}
@@ -8278,6 +8738,63 @@
"node": ">=0.8"
}
},
+ "node_modules/create-jest": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
+ "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "jest-config": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "prompts": "^2.0.1"
+ },
+ "bin": {
+ "create-jest": "bin/create-jest.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/create-jest/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/create-jest/node_modules/jest-util": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "graceful-fs": "^4.2.9",
+ "picomatch": "^2.2.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
"node_modules/create-react-class": {
"version": "15.7.0",
"resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz",
@@ -8291,7 +8808,9 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
- "dev": true
+ "dev": true,
+ "optional": true,
+ "peer": true
},
"node_modules/cross-spawn": {
"version": "7.0.3",
@@ -8331,17 +8850,6 @@
"node": ">=8"
}
},
- "node_modules/css": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz",
- "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.4",
- "source-map": "^0.6.1",
- "source-map-resolve": "^0.6.0"
- }
- },
"node_modules/css-blank-pseudo": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz",
@@ -8380,6 +8888,15 @@
"postcss": "^8.0.9"
}
},
+ "node_modules/css-functions-list": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz",
+ "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12 || >=16"
+ }
+ },
"node_modules/css-has-pseudo": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz",
@@ -8424,21 +8941,6 @@
"webpack": "^5.0.0"
}
},
- "node_modules/css-loader/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/css-minimizer-webpack-plugin": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz",
@@ -9106,12 +9608,15 @@
"dev": true
},
"node_modules/dargs": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz",
- "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz",
+ "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/dashdash": {
@@ -9163,6 +9668,57 @@
"webidl-conversions": "^4.0.2"
}
},
+ "node_modules/data-view-buffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
+ "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
+ "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-offset": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
+ "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/date-now": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/date-now/-/date-now-1.0.1.tgz",
@@ -9199,23 +9755,38 @@
}
},
"node_modules/decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz",
+ "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==",
"dev": true,
"engines": {
- "node": ">=0.10.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/decamelize-keys": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
- "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
+ "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
"dev": true,
"dependencies": {
"decamelize": "^1.1.0",
"map-obj": "^1.0.0"
},
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/decamelize-keys/node_modules/decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+ "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -9235,15 +9806,6 @@
"integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
"dev": true
},
- "node_modules/decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
- "dev": true,
- "engines": {
- "node": ">=0.10"
- }
- },
"node_modules/decompress-response": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz",
@@ -9324,16 +9886,19 @@
}
},
"node_modules/define-data-property": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
- "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
"dependencies": {
- "get-intrinsic": "^1.2.1",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.0"
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/define-lazy-prop": {
@@ -9505,17 +10070,19 @@
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
"dev": true,
+ "optional": true,
+ "peer": true,
"engines": {
"node": ">=0.3.1"
}
},
"node_modules/diff-sequences": {
- "version": "28.1.1",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz",
- "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
+ "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
"dev": true,
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/dir-glob": {
@@ -9714,12 +10281,6 @@
"integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
"dev": true
},
- "node_modules/eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true
- },
"node_modules/ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
@@ -9758,10 +10319,11 @@
"dev": true
},
"node_modules/emittery": {
- "version": "0.10.2",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz",
- "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==",
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=12"
},
@@ -9815,6 +10377,15 @@
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
+ "node_modules/env-paths": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -9834,50 +10405,57 @@
}
},
"node_modules/es-abstract": {
- "version": "1.22.3",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz",
- "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==",
- "dev": true,
- "dependencies": {
- "array-buffer-byte-length": "^1.0.0",
- "arraybuffer.prototype.slice": "^1.0.2",
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.5",
- "es-set-tostringtag": "^2.0.1",
+ "version": "1.23.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.2.tgz",
+ "integrity": "sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "arraybuffer.prototype.slice": "^1.0.3",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "data-view-buffer": "^1.0.1",
+ "data-view-byte-length": "^1.0.1",
+ "data-view-byte-offset": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-set-tostringtag": "^2.0.3",
"es-to-primitive": "^1.2.1",
"function.prototype.name": "^1.1.6",
- "get-intrinsic": "^1.2.2",
- "get-symbol-description": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "get-symbol-description": "^1.0.2",
"globalthis": "^1.0.3",
"gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
- "has-proto": "^1.0.1",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.0.3",
"has-symbols": "^1.0.3",
- "hasown": "^2.0.0",
- "internal-slot": "^1.0.5",
- "is-array-buffer": "^3.0.2",
+ "hasown": "^2.0.2",
+ "internal-slot": "^1.0.7",
+ "is-array-buffer": "^3.0.4",
"is-callable": "^1.2.7",
- "is-negative-zero": "^2.0.2",
+ "is-data-view": "^1.0.1",
+ "is-negative-zero": "^2.0.3",
"is-regex": "^1.1.4",
- "is-shared-array-buffer": "^1.0.2",
+ "is-shared-array-buffer": "^1.0.3",
"is-string": "^1.0.7",
- "is-typed-array": "^1.1.12",
+ "is-typed-array": "^1.1.13",
"is-weakref": "^1.0.2",
"object-inspect": "^1.13.1",
"object-keys": "^1.1.1",
- "object.assign": "^4.1.4",
- "regexp.prototype.flags": "^1.5.1",
- "safe-array-concat": "^1.0.1",
- "safe-regex-test": "^1.0.0",
- "string.prototype.trim": "^1.2.8",
- "string.prototype.trimend": "^1.0.7",
+ "object.assign": "^4.1.5",
+ "regexp.prototype.flags": "^1.5.2",
+ "safe-array-concat": "^1.1.2",
+ "safe-regex-test": "^1.0.3",
+ "string.prototype.trim": "^1.2.9",
+ "string.prototype.trimend": "^1.0.8",
"string.prototype.trimstart": "^1.0.7",
- "typed-array-buffer": "^1.0.0",
- "typed-array-byte-length": "^1.0.0",
- "typed-array-byte-offset": "^1.0.0",
- "typed-array-length": "^1.0.4",
+ "typed-array-buffer": "^1.0.2",
+ "typed-array-byte-length": "^1.0.1",
+ "typed-array-byte-offset": "^1.0.2",
+ "typed-array-length": "^1.0.5",
"unbox-primitive": "^1.0.2",
- "which-typed-array": "^1.1.13"
+ "which-typed-array": "^1.1.15"
},
"engines": {
"node": ">= 0.4"
@@ -9892,6 +10470,25 @@
"integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==",
"dev": true
},
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/es-get-iterator": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz",
@@ -9946,27 +10543,39 @@
"integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
"dev": true
},
+ "node_modules/es-object-atoms": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
+ "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/es-set-tostringtag": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
- "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
+ "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.1.3",
- "has": "^1.0.3",
- "has-tostringtag": "^1.0.0"
+ "get-intrinsic": "^1.2.4",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.1"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-shim-unscopables": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
- "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+ "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
"dev": true,
"dependencies": {
- "has": "^1.0.3"
+ "hasown": "^2.0.0"
}
},
"node_modules/es-to-primitive": {
@@ -10089,9 +10698,9 @@
}
},
"node_modules/eslint-config-prettier": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz",
- "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==",
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz",
+ "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==",
"dev": true,
"bin": {
"eslint-config-prettier": "bin/cli.js"
@@ -10129,14 +10738,14 @@
}
},
"node_modules/eslint-import-resolver-node": {
- "version": "0.3.7",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz",
- "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==",
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+ "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
"dev": true,
"dependencies": {
"debug": "^3.2.7",
- "is-core-module": "^2.11.0",
- "resolve": "^1.22.1"
+ "is-core-module": "^2.13.0",
+ "resolve": "^1.22.4"
}
},
"node_modules/eslint-import-resolver-node/node_modules/debug": {
@@ -10148,10 +10757,35 @@
"ms": "^2.1.1"
}
},
+ "node_modules/eslint-import-resolver-typescript": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz",
+ "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.3.4",
+ "enhanced-resolve": "^5.12.0",
+ "eslint-module-utils": "^2.7.4",
+ "fast-glob": "^3.3.1",
+ "get-tsconfig": "^4.5.0",
+ "is-core-module": "^2.11.0",
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts"
+ },
+ "peerDependencies": {
+ "eslint": "*",
+ "eslint-plugin-import": "*"
+ }
+ },
"node_modules/eslint-module-utils": {
- "version": "2.7.4",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz",
- "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==",
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz",
+ "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==",
"dev": true,
"dependencies": {
"debug": "^3.2.7"
@@ -10193,26 +10827,28 @@
}
},
"node_modules/eslint-plugin-import": {
- "version": "2.27.5",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz",
- "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==",
+ "version": "2.29.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz",
+ "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==",
"dev": true,
"dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.flat": "^1.3.1",
- "array.prototype.flatmap": "^1.3.1",
+ "array-includes": "^3.1.7",
+ "array.prototype.findlastindex": "^1.2.3",
+ "array.prototype.flat": "^1.3.2",
+ "array.prototype.flatmap": "^1.3.2",
"debug": "^3.2.7",
"doctrine": "^2.1.0",
- "eslint-import-resolver-node": "^0.3.7",
- "eslint-module-utils": "^2.7.4",
- "has": "^1.0.3",
- "is-core-module": "^2.11.0",
+ "eslint-import-resolver-node": "^0.3.9",
+ "eslint-module-utils": "^2.8.0",
+ "hasown": "^2.0.0",
+ "is-core-module": "^2.13.1",
"is-glob": "^4.0.3",
"minimatch": "^3.1.2",
- "object.values": "^1.1.6",
- "resolve": "^1.22.1",
- "semver": "^6.3.0",
- "tsconfig-paths": "^3.14.1"
+ "object.fromentries": "^2.0.7",
+ "object.groupby": "^1.0.1",
+ "object.values": "^1.1.7",
+ "semver": "^6.3.1",
+ "tsconfig-paths": "^3.15.0"
},
"engines": {
"node": ">=4"
@@ -10330,21 +10966,30 @@
}
},
"node_modules/eslint-plugin-prettier": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz",
- "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==",
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz",
+ "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==",
"dev": true,
"dependencies": {
- "prettier-linter-helpers": "^1.0.0"
+ "prettier-linter-helpers": "^1.0.0",
+ "synckit": "^0.8.6"
},
"engines": {
- "node": ">=6.0.0"
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint-plugin-prettier"
},
"peerDependencies": {
- "eslint": ">=7.28.0",
- "prettier": ">=2.0.0"
+ "@types/eslint": ">=8.0.0",
+ "eslint": ">=8.0.0",
+ "eslint-config-prettier": "*",
+ "prettier": ">=3.0.0"
},
"peerDependenciesMeta": {
+ "@types/eslint": {
+ "optional": true
+ },
"eslint-config-prettier": {
"optional": true
}
@@ -10381,9 +11026,9 @@
}
},
"node_modules/eslint-plugin-react-hooks": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz",
- "integrity": "sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==",
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
+ "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
"dev": true,
"engines": {
"node": ">=10"
@@ -10440,12 +11085,12 @@
}
},
"node_modules/eslint-plugin-security": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.4.0.tgz",
- "integrity": "sha512-xlS7P2PLMXeqfhyf3NpqbvbnW04kN8M9NtmhpR3XGyOvt/vNKS7XPXT5EDbwKW9vCjWH4PpfQvgD/+JgN0VJKA==",
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.7.1.tgz",
+ "integrity": "sha512-sMStceig8AFglhhT2LqlU5r+/fn9OwsA72O5bBuQVTssPCdQAOQzL+oMn/ZcpeUY6KcNfLJArgcrsSULNjYYdQ==",
"dev": true,
"dependencies": {
- "safe-regex": "^1.1.0"
+ "safe-regex": "^2.1.1"
}
},
"node_modules/eslint-plugin-testing-library": {
@@ -10975,18 +11620,6 @@
"url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
- "node_modules/execall": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz",
- "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==",
- "dev": true,
- "dependencies": {
- "clone-regexp": "^2.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/exit": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
@@ -10997,20 +11630,19 @@
}
},
"node_modules/expect": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz",
- "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
+ "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
"dev": true,
- "peer": true,
"dependencies": {
- "@jest/expect-utils": "^28.1.3",
- "jest-get-type": "^28.0.2",
- "jest-matcher-utils": "^28.1.3",
- "jest-message-util": "^28.1.3",
- "jest-util": "^28.1.3"
+ "@jest/expect-utils": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/expect/node_modules/chalk": {
@@ -11018,7 +11650,6 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
- "peer": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -11031,13 +11662,12 @@
}
},
"node_modules/expect/node_modules/jest-util": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
- "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
- "peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -11045,7 +11675,7 @@
"picomatch": "^2.2.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/express": {
@@ -11117,6 +11747,21 @@
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
"dev": true
},
+ "node_modules/express/node_modules/qs": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "dev": true,
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
@@ -11185,10 +11830,13 @@
"devOptional": true
},
"node_modules/fastest-levenshtein": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
- "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==",
- "dev": true
+ "version": "1.0.16",
+ "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
+ "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4.9.1"
+ }
},
"node_modules/fastq": {
"version": "1.13.0",
@@ -11367,12 +12015,13 @@
}
},
"node_modules/flat-cache": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
- "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
"dev": true,
"dependencies": {
- "flatted": "^3.1.0",
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.3",
"rimraf": "^3.0.2"
},
"engines": {
@@ -11380,9 +12029,9 @@
}
},
"node_modules/flatted": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
- "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
"dev": true
},
"node_modules/focus-trap": {
@@ -11394,9 +12043,9 @@
}
},
"node_modules/follow-redirects": {
- "version": "1.15.5",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
- "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
+ "version": "1.15.6",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
+ "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
"funding": [
{
"type": "individual",
@@ -11431,68 +12080,38 @@
}
},
"node_modules/fork-ts-checker-webpack-plugin": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz",
- "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==",
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz",
+ "integrity": "sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.8.3",
- "@types/json-schema": "^7.0.5",
- "chalk": "^4.1.0",
- "chokidar": "^3.4.2",
- "cosmiconfig": "^6.0.0",
+ "@babel/code-frame": "^7.16.7",
+ "chalk": "^4.1.2",
+ "chokidar": "^3.5.3",
+ "cosmiconfig": "^8.2.0",
"deepmerge": "^4.2.2",
- "fs-extra": "^9.0.0",
- "glob": "^7.1.6",
- "memfs": "^3.1.2",
+ "fs-extra": "^10.0.0",
+ "memfs": "^3.4.1",
"minimatch": "^3.0.4",
- "schema-utils": "2.7.0",
- "semver": "^7.3.2",
- "tapable": "^1.0.0"
+ "node-abort-controller": "^3.0.1",
+ "schema-utils": "^3.1.1",
+ "semver": "^7.3.5",
+ "tapable": "^2.2.1"
},
"engines": {
- "node": ">=10",
+ "node": ">=12.13.0",
"yarn": ">=1.0.0"
},
"peerDependencies": {
- "eslint": ">= 6",
- "typescript": ">= 2.7",
- "vue-template-compiler": "*",
- "webpack": ">= 4"
- },
- "peerDependenciesMeta": {
- "eslint": {
- "optional": true
- },
- "vue-template-compiler": {
- "optional": true
- }
- }
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
+ "typescript": ">3.6.0",
+ "webpack": "^5.11.0"
}
},
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
+ "node_modules/fork-ts-checker-webpack-plugin/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
},
"node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": {
"version": "4.1.2",
@@ -11511,67 +12130,41 @@
}
},
"node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
- "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
+ "version": "8.3.6",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
+ "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
"dev": true,
"dependencies": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.1.0",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.7.2"
+ "import-fresh": "^3.3.0",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.2.0",
+ "path-type": "^4.0.0"
},
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "dev": true,
- "dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
+ "node": ">=14"
},
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
- "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.4",
- "ajv": "^6.12.2",
- "ajv-keywords": "^3.4.1"
+ "funding": {
+ "url": "https://github.com/sponsors/d-fischer"
},
- "engines": {
- "node": ">= 8.9.0"
+ "peerDependencies": {
+ "typescript": ">=4.9.5"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
- "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
+ "node_modules/fork-ts-checker-webpack-plugin/node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true,
- "engines": {
- "node": ">=6"
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
}
},
"node_modules/form-data": {
@@ -11697,12 +12290,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
- "dev": true
- },
"node_modules/functions-have-names": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
@@ -11768,16 +12355,32 @@
"node": "6.* || 8.* || >= 10.*"
}
},
+ "node_modules/get-east-asian-width": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz",
+ "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==",
+ "dev": true,
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/get-intrinsic": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
- "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
"dependencies": {
+ "es-errors": "^1.3.0",
"function-bind": "^1.1.2",
"has-proto": "^1.0.1",
"has-symbols": "^1.0.3",
"hasown": "^2.0.0"
},
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -11797,18 +12400,6 @@
"node": ">=8.0.0"
}
},
- "node_modules/get-stdin": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz",
- "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/get-stream": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
@@ -11822,13 +12413,14 @@
}
},
"node_modules/get-symbol-description": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
- "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+ "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
+ "call-bind": "^1.0.5",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4"
},
"engines": {
"node": ">= 0.4"
@@ -11837,6 +12429,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/get-tsconfig": {
+ "version": "4.7.3",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz",
+ "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==",
+ "dev": true,
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
"node_modules/getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
@@ -11847,31 +12451,20 @@
}
},
"node_modules/git-raw-commits": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz",
- "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz",
+ "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==",
"dev": true,
"dependencies": {
- "dargs": "^7.0.0",
- "lodash": "^4.17.15",
- "meow": "^8.0.0",
- "split2": "^3.0.0",
- "through2": "^4.0.0"
+ "dargs": "^8.0.0",
+ "meow": "^12.0.1",
+ "split2": "^4.0.0"
},
"bin": {
- "git-raw-commits": "cli.js"
+ "git-raw-commits": "cli.mjs"
},
"engines": {
- "node": ">=10"
- }
- },
- "node_modules/git-raw-commits/node_modules/through2": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz",
- "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==",
- "dev": true,
- "dependencies": {
- "readable-stream": "3"
+ "node": ">=16"
}
},
"node_modules/glob": {
@@ -11912,16 +12505,28 @@
"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
"dev": true
},
- "node_modules/global-dirs": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
- "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
+ "node_modules/global-directory": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz",
+ "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==",
"dev": true,
"dependencies": {
- "ini": "^1.3.4"
+ "ini": "4.1.1"
},
"engines": {
- "node": ">=4"
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/global-directory/node_modules/ini": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz",
+ "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==",
+ "dev": true,
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
"node_modules/global-modules": {
@@ -12141,20 +12746,20 @@
}
},
"node_modules/has-property-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
- "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
"dependencies": {
- "get-intrinsic": "^1.2.2"
+ "es-define-property": "^1.0.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
- "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
"engines": {
"node": ">= 0.4"
},
@@ -12195,9 +12800,9 @@
"optional": true
},
"node_modules/hasown": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
- "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dependencies": {
"function-bind": "^1.1.2"
},
@@ -12346,12 +12951,15 @@
}
},
"node_modules/html-tags": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz",
- "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz",
+ "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
"dev": true,
"engines": {
"node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/html-webpack-plugin": {
@@ -12566,15 +13174,15 @@
}
},
"node_modules/husky": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz",
- "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==",
+ "version": "9.0.11",
+ "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz",
+ "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==",
"dev": true,
"bin": {
- "husky": "lib/bin.js"
+ "husky": "bin.mjs"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/typicode"
@@ -12629,9 +13237,9 @@
}
},
"node_modules/ignore": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
- "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
+ "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
"dev": true,
"engines": {
"node": ">= 4"
@@ -12647,17 +13255,11 @@
"url": "https://opencollective.com/immer"
}
},
- "node_modules/import-cwd": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
- "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
- "dev": true,
- "dependencies": {
- "import-from": "^2.1.0"
- },
- "engines": {
- "node": ">=4"
- }
+ "node_modules/immutable": {
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz",
+ "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==",
+ "dev": true
},
"node_modules/import-fresh": {
"version": "3.3.0",
@@ -12675,27 +13277,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/import-from": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz",
- "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
- "dev": true,
- "dependencies": {
- "resolve-from": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/import-from/node_modules/resolve-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
- "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/import-lazy": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz",
@@ -12724,6 +13305,16 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/import-meta-resolve": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz",
+ "integrity": "sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
@@ -12765,12 +13356,12 @@
"dev": true
},
"node_modules/internal-slot": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz",
- "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
+ "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.2.2",
+ "es-errors": "^1.3.0",
"hasown": "^2.0.0",
"side-channel": "^1.0.4"
},
@@ -12829,14 +13420,16 @@
}
},
"node_modules/is-array-buffer": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
- "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
+ "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.0",
- "is-typed-array": "^1.1.10"
+ "get-intrinsic": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -12927,6 +13520,21 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-data-view": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
+ "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
+ "dev": true,
+ "dependencies": {
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-date-object": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
@@ -12942,15 +13550,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-directory": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
- "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/is-docker": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
@@ -13048,9 +13647,9 @@
"dev": true
},
"node_modules/is-negative-zero": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
- "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
"dev": true,
"engines": {
"node": ">= 0.4"
@@ -13160,12 +13759,15 @@
}
},
"node_modules/is-shared-array-buffer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
- "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2"
+ "call-bind": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -13214,15 +13816,15 @@
}
},
"node_modules/is-text-path": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz",
- "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz",
+ "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==",
"dev": true,
"dependencies": {
- "text-extensions": "^1.0.0"
+ "text-extensions": "^2.0.0"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=8"
}
},
"node_modules/is-typed-array": {
@@ -13372,21 +13974,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/istanbul-lib-report/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/istanbul-lib-source-maps": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
@@ -13462,22 +14049,22 @@
}
},
"node_modules/jest": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz",
- "integrity": "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
+ "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/core": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/core": "^29.7.0",
+ "@jest/types": "^29.6.3",
"import-local": "^3.0.2",
- "jest-cli": "^28.1.3"
+ "jest-cli": "^29.7.0"
},
"bin": {
"jest": "bin/jest.js"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
@@ -13489,17 +14076,53 @@
}
},
"node_modules/jest-changed-files": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz",
- "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
+ "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
"dev": true,
"peer": true,
"dependencies": {
"execa": "^5.0.0",
+ "jest-util": "^29.7.0",
"p-limit": "^3.1.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-changed-files/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-changed-files/node_modules/jest-util": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "graceful-fs": "^4.2.9",
+ "picomatch": "^2.2.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-changed-files/node_modules/p-limit": {
@@ -13519,34 +14142,35 @@
}
},
"node_modules/jest-circus": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz",
- "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
+ "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/environment": "^28.1.3",
- "@jest/expect": "^28.1.3",
- "@jest/test-result": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/environment": "^29.7.0",
+ "@jest/expect": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
- "dedent": "^0.7.0",
+ "dedent": "^1.0.0",
"is-generator-fn": "^2.0.0",
- "jest-each": "^28.1.3",
- "jest-matcher-utils": "^28.1.3",
- "jest-message-util": "^28.1.3",
- "jest-runtime": "^28.1.3",
- "jest-snapshot": "^28.1.3",
- "jest-util": "^28.1.3",
+ "jest-each": "^29.7.0",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
"p-limit": "^3.1.0",
- "pretty-format": "^28.1.3",
+ "pretty-format": "^29.7.0",
+ "pure-rand": "^6.0.0",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-circus/node_modules/chalk": {
@@ -13566,14 +14190,29 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
+ "node_modules/jest-circus/node_modules/dedent": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz",
+ "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==",
+ "dev": true,
+ "peer": true,
+ "peerDependencies": {
+ "babel-plugin-macros": "^3.1.0"
+ },
+ "peerDependenciesMeta": {
+ "babel-plugin-macros": {
+ "optional": true
+ }
+ }
+ },
"node_modules/jest-circus/node_modules/jest-util": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
- "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -13581,7 +14220,7 @@
"picomatch": "^2.2.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-circus/node_modules/p-limit": {
@@ -13601,30 +14240,29 @@
}
},
"node_modules/jest-cli": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz",
- "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
+ "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/core": "^28.1.3",
- "@jest/test-result": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/core": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
"chalk": "^4.0.0",
+ "create-jest": "^29.7.0",
"exit": "^0.1.2",
- "graceful-fs": "^4.2.9",
"import-local": "^3.0.2",
- "jest-config": "^28.1.3",
- "jest-util": "^28.1.3",
- "jest-validate": "^28.1.3",
- "prompts": "^2.0.1",
+ "jest-config": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
"yargs": "^17.3.1"
},
"bin": {
"jest": "bin/jest.js"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
@@ -13668,13 +14306,13 @@
}
},
"node_modules/jest-cli/node_modules/jest-util": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
- "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -13682,25 +14320,25 @@
"picomatch": "^2.2.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-cli/node_modules/jest-validate": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz",
- "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
+ "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"camelcase": "^6.2.0",
"chalk": "^4.0.0",
- "jest-get-type": "^28.0.2",
+ "jest-get-type": "^29.6.3",
"leven": "^3.1.0",
- "pretty-format": "^28.1.3"
+ "pretty-format": "^29.7.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-cli/node_modules/wrap-ansi": {
@@ -13751,37 +14389,37 @@
}
},
"node_modules/jest-config": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz",
- "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
+ "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
"dev": true,
"peer": true,
"dependencies": {
"@babel/core": "^7.11.6",
- "@jest/test-sequencer": "^28.1.3",
- "@jest/types": "^28.1.3",
- "babel-jest": "^28.1.3",
+ "@jest/test-sequencer": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "babel-jest": "^29.7.0",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"deepmerge": "^4.2.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
- "jest-circus": "^28.1.3",
- "jest-environment-node": "^28.1.3",
- "jest-get-type": "^28.0.2",
- "jest-regex-util": "^28.0.2",
- "jest-resolve": "^28.1.3",
- "jest-runner": "^28.1.3",
- "jest-util": "^28.1.3",
- "jest-validate": "^28.1.3",
+ "jest-circus": "^29.7.0",
+ "jest-environment-node": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-runner": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
"micromatch": "^4.0.4",
"parse-json": "^5.2.0",
- "pretty-format": "^28.1.3",
+ "pretty-format": "^29.7.0",
"slash": "^3.0.0",
"strip-json-comments": "^3.1.1"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"@types/node": "*",
@@ -13814,70 +14452,70 @@
}
},
"node_modules/jest-config/node_modules/jest-haste-map": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz",
- "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
+ "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/graceful-fs": "^4.1.3",
"@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
"graceful-fs": "^4.2.9",
- "jest-regex-util": "^28.0.2",
- "jest-util": "^28.1.3",
- "jest-worker": "^28.1.3",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
"micromatch": "^4.0.4",
"walker": "^1.0.8"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"optionalDependencies": {
"fsevents": "^2.3.2"
}
},
"node_modules/jest-config/node_modules/jest-regex-util": {
- "version": "28.0.2",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz",
- "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
+ "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
"dev": true,
"peer": true,
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-config/node_modules/jest-resolve": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz",
- "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
+ "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
"dev": true,
"peer": true,
"dependencies": {
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^28.1.3",
+ "jest-haste-map": "^29.7.0",
"jest-pnp-resolver": "^1.2.2",
- "jest-util": "^28.1.3",
- "jest-validate": "^28.1.3",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
"resolve": "^1.20.0",
- "resolve.exports": "^1.1.0",
+ "resolve.exports": "^2.0.0",
"slash": "^3.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-config/node_modules/jest-util": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
- "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -13885,40 +14523,41 @@
"picomatch": "^2.2.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-config/node_modules/jest-validate": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz",
- "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
+ "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"camelcase": "^6.2.0",
"chalk": "^4.0.0",
- "jest-get-type": "^28.0.2",
+ "jest-get-type": "^29.6.3",
"leven": "^3.1.0",
- "pretty-format": "^28.1.3"
+ "pretty-format": "^29.7.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-config/node_modules/jest-worker": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz",
- "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
+ "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
"dev": true,
"peer": true,
"dependencies": {
"@types/node": "*",
+ "jest-util": "^29.7.0",
"merge-stream": "^2.0.0",
"supports-color": "^8.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-config/node_modules/jest-worker/node_modules/supports-color": {
@@ -13937,19 +14576,29 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
+ "node_modules/jest-config/node_modules/resolve.exports": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
+ "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/jest-diff": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz",
- "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
+ "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
"dev": true,
"dependencies": {
"chalk": "^4.0.0",
- "diff-sequences": "^28.1.1",
- "jest-get-type": "^28.0.2",
- "pretty-format": "^28.1.3"
+ "diff-sequences": "^29.6.3",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-diff/node_modules/chalk": {
@@ -13969,33 +14618,33 @@
}
},
"node_modules/jest-docblock": {
- "version": "28.1.1",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz",
- "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
+ "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
"dev": true,
"peer": true,
"dependencies": {
"detect-newline": "^3.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-each": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz",
- "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
+ "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"chalk": "^4.0.0",
- "jest-get-type": "^28.0.2",
- "jest-util": "^28.1.3",
- "pretty-format": "^28.1.3"
+ "jest-get-type": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "pretty-format": "^29.7.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-each/node_modules/chalk": {
@@ -14016,13 +14665,13 @@
}
},
"node_modules/jest-each/node_modules/jest-util": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
- "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -14030,7 +14679,7 @@
"picomatch": "^2.2.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-environment-jsdom": {
@@ -14451,21 +15100,21 @@
}
},
"node_modules/jest-environment-node": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz",
- "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
+ "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/environment": "^28.1.3",
- "@jest/fake-timers": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/environment": "^29.7.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
- "jest-mock": "^28.1.3",
- "jest-util": "^28.1.3"
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-environment-node/node_modules/chalk": {
@@ -14486,13 +15135,13 @@
}
},
"node_modules/jest-environment-node/node_modules/jest-util": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
- "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -14500,16 +15149,16 @@
"picomatch": "^2.2.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-get-type": {
- "version": "28.0.2",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz",
- "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
+ "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
"dev": true,
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-haste-map": {
@@ -15001,32 +15650,32 @@
}
},
"node_modules/jest-leak-detector": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz",
- "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
+ "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
"dev": true,
"peer": true,
"dependencies": {
- "jest-get-type": "^28.0.2",
- "pretty-format": "^28.1.3"
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-matcher-utils": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz",
- "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
+ "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
"dev": true,
"dependencies": {
"chalk": "^4.0.0",
- "jest-diff": "^28.1.3",
- "jest-get-type": "^28.0.2",
- "pretty-format": "^28.1.3"
+ "jest-diff": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-matcher-utils/node_modules/chalk": {
@@ -15046,23 +15695,23 @@
}
},
"node_modules/jest-message-util": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz",
- "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
+ "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.12.13",
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/stack-utils": "^2.0.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"micromatch": "^4.0.4",
- "pretty-format": "^28.1.3",
+ "pretty-format": "^29.7.0",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-message-util/node_modules/chalk": {
@@ -15082,28 +15731,64 @@
}
},
"node_modules/jest-mock": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz",
- "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
+ "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
- "@types/node": "*"
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "jest-util": "^29.7.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/jest-pnp-resolver": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
- "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
+ "node_modules/jest-mock/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
- "engines": {
- "node": ">=6"
- },
- "peerDependencies": {
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-mock/node_modules/jest-util": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "graceful-fs": "^4.2.9",
+ "picomatch": "^2.2.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-pnp-resolver": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "peerDependencies": {
"jest-resolve": "*"
},
"peerDependenciesMeta": {
@@ -15143,27 +15828,27 @@
}
},
"node_modules/jest-resolve-dependencies": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz",
- "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
+ "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
"dev": true,
"peer": true,
"dependencies": {
- "jest-regex-util": "^28.0.2",
- "jest-snapshot": "^28.1.3"
+ "jest-regex-util": "^29.6.3",
+ "jest-snapshot": "^29.7.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-resolve-dependencies/node_modules/jest-regex-util": {
- "version": "28.0.2",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz",
- "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
+ "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
"dev": true,
"peer": true,
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-resolve/node_modules/@jest/types": {
@@ -15208,36 +15893,36 @@
}
},
"node_modules/jest-runner": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz",
- "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
+ "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/console": "^28.1.3",
- "@jest/environment": "^28.1.3",
- "@jest/test-result": "^28.1.3",
- "@jest/transform": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/console": "^29.7.0",
+ "@jest/environment": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
- "emittery": "^0.10.2",
+ "emittery": "^0.13.1",
"graceful-fs": "^4.2.9",
- "jest-docblock": "^28.1.1",
- "jest-environment-node": "^28.1.3",
- "jest-haste-map": "^28.1.3",
- "jest-leak-detector": "^28.1.3",
- "jest-message-util": "^28.1.3",
- "jest-resolve": "^28.1.3",
- "jest-runtime": "^28.1.3",
- "jest-util": "^28.1.3",
- "jest-watcher": "^28.1.3",
- "jest-worker": "^28.1.3",
+ "jest-docblock": "^29.7.0",
+ "jest-environment-node": "^29.7.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-leak-detector": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-resolve": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-watcher": "^29.7.0",
+ "jest-worker": "^29.7.0",
"p-limit": "^3.1.0",
"source-map-support": "0.5.13"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runner/node_modules/chalk": {
@@ -15258,70 +15943,70 @@
}
},
"node_modules/jest-runner/node_modules/jest-haste-map": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz",
- "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
+ "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/graceful-fs": "^4.1.3",
"@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
"graceful-fs": "^4.2.9",
- "jest-regex-util": "^28.0.2",
- "jest-util": "^28.1.3",
- "jest-worker": "^28.1.3",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
"micromatch": "^4.0.4",
"walker": "^1.0.8"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"optionalDependencies": {
"fsevents": "^2.3.2"
}
},
"node_modules/jest-runner/node_modules/jest-regex-util": {
- "version": "28.0.2",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz",
- "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
+ "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
"dev": true,
"peer": true,
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runner/node_modules/jest-resolve": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz",
- "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
+ "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
"dev": true,
"peer": true,
"dependencies": {
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^28.1.3",
+ "jest-haste-map": "^29.7.0",
"jest-pnp-resolver": "^1.2.2",
- "jest-util": "^28.1.3",
- "jest-validate": "^28.1.3",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
"resolve": "^1.20.0",
- "resolve.exports": "^1.1.0",
+ "resolve.exports": "^2.0.0",
"slash": "^3.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runner/node_modules/jest-util": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
- "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -15329,40 +16014,41 @@
"picomatch": "^2.2.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runner/node_modules/jest-validate": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz",
- "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
+ "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"camelcase": "^6.2.0",
"chalk": "^4.0.0",
- "jest-get-type": "^28.0.2",
+ "jest-get-type": "^29.6.3",
"leven": "^3.1.0",
- "pretty-format": "^28.1.3"
+ "pretty-format": "^29.7.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runner/node_modules/jest-worker": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz",
- "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
+ "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
"dev": true,
"peer": true,
"dependencies": {
"@types/node": "*",
+ "jest-util": "^29.7.0",
"merge-stream": "^2.0.0",
"supports-color": "^8.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runner/node_modules/jest-worker/node_modules/supports-color": {
@@ -15397,6 +16083,16 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/jest-runner/node_modules/resolve.exports": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
+ "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/jest-runner/node_modules/source-map-support": {
"version": "0.5.13",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
@@ -15409,37 +16105,37 @@
}
},
"node_modules/jest-runtime": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz",
- "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
+ "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/environment": "^28.1.3",
- "@jest/fake-timers": "^28.1.3",
- "@jest/globals": "^28.1.3",
- "@jest/source-map": "^28.1.2",
- "@jest/test-result": "^28.1.3",
- "@jest/transform": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/environment": "^29.7.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/globals": "^29.7.0",
+ "@jest/source-map": "^29.6.3",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
"chalk": "^4.0.0",
"cjs-module-lexer": "^1.0.0",
"collect-v8-coverage": "^1.0.0",
- "execa": "^5.0.0",
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^28.1.3",
- "jest-message-util": "^28.1.3",
- "jest-mock": "^28.1.3",
- "jest-regex-util": "^28.0.2",
- "jest-resolve": "^28.1.3",
- "jest-snapshot": "^28.1.3",
- "jest-util": "^28.1.3",
+ "jest-haste-map": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-mock": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
"slash": "^3.0.0",
"strip-bom": "^4.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runtime/node_modules/chalk": {
@@ -15460,70 +16156,70 @@
}
},
"node_modules/jest-runtime/node_modules/jest-haste-map": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz",
- "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
+ "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/graceful-fs": "^4.1.3",
"@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
"graceful-fs": "^4.2.9",
- "jest-regex-util": "^28.0.2",
- "jest-util": "^28.1.3",
- "jest-worker": "^28.1.3",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
"micromatch": "^4.0.4",
"walker": "^1.0.8"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"optionalDependencies": {
"fsevents": "^2.3.2"
}
},
"node_modules/jest-runtime/node_modules/jest-regex-util": {
- "version": "28.0.2",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz",
- "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
+ "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
"dev": true,
"peer": true,
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runtime/node_modules/jest-resolve": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz",
- "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
+ "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
"dev": true,
"peer": true,
"dependencies": {
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^28.1.3",
+ "jest-haste-map": "^29.7.0",
"jest-pnp-resolver": "^1.2.2",
- "jest-util": "^28.1.3",
- "jest-validate": "^28.1.3",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
"resolve": "^1.20.0",
- "resolve.exports": "^1.1.0",
+ "resolve.exports": "^2.0.0",
"slash": "^3.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runtime/node_modules/jest-util": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
- "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -15531,40 +16227,41 @@
"picomatch": "^2.2.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runtime/node_modules/jest-validate": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz",
- "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
+ "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"camelcase": "^6.2.0",
"chalk": "^4.0.0",
- "jest-get-type": "^28.0.2",
+ "jest-get-type": "^29.6.3",
"leven": "^3.1.0",
- "pretty-format": "^28.1.3"
+ "pretty-format": "^29.7.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runtime/node_modules/jest-worker": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz",
- "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
+ "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
"dev": true,
"peer": true,
"dependencies": {
"@types/node": "*",
+ "jest-util": "^29.7.0",
"merge-stream": "^2.0.0",
"supports-color": "^8.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runtime/node_modules/jest-worker/node_modules/supports-color": {
@@ -15583,6 +16280,16 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
+ "node_modules/jest-runtime/node_modules/resolve.exports": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
+ "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/jest-runtime/node_modules/strip-bom": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
@@ -15607,38 +16314,35 @@
}
},
"node_modules/jest-snapshot": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz",
- "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
+ "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
"dev": true,
"peer": true,
"dependencies": {
"@babel/core": "^7.11.6",
"@babel/generator": "^7.7.2",
+ "@babel/plugin-syntax-jsx": "^7.7.2",
"@babel/plugin-syntax-typescript": "^7.7.2",
- "@babel/traverse": "^7.7.2",
"@babel/types": "^7.3.3",
- "@jest/expect-utils": "^28.1.3",
- "@jest/transform": "^28.1.3",
- "@jest/types": "^28.1.3",
- "@types/babel__traverse": "^7.0.6",
- "@types/prettier": "^2.1.5",
+ "@jest/expect-utils": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
"babel-preset-current-node-syntax": "^1.0.0",
"chalk": "^4.0.0",
- "expect": "^28.1.3",
+ "expect": "^29.7.0",
"graceful-fs": "^4.2.9",
- "jest-diff": "^28.1.3",
- "jest-get-type": "^28.0.2",
- "jest-haste-map": "^28.1.3",
- "jest-matcher-utils": "^28.1.3",
- "jest-message-util": "^28.1.3",
- "jest-util": "^28.1.3",
+ "jest-diff": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
"natural-compare": "^1.4.0",
- "pretty-format": "^28.1.3",
- "semver": "^7.3.5"
+ "pretty-format": "^29.7.0",
+ "semver": "^7.5.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-snapshot/node_modules/chalk": {
@@ -15658,50 +16362,14 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/jest-snapshot/node_modules/jest-haste-map": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz",
- "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@jest/types": "^28.1.3",
- "@types/graceful-fs": "^4.1.3",
- "@types/node": "*",
- "anymatch": "^3.0.3",
- "fb-watchman": "^2.0.0",
- "graceful-fs": "^4.2.9",
- "jest-regex-util": "^28.0.2",
- "jest-util": "^28.1.3",
- "jest-worker": "^28.1.3",
- "micromatch": "^4.0.4",
- "walker": "^1.0.8"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
- },
- "optionalDependencies": {
- "fsevents": "^2.3.2"
- }
- },
- "node_modules/jest-snapshot/node_modules/jest-regex-util": {
- "version": "28.0.2",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz",
- "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
- }
- },
"node_modules/jest-snapshot/node_modules/jest-util": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
- "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
"peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -15709,50 +16377,18 @@
"picomatch": "^2.2.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
- }
- },
- "node_modules/jest-snapshot/node_modules/jest-worker": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz",
- "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
- }
- },
- "node_modules/jest-snapshot/node_modules/jest-worker/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-transform-css": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/jest-transform-css/-/jest-transform-css-4.0.1.tgz",
- "integrity": "sha512-/rhrYXnLACL2rQ4ME6KtPGR2bKM27HDI6nRHGzGBrZXqkErN+PwxCz+wz6oflIf783szH8HWL0p5Iu7RXTSHYQ==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/jest-transform-css/-/jest-transform-css-6.0.1.tgz",
+ "integrity": "sha512-i78Pi2MW6vcdsUFSRx1kPbjbEIO0pBWwh1Y+PcDrLwTv/6e5p7fzsV/gxFW/SYMHS8DUvMdRVTwVCkA/y+t0iQ==",
"dev": true,
"dependencies": {
"common-tags": "1.8.2",
- "cosmiconfig": "7.0.1",
"cross-spawn": "7.0.3",
- "postcss-load-config": "2.0.0",
+ "postcss-load-config": "4.0.1",
"postcss-modules": "4.3.1",
"style-inject": "0.3.0"
},
@@ -15760,45 +16396,45 @@
"postcss": "^8.4.12"
}
},
- "node_modules/jest-transform-css/node_modules/parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
- "dev": true,
- "dependencies": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/jest-transform-css/node_modules/postcss-load-config": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz",
- "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
+ "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
"dev": true,
"dependencies": {
- "cosmiconfig": "^4.0.0",
- "import-cwd": "^2.0.0"
+ "lilconfig": "^2.0.5",
+ "yaml": "^2.1.1"
},
"engines": {
- "node": ">= 4"
+ "node": ">= 14"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
}
},
- "node_modules/jest-transform-css/node_modules/postcss-load-config/node_modules/cosmiconfig": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz",
- "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==",
+ "node_modules/jest-transform-css/node_modules/yaml": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz",
+ "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==",
"dev": true,
- "dependencies": {
- "is-directory": "^0.3.1",
- "js-yaml": "^3.9.0",
- "parse-json": "^4.0.0",
- "require-from-string": "^2.0.1"
+ "bin": {
+ "yaml": "bin.mjs"
},
"engines": {
- "node": ">=4"
+ "node": ">= 14"
}
},
"node_modules/jest-util": {
@@ -15952,140 +16588,32 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/jest-watch-typeahead": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz",
- "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==",
+ "node_modules/jest-watcher": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
+ "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
"dev": true,
+ "peer": true,
"dependencies": {
- "ansi-escapes": "^4.3.1",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
- "jest-regex-util": "^28.0.0",
- "jest-watcher": "^28.0.0",
- "slash": "^4.0.0",
- "string-length": "^5.0.1",
- "strip-ansi": "^7.0.1"
+ "emittery": "^0.13.1",
+ "jest-util": "^29.7.0",
+ "string-length": "^4.0.1"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "peerDependencies": {
- "jest": "^27.0.0 || ^28.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/jest-watch-typeahead/node_modules/ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/jest-watch-typeahead/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/jest-watch-typeahead/node_modules/char-regex": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz",
- "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==",
- "dev": true,
- "engines": {
- "node": ">=12.20"
- }
- },
- "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": {
- "version": "28.0.2",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz",
- "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==",
- "dev": true,
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
- }
- },
- "node_modules/jest-watch-typeahead/node_modules/slash": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
- "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/jest-watch-typeahead/node_modules/string-length": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz",
- "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==",
- "dev": true,
- "dependencies": {
- "char-regex": "^2.0.0",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12.20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/jest-watch-typeahead/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/jest-watcher": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz",
- "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==",
- "dev": true,
- "dependencies": {
- "@jest/test-result": "^28.1.3",
- "@jest/types": "^28.1.3",
- "@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "emittery": "^0.10.2",
- "jest-util": "^28.1.3",
- "string-length": "^4.0.1"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
- }
- },
- "node_modules/jest-watcher/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/jest-watcher/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
+ "peer": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -16098,12 +16626,13 @@
}
},
"node_modules/jest-watcher/node_modules/jest-util": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
- "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -16111,7 +16640,7 @@
"picomatch": "^2.2.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-worker": {
@@ -16143,6 +16672,15 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
+ "node_modules/jiti": {
+ "version": "1.21.0",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
+ "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==",
+ "dev": true,
+ "bin": {
+ "jiti": "bin/jiti.js"
+ }
+ },
"node_modules/js-sdsl": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz",
@@ -16272,6 +16810,12 @@
"node": ">=4"
}
},
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true
+ },
"node_modules/json-parse-better-errors": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
@@ -16335,7 +16879,7 @@
"node_modules/jsonparse": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==",
"dev": true,
"engines": [
"node >= 0.2.0"
@@ -16396,6 +16940,15 @@
"node": ">=4.0"
}
},
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
"node_modules/kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -16424,9 +16977,9 @@
}
},
"node_modules/known-css-properties": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.24.0.tgz",
- "integrity": "sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==",
+ "version": "0.29.0",
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz",
+ "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==",
"dev": true
},
"node_modules/language-subtag-registry": {
@@ -16467,9 +17020,9 @@
}
},
"node_modules/lilconfig": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz",
- "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
"dev": true,
"engines": {
"node": ">=10"
@@ -16482,131 +17035,228 @@
"dev": true
},
"node_modules/lint-staged": {
- "version": "12.3.7",
- "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.3.7.tgz",
- "integrity": "sha512-/S4D726e2GIsDVWIk1XGvheCaDm1SJRQp8efamZFWJxQMVEbOwSysp7xb49Oo73KYCdy97mIWinhlxcoNqIfIQ==",
- "dev": true,
- "dependencies": {
- "cli-truncate": "^3.1.0",
- "colorette": "^2.0.16",
- "commander": "^8.3.0",
- "debug": "^4.3.3",
- "execa": "^5.1.1",
- "lilconfig": "2.0.4",
- "listr2": "^4.0.1",
- "micromatch": "^4.0.4",
- "normalize-path": "^3.0.0",
- "object-inspect": "^1.12.0",
- "pidtree": "^0.5.0",
- "string-argv": "^0.3.1",
- "supports-color": "^9.2.1",
- "yaml": "^1.10.2"
+ "version": "15.2.2",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.2.tgz",
+ "integrity": "sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "5.3.0",
+ "commander": "11.1.0",
+ "debug": "4.3.4",
+ "execa": "8.0.1",
+ "lilconfig": "3.0.0",
+ "listr2": "8.0.1",
+ "micromatch": "4.0.5",
+ "pidtree": "0.6.0",
+ "string-argv": "0.3.2",
+ "yaml": "2.3.4"
},
"bin": {
"lint-staged": "bin/lint-staged.js"
},
"engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ "node": ">=18.12.0"
},
"funding": {
"url": "https://opencollective.com/lint-staged"
}
},
+ "node_modules/lint-staged/node_modules/chalk": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+ "dev": true,
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
"node_modules/lint-staged/node_modules/commander": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
- "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
+ "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
"dev": true,
"engines": {
- "node": ">= 12"
+ "node": ">=16"
}
},
- "node_modules/lint-staged/node_modules/supports-color": {
- "version": "9.4.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz",
- "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==",
+ "node_modules/lint-staged/node_modules/execa": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
"dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^8.0.1",
+ "human-signals": "^5.0.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^3.0.0"
+ },
"engines": {
- "node": ">=12"
+ "node": ">=16.17"
},
"funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
- "node_modules/listr2": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz",
- "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==",
+ "node_modules/lint-staged/node_modules/get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
"dev": true,
- "dependencies": {
- "cli-truncate": "^2.1.0",
- "colorette": "^2.0.16",
- "log-update": "^4.0.0",
- "p-map": "^4.0.0",
- "rfdc": "^1.3.0",
- "rxjs": "^7.5.5",
- "through": "^2.3.8",
- "wrap-ansi": "^7.0.0"
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lint-staged/node_modules/human-signals": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=16.17.0"
+ }
+ },
+ "node_modules/lint-staged/node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lint-staged/node_modules/lilconfig": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz",
+ "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/lint-staged/node_modules/mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "dev": true,
"engines": {
"node": ">=12"
},
- "peerDependencies": {
- "enquirer": ">= 2.3.0 < 3"
- },
- "peerDependenciesMeta": {
- "enquirer": {
- "optional": true
- }
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/listr2/node_modules/cli-truncate": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
- "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
+ "node_modules/lint-staged/node_modules/npm-run-path": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+ "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
"dev": true,
"dependencies": {
- "slice-ansi": "^3.0.0",
- "string-width": "^4.2.0"
+ "path-key": "^4.0.0"
},
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/listr2/node_modules/slice-ansi": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
- "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
+ "node_modules/lint-staged/node_modules/onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
"dev": true,
"dependencies": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
+ "mimic-fn": "^4.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/listr2/node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "node_modules/lint-staged/node_modules/path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
"dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
+ "engines": {
+ "node": ">=12"
},
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lint-staged/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=14"
},
"funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/lint-staged/node_modules/strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lint-staged/node_modules/yaml": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
+ "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/listr2": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.0.1.tgz",
+ "integrity": "sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==",
+ "dev": true,
+ "dependencies": {
+ "cli-truncate": "^4.0.0",
+ "colorette": "^2.0.20",
+ "eventemitter3": "^5.0.1",
+ "log-update": "^6.0.0",
+ "rfdc": "^1.3.0",
+ "wrap-ansi": "^9.0.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
}
},
+ "node_modules/listr2/node_modules/eventemitter3": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
+ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
+ "dev": true
+ },
"node_modules/load-json-file": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
@@ -16696,10 +17346,16 @@
"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
"dev": true
},
- "node_modules/lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+ "dev": true
+ },
+ "node_modules/lodash.kebabcase": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
+ "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==",
"dev": true
},
"node_modules/lodash.memoize": {
@@ -16714,16 +17370,34 @@
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true
},
+ "node_modules/lodash.mergewith": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
+ "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==",
+ "dev": true
+ },
+ "node_modules/lodash.snakecase": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
+ "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==",
+ "dev": true
+ },
"node_modules/lodash.sortby": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
"integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==",
"devOptional": true
},
+ "node_modules/lodash.startcase": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz",
+ "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==",
+ "dev": true
+ },
"node_modules/lodash.truncate": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
- "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
+ "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
"dev": true
},
"node_modules/lodash.uniq": {
@@ -16732,24 +17406,113 @@
"integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
"dev": true
},
+ "node_modules/lodash.upperfirst": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz",
+ "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==",
+ "dev": true
+ },
"node_modules/log-update": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
- "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz",
+ "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==",
"dev": true,
"dependencies": {
- "ansi-escapes": "^4.3.0",
- "cli-cursor": "^3.1.0",
- "slice-ansi": "^4.0.0",
- "wrap-ansi": "^6.2.0"
+ "ansi-escapes": "^6.2.0",
+ "cli-cursor": "^4.0.0",
+ "slice-ansi": "^7.0.0",
+ "strip-ansi": "^7.1.0",
+ "wrap-ansi": "^9.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-update/node_modules/ansi-escapes": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz",
+ "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-update/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/log-update/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/log-update/node_modules/is-fullwidth-code-point": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz",
+ "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==",
+ "dev": true,
+ "dependencies": {
+ "get-east-asian-width": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/log-update/node_modules/slice-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz",
+ "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^6.2.1",
+ "is-fullwidth-code-point": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
+ "node_modules/log-update/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
"node_modules/loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -16783,9 +17546,9 @@
}
},
"node_modules/lz-string": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz",
- "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
+ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
"dev": true,
"bin": {
"lz-string": "bin/bin.js"
@@ -16908,64 +17671,12 @@
}
},
"node_modules/meow": {
- "version": "8.1.2",
- "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz",
- "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==",
- "dev": true,
- "dependencies": {
- "@types/minimist": "^1.2.0",
- "camelcase-keys": "^6.2.2",
- "decamelize-keys": "^1.1.0",
- "hard-rejection": "^2.1.0",
- "minimist-options": "4.1.0",
- "normalize-package-data": "^3.0.0",
- "read-pkg-up": "^7.0.1",
- "redent": "^3.0.0",
- "trim-newlines": "^3.0.0",
- "type-fest": "^0.18.0",
- "yargs-parser": "^20.2.3"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/meow/node_modules/hosted-git-info": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
- "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/meow/node_modules/normalize-package-data": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
- "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
- "dev": true,
- "dependencies": {
- "hosted-git-info": "^4.0.1",
- "is-core-module": "^2.5.0",
- "semver": "^7.3.4",
- "validate-npm-package-license": "^3.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/meow/node_modules/type-fest": {
- "version": "0.18.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
- "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
+ "version": "12.1.1",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz",
+ "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==",
"dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=16.10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -17075,20 +17786,6 @@
"node": ">=4"
}
},
- "node_modules/mini-create-react-context": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz",
- "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==",
- "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
- "dependencies": {
- "@babel/runtime": "^7.12.1",
- "tiny-warning": "^1.0.3"
- },
- "peerDependencies": {
- "prop-types": "^15.0.0",
- "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0"
- }
- },
"node_modules/mini-css-extract-plugin": {
"version": "2.7.2",
"resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz",
@@ -17168,15 +17865,6 @@
"node": ">= 6"
}
},
- "node_modules/minimist-options/node_modules/arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/minipass": {
"version": "3.1.6",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz",
@@ -17215,9 +17903,9 @@
}
},
"node_modules/monaco-editor": {
- "version": "0.31.1",
- "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.31.1.tgz",
- "integrity": "sha512-FYPwxGZAeP6mRRyrr5XTGHD9gRXVjy7GUzF4IPChnyt3fS5WrNxIkS8DNujWf6EQy0Zlzpxw8oTVE+mWI2/D1Q=="
+ "version": "0.44.0",
+ "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.44.0.tgz",
+ "integrity": "sha512-5SmjNStN6bSuSE5WPT2ZV+iYn1/yI9sd4Igtk23ChvqB7kDk9lZbB9F5frsuvpB+2njdIeGGFf2G4gbE6rCC9Q=="
},
"node_modules/ms": {
"version": "2.1.2",
@@ -17299,6 +17987,12 @@
"tslib": "^2.0.3"
}
},
+ "node_modules/node-abort-controller": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz",
+ "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==",
+ "dev": true
+ },
"node_modules/node-fetch": {
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
@@ -17422,12 +18116,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/normalize-selector": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz",
- "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=",
- "dev": true
- },
"node_modules/normalize-url": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
@@ -17768,14 +18456,15 @@
}
},
"node_modules/object.fromentries": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz",
- "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==",
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+ "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -17802,6 +18491,20 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/object.groupby": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
+ "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/object.hasown": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz",
@@ -17944,21 +18647,6 @@
"node": ">=8"
}
},
- "node_modules/p-map": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
- "dev": true,
- "dependencies": {
- "aggregate-error": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/p-retry": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz",
@@ -18118,9 +18806,9 @@
}
},
"node_modules/pidtree": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz",
- "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==",
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz",
+ "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==",
"dev": true,
"bin": {
"pidtree": "bin/pidtree.js"
@@ -18217,16 +18905,55 @@
"node": ">=4"
}
},
+ "node_modules/playwright": {
+ "version": "1.42.1",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.42.1.tgz",
+ "integrity": "sha512-PgwB03s2DZBcNRoW+1w9E+VkLBxweib6KTXM0M3tkiT4jVxKSi6PmVJ591J+0u10LUrgxB7dLRbiJqO5s2QPMg==",
+ "dev": true,
+ "dependencies": {
+ "playwright-core": "1.42.1"
+ },
+ "bin": {
+ "playwright": "cli.js"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "optionalDependencies": {
+ "fsevents": "2.3.2"
+ }
+ },
+ "node_modules/playwright-core": {
+ "version": "1.42.1",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.42.1.tgz",
+ "integrity": "sha512-mxz6zclokgrke9p1vtdy/COWBH+eOZgYUVVU34C73M+4j4HLlQJHtfcqiqqxpP0o8HhMkflvfbquLX5dg6wlfA==",
+ "dev": true,
+ "bin": {
+ "playwright-core": "cli.js"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
"node_modules/pn": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
"integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
"optional": true
},
+ "node_modules/possible-typed-array-names": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/postcss": {
- "version": "8.4.33",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz",
- "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==",
+ "version": "8.4.38",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
+ "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
"dev": true,
"funding": [
{
@@ -18245,7 +18972,7 @@
"dependencies": {
"nanoid": "^3.3.7",
"picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
+ "source-map-js": "^1.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14"
@@ -18738,15 +19465,6 @@
}
}
},
- "node_modules/postcss-load-config/node_modules/lilconfig": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/postcss-loader": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz",
@@ -19384,19 +20102,29 @@
"dev": true
},
"node_modules/postcss-scss": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.2.tgz",
- "integrity": "sha512-xfdkU128CkKKKVAwkyt0M8OdnelJ3MRcIRAPPQkRpoPeuzWY3RIeg7piRCpZ79MK7Q16diLXMMAD9dN5mauPlQ==",
+ "version": "4.0.9",
+ "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz",
+ "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==",
"dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss-scss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
"engines": {
"node": ">=12.0"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
"peerDependencies": {
- "postcss": "^8.3.3"
+ "postcss": "^8.4.29"
}
},
"node_modules/postcss-selector-not": {
@@ -19432,12 +20160,12 @@
}
},
"node_modules/postcss-sorting": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-7.0.1.tgz",
- "integrity": "sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g==",
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-8.0.2.tgz",
+ "integrity": "sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==",
"dev": true,
"peerDependencies": {
- "postcss": "^8.3.9"
+ "postcss": "^8.4.20"
}
},
"node_modules/postcss-svgo": {
@@ -19607,15 +20335,18 @@
}
},
"node_modules/prettier": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz",
- "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==",
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz",
+ "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==",
"dev": true,
"bin": {
- "prettier": "bin-prettier.js"
+ "prettier": "bin/prettier.cjs"
},
"engines": {
- "node": ">=10.13.0"
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
}
},
"node_modules/prettier-linter-helpers": {
@@ -19653,18 +20384,17 @@
}
},
"node_modules/pretty-format": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz",
- "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+ "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^28.1.3",
- "ansi-regex": "^5.0.1",
+ "@jest/schemas": "^29.6.3",
"ansi-styles": "^5.0.0",
"react-is": "^18.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/pretty-format/node_modules/ansi-styles": {
@@ -19770,6 +20500,23 @@
"node": ">=6"
}
},
+ "node_modules/pure-rand": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz",
+ "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/dubzzz"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fast-check"
+ }
+ ],
+ "peer": true
+ },
"node_modules/q": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
@@ -19781,11 +20528,11 @@
}
},
"node_modules/qs": {
- "version": "6.11.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
- "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "version": "6.12.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.0.tgz",
+ "integrity": "sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==",
"dependencies": {
- "side-channel": "^1.0.4"
+ "side-channel": "^1.0.6"
},
"engines": {
"node": ">=0.6"
@@ -19794,15 +20541,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/querystring": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==",
- "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.",
- "engines": {
- "node": ">=0.4.x"
- }
- },
"node_modules/querystringify": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
@@ -19830,12 +20568,15 @@
]
},
"node_modules/quick-lru": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
- "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/raf": {
@@ -19894,13 +20635,47 @@
"node": ">= 0.8"
}
},
+ "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/rc-util": {
+ "version": "5.39.1",
+ "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.39.1.tgz",
+ "integrity": "sha512-OW/ERynNDgNr4y0oiFmtes3rbEamXw7GHGbkbNd9iRr7kgT03T6fT0b9WpJ3mbxKhyOcAHnGcIoh5u/cjrC2OQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.18.3",
+ "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/react": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
- "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==",
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
"dependencies": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
+ "loose-envify": "^1.1.0"
},
"engines": {
"node": ">=0.10.0"
@@ -19924,9 +20699,9 @@
}
},
"node_modules/react-app-rewired": {
- "version": "2.1.11",
- "resolved": "https://registry.npmjs.org/react-app-rewired/-/react-app-rewired-2.1.11.tgz",
- "integrity": "sha512-zRIqJUPsCoPnfYtea3xgPbKR42vx0NoH5oo8R8FELXqzkjJHa39V6zD8CAdkLJoYL8V3JScWHAfKMZOzi1Ydmw==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/react-app-rewired/-/react-app-rewired-2.2.1.tgz",
+ "integrity": "sha512-uFQWTErXeLDrMzOJHKp0h8P1z0LV9HzPGsJ6adOtGlA/B9WfT6Shh4j2tLTTGlXOfiVx6w6iWpp7SOC5pvk+gA==",
"dev": true,
"dependencies": {
"semver": "^5.6.0"
@@ -19965,6 +20740,30 @@
"react-dom": "^16.8.5 || ^17.0.0 || ^18.0.0"
}
},
+ "node_modules/react-beautiful-dnd/node_modules/react-redux": {
+ "version": "7.2.9",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz",
+ "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.15.4",
+ "@types/react-redux": "^7.1.20",
+ "hoist-non-react-statics": "^3.3.2",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.7.2",
+ "react-is": "^17.0.2"
+ },
+ "peerDependencies": {
+ "react": "^16.8.3 || ^17 || ^18"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ },
+ "react-native": {
+ "optional": true
+ }
+ }
+ },
"node_modules/react-copy-to-clipboard": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz",
@@ -20111,22 +20910,21 @@
}
},
"node_modules/react-dom": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
- "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==",
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
"dependencies": {
"loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "scheduler": "^0.20.2"
+ "scheduler": "^0.23.0"
},
"peerDependencies": {
- "react": "17.0.2"
+ "react": "^18.2.0"
}
},
"node_modules/react-error-boundary": {
- "version": "4.0.12",
- "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-4.0.12.tgz",
- "integrity": "sha512-kJdxdEYlb7CPC1A0SeUY38cHpjuu6UkvzKiAmqmOFL21VRfMhOcWxTCBgLVCO0VEMh9JhFNcVaXlV4/BTpiwOA==",
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-4.0.13.tgz",
+ "integrity": "sha512-b6PwbdSv8XeOSYvjt8LpgpKrZ0yGdtZokYwkwV2wlcZbxgopHX/hgPl5VgpnoVOWd868n1hktM8Qm4b+02MiLQ==",
"dependencies": {
"@babel/runtime": "^7.12.5"
},
@@ -20204,16 +21002,16 @@
}
},
"node_modules/react-monaco-editor": {
- "version": "0.47.0",
- "resolved": "https://registry.npmjs.org/react-monaco-editor/-/react-monaco-editor-0.47.0.tgz",
- "integrity": "sha512-uXZMzYJReIHSA41Qjka2LZckEEawPQC0smpeUgkUvyaMiT8y9qFodIcQtLmSUj3g7gd/6W15a73jBs1d6sr+Mw==",
+ "version": "0.55.0",
+ "resolved": "https://registry.npmjs.org/react-monaco-editor/-/react-monaco-editor-0.55.0.tgz",
+ "integrity": "sha512-GdEP0Q3Rn1dczfKEEyY08Nes5plWwIYU4sWRBQO0+jsQWQsKMHKCC6+hPRwR7G/4aA3V/iU9jSmWPzVJYMVFSQ==",
"dependencies": {
"prop-types": "^15.8.1"
},
"peerDependencies": {
- "@types/react": "^17.x",
- "monaco-editor": "^0.31.1",
- "react": "^17.x"
+ "@types/react": ">=16 <= 18",
+ "monaco-editor": "^0.44.0",
+ "react": ">=16 <= 18"
}
},
"node_modules/react-popper": {
@@ -20231,26 +21029,28 @@
}
},
"node_modules/react-redux": {
- "version": "7.2.6",
- "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.6.tgz",
- "integrity": "sha512-10RPdsz0UUrRL1NZE0ejTkucnclYSgXp5q+tB5SWx2qeG2ZJQJyymgAhwKy73yiL/13btfB6fPr+rgbMAaZIAQ==",
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.1.0.tgz",
+ "integrity": "sha512-6qoDzIO+gbrza8h3hjMA9aq4nwVFCKFtY2iLxCtVT38Swyy2C/dJCGBXHeHLtx6qlg/8qzc2MrhOeduf5K32wQ==",
"dependencies": {
- "@babel/runtime": "^7.15.4",
- "@types/react-redux": "^7.1.20",
- "hoist-non-react-statics": "^3.3.2",
- "loose-envify": "^1.4.0",
- "prop-types": "^15.7.2",
- "react-is": "^17.0.2"
+ "@types/use-sync-external-store": "^0.0.3",
+ "use-sync-external-store": "^1.0.0"
},
"peerDependencies": {
- "react": "^16.8.3 || ^17"
+ "@types/react": "^18.2.25",
+ "react": "^18.0",
+ "react-native": ">=0.69",
+ "redux": "^5.0.0"
},
"peerDependenciesMeta": {
- "react-dom": {
+ "@types/react": {
"optional": true
},
"react-native": {
"optional": true
+ },
+ "redux": {
+ "optional": true
}
}
},
@@ -20264,15 +21064,14 @@
}
},
"node_modules/react-router": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.1.tgz",
- "integrity": "sha512-lIboRiOtDLFdg1VTemMwud9vRVuOCZmUIT/7lUoZiSpPODiiH1UQlfXy+vPLC/7IWdFYnhRwAyNqA/+I7wnvKQ==",
+ "version": "5.3.4",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz",
+ "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==",
"dependencies": {
"@babel/runtime": "^7.12.13",
"history": "^4.9.0",
"hoist-non-react-statics": "^3.1.0",
"loose-envify": "^1.3.1",
- "mini-create-react-context": "^0.4.0",
"path-to-regexp": "^1.7.0",
"prop-types": "^15.6.2",
"react-is": "^16.6.0",
@@ -20284,15 +21083,15 @@
}
},
"node_modules/react-router-dom": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.0.tgz",
- "integrity": "sha512-ObVBLjUZsphUUMVycibxgMdh5jJ1e3o+KpAZBVeHcNQZ4W+uUGGWsokurzlF4YOldQYRQL4y6yFRWM4m3svmuQ==",
+ "version": "5.3.4",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz",
+ "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==",
"dependencies": {
"@babel/runtime": "^7.12.13",
"history": "^4.9.0",
"loose-envify": "^1.3.1",
"prop-types": "^15.6.2",
- "react-router": "5.2.1",
+ "react-router": "5.3.4",
"tiny-invariant": "^1.0.2",
"tiny-warning": "^1.0.0"
},
@@ -20540,6 +21339,18 @@
}
}
},
+ "node_modules/react-scripts/node_modules/@jest/schemas": {
+ "version": "28.1.3",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz",
+ "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.24.1"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
"node_modules/react-scripts/node_modules/@jest/source-map": {
"version": "27.5.1",
"resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz",
@@ -20626,6 +21437,12 @@
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
+ "node_modules/react-scripts/node_modules/@sinclair/typebox": {
+ "version": "0.24.51",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz",
+ "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==",
+ "dev": true
+ },
"node_modules/react-scripts/node_modules/@sinonjs/fake-timers": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz",
@@ -20961,180 +21778,476 @@
"integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==",
"dev": true,
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ }
+ },
+ "node_modules/react-scripts/node_modules/jest-leak-detector": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz",
+ "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==",
+ "dev": true,
+ "dependencies": {
+ "jest-get-type": "^27.5.1",
+ "pretty-format": "^27.5.1"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ }
+ },
+ "node_modules/react-scripts/node_modules/jest-matcher-utils": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz",
+ "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "jest-diff": "^27.5.1",
+ "jest-get-type": "^27.5.1",
+ "pretty-format": "^27.5.1"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ }
+ },
+ "node_modules/react-scripts/node_modules/jest-message-util": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz",
+ "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.12.13",
+ "@jest/types": "^27.5.1",
+ "@types/stack-utils": "^2.0.0",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^27.5.1",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.3"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ }
+ },
+ "node_modules/react-scripts/node_modules/jest-mock": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz",
+ "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^27.5.1",
+ "@types/node": "*"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ }
+ },
+ "node_modules/react-scripts/node_modules/jest-resolve-dependencies": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz",
+ "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^27.5.1",
+ "jest-regex-util": "^27.5.1",
+ "jest-snapshot": "^27.5.1"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ }
+ },
+ "node_modules/react-scripts/node_modules/jest-runner": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz",
+ "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/console": "^27.5.1",
+ "@jest/environment": "^27.5.1",
+ "@jest/test-result": "^27.5.1",
+ "@jest/transform": "^27.5.1",
+ "@jest/types": "^27.5.1",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "emittery": "^0.8.1",
+ "graceful-fs": "^4.2.9",
+ "jest-docblock": "^27.5.1",
+ "jest-environment-jsdom": "^27.5.1",
+ "jest-environment-node": "^27.5.1",
+ "jest-haste-map": "^27.5.1",
+ "jest-leak-detector": "^27.5.1",
+ "jest-message-util": "^27.5.1",
+ "jest-resolve": "^27.5.1",
+ "jest-runtime": "^27.5.1",
+ "jest-util": "^27.5.1",
+ "jest-worker": "^27.5.1",
+ "source-map-support": "^0.5.6",
+ "throat": "^6.0.1"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ }
+ },
+ "node_modules/react-scripts/node_modules/jest-runtime": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz",
+ "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "^27.5.1",
+ "@jest/fake-timers": "^27.5.1",
+ "@jest/globals": "^27.5.1",
+ "@jest/source-map": "^27.5.1",
+ "@jest/test-result": "^27.5.1",
+ "@jest/transform": "^27.5.1",
+ "@jest/types": "^27.5.1",
+ "chalk": "^4.0.0",
+ "cjs-module-lexer": "^1.0.0",
+ "collect-v8-coverage": "^1.0.0",
+ "execa": "^5.0.0",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^27.5.1",
+ "jest-message-util": "^27.5.1",
+ "jest-mock": "^27.5.1",
+ "jest-regex-util": "^27.5.1",
+ "jest-resolve": "^27.5.1",
+ "jest-snapshot": "^27.5.1",
+ "jest-util": "^27.5.1",
+ "slash": "^3.0.0",
+ "strip-bom": "^4.0.0"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ }
+ },
+ "node_modules/react-scripts/node_modules/jest-snapshot": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz",
+ "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.7.2",
+ "@babel/generator": "^7.7.2",
+ "@babel/plugin-syntax-typescript": "^7.7.2",
+ "@babel/traverse": "^7.7.2",
+ "@babel/types": "^7.0.0",
+ "@jest/transform": "^27.5.1",
+ "@jest/types": "^27.5.1",
+ "@types/babel__traverse": "^7.0.4",
+ "@types/prettier": "^2.1.5",
+ "babel-preset-current-node-syntax": "^1.0.0",
+ "chalk": "^4.0.0",
+ "expect": "^27.5.1",
+ "graceful-fs": "^4.2.9",
+ "jest-diff": "^27.5.1",
+ "jest-get-type": "^27.5.1",
+ "jest-haste-map": "^27.5.1",
+ "jest-matcher-utils": "^27.5.1",
+ "jest-message-util": "^27.5.1",
+ "jest-util": "^27.5.1",
+ "natural-compare": "^1.4.0",
+ "pretty-format": "^27.5.1",
+ "semver": "^7.3.2"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ }
+ },
+ "node_modules/react-scripts/node_modules/jest-watch-typeahead": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz",
+ "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==",
+ "dev": true,
+ "dependencies": {
+ "ansi-escapes": "^4.3.1",
+ "chalk": "^4.0.0",
+ "jest-regex-util": "^28.0.0",
+ "jest-watcher": "^28.0.0",
+ "slash": "^4.0.0",
+ "string-length": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "jest": "^27.0.0 || ^28.0.0"
+ }
+ },
+ "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/@jest/console": {
+ "version": "28.1.3",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz",
+ "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^28.1.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "jest-message-util": "^28.1.3",
+ "jest-util": "^28.1.3",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/@jest/test-result": {
+ "version": "28.1.3",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz",
+ "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/console": "^28.1.3",
+ "@jest/types": "^28.1.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "collect-v8-coverage": "^1.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/@jest/types": {
+ "version": "28.1.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz",
+ "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "^28.1.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.8",
+ "chalk": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/@types/yargs": {
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
+ "dev": true,
+ "dependencies": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/emittery": {
+ "version": "0.10.2",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz",
+ "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/emittery?sponsor=1"
+ }
+ },
+ "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/jest-message-util": {
+ "version": "28.1.3",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz",
+ "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.12.13",
+ "@jest/types": "^28.1.3",
+ "@types/stack-utils": "^2.0.0",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^28.1.3",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.3"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/jest-regex-util": {
+ "version": "28.0.2",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz",
+ "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==",
+ "dev": true,
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/jest-util": {
+ "version": "28.1.3",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
+ "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^28.1.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "graceful-fs": "^4.2.9",
+ "picomatch": "^2.2.3"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
}
},
- "node_modules/react-scripts/node_modules/jest-leak-detector": {
- "version": "27.5.1",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz",
- "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==",
+ "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/jest-watcher": {
+ "version": "28.1.3",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz",
+ "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==",
"dev": true,
"dependencies": {
- "jest-get-type": "^27.5.1",
- "pretty-format": "^27.5.1"
+ "@jest/test-result": "^28.1.3",
+ "@jest/types": "^28.1.3",
+ "@types/node": "*",
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.0.0",
+ "emittery": "^0.10.2",
+ "jest-util": "^28.1.3",
+ "string-length": "^4.0.1"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
}
},
- "node_modules/react-scripts/node_modules/jest-matcher-utils": {
- "version": "27.5.1",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz",
- "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==",
+ "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/string-length": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
+ "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
"dev": true,
"dependencies": {
- "chalk": "^4.0.0",
- "jest-diff": "^27.5.1",
- "jest-get-type": "^27.5.1",
- "pretty-format": "^27.5.1"
+ "char-regex": "^1.0.2",
+ "strip-ansi": "^6.0.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": ">=10"
}
},
- "node_modules/react-scripts/node_modules/jest-message-util": {
- "version": "27.5.1",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz",
- "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==",
+ "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.12.13",
- "@jest/types": "^27.5.1",
- "@types/stack-utils": "^2.0.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "micromatch": "^4.0.4",
- "pretty-format": "^27.5.1",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.3"
+ "ansi-regex": "^5.0.1"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": ">=8"
}
},
- "node_modules/react-scripts/node_modules/jest-mock": {
- "version": "27.5.1",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz",
- "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==",
+ "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/pretty-format": {
+ "version": "28.1.3",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz",
+ "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.5.1",
- "@types/node": "*"
+ "@jest/schemas": "^28.1.3",
+ "ansi-regex": "^5.0.1",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
}
},
- "node_modules/react-scripts/node_modules/jest-resolve-dependencies": {
- "version": "27.5.1",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz",
- "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==",
+ "node_modules/react-scripts/node_modules/jest-watch-typeahead/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==",
+ "dev": true
+ },
+ "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/slash": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
+ "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
"dev": true,
- "dependencies": {
- "@jest/types": "^27.5.1",
- "jest-regex-util": "^27.5.1",
- "jest-snapshot": "^27.5.1"
- },
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/react-scripts/node_modules/jest-runner": {
- "version": "27.5.1",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz",
- "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==",
+ "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/string-length": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz",
+ "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==",
"dev": true,
"dependencies": {
- "@jest/console": "^27.5.1",
- "@jest/environment": "^27.5.1",
- "@jest/test-result": "^27.5.1",
- "@jest/transform": "^27.5.1",
- "@jest/types": "^27.5.1",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "emittery": "^0.8.1",
- "graceful-fs": "^4.2.9",
- "jest-docblock": "^27.5.1",
- "jest-environment-jsdom": "^27.5.1",
- "jest-environment-node": "^27.5.1",
- "jest-haste-map": "^27.5.1",
- "jest-leak-detector": "^27.5.1",
- "jest-message-util": "^27.5.1",
- "jest-resolve": "^27.5.1",
- "jest-runtime": "^27.5.1",
- "jest-util": "^27.5.1",
- "jest-worker": "^27.5.1",
- "source-map-support": "^0.5.6",
- "throat": "^6.0.1"
+ "char-regex": "^2.0.0",
+ "strip-ansi": "^7.0.1"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/react-scripts/node_modules/jest-runtime": {
- "version": "27.5.1",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz",
- "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==",
+ "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz",
+ "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==",
"dev": true,
- "dependencies": {
- "@jest/environment": "^27.5.1",
- "@jest/fake-timers": "^27.5.1",
- "@jest/globals": "^27.5.1",
- "@jest/source-map": "^27.5.1",
- "@jest/test-result": "^27.5.1",
- "@jest/transform": "^27.5.1",
- "@jest/types": "^27.5.1",
- "chalk": "^4.0.0",
- "cjs-module-lexer": "^1.0.0",
- "collect-v8-coverage": "^1.0.0",
- "execa": "^5.0.0",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^27.5.1",
- "jest-message-util": "^27.5.1",
- "jest-mock": "^27.5.1",
- "jest-regex-util": "^27.5.1",
- "jest-resolve": "^27.5.1",
- "jest-snapshot": "^27.5.1",
- "jest-util": "^27.5.1",
- "slash": "^3.0.0",
- "strip-bom": "^4.0.0"
- },
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": ">=12.20"
}
},
- "node_modules/react-scripts/node_modules/jest-snapshot": {
- "version": "27.5.1",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz",
- "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==",
+ "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
"dev": true,
"dependencies": {
- "@babel/core": "^7.7.2",
- "@babel/generator": "^7.7.2",
- "@babel/plugin-syntax-typescript": "^7.7.2",
- "@babel/traverse": "^7.7.2",
- "@babel/types": "^7.0.0",
- "@jest/transform": "^27.5.1",
- "@jest/types": "^27.5.1",
- "@types/babel__traverse": "^7.0.4",
- "@types/prettier": "^2.1.5",
- "babel-preset-current-node-syntax": "^1.0.0",
- "chalk": "^4.0.0",
- "expect": "^27.5.1",
- "graceful-fs": "^4.2.9",
- "jest-diff": "^27.5.1",
- "jest-get-type": "^27.5.1",
- "jest-haste-map": "^27.5.1",
- "jest-matcher-utils": "^27.5.1",
- "jest-message-util": "^27.5.1",
- "jest-util": "^27.5.1",
- "natural-compare": "^1.4.0",
- "pretty-format": "^27.5.1",
- "semver": "^7.3.2"
+ "ansi-regex": "^6.0.1"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/strip-ansi/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
"node_modules/react-scripts/node_modules/jest-watcher": {
@@ -21275,12 +22388,12 @@
}
},
"node_modules/react-virtualized-auto-sizer": {
- "version": "1.0.20",
- "resolved": "https://registry.npmjs.org/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.20.tgz",
- "integrity": "sha512-OdIyHwj4S4wyhbKHOKM1wLSj/UDXm839Z3Cvfg2a9j+He6yDa6i5p0qQvEiCnyQlGO/HyfSnigQwuxvYalaAXA==",
+ "version": "1.0.24",
+ "resolved": "https://registry.npmjs.org/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.24.tgz",
+ "integrity": "sha512-3kCn7N9NEb3FlvJrSHWGQ4iVl+ydQObq2fHMn12i5wbtm74zHOPhz/i64OL3c1S1vi9i2GXtZqNqUJTQ+BnNfg==",
"peerDependencies": {
- "react": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0-rc",
- "react-dom": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0-rc"
+ "react": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0",
+ "react-dom": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0"
}
},
"node_modules/react-window": {
@@ -21299,63 +22412,160 @@
"react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/read-cache": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
- "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "dev": true,
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/read-pkg": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz",
+ "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==",
+ "dev": true,
+ "dependencies": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^3.0.2",
+ "parse-json": "^5.2.0",
+ "type-fest": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg-up": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz",
+ "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^5.0.0",
+ "read-pkg": "^6.0.0",
+ "type-fest": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"dev": true,
"dependencies": {
- "pify": "^2.3.0"
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/read-pkg": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
- "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "node_modules/read-pkg-up/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
"dependencies": {
- "@types/normalize-package-data": "^2.4.0",
- "normalize-package-data": "^2.5.0",
- "parse-json": "^5.0.0",
- "type-fest": "^0.6.0"
+ "yocto-queue": "^0.1.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/read-pkg-up": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
- "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "node_modules/read-pkg-up/node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"dev": true,
"dependencies": {
- "find-up": "^4.1.0",
- "read-pkg": "^5.2.0",
- "type-fest": "^0.8.1"
+ "p-limit": "^3.0.2"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/read-pkg-up/node_modules/type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg/node_modules/hosted-git-info": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
+ "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/read-pkg/node_modules/normalize-package-data": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
+ "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
+ "dev": true,
+ "dependencies": {
+ "hosted-git-info": "^4.0.1",
+ "is-core-module": "^2.5.0",
+ "semver": "^7.3.4",
+ "validate-npm-package-license": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/read-pkg/node_modules/type-fest": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
- "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/readable-stream": {
@@ -21495,15 +22705,25 @@
"integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==",
"dev": true
},
+ "node_modules/regexp-tree": {
+ "version": "0.1.27",
+ "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz",
+ "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==",
+ "dev": true,
+ "bin": {
+ "regexp-tree": "bin/regexp-tree"
+ }
+ },
"node_modules/regexp.prototype.flags": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz",
- "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==",
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
+ "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "set-function-name": "^2.0.0"
+ "call-bind": "^1.0.6",
+ "define-properties": "^1.2.1",
+ "es-errors": "^1.3.0",
+ "set-function-name": "^2.0.1"
},
"engines": {
"node": ">= 0.4"
@@ -21845,23 +23065,20 @@
"node": ">=4"
}
},
- "node_modules/resolve-global": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz",
- "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==",
- "dev": true,
- "dependencies": {
- "global-dirs": "^0.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/resolve-pathname": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz",
"integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng=="
},
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
"node_modules/resolve-url-loader": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz",
@@ -21923,25 +23140,19 @@
}
},
"node_modules/restore-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
- "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz",
+ "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==",
"dev": true,
"dependencies": {
"onetime": "^5.1.0",
"signal-exit": "^3.0.2"
},
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "dev": true,
- "engines": {
- "node": ">=0.12"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/retry": {
@@ -21964,9 +23175,9 @@
}
},
"node_modules/rfdc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
- "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz",
+ "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==",
"dev": true
},
"node_modules/rimraf": {
@@ -22071,23 +23282,14 @@
"resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
"integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="
},
- "node_modules/rxjs": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz",
- "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==",
- "dev": true,
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
"node_modules/safe-array-concat": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz",
- "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
+ "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.5",
- "get-intrinsic": "^1.2.2",
+ "call-bind": "^1.0.7",
+ "get-intrinsic": "^1.2.4",
"has-symbols": "^1.0.3",
"isarray": "^2.0.5"
},
@@ -22125,24 +23327,27 @@
]
},
"node_modules/safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz",
+ "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==",
"dev": true,
"dependencies": {
- "ret": "~0.1.10"
+ "regexp-tree": "~0.1.1"
}
},
"node_modules/safe-regex-test": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
- "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
+ "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.3",
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
"is-regex": "^1.1.4"
},
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -22159,18 +23364,20 @@
"dev": true
},
"node_modules/sass": {
- "version": "1.32.8",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.8.tgz",
- "integrity": "sha512-Sl6mIeGpzjIUZqvKnKETfMf0iDAswD9TNlv13A7aAF3XZlRPMq4VvJWBC2N2DXbp94MQVdNSFG6LfF/iOXrPHQ==",
+ "version": "1.72.0",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.72.0.tgz",
+ "integrity": "sha512-Gpczt3WA56Ly0Mn8Sl21Vj94s1axi9hDIzDFn9Ph9x3C3p4nNyvsqJoQyVXKou6cBlfFWEgRW4rT8Tb4i3XnVA==",
"dev": true,
"dependencies": {
- "chokidar": ">=2.0.0 <4.0.0"
+ "chokidar": ">=3.0.0 <4.0.0",
+ "immutable": "^4.0.0",
+ "source-map-js": ">=0.6.2 <2.0.0"
},
"bin": {
"sass": "sass.js"
},
"engines": {
- "node": ">=8.9.0"
+ "node": ">=14.0.0"
}
},
"node_modules/sass-loader": {
@@ -22230,12 +23437,11 @@
}
},
"node_modules/scheduler": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
- "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==",
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
"dependencies": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
+ "loose-envify": "^1.1.0"
}
},
"node_modules/schema-utils": {
@@ -22306,9 +23512,9 @@
}
},
"node_modules/semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
+ "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
"devOptional": true,
"dependencies": {
"lru-cache": "^6.0.0"
@@ -22479,15 +23685,16 @@
"optional": true
},
"node_modules/set-function-length": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz",
- "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
"dependencies": {
- "define-data-property": "^1.1.1",
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
"function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.2",
+ "get-intrinsic": "^1.2.4",
"gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.1"
+ "has-property-descriptors": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -22549,13 +23756,17 @@
}
},
"node_modules/side-channel": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
- "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
"dependencies": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -22734,9 +23945,9 @@
}
},
"node_modules/source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+ "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@@ -22775,17 +23986,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/source-map-resolve": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz",
- "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==",
- "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated",
- "dev": true,
- "dependencies": {
- "atob": "^2.1.2",
- "decode-uri-component": "^0.2.0"
- }
- },
"node_modules/source-map-support": {
"version": "0.5.21",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
@@ -22865,27 +24065,18 @@
"wbuf": "^1.7.3"
}
},
- "node_modules/specificity": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz",
- "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==",
- "dev": true,
- "bin": {
- "specificity": "bin/specificity"
- }
- },
"node_modules/split.js": {
"version": "1.6.5",
"resolved": "https://registry.npmjs.org/split.js/-/split.js-1.6.5.tgz",
"integrity": "sha512-mPTnGCiS/RiuTNsVhCm9De9cCAUsrNFFviRbADdKiiV+Kk8HKp/0fWu7Kr8pi3/yBmsqLFHuXGT9UUZ+CNLwFw=="
},
"node_modules/split2": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz",
- "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
+ "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
"dev": true,
- "dependencies": {
- "readable-stream": "^3.0.0"
+ "engines": {
+ "node": ">= 10.x"
}
},
"node_modules/sprintf-js": {
@@ -22999,9 +24190,9 @@
"devOptional": true
},
"node_modules/string-argv": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz",
- "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==",
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
+ "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==",
"dev": true,
"engines": {
"node": ">=0.6.19"
@@ -23084,14 +24275,15 @@
}
},
"node_modules/string.prototype.trim": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz",
- "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==",
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
+ "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.0",
+ "es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -23101,14 +24293,14 @@
}
},
"node_modules/string.prototype.trimend": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz",
- "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
+ "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -23259,130 +24451,193 @@
}
},
"node_modules/stylelint": {
- "version": "14.3.0",
- "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.3.0.tgz",
- "integrity": "sha512-PZXSwtJe4f4qBPWBwAbHL0M0Qjrv8iHN+cLpUNsffaVMS3YzpDDRI73+2lsqLAYfQEzxRwpll6BDKImREbpHWA==",
+ "version": "15.11.0",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz",
+ "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==",
"dev": true,
"dependencies": {
+ "@csstools/css-parser-algorithms": "^2.3.1",
+ "@csstools/css-tokenizer": "^2.2.0",
+ "@csstools/media-query-list-parser": "^2.1.4",
+ "@csstools/selector-specificity": "^3.0.0",
"balanced-match": "^2.0.0",
- "colord": "^2.9.2",
- "cosmiconfig": "^7.0.1",
- "debug": "^4.3.3",
- "execall": "^2.0.0",
- "fast-glob": "^3.2.11",
- "fastest-levenshtein": "^1.0.12",
- "file-entry-cache": "^6.0.1",
- "get-stdin": "^8.0.0",
+ "colord": "^2.9.3",
+ "cosmiconfig": "^8.2.0",
+ "css-functions-list": "^3.2.1",
+ "css-tree": "^2.3.1",
+ "debug": "^4.3.4",
+ "fast-glob": "^3.3.1",
+ "fastest-levenshtein": "^1.0.16",
+ "file-entry-cache": "^7.0.0",
"global-modules": "^2.0.0",
"globby": "^11.1.0",
"globjoin": "^0.1.4",
- "html-tags": "^3.1.0",
- "ignore": "^5.2.0",
+ "html-tags": "^3.3.1",
+ "ignore": "^5.2.4",
"import-lazy": "^4.0.0",
"imurmurhash": "^0.1.4",
"is-plain-object": "^5.0.0",
- "known-css-properties": "^0.24.0",
+ "known-css-properties": "^0.29.0",
"mathml-tag-names": "^2.1.3",
- "meow": "^9.0.0",
- "micromatch": "^4.0.4",
+ "meow": "^10.1.5",
+ "micromatch": "^4.0.5",
"normalize-path": "^3.0.0",
- "normalize-selector": "^0.2.0",
"picocolors": "^1.0.0",
- "postcss": "^8.4.5",
- "postcss-media-query-parser": "^0.2.3",
+ "postcss": "^8.4.28",
"postcss-resolve-nested-selector": "^0.1.1",
"postcss-safe-parser": "^6.0.0",
- "postcss-selector-parser": "^6.0.9",
+ "postcss-selector-parser": "^6.0.13",
"postcss-value-parser": "^4.2.0",
"resolve-from": "^5.0.0",
- "specificity": "^0.4.1",
"string-width": "^4.2.3",
"strip-ansi": "^6.0.1",
"style-search": "^0.1.0",
- "supports-hyperlinks": "^2.2.0",
+ "supports-hyperlinks": "^3.0.0",
"svg-tags": "^1.0.0",
- "table": "^6.8.0",
- "v8-compile-cache": "^2.3.0",
- "write-file-atomic": "^4.0.0"
+ "table": "^6.8.1",
+ "write-file-atomic": "^5.0.1"
},
"bin": {
- "stylelint": "bin/stylelint.js"
+ "stylelint": "bin/stylelint.mjs"
},
"engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ "node": "^14.13.1 || >=16.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/stylelint"
}
},
- "node_modules/stylelint-config-prettier": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/stylelint-config-prettier/-/stylelint-config-prettier-9.0.3.tgz",
- "integrity": "sha512-5n9gUDp/n5tTMCq1GLqSpA30w2sqWITSSEiAWQlpxkKGAUbjcemQ0nbkRvRUa0B1LgD3+hCvdL7B1eTxy1QHJg==",
+ "node_modules/stylelint-order": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.4.tgz",
+ "integrity": "sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==",
"dev": true,
- "bin": {
- "stylelint-config-prettier": "bin/check.js",
- "stylelint-config-prettier-check": "bin/check.js"
+ "dependencies": {
+ "postcss": "^8.4.32",
+ "postcss-sorting": "^8.0.2"
+ },
+ "peerDependencies": {
+ "stylelint": "^14.0.0 || ^15.0.0 || ^16.0.1"
+ }
+ },
+ "node_modules/stylelint-prettier": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/stylelint-prettier/-/stylelint-prettier-4.1.0.tgz",
+ "integrity": "sha512-dd653q/d1IfvsSQshz1uAMe+XDm6hfM/7XiFH0htYY8Lse/s5ERTg7SURQehZPwVvm/rs7AsFhda9EQ2E9TS0g==",
+ "dev": true,
+ "dependencies": {
+ "prettier-linter-helpers": "^1.0.0"
},
"engines": {
- "node": ">= 12"
+ "node": "^14.17.0 || >=16.0.0"
},
"peerDependencies": {
- "stylelint": ">=11.0.0"
+ "prettier": ">=3.0.0",
+ "stylelint": ">=15.8.0"
}
},
- "node_modules/stylelint-order": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-5.0.0.tgz",
- "integrity": "sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==",
+ "node_modules/stylelint-scss": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.3.2.tgz",
+ "integrity": "sha512-4LzLaayFhFyneJwLo0IUa8knuIvj+zF0vBFueQs4e3tEaAMIQX8q5th8ziKkgOavr6y/y9yoBe+RXN/edwLzsQ==",
"dev": true,
"dependencies": {
- "postcss": "^8.3.11",
- "postcss-sorting": "^7.0.1"
+ "known-css-properties": "^0.29.0",
+ "postcss-media-query-parser": "^0.2.3",
+ "postcss-resolve-nested-selector": "^0.1.1",
+ "postcss-selector-parser": "^6.0.13",
+ "postcss-value-parser": "^4.2.0"
},
"peerDependencies": {
- "stylelint": "^14.0.0"
+ "stylelint": "^14.5.1 || ^15.0.0"
}
},
- "node_modules/stylelint-prettier": {
+ "node_modules/stylelint/node_modules/@csstools/selector-specificity": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.2.tgz",
+ "integrity": "sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "engines": {
+ "node": "^14 || ^16 || >=18"
+ },
+ "peerDependencies": {
+ "postcss-selector-parser": "^6.0.13"
+ }
+ },
+ "node_modules/stylelint/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/stylelint/node_modules/balanced-match": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-prettier/-/stylelint-prettier-2.0.0.tgz",
- "integrity": "sha512-jvT3G+9lopkeB0ARmDPszyfaOnvnIF+30QCjZxyt7E6fynI1T9mOKgYDNb9bXX17M7PXMZaX3j/26wqakjp1tw==",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
+ "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
+ "dev": true
+ },
+ "node_modules/stylelint/node_modules/cosmiconfig": {
+ "version": "8.3.6",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
+ "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
"dev": true,
"dependencies": {
- "prettier-linter-helpers": "^1.0.0"
+ "import-fresh": "^3.3.0",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.2.0",
+ "path-type": "^4.0.0"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/d-fischer"
},
"peerDependencies": {
- "prettier": ">=2.0.0",
- "stylelint": ">=14.0.0"
+ "typescript": ">=4.9.5"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
- "node_modules/stylelint-scss": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.0.0.tgz",
- "integrity": "sha512-lIRhPqtI6I065EJ6aI4mWKsmQt8Krnu6aF9XSL9s8Nd2f/cDKImST0T9TfjnUul3ReKYWozkG9dlpNTZH2FB9w==",
+ "node_modules/stylelint/node_modules/css-tree": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
+ "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
"dev": true,
"dependencies": {
- "lodash": "^4.17.15",
- "postcss-media-query-parser": "^0.2.3",
- "postcss-resolve-nested-selector": "^0.1.1",
- "postcss-selector-parser": "^6.0.6",
- "postcss-value-parser": "^4.1.0"
+ "mdn-data": "2.0.30",
+ "source-map-js": "^1.0.1"
},
- "peerDependencies": {
- "stylelint": "^14.0.0"
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
+ },
+ "node_modules/stylelint/node_modules/file-entry-cache": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.2.tgz",
+ "integrity": "sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
}
},
- "node_modules/stylelint/node_modules/balanced-match": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
- "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
- "dev": true
- },
"node_modules/stylelint/node_modules/hosted-git-info": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
@@ -23395,6 +24650,18 @@
"node": ">=10"
}
},
+ "node_modules/stylelint/node_modules/indent-string": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz",
+ "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/stylelint/node_modules/is-plain-object": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
@@ -23404,27 +24671,45 @@
"node": ">=0.10.0"
}
},
+ "node_modules/stylelint/node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/stylelint/node_modules/mdn-data": {
+ "version": "2.0.30",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
+ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
+ "dev": true
+ },
"node_modules/stylelint/node_modules/meow": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
- "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==",
+ "version": "10.1.5",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz",
+ "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==",
"dev": true,
"dependencies": {
- "@types/minimist": "^1.2.0",
- "camelcase-keys": "^6.2.2",
- "decamelize": "^1.2.0",
+ "@types/minimist": "^1.2.2",
+ "camelcase-keys": "^7.0.0",
+ "decamelize": "^5.0.0",
"decamelize-keys": "^1.1.0",
"hard-rejection": "^2.1.0",
"minimist-options": "4.1.0",
- "normalize-package-data": "^3.0.0",
- "read-pkg-up": "^7.0.1",
- "redent": "^3.0.0",
- "trim-newlines": "^3.0.0",
- "type-fest": "^0.18.0",
- "yargs-parser": "^20.2.3"
+ "normalize-package-data": "^3.0.2",
+ "read-pkg-up": "^8.0.0",
+ "redent": "^4.0.0",
+ "trim-newlines": "^4.0.2",
+ "type-fest": "^1.2.2",
+ "yargs-parser": "^20.2.9"
},
"engines": {
- "node": ">=10"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -23461,6 +24746,22 @@
"postcss": "^8.3.3"
}
},
+ "node_modules/stylelint/node_modules/redent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz",
+ "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==",
+ "dev": true,
+ "dependencies": {
+ "indent-string": "^5.0.0",
+ "strip-indent": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/stylelint/node_modules/resolve-from": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
@@ -23470,10 +24771,50 @@
"node": ">=8"
}
},
+ "node_modules/stylelint/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/stylelint/node_modules/strip-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz",
+ "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==",
+ "dev": true,
+ "dependencies": {
+ "min-indent": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/stylelint/node_modules/supports-hyperlinks": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz",
+ "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0",
+ "supports-color": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=14.18"
+ }
+ },
"node_modules/stylelint/node_modules/type-fest": {
- "version": "0.18.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
- "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
"dev": true,
"engines": {
"node": ">=10"
@@ -23482,6 +24823,19 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/stylelint/node_modules/write-file-atomic": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
+ "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
+ "dev": true,
+ "dependencies": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -23495,9 +24849,9 @@
}
},
"node_modules/supports-hyperlinks": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz",
- "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz",
+ "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0",
@@ -23639,15 +24993,31 @@
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
"devOptional": true
},
+ "node_modules/synckit": {
+ "version": "0.8.8",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz",
+ "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==",
+ "dev": true,
+ "dependencies": {
+ "@pkgr/core": "^0.1.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts"
+ }
+ },
"node_modules/tabbable": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz",
"integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew=="
},
"node_modules/table": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz",
- "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==",
+ "version": "6.8.2",
+ "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz",
+ "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==",
"dev": true,
"dependencies": {
"ajv": "^8.0.1",
@@ -23719,27 +25089,6 @@
"node": ">=10.13.0"
}
},
- "node_modules/tailwindcss/node_modules/lilconfig": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/tailwindcss/node_modules/quick-lru": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
- "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/tapable": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
@@ -23931,12 +25280,15 @@
}
},
"node_modules/text-extensions": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz",
- "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz",
+ "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==",
"dev": true,
"engines": {
- "node": ">=0.10"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/text-table": {
@@ -23954,7 +25306,7 @@
"node_modules/through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
"dev": true
},
"node_modules/through2": {
@@ -24072,12 +25424,15 @@
"optional": true
},
"node_modules/trim-newlines": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
- "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz",
+ "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/tryer": {
@@ -24086,33 +25441,45 @@
"integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==",
"dev": true
},
+ "node_modules/ts-api-utils": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
+ "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=16"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.2.0"
+ }
+ },
"node_modules/ts-jest": {
- "version": "28.0.7",
- "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.7.tgz",
- "integrity": "sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA==",
+ "version": "29.1.2",
+ "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz",
+ "integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==",
"dev": true,
"dependencies": {
"bs-logger": "0.x",
"fast-json-stable-stringify": "2.x",
- "jest-util": "^28.0.0",
- "json5": "^2.2.1",
+ "jest-util": "^29.0.0",
+ "json5": "^2.2.3",
"lodash.memoize": "4.x",
"make-error": "1.x",
- "semver": "7.x",
+ "semver": "^7.5.3",
"yargs-parser": "^21.0.1"
},
"bin": {
"ts-jest": "cli.js"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^16.10.0 || ^18.0.0 || >=20.0.0"
},
"peerDependencies": {
"@babel/core": ">=7.0.0-beta.0 <8",
- "@jest/types": "^28.0.0",
- "babel-jest": "^28.0.0",
- "jest": "^28.0.0",
- "typescript": ">=4.3"
+ "@jest/types": "^29.0.0",
+ "babel-jest": "^29.0.0",
+ "jest": "^29.0.0",
+ "typescript": ">=4.3 <6"
},
"peerDependenciesMeta": {
"@babel/core": {
@@ -24146,12 +25513,12 @@
}
},
"node_modules/ts-jest/node_modules/jest-util": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
- "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -24159,7 +25526,7 @@
"picomatch": "^2.2.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/ts-jest/node_modules/yargs-parser": {
@@ -24176,6 +25543,8 @@
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz",
"integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==",
"dev": true,
+ "optional": true,
+ "peer": true,
"dependencies": {
"arg": "^4.1.0",
"create-require": "^1.1.0",
@@ -24198,13 +25567,13 @@
}
},
"node_modules/tsconfig-paths": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz",
- "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==",
+ "version": "3.15.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
+ "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
"dev": true,
"dependencies": {
"@types/json5": "^0.0.29",
- "json5": "^1.0.1",
+ "json5": "^1.0.2",
"minimist": "^1.2.6",
"strip-bom": "^3.0.0"
}
@@ -24312,29 +25681,30 @@
}
},
"node_modules/typed-array-buffer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz",
- "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.1",
- "is-typed-array": "^1.1.10"
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/typed-array-byte-length": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz",
- "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+ "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
@@ -24344,16 +25714,17 @@
}
},
"node_modules/typed-array-byte-offset": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz",
- "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
+ "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
"dev": true,
"dependencies": {
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
@@ -24363,14 +25734,20 @@
}
},
"node_modules/typed-array-length": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
- "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
+ "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
- "is-typed-array": "^1.1.9"
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13",
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -24386,16 +25763,16 @@
}
},
"node_modules/typescript": {
- "version": "4.9.5",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
- "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
+ "version": "5.4.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz",
+ "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==",
"dev": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
- "node": ">=4.2.0"
+ "node": ">=14.17"
}
},
"node_modules/unbox-primitive": {
@@ -24453,6 +25830,18 @@
"node": ">=4"
}
},
+ "node_modules/unicorn-magic": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
+ "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/unique-string": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
@@ -24466,12 +25855,20 @@
}
},
"node_modules/universal-cookie": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-6.1.1.tgz",
- "integrity": "sha512-33S9x3CpdUnnjwTNs2Fgc41WGve2tdLtvaK2kPSbZRc5pGpz2vQFbRWMxlATsxNNe/Cy8SzmnmbuBM85jpZPtA==",
+ "version": "6.1.3",
+ "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-6.1.3.tgz",
+ "integrity": "sha512-AETYRrhpRgl9T1YtnODmQE32G81U3A+f3HO3ZeK7efbXqe3x+RNOW4RTpV0iff7zJWhGYJA6EI0Mm+w50aFTAw==",
"dependencies": {
- "@types/cookie": "^0.5.1",
- "cookie": "^0.5.0"
+ "@types/cookie": "^0.6.0",
+ "cookie": "^0.6.0"
+ }
+ },
+ "node_modules/universal-cookie/node_modules/cookie": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+ "engines": {
+ "node": ">= 0.6"
}
},
"node_modules/universalify": {
@@ -24562,12 +25959,12 @@
}
},
"node_modules/url": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
- "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==",
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz",
+ "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==",
"dependencies": {
- "punycode": "1.3.2",
- "querystring": "0.2.0"
+ "punycode": "^1.4.1",
+ "qs": "^6.11.2"
}
},
"node_modules/url-parse": {
@@ -24581,9 +25978,9 @@
}
},
"node_modules/url/node_modules/punycode": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw=="
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ=="
},
"node_modules/use-memo-one": {
"version": "1.1.3",
@@ -24615,6 +26012,14 @@
}
}
},
+ "node_modules/use-sync-external-store": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
+ "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -24642,14 +26047,6 @@
"integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==",
"dev": true
},
- "node_modules/utility-types": {
- "version": "3.10.0",
- "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz",
- "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==",
- "engines": {
- "node": ">= 4"
- }
- },
"node_modules/utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
@@ -24669,12 +26066,6 @@
"uuid": "bin/uuid"
}
},
- "node_modules/v8-compile-cache": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
- "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
- "dev": true
- },
"node_modules/v8-to-istanbul": {
"version": "9.2.0",
"resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz",
@@ -25170,16 +26561,16 @@
}
},
"node_modules/which-typed-array": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz",
- "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==",
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
+ "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
"dev": true,
"dependencies": {
- "available-typed-arrays": "^1.0.6",
- "call-bind": "^1.0.5",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
"gopd": "^1.0.1",
- "has-tostringtag": "^1.0.1"
+ "has-tostringtag": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -25480,17 +26871,82 @@
}
},
"node_modules/wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz",
+ "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==",
"dev": true,
"dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
+ "ansi-styles": "^6.2.1",
+ "string-width": "^7.0.0",
+ "strip-ansi": "^7.1.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/emoji-regex": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
+ "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
+ "dev": true
+ },
+ "node_modules/wrap-ansi/node_modules/string-width": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz",
+ "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
"node_modules/wrappy": {
@@ -25504,6 +26960,7 @@
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
"integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
"dev": true,
+ "peer": true,
"dependencies": {
"imurmurhash": "^0.1.4",
"signal-exit": "^3.0.7"
@@ -25606,16 +27063,16 @@
}
},
"node_modules/ydb-ui-components": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/ydb-ui-components/-/ydb-ui-components-3.6.0.tgz",
- "integrity": "sha512-zM1B98Fr3iF/MIpe+wS0tGju2fJuzXJ9/+9LVBM8Ja4+2yie99xbVXkC3jDtkRIqka1viI7E8zbrPIYeIRneZg==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ydb-ui-components/-/ydb-ui-components-4.0.0.tgz",
+ "integrity": "sha512-beNwE3AR7VSXP1kXu3Ap38bRo868JVHtmRyJxd3F4pIPrXkEei83lEp1lYdvbrl0GHuY6hWWXstXYJlwxq1exg==",
"dependencies": {
- "@gravity-ui/i18n": "^1.0.0",
- "bem-cn-lite": "^4.1.0",
- "react-list": "^0.8.17"
+ "@bem-react/classname": "^1.6.0",
+ "react-list": "^0.8.17",
+ "tslib": "^2.6.2"
},
"peerDependencies": {
- "@gravity-ui/uikit": "^5.0.0",
+ "@gravity-ui/uikit": "^6.0.0",
"react": "^16.0.0 || ^17.0.0 || ^18.0.0",
"react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0"
}
@@ -25625,6 +27082,8 @@
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
"dev": true,
+ "optional": true,
+ "peer": true,
"engines": {
"node": ">=6"
}
diff --git a/package.json b/package.json
index 082b057f22..bca4525a15 100644
--- a/package.json
+++ b/package.json
@@ -10,45 +10,45 @@
"url": "git@github.com:ydb-platform/ydb-embedded-ui.git"
},
"dependencies": {
+ "@bem-react/classname": "^1.6.0",
"@gravity-ui/axios-wrapper": "^1.4.1",
- "@gravity-ui/chartkit": "^4.23.0",
- "@gravity-ui/components": "^2.12.0",
- "@gravity-ui/date-utils": "^1.4.2",
- "@gravity-ui/i18n": "^1.2.0",
- "@gravity-ui/icons": "^2.8.1",
- "@gravity-ui/navigation": "^1.9.0",
- "@gravity-ui/paranoid": "^1.4.0",
- "@gravity-ui/react-data-table": "^1.2.0",
- "@gravity-ui/uikit": "^5.30.1",
+ "@gravity-ui/chartkit": "^5.2.2",
+ "@gravity-ui/components": "^3.4.1",
+ "@gravity-ui/date-utils": "^2.2.0",
+ "@gravity-ui/i18n": "^1.4.0",
+ "@gravity-ui/icons": "^2.9.1",
+ "@gravity-ui/navigation": "^2.7.0",
+ "@gravity-ui/paranoid": "^1.4.1",
+ "@gravity-ui/react-data-table": "^2.0.1",
+ "@gravity-ui/uikit": "^6.10.2",
"@gravity-ui/websql-autocomplete": "^8.0.2",
- "@reduxjs/toolkit": "^2.2.1",
- "axios": "^1.6.7",
- "bem-cn-lite": "^4.1.0",
+ "@reduxjs/toolkit": "^2.2.3",
+ "axios": "^1.6.8",
"colord": "^2.9.3",
"copy-to-clipboard": "^3.3.3",
"crc-32": "^1.2.2",
"history": "^4.10.1",
- "lodash": "^4.17.11",
- "monaco-editor": "^0.31.1",
+ "lodash": "^4.17.21",
+ "monaco-editor": "^0.44.0",
"numeral": "^2.0.6",
"path-to-regexp": "^3.0.0",
- "qs": "^6.11.0",
- "react-error-boundary": "^4.0.12",
+ "qs": "^6.12.0",
+ "react-error-boundary": "^4.0.13",
"react-helmet-async": "2.0.4",
"react-json-inspector": "^7.1.1",
- "react-list": "^0.8.11",
- "react-monaco-editor": "^0.47.0",
- "react-redux": "^7.2.6",
- "react-router": "^5.2.1",
- "react-router-dom": "^5.3.0",
+ "react-list": "^0.8.17",
+ "react-monaco-editor": "^0.55.0",
+ "react-redux": "^9.1.0",
+ "react-router": "^5.3.4",
+ "react-router-dom": "^5.3.4",
"react-split": "^2.0.14",
"redux": "^5.0.1",
"redux-location-state": "^2.8.2",
"tslib": "^2.6.2",
- "url": "^0.11.0",
+ "url": "^0.11.3",
"use-query-params": "^2.2.1",
"web-vitals": "^1.1.2",
- "ydb-ui-components": "^3.6.0"
+ "ydb-ui-components": "^4.0.0"
},
"scripts": {
"analyze": "source-map-explorer 'build/static/js/*.js'",
@@ -62,14 +62,14 @@
"lint:js": "eslint --ext .js,.jsx,.ts,.tsx .",
"lint:styles": "stylelint 'src/**/*.{css,scss}'",
"lint:other": "npm run prettier -- --check",
- "prettier": "prettier --check '**/*.{json,yaml,yml,md}'",
+ "prettier": "prettier '**/*.{json,yaml,yml,md}'",
"unimported": "npx unimported --no-cache",
"package": "rm -rf dist && tsc -p tsconfig.package.json && copyfiles -u 1 'src/**/*.{css,scss,svg}' dist",
"test": "react-app-rewired test",
"eject": "react-scripts eject",
"prepublishOnly": "npm run package",
"typecheck": "tsc --noEmit",
- "prepare": "husky install",
+ "prepare": "husky",
"test:e2e:install": "npx playwright install --with-deps chromium",
"test:e2e": "npx playwright test --config=playwright.config.ts"
},
@@ -103,7 +103,8 @@
"testEnvironment": "jsdom",
"moduleNameMapper": {
"\\.(css|less|scss|sass)$": "jest-transform-css",
- "^axios$": "axios/dist/node/axios.cjs"
+ "^axios$": "axios/dist/node/axios.cjs",
+ "^@gravity-ui/uikit/toaster-singleton-react-18$": "@gravity-ui/uikit/build/cjs/toaster-singleton-react-18.js"
}
},
"browserslist": {
@@ -119,51 +120,53 @@
]
},
"devDependencies": {
- "@commitlint/cli": "^15.0.0",
- "@commitlint/config-conventional": "^15.0.0",
- "@gravity-ui/eslint-config": "^1.0.2",
- "@gravity-ui/prettier-config": "^1.0.1",
- "@gravity-ui/stylelint-config": "^1.0.1",
+ "@commitlint/cli": "^19.2.1",
+ "@commitlint/config-conventional": "^19.1.0",
+ "@gravity-ui/eslint-config": "^3.1.1",
+ "@gravity-ui/prettier-config": "^1.1.0",
+ "@gravity-ui/stylelint-config": "^4.0.1",
"@gravity-ui/tsconfig": "^1.0.0",
- "@playwright/test": "^1.31.1",
- "@testing-library/jest-dom": "^5.15.0",
- "@testing-library/react": "^11.2.7",
- "@testing-library/user-event": "^12.8.3",
- "@types/lodash": "^4.14.178",
- "@types/numeral": "^2.0.2",
- "@types/qs": "^6.9.7",
- "@types/react": "^17.0.58",
- "@types/react-dom": "^17.0.11",
- "@types/react-router": "^5.1.17",
- "@types/react-router-dom": "^5.3.2",
+ "@playwright/test": "^1.42.1",
+ "@testing-library/jest-dom": "^6.4.2",
+ "@testing-library/react": "^14.2.2",
+ "@testing-library/user-event": "^14.5.2",
+ "@types/jest": "^29.5.12",
+ "@types/lodash": "^4.17.0",
+ "@types/numeral": "^2.0.5",
+ "@types/qs": "^6.9.14",
+ "@types/react": "^18.2.73",
+ "@types/react-dom": "^18.2.23",
+ "@types/react-router": "^5.1.20",
+ "@types/react-router-dom": "^5.3.3",
"copyfiles": "^2.4.1",
- "eslint-config-prettier": "^8.3.0",
"http-proxy-middleware": "^2.0.6",
- "husky": "^7.0.4",
- "jest-transform-css": "^4.0.1",
- "lint-staged": "^12.3.7",
+ "husky": "^9.0.11",
+ "jest-transform-css": "^6.0.1",
+ "lint-staged": "^15.2.2",
"npm-run-all": "^4.1.5",
- "postcss": "^8.4.6",
- "prettier": "^2.5.1",
+ "postcss": "^8.4.38",
+ "prettier": "^3.2.5",
"prop-types": "^15.8.1",
- "react": "^17.0.2",
- "react-app-rewired": "^2.1.11",
- "react-dom": "^17.0.2",
+ "react": "^18.2.0",
+ "react-app-rewired": "^2.2.1",
+ "react-dom": "^18.2.0",
"react-scripts": "^5.0.1",
- "sass": "^1.32.8",
+ "sass": "^1.72.0",
"source-map-explorer": "^2.5.3",
- "stylelint": "^14.3.0",
- "ts-jest": "^28.0.7",
- "typescript": "^4.5.5"
+ "stylelint": "^15.0.0",
+ "ts-jest": "^29.1.2",
+ "typescript": "^5.4.3"
},
"peerDependencies": {
"prop-types": "^15.8.1",
- "react": "^17.0.2",
- "react-dom": "^17.0.2"
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
},
"overrides": {
- "react": "^17.0.2",
- "react-dom": "^17.0.2",
- "redux": "^5.0.1"
+ "fork-ts-checker-webpack-plugin": "^9.0.2",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "redux": "^5.0.1",
+ "typescript": "^5.4.3"
}
}
diff --git a/playwright.config.ts b/playwright.config.ts
index e94b2026f2..f831268c01 100644
--- a/playwright.config.ts
+++ b/playwright.config.ts
@@ -1,4 +1,5 @@
-import {PlaywrightTestConfig, devices} from '@playwright/test';
+import type {PlaywrightTestConfig} from '@playwright/test';
+import {devices} from '@playwright/test';
const baseUrl = process.env.PLAYWRIGHT_BASE_URL;
diff --git a/src/.eslintrc b/src/.eslintrc
index eab44348cf..e861c8caa6 100644
--- a/src/.eslintrc
+++ b/src/.eslintrc
@@ -1,28 +1,26 @@
{
- "parser": "@typescript-eslint/parser",
"extends": "@gravity-ui/eslint-config/client",
- "plugins": ["@typescript-eslint"],
"rules": {
"react/jsx-uses-react": "off",
"react/react-in-jsx-scope": "off",
"react-hooks/exhaustive-deps": [
"warn",
{
- "additionalHooks": "(useAutofetcher)"
- }
+ "additionalHooks": "(useAutofetcher)",
+ },
],
"valid-jsdoc": "off",
- "@typescript-eslint/naming-convention": [
- "warn",
+ "react/jsx-fragments": ["error", "element"],
+ "no-restricted-syntax": [
+ "error",
+ {
+ "selector": "ImportDeclaration[source.value='react'] :matches(ImportNamespaceSpecifier, ImportSpecifier)",
+ "message": "Please use import React from 'react' instead.",
+ },
{
- "selector": "typeLike",
- "format": ["PascalCase"],
- "leadingUnderscore": "forbid",
- "custom": {
- "regex": "^I[A-Z]",
- "match": false
- }
- }
- ]
- }
+ "selector": "TSTypeReference>TSQualifiedName[left.name='React'][right.name='FC']",
+ "message": "Don't use React.FC",
+ },
+ ],
+ },
}
diff --git a/src/components/BasicNodeViewer/BasicNodeViewer.tsx b/src/components/BasicNodeViewer/BasicNodeViewer.tsx
index c85f6f8be2..67625325a6 100644
--- a/src/components/BasicNodeViewer/BasicNodeViewer.tsx
+++ b/src/components/BasicNodeViewer/BasicNodeViewer.tsx
@@ -1,11 +1,11 @@
-import cn from 'bem-cn-lite';
+import React from 'react';
-import type {AdditionalNodesProps} from '../../types/additionalProps';
import type {PreparedNode} from '../../store/reducers/node/types';
-
+import type {AdditionalNodesProps} from '../../types/additionalProps';
+import {cn} from '../../utils/cn';
import {EntityStatus} from '../EntityStatus/EntityStatus';
-import {Tags} from '../Tags';
import {Icon} from '../Icon';
+import {Tags} from '../Tags';
import './BasicNodeViewer.scss';
@@ -25,7 +25,7 @@ export const BasicNodeViewer = ({node, additionalNodesProps, className}: BasicNo
return (
{node ? (
- <>
+
Node
{nodeHref && (
@@ -46,7 +46,7 @@ export const BasicNodeViewer = ({node, additionalNodesProps, className}: BasicNo
{node.DC && }
{node.Roles && }
- >
+
) : (
no data
)}
diff --git a/src/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.tsx b/src/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.tsx
index f0a89e4018..40ccd0827c 100644
--- a/src/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.tsx
+++ b/src/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.tsx
@@ -1,11 +1,12 @@
-import {useState, type ReactNode} from 'react';
+import React from 'react';
-import {Button, type ButtonProps} from '@gravity-ui/uikit';
+import {Button} from '@gravity-ui/uikit';
+import type {ButtonProps} from '@gravity-ui/uikit';
import {CriticalActionDialog} from '../CriticalActionDialog';
interface ButtonWithConfirmDialogProps
{
- children: ReactNode;
+ children: React.ReactNode;
onConfirmAction: () => Promise;
onConfirmActionSuccess?: (() => Promise) | VoidFunction;
dialogContent: string;
@@ -23,8 +24,8 @@ export function ButtonWithConfirmDialog({
buttonView = 'action',
buttonClassName,
}: ButtonWithConfirmDialogProps) {
- const [isConfirmDialogVisible, setIsConfirmDialogVisible] = useState(false);
- const [buttonLoading, setButtonLoading] = useState(false);
+ const [isConfirmDialogVisible, setIsConfirmDialogVisible] = React.useState(false);
+ const [buttonLoading, setButtonLoading] = React.useState(false);
const handleConfirmAction = async () => {
setButtonLoading(true);
@@ -50,7 +51,7 @@ export function ButtonWithConfirmDialog({
};
return (
- <>
+
({
>
{children}
- >
+
);
}
diff --git a/src/components/CellWithPopover/CellWithPopover.scss b/src/components/CellWithPopover/CellWithPopover.scss
index 7b07524640..1d12c3ec40 100644
--- a/src/components/CellWithPopover/CellWithPopover.scss
+++ b/src/components/CellWithPopover/CellWithPopover.scss
@@ -13,7 +13,7 @@
white-space: nowrap;
text-overflow: ellipsis;
- .yc-popover__handler {
+ .g-popover__handler {
display: inline;
}
}
diff --git a/src/components/CellWithPopover/CellWithPopover.tsx b/src/components/CellWithPopover/CellWithPopover.tsx
index 845b3298ef..272df0dd78 100644
--- a/src/components/CellWithPopover/CellWithPopover.tsx
+++ b/src/components/CellWithPopover/CellWithPopover.tsx
@@ -1,6 +1,7 @@
-import cn from 'bem-cn-lite';
+import {Popover} from '@gravity-ui/uikit';
+import type {PopoverProps} from '@gravity-ui/uikit';
-import {Popover, type PopoverProps} from '@gravity-ui/uikit';
+import {cn} from '../../utils/cn';
import './CellWithPopover.scss';
diff --git a/src/components/CircularProgressBar/CircularProgressBar.tsx b/src/components/CircularProgressBar/CircularProgressBar.tsx
index cfd4610824..0fd442ba41 100644
--- a/src/components/CircularProgressBar/CircularProgressBar.tsx
+++ b/src/components/CircularProgressBar/CircularProgressBar.tsx
@@ -1,8 +1,6 @@
-import cn from 'bem-cn-lite';
-import type {ReactNode} from 'react';
-
import type {MetricStatus} from '../../store/reducers/tenants/types';
import {normalizeProgress} from '../../store/reducers/tenants/utils';
+import {cn} from '../../utils/cn';
import './CircularProgressBar.scss';
@@ -12,7 +10,7 @@ interface CircularProgressBarProps {
size?: number;
progress?: number;
strokeWidth?: number;
- content?: ReactNode;
+ content?: React.ReactNode;
status?: MetricStatus;
circleBgClassName?: string;
}
diff --git a/src/components/ClipboardButton/ClipboardButton.tsx b/src/components/ClipboardButton/ClipboardButton.tsx
index 5d5439cd08..71c454752c 100644
--- a/src/components/ClipboardButton/ClipboardButton.tsx
+++ b/src/components/ClipboardButton/ClipboardButton.tsx
@@ -1,12 +1,12 @@
+import type {ButtonProps, CopyToClipboardStatus} from '@gravity-ui/uikit';
import {
Button,
- ButtonProps,
ClipboardIcon,
CopyToClipboard as CopyToClipboardUiKit,
- CopyToClipboardStatus,
Tooltip,
} from '@gravity-ui/uikit';
-import cn from 'bem-cn-lite';
+
+import {cn} from '../../utils/cn';
const b = cn('clipboard-button');
@@ -27,7 +27,7 @@ function InnerButton({
}: Omit & {status: CopyToClipboardStatus}) {
return (
(undefined);
diff --git a/src/components/ComponentsProvider/componentsRegistry.ts b/src/components/ComponentsProvider/componentsRegistry.ts
index 6e727c49ac..8c56eaf0da 100644
--- a/src/components/ComponentsProvider/componentsRegistry.ts
+++ b/src/components/ComponentsProvider/componentsRegistry.ts
@@ -1,8 +1,9 @@
-import {StaffCard} from '../User/StaffCard';
import {AsideNavigation} from '../../containers/AsideNavigation/AsideNavigation';
-
-import {ComponentsRegistryTemplate, Registry} from './registry';
import {ErrorBoundaryInner} from '../ErrorBoundary/ErrorBoundary';
+import {StaffCard} from '../User/StaffCard';
+
+import type {ComponentsRegistryTemplate} from './registry';
+import {Registry} from './registry';
const componentsRegistryInner = new Registry()
.register('StaffCard', StaffCard)
diff --git a/src/components/ComponentsProvider/registry.ts b/src/components/ComponentsProvider/registry.ts
index a0ea8363fc..14468cde8d 100644
--- a/src/components/ComponentsProvider/registry.ts
+++ b/src/components/ComponentsProvider/registry.ts
@@ -23,9 +23,10 @@ export class Registry {
}
}
-type ComponentType = T extends React.ComponentType
- ? React.ComponentType>
- : never;
+type ComponentType =
+ T extends React.ComponentType
+ ? React.ComponentType>
+ : never;
export interface ComponentsRegistryTemplate> {
set(id: Id, entity: ComponentType): this;
diff --git a/src/components/ContentWithPopup/ContentWithPopup.tsx b/src/components/ContentWithPopup/ContentWithPopup.tsx
index bb5ef53559..3acf381871 100644
--- a/src/components/ContentWithPopup/ContentWithPopup.tsx
+++ b/src/components/ContentWithPopup/ContentWithPopup.tsx
@@ -1,11 +1,12 @@
-import {ReactNode, useRef, useState} from 'react';
+import React from 'react';
-import {Popup, PopupProps} from '@gravity-ui/uikit';
+import type {PopupProps} from '@gravity-ui/uikit';
+import {Popup} from '@gravity-ui/uikit';
interface ContentWithPopupProps extends PopupProps {
- content: ReactNode;
+ content: React.ReactNode;
className?: string;
- children?: ReactNode;
+ children?: React.ReactNode;
}
export const ContentWithPopup = ({
@@ -16,8 +17,8 @@ export const ContentWithPopup = ({
placement = ['top', 'bottom'],
...props
}: ContentWithPopupProps) => {
- const [isPopupVisible, setIsPopupVisible] = useState(false);
- const anchor = useRef(null);
+ const [isPopupVisible, setIsPopupVisible] = React.useState(false);
+ const anchor = React.useRef(null);
const showPopup = () => {
setIsPopupVisible(true);
@@ -28,7 +29,7 @@ export const ContentWithPopup = ({
};
return (
- <>
+
{children}
- >
+
);
};
diff --git a/src/components/CriticalActionDialog/CriticalActionDialog.tsx b/src/components/CriticalActionDialog/CriticalActionDialog.tsx
index fb20406dff..756e13b0fe 100644
--- a/src/components/CriticalActionDialog/CriticalActionDialog.tsx
+++ b/src/components/CriticalActionDialog/CriticalActionDialog.tsx
@@ -1,10 +1,12 @@
-import {FormEvent, useState} from 'react';
-import cn from 'bem-cn-lite';
-import {Dialog} from '@gravity-ui/uikit';
+import React from 'react';
+
import {CircleXmarkFill} from '@gravity-ui/icons';
+import {Dialog} from '@gravity-ui/uikit';
import type {IResponseError} from '../../types/api/error';
+import {cn} from '../../utils/cn';
import {Icon} from '../Icon';
+
import {criticalActionDialogKeyset} from './i18n';
import './CriticalActionDialog.scss';
@@ -39,10 +41,10 @@ export function CriticalActionDialog({
onConfirmActionSuccess,
onConfirmActionError,
}: CriticalActionDialogProps) {
- const [isLoading, setIsLoading] = useState(false);
- const [error, setError] = useState();
+ const [isLoading, setIsLoading] = React.useState(false);
+ const [error, setError] = React.useState();
- const onSubmit = async (e: FormEvent) => {
+ const onSubmit = async (e: React.FormEvent) => {
e.preventDefault();
setIsLoading(true);
@@ -63,7 +65,7 @@ export function CriticalActionDialog({
const renderDialogContent = () => {
if (error) {
return (
- <>
+
@@ -77,7 +79,7 @@ export function CriticalActionDialog({
textButtonCancel={criticalActionDialogKeyset('button-close')}
onClickButtonCancel={onClose}
/>
- >
+
);
}
diff --git a/src/components/DateRange/DateRange.tsx b/src/components/DateRange/DateRange.tsx
index c1498b0eb2..1696da963f 100644
--- a/src/components/DateRange/DateRange.tsx
+++ b/src/components/DateRange/DateRange.tsx
@@ -1,5 +1,4 @@
-import {ChangeEventHandler} from 'react';
-import cn from 'bem-cn-lite';
+import {cn} from '../../utils/cn';
import './DateRange.scss';
@@ -28,7 +27,7 @@ const toTimezonelessISOString = (timestamp?: number) => {
};
export const DateRange = ({from, to, className, onChange}: DateRangeProps) => {
- const handleFromChange: ChangeEventHandler = ({target: {value}}) => {
+ const handleFromChange: React.ChangeEventHandler = ({target: {value}}) => {
let newFrom = value ? new Date(value).getTime() : undefined;
// some browsers allow selecting time after the boundary specified in `max`
@@ -39,7 +38,7 @@ export const DateRange = ({from, to, className, onChange}: DateRangeProps) => {
onChange?.({from: newFrom, to});
};
- const handleToChange: ChangeEventHandler = ({target: {value}}) => {
+ const handleToChange: React.ChangeEventHandler = ({target: {value}}) => {
let newTo = value ? new Date(value).getTime() : undefined;
// some browsers allow selecting time before the boundary specified in `min`
diff --git a/src/components/DiagnosticCard/DiagnosticCard.tsx b/src/components/DiagnosticCard/DiagnosticCard.tsx
index b8c71a366b..19a6681969 100644
--- a/src/components/DiagnosticCard/DiagnosticCard.tsx
+++ b/src/components/DiagnosticCard/DiagnosticCard.tsx
@@ -1,12 +1,11 @@
-import type {ReactNode} from 'react';
-import cn from 'bem-cn-lite';
+import {cn} from '../../utils/cn';
import './DiagnosticCard.scss';
const b = cn('ydb-diagnostic-card');
interface DiagnosticCardProps {
- children?: ReactNode;
+ children?: React.ReactNode;
className?: string;
active?: boolean;
}
diff --git a/src/components/DiskPageTitle/DiskPageTitle.tsx b/src/components/DiskPageTitle/DiskPageTitle.tsx
index 06a089e592..975794c0f5 100644
--- a/src/components/DiskPageTitle/DiskPageTitle.tsx
+++ b/src/components/DiskPageTitle/DiskPageTitle.tsx
@@ -1,5 +1,3 @@
-import type {ReactNode} from 'react';
-
import type {EFlag} from '../../types/api/enums';
import {cn} from '../../utils/cn';
import {StatusIcon} from '../StatusIcon/StatusIcon';
@@ -9,9 +7,9 @@ import './DiskPageTitle.scss';
const b = cn('ydb-disk-page-title');
interface DiskPageTitleProps {
- entityName: ReactNode;
+ entityName: React.ReactNode;
status: EFlag;
- id: ReactNode;
+ id: React.ReactNode;
className?: string;
}
diff --git a/src/components/DiskStateProgressBar/DiskStateProgressBar.tsx b/src/components/DiskStateProgressBar/DiskStateProgressBar.tsx
index 7e538ac37a..ed3d493f3b 100644
--- a/src/components/DiskStateProgressBar/DiskStateProgressBar.tsx
+++ b/src/components/DiskStateProgressBar/DiskStateProgressBar.tsx
@@ -1,9 +1,9 @@
import React from 'react';
-import cn from 'bem-cn-lite';
+import {cn} from '../../utils/cn';
import {INVERTED_DISKS_KEY} from '../../utils/constants';
-import {useSetting} from '../../utils/hooks';
import {getSeverityColor} from '../../utils/disks/helpers';
+import {useSetting} from '../../utils/hooks';
import './DiskStateProgressBar.scss';
diff --git a/src/components/Divider/Divider.tsx b/src/components/Divider/Divider.tsx
index 9d69197d9a..2b335863a6 100644
--- a/src/components/Divider/Divider.tsx
+++ b/src/components/Divider/Divider.tsx
@@ -1,4 +1,4 @@
-import cn from 'bem-cn-lite';
+import {cn} from '../../utils/cn';
import './Divider.scss';
diff --git a/src/components/EmptyState/EmptyState.tsx b/src/components/EmptyState/EmptyState.tsx
index f2e6fce39f..8052bedbde 100644
--- a/src/components/EmptyState/EmptyState.tsx
+++ b/src/components/EmptyState/EmptyState.tsx
@@ -1,6 +1,4 @@
-import {ReactNode} from 'react';
-import cn from 'bem-cn-lite';
-
+import {cn} from '../../utils/cn';
import {Icon} from '../Icon';
import './EmptyState.scss';
@@ -15,9 +13,9 @@ const sizes = {
export interface EmptyStateProps {
title: string;
- image?: ReactNode;
- description?: ReactNode;
- actions?: ReactNode[];
+ image?: React.ReactNode;
+ description?: React.ReactNode;
+ actions?: React.ReactNode[];
size?: keyof typeof sizes;
position?: 'left' | 'center';
}
diff --git a/src/components/EnableFullscreenButton/EnableFullscreenButton.tsx b/src/components/EnableFullscreenButton/EnableFullscreenButton.tsx
index f272416455..307e791261 100644
--- a/src/components/EnableFullscreenButton/EnableFullscreenButton.tsx
+++ b/src/components/EnableFullscreenButton/EnableFullscreenButton.tsx
@@ -1,6 +1,7 @@
import {Button} from '@gravity-ui/uikit';
-import {useTypedDispatch} from '../../utils/hooks';
+
import {enableFullscreen} from '../../store/reducers/fullscreen';
+import {useTypedDispatch} from '../../utils/hooks';
import {Icon} from '../Icon';
interface EnableFullscreenButtonProps {
diff --git a/src/components/EntitiesCount/EntitiesCount.tsx b/src/components/EntitiesCount/EntitiesCount.tsx
index 82bc9a787e..a6722c15ea 100644
--- a/src/components/EntitiesCount/EntitiesCount.tsx
+++ b/src/components/EntitiesCount/EntitiesCount.tsx
@@ -1,4 +1,5 @@
import {Label} from '@gravity-ui/uikit';
+
import i18n from './i18n';
interface EntitiesCountProps {
diff --git a/src/components/EntitiesCount/i18n/index.ts b/src/components/EntitiesCount/i18n/index.ts
index bf0b97d3bb..80a9c509e7 100644
--- a/src/components/EntitiesCount/i18n/index.ts
+++ b/src/components/EntitiesCount/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../utils/i18n';
+import {registerKeysets} from '../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-entities-count';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/components/EntityStatus/EntityStatus.tsx b/src/components/EntityStatus/EntityStatus.tsx
index dda59ff55f..197966f61d 100644
--- a/src/components/EntityStatus/EntityStatus.tsx
+++ b/src/components/EntityStatus/EntityStatus.tsx
@@ -1,11 +1,12 @@
-import {Link} from 'react-router-dom';
-import cn from 'bem-cn-lite';
-
import {Link as UIKitLink} from '@gravity-ui/uikit';
+import {Link} from 'react-router-dom';
import {EFlag} from '../../types/api/enums';
-import {StatusIcon, type StatusIconMode, type StatusIconSize} from '../StatusIcon/StatusIcon';
+import {cn} from '../../utils/cn';
import {ClipboardButton} from '../ClipboardButton';
+import {StatusIcon} from '../StatusIcon/StatusIcon';
+import type {StatusIconMode, StatusIconSize} from '../StatusIcon/StatusIcon';
+
import './EntityStatus.scss';
const b = cn('entity-status');
@@ -56,33 +57,34 @@ export function EntityStatus({
return ;
};
- const renderStatusLink = () => {
+ const renderStatusLink = (href: string) => {
return (
-
+
{renderIcon()}
);
};
const renderLink = () => {
- if (externalLink) {
+ if (path) {
+ if (externalLink) {
+ return (
+
+ {name}
+
+ );
+ }
+
return (
-
+
{name}
-
+
);
}
-
- return path ? (
-
- {name}
-
- ) : (
- name && {name}
- );
+ return name && {name};
};
return (
- {iconPath ? renderStatusLink() : renderIcon()}
+ {iconPath ? renderStatusLink(iconPath) : renderIcon()}
{label && (
{label}
diff --git a/src/components/ErrorBoundary/ErrorBoundary.tsx b/src/components/ErrorBoundary/ErrorBoundary.tsx
index 596747d1fc..8b5e1085e6 100644
--- a/src/components/ErrorBoundary/ErrorBoundary.tsx
+++ b/src/components/ErrorBoundary/ErrorBoundary.tsx
@@ -1,24 +1,24 @@
-import type {ReactNode} from 'react';
-import {ErrorBoundary as ErrorBoundaryBase} from 'react-error-boundary';
-import cn from 'bem-cn-lite';
-
import {Button, Disclosure} from '@gravity-ui/uikit';
+import {ErrorBoundary as ErrorBoundaryBase} from 'react-error-boundary';
+import {cn} from '../../utils/cn';
import {registerError} from '../../utils/registerError';
-import {Illustration} from '../Illustration';
import {useComponent} from '../ComponentsProvider/ComponentsProvider';
+import {Illustration} from '../Illustration';
+
import i18n from './i18n';
+
import './ErrorBoundary.scss';
const b = cn('ydb-error-boundary');
-export function ErrorBoundary({children}: {children?: ReactNode}) {
+export function ErrorBoundary({children}: {children?: React.ReactNode}) {
const ErrorBoundaryComponent = useComponent('ErrorBoundary');
return {children};
}
interface ErrorBoundaryProps {
- children?: ReactNode;
+ children?: React.ReactNode;
useRetry?: boolean;
onReportProblem?: (error?: Error) => void;
}
@@ -31,7 +31,7 @@ export function ErrorBoundaryInner({
return (
{
- registerError(error, info.componentStack, 'error-boundary');
+ registerError(error, info.componentStack ?? undefined, 'error-boundary');
}}
fallbackRender={({error, resetErrorBoundary}) => {
return (
diff --git a/src/components/ErrorBoundary/i18n/index.ts b/src/components/ErrorBoundary/i18n/index.ts
index ba354eac9a..f4fb03e376 100644
--- a/src/components/ErrorBoundary/i18n/index.ts
+++ b/src/components/ErrorBoundary/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../utils/i18n';
+import {registerKeysets} from '../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-error-boundary';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/components/Errors/403/AccessDenied.tsx b/src/components/Errors/403/AccessDenied.tsx
index 868405f1b5..53555cc26f 100644
--- a/src/components/Errors/403/AccessDenied.tsx
+++ b/src/components/Errors/403/AccessDenied.tsx
@@ -1,6 +1,6 @@
-import {EmptyState, type EmptyStateProps} from '../../EmptyState';
+import {EmptyState} from '../../EmptyState';
+import type {EmptyStateProps} from '../../EmptyState';
import {Illustration} from '../../Illustration';
-
import i18n from '../i18n';
interface AccessDeniedProps extends Omit {
diff --git a/src/components/Errors/ResponseError/ResponseError.tsx b/src/components/Errors/ResponseError/ResponseError.tsx
index 4e59d4215a..d30cec98ad 100644
--- a/src/components/Errors/ResponseError/ResponseError.tsx
+++ b/src/components/Errors/ResponseError/ResponseError.tsx
@@ -1,5 +1,4 @@
import type {IResponseError} from '../../../types/api/error';
-
import i18n from '../i18n';
interface ResponseErrorProps {
diff --git a/src/components/Errors/i18n/index.ts b/src/components/Errors/i18n/index.ts
index fddc0e3111..2440cb7f21 100644
--- a/src/components/Errors/i18n/index.ts
+++ b/src/components/Errors/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../utils/i18n';
+import {registerKeysets} from '../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-errors-access-denied';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/components/FormattedBytes/FormattedBytes.tsx b/src/components/FormattedBytes/FormattedBytes.tsx
index a5e9a7db10..d4338ffa5d 100644
--- a/src/components/FormattedBytes/FormattedBytes.tsx
+++ b/src/components/FormattedBytes/FormattedBytes.tsx
@@ -1,4 +1,5 @@
-import {FormatBytesArgs, formatBytes} from '../../utils/bytesParsers';
+import type {FormatBytesArgs} from '../../utils/bytesParsers';
+import {formatBytes} from '../../utils/bytesParsers';
type FormattedBytesProps = FormatBytesArgs;
diff --git a/src/components/FormattedBytes/utils.tsx b/src/components/FormattedBytes/utils.tsx
index 1f2eecb567..9f6ce0326c 100644
--- a/src/components/FormattedBytes/utils.tsx
+++ b/src/components/FormattedBytes/utils.tsx
@@ -1,4 +1,5 @@
import type {FormatBytesArgs} from '../../utils/bytesParsers';
+
import {FormattedBytes} from './FormattedBytes';
export const toFormattedSize = (
diff --git a/src/components/FullNodeViewer/FullNodeViewer.tsx b/src/components/FullNodeViewer/FullNodeViewer.tsx
index 3823a43284..667c33deff 100644
--- a/src/components/FullNodeViewer/FullNodeViewer.tsx
+++ b/src/components/FullNodeViewer/FullNodeViewer.tsx
@@ -1,11 +1,10 @@
-import cn from 'bem-cn-lite';
-
import type {PreparedNode} from '../../store/reducers/node/types';
+import {cn} from '../../utils/cn';
import {LOAD_AVERAGE_TIME_INTERVALS} from '../../utils/constants';
-
-import InfoViewer, {type InfoViewerItem} from '../InfoViewer/InfoViewer';
-import {ProgressViewer} from '../ProgressViewer/ProgressViewer';
+import InfoViewer from '../InfoViewer/InfoViewer';
+import type {InfoViewerItem} from '../InfoViewer/InfoViewer';
import {PoolUsage} from '../PoolUsage/PoolUsage';
+import {ProgressViewer} from '../ProgressViewer/ProgressViewer';
import './FullNodeViewer.scss';
diff --git a/src/components/Fullscreen/Fullscreen.scss b/src/components/Fullscreen/Fullscreen.scss
index 5ee305c040..be4c80883c 100644
--- a/src/components/Fullscreen/Fullscreen.scss
+++ b/src/components/Fullscreen/Fullscreen.scss
@@ -3,10 +3,7 @@
// counts on .gn-aside-header__content to have position: relative, it is set in App.scss
position: absolute;
z-index: 10;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
+ inset: 0;
display: flex;
overflow: hidden;
diff --git a/src/components/Fullscreen/Fullscreen.tsx b/src/components/Fullscreen/Fullscreen.tsx
index 9602aacbea..104ac9c8c8 100644
--- a/src/components/Fullscreen/Fullscreen.tsx
+++ b/src/components/Fullscreen/Fullscreen.tsx
@@ -1,11 +1,11 @@
-import React, {useEffect} from 'react';
-import ReactDOM from 'react-dom';
+import React from 'react';
import {Button} from '@gravity-ui/uikit';
-import cn from 'bem-cn-lite';
+import ReactDOM from 'react-dom';
-import {useTypedDispatch} from '../../utils/hooks';
import {disableFullscreen} from '../../store/reducers/fullscreen';
+import {cn} from '../../utils/cn';
+import {useTypedDispatch} from '../../utils/hooks';
import {Icon} from '../Icon';
import './Fullscreen.scss';
@@ -55,7 +55,7 @@ function Fullscreen(props: FullscreenProps) {
dispatch(disableFullscreen());
}, [dispatch]);
- useEffect(() => {
+ React.useEffect(() => {
const escFunction = (event: KeyboardEvent) => {
if (event.key === 'Escape') {
onDisableFullScreen();
diff --git a/src/components/GroupInfo/GroupInfo.tsx b/src/components/GroupInfo/GroupInfo.tsx
index 48d4ce4f57..4472afeb6b 100644
--- a/src/components/GroupInfo/GroupInfo.tsx
+++ b/src/components/GroupInfo/GroupInfo.tsx
@@ -1,10 +1,10 @@
import type {PreparedStorageGroup} from '../../store/reducers/storage/types';
import {valueIsDefined} from '../../utils';
import {formatStorageValuesToGb} from '../../utils/dataFormatters/dataFormatters';
-
-import type {InfoViewerProps} from '../InfoViewer/InfoViewer';
import {InfoViewer} from '../InfoViewer';
+import type {InfoViewerProps} from '../InfoViewer/InfoViewer';
import {ProgressViewer} from '../ProgressViewer/ProgressViewer';
+
import {groupInfoKeyset} from './i18n';
interface GroupInfoProps>
diff --git a/src/components/Illustration/Illustration.tsx b/src/components/Illustration/Illustration.tsx
index 4263fb3b16..d4b70e8acd 100644
--- a/src/components/Illustration/Illustration.tsx
+++ b/src/components/Illustration/Illustration.tsx
@@ -1,8 +1,10 @@
-import {ImgHTMLAttributes, useEffect, useState} from 'react';
-import cn from 'bem-cn-lite';
+import React from 'react';
+
import {useThemeValue} from '@gravity-ui/uikit';
-export interface IllustrationProps extends ImgHTMLAttributes {
+import {cn} from '../../utils/cn';
+
+export interface IllustrationProps extends React.ImgHTMLAttributes {
name: string;
className?: string;
}
@@ -26,10 +28,10 @@ const b = cn('kv-illustration');
export const Illustration = ({name, className, ...props}: IllustrationProps) => {
const theme = useThemeValue();
- const [src, setSrc] = useState('');
+ const [src, setSrc] = React.useState('');
const srcGetter = store[theme] && store[theme][name];
- useEffect(() => {
+ React.useEffect(() => {
if (typeof srcGetter === 'function') {
srcGetter()
.then((svg) => setSrc(svg.default))
diff --git a/src/components/InfoViewer/InfoViewer.tsx b/src/components/InfoViewer/InfoViewer.tsx
index 50f1189799..7804970280 100644
--- a/src/components/InfoViewer/InfoViewer.tsx
+++ b/src/components/InfoViewer/InfoViewer.tsx
@@ -1,11 +1,12 @@
-import type {ReactNode} from 'react';
-import cn from 'bem-cn-lite';
+import React from 'react';
+
+import {cn} from '../../utils/cn';
import './InfoViewer.scss';
export interface InfoViewerItem {
- label: ReactNode;
- value: ReactNode;
+ label: React.ReactNode;
+ value: React.ReactNode;
}
export interface InfoViewerProps {
@@ -15,7 +16,7 @@ export interface InfoViewerProps {
size?: 's';
className?: string;
multilineLabels?: boolean;
- renderEmptyState?: (props?: Pick) => ReactNode;
+ renderEmptyState?: (props?: Pick) => React.ReactNode;
}
const b = cn('info-viewer');
@@ -30,7 +31,7 @@ export const InfoViewer = ({
renderEmptyState,
}: InfoViewerProps) => {
if ((!info || !info.length) && renderEmptyState) {
- return <>{renderEmptyState({title, size})}>;
+ return {renderEmptyState({title, size})};
}
return (
@@ -52,7 +53,7 @@ export const InfoViewer = ({
))}
) : (
- <>No {title} data>
+ No {title} data
)}
);
diff --git a/src/components/InfoViewer/formatters/cdcStream.ts b/src/components/InfoViewer/formatters/cdcStream.ts
index 408d386d04..16a8c94b09 100644
--- a/src/components/InfoViewer/formatters/cdcStream.ts
+++ b/src/components/InfoViewer/formatters/cdcStream.ts
@@ -1,5 +1,4 @@
-import {TCdcStreamDescription} from '../../../types/api/schema';
-
+import type {TCdcStreamDescription} from '../../../types/api/schema';
import {createInfoFormatter} from '../utils';
export const formatCdcStreamItem = createInfoFormatter({
diff --git a/src/components/InfoViewer/formatters/common.ts b/src/components/InfoViewer/formatters/common.ts
index 3f3e0dd3ef..43c5921887 100644
--- a/src/components/InfoViewer/formatters/common.ts
+++ b/src/components/InfoViewer/formatters/common.ts
@@ -1,9 +1,7 @@
import type {TDirEntry} from '../../../types/api/schema';
import {formatDateTime} from '../../../utils/dataFormatters/dataFormatters';
-
-import {createInfoFormatter} from '../utils';
-
import i18n from '../i18n';
+import {createInfoFormatter} from '../utils';
export const formatCommonItem = createInfoFormatter({
values: {
diff --git a/src/components/InfoViewer/formatters/pqGroup.ts b/src/components/InfoViewer/formatters/pqGroup.ts
index bac524ad87..4a6db8688b 100644
--- a/src/components/InfoViewer/formatters/pqGroup.ts
+++ b/src/components/InfoViewer/formatters/pqGroup.ts
@@ -1,12 +1,11 @@
-import {
- EMeteringMode,
- TPersQueueGroupDescription,
+import type {
TPQPartitionConfig,
TPQTabletConfig,
+ TPersQueueGroupDescription,
} from '../../../types/api/schema';
-import {formatBps, formatBytes, formatNumber} from '../../../utils/dataFormatters/dataFormatters';
+import {EMeteringMode} from '../../../types/api/schema';
import {HOUR_IN_SECONDS} from '../../../utils/constants';
-
+import {formatBps, formatBytes, formatNumber} from '../../../utils/dataFormatters/dataFormatters';
import {createInfoFormatter} from '../utils';
const EMeteringModeToNames: Record = {
diff --git a/src/components/InfoViewer/formatters/schema.ts b/src/components/InfoViewer/formatters/schema.ts
index cc00dfc86b..22192966a0 100644
--- a/src/components/InfoViewer/formatters/schema.ts
+++ b/src/components/InfoViewer/formatters/schema.ts
@@ -1,6 +1,5 @@
import type {TIndexDescription} from '../../../types/api/schema';
import {toFormattedSize} from '../../FormattedBytes/utils';
-
import {createInfoFormatter} from '../utils';
export const formatTableIndexItem = createInfoFormatter({
diff --git a/src/components/InfoViewer/formatters/table.ts b/src/components/InfoViewer/formatters/table.ts
index 919dbc356a..44e3750cce 100644
--- a/src/components/InfoViewer/formatters/table.ts
+++ b/src/components/InfoViewer/formatters/table.ts
@@ -7,7 +7,6 @@ import {
formatNumber,
} from '../../../utils/dataFormatters/dataFormatters';
import {toFormattedSize} from '../../FormattedBytes/utils';
-
import {createInfoFormatter} from '../utils';
export const formatTabletMetricsItem = createInfoFormatter({
diff --git a/src/components/InfoViewer/i18n/index.ts b/src/components/InfoViewer/i18n/index.ts
index c43cce6aba..33853de369 100644
--- a/src/components/InfoViewer/i18n/index.ts
+++ b/src/components/InfoViewer/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../utils/i18n';
+import {registerKeysets} from '../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-components-info-viewer';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/components/InfoViewer/schemaInfo/TableIndexInfo.tsx b/src/components/InfoViewer/schemaInfo/TableIndexInfo.tsx
index 0dc94fbf2e..ba5650ce23 100644
--- a/src/components/InfoViewer/schemaInfo/TableIndexInfo.tsx
+++ b/src/components/InfoViewer/schemaInfo/TableIndexInfo.tsx
@@ -1,8 +1,8 @@
-import type {TEvDescribeSchemeResult, TIndexDescription} from '../../../types/api/schema';
+import type {InfoViewerItem} from '..';
+import {InfoViewer} from '..';
import {getEntityName} from '../../../containers/Tenant/utils';
-
+import type {TEvDescribeSchemeResult, TIndexDescription} from '../../../types/api/schema';
import {formatTableIndexItem} from '../formatters';
-import {InfoViewer, InfoViewerItem} from '..';
const DISPLAYED_FIELDS: Set = new Set([
'Type',
diff --git a/src/components/InfoViewer/schemaOverview/CDCStreamOverview.tsx b/src/components/InfoViewer/schemaOverview/CDCStreamOverview.tsx
index c023a3c1d4..01202fcf04 100644
--- a/src/components/InfoViewer/schemaOverview/CDCStreamOverview.tsx
+++ b/src/components/InfoViewer/schemaOverview/CDCStreamOverview.tsx
@@ -1,10 +1,10 @@
-import type {TEvDescribeSchemeResult, TCdcStreamDescription} from '../../../types/api/schema';
+import React from 'react';
-import {InfoViewer, InfoViewerItem} from '..';
+import type {InfoViewerItem} from '..';
+import {InfoViewer, formatObject} from '..';
+import type {TEvDescribeSchemeResult} from '../../../types/api/schema';
import {formatCdcStreamItem, formatCommonItem} from '../formatters';
-const DISPLAYED_FIELDS: Set = new Set(['Mode', 'Format']);
-
interface CDCStreamOverviewProps {
data?: TEvDescribeSchemeResult;
}
@@ -20,12 +20,12 @@ export const CDCStreamOverview = ({data}: CDCStreamOverviewProps) => {
info.push(formatCommonItem('PathType', data.PathDescription?.Self?.PathType));
info.push(formatCommonItem('CreateStep', data.PathDescription?.Self?.CreateStep));
- let key: keyof TCdcStreamDescription;
- for (key in TableIndex) {
- if (DISPLAYED_FIELDS.has(key)) {
- info.push(formatCdcStreamItem(key, TableIndex?.[key]));
- }
- }
+ const {Mode, Format} = TableIndex || {};
+ info.push(...formatObject(formatCdcStreamItem, {Mode, Format}));
- return <>{info.length ? : <>Empty>}>;
+ return (
+
+ {info.length ? : 'Empty'}
+
+ );
};
diff --git a/src/components/InfoViewer/schemaOverview/PersQueueGroupOverview.tsx b/src/components/InfoViewer/schemaOverview/PersQueueGroupOverview.tsx
index e6bb301b81..a18939afe4 100644
--- a/src/components/InfoViewer/schemaOverview/PersQueueGroupOverview.tsx
+++ b/src/components/InfoViewer/schemaOverview/PersQueueGroupOverview.tsx
@@ -1,7 +1,9 @@
-import type {TEvDescribeSchemeResult} from '../../../types/api/schema';
+import React from 'react';
+import type {InfoViewerItem} from '..';
+import {InfoViewer} from '..';
+import type {TEvDescribeSchemeResult} from '../../../types/api/schema';
import {formatCommonItem, formatPQGroupItem} from '../formatters';
-import {InfoViewer, InfoViewerItem} from '..';
interface PersQueueGroupOverviewProps {
data?: TEvDescribeSchemeResult;
@@ -18,13 +20,19 @@ export const PersQueueGroupOverview = ({data}: PersQueueGroupOverviewProps) => {
info.push(formatCommonItem('PathType', data.PathDescription?.Self?.PathType));
info.push(formatCommonItem('CreateStep', data.PathDescription?.Self?.CreateStep));
+ //@ts-expect-error
info.push(formatPQGroupItem('Partitions', pqGroup?.Partitions || []));
info.push(
+ //@ts-expect-error
formatPQGroupItem(
'PQTabletConfig',
pqGroup?.PQTabletConfig || {PartitionConfig: {LifetimeSeconds: 0}},
),
);
- return <>{info.length ? : <>Empty>}>;
+ return (
+
+ {info.length ? : 'Empty'}
+
+ );
};
diff --git a/src/components/InfoViewer/utils.ts b/src/components/InfoViewer/utils.ts
index 4228e5614f..0178d27723 100644
--- a/src/components/InfoViewer/utils.ts
+++ b/src/components/InfoViewer/utils.ts
@@ -1,13 +1,13 @@
-import type {ReactNode} from 'react';
+import type React from 'react';
-import {InfoViewerItem} from './InfoViewer';
+import type {InfoViewerItem} from './InfoViewer';
type LabelMap = {
[label in keyof T]?: string;
};
type ValueFormatters = {
- [label in keyof T]?: (value: T[label]) => ReactNode;
+ [label in keyof T]?: (value: T[label]) => React.ReactNode;
};
function formatLabel(label: keyof Shape, map: LabelMap) {
@@ -18,7 +18,7 @@ function formatValue(
label: Key,
value: Shape[Key],
formatters: ValueFormatters,
- defaultFormatter?: (value: Shape[Key]) => ReactNode,
+ defaultFormatter?: (value: Shape[Key]) => React.ReactNode,
) {
const formatter = formatters[label] || defaultFormatter;
const formattedValue = formatter ? formatter(value) : value;
@@ -29,7 +29,7 @@ function formatValue(
interface CreateInfoFormatterOptions {
values?: ValueFormatters;
labels?: LabelMap;
- defaultValueFormatter?: (value: Shape[keyof Shape]) => ReactNode;
+ defaultValueFormatter?: (value: Shape[keyof Shape]) => React.ReactNode;
}
export function createInfoFormatter>({
diff --git a/src/components/InfoViewerSkeleton/InfoViewerSkeleton.scss b/src/components/InfoViewerSkeleton/InfoViewerSkeleton.scss
index 6c0cad6e9e..025f73ad3e 100644
--- a/src/components/InfoViewerSkeleton/InfoViewerSkeleton.scss
+++ b/src/components/InfoViewerSkeleton/InfoViewerSkeleton.scss
@@ -9,7 +9,7 @@
min-height: var(--g-text-body-2-font-size);
- .yc-skeleton {
+ .g-skeleton {
min-height: var(--g-text-body-2-font-size);
}
}
diff --git a/src/components/InfoViewerSkeleton/InfoViewerSkeleton.tsx b/src/components/InfoViewerSkeleton/InfoViewerSkeleton.tsx
index c6414f748c..eaae8966c8 100644
--- a/src/components/InfoViewerSkeleton/InfoViewerSkeleton.tsx
+++ b/src/components/InfoViewerSkeleton/InfoViewerSkeleton.tsx
@@ -1,10 +1,10 @@
-import block from 'bem-cn-lite';
-
import {Skeleton} from '@gravity-ui/uikit';
+import {cn} from '../../utils/cn';
+
import './InfoViewerSkeleton.scss';
-const b = block('ydb-info-viewer-skeleton');
+const b = cn('ydb-info-viewer-skeleton');
const SkeletonLabel = () => (
diff --git a/src/components/InternalLink/InternalLink.tsx b/src/components/InternalLink/InternalLink.tsx
index 152fd342f6..3d7779c4c1 100644
--- a/src/components/InternalLink/InternalLink.tsx
+++ b/src/components/InternalLink/InternalLink.tsx
@@ -1,7 +1,9 @@
-import {Link, LinkProps} from 'react-router-dom';
-import cn from 'bem-cn-lite';
+import type {LinkProps} from 'react-router-dom';
+import {Link} from 'react-router-dom';
-const bLink = cn('yc-link');
+import {cn} from '../../utils/cn';
+
+const bLink = cn('g-link');
interface InternalLinkProps extends Omit
{
to?: LinkProps['to'];
diff --git a/src/components/LabelWithPopover/LabelWithPopover.tsx b/src/components/LabelWithPopover/LabelWithPopover.tsx
index 09fed720c2..de5328b1f9 100644
--- a/src/components/LabelWithPopover/LabelWithPopover.tsx
+++ b/src/components/LabelWithPopover/LabelWithPopover.tsx
@@ -1,10 +1,8 @@
-import type {ReactNode} from 'react';
-
import {HelpPopover} from '@gravity-ui/components';
interface LabelWithPopoverProps {
- text: ReactNode;
- popoverContent: ReactNode;
+ text: React.ReactNode;
+ popoverContent: React.ReactNode;
className?: string;
contentClassName?: string;
}
diff --git a/src/components/LagPopoverContent/LagPopoverContent.tsx b/src/components/LagPopoverContent/LagPopoverContent.tsx
index ec09312100..03fb8c609a 100644
--- a/src/components/LagPopoverContent/LagPopoverContent.tsx
+++ b/src/components/LagPopoverContent/LagPopoverContent.tsx
@@ -1,10 +1,9 @@
-import block from 'bem-cn-lite';
-
+import {cn} from '../../utils/cn';
import {ReadLagImage, WriteLagImage} from '../LagImages';
import './LagPopoverContent.scss';
-const b = block('ydb-lag-popover-content');
+const b = cn('ydb-lag-popover-content');
interface LagPopoverContentProps {
text: string;
diff --git a/src/components/LinkToSchemaObject/LinkToSchemaObject.tsx b/src/components/LinkToSchemaObject/LinkToSchemaObject.tsx
index 92a44f8a83..a741d2971e 100644
--- a/src/components/LinkToSchemaObject/LinkToSchemaObject.tsx
+++ b/src/components/LinkToSchemaObject/LinkToSchemaObject.tsx
@@ -1,10 +1,10 @@
+import {Link} from '@gravity-ui/uikit';
+import type {LinkProps} from '@gravity-ui/uikit';
import type {Location} from 'history';
-import {Link, type LinkProps} from '@gravity-ui/uikit';
-
import {createExternalUILink, parseQuery} from '../../routes';
-interface LinkToSchemaObjectProps extends LinkProps {
+interface LinkToSchemaObjectProps extends Omit {
path: string;
location: Location;
}
@@ -16,5 +16,5 @@ export function LinkToSchemaObject({path, location, ...props}: LinkToSchemaObjec
schema: path,
});
- return ;
+ return ;
}
diff --git a/src/components/LinkWithIcon/LinkWithIcon.tsx b/src/components/LinkWithIcon/LinkWithIcon.tsx
index 288429a493..0961e3211d 100644
--- a/src/components/LinkWithIcon/LinkWithIcon.tsx
+++ b/src/components/LinkWithIcon/LinkWithIcon.tsx
@@ -1,13 +1,14 @@
-import block from 'bem-cn-lite';
-
-import {Link} from '@gravity-ui/uikit';
+import React from 'react';
import {ArrowUpRightFromSquare} from '@gravity-ui/icons';
+import {Link} from '@gravity-ui/uikit';
+import {cn} from '../../utils/cn';
import {InternalLink} from '../InternalLink';
+
import './LinkWithIcon.scss';
-const b = block('ydb-link-with-icon');
+const b = cn('ydb-link-with-icon');
interface ExternalLinkWithIconProps {
title: string;
@@ -17,11 +18,11 @@ interface ExternalLinkWithIconProps {
export const LinkWithIcon = ({title, url, external = true}: ExternalLinkWithIconProps) => {
const linkContent = (
- <>
+
{title}
{'\u00a0'}
- >
+
);
if (external) {
diff --git a/src/components/Loader/Loader.tsx b/src/components/Loader/Loader.tsx
index f33adac68a..651fea7561 100644
--- a/src/components/Loader/Loader.tsx
+++ b/src/components/Loader/Loader.tsx
@@ -1,5 +1,7 @@
-import cn from 'bem-cn-lite';
-import {Loader as KitLoader, LoaderSize} from '@gravity-ui/uikit';
+import type {LoaderSize} from '@gravity-ui/uikit';
+import {Loader as KitLoader} from '@gravity-ui/uikit';
+
+import {cn} from '../../utils/cn';
import './Loader.scss';
diff --git a/src/components/MetricChart/MetricChart.tsx b/src/components/MetricChart/MetricChart.tsx
index a354f080ac..5c6e7fc0a5 100644
--- a/src/components/MetricChart/MetricChart.tsx
+++ b/src/components/MetricChart/MetricChart.tsx
@@ -1,26 +1,21 @@
-import {useCallback, useEffect, useReducer, useRef} from 'react';
+import React from 'react';
-import {YagrPlugin, YagrSeriesData, YagrWidgetData} from '@gravity-ui/chartkit/yagr';
import ChartKit, {settings} from '@gravity-ui/chartkit';
+import type {YagrSeriesData, YagrWidgetData} from '@gravity-ui/chartkit/yagr';
+import {YagrPlugin} from '@gravity-ui/chartkit/yagr';
import type {IResponseError} from '../../types/api/error';
-import type {TimeFrame} from '../../utils/timeframes';
-import {useAutofetcher} from '../../utils/hooks';
-
import {cn} from '../../utils/cn';
-
-import {Loader} from '../Loader';
+import {useAutofetcher} from '../../utils/hooks';
+import type {TimeFrame} from '../../utils/timeframes';
import {ResponseError} from '../Errors/ResponseError';
+import {Loader} from '../Loader';
-import type {
- ChartOptions,
- MetricDescription,
- OnChartDataStatusChange,
- PreparedMetricsData,
-} from './types';
-import {convertResponse} from './convertReponse';
-import {getDefaultDataFormatter} from './getDefaultDataFormatter';
+import {colorToRGBA, colors} from './colors';
+import {convertResponse} from './convertResponse';
import {getChartData} from './getChartData';
+import {getDefaultDataFormatter} from './getDefaultDataFormatter';
+import i18n from './i18n';
import {
chartReducer,
initialChartState,
@@ -29,8 +24,12 @@ import {
setChartDataWasNotLoaded,
setChartError,
} from './reducer';
-import {colorToRGBA, colors} from './colors';
-import i18n from './i18n';
+import type {
+ ChartOptions,
+ MetricDescription,
+ OnChartDataStatusChange,
+ PreparedMetricsData,
+} from './types';
import './MetricChart.scss';
@@ -143,21 +142,21 @@ export const MetricChart = ({
onChartDataStatusChange,
isChartVisible,
}: DiagnosticsChartProps) => {
- const mounted = useRef(false);
+ const mounted = React.useRef(false);
- useEffect(() => {
+ React.useEffect(() => {
mounted.current = true;
return () => {
mounted.current = false;
};
}, []);
- const [{loading, wasLoaded, data, error}, dispatch] = useReducer(
+ const [{loading, wasLoaded, data, error}, dispatch] = React.useReducer(
chartReducer,
initialChartState,
);
- useEffect(() => {
+ React.useEffect(() => {
if (error) {
return onChartDataStatusChange?.('error');
}
@@ -171,7 +170,7 @@ export const MetricChart = ({
return undefined;
}, [loading, wasLoaded, error, onChartDataStatusChange]);
- const fetchChartData = useCallback(
+ const fetchChartData = React.useCallback(
async (isBackground: boolean) => {
dispatch(setChartDataLoading());
diff --git a/src/components/MetricChart/convertReponse.ts b/src/components/MetricChart/convertResponse.ts
similarity index 99%
rename from src/components/MetricChart/convertReponse.ts
rename to src/components/MetricChart/convertResponse.ts
index 7520d07880..95e6b844bc 100644
--- a/src/components/MetricChart/convertReponse.ts
+++ b/src/components/MetricChart/convertResponse.ts
@@ -1,4 +1,5 @@
import type {MetricData} from '../../types/api/render';
+
import type {MetricDescription, PreparedMetric, PreparedMetricsData} from './types';
export const convertResponse = (
diff --git a/src/components/MetricChart/getChartData.ts b/src/components/MetricChart/getChartData.ts
index 9b39031988..95117d3471 100644
--- a/src/components/MetricChart/getChartData.ts
+++ b/src/components/MetricChart/getChartData.ts
@@ -1,4 +1,6 @@
-import {TIMEFRAMES, type TimeFrame} from '../../utils/timeframes';
+import {TIMEFRAMES} from '../../utils/timeframes';
+import type {TimeFrame} from '../../utils/timeframes';
+
import type {MetricDescription} from './types';
interface GetChartDataParams {
diff --git a/src/components/MonitoringButton/MonitoringButton.tsx b/src/components/MonitoringButton/MonitoringButton.tsx
index cb5d32c7a8..e8dd0157ff 100644
--- a/src/components/MonitoringButton/MonitoringButton.tsx
+++ b/src/components/MonitoringButton/MonitoringButton.tsx
@@ -1,6 +1,6 @@
-import cn from 'bem-cn-lite';
-
import {Button} from '@gravity-ui/uikit';
+
+import {cn} from '../../utils/cn';
import {Icon} from '../Icon';
import './MonitoringButton.scss';
diff --git a/src/components/NodeHostWrapper/NodeHostWrapper.tsx b/src/components/NodeHostWrapper/NodeHostWrapper.tsx
index 2e751f4f92..d731c2720d 100644
--- a/src/components/NodeHostWrapper/NodeHostWrapper.tsx
+++ b/src/components/NodeHostWrapper/NodeHostWrapper.tsx
@@ -1,20 +1,18 @@
-import block from 'bem-cn-lite';
-
import {Button, PopoverBehavior} from '@gravity-ui/uikit';
+import {getDefaultNodePath} from '../../containers/Node/NodePages';
import type {NodesPreparedEntity} from '../../store/reducers/nodes/types';
import type {NodeAddress} from '../../types/additionalProps';
-import {getDefaultNodePath} from '../../containers/Node/NodePages';
+import {cn} from '../../utils/cn';
import {isUnavailableNode} from '../../utils/nodes';
-
+import {CellWithPopover} from '../CellWithPopover/CellWithPopover';
import {EntityStatus} from '../EntityStatus/EntityStatus';
-import {NodeEndpointsTooltipContent} from '../TooltipsContent';
import {Icon} from '../Icon';
-import {CellWithPopover} from '../CellWithPopover/CellWithPopover';
+import {NodeEndpointsTooltipContent} from '../TooltipsContent';
import './NodeHostWrapper.scss';
-const b = block('ydb-node-host-wrapper');
+const b = cn('ydb-node-host-wrapper');
interface NodeHostWrapperProps {
node: NodesPreparedEntity;
diff --git a/src/components/PDiskInfo/PDiskInfo.scss b/src/components/PDiskInfo/PDiskInfo.scss
index 0313bf2fde..7685a1fad7 100644
--- a/src/components/PDiskInfo/PDiskInfo.scss
+++ b/src/components/PDiskInfo/PDiskInfo.scss
@@ -2,7 +2,6 @@
&__links {
display: flex;
flex-flow: row wrap;
-
gap: 12px;
}
}
diff --git a/src/components/PDiskInfo/PDiskInfo.tsx b/src/components/PDiskInfo/PDiskInfo.tsx
index 3f5875c6e0..c60cc01414 100644
--- a/src/components/PDiskInfo/PDiskInfo.tsx
+++ b/src/components/PDiskInfo/PDiskInfo.tsx
@@ -1,16 +1,17 @@
-import type {PreparedPDisk} from '../../utils/disks/types';
-import {createPDiskDeveloperUILink} from '../../utils/developerUI/developerUI';
-import {cn} from '../../utils/cn';
-import {formatStorageValuesToGb} from '../../utils/dataFormatters/dataFormatters';
+import {getPDiskPagePath} from '../../routes';
import {valueIsDefined} from '../../utils';
+import {cn} from '../../utils/cn';
import {EMPTY_DATA_PLACEHOLDER} from '../../utils/constants';
-import {getPDiskPagePath} from '../../routes';
-
-import type {InfoViewerItem} from '../InfoViewer';
-import {InfoViewer, type InfoViewerProps} from '../InfoViewer/InfoViewer';
+import {formatStorageValuesToGb} from '../../utils/dataFormatters/dataFormatters';
+import {createPDiskDeveloperUILink} from '../../utils/developerUI/developerUI';
+import type {PreparedPDisk} from '../../utils/disks/types';
import {EntityStatus} from '../EntityStatus/EntityStatus';
+import type {InfoViewerItem} from '../InfoViewer';
+import {InfoViewer} from '../InfoViewer/InfoViewer';
+import type {InfoViewerProps} from '../InfoViewer/InfoViewer';
import {LinkWithIcon} from '../LinkWithIcon/LinkWithIcon';
import {ProgressViewer} from '../ProgressViewer/ProgressViewer';
+
import {pDiskInfoKeyset} from './i18n';
import './PDiskInfo.scss';
diff --git a/src/components/PDiskPopup/PDiskPopup.tsx b/src/components/PDiskPopup/PDiskPopup.tsx
index a839b184a4..a65102f0db 100644
--- a/src/components/PDiskPopup/PDiskPopup.tsx
+++ b/src/components/PDiskPopup/PDiskPopup.tsx
@@ -1,16 +1,17 @@
-import {useMemo} from 'react';
-import cn from 'bem-cn-lite';
+import React from 'react';
-import {Popup, PopupProps} from '@gravity-ui/uikit';
+import type {PopupProps} from '@gravity-ui/uikit';
+import {Popup} from '@gravity-ui/uikit';
-import type {NodesMap} from '../../types/store/nodesList';
import {EFlag} from '../../types/api/enums';
-import type {PreparedPDisk} from '../../utils/disks/types';
+import type {NodesMap} from '../../types/store/nodesList';
+import {cn} from '../../utils/cn';
+import {EMPTY_DATA_PLACEHOLDER} from '../../utils/constants';
import {getPDiskId} from '../../utils/dataFormatters/dataFormatters';
+import type {PreparedPDisk} from '../../utils/disks/types';
import {bytesToGB} from '../../utils/utils';
-import {EMPTY_DATA_PLACEHOLDER} from '../../utils/constants';
-
-import {InfoViewer, InfoViewerItem} from '../InfoViewer';
+import type {InfoViewerItem} from '../InfoViewer';
+import {InfoViewer} from '../InfoViewer';
import './PDiskPopup.scss';
@@ -61,7 +62,7 @@ interface PDiskPopupProps extends PopupProps {
}
export const PDiskPopup = ({data, nodes, ...props}: PDiskPopupProps) => {
- const info = useMemo(() => preparePDiskData(data, nodes), [data, nodes]);
+ const info = React.useMemo(() => preparePDiskData(data, nodes), [data, nodes]);
return (
{
if (usage >= 75) {
diff --git a/src/components/PoolUsage/PoolUsage.tsx b/src/components/PoolUsage/PoolUsage.tsx
index 63bca5a990..ab5615a462 100644
--- a/src/components/PoolUsage/PoolUsage.tsx
+++ b/src/components/PoolUsage/PoolUsage.tsx
@@ -1,10 +1,9 @@
-import block from 'bem-cn-lite';
-
import type {TPoolStats} from '../../types/api/nodes';
+import {cn} from '../../utils/cn';
import './PoolUsage.scss';
-const b = block('ydb-pool-usage');
+const b = cn('ydb-pool-usage');
const getLineType = (fillWidth: number) => {
let fillColor = 'green';
diff --git a/src/components/PoolsGraph/PoolsGraph.tsx b/src/components/PoolsGraph/PoolsGraph.tsx
index dfec936304..8f9adf038a 100644
--- a/src/components/PoolsGraph/PoolsGraph.tsx
+++ b/src/components/PoolsGraph/PoolsGraph.tsx
@@ -1,12 +1,10 @@
-import block from 'bem-cn-lite';
-
import type {TPoolStats} from '../../types/api/nodes';
-
+import {cn} from '../../utils/cn';
import {PoolBar} from '../PoolBar/PoolBar';
import './PoolsGraph.scss';
-const b = block('ydb-pools-graph');
+const b = cn('ydb-pools-graph');
interface PoolsGraphProps {
pools?: TPoolStats[];
diff --git a/src/components/ProblemFilter/ProblemFilter.tsx b/src/components/ProblemFilter/ProblemFilter.tsx
index b76d18a0af..3ee00b4a8a 100644
--- a/src/components/ProblemFilter/ProblemFilter.tsx
+++ b/src/components/ProblemFilter/ProblemFilter.tsx
@@ -1,7 +1,7 @@
import {RadioButton} from '@gravity-ui/uikit';
-import type {ProblemFilterValue} from '../../store/reducers/settings/types';
import {ProblemFilterValues} from '../../store/reducers/settings/settings';
+import type {ProblemFilterValue} from '../../store/reducers/settings/types';
interface ProblemFilterProps {
value: ProblemFilterValue;
diff --git a/src/components/ProgressViewer/ProgressViewer.tsx b/src/components/ProgressViewer/ProgressViewer.tsx
index 4ae44bd81a..2454f72432 100644
--- a/src/components/ProgressViewer/ProgressViewer.tsx
+++ b/src/components/ProgressViewer/ProgressViewer.tsx
@@ -1,9 +1,9 @@
-import cn from 'bem-cn-lite';
import {useTheme} from '@gravity-ui/uikit';
import type {ValueOf} from '../../types/common';
-import {isNumeric} from '../../utils/utils';
+import {cn} from '../../utils/cn';
import {formatNumber, roundToPrecision} from '../../utils/dataFormatters/dataFormatters';
+import {isNumeric} from '../../utils/utils';
import './ProgressViewer.scss';
diff --git a/src/components/QueryExecutionStatus/QueryExecutionStatus.scss b/src/components/QueryExecutionStatus/QueryExecutionStatus.scss
index 67faa6c411..cc59d52a81 100644
--- a/src/components/QueryExecutionStatus/QueryExecutionStatus.scss
+++ b/src/components/QueryExecutionStatus/QueryExecutionStatus.scss
@@ -1,8 +1,7 @@
.kv-query-execution-status {
display: flex;
- gap: 4px;
-
align-items: center;
+ gap: 4px;
color: var(--g-color-text-complementary);
&__result-status-icon {
diff --git a/src/components/QueryExecutionStatus/QueryExecutionStatus.tsx b/src/components/QueryExecutionStatus/QueryExecutionStatus.tsx
index 352d58780f..b44baaa0fb 100644
--- a/src/components/QueryExecutionStatus/QueryExecutionStatus.tsx
+++ b/src/components/QueryExecutionStatus/QueryExecutionStatus.tsx
@@ -1,9 +1,7 @@
-import type {ReactNode} from 'react';
-import type {AxiosError} from 'axios';
-import cn from 'bem-cn-lite';
-
import {Icon as UiKitIcon} from '@gravity-ui/uikit';
+import type {AxiosError} from 'axios';
+import {cn} from '../../utils/cn';
import {Icon} from '../Icon';
import questionIcon from '../../assets/icons/question.svg';
@@ -19,7 +17,7 @@ interface QueryExecutionStatusProps {
}
export const QueryExecutionStatus = ({className, error}: QueryExecutionStatusProps) => {
- let icon: ReactNode;
+ let icon: React.ReactNode;
let label: string;
if (typeof error === 'object' && error?.code === 'ECONNABORTED') {
diff --git a/src/components/QueryResultTable/Cell/Cell.tsx b/src/components/QueryResultTable/Cell/Cell.tsx
index f08463154c..41b98dadc7 100644
--- a/src/components/QueryResultTable/Cell/Cell.tsx
+++ b/src/components/QueryResultTable/Cell/Cell.tsx
@@ -1,8 +1,7 @@
-import React, {useEffect} from 'react';
+import React from 'react';
+import {hideTooltip, showTooltip} from '../../../store/reducers/tooltip';
import {useTypedDispatch} from '../../../utils/hooks';
-import {showTooltip, hideTooltip} from '../../../store/reducers/tooltip';
-
import {b} from '../QueryResultTable';
interface CellProps {
@@ -15,7 +14,7 @@ export const Cell = React.memo(function Cell(props: CellProps) {
const dispatch = useTypedDispatch();
- useEffect(
+ React.useEffect(
() => () => {
dispatch(hideTooltip());
},
diff --git a/src/components/QueryResultTable/QueryResultTable.tsx b/src/components/QueryResultTable/QueryResultTable.tsx
index 8e09c18324..133ec737b2 100644
--- a/src/components/QueryResultTable/QueryResultTable.tsx
+++ b/src/components/QueryResultTable/QueryResultTable.tsx
@@ -1,17 +1,17 @@
-import {useMemo} from 'react';
-import cn from 'bem-cn-lite';
+import React from 'react';
import DataTable from '@gravity-ui/react-data-table';
import type {Column, DataTableProps, Settings} from '@gravity-ui/react-data-table';
import type {ColumnType, KeyValueRow} from '../../types/api/query';
+import {cn} from '../../utils/cn';
import {DEFAULT_TABLE_SETTINGS} from '../../utils/constants';
import {getColumnType, prepareQueryResponse} from '../../utils/query';
import {isNumeric} from '../../utils/utils';
import {Cell} from './Cell';
-
import i18n from './i18n';
+
import './QueryResultTable.scss';
const TABLE_SETTINGS: Settings = {
@@ -78,11 +78,11 @@ interface QueryResultTableProps
export const QueryResultTable = (props: QueryResultTableProps) => {
const {columns: rawColumns, data: rawData, settings: settingsMix, ...restProps} = props;
- const data = useMemo(() => prepareQueryResponse(rawData), [rawData]);
- const columns = useMemo(() => {
+ const data = React.useMemo(() => prepareQueryResponse(rawData), [rawData]);
+ const columns = React.useMemo(() => {
return rawColumns ? prepareTypedColumns(rawColumns) : prepareGenericColumns(data);
}, [data, rawColumns]);
- const settings = useMemo(
+ const settings = React.useMemo(
() => ({
...TABLE_SETTINGS,
...settingsMix,
diff --git a/src/components/QueryResultTable/i18n/index.ts b/src/components/QueryResultTable/i18n/index.ts
index 333e8fe57d..69ee2f9d1c 100644
--- a/src/components/QueryResultTable/i18n/index.ts
+++ b/src/components/QueryResultTable/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../utils/i18n';
+import {registerKeysets} from '../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-query-result-table';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/components/Search/Search.tsx b/src/components/Search/Search.tsx
index 3c1354f18d..7beef51eba 100644
--- a/src/components/Search/Search.tsx
+++ b/src/components/Search/Search.tsx
@@ -1,8 +1,9 @@
-import {useRef, useEffect, useState} from 'react';
-import cn from 'bem-cn-lite';
+import React from 'react';
import {TextInput} from '@gravity-ui/uikit';
+import {cn} from '../../utils/cn';
+
import './Search.scss';
const b = cn('ydb-search');
@@ -22,11 +23,11 @@ export const Search = ({
debounce = 200,
placeholder,
}: SearchProps) => {
- const [searchValue, setSearchValue] = useState(value);
+ const [searchValue, setSearchValue] = React.useState(value);
- const timer = useRef();
+ const timer = React.useRef();
- useEffect(() => {
+ React.useEffect(() => {
setSearchValue((prevValue) => {
if (prevValue !== value) {
return value;
diff --git a/src/components/ShortyString/ShortyString.tsx b/src/components/ShortyString/ShortyString.tsx
index ba99be0b4c..b5764ef395 100644
--- a/src/components/ShortyString/ShortyString.tsx
+++ b/src/components/ShortyString/ShortyString.tsx
@@ -1,9 +1,11 @@
-import * as React from 'react';
-import cn from 'bem-cn-lite';
+import React from 'react';
import {Link} from '@gravity-ui/uikit';
+import {cn} from '../../utils/cn';
+
import i18n from './i18n';
+
import './ShortyString.scss';
const block = cn('kv-shorty-string');
@@ -49,8 +51,10 @@ export default function ShortyString({
{hasToggle ? (
{
e.stopPropagation();
+ e.preventDefault();
setExpanded((v) => !v);
onToggle?.();
}}
diff --git a/src/components/ShortyString/i18n/index.ts b/src/components/ShortyString/i18n/index.ts
index 3ae9ffb927..8d0cdb3279 100644
--- a/src/components/ShortyString/i18n/index.ts
+++ b/src/components/ShortyString/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../utils/i18n';
+import {registerKeysets} from '../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-shorty-string';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/components/SpeedMultiMeter/SpeedMultiMeter.tsx b/src/components/SpeedMultiMeter/SpeedMultiMeter.tsx
index e496b5698c..4fe59d1e20 100644
--- a/src/components/SpeedMultiMeter/SpeedMultiMeter.tsx
+++ b/src/components/SpeedMultiMeter/SpeedMultiMeter.tsx
@@ -1,13 +1,15 @@
-import {useState} from 'react';
-import cn from 'bem-cn-lite';
-import {Popover} from '@gravity-ui/uikit';
+import React from 'react';
-import {formatBytes, BytesSizes, ProcessSpeedStats} from '../../utils/bytesParsers';
+import {Popover} from '@gravity-ui/uikit';
-import './SpeedMultiMeter.scss';
+import type {BytesSizes, ProcessSpeedStats} from '../../utils/bytesParsers';
+import {formatBytes} from '../../utils/bytesParsers';
+import {cn} from '../../utils/cn';
import i18n from './i18n';
+import './SpeedMultiMeter.scss';
+
const b = cn('speed-multimeter');
interface SpeedMultiMeterProps {
@@ -35,11 +37,11 @@ export const SpeedMultiMeter = ({
{value: formatValue(perDay), label: i18n('perDay')},
];
- const [valueToDisplay, setValueToDisplay] = useState(perMinute);
- const [highlightedValueIndex, setHighlightedValueIndex] = useState(withValue ? 0 : undefined);
- const [highlightedContainerIndex, setHighlightedContainerIndex] = useState<
- number | undefined
- >();
+ const [valueToDisplay, setValueToDisplay] = React.useState(perMinute);
+ const [highlightedValueIndex, setHighlightedValueIndex] = React.useState(
+ withValue ? 0 : undefined,
+ );
+ const [highlightedContainerIndex, setHighlightedContainerIndex] = React.useState();
const onEnterDiagram = (values: number[], index: number) => {
setValueToDisplay(values[index]);
diff --git a/src/components/SpeedMultiMeter/i18n/index.ts b/src/components/SpeedMultiMeter/i18n/index.ts
index e68ff76302..74d7017cf7 100644
--- a/src/components/SpeedMultiMeter/i18n/index.ts
+++ b/src/components/SpeedMultiMeter/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../utils/i18n';
+import {registerKeysets} from '../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-components-speed-multimeter';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/components/SplitPane/SplitPane.scss b/src/components/SplitPane/SplitPane.scss
index 39ac812fbe..e05af1df46 100644
--- a/src/components/SplitPane/SplitPane.scss
+++ b/src/components/SplitPane/SplitPane.scss
@@ -28,10 +28,7 @@
&::after {
position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
+ inset: 0;
content: '';
diff --git a/src/components/SplitPane/SplitPane.tsx b/src/components/SplitPane/SplitPane.tsx
index f97d84bda9..9e49a8231e 100644
--- a/src/components/SplitPane/SplitPane.tsx
+++ b/src/components/SplitPane/SplitPane.tsx
@@ -1,7 +1,9 @@
-import cn from 'bem-cn-lite';
-import React, {useEffect, useState} from 'react';
+import React from 'react';
-import SplitPaneLib, {SplitProps} from 'react-split';
+import type {SplitProps} from 'react-split';
+import SplitPaneLib from 'react-split';
+
+import {cn} from '../../utils/cn';
import './SplitPane.scss';
@@ -25,7 +27,7 @@ const minSizeDefaultInner = [0, 100];
const sizesDefaultInner = [50, 50];
function SplitPane(props: SplitPaneProps) {
- const [innerSizes, setInnerSizes] = useState();
+ const [innerSizes, setInnerSizes] = React.useState();
const getDefaultSizePane = () => {
const {defaultSizePaneKey, defaultSizes = sizesDefaultInner, initialSizes} = props;
@@ -55,7 +57,7 @@ function SplitPane(props: SplitPaneProps) {
setInnerSizes(undefined);
};
- useEffect(() => {
+ React.useEffect(() => {
const {collapsedSizes, triggerCollapse} = props;
if (triggerCollapse) {
const newSizes = collapsedSizes || minSizeDefaultInner;
@@ -64,7 +66,7 @@ function SplitPane(props: SplitPaneProps) {
}
}, [props.triggerCollapse]);
- useEffect(() => {
+ React.useEffect(() => {
const {triggerExpand, defaultSizes} = props;
const newSizes = defaultSizes || sizesDefaultInner;
if (triggerExpand) {
diff --git a/src/components/Stack/Stack.scss b/src/components/Stack/Stack.scss
index bdd1dc8947..9a12f95c00 100644
--- a/src/components/Stack/Stack.scss
+++ b/src/components/Stack/Stack.scss
@@ -44,12 +44,14 @@
.stack__layer + .stack__layer {
transform: translate(
calc(
- var(--ydb-stack-level) * (var(--ydb-stack-offset-x-hover) * 2) -
- var(--ydb-stack-offset-x-hover)
+ var(--ydb-stack-level) * (var(--ydb-stack-offset-x-hover) * 2) - var(
+ --ydb-stack-offset-x-hover
+ )
),
calc(
- var(--ydb-stack-level) * (var(--ydb-stack-offset-y-hover) * 2) -
- var(--ydb-stack-offset-y-hover)
+ var(--ydb-stack-level) * (var(--ydb-stack-offset-y-hover) * 2) - var(
+ --ydb-stack-offset-y-hover
+ )
)
);
}
diff --git a/src/components/Stack/Stack.tsx b/src/components/Stack/Stack.tsx
index 237dbccf50..0dad36ff6e 100644
--- a/src/components/Stack/Stack.tsx
+++ b/src/components/Stack/Stack.tsx
@@ -1,17 +1,19 @@
import React from 'react';
-import cn from 'bem-cn-lite';
+
+import {cn} from '../../utils/cn';
import './Stack.scss';
interface StackProps {
className?: string;
+ children: React.ReactNode;
}
const LAYER_CSS_VAR = '--ydb-stack-level';
const b = cn('stack');
-export const Stack: React.FC = ({children, className}) => (
+export const Stack = ({children, className}: StackProps) => (
{React.Children.map(children, (child, index) => {
if (!React.isValidElement(child)) {
diff --git a/src/components/StatusIcon/StatusIcon.tsx b/src/components/StatusIcon/StatusIcon.tsx
index 3e7628cbbd..f0e0c7fafa 100644
--- a/src/components/StatusIcon/StatusIcon.tsx
+++ b/src/components/StatusIcon/StatusIcon.tsx
@@ -1,12 +1,13 @@
import {Icon} from '@gravity-ui/uikit';
+import {EFlag} from '../../types/api/enums';
+import {cn} from '../../utils/cn';
+
import CircleExclamationFillIcon from '@gravity-ui/icons/svgs/circle-exclamation-fill.svg';
import CircleInfoFillIcon from '@gravity-ui/icons/svgs/circle-info-fill.svg';
import CircleXmarkFillIcon from '@gravity-ui/icons/svgs/circle-xmark-fill.svg';
import TriangleExclamationFillIcon from '@gravity-ui/icons/svgs/triangle-exclamation-fill.svg';
-import {EFlag} from '../../types/api/enums';
-import {cn} from '../../utils/cn';
import './StatusIcon.scss';
const b = cn('ydb-status-icon');
diff --git a/src/components/TableSkeleton/TableSkeleton.scss b/src/components/TableSkeleton/TableSkeleton.scss
index a828114b1e..5e9fb52b4c 100644
--- a/src/components/TableSkeleton/TableSkeleton.scss
+++ b/src/components/TableSkeleton/TableSkeleton.scss
@@ -7,7 +7,7 @@
height: var(--data-table-row-height);
- .yc-skeleton {
+ .g-skeleton {
height: var(--g-text-body-2-line-height);
}
}
diff --git a/src/components/TableSkeleton/TableSkeleton.tsx b/src/components/TableSkeleton/TableSkeleton.tsx
index 1378d2d924..004eb75847 100644
--- a/src/components/TableSkeleton/TableSkeleton.tsx
+++ b/src/components/TableSkeleton/TableSkeleton.tsx
@@ -1,17 +1,17 @@
-import {FC} from 'react';
-import block from 'bem-cn-lite';
import {Skeleton} from '@gravity-ui/uikit';
+import {cn} from '../../utils/cn';
+
import './TableSkeleton.scss';
-const b = block('table-skeleton');
+const b = cn('table-skeleton');
interface TableSkeletonProps {
className?: string;
rows?: number;
}
-export const TableSkeleton: FC
= ({rows = 2, className}) => (
+export const TableSkeleton = ({rows = 2, className}: TableSkeletonProps) => (
diff --git a/src/components/TableWithControlsLayout/TableWithControlsLayout.tsx b/src/components/TableWithControlsLayout/TableWithControlsLayout.tsx
index 5b1a54bcf5..16a74fc4e3 100644
--- a/src/components/TableWithControlsLayout/TableWithControlsLayout.tsx
+++ b/src/components/TableWithControlsLayout/TableWithControlsLayout.tsx
@@ -1,14 +1,12 @@
-import type {ReactNode} from 'react';
-import block from 'bem-cn-lite';
-
+import {cn} from '../../utils/cn';
import {TableSkeleton} from '../TableSkeleton/TableSkeleton';
import './TableWithControlsLayout.scss';
-const b = block('ydb-table-with-controls-layout');
+const b = cn('ydb-table-with-controls-layout');
interface TableWithControlsLayoutItemProps {
- children: ReactNode;
+ children: React.ReactNode;
className?: string;
}
diff --git a/src/components/Tablet/Tablet.tsx b/src/components/Tablet/Tablet.tsx
index 37132afb23..6d48a2c5d2 100644
--- a/src/components/Tablet/Tablet.tsx
+++ b/src/components/Tablet/Tablet.tsx
@@ -1,12 +1,10 @@
-import cn from 'bem-cn-lite';
-
+import routes, {createHref} from '../../routes';
import type {TTabletStateInfo} from '../../types/api/tablet';
+import {cn} from '../../utils/cn';
import {getTabletLabel} from '../../utils/constants';
-import routes, {createHref} from '../../routes';
-
import {ContentWithPopup} from '../ContentWithPopup/ContentWithPopup';
-import {TabletIcon} from '../TabletIcon/TabletIcon';
import {InternalLink} from '../InternalLink';
+import {TabletIcon} from '../TabletIcon/TabletIcon';
import {TabletTooltipContent} from '../TooltipsContent';
import './Tablet.scss';
diff --git a/src/components/TabletIcon/TabletIcon.tsx b/src/components/TabletIcon/TabletIcon.tsx
index ffb187ba7c..bad1768eca 100644
--- a/src/components/TabletIcon/TabletIcon.tsx
+++ b/src/components/TabletIcon/TabletIcon.tsx
@@ -1,4 +1,4 @@
-import cn from 'bem-cn-lite';
+import {cn} from '../../utils/cn';
import './TabletIcon.scss';
diff --git a/src/components/TabletsOverall/TabletsOverall.scss b/src/components/TabletsOverall/TabletsOverall.scss
index 66c5ea2678..0e7beb84d4 100644
--- a/src/components/TabletsOverall/TabletsOverall.scss
+++ b/src/components/TabletsOverall/TabletsOverall.scss
@@ -1,12 +1,11 @@
.kv-tablets-overall {
&__row {
display: flex;
- gap: 8px;
-
align-items: center;
+ gap: 8px;
&_overall {
- .yc-progress {
+ .g-progress {
width: 166px;
margin: 0;
}
diff --git a/src/components/TabletsOverall/TabletsOverall.tsx b/src/components/TabletsOverall/TabletsOverall.tsx
index 872fb6afca..bef76212ab 100644
--- a/src/components/TabletsOverall/TabletsOverall.tsx
+++ b/src/components/TabletsOverall/TabletsOverall.tsx
@@ -1,10 +1,9 @@
-import cn from 'bem-cn-lite';
-
import {Progress} from '@gravity-ui/uikit';
import {hideTooltip, showTooltip} from '../../store/reducers/tooltip';
-import {useTypedDispatch} from '../../utils/hooks';
+import {cn} from '../../utils/cn';
import {COLORS_PRIORITY} from '../../utils/constants';
+import {useTypedDispatch} from '../../utils/hooks';
import './TabletsOverall.scss';
@@ -47,16 +46,19 @@ function TabletsOverall({tablets}: TabletsOverallProps) {
};
// determine how many tablets of what color are in "tablets"
- const statesForOverallProgress: Record
= tablets.reduce((acc, tablet) => {
- const color = tablet.Overall?.toLowerCase();
- if (color && !acc[color]) {
- acc[color] = 1;
- } else if (color) {
- acc[color]++;
- }
+ const statesForOverallProgress: Record = tablets.reduce(
+ (acc, tablet) => {
+ const color = tablet.Overall?.toLowerCase();
+ if (color && !acc[color]) {
+ acc[color] = 1;
+ } else if (color) {
+ acc[color]++;
+ }
- return acc;
- }, {} as Record);
+ return acc;
+ },
+ {} as Record,
+ );
const tooltipData: {color: string; percents: number; value: number; total: number}[] = [];
diff --git a/src/components/TabletsStatistic/TabletsStatistic.tsx b/src/components/TabletsStatistic/TabletsStatistic.tsx
index 28d9d37c54..cd0428848e 100644
--- a/src/components/TabletsStatistic/TabletsStatistic.tsx
+++ b/src/components/TabletsStatistic/TabletsStatistic.tsx
@@ -1,12 +1,11 @@
-import cn from 'bem-cn-lite';
import {Link} from 'react-router-dom';
-import {getTabletLabel} from '../../utils/constants';
-import {mapTabletStateToColorState} from '../../utils/tablet';
import routes, {createHref} from '../../routes';
-
-import type {TTabletStateInfo as TFullTabletStateInfo} from '../../types/api/tablet';
import type {TTabletStateInfo as TComputeTabletStateInfo} from '../../types/api/compute';
+import type {TTabletStateInfo as TFullTabletStateInfo} from '../../types/api/tablet';
+import {cn} from '../../utils/cn';
+import {getTabletLabel} from '../../utils/constants';
+import {mapTabletStateToColorState} from '../../utils/tablet';
import './TabletsStatistic.scss';
diff --git a/src/components/Tag/Tag.tsx b/src/components/Tag/Tag.tsx
index d3a1fd8ee2..241e91d1b1 100644
--- a/src/components/Tag/Tag.tsx
+++ b/src/components/Tag/Tag.tsx
@@ -1,4 +1,4 @@
-import cn from 'bem-cn-lite';
+import {cn} from '../../utils/cn';
import './Tag.scss';
diff --git a/src/components/Tags/Tags.tsx b/src/components/Tags/Tags.tsx
index d177adf0a1..ee0054dfbc 100644
--- a/src/components/Tags/Tags.tsx
+++ b/src/components/Tags/Tags.tsx
@@ -1,6 +1,6 @@
-import cn from 'bem-cn-lite';
-
-import {Tag, TagType} from '../Tag';
+import {cn} from '../../utils/cn';
+import type {TagType} from '../Tag';
+import {Tag} from '../Tag';
import './Tags.scss';
diff --git a/src/components/TimeFrameSelector/TimeFrameSelector.scss b/src/components/TimeFrameSelector/TimeFrameSelector.scss
index f4ff043f2f..d9d7f03fa8 100644
--- a/src/components/TimeFrameSelector/TimeFrameSelector.scss
+++ b/src/components/TimeFrameSelector/TimeFrameSelector.scss
@@ -1,5 +1,4 @@
.ydb-timeframe-selector {
display: flex;
-
gap: 2px;
}
diff --git a/src/components/TimeFrameSelector/TimeFrameSelector.tsx b/src/components/TimeFrameSelector/TimeFrameSelector.tsx
index 5729f25355..83f5910b6f 100644
--- a/src/components/TimeFrameSelector/TimeFrameSelector.tsx
+++ b/src/components/TimeFrameSelector/TimeFrameSelector.tsx
@@ -1,7 +1,8 @@
import {Button} from '@gravity-ui/uikit';
import {cn} from '../../utils/cn';
-import {TIMEFRAMES, type TimeFrame} from '../../utils/timeframes';
+import {TIMEFRAMES} from '../../utils/timeframes';
+import type {TimeFrame} from '../../utils/timeframes';
import './TimeFrameSelector.scss';
diff --git a/src/components/TooltipsContent/NodeEndpointsTooltipContent/NodeEndpointsTooltipContent.tsx b/src/components/TooltipsContent/NodeEndpointsTooltipContent/NodeEndpointsTooltipContent.tsx
index c6cecb6ad2..336f446f67 100644
--- a/src/components/TooltipsContent/NodeEndpointsTooltipContent/NodeEndpointsTooltipContent.tsx
+++ b/src/components/TooltipsContent/NodeEndpointsTooltipContent/NodeEndpointsTooltipContent.tsx
@@ -1,12 +1,11 @@
-import block from 'bem-cn-lite';
-
import type {TSystemStateInfo} from '../../../types/api/nodes';
-
-import {InfoViewer, InfoViewerItem} from '../../InfoViewer';
+import {cn} from '../../../utils/cn';
+import type {InfoViewerItem} from '../../InfoViewer';
+import {InfoViewer} from '../../InfoViewer';
import './NodeEndpointsTooltipContent.scss';
-const b = block('ydb-node-endpoints-tooltip-content');
+const b = cn('ydb-node-endpoints-tooltip-content');
interface NodeEdpointsTooltipProps {
data?: TSystemStateInfo;
diff --git a/src/components/TooltipsContent/PoolTooltipContent/PoolTooltipContent.tsx b/src/components/TooltipsContent/PoolTooltipContent/PoolTooltipContent.tsx
index 048e6b6bdb..a25aa25aa0 100644
--- a/src/components/TooltipsContent/PoolTooltipContent/PoolTooltipContent.tsx
+++ b/src/components/TooltipsContent/PoolTooltipContent/PoolTooltipContent.tsx
@@ -1,5 +1,4 @@
import type {TPoolStats} from '../../../types/api/nodes';
-
import {InfoViewer, createInfoFormatter, formatObject} from '../../InfoViewer';
const formatPool = createInfoFormatter({
diff --git a/src/components/TooltipsContent/TabletTooltipContent/TabletTooltipContent.tsx b/src/components/TooltipsContent/TabletTooltipContent/TabletTooltipContent.tsx
index 57ce5e89e3..9ef3569be7 100644
--- a/src/components/TooltipsContent/TabletTooltipContent/TabletTooltipContent.tsx
+++ b/src/components/TooltipsContent/TabletTooltipContent/TabletTooltipContent.tsx
@@ -1,5 +1,4 @@
import type {TTabletStateInfo} from '../../../types/api/tablet';
-
import {calcUptime} from '../../../utils/dataFormatters/dataFormatters';
import {InfoViewer, createInfoFormatter, formatObject} from '../../InfoViewer';
diff --git a/src/components/TruncatedQuery/TruncatedQuery.tsx b/src/components/TruncatedQuery/TruncatedQuery.tsx
index bedc8977d3..60ff1593aa 100644
--- a/src/components/TruncatedQuery/TruncatedQuery.tsx
+++ b/src/components/TruncatedQuery/TruncatedQuery.tsx
@@ -1,5 +1,6 @@
-import cn from 'bem-cn-lite';
+import React from 'react';
+import {cn} from '../../utils/cn';
import {CellWithPopover} from '../CellWithPopover/CellWithPopover';
import './TruncatedQuery.scss';
@@ -20,13 +21,13 @@ export const TruncatedQuery = ({value = '', maxQueryHeight = 6}: TruncatedQueryP
const message =
'\n...\nThe request was truncated. Click on the line to show the full query on the query tab';
return (
- <>
+
{content}
{message}
- >
+
);
}
- return <>{value}>;
+ return {value};
};
interface OneLineQueryWithPopoverProps {
diff --git a/src/components/UptimeFIlter/UptimeFilter.tsx b/src/components/UptimeFIlter/UptimeFilter.tsx
index 2f8a4acee2..4b83241107 100644
--- a/src/components/UptimeFIlter/UptimeFilter.tsx
+++ b/src/components/UptimeFIlter/UptimeFilter.tsx
@@ -1,6 +1,6 @@
import {RadioButton} from '@gravity-ui/uikit';
-import {NodesUptimeFilterValues, NodesUptimeFilterTitles} from '../../utils/nodes';
+import {NodesUptimeFilterTitles, NodesUptimeFilterValues} from '../../utils/nodes';
interface UptimeFilterProps {
value: NodesUptimeFilterValues;
diff --git a/src/components/UsageLabel/UsageLabel.tsx b/src/components/UsageLabel/UsageLabel.tsx
index f7446c3e38..b6cbc5bcc4 100644
--- a/src/components/UsageLabel/UsageLabel.tsx
+++ b/src/components/UsageLabel/UsageLabel.tsx
@@ -1,6 +1,7 @@
-import cn from 'bem-cn-lite';
+import {Label} from '@gravity-ui/uikit';
+import type {LabelProps} from '@gravity-ui/uikit';
-import {Label, type LabelProps} from '@gravity-ui/uikit';
+import {cn} from '../../utils/cn';
import './UsageLabel.scss';
diff --git a/src/components/VDisk/VDisk.tsx b/src/components/VDisk/VDisk.tsx
index 7ef45f9c3f..611f889513 100644
--- a/src/components/VDisk/VDisk.tsx
+++ b/src/components/VDisk/VDisk.tsx
@@ -1,18 +1,15 @@
-import React, {useState, useRef} from 'react';
-import cn from 'bem-cn-lite';
+import React from 'react';
-import type {NodesMap} from '../../types/store/nodesList';
-
-import type {PreparedVDisk} from '../../utils/disks/types';
+import {STRUCTURE} from '../../containers/Node/NodePages';
import routes, {createHref} from '../../routes';
+import type {NodesMap} from '../../types/store/nodesList';
+import {cn} from '../../utils/cn';
import {stringifyVdiskId} from '../../utils/dataFormatters/dataFormatters';
import {isFullVDiskData} from '../../utils/disks/helpers';
-
-import {STRUCTURE} from '../../containers/Node/NodePages';
-
-import {VDiskPopup} from '../VDiskPopup/VDiskPopup';
+import type {PreparedVDisk} from '../../utils/disks/types';
import {DiskStateProgressBar} from '../DiskStateProgressBar/DiskStateProgressBar';
import {InternalLink} from '../InternalLink';
+import {VDiskPopup} from '../VDiskPopup/VDiskPopup';
import './VDisk.scss';
@@ -27,9 +24,9 @@ interface VDiskProps {
export const VDisk = ({data = {}, nodes, compact}: VDiskProps) => {
const isFullData = isFullVDiskData(data);
- const [isPopupVisible, setIsPopupVisible] = useState(false);
+ const [isPopupVisible, setIsPopupVisible] = React.useState(false);
- const anchor = useRef(null);
+ const anchor = React.useRef(null);
const showPopup = () => {
setIsPopupVisible(true);
diff --git a/src/components/VDisk/VDiskWithDonorsStack.tsx b/src/components/VDisk/VDiskWithDonorsStack.tsx
index 221ccea31c..f7f0a2babb 100644
--- a/src/components/VDisk/VDiskWithDonorsStack.tsx
+++ b/src/components/VDisk/VDiskWithDonorsStack.tsx
@@ -1,9 +1,9 @@
import type {NodesMap} from '../../types/store/nodesList';
-import type {PreparedVDisk} from '../../utils/disks/types';
import {stringifyVdiskId} from '../../utils/dataFormatters/dataFormatters';
import {isFullVDiskData} from '../../utils/disks/helpers';
-
+import type {PreparedVDisk} from '../../utils/disks/types';
import {Stack} from '../Stack/Stack';
+
import {VDisk} from './VDisk';
interface VDiskWithDonorsStackProps {
diff --git a/src/components/VDiskInfo/VDiskInfo.scss b/src/components/VDiskInfo/VDiskInfo.scss
index 244b93dccc..ac8d681385 100644
--- a/src/components/VDiskInfo/VDiskInfo.scss
+++ b/src/components/VDiskInfo/VDiskInfo.scss
@@ -2,7 +2,6 @@
&__links {
display: flex;
flex-flow: row wrap;
-
gap: 12px;
}
}
diff --git a/src/components/VDiskInfo/VDiskInfo.tsx b/src/components/VDiskInfo/VDiskInfo.tsx
index 92f2873f99..90c7c3b368 100644
--- a/src/components/VDiskInfo/VDiskInfo.tsx
+++ b/src/components/VDiskInfo/VDiskInfo.tsx
@@ -1,16 +1,16 @@
-import type {PreparedVDisk} from '../../utils/disks/types';
+import {getVDiskPagePath} from '../../routes';
import {valueIsDefined} from '../../utils';
-import {formatStorageValuesToGb} from '../../utils/dataFormatters/dataFormatters';
-import {bytesToSpeed} from '../../utils/utils';
import {cn} from '../../utils/cn';
+import {formatStorageValuesToGb} from '../../utils/dataFormatters/dataFormatters';
import {createVDiskDeveloperUILink} from '../../utils/developerUI/developerUI';
-import {getVDiskPagePath} from '../../routes';
-
-import type {InfoViewerProps} from '../InfoViewer/InfoViewer';
-import {InfoViewer} from '../InfoViewer';
+import type {PreparedVDisk} from '../../utils/disks/types';
+import {bytesToSpeed} from '../../utils/utils';
import {EntityStatus} from '../EntityStatus/EntityStatus';
+import {InfoViewer} from '../InfoViewer';
+import type {InfoViewerProps} from '../InfoViewer/InfoViewer';
import {LinkWithIcon} from '../LinkWithIcon/LinkWithIcon';
import {ProgressViewer} from '../ProgressViewer/ProgressViewer';
+
import {vDiskInfoKeyset} from './i18n';
import './VDiskInfo.scss';
diff --git a/src/components/VDiskPopup/VDiskPopup.tsx b/src/components/VDiskPopup/VDiskPopup.tsx
index 5238b1acbd..d09c355248 100644
--- a/src/components/VDiskPopup/VDiskPopup.tsx
+++ b/src/components/VDiskPopup/VDiskPopup.tsx
@@ -1,19 +1,20 @@
-import {useMemo} from 'react';
-import cn from 'bem-cn-lite';
+import React from 'react';
-import {Label, Popup, PopupProps} from '@gravity-ui/uikit';
+import type {PopupProps} from '@gravity-ui/uikit';
+import {Label, Popup} from '@gravity-ui/uikit';
-import type {NodesMap} from '../../types/store/nodesList';
import {EFlag} from '../../types/api/enums';
import type {TVDiskStateInfo} from '../../types/api/vdisk';
-import type {UnavailableDonor} from '../../utils/disks/types';
+import type {NodesMap} from '../../types/store/nodesList';
+import {cn} from '../../utils/cn';
+import {EMPTY_DATA_PLACEHOLDER} from '../../utils/constants';
import {stringifyVdiskId} from '../../utils/dataFormatters/dataFormatters';
-import {bytesToGB, bytesToSpeed} from '../../utils/utils';
import {isFullVDiskData} from '../../utils/disks/helpers';
-import {EMPTY_DATA_PLACEHOLDER} from '../../utils/constants';
-
+import type {UnavailableDonor} from '../../utils/disks/types';
+import {bytesToGB, bytesToSpeed} from '../../utils/utils';
+import type {InfoViewerItem} from '../InfoViewer';
+import {InfoViewer} from '../InfoViewer';
import {preparePDiskData} from '../PDiskPopup/PDiskPopup';
-import {InfoViewer, InfoViewerItem} from '../InfoViewer';
import './VDiskPopup.scss';
@@ -134,11 +135,11 @@ interface VDiskPopupProps extends PopupProps {
export const VDiskPopup = ({data, nodes, ...props}: VDiskPopupProps) => {
const isFullData = isFullVDiskData(data);
- const vdiskInfo = useMemo(
+ const vdiskInfo = React.useMemo(
() => (isFullData ? prepareVDiskData(data) : prepareUnavailableVDiskData(data)),
[data, isFullData],
);
- const pdiskInfo = useMemo(
+ const pdiskInfo = React.useMemo(
() => isFullData && data.PDisk && preparePDiskData(data.PDisk, nodes),
[data, nodes, isFullData],
);
diff --git a/src/components/VirtualTable/TableChunk.tsx b/src/components/VirtualTable/TableChunk.tsx
index 7a5126eaaf..e8e50a01f6 100644
--- a/src/components/VirtualTable/TableChunk.tsx
+++ b/src/components/VirtualTable/TableChunk.tsx
@@ -1,12 +1,12 @@
-import {useEffect, useRef, memo} from 'react';
+import React from 'react';
import {getArray} from '../../utils';
-import type {Column, Chunk, GetRowClassName} from './types';
import {LoadingTableRow, TableRow} from './TableRow';
+import type {Chunk, Column, GetRowClassName} from './types';
// With original memo generic types are lost
-const typedMemo: (Component: T) => T = memo;
+const typedMemo: (Component: T) => T = React.memo;
interface TableChunkProps {
id: number;
@@ -28,9 +28,9 @@ export const TableChunk = typedMemo(function TableChunk({
observer,
getRowClassName,
}: TableChunkProps) {
- const ref = useRef(null);
+ const ref = React.useRef(null);
- useEffect(() => {
+ React.useEffect(() => {
const el = ref.current;
if (el) {
observer.observe(el);
diff --git a/src/components/VirtualTable/TableHead.tsx b/src/components/VirtualTable/TableHead.tsx
index 06e5340c3b..e477206fc6 100644
--- a/src/components/VirtualTable/TableHead.tsx
+++ b/src/components/VirtualTable/TableHead.tsx
@@ -1,11 +1,10 @@
-import {useCallback, useEffect, useMemo, useRef, useState} from 'react';
+import React from 'react';
import type {
HandleTableColumnsResize,
TableColumnsWidthSetup,
} from '../../utils/hooks/useTableResize';
-import type {Column, OnSort, SortOrderType, SortParams} from './types';
import {
ASCENDING,
DEFAULT_RESIZEABLE,
@@ -14,6 +13,7 @@ import {
DESCENDING,
} from './constants';
import {b} from './shared';
+import type {Column, OnSort, SortOrderType, SortParams} from './types';
const COLUMN_NAME_HTML_ATTRIBUTE = 'data-columnname';
@@ -70,9 +70,9 @@ export const TableHeadCell = ({
onCellMount,
onCellUnMount,
}: TableHeadCellProps) => {
- const cellWrapperRef = useRef(null);
+ const cellWrapperRef = React.useRef(null);
- useEffect(() => {
+ React.useEffect(() => {
const cellWrapper = cellWrapperRef.current;
if (cellWrapper) {
onCellMount?.(cellWrapper);
@@ -138,11 +138,11 @@ export const TableHead = ({
defaultSortOrder = DEFAULT_SORT_ORDER,
rowHeight = DEFAULT_TABLE_ROW_HEIGHT,
}: TableHeadProps) => {
- const [sortParams, setSortParams] = useState({});
+ const [sortParams, setSortParams] = React.useState({});
const isTableResizeable = Boolean(onColumnsResize);
- const resizeObserver: ResizeObserver | undefined = useMemo(() => {
+ const resizeObserver: ResizeObserver | undefined = React.useMemo(() => {
if (!isTableResizeable) {
return undefined;
}
@@ -159,13 +159,13 @@ export const TableHead = ({
});
}, [onColumnsResize, isTableResizeable]);
- const handleCellMount = useCallback(
+ const handleCellMount = React.useCallback(
(element: Element) => {
resizeObserver?.observe(element);
},
[resizeObserver],
);
- const handleCellUnMount = useCallback(
+ const handleCellUnMount = React.useCallback(
(element: Element) => {
resizeObserver?.unobserve(element);
},
@@ -242,9 +242,9 @@ export const TableHead = ({
};
return (
- <>
+
{renderTableColGroups()}
{renderTableHead()}
- >
+
);
};
diff --git a/src/components/VirtualTable/TableRow.tsx b/src/components/VirtualTable/TableRow.tsx
index b9aa717818..7d80c68573 100644
--- a/src/components/VirtualTable/TableRow.tsx
+++ b/src/components/VirtualTable/TableRow.tsx
@@ -1,16 +1,14 @@
-import {type ReactNode} from 'react';
-
import {Skeleton} from '@gravity-ui/uikit';
-import type {AlignType, Column, GetRowClassName} from './types';
import {DEFAULT_ALIGN} from './constants';
import {b} from './shared';
+import type {AlignType, Column, GetRowClassName} from './types';
interface TableCellProps {
height: number;
width: number;
align?: AlignType;
- children: ReactNode;
+ children: React.ReactNode;
className?: string;
}
@@ -90,7 +88,7 @@ export const TableRow = ({row, index, columns, getRowClassName, height}: Tab
interface EmptyTableRowProps {
columns: Column[];
- children?: ReactNode;
+ children?: React.ReactNode;
}
export const EmptyTableRow = ({columns, children}: EmptyTableRowProps) => {
diff --git a/src/components/VirtualTable/VirtualTable.tsx b/src/components/VirtualTable/VirtualTable.tsx
index c126188401..48beca0705 100644
--- a/src/components/VirtualTable/VirtualTable.tsx
+++ b/src/components/VirtualTable/VirtualTable.tsx
@@ -1,25 +1,16 @@
-import {useState, useReducer, useRef, useCallback, useEffect} from 'react';
-
-import type {HandleTableColumnsResize} from '../../utils/hooks/useTableResize';
+import React from 'react';
import type {IResponseError} from '../../types/api/error';
import {getArray} from '../../utils';
-
-import {TableWithControlsLayout} from '../TableWithControlsLayout/TableWithControlsLayout';
+import type {HandleTableColumnsResize} from '../../utils/hooks/useTableResize';
import {ResponseError} from '../Errors/ResponseError';
+import {TableWithControlsLayout} from '../TableWithControlsLayout/TableWithControlsLayout';
-import type {
- Column,
- OnSort,
- FetchData,
- SortParams,
- RenderControls,
- OnEntry,
- OnLeave,
- GetRowClassName,
- RenderEmptyDataMessage,
- RenderErrorMessage,
-} from './types';
+import {TableChunk} from './TableChunk';
+import {TableHead} from './TableHead';
+import {EmptyTableRow} from './TableRow';
+import {DEFAULT_REQUEST_TIMEOUT, DEFAULT_TABLE_ROW_HEIGHT} from './constants';
+import i18n from './i18n';
import {
createVirtualTableReducer,
initChunk,
@@ -29,13 +20,20 @@ import {
setChunkError,
setChunkLoading,
} from './reducer';
-import {DEFAULT_REQUEST_TIMEOUT, DEFAULT_TABLE_ROW_HEIGHT} from './constants';
-import {TableHead} from './TableHead';
-import {TableChunk} from './TableChunk';
-import {EmptyTableRow} from './TableRow';
-import {useIntersectionObserver} from './useIntersectionObserver';
-import i18n from './i18n';
import {b} from './shared';
+import type {
+ Column,
+ FetchData,
+ GetRowClassName,
+ OnEntry,
+ OnLeave,
+ OnSort,
+ RenderControls,
+ RenderEmptyDataMessage,
+ RenderErrorMessage,
+ SortParams,
+} from './types';
+import {useIntersectionObserver} from './useIntersectionObserver';
import './VirtualTable.scss';
@@ -70,21 +68,21 @@ export const VirtualTable = ({
renderErrorMessage,
dependencyArray,
}: VirtualTableProps) => {
- const inited = useRef(false);
- const tableContainer = useRef(null);
+ const inited = React.useRef(false);
+ const tableContainer = React.useRef(null);
- const [state, dispatch] = useReducer(createVirtualTableReducer(), {});
+ const [state, dispatch] = React.useReducer(createVirtualTableReducer(), {});
- const [sortParams, setSortParams] = useState(initialSortParams);
+ const [sortParams, setSortParams] = React.useState(initialSortParams);
- const [totalEntities, setTotalEntities] = useState(limit);
- const [foundEntities, setFoundEntities] = useState(0);
+ const [totalEntities, setTotalEntities] = React.useState(limit);
+ const [foundEntities, setFoundEntities] = React.useState(0);
- const [error, setError] = useState();
+ const [error, setError] = React.useState();
- const pendingRequests = useRef>>({});
+ const pendingRequests = React.useRef>>({});
- const fetchChunkData = useCallback(
+ const fetchChunkData = React.useCallback(
async (id: string) => {
dispatch(setChunkLoading(id));
@@ -122,11 +120,11 @@ export const VirtualTable = ({
[fetchData, limit, sortParams],
);
- const onEntry = useCallback((id) => {
+ const onEntry = React.useCallback((id) => {
dispatch(initChunk(id));
}, []);
- const onLeave = useCallback((id) => {
+ const onLeave = React.useCallback((id) => {
dispatch(removeChunk(id));
// If there is a pending request for the removed chunk, cancel it
@@ -139,7 +137,7 @@ export const VirtualTable = ({
}, []);
// Cancel all pending requests on component unmount
- useEffect(() => {
+ React.useEffect(() => {
return () => {
Object.values(pendingRequests.current).forEach((timer) => {
window.clearTimeout(timer);
@@ -151,7 +149,7 @@ export const VirtualTable = ({
// Load chunks if they become active
// This mecanism helps to set chunk active state from different sources, but load data only once
// Only currently active chunks should be in state so iteration by the whole state shouldn't be a problem
- useEffect(() => {
+ React.useEffect(() => {
for (const id of Object.keys(state)) {
const chunk = state[Number(id)];
@@ -162,7 +160,7 @@ export const VirtualTable = ({
}, [fetchChunkData, state]);
// Reset table on filters change
- useEffect(() => {
+ React.useEffect(() => {
// Reset counts, so table unmount unneeded chunks
setTotalEntities(limit);
setFoundEntities(0);
diff --git a/src/components/VirtualTable/i18n/index.ts b/src/components/VirtualTable/i18n/index.ts
index a1da51ba0c..3cae5eeb32 100644
--- a/src/components/VirtualTable/i18n/index.ts
+++ b/src/components/VirtualTable/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../utils/i18n';
+import {registerKeysets} from '../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-virtual-table';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/components/VirtualTable/reducer.ts b/src/components/VirtualTable/reducer.ts
index 2206187914..d651e2c8ea 100644
--- a/src/components/VirtualTable/reducer.ts
+++ b/src/components/VirtualTable/reducer.ts
@@ -1,5 +1,3 @@
-import type {Reducer} from 'react';
-
import type {IResponseError} from '../../types/api/error';
import type {Chunk} from './types';
@@ -73,7 +71,7 @@ type VirtualTableAction =
// Reducer wrapped in additional function to pass generic type
export const createVirtualTableReducer =
- (): Reducer, VirtualTableAction> =>
+ (): React.Reducer, VirtualTableAction> =>
(state, action) => {
switch (action.type) {
case SET_CHUNK_DATA: {
diff --git a/src/components/VirtualTable/shared.ts b/src/components/VirtualTable/shared.ts
index 3471df3704..e3f9fa8333 100644
--- a/src/components/VirtualTable/shared.ts
+++ b/src/components/VirtualTable/shared.ts
@@ -1,3 +1,3 @@
-import cn from 'bem-cn-lite';
+import {cn} from '../../utils/cn';
export const b = cn('ydb-virtual-table');
diff --git a/src/components/VirtualTable/types.ts b/src/components/VirtualTable/types.ts
index e129c84fa4..5f6d5a82ae 100644
--- a/src/components/VirtualTable/types.ts
+++ b/src/components/VirtualTable/types.ts
@@ -1,8 +1,6 @@
-import type {ReactNode} from 'react';
-
import type {IResponseError} from '../../types/api/error';
-import {ASCENDING, CENTER, DESCENDING, LEFT, RIGHT} from './constants';
+import type {ASCENDING, CENTER, DESCENDING, LEFT, RIGHT} from './constants';
export interface Chunk {
active: boolean;
@@ -25,11 +23,11 @@ export type OnSort = (params: SortParams) => void;
export interface Column {
name: string;
- header?: ReactNode;
+ header?: React.ReactNode;
className?: string;
sortable?: boolean;
resizeable?: boolean;
- render: (props: {row: T; index: number}) => ReactNode;
+ render: (props: {row: T; index: number}) => React.ReactNode;
width: number;
align: AlignType;
}
@@ -54,8 +52,8 @@ interface ControlsParams {
inited: boolean;
}
-export type RenderControls = (params: ControlsParams) => ReactNode;
-export type RenderEmptyDataMessage = () => ReactNode;
-export type RenderErrorMessage = (error: IResponseError) => ReactNode;
+export type RenderControls = (params: ControlsParams) => React.ReactNode;
+export type RenderEmptyDataMessage = () => React.ReactNode;
+export type RenderErrorMessage = (error: IResponseError) => React.ReactNode;
export type GetRowClassName = (row: T) => string | undefined;
diff --git a/src/components/VirtualTable/useIntersectionObserver.ts b/src/components/VirtualTable/useIntersectionObserver.ts
index 2913f282d1..af987c1ae8 100644
--- a/src/components/VirtualTable/useIntersectionObserver.ts
+++ b/src/components/VirtualTable/useIntersectionObserver.ts
@@ -1,7 +1,7 @@
-import {useEffect, useRef} from 'react';
+import React from 'react';
-import type {OnEntry, OnLeave} from './types';
import {DEFAULT_INTERSECTION_OBSERVER_MARGIN} from './constants';
+import type {OnEntry, OnLeave} from './types';
interface UseIntersectionObserverProps {
onEntry: OnEntry;
@@ -15,9 +15,9 @@ export const useIntersectionObserver = ({
onLeave,
parentContainer,
}: UseIntersectionObserverProps) => {
- const observer = useRef();
+ const observer = React.useRef();
- useEffect(() => {
+ React.useEffect(() => {
const callback = (entries: IntersectionObserverEntry[]) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
diff --git a/src/components/slots/SlotMap.ts b/src/components/slots/SlotMap.ts
index 98ca4e5e93..468aa78274 100644
--- a/src/components/slots/SlotMap.ts
+++ b/src/components/slots/SlotMap.ts
@@ -1,7 +1,7 @@
import React from 'react';
-import {isSlotComponent, isSlotElement} from './utils';
import type {SlotComponent, SlotItem} from './types';
+import {isSlotComponent, isSlotElement} from './utils';
export class SlotMap {
readonly children?: React.ReactNode = null;
diff --git a/src/components/slots/types.ts b/src/components/slots/types.ts
index e2c8257f2c..cf44ae655d 100644
--- a/src/components/slots/types.ts
+++ b/src/components/slots/types.ts
@@ -1,5 +1,5 @@
export interface SlotComponent
- extends React.FC> {
+ extends React.FC}> {
/**
* @internal
*/
@@ -16,5 +16,5 @@ export interface SlotItem {
type ExtractChildrenType = Props extends {children: infer Children}
? Children
: Props extends {children?: infer Children}
- ? Children | undefined
- : never;
+ ? Children | undefined
+ : never;
diff --git a/src/components/slots/utils.ts b/src/components/slots/utils.ts
index 775b610884..f1acada7aa 100644
--- a/src/components/slots/utils.ts
+++ b/src/components/slots/utils.ts
@@ -4,7 +4,7 @@ import type {SlotComponent} from './types';
export function isSlotElement(
node: React.ReactNode,
-): node is React.ReactElement
> & React.RefAttributes {
+): node is React.ReactElement> & {ref?: React.Ref} {
return React.isValidElement(node) && isSlotComponent(node.type);
}
diff --git a/src/containers/App/App.scss b/src/containers/App/App.scss
index 58f586da42..d806b96fc3 100644
--- a/src/containers/App/App.scss
+++ b/src/containers/App/App.scss
@@ -9,7 +9,7 @@
font-variant-numeric: tabular-nums;
}
-.yc-select-popup__tick-icon {
+.g-select-popup__tick-icon {
// this is a local fix, remove after the refactoring
box-sizing: content-box;
}
@@ -45,11 +45,11 @@ body,
--ydb-color-status-black: var(--g-color-base-misc-heavy);
}
-:is(#tab, .yc-tabs-item_active .yc-tabs-item__title) {
+:is(#tab, .g-tabs-item_active .g-tabs-item__title) {
color: var(--g-color-text-primary) !important;
}
-:is(#tab, .yc-tabs-item__title) {
+:is(#tab, .g-tabs-item__title) {
color: var(--g-color-text-secondary);
}
@@ -131,7 +131,7 @@ body,
background: var(--ydb-data-table-color-hover);
}
-.yc-table-column-setup__item {
+.g-table-column-setup__item {
/* stylelint-disable-next-line declaration-no-important*/
padding: 0 8px 0 32px !important;
/* stylelint-disable-next-line declaration-no-important*/
@@ -142,6 +142,6 @@ body,
font-family: 'Rubik', sans-serif;
}
-.yc-popup {
+.g-popup {
max-width: 500px;
}
diff --git a/src/containers/App/App.tsx b/src/containers/App/App.tsx
index 666b2ca677..9c316531a8 100644
--- a/src/containers/App/App.tsx
+++ b/src/containers/App/App.tsx
@@ -1,20 +1,20 @@
import React from 'react';
-import {connect} from 'react-redux';
+
+import type {Store} from '@reduxjs/toolkit';
+import type {History} from 'history';
import {Helmet} from 'react-helmet-async';
+import {connect} from 'react-redux';
-import ContentWrapper, {Content} from './Content';
-import ReduxTooltip from '../ReduxTooltip/ReduxTooltip';
+import {ErrorBoundary} from '../../components/ErrorBoundary/ErrorBoundary';
+import type {RootState} from '../../store';
import AppIcons from '../AppIcons/AppIcons';
import {Navigation} from '../AsideNavigation/Navigation';
-
-import {ErrorBoundary} from '../../components/ErrorBoundary/ErrorBoundary';
+import ReduxTooltip from '../ReduxTooltip/ReduxTooltip';
import {settings} from '../UserSettings/settings';
-import {Providers} from './Providers';
-
-import type {Store} from '@reduxjs/toolkit';
-import type {History} from 'history';
import type {YDBEmbeddedUISettings} from '../UserSettings/settings';
-import type {RootState} from '../../store';
+
+import ContentWrapper, {Content} from './Content';
+import {Providers} from './Providers';
import './App.scss';
diff --git a/src/containers/App/Content.tsx b/src/containers/App/Content.tsx
index bfb79a7497..6382561a22 100644
--- a/src/containers/App/Content.tsx
+++ b/src/containers/App/Content.tsx
@@ -1,45 +1,45 @@
import React from 'react';
-import {Switch, Route, Redirect, RedirectProps} from 'react-router-dom';
-import cn from 'bem-cn-lite';
-import {connect} from 'react-redux';
-import routes from '../../routes';
+import {connect, shallowEqual} from 'react-redux';
+import type {RedirectProps} from 'react-router-dom';
+import {Redirect, Route, Switch} from 'react-router-dom';
-import {Clusters} from '../Clusters/Clusters';
+import {useSlots} from '../../components/slots';
+import type {SlotMap} from '../../components/slots/SlotMap';
+import type {SlotComponent} from '../../components/slots/types';
+import routes from '../../routes';
+import type {RootState} from '../../store';
+import {getUser} from '../../store/reducers/authentication/authentication';
+import {getNodesList} from '../../store/reducers/nodesList';
+import {cn} from '../../utils/cn';
+import {useTypedDispatch, useTypedSelector} from '../../utils/hooks';
+import Authentication from '../Authentication/Authentication';
import Cluster from '../Cluster/Cluster';
-import Tenant from '../Tenant/Tenant';
+import {getClusterPath} from '../Cluster/utils';
+import {Clusters} from '../Clusters/Clusters';
+import Header from '../Header/Header';
+import type {RawBreadcrumbItem} from '../Header/breadcrumbs';
import Node from '../Node/Node';
import {PDiskPage} from '../PDiskPage/PDiskPage';
-import {VDiskPage} from '../VDiskPage/VDiskPage';
import {Tablet} from '../Tablet';
import TabletsFilters from '../TabletsFilters/TabletsFilters';
-import Header from '../Header/Header';
-import Authentication from '../Authentication/Authentication';
+import Tenant from '../Tenant/Tenant';
+import {VDiskPage} from '../VDiskPage/VDiskPage';
-import {getUser} from '../../store/reducers/authentication/authentication';
-import {getNodesList} from '../../store/reducers/nodesList';
-import {getClusterPath} from '../Cluster/utils';
-import {useSlots} from '../../components/slots';
-import {useTypedSelector, useTypedDispatch} from '../../utils/hooks';
import {
ClusterSlot,
ClustersSlot,
NodeSlot,
PDiskPageSlot,
- VDiskPageSlot,
RedirectSlot,
RoutesSlot,
TabletSlot,
TabletsFiltersSlot,
TenantSlot,
+ VDiskPageSlot,
} from './appSlots';
-
-import type {SlotComponent} from '../../components/slots/types';
-import type {SlotMap} from '../../components/slots/SlotMap';
-import type {RawBreadcrumbItem} from '../Header/breadcrumbs';
-import type {RootState} from '../../store';
-
import i18n from './i18n';
+
import './App.scss';
const b = cn('app');
@@ -160,10 +160,13 @@ export function Content(props: ContentProps) {
function GetUser() {
const dispatch = useTypedDispatch();
- const {isAuthenticated, isInternalUser} = useTypedSelector((state) => ({
- isAuthenticated: state.authentication.isAuthenticated,
- isInternalUser: Boolean(state.authentication.user),
- }));
+ const {isAuthenticated, isInternalUser} = useTypedSelector(
+ (state) => ({
+ isAuthenticated: state.authentication.isAuthenticated,
+ isInternalUser: Boolean(state.authentication.user),
+ }),
+ shallowEqual,
+ );
React.useEffect(() => {
if (isAuthenticated && !isInternalUser) {
diff --git a/src/containers/App/Providers.tsx b/src/containers/App/Providers.tsx
index 640fffdb52..85ea859df4 100644
--- a/src/containers/App/Providers.tsx
+++ b/src/containers/App/Providers.tsx
@@ -1,19 +1,19 @@
import React from 'react';
+
+import {ThemeProvider} from '@gravity-ui/uikit';
+import type {Store} from '@reduxjs/toolkit';
+import type {History} from 'history';
+import {HelmetProvider} from 'react-helmet-async';
import {Provider} from 'react-redux';
import {Router} from 'react-router';
import {QueryParamProvider} from 'use-query-params';
import {ReactRouter5Adapter} from 'use-query-params/adapters/react-router-5';
-import {ThemeProvider} from '@gravity-ui/uikit';
-import {HelmetProvider} from 'react-helmet-async';
import {ComponentsProvider} from '../../components/ComponentsProvider/ComponentsProvider';
import {componentsRegistry as defaultComponentsRegistry} from '../../components/ComponentsProvider/componentsRegistry';
-import {useSetting} from '../../utils/hooks';
-import {THEME_KEY} from '../../utils/constants';
-
-import type {Store} from '@reduxjs/toolkit';
-import type {History} from 'history';
import type {ComponentsRegistry} from '../../components/ComponentsProvider/componentsRegistry';
+import {THEME_KEY} from '../../utils/constants';
+import {useSetting} from '../../utils/hooks';
interface ProvidersProps {
store: Store;
diff --git a/src/containers/App/appSlots.tsx b/src/containers/App/appSlots.tsx
index 6c591f22ee..7161f7e4b6 100644
--- a/src/containers/App/appSlots.tsx
+++ b/src/containers/App/appSlots.tsx
@@ -1,14 +1,14 @@
-import {createSlot} from '../../components/slots';
-
import type {RedirectProps, RouteComponentProps} from 'react-router';
+
+import {createSlot} from '../../components/slots';
import type Cluster from '../Cluster/Cluster';
import type {Clusters} from '../Clusters/Clusters';
import type Node from '../Node/Node';
import type {PDiskPage} from '../PDiskPage/PDiskPage';
-import type {VDiskPage} from '../VDiskPage/VDiskPage';
import type {Tablet} from '../Tablet';
import type TabletsFilters from '../TabletsFilters/TabletsFilters';
import type Tenant from '../Tenant/Tenant';
+import type {VDiskPage} from '../VDiskPage/VDiskPage';
export const ClustersSlot = createSlot<{
children:
@@ -51,5 +51,5 @@ export const TabletsFiltersSlot = createSlot<{
| ((props: {component: typeof TabletsFilters} & RouteComponentProps) => React.ReactNode);
}>('tabletsFilters');
-export const RoutesSlot = createSlot('routes');
+export const RoutesSlot = createSlot<{children: React.ReactNode}>('routes');
export const RedirectSlot = createSlot('redirect');
diff --git a/src/containers/App/i18n/index.ts b/src/containers/App/i18n/index.ts
index 94b83b0685..ae8a8fc8df 100644
--- a/src/containers/App/i18n/index.ts
+++ b/src/containers/App/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../utils/i18n';
+import {registerKeysets} from '../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-app-content';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/containers/AppWithClusters/AppWithClusters.tsx b/src/containers/AppWithClusters/AppWithClusters.tsx
index 2141dce1bb..84d8d24ab3 100644
--- a/src/containers/AppWithClusters/AppWithClusters.tsx
+++ b/src/containers/AppWithClusters/AppWithClusters.tsx
@@ -1,22 +1,22 @@
-import {App, AppSlots} from '../App';
+import React from 'react';
-import type {History} from 'history';
import type {Store} from '@reduxjs/toolkit';
+import type {History} from 'history';
+import {USE_CLUSTER_BALANCER_AS_BACKEND_KEY} from '../../utils/constants';
import type {GetMonitoringClusterLink, GetMonitoringLink} from '../../utils/monitoring';
-
import {
- getMonitoringLink as getMonitoringLinkDefault,
getMonitoringClusterLink as getMonitoringClusterLinkDefault,
+ getMonitoringLink as getMonitoringLinkDefault,
} from '../../utils/monitoring';
+import {App, AppSlots} from '../App';
+import type {YDBEmbeddedUISettings} from '../UserSettings/settings';
+import {settings} from '../UserSettings/settings';
+
import {ExtendedCluster} from './ExtendedCluster/ExtendedCluster';
import {ExtendedNode} from './ExtendedNode/ExtendedNode';
import {ExtendedTenant} from './ExtendedTenant/ExtendedTenant';
-import {YDBEmbeddedUISettings, settings} from '../UserSettings/settings';
-import {USE_CLUSTER_BALANCER_AS_BACKEND_KEY} from '../../utils/constants';
-
import i18n from './i18n';
-import React from 'react';
export interface AppWithClustersProps {
store: Store;
diff --git a/src/containers/AppWithClusters/ExtendedCluster/ExtendedCluster.tsx b/src/containers/AppWithClusters/ExtendedCluster/ExtendedCluster.tsx
index b284c16354..8fdc6ebb1f 100644
--- a/src/containers/AppWithClusters/ExtendedCluster/ExtendedCluster.tsx
+++ b/src/containers/AppWithClusters/ExtendedCluster/ExtendedCluster.tsx
@@ -1,26 +1,24 @@
-import block from 'bem-cn-lite';
-
import {ClipboardButton} from '@gravity-ui/uikit';
-import {MonitoringButton} from '../../../components/MonitoringButton/MonitoringButton';
-import type {ETenantType} from '../../../types/api/tenant';
+import {MonitoringButton} from '../../../components/MonitoringButton/MonitoringButton';
import type {
AdditionalClusterProps,
AdditionalTenantsProps,
AdditionalVersionsProps,
} from '../../../types/additionalProps';
-import type Cluster from '../../Cluster/Cluster';
import type {MetaClusterVersion} from '../../../types/api/meta';
-import type {GetMonitoringLink, GetMonitoringClusterLink} from '../../../utils/monitoring';
-
+import type {ETenantType} from '../../../types/api/tenant';
import {getVersionColors, getVersionMap} from '../../../utils/clusterVersionColors';
-import {removeViewerPathname, getCleanBalancerValue} from '../../../utils/parseBalancer';
+import {cn} from '../../../utils/cn';
+import type {GetMonitoringClusterLink, GetMonitoringLink} from '../../../utils/monitoring';
+import {getCleanBalancerValue, removeViewerPathname} from '../../../utils/parseBalancer';
import {getBackendFromNodeHost} from '../../../utils/prepareBackend';
+import type Cluster from '../../Cluster/Cluster';
import {useClusterData} from '../useClusterData';
import './ExtendedCluster.scss';
-const b = block('extended-cluster');
+const b = cn('extended-cluster');
const getAdditionalBalancerInfo = (balancer: string) => {
const cleanedValue = getCleanBalancerValue(balancer);
@@ -30,7 +28,7 @@ const getAdditionalBalancerInfo = (balancer: string) => {
value: (
{cleanedValue}
-
+
),
};
diff --git a/src/containers/AppWithClusters/ExtendedNode/ExtendedNode.tsx b/src/containers/AppWithClusters/ExtendedNode/ExtendedNode.tsx
index 48b19cccc3..aae4afaee9 100644
--- a/src/containers/AppWithClusters/ExtendedNode/ExtendedNode.tsx
+++ b/src/containers/AppWithClusters/ExtendedNode/ExtendedNode.tsx
@@ -1,6 +1,5 @@
-import {useClusterData} from '../useClusterData';
-
import type Node from '../../Node/Node';
+import {useClusterData} from '../useClusterData';
export function ExtendedNode({component: NodeComponent}: {component: typeof Node}) {
const {additionalNodesProps} = useClusterData();
diff --git a/src/containers/AppWithClusters/ExtendedTenant/ExtendedTenant.tsx b/src/containers/AppWithClusters/ExtendedTenant/ExtendedTenant.tsx
index db0e4f1b34..f743c6d56a 100644
--- a/src/containers/AppWithClusters/ExtendedTenant/ExtendedTenant.tsx
+++ b/src/containers/AppWithClusters/ExtendedTenant/ExtendedTenant.tsx
@@ -1,10 +1,8 @@
-import type Tenant from '../../Tenant/Tenant';
+import {MonitoringButton} from '../../../components/MonitoringButton/MonitoringButton';
import type {GetMonitoringLink} from '../../../utils/monitoring';
-
+import type Tenant from '../../Tenant/Tenant';
import {useClusterData} from '../useClusterData';
-import {MonitoringButton} from '../../../components/MonitoringButton/MonitoringButton';
-
export interface ExtendedTenantProps {
component: typeof Tenant;
getMonitoringLink?: GetMonitoringLink;
diff --git a/src/containers/AppWithClusters/i18n/index.ts b/src/containers/AppWithClusters/i18n/index.ts
index bb1695541c..acc497755b 100644
--- a/src/containers/AppWithClusters/i18n/index.ts
+++ b/src/containers/AppWithClusters/i18n/index.ts
@@ -1,11 +1,8 @@
-import {Lang, i18n} from '../../../utils/i18n';
+import {registerKeysets} from '../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-extended-user-settings';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/containers/AppWithClusters/useClusterData.ts b/src/containers/AppWithClusters/useClusterData.ts
index 08c2138500..e4c80aa09b 100644
--- a/src/containers/AppWithClusters/useClusterData.ts
+++ b/src/containers/AppWithClusters/useClusterData.ts
@@ -1,10 +1,11 @@
import {useLocation} from 'react-router';
-import {useClustersList} from '../Clusters/useClustersList';
+
import {parseQuery} from '../../routes';
-import {useSetting, useTypedSelector} from '../../utils/hooks';
import {selectClusterInfo} from '../../store/reducers/clusters/selectors';
-import {USE_CLUSTER_BALANCER_AS_BACKEND_KEY} from '../../utils/constants';
import {getAdditionalNodesProps} from '../../utils/additionalProps';
+import {USE_CLUSTER_BALANCER_AS_BACKEND_KEY} from '../../utils/constants';
+import {useSetting, useTypedSelector} from '../../utils/hooks';
+import {useClustersList} from '../Clusters/useClustersList';
export function useClusterData() {
useClustersList();
diff --git a/src/containers/AsideNavigation/AsideNavigation.tsx b/src/containers/AsideNavigation/AsideNavigation.tsx
index 3acdc1d67a..58bcdab308 100644
--- a/src/containers/AsideNavigation/AsideNavigation.tsx
+++ b/src/containers/AsideNavigation/AsideNavigation.tsx
@@ -1,19 +1,21 @@
-import React, {useState} from 'react';
+import React from 'react';
+
+import type {MenuItem} from '@gravity-ui/navigation';
+import {AsideHeader, FooterItem} from '@gravity-ui/navigation';
import {useHistory} from 'react-router-dom';
-import cn from 'bem-cn-lite';
-import {AsideHeader, FooterItem, MenuItem} from '@gravity-ui/navigation';
+import {cn} from '../../utils/cn';
+import {ASIDE_HEADER_COMPACT_KEY} from '../../utils/constants';
+import {useSetting, useTypedSelector} from '../../utils/hooks';
+
+import i18n from './i18n';
-import ydbLogoIcon from '../../assets/icons/ydb.svg';
-import userSecret from '../../assets/icons/user-secret.svg';
-import userChecked from '../../assets/icons/user-check.svg';
import settingsIcon from '../../assets/icons/settings.svg';
import supportIcon from '../../assets/icons/support.svg';
+import userChecked from '../../assets/icons/user-check.svg';
+import userSecret from '../../assets/icons/user-secret.svg';
+import ydbLogoIcon from '../../assets/icons/ydb.svg';
-import {useSetting, useTypedSelector} from '../../utils/hooks';
-import {ASIDE_HEADER_COMPACT_KEY} from '../../utils/constants';
-
-import i18n from './i18n';
import './AsideNavigation.scss';
const b = cn('kv-navigation');
@@ -28,7 +30,7 @@ interface YdbUserDropdownProps {
}
function YdbUserDropdown({isCompact, popupAnchor, ydbUser, children}: YdbUserDropdownProps) {
- const [isUserDropdownVisible, setIsUserDropdownVisible] = useState(false);
+ const [isUserDropdownVisible, setIsUserDropdownVisible] = React.useState(false);
const iconData = ydbUser.login ? userChecked : userSecret;
return (
();
+ const [visiblePanel, setVisiblePanel] = React.useState();
const {user: ydbUser} = useTypedSelector((state) => state.authentication);
const [compact, setIsCompact] = useSetting(ASIDE_HEADER_COMPACT_KEY);
diff --git a/src/containers/AsideNavigation/Navigation.tsx b/src/containers/AsideNavigation/Navigation.tsx
index 45891542bd..9ef9d55906 100644
--- a/src/containers/AsideNavigation/Navigation.tsx
+++ b/src/containers/AsideNavigation/Navigation.tsx
@@ -1,10 +1,9 @@
-import {YdbInternalUser} from './YdbInternalUser/YdbInternalUser';
+import {useComponent} from '../../components/ComponentsProvider/ComponentsProvider';
import {UserSettings} from '../UserSettings/UserSettings';
+import type {YDBEmbeddedUISettings} from '../UserSettings/settings';
+import {YdbInternalUser} from './YdbInternalUser/YdbInternalUser';
import {useNavigationMenuItems} from './useNavigationMenuItems';
-import {useComponent} from '../../components/ComponentsProvider/ComponentsProvider';
-
-import type {YDBEmbeddedUISettings} from '../UserSettings/settings';
interface NavigationProps {
userSettings?: YDBEmbeddedUISettings;
diff --git a/src/containers/AsideNavigation/YdbInternalUser/YdbInternalUser.tsx b/src/containers/AsideNavigation/YdbInternalUser/YdbInternalUser.tsx
index deb3557c21..a6c1505432 100644
--- a/src/containers/AsideNavigation/YdbInternalUser/YdbInternalUser.tsx
+++ b/src/containers/AsideNavigation/YdbInternalUser/YdbInternalUser.tsx
@@ -1,17 +1,15 @@
-import {useHistory} from 'react-router';
-
import {Button, Icon} from '@gravity-ui/uikit';
+import {useHistory} from 'react-router';
import routes, {createHref} from '../../../routes';
-import {useTypedSelector, useTypedDispatch} from '../../../utils/hooks';
import {logout} from '../../../store/reducers/authentication/authentication';
import {cn} from '../../../utils/cn';
+import {useTypedDispatch, useTypedSelector} from '../../../utils/hooks';
+import i18n from '../i18n';
import signOutIcon from '@gravity-ui/icons/svgs/arrow-right-from-square.svg';
import signInIcon from '@gravity-ui/icons/svgs/arrow-right-to-square.svg';
-import i18n from '../i18n';
-
import './YdbInternalUser.scss';
const b = cn('kv-ydb-internal-user');
diff --git a/src/containers/AsideNavigation/i18n/index.ts b/src/containers/AsideNavigation/i18n/index.ts
index 85ddaa753d..95323257a5 100644
--- a/src/containers/AsideNavigation/i18n/index.ts
+++ b/src/containers/AsideNavigation/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../utils/i18n';
+import {registerKeysets} from '../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-aside-navigation';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/containers/AsideNavigation/useNavigationMenuItems.ts b/src/containers/AsideNavigation/useNavigationMenuItems.ts
index 809cec45ea..da35c42af3 100644
--- a/src/containers/AsideNavigation/useNavigationMenuItems.ts
+++ b/src/containers/AsideNavigation/useNavigationMenuItems.ts
@@ -1,24 +1,24 @@
import React from 'react';
+
+import type {MenuItem as AsideHeaderMenuItem} from '@gravity-ui/navigation';
+import type {IconData} from '@gravity-ui/uikit';
import {useHistory, useLocation} from 'react-router';
-import {useSetting, useTypedSelector} from '../../utils/hooks';
import routes, {parseQuery} from '../../routes';
-import {getTenantPath} from '../Tenant/TenantPages';
-
import {TENANT_PAGE, TENANT_PAGES_IDS} from '../../store/reducers/tenant/constants';
import {TENANT_INITIAL_PAGE_KEY} from '../../utils/constants';
+import {useSetting, useTypedSelector} from '../../utils/hooks';
+import {getTenantPath} from '../Tenant/TenantPages';
-import type {MenuItem as AsideHeaderMenuItem} from '@gravity-ui/navigation';
+import i18n from './i18n';
-import terminalIcon from '@gravity-ui/icons/svgs/terminal.svg';
import pulseIcon from '@gravity-ui/icons/svgs/pulse.svg';
-
-import i18n from './i18n';
+import terminalIcon from '@gravity-ui/icons/svgs/terminal.svg';
interface MenuItem {
id: string;
title: string;
- icon: SVGIconData;
+ icon: IconData;
iconSize: string | number;
location: string;
locationKeys?: string[];
diff --git a/src/containers/Authentication/Authentication.scss b/src/containers/Authentication/Authentication.scss
index 894a3cb6e2..4d16cc346b 100644
--- a/src/containers/Authentication/Authentication.scss
+++ b/src/containers/Authentication/Authentication.scss
@@ -17,7 +17,7 @@
radial-gradient(at 110% 100%, rgba(0, 102, 255, 0.15) 20%, rgba(247, 247, 247, 0) 40%);
background-blend-mode: normal;
- .yc-text-input {
+ .g-text-input {
display: flex;
}
@@ -35,10 +35,10 @@
&__logo {
display: flex;
align-items: center;
+ gap: 8px;
font-size: 16px;
font-weight: 600;
- gap: 8px;
}
&__title {
@@ -70,7 +70,7 @@
width: 320px;
margin-bottom: 16px;
- .yc-text-input_state_error {
+ .g-text-input_state_error {
flex-direction: column;
}
}
diff --git a/src/containers/Authentication/Authentication.tsx b/src/containers/Authentication/Authentication.tsx
index 723ad95a5f..cb81a9b789 100644
--- a/src/containers/Authentication/Authentication.tsx
+++ b/src/containers/Authentication/Authentication.tsx
@@ -1,17 +1,17 @@
-import {KeyboardEvent, useEffect, useState} from 'react';
-import {useHistory, useLocation} from 'react-router';
-import cn from 'bem-cn-lite';
+import React from 'react';
-import {Button, TextInput, Icon, Link as ExternalLink} from '@gravity-ui/uikit';
+import {Button, Link as ExternalLink, Icon, TextInput} from '@gravity-ui/uikit';
+import {useHistory, useLocation} from 'react-router';
-import {authenticate} from '../../store/reducers/authentication/authentication';
-import {useTypedSelector, useTypedDispatch} from '../../utils/hooks';
import {parseQuery} from '../../routes';
+import {authenticate} from '../../store/reducers/authentication/authentication';
+import {cn} from '../../utils/cn';
+import {useTypedDispatch, useTypedSelector} from '../../utils/hooks';
-import ydbLogoIcon from '../../assets/icons/ydb.svg';
-import showIcon from '../../assets/icons/show.svg';
-import hideIcon from '../../assets/icons/hide.svg';
import closeIcon from '../../assets/icons/close.svg';
+import hideIcon from '../../assets/icons/hide.svg';
+import showIcon from '../../assets/icons/show.svg';
+import ydbLogoIcon from '../../assets/icons/ydb.svg';
import './Authentication.scss';
@@ -30,13 +30,13 @@ function Authentication({closable = false}: AuthenticationProps) {
const {error} = useTypedSelector((state) => state.authentication);
- const [login, setLogin] = useState('');
- const [pass, setPass] = useState('');
- const [loginError, setLoginError] = useState('');
- const [passwordError, setPasswordError] = useState('');
- const [showPassword, setShowPassword] = useState(false);
+ const [login, setLogin] = React.useState('');
+ const [pass, setPass] = React.useState('');
+ const [loginError, setLoginError] = React.useState('');
+ const [passwordError, setPasswordError] = React.useState('');
+ const [showPassword, setShowPassword] = React.useState(false);
- useEffect(() => {
+ React.useEffect(() => {
if (error?.data?.error?.includes('user')) {
setLoginError(error.data.error);
}
@@ -70,7 +70,7 @@ function Authentication({closable = false}: AuthenticationProps) {
});
};
- const onEnterClick = (e: KeyboardEvent) => {
+ const onEnterClick = (e: React.KeyboardEvent) => {
if (e.keyCode === 13) {
onLoginClick();
}
diff --git a/src/containers/Cluster/Cluster.tsx b/src/containers/Cluster/Cluster.tsx
index 06b5c6000d..c2d2523446 100644
--- a/src/containers/Cluster/Cluster.tsx
+++ b/src/containers/Cluster/Cluster.tsx
@@ -1,35 +1,34 @@
-import {useEffect, useMemo, useRef} from 'react';
-import {Redirect, Switch, Route, useLocation, useRouteMatch} from 'react-router';
-import {Helmet} from 'react-helmet-async';
-import cn from 'bem-cn-lite';
-import qs from 'qs';
+import React from 'react';
import {Skeleton, Tabs} from '@gravity-ui/uikit';
+import qs from 'qs';
+import {Helmet} from 'react-helmet-async';
+import {Redirect, Route, Switch, useLocation, useRouteMatch} from 'react-router';
+import {EntityStatus} from '../../components/EntityStatus/EntityStatus';
+import {InternalLink} from '../../components/InternalLink';
+import routes, {getLocationObjectFromHref} from '../../routes';
+import {getClusterInfo, updateDefaultClusterTab} from '../../store/reducers/cluster/cluster';
+import {getClusterNodes} from '../../store/reducers/clusterNodes/clusterNodes';
+import {setHeaderBreadcrumbs} from '../../store/reducers/header/header';
import type {
AdditionalClusterProps,
+ AdditionalNodesProps,
AdditionalTenantsProps,
AdditionalVersionsProps,
- AdditionalNodesProps,
} from '../../types/additionalProps';
-import routes, {getLocationObjectFromHref} from '../../routes';
-
-import {setHeaderBreadcrumbs} from '../../store/reducers/header/header';
-import {getClusterInfo, updateDefaultClusterTab} from '../../store/reducers/cluster/cluster';
-import {getClusterNodes} from '../../store/reducers/clusterNodes/clusterNodes';
+import {cn} from '../../utils/cn';
+import {CLUSTER_DEFAULT_TITLE} from '../../utils/constants';
+import {useAutofetcher, useTypedDispatch, useTypedSelector} from '../../utils/hooks';
import {parseNodesToVersionsValues, parseVersionsToVersionToColorMap} from '../../utils/versions';
-import {useAutofetcher, useTypedSelector, useTypedDispatch} from '../../utils/hooks';
-
-import {InternalLink} from '../../components/InternalLink';
-import {Tenants} from '../Tenants/Tenants';
-import {StorageWrapper} from '../Storage/StorageWrapper';
import {NodesWrapper} from '../Nodes/NodesWrapper';
+import {StorageWrapper} from '../Storage/StorageWrapper';
+import {Tenants} from '../Tenants/Tenants';
import {Versions} from '../Versions/Versions';
-import {EntityStatus} from '../../components/EntityStatus/EntityStatus';
-import {CLUSTER_DEFAULT_TITLE} from '../../utils/constants';
import {ClusterInfo} from './ClusterInfo/ClusterInfo';
-import {ClusterTab, clusterTabs, clusterTabsIds, getClusterPath, isClusterTab} from './utils';
+import type {ClusterTab} from './utils';
+import {clusterTabs, clusterTabsIds, getClusterPath, isClusterTab} from './utils';
import './Cluster.scss';
@@ -48,7 +47,7 @@ function Cluster({
additionalNodesProps,
additionalVersionsProps,
}: ClusterProps) {
- const container = useRef(null);
+ const container = React.useRef(null);
const dispatch = useTypedDispatch();
@@ -77,7 +76,7 @@ function Cluster({
const infoLoading = (clusterLoading && !clusterWasLoaded) || (nodesLoading && !nodesWasLoaded);
- useEffect(() => {
+ React.useEffect(() => {
dispatch(getClusterNodes());
}, [dispatch]);
@@ -87,18 +86,18 @@ function Cluster({
true,
);
- useEffect(() => {
+ React.useEffect(() => {
dispatch(setHeaderBreadcrumbs('cluster', {}));
}, [dispatch, Name]);
- const versionToColor = useMemo(() => {
+ const versionToColor = React.useMemo(() => {
if (additionalVersionsProps?.getVersionToColorMap) {
return additionalVersionsProps?.getVersionToColorMap();
}
return parseVersionsToVersionToColorMap(cluster?.Versions);
}, [additionalVersionsProps, cluster]);
- const versionsValues = useMemo(() => {
+ const versionsValues = React.useMemo(() => {
return parseNodesToVersionsValues(nodes, versionToColor);
}, [nodes, versionToColor]);
@@ -118,7 +117,10 @@ function Cluster({
};
const clusterTitle = cluster?.Name ?? clusterName ?? CLUSTER_DEFAULT_TITLE;
- const activeTab = useMemo(() => clusterTabs.find(({id}) => id === activeTabId), [activeTabId]);
+ const activeTab = React.useMemo(
+ () => clusterTabs.find(({id}) => id === activeTabId),
+ [activeTabId],
+ );
return (
@@ -228,7 +230,7 @@ function useClusterTab() {
activeTab = defaultTab;
}
- useEffect(() => {
+ React.useEffect(() => {
if (activeTab !== defaultTab) {
dispatch(updateDefaultClusterTab(activeTab));
}
diff --git a/src/containers/Cluster/ClusterInfo/ClusterInfo.scss b/src/containers/Cluster/ClusterInfo/ClusterInfo.scss
index a98be143b6..7511ad63f8 100644
--- a/src/containers/Cluster/ClusterInfo/ClusterInfo.scss
+++ b/src/containers/Cluster/ClusterInfo/ClusterInfo.scss
@@ -44,7 +44,6 @@
&__links {
display: flex;
flex-flow: row wrap;
-
gap: 12px;
}
diff --git a/src/containers/Cluster/ClusterInfo/ClusterInfo.tsx b/src/containers/Cluster/ClusterInfo/ClusterInfo.tsx
index 948d73428c..2d9a7795fe 100644
--- a/src/containers/Cluster/ClusterInfo/ClusterInfo.tsx
+++ b/src/containers/Cluster/ClusterInfo/ClusterInfo.tsx
@@ -1,29 +1,27 @@
-import block from 'bem-cn-lite';
-
-import {ProgressViewer} from '../../../components/ProgressViewer/ProgressViewer';
-import InfoViewer, {InfoViewerItem} from '../../../components/InfoViewer/InfoViewer';
-import {Tags} from '../../../components/Tags';
-import {Tablet} from '../../../components/Tablet';
-import {ResponseError} from '../../../components/Errors/ResponseError';
-import {LinkWithIcon} from '../../../components/LinkWithIcon/LinkWithIcon';
import {ContentWithPopup} from '../../../components/ContentWithPopup/ContentWithPopup';
+import {ResponseError} from '../../../components/Errors/ResponseError';
+import type {InfoViewerItem} from '../../../components/InfoViewer/InfoViewer';
+import InfoViewer from '../../../components/InfoViewer/InfoViewer';
import {InfoViewerSkeleton} from '../../../components/InfoViewerSkeleton/InfoViewerSkeleton';
-
-import type {IResponseError} from '../../../types/api/error';
-import type {AdditionalClusterProps, ClusterLink} from '../../../types/additionalProps';
-import type {VersionValue} from '../../../types/versions';
-import type {TClusterInfo} from '../../../types/api/cluster';
+import {LinkWithIcon} from '../../../components/LinkWithIcon/LinkWithIcon';
+import {ProgressViewer} from '../../../components/ProgressViewer/ProgressViewer';
+import {Tablet} from '../../../components/Tablet';
+import {Tags} from '../../../components/Tags';
import {backend, customBackend} from '../../../store';
-import {formatStorageValues} from '../../../utils/dataFormatters/dataFormatters';
-import {useTypedSelector} from '../../../utils/hooks';
-import {formatBytes, getSizeWithSignificantDigits} from '../../../utils/bytesParsers';
-import {DEVELOPER_UI_TITLE} from '../../../utils/constants';
import type {
ClusterGroupsStats,
DiskErasureGroupsStats,
DiskGroupsStats,
} from '../../../store/reducers/cluster/types';
-
+import type {AdditionalClusterProps, ClusterLink} from '../../../types/additionalProps';
+import type {TClusterInfo} from '../../../types/api/cluster';
+import type {IResponseError} from '../../../types/api/error';
+import type {VersionValue} from '../../../types/versions';
+import {formatBytes, getSizeWithSignificantDigits} from '../../../utils/bytesParsers';
+import {cn} from '../../../utils/cn';
+import {DEVELOPER_UI_TITLE} from '../../../utils/constants';
+import {formatStorageValues} from '../../../utils/dataFormatters/dataFormatters';
+import {useTypedSelector} from '../../../utils/hooks';
import {VersionsBar} from '../VersionsBar/VersionsBar';
import i18n from '../i18n';
@@ -31,7 +29,7 @@ import {compareTablets} from './utils';
import './ClusterInfo.scss';
-const b = block('cluster-info');
+const b = cn('cluster-info');
interface GroupsStatsPopupContentProps {
stats: DiskErasureGroupsStats;
diff --git a/src/containers/Cluster/ClusterInfo/utils.ts b/src/containers/Cluster/ClusterInfo/utils.ts
index 05237d008a..7a34e9f871 100644
--- a/src/containers/Cluster/ClusterInfo/utils.ts
+++ b/src/containers/Cluster/ClusterInfo/utils.ts
@@ -1,4 +1,5 @@
-import {TTabletStateInfo, EType} from '../../../types/api/tablet';
+import type {TTabletStateInfo} from '../../../types/api/tablet';
+import {EType} from '../../../types/api/tablet';
export const compareTablets = (tablet1: TTabletStateInfo, tablet2: TTabletStateInfo) => {
if (tablet1.Type === EType.TxAllocator) {
diff --git a/src/containers/Cluster/VersionsBar/VersionsBar.scss b/src/containers/Cluster/VersionsBar/VersionsBar.scss
index f1dbaddd33..df9a9a0c08 100644
--- a/src/containers/Cluster/VersionsBar/VersionsBar.scss
+++ b/src/containers/Cluster/VersionsBar/VersionsBar.scss
@@ -4,7 +4,7 @@
width: 600px;
- & .yc-progress {
+ & .g-progress {
width: 100%;
}
@@ -21,7 +21,7 @@
white-space: nowrap;
}
- & .yc-progress__stack {
+ & .g-progress__stack {
cursor: pointer;
}
}
diff --git a/src/containers/Cluster/VersionsBar/VersionsBar.tsx b/src/containers/Cluster/VersionsBar/VersionsBar.tsx
index 0a2755ff79..1458a3d689 100644
--- a/src/containers/Cluster/VersionsBar/VersionsBar.tsx
+++ b/src/containers/Cluster/VersionsBar/VersionsBar.tsx
@@ -1,12 +1,11 @@
-import block from 'bem-cn-lite';
-
import {Progress} from '@gravity-ui/uikit';
import type {VersionValue} from '../../../types/versions';
+import {cn} from '../../../utils/cn';
import './VersionsBar.scss';
-const b = block('ydb-cluster-versions-bar');
+const b = cn('ydb-cluster-versions-bar');
interface VersionsBarProps {
versionsValues?: VersionValue[];
diff --git a/src/containers/Cluster/i18n/index.ts b/src/containers/Cluster/i18n/index.ts
index 7f1d6b5ae7..758b317b3e 100644
--- a/src/containers/Cluster/i18n/index.ts
+++ b/src/containers/Cluster/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../utils/i18n';
+import {registerKeysets} from '../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-cluster';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/containers/Cluster/utils.tsx b/src/containers/Cluster/utils.tsx
index 3ea4c3816c..0350aeea96 100644
--- a/src/containers/Cluster/utils.tsx
+++ b/src/containers/Cluster/utils.tsx
@@ -1,5 +1,5 @@
-import type {ValueOf} from '../../types/common';
import routes, {createHref} from '../../routes';
+import type {ValueOf} from '../../types/common';
export const clusterTabsIds = {
overview: 'overview',
diff --git a/src/containers/ClusterModeGuard/ClusterModeGuard.tsx b/src/containers/ClusterModeGuard/ClusterModeGuard.tsx
index f3cd9ca613..bbb4876303 100644
--- a/src/containers/ClusterModeGuard/ClusterModeGuard.tsx
+++ b/src/containers/ClusterModeGuard/ClusterModeGuard.tsx
@@ -1,8 +1,9 @@
-import {ReactNode} from 'react';
+import React from 'react';
+
import {useTypedSelector} from '../../lib';
export interface ClusterModeGuardProps {
- children: ReactNode;
+ children: React.ReactNode;
mode: 'single' | 'multi';
}
@@ -11,5 +12,5 @@ export function ClusterModeGuard({children, mode}: ClusterModeGuardProps) {
mode === 'single' ? state.singleClusterMode : !state.singleClusterMode,
);
- return shouldRender ? <>{children}> : null;
+ return shouldRender ? {children} : null;
}
diff --git a/src/containers/Clusters/Clusters.scss b/src/containers/Clusters/Clusters.scss
index 3a0d20482d..1188219d11 100644
--- a/src/containers/Clusters/Clusters.scss
+++ b/src/containers/Clusters/Clusters.scss
@@ -81,7 +81,7 @@
word-break: break-all;
}
- & .yc-progress__item {
+ & .g-progress__item {
transition: none;
}
diff --git a/src/containers/Clusters/Clusters.tsx b/src/containers/Clusters/Clusters.tsx
index 7834863314..cd9e45376b 100644
--- a/src/containers/Clusters/Clusters.tsx
+++ b/src/containers/Clusters/Clusters.tsx
@@ -1,39 +1,38 @@
-import {useCallback, useMemo} from 'react';
-import {Helmet} from 'react-helmet-async';
+import React from 'react';
import DataTable from '@gravity-ui/react-data-table';
-import {TableColumnSetup, Select} from '@gravity-ui/uikit';
+import {Select, TableColumnSetup} from '@gravity-ui/uikit';
+import {Helmet} from 'react-helmet-async';
-import {Search} from '../../components/Search';
import {Loader} from '../../components/Loader';
-import {DEFAULT_TABLE_SETTINGS} from '../../utils/constants';
-import {useAutofetcher, useTypedSelector, useTypedDispatch} from '../../utils/hooks';
-
-import {fetchClustersList, changeClustersFilters} from '../../store/reducers/clusters/clusters';
+import {Search} from '../../components/Search';
+import {changeClustersFilters, fetchClustersList} from '../../store/reducers/clusters/clusters';
import {
+ selectClusterNameFilter,
+ selectClustersAggregation,
selectClustersList,
+ selectFilteredClusters,
selectLoadingFlag,
- selectClusterNameFilter,
- selectStatusFilter,
selectServiceFilter,
+ selectStatusFilter,
selectVersionFilter,
selectVersions,
- selectFilteredClusters,
- selectClustersAggregation,
} from '../../store/reducers/clusters/selectors';
+import {DEFAULT_TABLE_SETTINGS} from '../../utils/constants';
+import {useAutofetcher, useTypedDispatch, useTypedSelector} from '../../utils/hooks';
+import {ClustersStatistics} from './ClustersStatistics';
+import {CLUSTERS_COLUMNS} from './columns';
import {
+ CLUSTER_STATUSES,
COLUMNS_NAMES,
COLUMNS_TITLES,
- CLUSTER_STATUSES,
DEFAULT_COLUMNS,
SELECTED_COLUMNS_KEY,
} from './constants';
-import {ClustersStatistics} from './ClustersStatistics';
-import {CLUSTERS_COLUMNS} from './columns';
-import {useSelectedColumns} from './useSelectedColumns';
-import {b} from './shared';
import i18n from './i18n';
+import {b} from './shared';
+import {useSelectedColumns} from './useSelectedColumns';
import './Clusters.scss';
@@ -50,7 +49,7 @@ export function Clusters() {
const version = useTypedSelector(selectVersionFilter);
const versions = useTypedSelector(selectVersions);
- const fetchData = useCallback(() => {
+ const fetchData = React.useCallback(() => {
dispatch(fetchClustersList());
}, [dispatch]);
@@ -77,7 +76,7 @@ export function Clusters() {
[COLUMNS_NAMES.TITLE],
);
- const servicesToSelect = useMemo(() => {
+ const servicesToSelect = React.useMemo(() => {
const clustersServices = new Set();
clusters.forEach((cluster) => {
@@ -153,16 +152,14 @@ export function Clusters() {
/>
diff --git a/src/containers/Clusters/ClustersStatistics.tsx b/src/containers/Clusters/ClustersStatistics.tsx
index 21d961a18d..8cca6859d9 100644
--- a/src/containers/Clusters/ClustersStatistics.tsx
+++ b/src/containers/Clusters/ClustersStatistics.tsx
@@ -1,10 +1,9 @@
import {ProgressViewer} from '../../components/ProgressViewer/ProgressViewer';
-import {formatStorageValues} from '../../utils/dataFormatters/dataFormatters';
-
import type {ClusterDataAggregation} from '../../store/reducers/clusters/types';
+import {formatStorageValues} from '../../utils/dataFormatters/dataFormatters';
-import {b} from './shared';
import i18n from './i18n';
+import {b} from './shared';
interface ClustersStatisticsProps {
count: number;
diff --git a/src/containers/Clusters/columns.tsx b/src/containers/Clusters/columns.tsx
index e6920d600d..d303e865ac 100644
--- a/src/containers/Clusters/columns.tsx
+++ b/src/containers/Clusters/columns.tsx
@@ -1,18 +1,20 @@
-import DataTable, {type Column} from '@gravity-ui/react-data-table';
-import {Link as ExternalLink, Progress, ClipboardButton} from '@gravity-ui/uikit';
+import React from 'react';
+
import {HelpPopover} from '@gravity-ui/components';
+import DataTable from '@gravity-ui/react-data-table';
+import type {Column} from '@gravity-ui/react-data-table';
+import {ClipboardButton, Link as ExternalLink, Progress} from '@gravity-ui/uikit';
-import {UserCard} from '../../components/User/User';
import {ProgressViewer} from '../../components/ProgressViewer/ProgressViewer';
-import {clusterTabsIds, getClusterPath} from '../Cluster/utils';
-import {formatStorageValuesToTb} from '../../utils/dataFormatters/dataFormatters';
-
+import {UserCard} from '../../components/User/User';
import type {PreparedCluster} from '../../store/reducers/clusters/types';
-import {removeViewerPathname, getCleanBalancerValue} from '../../utils/parseBalancer';
+import {formatStorageValuesToTb} from '../../utils/dataFormatters/dataFormatters';
+import {getCleanBalancerValue, removeViewerPathname} from '../../utils/parseBalancer';
+import {clusterTabsIds, getClusterPath} from '../Cluster/utils';
import {COLUMNS_NAMES, COLUMNS_TITLES} from './constants';
-import {b} from './shared';
import i18n from './i18n';
+import {b} from './shared';
const EMPTY_CELL =
—;
@@ -99,7 +101,7 @@ export const CLUSTERS_COLUMNS: Column
[] = [
className={b('cluster-versions')}
href={getClusterPath(clusterTabsIds.versions, {backend, clusterName})}
>
- <>
+
{preparedVersions.map((item, index) => (
[] = [
))}
{}
- >
+
)
);
@@ -264,7 +266,7 @@ export const CLUSTERS_COLUMNS: Column[] = [
return (
);
},
diff --git a/src/containers/Clusters/shared.ts b/src/containers/Clusters/shared.ts
index 9b533ad2c4..71f97e352f 100644
--- a/src/containers/Clusters/shared.ts
+++ b/src/containers/Clusters/shared.ts
@@ -1,3 +1,3 @@
-import cn from 'bem-cn-lite';
+import {cn} from '../../utils/cn';
export const b = cn('clusters');
diff --git a/src/containers/Clusters/useClustersList.ts b/src/containers/Clusters/useClustersList.ts
index 7dc41c9da8..596c48c6dd 100644
--- a/src/containers/Clusters/useClustersList.ts
+++ b/src/containers/Clusters/useClustersList.ts
@@ -1,6 +1,7 @@
import React from 'react';
-import {useTypedDispatch} from '../../utils/hooks';
+
import {fetchClustersList} from '../../store/reducers/clusters/clusters';
+import {useTypedDispatch} from '../../utils/hooks';
export function useClustersList() {
const dispatch = useTypedDispatch();
diff --git a/src/containers/Clusters/useSelectedColumns.ts b/src/containers/Clusters/useSelectedColumns.ts
index b2d2bc9c55..808f587222 100644
--- a/src/containers/Clusters/useSelectedColumns.ts
+++ b/src/containers/Clusters/useSelectedColumns.ts
@@ -1,5 +1,5 @@
-import {type Column} from '@gravity-ui/react-data-table';
-import {type TableColumnSetupItem} from '@gravity-ui/uikit/build/esm/components/Table/hoc/withTableSettings/withTableSettings';
+import type {Column} from '@gravity-ui/react-data-table';
+import type {TableColumnSetupItem, TableColumnSetupProps} from '@gravity-ui/uikit';
import {useSetting} from '../../utils/hooks';
@@ -22,15 +22,17 @@ export const useSelectedColumns = (
);
const columnsToSelect: TableColumnSetupItem[] = columnsIds.map((id) => {
+ const isRequired = requiredColumnsIds?.includes(id);
return {
id,
title: columnsTitles[id],
selected: selectedColumnsIds.includes(id),
- required: requiredColumnsIds?.includes(id),
+ required: isRequired,
+ sticky: isRequired ? 'start' : undefined,
};
});
- const setColumns = (value: TableColumnSetupItem[]) => {
+ const setColumns: TableColumnSetupProps['onUpdate'] = (value) => {
const selectedColumns = value.filter((el) => el.selected).map((el) => el.id);
setSelectedColumnsIds(selectedColumns);
diff --git a/src/containers/Header/Header.tsx b/src/containers/Header/Header.tsx
index 8a1e533954..b24b74031f 100644
--- a/src/containers/Header/Header.tsx
+++ b/src/containers/Header/Header.tsx
@@ -1,22 +1,22 @@
-import {useEffect, useMemo} from 'react';
-import {useHistory, useLocation} from 'react-router';
-import block from 'bem-cn-lite';
+import React from 'react';
import {Breadcrumbs} from '@gravity-ui/uikit';
+import {useHistory, useLocation} from 'react-router';
import {LinkWithIcon} from '../../components/LinkWithIcon/LinkWithIcon';
-
+import {parseQuery} from '../../routes';
import {backend, customBackend} from '../../store';
import {getClusterInfo} from '../../store/reducers/cluster/cluster';
-import {useTypedSelector, useTypedDispatch} from '../../utils/hooks';
+import {cn} from '../../utils/cn';
import {DEVELOPER_UI_TITLE} from '../../utils/constants';
-import {parseQuery} from '../../routes';
+import {useTypedDispatch, useTypedSelector} from '../../utils/hooks';
-import {RawBreadcrumbItem, getBreadcrumbs} from './breadcrumbs';
+import type {RawBreadcrumbItem} from './breadcrumbs';
+import {getBreadcrumbs} from './breadcrumbs';
import './Header.scss';
-const b = block('header');
+const b = cn('header');
const getInternalLink = (singleClusterMode: boolean) => {
if (singleClusterMode && !customBackend) {
@@ -45,11 +45,11 @@ function Header({mainPage}: HeaderProps) {
const clusterNameFinal = data?.Name || clusterNameFromQuery;
- useEffect(() => {
+ React.useEffect(() => {
dispatch(getClusterInfo(clusterNameFromQuery));
}, [dispatch, clusterNameFromQuery]);
- const breadcrumbItems = useMemo(() => {
+ const breadcrumbItems = React.useMemo(() => {
const rawBreadcrumbs: RawBreadcrumbItem[] = [];
let options = pageBreadcrumbsOptions;
diff --git a/src/containers/Header/breadcrumbs.tsx b/src/containers/Header/breadcrumbs.tsx
index 18eb31744a..5aaa876f78 100644
--- a/src/containers/Header/breadcrumbs.tsx
+++ b/src/containers/Header/breadcrumbs.tsx
@@ -1,10 +1,12 @@
import {
NodesRight as ClusterIcon,
- Database as DatabaseIcon,
Cpu as ComputeNodeIcon,
+ Database as DatabaseIcon,
HardDrive as StorageNodeIcon,
} from '@gravity-ui/icons';
+import {TabletIcon} from '../../components/TabletIcon/TabletIcon';
+import routes, {createHref, getPDiskPagePath} from '../../routes';
import type {
BreadcrumbsOptions,
ClusterBreadcrumbsOptions,
@@ -21,13 +23,11 @@ import {
TENANT_PAGE,
TENANT_PAGES_IDS,
} from '../../store/reducers/tenant/constants';
-import {TabletIcon} from '../../components/TabletIcon/TabletIcon';
-import routes, {createHref, getPDiskPagePath} from '../../routes';
import {CLUSTER_DEFAULT_TITLE, getTabletLabel} from '../../utils/constants';
-
import {getClusterPath} from '../Cluster/utils';
-import {TenantTabsGroups, getTenantPath} from '../Tenant/TenantPages';
import {getDefaultNodePath} from '../Node/NodePages';
+import {TenantTabsGroups, getTenantPath} from '../Tenant/TenantPages';
+
import {headerKeyset} from './i18n';
const prepareTenantName = (tenantName: string) => {
diff --git a/src/containers/Heatmap/Heatmap.scss b/src/containers/Heatmap/Heatmap.scss
index e00f3c22fe..3947bfcddc 100644
--- a/src/containers/Heatmap/Heatmap.scss
+++ b/src/containers/Heatmap/Heatmap.scss
@@ -30,7 +30,7 @@
&_overall {
margin: 15px 20px;
- .yc-progress {
+ .g-progress {
width: 300px;
margin: 0;
}
diff --git a/src/containers/Heatmap/Heatmap.tsx b/src/containers/Heatmap/Heatmap.tsx
index 517b586901..e338dfc025 100644
--- a/src/containers/Heatmap/Heatmap.tsx
+++ b/src/containers/Heatmap/Heatmap.tsx
@@ -1,20 +1,19 @@
-import React, {useCallback, useEffect, useState} from 'react';
-import cn from 'bem-cn-lite';
+import React from 'react';
import {Checkbox, Select} from '@gravity-ui/uikit';
-import type {IHeatmapMetricValue} from '../../types/store/heatmap';
+import {ResponseError} from '../../components/Errors/ResponseError';
+import {Loader} from '../../components/Loader';
import {getTabletsInfo, setHeatmapOptions} from '../../store/reducers/heatmap';
-import {showTooltip, hideTooltip} from '../../store/reducers/tooltip';
+import {hideTooltip, showTooltip} from '../../store/reducers/tooltip';
+import type {IHeatmapMetricValue} from '../../types/store/heatmap';
+import {cn} from '../../utils/cn';
import {formatNumber} from '../../utils/dataFormatters/dataFormatters';
-import {useAutofetcher, useTypedSelector, useTypedDispatch} from '../../utils/hooks';
-
-import {Loader} from '../../components/Loader';
-import {ResponseError} from '../../components/Errors/ResponseError';
+import {useAutofetcher, useTypedDispatch, useTypedSelector} from '../../utils/hooks';
-import {COLORS_RANGE_SIZE, getColorRange, getColorIndex, getCurrentMetricLimits} from './util';
import {HeatmapCanvas} from './HeatmapCanvas/HeatmapCanvas';
import {Histogram} from './Histogram/Histogram';
+import {COLORS_RANGE_SIZE, getColorIndex, getColorRange, getCurrentMetricLimits} from './util';
import './Heatmap.scss';
@@ -42,9 +41,9 @@ export const Heatmap = ({path}: HeatmapProps) => {
data: tablets = [],
} = useTypedSelector((state) => state.heatmap);
- const [selectedMetric, setSelectedMetric] = useState(['']);
+ const [selectedMetric, setSelectedMetric] = React.useState(['']);
- useEffect(() => {
+ React.useEffect(() => {
if (!currentMetric && metrics && metrics.length) {
dispatch(
setHeatmapOptions({
@@ -57,7 +56,7 @@ export const Heatmap = ({path}: HeatmapProps) => {
}
}, [currentMetric, metrics, dispatch]);
- const fetchData = useCallback(
+ const fetchData = React.useCallback(
(isBackground: boolean) => {
if (!isBackground) {
dispatch(setHeatmapOptions({wasLoaded: false}));
diff --git a/src/containers/Heatmap/HeatmapCanvas/HeatmapCanvas.js b/src/containers/Heatmap/HeatmapCanvas/HeatmapCanvas.js
index a1aa49d96c..87ab1631bf 100644
--- a/src/containers/Heatmap/HeatmapCanvas/HeatmapCanvas.js
+++ b/src/containers/Heatmap/HeatmapCanvas/HeatmapCanvas.js
@@ -1,10 +1,11 @@
-import {useEffect, useLayoutEffect, useRef, useState} from 'react';
-import PropTypes from 'prop-types';
-import cn from 'bem-cn-lite';
+import React from 'react';
+
import throttle from 'lodash/throttle';
+import PropTypes from 'prop-types';
-import {basename as appBasename} from '../../../store/index';
import routes, {createHref} from '../../../routes';
+import {basename as appBasename} from '../../../store/index';
+import {cn} from '../../../utils/cn';
const b = cn('heatmap');
const defaultDimensions = {width: 0, height: 0};
@@ -13,10 +14,10 @@ const TABLET_SIZE = 10;
const TABLET_PADDING = 2;
export const HeatmapCanvas = (props) => {
- const [dimensions, setDimensions] = useState(defaultDimensions);
+ const [dimensions, setDimensions] = React.useState(defaultDimensions);
const {tablets} = props;
- const canvasRef = useRef(null);
- const containerRef = useRef(null);
+ const canvasRef = React.useRef(null);
+ const containerRef = React.useRef(null);
function drawTablet(ctx) {
return (tablet, index) => {
@@ -29,7 +30,7 @@ export const HeatmapCanvas = (props) => {
};
}
- useEffect(() => {
+ React.useEffect(() => {
const canvas = canvasRef.current;
const ctx = canvas.getContext('2d');
@@ -37,7 +38,7 @@ export const HeatmapCanvas = (props) => {
tablets.map(drawTablet(ctx));
});
- useLayoutEffect(() => {
+ React.useLayoutEffect(() => {
const container = containerRef.current;
if (container) {
diff --git a/src/containers/Heatmap/Histogram/Histogram.js b/src/containers/Heatmap/Histogram/Histogram.js
index 54b2ec4403..3d8054deed 100644
--- a/src/containers/Heatmap/Histogram/Histogram.js
+++ b/src/containers/Heatmap/Histogram/Histogram.js
@@ -1,16 +1,17 @@
-import {useRef} from 'react';
+import React from 'react';
+
import PropTypes from 'prop-types';
-import cn from 'bem-cn-lite';
-import {getColorRange, getCurrentMetricLimits} from '../util';
+import {cn} from '../../../utils/cn';
import {formatNumber} from '../../../utils/dataFormatters/dataFormatters';
+import {getColorRange, getCurrentMetricLimits} from '../util';
import './Histogram.scss';
const b = cn('histogram');
const HistogramBar = (props) => {
- const barRef = useRef();
+ const barRef = React.useRef();
const {data = {}, maxCount} = props;
const {count, leftBound, rightBound, color} = data;
const height = (count / maxCount) * 100;
diff --git a/src/containers/Node/Node.tsx b/src/containers/Node/Node.tsx
index cf1435d735..11d1d9d39b 100644
--- a/src/containers/Node/Node.tsx
+++ b/src/containers/Node/Node.tsx
@@ -1,26 +1,25 @@
-import {useEffect, useMemo, useRef} from 'react';
-import {useLocation, useRouteMatch} from 'react-router';
-import cn from 'bem-cn-lite';
-import {Helmet} from 'react-helmet-async';
+import React from 'react';
import {Tabs} from '@gravity-ui/uikit';
+import {Helmet} from 'react-helmet-async';
+import {useLocation, useRouteMatch} from 'react-router';
import {Link} from 'react-router-dom';
-import {TABLETS, STORAGE, NODE_PAGES, OVERVIEW, STRUCTURE} from './NodePages';
-import {Tablets} from '../Tablets';
-import {StorageWrapper} from '../Storage/StorageWrapper';
-import NodeStructure from './NodeStructure/NodeStructure';
-import {Loader} from '../../components/Loader';
import {BasicNodeViewer} from '../../components/BasicNodeViewer';
import {FullNodeViewer} from '../../components/FullNodeViewer/FullNodeViewer';
-
-import {getNodeInfo, resetNode} from '../../store/reducers/node/node';
+import {Loader} from '../../components/Loader';
import routes, {createHref, parseQuery} from '../../routes';
import {setHeaderBreadcrumbs} from '../../store/reducers/header/header';
+import {getNodeInfo, resetNode} from '../../store/reducers/node/node';
+import type {AdditionalNodesProps} from '../../types/additionalProps';
import {AutoFetcher} from '../../utils/autofetcher';
-import {useTypedSelector, useTypedDispatch} from '../../utils/hooks';
+import {cn} from '../../utils/cn';
+import {useTypedDispatch, useTypedSelector} from '../../utils/hooks';
+import {StorageWrapper} from '../Storage/StorageWrapper';
+import {Tablets} from '../Tablets';
-import type {AdditionalNodesProps} from '../../types/additionalProps';
+import {NODE_PAGES, OVERVIEW, STORAGE, STRUCTURE, TABLETS} from './NodePages';
+import NodeStructure from './NodeStructure/NodeStructure';
import './Node.scss';
@@ -36,7 +35,7 @@ interface NodeProps {
}
function Node(props: NodeProps) {
- const container = useRef(null);
+ const container = React.useRef(null);
const dispatch = useTypedDispatch();
const location = useLocation();
@@ -49,7 +48,7 @@ function Node(props: NodeProps) {
const {id: nodeId, activeTab} = match.params;
const {tenantName: tenantNameFromQuery} = parseQuery(location);
- const {activeTabVerified, nodeTabs} = useMemo(() => {
+ const {activeTabVerified, nodeTabs} = React.useMemo(() => {
const hasStorage = node?.Roles?.find((el) => el === STORAGE_ROLE);
const nodePages = hasStorage ? NODE_PAGES : NODE_PAGES.filter((el) => el.id !== STORAGE);
@@ -69,7 +68,7 @@ function Node(props: NodeProps) {
return {activeTabVerified: actualActiveTab, nodeTabs: actualNodeTabs};
}, [activeTab, node]);
- useEffect(() => {
+ React.useEffect(() => {
const tenantName = node?.Tenants?.[0] || tenantNameFromQuery?.toString();
dispatch(
@@ -80,7 +79,7 @@ function Node(props: NodeProps) {
);
}, [dispatch, node, nodeId, tenantNameFromQuery]);
- useEffect(() => {
+ React.useEffect(() => {
const fetchData = () => dispatch(getNodeInfo(nodeId));
fetchData();
autofetcher.start();
diff --git a/src/containers/Node/NodePages.ts b/src/containers/Node/NodePages.ts
index 84976705b8..25b38d362b 100644
--- a/src/containers/Node/NodePages.ts
+++ b/src/containers/Node/NodePages.ts
@@ -1,4 +1,5 @@
-import routes, {Query, createHref} from '../../routes';
+import type {Query} from '../../routes';
+import routes, {createHref} from '../../routes';
export const STORAGE = 'storage';
export const TABLETS = 'tablets';
diff --git a/src/containers/Node/NodeStructure/NodeStructure.tsx b/src/containers/Node/NodeStructure/NodeStructure.tsx
index 8f81a2acfa..dac74e3337 100644
--- a/src/containers/Node/NodeStructure/NodeStructure.tsx
+++ b/src/containers/Node/NodeStructure/NodeStructure.tsx
@@ -1,16 +1,15 @@
-import {useEffect, useRef} from 'react';
import url from 'url';
-import isEmpty from 'lodash/isEmpty';
-import cn from 'bem-cn-lite';
+import React from 'react';
-import {Loader} from '../.././../components/Loader';
+import isEmpty from 'lodash/isEmpty';
+import {Loader} from '../.././../components/Loader';
import {getNodeStructure} from '../../../store/reducers/node/node';
import {selectNodeStructure} from '../../../store/reducers/node/selectors';
-
import {AutoFetcher} from '../../../utils/autofetcher';
-import {useTypedSelector, useTypedDispatch} from '../../../utils/hooks';
+import {cn} from '../../../utils/cn';
+import {useTypedDispatch, useTypedSelector} from '../../../utils/hooks';
import {PDisk} from './Pdisk';
@@ -41,13 +40,13 @@ function NodeStructure({nodeId, className}: NodeStructureProps) {
true,
).query;
- const scrollContainerRef = useRef(null);
+ const scrollContainerRef = React.useRef(null);
- const isReady = useRef(false);
+ const isReady = React.useRef(false);
- const scrolled = useRef(false);
+ const scrolled = React.useRef(false);
- useEffect(() => {
+ React.useEffect(() => {
dispatch(getNodeStructure(nodeId));
autofetcher.start();
autofetcher.fetch(() => dispatch(getNodeStructure(nodeId)));
@@ -59,13 +58,13 @@ function NodeStructure({nodeId, className}: NodeStructureProps) {
};
}, [nodeId, dispatch]);
- useEffect(() => {
+ React.useEffect(() => {
if (!isEmpty(nodeStructure) && scrollContainerRef.current) {
isReady.current = true;
}
}, [nodeStructure]);
- useEffect(() => {
+ React.useEffect(() => {
if (isReady.current && !scrolled.current && scrollContainerRef.current) {
const element = document.getElementById(
generateId({type: 'pdisk', id: pdiskIdFromUrl as string}),
diff --git a/src/containers/Node/NodeStructure/PDiskTitleBadge.tsx b/src/containers/Node/NodeStructure/PDiskTitleBadge.tsx
index 3796d911d5..6533b6072f 100644
--- a/src/containers/Node/NodeStructure/PDiskTitleBadge.tsx
+++ b/src/containers/Node/NodeStructure/PDiskTitleBadge.tsx
@@ -1,11 +1,10 @@
-import {ReactNode} from 'react';
-import cn from 'bem-cn-lite';
+import {cn} from '../../../utils/cn';
const b = cn('kv-node-structure');
interface PDiskTitleBadgeProps {
label?: string;
- value: ReactNode;
+ value: React.ReactNode;
className?: string;
}
diff --git a/src/containers/Node/NodeStructure/Pdisk.tsx b/src/containers/Node/NodeStructure/Pdisk.tsx
index 655e4af8d1..9e24df939c 100644
--- a/src/containers/Node/NodeStructure/Pdisk.tsx
+++ b/src/containers/Node/NodeStructure/Pdisk.tsx
@@ -1,30 +1,30 @@
-import {useState} from 'react';
-import cn from 'bem-cn-lite';
-import isEmpty from 'lodash/isEmpty';
+import React from 'react';
+import DataTable from '@gravity-ui/react-data-table';
+import type {Column} from '@gravity-ui/react-data-table';
import {ArrowToggle, Button, Popover} from '@gravity-ui/uikit';
+import isEmpty from 'lodash/isEmpty';
-import DataTable, {type Column} from '@gravity-ui/react-data-table';
-
-import type {ValueOf} from '../../../types/common';
-import {EFlag} from '../../../types/api/enums';
+import {EntityStatus} from '../../../components/EntityStatus/EntityStatus';
+import {Icon} from '../../../components/Icon';
+import {PDiskInfo} from '../../../components/PDiskInfo/PDiskInfo';
+import {ProgressViewer} from '../../../components/ProgressViewer/ProgressViewer';
import type {
PreparedStructurePDisk,
PreparedStructureVDisk,
} from '../../../store/reducers/node/types';
+import {EFlag} from '../../../types/api/enums';
import {EVDiskState} from '../../../types/api/vdisk';
-import {formatStorageValuesToGb} from '../../../utils/dataFormatters/dataFormatters';
-import {DEFAULT_TABLE_SETTINGS} from '../../../utils/constants';
+import type {ValueOf} from '../../../types/common';
import {valueIsDefined} from '../../../utils';
+import {cn} from '../../../utils/cn';
+import {DEFAULT_TABLE_SETTINGS} from '../../../utils/constants';
+import {formatStorageValuesToGb} from '../../../utils/dataFormatters/dataFormatters';
import {createVDiskDeveloperUILink} from '../../../utils/developerUI/developerUI';
-import {EntityStatus} from '../../../components/EntityStatus/EntityStatus';
-import {ProgressViewer} from '../../../components/ProgressViewer/ProgressViewer';
-import {Icon} from '../../../components/Icon';
-import {PDiskInfo} from '../../../components/PDiskInfo/PDiskInfo';
-
import i18n from '../i18n';
-import {Vdisk} from './Vdisk';
+
import {PDiskTitleBadge} from './PDiskTitleBadge';
+import {Vdisk} from './Vdisk';
const b = cn('kv-node-structure');
@@ -167,7 +167,7 @@ export function PDisk({
nodeId,
unfolded: unfoldedFromProps,
}: PDiskProps) {
- const [unfolded, setUnfolded] = useState(unfoldedFromProps ?? false);
+ const [unfolded, setUnfolded] = React.useState(unfoldedFromProps ?? false);
const {TotalSize = 0, AvailableSize = 0, Device, PDiskId, Type, vDisks} = data;
diff --git a/src/containers/Node/NodeStructure/Vdisk.tsx b/src/containers/Node/NodeStructure/Vdisk.tsx
index cfbe12cc96..96f30d71ce 100644
--- a/src/containers/Node/NodeStructure/Vdisk.tsx
+++ b/src/containers/Node/NodeStructure/Vdisk.tsx
@@ -1,12 +1,12 @@
import React from 'react';
-import cn from 'bem-cn-lite';
+import {EntityStatus} from '../../../components/EntityStatus/EntityStatus';
+import {VDiskInfo} from '../../../components/VDiskInfo/VDiskInfo';
import type {PreparedStructureVDisk} from '../../../store/reducers/node/types';
-import {EVDiskState} from '../../../types/api/vdisk';
import {EFlag} from '../../../types/api/enums';
+import {EVDiskState} from '../../../types/api/vdisk';
+import {cn} from '../../../utils/cn';
import {stringifyVdiskId} from '../../../utils/dataFormatters/dataFormatters';
-import {EntityStatus} from '../../../components/EntityStatus/EntityStatus';
-import {VDiskInfo} from '../../../components/VDiskInfo/VDiskInfo';
const b = cn('kv-node-structure');
diff --git a/src/containers/Nodes/Nodes.tsx b/src/containers/Nodes/Nodes.tsx
index d141f3cd01..addba471ca 100644
--- a/src/containers/Nodes/Nodes.tsx
+++ b/src/containers/Nodes/Nodes.tsx
@@ -1,54 +1,50 @@
-import {useCallback, useEffect} from 'react';
-import cn from 'bem-cn-lite';
+import React from 'react';
import DataTable from '@gravity-ui/react-data-table';
import {ASCENDING} from '@gravity-ui/react-data-table/build/esm/lib/constants';
-import type {ProblemFilterValue} from '../../store/reducers/settings/types';
-import type {NodesSortParams} from '../../store/reducers/nodes/types';
-
+import {EntitiesCount} from '../../components/EntitiesCount';
import {AccessDenied} from '../../components/Errors/403';
+import {ResponseError} from '../../components/Errors/ResponseError';
import {Illustration} from '../../components/Illustration';
-import {Search} from '../../components/Search';
import {ProblemFilter} from '../../components/ProblemFilter';
-import {UptimeFilter} from '../../components/UptimeFIlter';
-import {EntitiesCount} from '../../components/EntitiesCount';
+import {Search} from '../../components/Search';
import {TableWithControlsLayout} from '../../components/TableWithControlsLayout/TableWithControlsLayout';
-import {ResponseError} from '../../components/Errors/ResponseError';
-
+import {UptimeFilter} from '../../components/UptimeFIlter';
+import {
+ getComputeNodes,
+ getNodes,
+ resetNodesState,
+ setDataWasNotLoaded,
+ setNodesUptimeFilter,
+ setSearchValue,
+ setSort,
+} from '../../store/reducers/nodes/nodes';
+import {selectFilteredNodes} from '../../store/reducers/nodes/selectors';
+import type {NodesSortParams} from '../../store/reducers/nodes/types';
+import {ProblemFilterValues, changeFilter} from '../../store/reducers/settings/settings';
+import type {ProblemFilterValue} from '../../store/reducers/settings/types';
+import type {AdditionalNodesProps} from '../../types/additionalProps';
+import {cn} from '../../utils/cn';
import {DEFAULT_TABLE_SETTINGS, USE_NODES_ENDPOINT_IN_DIAGNOSTICS_KEY} from '../../utils/constants';
import {
useAutofetcher,
useSetting,
- useTypedSelector,
useTableSort,
useTypedDispatch,
+ useTypedSelector,
} from '../../utils/hooks';
import {
+ NodesUptimeFilterValues,
isSortableNodesProperty,
isUnavailableNode,
- NodesUptimeFilterValues,
} from '../../utils/nodes';
-import {
- getNodes,
- setNodesUptimeFilter,
- setSearchValue,
- resetNodesState,
- getComputeNodes,
- setDataWasNotLoaded,
- setSort,
-} from '../../store/reducers/nodes/nodes';
-import {selectFilteredNodes} from '../../store/reducers/nodes/selectors';
-import {changeFilter, ProblemFilterValues} from '../../store/reducers/settings/settings';
-import type {AdditionalNodesProps} from '../../types/additionalProps';
-
import {getNodesColumns} from './getNodesColumns';
+import i18n from './i18n';
import './Nodes.scss';
-import i18n from './i18n';
-
const b = cn('ydb-nodes');
interface NodesProps {
@@ -64,7 +60,7 @@ export const Nodes = ({path, additionalNodesProps = {}}: NodesProps) => {
// Since Nodes component is used in several places,
// we need to reset filters, searchValue and loading state
// in nodes reducer when path changes
- useEffect(() => {
+ React.useEffect(() => {
dispatch(resetNodesState());
}, [dispatch, path]);
@@ -85,8 +81,8 @@ export const Nodes = ({path, additionalNodesProps = {}}: NodesProps) => {
const [useNodesEndpoint] = useSetting(USE_NODES_ENDPOINT_IN_DIAGNOSTICS_KEY);
- const fetchNodes = useCallback(
- (isBackground) => {
+ const fetchNodes = React.useCallback(
+ (isBackground: boolean) => {
if (!isBackground) {
dispatch(setDataWasNotLoaded());
}
@@ -121,7 +117,7 @@ export const Nodes = ({path, additionalNodesProps = {}}: NodesProps) => {
const renderControls = () => {
return (
- <>
+
{
label={'Nodes'}
loading={loading && !wasLoaded}
/>
- >
+
);
};
diff --git a/src/containers/Nodes/NodesWrapper.tsx b/src/containers/Nodes/NodesWrapper.tsx
index 53d6416ff6..04a2d28f4d 100644
--- a/src/containers/Nodes/NodesWrapper.tsx
+++ b/src/containers/Nodes/NodesWrapper.tsx
@@ -2,8 +2,8 @@ import type {AdditionalNodesProps} from '../../types/additionalProps';
import {USE_BACKEND_PARAMS_FOR_TABLES_KEY} from '../../utils/constants';
import {useSetting} from '../../utils/hooks';
-import {VirtualNodes} from './VirtualNodes';
import {Nodes} from './Nodes';
+import {VirtualNodes} from './VirtualNodes';
interface NodesWrapperProps {
path?: string;
diff --git a/src/containers/Nodes/VirtualNodes.tsx b/src/containers/Nodes/VirtualNodes.tsx
index 9899cae574..eec5eece28 100644
--- a/src/containers/Nodes/VirtualNodes.tsx
+++ b/src/containers/Nodes/VirtualNodes.tsx
@@ -1,37 +1,36 @@
-import {useCallback, useMemo, useState} from 'react';
-import cn from 'bem-cn-lite';
+import React from 'react';
-import type {AdditionalNodesProps} from '../../types/additionalProps';
-import type {ProblemFilterValue} from '../../store/reducers/settings/types';
+import {EntitiesCount} from '../../components/EntitiesCount';
+import {AccessDenied} from '../../components/Errors/403';
+import {ResponseError} from '../../components/Errors/ResponseError';
+import {Illustration} from '../../components/Illustration';
+import {ProblemFilter} from '../../components/ProblemFilter';
+import {Search} from '../../components/Search';
+import {UptimeFilter} from '../../components/UptimeFIlter';
+import {VirtualTable} from '../../components/VirtualTable';
+import type {
+ FetchData,
+ GetRowClassName,
+ RenderControls,
+ RenderErrorMessage,
+} from '../../components/VirtualTable';
import type {NodesPreparedEntity} from '../../store/reducers/nodes/types';
import {ProblemFilterValues} from '../../store/reducers/settings/settings';
+import type {ProblemFilterValue} from '../../store/reducers/settings/types';
+import type {AdditionalNodesProps} from '../../types/additionalProps';
+import {cn} from '../../utils/cn';
+import {updateColumnsWidth, useTableResize} from '../../utils/hooks/useTableResize';
import {
- NodesSortValue,
NodesUptimeFilterValues,
getProblemParamValue,
getUptimeParamValue,
isSortableNodesProperty,
isUnavailableNode,
} from '../../utils/nodes';
-import {updateColumnsWidth, useTableResize} from '../../utils/hooks/useTableResize';
+import type {NodesSortValue} from '../../utils/nodes';
-import {Search} from '../../components/Search';
-import {ProblemFilter} from '../../components/ProblemFilter';
-import {UptimeFilter} from '../../components/UptimeFIlter';
-import {EntitiesCount} from '../../components/EntitiesCount';
-import {AccessDenied} from '../../components/Errors/403';
-import {ResponseError} from '../../components/Errors/ResponseError';
-import {Illustration} from '../../components/Illustration';
-import {
- type FetchData,
- type RenderControls,
- type RenderErrorMessage,
- VirtualTable,
- GetRowClassName,
-} from '../../components/VirtualTable';
-
-import {getNodesColumns} from './getNodesColumns';
import {getNodes} from './getNodes';
+import {getNodesColumns} from './getNodesColumns';
import i18n from './i18n';
import './Nodes.scss';
@@ -45,19 +44,21 @@ interface NodesProps {
}
export const VirtualNodes = ({path, parentContainer, additionalNodesProps}: NodesProps) => {
- const [searchValue, setSearchValue] = useState('');
- const [problemFilter, setProblemFilter] = useState(ProblemFilterValues.ALL);
- const [uptimeFilter, setUptimeFilter] = useState(
+ const [searchValue, setSearchValue] = React.useState('');
+ const [problemFilter, setProblemFilter] = React.useState(
+ ProblemFilterValues.ALL,
+ );
+ const [uptimeFilter, setUptimeFilter] = React.useState(
NodesUptimeFilterValues.All,
);
const [tableColumnsWidthSetup, setTableColumnsWidth] = useTableResize('nodesTableColumnsWidth');
- const filters = useMemo(() => {
+ const filters = React.useMemo(() => {
return [path, searchValue, problemFilter, uptimeFilter];
}, [path, searchValue, problemFilter, uptimeFilter]);
- const fetchData = useCallback>(
+ const fetchData = React.useCallback>(
async (limit, offset, {sortOrder, columnId} = {}) => {
return await getNodes({
limit,
@@ -79,7 +80,7 @@ export const VirtualNodes = ({path, parentContainer, additionalNodesProps}: Node
const renderControls: RenderControls = ({totalEntities, foundEntities, inited}) => {
return (
- <>
+
- >
+
);
};
diff --git a/src/containers/Nodes/getNodesColumns.tsx b/src/containers/Nodes/getNodesColumns.tsx
index 1fb3e6d539..995eaa5636 100644
--- a/src/containers/Nodes/getNodesColumns.tsx
+++ b/src/containers/Nodes/getNodesColumns.tsx
@@ -1,20 +1,21 @@
-import DataTable, {type Column as DataTableColumn} from '@gravity-ui/react-data-table';
+import DataTable from '@gravity-ui/react-data-table';
+import type {Column as DataTableColumn} from '@gravity-ui/react-data-table';
-import type {Column as VirtualTableColumn} from '../../components/VirtualTable';
+import {CellWithPopover} from '../../components/CellWithPopover/CellWithPopover';
+import {NodeHostWrapper} from '../../components/NodeHostWrapper/NodeHostWrapper';
import {PoolsGraph} from '../../components/PoolsGraph/PoolsGraph';
import {ProgressViewer} from '../../components/ProgressViewer/ProgressViewer';
import {TabletsStatistic} from '../../components/TabletsStatistic';
-import {NodeHostWrapper} from '../../components/NodeHostWrapper/NodeHostWrapper';
+import {UsageLabel} from '../../components/UsageLabel/UsageLabel';
+import type {Column as VirtualTableColumn} from '../../components/VirtualTable';
+import type {NodesPreparedEntity} from '../../store/reducers/nodes/types';
+import {getLoadSeverityForNode} from '../../store/reducers/nodes/utils';
+import type {GetNodeRefFunc} from '../../types/additionalProps';
+import {EMPTY_DATA_PLACEHOLDER} from '../../utils/constants';
import {
formatBytesToGigabyte,
formatStorageValuesToGb,
} from '../../utils/dataFormatters/dataFormatters';
-import type {NodesPreparedEntity} from '../../store/reducers/nodes/types';
-import type {GetNodeRefFunc} from '../../types/additionalProps';
-import {getLoadSeverityForNode} from '../../store/reducers/nodes/utils';
-import {UsageLabel} from '../../components/UsageLabel/UsageLabel';
-import {CellWithPopover} from '../../components/CellWithPopover/CellWithPopover';
-import {EMPTY_DATA_PLACEHOLDER} from '../../utils/constants';
const NODES_COLUMNS_IDS = {
NodeId: 'NodeId',
diff --git a/src/containers/Nodes/i18n/index.ts b/src/containers/Nodes/i18n/index.ts
index dc437f41d2..71b11c937b 100644
--- a/src/containers/Nodes/i18n/index.ts
+++ b/src/containers/Nodes/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../utils/i18n';
+import {registerKeysets} from '../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-nodes';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/containers/PDiskPage/PDiskGroups.tsx b/src/containers/PDiskPage/PDiskGroups.tsx
index 80bfd4a9b2..f6ecdbe3f9 100644
--- a/src/containers/PDiskPage/PDiskGroups.tsx
+++ b/src/containers/PDiskPage/PDiskGroups.tsx
@@ -1,18 +1,15 @@
-import {useMemo} from 'react';
+import React from 'react';
import DataTable from '@gravity-ui/react-data-table';
+import {TableSkeleton} from '../../components/TableSkeleton/TableSkeleton';
import type {PreparedStorageGroup} from '../../store/reducers/storage/types';
import type {NodesMap} from '../../types/store/nodesList';
-
-import {TableSkeleton} from '../../components/TableSkeleton/TableSkeleton';
-
import {DEFAULT_TABLE_SETTINGS} from '../../utils/constants';
-
import {getPDiskStorageColumns} from '../Storage/StorageGroups/getStorageGroupsColumns';
-import {pdiskPageCn} from './shared';
import {pDiskPageKeyset} from './i18n';
+import {pdiskPageCn} from './shared';
interface PDiskGroupsProps {
data: PreparedStorageGroup[];
@@ -21,7 +18,7 @@ interface PDiskGroupsProps {
}
export function PDiskGroups({data, nodesMap, loading}: PDiskGroupsProps) {
- const pDiskStorageColumns = useMemo(() => {
+ const pDiskStorageColumns = React.useMemo(() => {
return getPDiskStorageColumns(nodesMap);
}, [nodesMap]);
@@ -41,9 +38,9 @@ export function PDiskGroups({data, nodesMap, loading}: PDiskGroupsProps) {
};
return (
- <>
+
{pDiskPageKeyset('groups')}
{renderContent()}
- >
+
);
}
diff --git a/src/containers/PDiskPage/PDiskPage.scss b/src/containers/PDiskPage/PDiskPage.scss
index 602c3daa35..14d20973ad 100644
--- a/src/containers/PDiskPage/PDiskPage.scss
+++ b/src/containers/PDiskPage/PDiskPage.scss
@@ -6,13 +6,12 @@
display: flex;
overflow: auto;
flex-direction: column;
+ gap: 20px;
height: 100%;
padding-top: 20px;
padding-left: 20px;
- gap: 20px;
-
&__meta,
&__title,
&__info,
diff --git a/src/containers/PDiskPage/PDiskPage.tsx b/src/containers/PDiskPage/PDiskPage.tsx
index 88229f6306..4f43c66528 100644
--- a/src/containers/PDiskPage/PDiskPage.tsx
+++ b/src/containers/PDiskPage/PDiskPage.tsx
@@ -1,31 +1,30 @@
-import {useCallback, useEffect} from 'react';
-import {StringParam, useQueryParams} from 'use-query-params';
-import {Helmet} from 'react-helmet-async';
+import React from 'react';
import {Icon} from '@gravity-ui/uikit';
-import ArrowRotateLeftIcon from '@gravity-ui/icons/svgs/arrow-rotate-left.svg';
+import {Helmet} from 'react-helmet-async';
+import {StringParam, useQueryParams} from 'use-query-params';
+import {ButtonWithConfirmDialog} from '../../components/ButtonWithConfirmDialog/ButtonWithConfirmDialog';
+import {DiskPageTitle} from '../../components/DiskPageTitle/DiskPageTitle';
+import {InfoViewerSkeleton} from '../../components/InfoViewerSkeleton/InfoViewerSkeleton';
+import {PDiskInfo} from '../../components/PDiskInfo/PDiskInfo';
+import {PageMeta} from '../../components/PageMeta/PageMeta';
+import {setHeaderBreadcrumbs} from '../../store/reducers/header/header';
+import {selectNodesMap} from '../../store/reducers/nodesList';
import {
getPDiskData,
getPDiskStorage,
setPDiskDataWasNotLoaded,
} from '../../store/reducers/pdisk/pdisk';
-import {setHeaderBreadcrumbs} from '../../store/reducers/header/header';
-import {selectNodesMap} from '../../store/reducers/nodesList';
-
import {valueIsDefined} from '../../utils';
-import {useAutofetcher, useTypedDispatch, useTypedSelector} from '../../utils/hooks';
import {getSeverityColor} from '../../utils/disks/helpers';
-
-import {PageMeta} from '../../components/PageMeta/PageMeta';
-import {PDiskInfo} from '../../components/PDiskInfo/PDiskInfo';
-import {InfoViewerSkeleton} from '../../components/InfoViewerSkeleton/InfoViewerSkeleton';
-import {DiskPageTitle} from '../../components/DiskPageTitle/DiskPageTitle';
-import {ButtonWithConfirmDialog} from '../../components/ButtonWithConfirmDialog/ButtonWithConfirmDialog';
+import {useAutofetcher, useTypedDispatch, useTypedSelector} from '../../utils/hooks';
import {PDiskGroups} from './PDiskGroups';
-import {pdiskPageCn} from './shared';
import {pDiskPageKeyset} from './i18n';
+import {pdiskPageCn} from './shared';
+
+import ArrowRotateLeftIcon from '@gravity-ui/icons/svgs/arrow-rotate-left.svg';
import './PDiskPage.scss';
@@ -42,11 +41,11 @@ export function PDiskPage() {
pDiskId: StringParam,
});
- useEffect(() => {
+ React.useEffect(() => {
dispatch(setHeaderBreadcrumbs('pDisk', {nodeId, pDiskId}));
}, [dispatch, nodeId, pDiskId]);
- const fetchData = useCallback(
+ const fetchData = React.useCallback(
async (isBackground?: boolean) => {
if (!isBackground) {
dispatch(setPDiskDataWasNotLoaded());
diff --git a/src/containers/ReduxTooltip/ReduxTooltip.js b/src/containers/ReduxTooltip/ReduxTooltip.js
index 10c59f8a33..3de5abca60 100644
--- a/src/containers/ReduxTooltip/ReduxTooltip.js
+++ b/src/containers/ReduxTooltip/ReduxTooltip.js
@@ -1,7 +1,8 @@
-import React, {useEffect} from 'react';
+import React from 'react';
+
+import {Popup, useVirtualElementRef} from '@gravity-ui/uikit';
import PropTypes from 'prop-types';
import {connect} from 'react-redux';
-import {Popup, useVirtualElementRef} from '@gravity-ui/uikit';
import {hideTooltip} from '../../store/reducers/tooltip';
import {tooltipTemplates} from '../../utils/tooltip';
@@ -22,7 +23,7 @@ function ReduxTooltip(props) {
rect: {top: props.positions?.top, left: props.positions?.left},
});
- useEffect(() => {
+ React.useEffect(() => {
window.addEventListener('scroll', handleScroll, true);
return () => {
window.removeEventListener('scroll', handleScroll);
diff --git a/src/containers/Storage/EmptyFilter/i18n/index.ts b/src/containers/Storage/EmptyFilter/i18n/index.ts
index 5cdcfe8267..fa42957d03 100644
--- a/src/containers/Storage/EmptyFilter/i18n/index.ts
+++ b/src/containers/Storage/EmptyFilter/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../../utils/i18n';
+import {registerKeysets} from '../../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-storage-empty-filter';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/containers/Storage/PDisk/PDisk.tsx b/src/containers/Storage/PDisk/PDisk.tsx
index 907a1f4e10..d62aad6556 100644
--- a/src/containers/Storage/PDisk/PDisk.tsx
+++ b/src/containers/Storage/PDisk/PDisk.tsx
@@ -1,16 +1,14 @@
-import React, {useState, useRef} from 'react';
-import cn from 'bem-cn-lite';
+import React from 'react';
-import type {TVDiskStateInfo} from '../../../types/api/vdisk';
-import {InternalLink} from '../../../components/InternalLink';
-import {VDiskWithDonorsStack} from '../../../components/VDisk/VDiskWithDonorsStack';
import {DiskStateProgressBar} from '../../../components/DiskStateProgressBar/DiskStateProgressBar';
+import {InternalLink} from '../../../components/InternalLink';
import {PDiskPopup} from '../../../components/PDiskPopup/PDiskPopup';
-
-import type {PreparedPDisk} from '../../../utils/disks/types';
+import {VDiskWithDonorsStack} from '../../../components/VDisk/VDiskWithDonorsStack';
import routes, {createHref} from '../../../routes';
+import type {TVDiskStateInfo} from '../../../types/api/vdisk';
+import {cn} from '../../../utils/cn';
import {stringifyVdiskId} from '../../../utils/dataFormatters/dataFormatters';
-
+import type {PreparedPDisk} from '../../../utils/disks/types';
import {STRUCTURE} from '../../Node/NodePages';
import './PDisk.scss';
@@ -24,9 +22,9 @@ interface PDiskProps {
}
export const PDisk = ({nodeId, data = {}, vDisks}: PDiskProps) => {
- const [isPopupVisible, setIsPopupVisible] = useState(false);
+ const [isPopupVisible, setIsPopupVisible] = React.useState(false);
- const anchor = useRef(null);
+ const anchor = React.useRef(null);
const showPopup = () => {
setIsPopupVisible(true);
diff --git a/src/containers/Storage/Storage.scss b/src/containers/Storage/Storage.scss
index cd349ced7f..5520f2f393 100644
--- a/src/containers/Storage/Storage.scss
+++ b/src/containers/Storage/Storage.scss
@@ -6,7 +6,7 @@
}
&__table {
- .yc-tooltip {
+ .g-tooltip {
// stylelint-disable-next-line declaration-no-important
height: var(--g-text-body-2-line-height) !important;
}
diff --git a/src/containers/Storage/Storage.tsx b/src/containers/Storage/Storage.tsx
index 490c2e48a6..21a47ca218 100644
--- a/src/containers/Storage/Storage.tsx
+++ b/src/containers/Storage/Storage.tsx
@@ -1,53 +1,52 @@
-import {useCallback, useEffect} from 'react';
+import React from 'react';
import {AccessDenied} from '../../components/Errors/403';
-import {TableWithControlsLayout} from '../../components/TableWithControlsLayout/TableWithControlsLayout';
import {ResponseError} from '../../components/Errors/ResponseError';
-
-import type {
- StorageSortParams,
- StorageType,
- VisibleEntities,
-} from '../../store/reducers/storage/types';
+import {TableWithControlsLayout} from '../../components/TableWithControlsLayout/TableWithControlsLayout';
import type {NodesSortParams} from '../../store/reducers/nodes/types';
-import type {AdditionalNodesProps} from '../../types/additionalProps';
-import {
- setInitialState,
- setVisibleEntities,
- setStorageTextFilter,
- setUsageFilter,
- setStorageType,
- setNodesUptimeFilter,
- setDataWasNotLoaded,
- getStorageNodesInfo,
- getStorageGroupsInfo,
- setNodesSortParams,
- setGroupsSortParams,
-} from '../../store/reducers/storage/storage';
+import {selectNodesMap} from '../../store/reducers/nodesList';
+import {STORAGE_TYPES, VISIBLE_ENTITIES} from '../../store/reducers/storage/constants';
import {
+ selectEntitiesCount,
selectFilteredGroups,
selectFilteredNodes,
- selectEntitiesCount,
- selectUsageFilterOptions,
- selectNodesSortParams,
selectGroupsSortParams,
+ selectNodesSortParams,
+ selectUsageFilterOptions,
} from '../../store/reducers/storage/selectors';
-import {VISIBLE_ENTITIES, STORAGE_TYPES} from '../../store/reducers/storage/constants';
-import {selectNodesMap} from '../../store/reducers/nodesList';
+import {
+ getStorageGroupsInfo,
+ getStorageNodesInfo,
+ setDataWasNotLoaded,
+ setGroupsSortParams,
+ setInitialState,
+ setNodesSortParams,
+ setNodesUptimeFilter,
+ setStorageTextFilter,
+ setStorageType,
+ setUsageFilter,
+ setVisibleEntities,
+} from '../../store/reducers/storage/storage';
+import type {
+ StorageSortParams,
+ StorageType,
+ VisibleEntities,
+} from '../../store/reducers/storage/types';
+import type {AdditionalNodesProps} from '../../types/additionalProps';
+import {DEFAULT_TABLE_SETTINGS} from '../../utils/constants';
import {
useAutofetcher,
useNodesRequestParams,
useStorageRequestParams,
useTableSort,
- useTypedSelector,
useTypedDispatch,
+ useTypedSelector,
} from '../../utils/hooks';
import {NodesUptimeFilterValues} from '../../utils/nodes';
-import {DEFAULT_TABLE_SETTINGS} from '../../utils/constants';
+import {StorageControls} from './StorageControls/StorageControls';
import {StorageGroups} from './StorageGroups/StorageGroups';
import {StorageNodes} from './StorageNodes/StorageNodes';
-import {StorageControls} from './StorageControls/StorageControls';
import {b} from './shared';
import './Storage.scss';
@@ -84,7 +83,7 @@ export const Storage = ({additionalNodesProps, tenant, nodeId}: StorageProps) =>
const isNodePage = nodeId !== undefined;
const storageType = isNodePage ? STORAGE_TYPES.groups : type;
- useEffect(() => {
+ React.useEffect(() => {
return () => {
// Clean data on component unmount
dispatch(setInitialState());
@@ -108,7 +107,7 @@ export const Storage = ({additionalNodesProps, tenant, nodeId}: StorageProps) =>
dispatch(setGroupsSortParams(params as StorageSortParams)),
);
- const fetchData = useCallback(
+ const fetchData = React.useCallback(
(isBackground: boolean) => {
if (!isBackground) {
dispatch(setDataWasNotLoaded());
@@ -165,7 +164,7 @@ export const Storage = ({additionalNodesProps, tenant, nodeId}: StorageProps) =>
const renderDataTable = () => {
return (
- <>
+
{storageType === STORAGE_TYPES.groups && (
handleSort={handleNodesSort}
/>
)}
- >
+
);
};
diff --git a/src/containers/Storage/StorageControls/StorageControls.tsx b/src/containers/Storage/StorageControls/StorageControls.tsx
index 3cc42176c9..48476bbe22 100644
--- a/src/containers/Storage/StorageControls/StorageControls.tsx
+++ b/src/containers/Storage/StorageControls/StorageControls.tsx
@@ -1,14 +1,15 @@
+import React from 'react';
+
import {EntitiesCount} from '../../../components/EntitiesCount/EntitiesCount';
import {Search} from '../../../components/Search/Search';
import {UptimeFilter} from '../../../components/UptimeFIlter';
-
-import type {StorageType, VisibleEntities} from '../../../store/reducers/storage/types';
import {STORAGE_TYPES} from '../../../store/reducers/storage/constants';
-import {NodesUptimeFilterValues} from '../../../utils/nodes';
-
-import {UsageFilter, type UsageFilterItem} from '../UsageFilter/UsageFilter';
+import type {StorageType, VisibleEntities} from '../../../store/reducers/storage/types';
+import type {NodesUptimeFilterValues} from '../../../utils/nodes';
import {StorageTypeFilter} from '../StorageTypeFilter/StorageTypeFilter';
import {StorageVisibleEntitiesFilter} from '../StorageVisibleEntitiesFilter/StorageVisibleEntitiesFilter';
+import {UsageFilter} from '../UsageFilter/UsageFilter';
+import type {UsageFilterItem} from '../UsageFilter/UsageFilter';
import i18n from '../i18n';
import {b} from '../shared';
@@ -63,7 +64,7 @@ export const StorageControls = ({
const entityName = isNodes ? i18n('nodes') : i18n('groups');
return (
- <>
+
- >
+
);
};
diff --git a/src/containers/Storage/StorageGroups/StorageGroups.tsx b/src/containers/Storage/StorageGroups/StorageGroups.tsx
index 7f83d5285c..9d4120af78 100644
--- a/src/containers/Storage/StorageGroups/StorageGroups.tsx
+++ b/src/containers/Storage/StorageGroups/StorageGroups.tsx
@@ -1,15 +1,17 @@
-import {useMemo} from 'react';
+import React from 'react';
-import DataTable, {Settings, SortOrder} from '@gravity-ui/react-data-table';
+import type {Settings, SortOrder} from '@gravity-ui/react-data-table';
+import DataTable from '@gravity-ui/react-data-table';
-import type {NodesMap} from '../../../types/store/nodesList';
+import {VISIBLE_ENTITIES} from '../../../store/reducers/storage/constants';
import type {PreparedStorageGroup, VisibleEntities} from '../../../store/reducers/storage/types';
+import type {NodesMap} from '../../../types/store/nodesList';
import type {HandleSort} from '../../../utils/hooks/useTableSort';
-import {VISIBLE_ENTITIES} from '../../../store/reducers/storage/constants';
-import {getPreparedStorageGroupsColumns} from './getStorageGroupsColumns';
-import {StorageGroupsEmptyDataMessage} from './StorageGroupsEmptyDataMessage';
+import {StorageGroupsEmptyDataMessage} from './StorageGroupsEmptyDataMessage';
+import {getPreparedStorageGroupsColumns} from './getStorageGroupsColumns';
import i18n from './i18n';
+
import './StorageGroups.scss';
interface StorageGroupsProps {
@@ -31,7 +33,7 @@ export function StorageGroups({
sort,
handleSort,
}: StorageGroupsProps) {
- const columns = useMemo(() => {
+ const columns = React.useMemo(() => {
return getPreparedStorageGroupsColumns(nodes, visibleEntities);
}, [nodes, visibleEntities]);
diff --git a/src/containers/Storage/StorageGroups/StorageGroupsEmptyDataMessage.tsx b/src/containers/Storage/StorageGroups/StorageGroupsEmptyDataMessage.tsx
index 80513953fb..623edd976b 100644
--- a/src/containers/Storage/StorageGroups/StorageGroupsEmptyDataMessage.tsx
+++ b/src/containers/Storage/StorageGroups/StorageGroupsEmptyDataMessage.tsx
@@ -1,6 +1,7 @@
-import type {VisibleEntities} from '../../../store/reducers/storage/types';
import {VISIBLE_ENTITIES} from '../../../store/reducers/storage/constants';
+import type {VisibleEntities} from '../../../store/reducers/storage/types';
import {EmptyFilter} from '../EmptyFilter/EmptyFilter';
+
import i18n from './i18n';
interface StorageNodesEmptyDataMessageProps {
diff --git a/src/containers/Storage/StorageGroups/VirtualStorageGroups.tsx b/src/containers/Storage/StorageGroups/VirtualStorageGroups.tsx
index 61086e635f..7ee0570cc8 100644
--- a/src/containers/Storage/StorageGroups/VirtualStorageGroups.tsx
+++ b/src/containers/Storage/StorageGroups/VirtualStorageGroups.tsx
@@ -1,19 +1,15 @@
-import {useCallback, useMemo} from 'react';
+import React from 'react';
+import {VirtualTable} from '../../../components/VirtualTable';
+import type {FetchData, RenderControls, RenderErrorMessage} from '../../../components/VirtualTable';
+import {VISIBLE_ENTITIES} from '../../../store/reducers/storage/constants';
+import type {PreparedStorageGroup, VisibleEntities} from '../../../store/reducers/storage/types';
import type {NodesMap} from '../../../types/store/nodesList';
import type {StorageSortValue} from '../../../utils/storage';
-import {
- VirtualTable,
- type FetchData,
- type RenderControls,
- type RenderErrorMessage,
-} from '../../../components/VirtualTable';
-import type {PreparedStorageGroup, VisibleEntities} from '../../../store/reducers/storage/types';
-import {VISIBLE_ENTITIES} from '../../../store/reducers/storage/constants';
import {StorageGroupsEmptyDataMessage} from './StorageGroupsEmptyDataMessage';
-import {getPreparedStorageGroupsColumns} from './getStorageGroupsColumns';
import {getStorageGroups} from './getGroups';
+import {getPreparedStorageGroupsColumns} from './getStorageGroupsColumns';
import i18n from './i18n';
interface VirtualStorageGroupsProps {
@@ -41,11 +37,11 @@ export const VirtualStorageGroups = ({
renderControls,
renderErrorMessage,
}: VirtualStorageGroupsProps) => {
- const filters = useMemo(() => {
+ const filters = React.useMemo(() => {
return [searchValue, visibleEntities, tenant, nodeId];
}, [searchValue, visibleEntities, tenant, nodeId]);
- const fetchData = useCallback>(
+ const fetchData = React.useCallback>(
async (limit, offset, {sortOrder, columnId} = {}) => {
return await getStorageGroups({
limit,
@@ -62,7 +58,7 @@ export const VirtualStorageGroups = ({
[nodeId, searchValue, tenant, visibleEntities],
);
- const columns = useMemo(() => {
+ const columns = React.useMemo(() => {
return getPreparedStorageGroupsColumns(nodesMap, visibleEntities);
}, [nodesMap, visibleEntities]);
diff --git a/src/containers/Storage/StorageGroups/getStorageGroupsColumns.tsx b/src/containers/Storage/StorageGroups/getStorageGroupsColumns.tsx
index 89c1354250..44814cab07 100644
--- a/src/containers/Storage/StorageGroups/getStorageGroupsColumns.tsx
+++ b/src/containers/Storage/StorageGroups/getStorageGroupsColumns.tsx
@@ -1,23 +1,28 @@
-import cn from 'bem-cn-lite';
+import React from 'react';
-import DataTable, {type Column as DataTableColumn} from '@gravity-ui/react-data-table';
+import DataTable from '@gravity-ui/react-data-table';
+import type {Column as DataTableColumn} from '@gravity-ui/react-data-table';
import {Icon, Label, Popover, PopoverBehavior} from '@gravity-ui/uikit';
-import {EFlag} from '../../../types/api/enums';
+import {CellWithPopover} from '../../../components/CellWithPopover/CellWithPopover';
+import {EntityStatus} from '../../../components/EntityStatus/EntityStatus';
+import {UsageLabel} from '../../../components/UsageLabel/UsageLabel';
+import {VDiskWithDonorsStack} from '../../../components/VDisk/VDiskWithDonorsStack';
import type {Column as VirtualTableColumn} from '../../../components/VirtualTable';
-import shieldIcon from '../../../assets/icons/shield.svg';
-import type {NodesMap} from '../../../types/store/nodesList';
-import type {PreparedStorageGroup, VisibleEntities} from '../../../store/reducers/storage/types';
import {VISIBLE_ENTITIES} from '../../../store/reducers/storage/constants';
+import type {PreparedStorageGroup, VisibleEntities} from '../../../store/reducers/storage/types';
+import {EFlag} from '../../../types/api/enums';
+import type {NodesMap} from '../../../types/store/nodesList';
+import {cn} from '../../../utils/cn';
+import {stringifyVdiskId} from '../../../utils/dataFormatters/dataFormatters';
import {isSortableStorageProperty} from '../../../utils/storage';
import {bytesToGB, bytesToSpeed} from '../../../utils/utils';
-import {stringifyVdiskId} from '../../../utils/dataFormatters/dataFormatters';
-import {EntityStatus} from '../../../components/EntityStatus/EntityStatus';
-import {CellWithPopover} from '../../../components/CellWithPopover/CellWithPopover';
-import {UsageLabel} from '../../../components/UsageLabel/UsageLabel';
-import {VDiskWithDonorsStack} from '../../../components/VDisk/VDiskWithDonorsStack';
import {getDegradedSeverity, getUsageSeverityForStorageGroup} from '../utils';
+
import i18n from './i18n';
+
+import shieldIcon from '../../../assets/icons/shield.svg';
+
import './StorageGroups.scss';
const b = cn('global-storage-groups');
@@ -68,7 +73,7 @@ const typeColumn: StorageGroupsColumn = {
width: 100,
align: DataTable.LEFT,
render: ({row}) => (
- <>
+
{'\u00a0'}
{row.Encryption && (
@@ -82,7 +87,7 @@ const typeColumn: StorageGroupsColumn = {
)}
- >
+
),
sortable: false,
};
diff --git a/src/containers/Storage/StorageGroups/i18n/index.ts b/src/containers/Storage/StorageGroups/i18n/index.ts
index 380cae2a73..55ce872966 100644
--- a/src/containers/Storage/StorageGroups/i18n/index.ts
+++ b/src/containers/Storage/StorageGroups/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../../utils/i18n';
+import {registerKeysets} from '../../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-storage-groups';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/containers/Storage/StorageNodes/StorageNodes.tsx b/src/containers/Storage/StorageNodes/StorageNodes.tsx
index 94b9099eed..dac1e81567 100644
--- a/src/containers/Storage/StorageNodes/StorageNodes.tsx
+++ b/src/containers/Storage/StorageNodes/StorageNodes.tsx
@@ -1,17 +1,17 @@
-import DataTable, {Settings, SortOrder} from '@gravity-ui/react-data-table';
+import type {Settings, SortOrder} from '@gravity-ui/react-data-table';
+import DataTable from '@gravity-ui/react-data-table';
+import {VISIBLE_ENTITIES} from '../../../store/reducers/storage/constants';
import type {PreparedStorageNode, VisibleEntities} from '../../../store/reducers/storage/types';
-import type {HandleSort} from '../../../utils/hooks/useTableSort';
import type {AdditionalNodesProps} from '../../../types/additionalProps';
-
-import {VISIBLE_ENTITIES} from '../../../store/reducers/storage/constants';
+import type {HandleSort} from '../../../utils/hooks/useTableSort';
import {NodesUptimeFilterValues} from '../../../utils/nodes';
-import {getPreparedStorageNodesColumns} from './getStorageNodesColumns';
-
import {StorageNodesEmptyDataMessage} from './StorageNodesEmptyDataMessage';
-import {getRowUnavailableClassName} from './shared';
+import {getPreparedStorageNodesColumns} from './getStorageNodesColumns';
import i18n from './i18n';
+import {getRowUnavailableClassName} from './shared';
+
import './StorageNodes.scss';
interface StorageNodesProps {
diff --git a/src/containers/Storage/StorageNodes/StorageNodesEmptyDataMessage.tsx b/src/containers/Storage/StorageNodes/StorageNodesEmptyDataMessage.tsx
index b847dc9832..2091614c4f 100644
--- a/src/containers/Storage/StorageNodes/StorageNodesEmptyDataMessage.tsx
+++ b/src/containers/Storage/StorageNodes/StorageNodesEmptyDataMessage.tsx
@@ -1,7 +1,8 @@
-import type {VisibleEntities} from '../../../store/reducers/storage/types';
import {VISIBLE_ENTITIES} from '../../../store/reducers/storage/constants';
+import type {VisibleEntities} from '../../../store/reducers/storage/types';
import {NodesUptimeFilterValues} from '../../../utils/nodes';
import {EmptyFilter} from '../EmptyFilter/EmptyFilter';
+
import i18n from './i18n';
interface StorageNodesEmptyDataMessageProps {
diff --git a/src/containers/Storage/StorageNodes/VirtualStorageNodes.tsx b/src/containers/Storage/StorageNodes/VirtualStorageNodes.tsx
index 9f74b4dcb6..6e675ed54c 100644
--- a/src/containers/Storage/StorageNodes/VirtualStorageNodes.tsx
+++ b/src/containers/Storage/StorageNodes/VirtualStorageNodes.tsx
@@ -1,25 +1,18 @@
-import {useCallback, useMemo} from 'react';
+import React from 'react';
-import type {AdditionalNodesProps} from '../../../types/additionalProps';
-import {
- getUptimeParamValue,
- NodesUptimeFilterValues,
- type NodesSortValue,
-} from '../../../utils/nodes';
-import {
- VirtualTable,
- type FetchData,
- type RenderControls,
- type RenderErrorMessage,
-} from '../../../components/VirtualTable';
-import type {PreparedStorageNode, VisibleEntities} from '../../../store/reducers/storage/types';
+import {VirtualTable} from '../../../components/VirtualTable';
+import type {FetchData, RenderControls, RenderErrorMessage} from '../../../components/VirtualTable';
import {VISIBLE_ENTITIES} from '../../../store/reducers/storage/constants';
+import type {PreparedStorageNode, VisibleEntities} from '../../../store/reducers/storage/types';
+import type {AdditionalNodesProps} from '../../../types/additionalProps';
+import {NodesUptimeFilterValues, getUptimeParamValue} from '../../../utils/nodes';
+import type {NodesSortValue} from '../../../utils/nodes';
import {StorageNodesEmptyDataMessage} from './StorageNodesEmptyDataMessage';
-import {getPreparedStorageNodesColumns} from './getStorageNodesColumns';
import {getStorageNodes} from './getNodes';
-import {getRowUnavailableClassName} from './shared';
+import {getPreparedStorageNodesColumns} from './getStorageNodesColumns';
import i18n from './i18n';
+import {getRowUnavailableClassName} from './shared';
interface VirtualStorageNodesProps {
searchValue: string;
@@ -46,11 +39,11 @@ export const VirtualStorageNodes = ({
renderControls,
renderErrorMessage,
}: VirtualStorageNodesProps) => {
- const filters = useMemo(() => {
+ const filters = React.useMemo(() => {
return [searchValue, visibleEntities, nodesUptimeFilter, tenant];
}, [searchValue, visibleEntities, nodesUptimeFilter, tenant]);
- const fetchData = useCallback>(
+ const fetchData = React.useCallback>(
async (limit, offset, {sortOrder, columnId} = {}) => {
return await getStorageNodes({
limit,
@@ -67,7 +60,7 @@ export const VirtualStorageNodes = ({
[nodesUptimeFilter, searchValue, tenant, visibleEntities],
);
- const columns = useMemo(() => {
+ const columns = React.useMemo(() => {
return getPreparedStorageNodesColumns(additionalNodesProps, visibleEntities);
}, [additionalNodesProps, visibleEntities]);
diff --git a/src/containers/Storage/StorageNodes/getStorageNodesColumns.tsx b/src/containers/Storage/StorageNodes/getStorageNodesColumns.tsx
index 8070b787a4..582f9ed7d0 100644
--- a/src/containers/Storage/StorageNodes/getStorageNodesColumns.tsx
+++ b/src/containers/Storage/StorageNodes/getStorageNodesColumns.tsx
@@ -1,14 +1,15 @@
-import DataTable, {type Column as DataTableColumn} from '@gravity-ui/react-data-table';
+import DataTable from '@gravity-ui/react-data-table';
+import type {Column as DataTableColumn} from '@gravity-ui/react-data-table';
-import type {PreparedStorageNode, VisibleEntities} from '../../../store/reducers/storage/types';
-import type {AdditionalNodesProps} from '../../../types/additionalProps';
+import {NodeHostWrapper} from '../../../components/NodeHostWrapper/NodeHostWrapper';
import type {Column as VirtualTableColumn} from '../../../components/VirtualTable';
import {VISIBLE_ENTITIES} from '../../../store/reducers/storage/constants';
-import {NodeHostWrapper} from '../../../components/NodeHostWrapper/NodeHostWrapper';
-import {isSortableNodesProperty} from '../../../utils/nodes';
+import type {PreparedStorageNode, VisibleEntities} from '../../../store/reducers/storage/types';
+import type {AdditionalNodesProps} from '../../../types/additionalProps';
import {EMPTY_DATA_PLACEHOLDER} from '../../../utils/constants';
-
+import {isSortableNodesProperty} from '../../../utils/nodes';
import {PDisk} from '../PDisk/PDisk';
+
import {b} from './shared';
export const STORAGE_NODES_COLUMNS_IDS = {
diff --git a/src/containers/Storage/StorageNodes/i18n/index.ts b/src/containers/Storage/StorageNodes/i18n/index.ts
index 4ce2d3d484..5d6376781d 100644
--- a/src/containers/Storage/StorageNodes/i18n/index.ts
+++ b/src/containers/Storage/StorageNodes/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../../utils/i18n';
+import {registerKeysets} from '../../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-storage-nodes';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/containers/Storage/StorageNodes/shared.ts b/src/containers/Storage/StorageNodes/shared.ts
index f706117eec..45d441aa45 100644
--- a/src/containers/Storage/StorageNodes/shared.ts
+++ b/src/containers/Storage/StorageNodes/shared.ts
@@ -1,6 +1,5 @@
-import cn from 'bem-cn-lite';
-
import type {PreparedStorageNode} from '../../../store/reducers/storage/types';
+import {cn} from '../../../utils/cn';
import {isUnavailableNode} from '../../../utils/nodes';
export const b = cn('global-storage-nodes');
diff --git a/src/containers/Storage/StorageTypeFilter/StorageTypeFilter.tsx b/src/containers/Storage/StorageTypeFilter/StorageTypeFilter.tsx
index efabe76c82..084f26e453 100644
--- a/src/containers/Storage/StorageTypeFilter/StorageTypeFilter.tsx
+++ b/src/containers/Storage/StorageTypeFilter/StorageTypeFilter.tsx
@@ -1,7 +1,7 @@
import {RadioButton} from '@gravity-ui/uikit';
-import type {StorageType} from '../../../store/reducers/storage/types';
import {STORAGE_TYPES} from '../../../store/reducers/storage/constants';
+import type {StorageType} from '../../../store/reducers/storage/types';
const StorageTypesTitles = {
[STORAGE_TYPES.groups]: 'Groups',
diff --git a/src/containers/Storage/StorageVisibleEntitiesFilter/StorageVisibleEntitiesFilter.tsx b/src/containers/Storage/StorageVisibleEntitiesFilter/StorageVisibleEntitiesFilter.tsx
index b608070686..9c17c984c5 100644
--- a/src/containers/Storage/StorageVisibleEntitiesFilter/StorageVisibleEntitiesFilter.tsx
+++ b/src/containers/Storage/StorageVisibleEntitiesFilter/StorageVisibleEntitiesFilter.tsx
@@ -1,7 +1,7 @@
import {RadioButton} from '@gravity-ui/uikit';
-import type {VisibleEntities} from '../../../store/reducers/storage/types';
import {VISIBLE_ENTITIES} from '../../../store/reducers/storage/constants';
+import type {VisibleEntities} from '../../../store/reducers/storage/types';
export const VisibleEntitiesTitles = {
[VISIBLE_ENTITIES.all]: 'All',
diff --git a/src/containers/Storage/StorageWrapper.tsx b/src/containers/Storage/StorageWrapper.tsx
index 0d5f7c52fa..0701dda7e9 100644
--- a/src/containers/Storage/StorageWrapper.tsx
+++ b/src/containers/Storage/StorageWrapper.tsx
@@ -2,8 +2,8 @@ import type {AdditionalNodesProps} from '../../types/additionalProps';
import {USE_BACKEND_PARAMS_FOR_TABLES_KEY} from '../../utils/constants';
import {useSetting} from '../../utils/hooks';
-import {VirtualStorage} from './VirtualStorage';
import {Storage} from './Storage';
+import {VirtualStorage} from './VirtualStorage';
interface StorageWrapperProps {
tenant?: string;
diff --git a/src/containers/Storage/UsageFilter/UsageFilter.tsx b/src/containers/Storage/UsageFilter/UsageFilter.tsx
index d2db7e62cc..f9bd29bee3 100644
--- a/src/containers/Storage/UsageFilter/UsageFilter.tsx
+++ b/src/containers/Storage/UsageFilter/UsageFilter.tsx
@@ -1,13 +1,14 @@
-import {useEffect, useMemo, useRef, useState} from 'react';
-import cn from 'bem-cn-lite';
+import React from 'react';
-import {Select, SelectOption} from '@gravity-ui/uikit';
+import type {SelectOption} from '@gravity-ui/uikit';
+import {Select} from '@gravity-ui/uikit';
import {EntityStatus} from '../../../components/EntityStatus/EntityStatus';
-
+import {cn} from '../../../utils/cn';
import {getUsageSeverityForEntityStatus} from '../utils';
import i18n from './i18n';
+
import './UsageFilter.scss';
export interface UsageFilterItem {
@@ -28,10 +29,10 @@ const b = cn('usage-filter');
export const UsageFilter = (props: UsageFilterProps) => {
const {className, value = [], groups = [], onChange, debounce = 200} = props;
- const [filterValue, setFilterValue] = useState(value);
- const timer = useRef();
+ const [filterValue, setFilterValue] = React.useState(value);
+ const timer = React.useRef();
- useEffect(() => {
+ React.useEffect(() => {
// sync inner state with external value
setFilterValue((prevValue) => {
if (prevValue.join(',') !== value.join(',')) {
@@ -42,7 +43,7 @@ export const UsageFilter = (props: UsageFilterProps) => {
});
}, [value]);
- const options = useMemo(
+ const options = React.useMemo(
() =>
groups.map(({threshold, count}) => ({
value: String(threshold),
diff --git a/src/containers/Storage/UsageFilter/i18n/index.ts b/src/containers/Storage/UsageFilter/i18n/index.ts
index edb403e655..38b7f03577 100644
--- a/src/containers/Storage/UsageFilter/i18n/index.ts
+++ b/src/containers/Storage/UsageFilter/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../../utils/i18n';
+import {registerKeysets} from '../../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-usage-filter';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/containers/Storage/VirtualStorage.tsx b/src/containers/Storage/VirtualStorage.tsx
index 0130cfe35d..2de5bb5c12 100644
--- a/src/containers/Storage/VirtualStorage.tsx
+++ b/src/containers/Storage/VirtualStorage.tsx
@@ -1,14 +1,14 @@
-import {useState} from 'react';
+import React from 'react';
-import type {AdditionalNodesProps} from '../../types/additionalProps';
-import type {RenderControls, RenderErrorMessage} from '../../components/VirtualTable';
-import type {StorageType, VisibleEntities} from '../../store/reducers/storage/types';
-import {STORAGE_TYPES, VISIBLE_ENTITIES} from '../../store/reducers/storage/constants';
-import {NodesUptimeFilterValues} from '../../utils/nodes';
import {AccessDenied} from '../../components/Errors/403/AccessDenied';
import {ResponseError} from '../../components/Errors/ResponseError/ResponseError';
+import type {RenderControls, RenderErrorMessage} from '../../components/VirtualTable';
import {selectNodesMap} from '../../store/reducers/nodesList';
+import {STORAGE_TYPES, VISIBLE_ENTITIES} from '../../store/reducers/storage/constants';
+import type {StorageType, VisibleEntities} from '../../store/reducers/storage/types';
+import type {AdditionalNodesProps} from '../../types/additionalProps';
import {useTypedSelector} from '../../utils/hooks';
+import {NodesUptimeFilterValues} from '../../utils/nodes';
import {StorageControls} from './StorageControls/StorageControls';
import {VirtualStorageGroups} from './StorageGroups/VirtualStorageGroups';
@@ -27,10 +27,12 @@ export const VirtualStorage = ({
parentContainer,
additionalNodesProps,
}: VirtualStorageProps) => {
- const [searchValue, setSearchValue] = useState('');
- const [storageType, setStorageType] = useState(STORAGE_TYPES.groups);
- const [visibleEntities, setVisibleEntities] = useState(VISIBLE_ENTITIES.all);
- const [nodesUptimeFilter, setNodesUptimeFilter] = useState(
+ const [searchValue, setSearchValue] = React.useState('');
+ const [storageType, setStorageType] = React.useState(STORAGE_TYPES.groups);
+ const [visibleEntities, setVisibleEntities] = React.useState(
+ VISIBLE_ENTITIES.all,
+ );
+ const [nodesUptimeFilter, setNodesUptimeFilter] = React.useState(
NodesUptimeFilterValues.All,
);
diff --git a/src/containers/Storage/i18n/index.ts b/src/containers/Storage/i18n/index.ts
index c1c06b62c3..c5605734c2 100644
--- a/src/containers/Storage/i18n/index.ts
+++ b/src/containers/Storage/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../utils/i18n';
+import {registerKeysets} from '../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-storage';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/containers/Storage/shared.ts b/src/containers/Storage/shared.ts
index dee29330e1..be94080698 100644
--- a/src/containers/Storage/shared.ts
+++ b/src/containers/Storage/shared.ts
@@ -1,3 +1,3 @@
-import cn from 'bem-cn-lite';
+import {cn} from '../../utils/cn';
export const b = cn('global-storage');
diff --git a/src/containers/Tablet/Tablet.tsx b/src/containers/Tablet/Tablet.tsx
index 7c4c99851a..ef67270518 100644
--- a/src/containers/Tablet/Tablet.tsx
+++ b/src/containers/Tablet/Tablet.tsx
@@ -1,29 +1,27 @@
-import {useCallback, useEffect, useRef} from 'react';
-import {useLocation, useParams} from 'react-router';
-import cn from 'bem-cn-lite';
+import React from 'react';
+
import {Link as ExternalLink} from '@gravity-ui/uikit';
import {Helmet} from 'react-helmet-async';
+import {useLocation, useParams} from 'react-router';
-import {backend} from '../../store';
-import {getTablet, getTabletDescribe, clearTabletData} from '../../store/reducers/tablet';
-import {setHeaderBreadcrumbs} from '../../store/reducers/header/header';
-
-import {useAutofetcher, useTypedSelector, useTypedDispatch} from '../../utils/hooks';
-import {CLUSTER_DEFAULT_TITLE, DEVELOPER_UI_TITLE} from '../../utils/constants';
-import {parseQuery} from '../../routes';
-
-import type {EType} from '../../types/api/tablet';
+import {EmptyState} from '../../components/EmptyState';
import {EntityStatus} from '../../components/EntityStatus/EntityStatus';
import {ResponseError} from '../../components/Errors/ResponseError';
-import {Tag} from '../../components/Tag';
import {Icon} from '../../components/Icon';
-import {EmptyState} from '../../components/EmptyState';
import {Loader} from '../../components/Loader';
+import {Tag} from '../../components/Tag';
+import {parseQuery} from '../../routes';
+import {backend} from '../../store';
+import {setHeaderBreadcrumbs} from '../../store/reducers/header/header';
+import {clearTabletData, getTablet, getTabletDescribe} from '../../store/reducers/tablet';
+import type {EType} from '../../types/api/tablet';
+import {cn} from '../../utils/cn';
+import {CLUSTER_DEFAULT_TITLE, DEVELOPER_UI_TITLE} from '../../utils/constants';
+import {useAutofetcher, useTypedDispatch, useTypedSelector} from '../../utils/hooks';
-import {TabletTable} from './TabletTable';
-import {TabletInfo} from './TabletInfo';
import {TabletControls} from './TabletControls';
-
+import {TabletInfo} from './TabletInfo';
+import {TabletTable} from './TabletTable';
import i18n from './i18n';
import './Tablet.scss';
@@ -31,7 +29,7 @@ import './Tablet.scss';
export const b = cn('tablet-page');
export const Tablet = () => {
- const isFirstDataFetchRef = useRef(true);
+ const isFirstDataFetchRef = React.useRef(true);
const dispatch = useTypedDispatch();
const location = useLocation();
@@ -59,26 +57,26 @@ export const Tablet = () => {
const type = tablet.Type || (queryTabletType?.toString() as EType | undefined);
// NOTE: should be reviewed when migrating to React 18
- useEffect(() => {
+ React.useEffect(() => {
return () => {
dispatch(clearTabletData());
};
}, [dispatch]);
- useEffect(() => {
+ React.useEffect(() => {
if (isFirstDataFetchRef.current && tablet && tablet.TenantId) {
dispatch(getTabletDescribe(tablet.TenantId));
isFirstDataFetchRef.current = false;
}
}, [dispatch, tablet]);
- const fetchData = useCallback(() => {
+ const fetchData = React.useCallback(() => {
return dispatch(getTablet(id));
}, [dispatch, id]);
useAutofetcher(fetchData, [fetchData], true);
- useEffect(() => {
+ React.useEffect(() => {
dispatch(
setHeaderBreadcrumbs('tablet', {
nodeIds: nodeId ? [nodeId] : [],
@@ -155,13 +153,13 @@ export const Tablet = () => {
);
};
return (
- <>
+
{`${id} — ${i18n('tablet.header')} — ${
tenantName || queryClusterName || CLUSTER_DEFAULT_TITLE
}`}
{renderView()}
- >
+
);
};
diff --git a/src/containers/Tablet/TabletControls/TabletControls.tsx b/src/containers/Tablet/TabletControls/TabletControls.tsx
index a82a777178..c9f7a9b514 100644
--- a/src/containers/Tablet/TabletControls/TabletControls.tsx
+++ b/src/containers/Tablet/TabletControls/TabletControls.tsx
@@ -1,9 +1,11 @@
-import {ETabletState, type TTabletStateInfo} from '../../../types/api/tablet';
-import type {ITabletHandledResponse} from '../../../types/store/tablet';
-import {ButtonWithConfirmDialog} from '../../../components/ButtonWithConfirmDialog/ButtonWithConfirmDialog';
+import React from 'react';
-import i18n from '../i18n';
+import {ButtonWithConfirmDialog} from '../../../components/ButtonWithConfirmDialog/ButtonWithConfirmDialog';
+import {ETabletState} from '../../../types/api/tablet';
+import type {TTabletStateInfo} from '../../../types/api/tablet';
+import type {ITabletHandledResponse} from '../../../types/store/tablet';
import {b} from '../Tablet';
+import i18n from '../i18n';
interface TabletControlsProps {
tablet: TTabletStateInfo;
@@ -47,7 +49,7 @@ export const TabletControls = ({tablet, fetchData}: TabletControlsProps) => {
{i18n('controls.kill')}
{hasHiveId() ? (
- <>
+
{
>
{i18n('controls.resume')}
- >
+
) : null}
);
diff --git a/src/containers/Tablet/TabletInfo/TabletInfo.tsx b/src/containers/Tablet/TabletInfo/TabletInfo.tsx
index 8fd2f264eb..9577cf95e3 100644
--- a/src/containers/Tablet/TabletInfo/TabletInfo.tsx
+++ b/src/containers/Tablet/TabletInfo/TabletInfo.tsx
@@ -1,13 +1,13 @@
-import {Link} from 'react-router-dom';
-
import {Link as UIKitLink} from '@gravity-ui/uikit';
+import {Link} from 'react-router-dom';
-import {ETabletState, TTabletStateInfo} from '../../../types/api/tablet';
-import {InfoViewer, InfoViewerItem} from '../../../components/InfoViewer';
+import type {InfoViewerItem} from '../../../components/InfoViewer';
+import {InfoViewer} from '../../../components/InfoViewer';
import routes, {createHref} from '../../../routes';
+import {ETabletState} from '../../../types/api/tablet';
+import type {TTabletStateInfo} from '../../../types/api/tablet';
import {calcUptime} from '../../../utils/dataFormatters/dataFormatters';
import {getDefaultNodePath} from '../../Node/NodePages';
-
import {b} from '../Tablet';
interface TabletInfoProps {
diff --git a/src/containers/Tablet/TabletTable/TabletTable.tsx b/src/containers/Tablet/TabletTable/TabletTable.tsx
index 5f64e3e278..91d8cd8cea 100644
--- a/src/containers/Tablet/TabletTable/TabletTable.tsx
+++ b/src/containers/Tablet/TabletTable/TabletTable.tsx
@@ -1,12 +1,11 @@
-import DataTable, {Column} from '@gravity-ui/react-data-table';
+import type {Column} from '@gravity-ui/react-data-table';
+import DataTable from '@gravity-ui/react-data-table';
import {EntityStatus} from '../../../components/EntityStatus/EntityStatus';
import {InternalLink} from '../../../components/InternalLink/InternalLink';
-
import type {ITabletPreparedHistoryItem} from '../../../types/store/tablet';
import {calcUptime} from '../../../utils/dataFormatters/dataFormatters';
import {getDefaultNodePath} from '../../Node/NodePages';
-
import {b} from '../Tablet';
const columns: Column
[] = [
diff --git a/src/containers/Tablets/Tablets.scss b/src/containers/Tablets/Tablets.scss
index 6f6aa61c11..9ef4c0786d 100644
--- a/src/containers/Tablets/Tablets.scss
+++ b/src/containers/Tablets/Tablets.scss
@@ -5,9 +5,8 @@
&__header {
display: flex;
- gap: 12px;
-
align-items: center;
+ gap: 12px;
margin-bottom: 16px;
}
diff --git a/src/containers/Tablets/Tablets.tsx b/src/containers/Tablets/Tablets.tsx
index e188adc4f0..e41307035d 100644
--- a/src/containers/Tablets/Tablets.tsx
+++ b/src/containers/Tablets/Tablets.tsx
@@ -1,27 +1,25 @@
-import {useCallback, useEffect, useMemo, useState} from 'react';
-import cn from 'bem-cn-lite';
-import ReactList from 'react-list';
+import React from 'react';
import {Select} from '@gravity-ui/uikit';
+import ReactList from 'react-list';
+import {Loader} from '../../components/Loader';
import {Tablet} from '../../components/Tablet';
import TabletsOverall from '../../components/TabletsOverall/TabletsOverall';
-import {Loader} from '../../components/Loader';
-
-import {useAutofetcher, useTypedSelector, useTypedDispatch} from '../../utils/hooks';
-import {ETabletState, EType, TTabletStateInfo} from '../../types/api/tablet';
-
import {
- getTabletsInfo,
clearWasLoadingFlag,
+ getTabletsInfo,
setStateFilter,
setTypeFilter,
} from '../../store/reducers/tablets';
-
-import './Tablets.scss';
+import type {ETabletState, EType, TTabletStateInfo} from '../../types/api/tablet';
+import {cn} from '../../utils/cn';
+import {useAutofetcher, useTypedDispatch, useTypedSelector} from '../../utils/hooks';
import i18n from './i18n';
+import './Tablets.scss';
+
const b = cn('tablets');
interface TabletsProps {
@@ -38,10 +36,10 @@ export const Tablets = ({path, nodeId, className}: TabletsProps) => {
);
const {autorefresh} = useTypedSelector((state) => state.schema);
- const tablets = useMemo(() => data?.TabletStateInfo || [], [data]);
+ const tablets = React.useMemo(() => data?.TabletStateInfo || [], [data]);
- const fetchData = useCallback(
- (isBackground) => {
+ const fetchData = React.useCallback(
+ (isBackground: boolean) => {
if (!isBackground) {
dispatch(clearWasLoadingFlag());
}
@@ -56,9 +54,9 @@ export const Tablets = ({path, nodeId, className}: TabletsProps) => {
useAutofetcher(fetchData, [fetchData], autorefresh);
- const [tabletsToRender, setTabletsToRender] = useState([]);
+ const [tabletsToRender, setTabletsToRender] = React.useState([]);
- useEffect(() => {
+ React.useEffect(() => {
let filteredTablets = tablets;
if (typeFilter.length > 0) {
diff --git a/src/containers/Tablets/i18n/index.ts b/src/containers/Tablets/i18n/index.ts
index 8fa6ea8ee7..4fbb01e210 100644
--- a/src/containers/Tablets/i18n/index.ts
+++ b/src/containers/Tablets/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../utils/i18n';
+import {registerKeysets} from '../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-tablets';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/containers/TabletsFilters/TabletsFilters.js b/src/containers/TabletsFilters/TabletsFilters.js
index 44c7d83b99..57ce1a94f9 100644
--- a/src/containers/TabletsFilters/TabletsFilters.js
+++ b/src/containers/TabletsFilters/TabletsFilters.js
@@ -1,29 +1,29 @@
import React from 'react';
-import PropTypes from 'prop-types';
-import {connect} from 'react-redux';
-import cn from 'bem-cn-lite';
-import map from 'lodash/map';
-import isEqual from 'lodash/isEqual';
-import {Helmet} from 'react-helmet-async';
import {Loader, Select} from '@gravity-ui/uikit';
+import isEqual from 'lodash/isEqual';
+import map from 'lodash/map';
+import PropTypes from 'prop-types';
+import {Helmet} from 'react-helmet-async';
import ReactList from 'react-list';
+import {connect} from 'react-redux';
-import {Tablet} from '../../components/Tablet';
import {AccessDenied} from '../../components/Errors/403';
-
+import {Tablet} from '../../components/Tablet';
+import {parseQuery} from '../../routes';
import {setHeaderBreadcrumbs} from '../../store/reducers/header/header';
-import {tabletColorToTabletState, tabletStates} from '../../utils/tablet';
import {
- getTabletsInfo,
clearWasLoadingFlag,
- setStateFilter,
- setTypeFilter,
getFilteredTablets,
getTablets,
+ getTabletsInfo,
+ setStateFilter,
+ setTypeFilter,
} from '../../store/reducers/tabletsFilters';
-import {parseQuery} from '../../routes';
+import {cn} from '../../utils/cn';
import {CLUSTER_DEFAULT_TITLE} from '../../utils/constants';
+import {tabletColorToTabletState, tabletStates} from '../../utils/tablet';
+
import i18n from './i18n';
import './TabletsFilters.scss';
@@ -185,9 +185,9 @@ export class TabletsFilters extends React.Component {
{tenantPath ? (
- <>
+
Database: {tenantPath}
- >
+
) : null}
+
{`${i18n('page.title')} — ${
tenantPath || clusterName || CLUSTER_DEFAULT_TITLE
}`}
{this.renderView()}
- >
+
);
}
}
diff --git a/src/containers/Tenant/Acl/Acl.tsx b/src/containers/Tenant/Acl/Acl.tsx
index da4e7b62e3..3dafd055a1 100644
--- a/src/containers/Tenant/Acl/Acl.tsx
+++ b/src/containers/Tenant/Acl/Acl.tsx
@@ -1,18 +1,18 @@
-import {useEffect} from 'react';
-import cn from 'bem-cn-lite';
+import React from 'react';
-import DataTable, {Column} from '@gravity-ui/react-data-table';
-
-import type {TACE} from '../../../types/api/acl';
-import {DEFAULT_TABLE_SETTINGS} from '../../../utils/constants';
-import {useTypedSelector, useTypedDispatch} from '../../../utils/hooks';
-import {getSchemaAcl, setAclWasNotLoaded} from '../../../store/reducers/schemaAcl/schemaAcl';
+import type {Column} from '@gravity-ui/react-data-table';
+import DataTable from '@gravity-ui/react-data-table';
import {ResponseError} from '../../../components/Errors/ResponseError';
import {Loader} from '../../../components/Loader';
+import {getSchemaAcl, setAclWasNotLoaded} from '../../../store/reducers/schemaAcl/schemaAcl';
+import type {TACE} from '../../../types/api/acl';
+import {cn} from '../../../utils/cn';
+import {DEFAULT_TABLE_SETTINGS} from '../../../utils/constants';
+import {useTypedDispatch, useTypedSelector} from '../../../utils/hooks';
+import i18n from '../i18n';
import './Acl.scss';
-import i18n from '../i18n';
const b = cn('ydb-acl');
@@ -74,7 +74,7 @@ export const Acl = () => {
const {currentSchemaPath} = useTypedSelector((state) => state.schema);
const {loading, error, acl, owner, wasLoaded} = useTypedSelector((state) => state.schemaAcl);
- useEffect(() => {
+ React.useEffect(() => {
if (currentSchemaPath) {
dispatch(getSchemaAcl({path: currentSchemaPath}));
}
diff --git a/src/containers/Tenant/Diagnostics/Consumers/Consumers.tsx b/src/containers/Tenant/Diagnostics/Consumers/Consumers.tsx
index 69c28297a1..b9d6eca593 100644
--- a/src/containers/Tenant/Diagnostics/Consumers/Consumers.tsx
+++ b/src/containers/Tenant/Diagnostics/Consumers/Consumers.tsx
@@ -1,35 +1,30 @@
-import {useCallback, useMemo, useState} from 'react';
-import block from 'bem-cn-lite';
-import escapeRegExp from 'lodash/escapeRegExp';
+import React from 'react';
import DataTable from '@gravity-ui/react-data-table';
+import escapeRegExp from 'lodash/escapeRegExp';
-import type {EPathType} from '../../../../types/api/schema';
-
+import {ResponseError} from '../../../../components/Errors/ResponseError';
import {Loader} from '../../../../components/Loader';
import {Search} from '../../../../components/Search';
-import {ResponseError} from '../../../../components/Errors/ResponseError';
-
-import {useAutofetcher, useTypedSelector, useTypedDispatch} from '../../../../utils/hooks';
-import {DEFAULT_TABLE_SETTINGS} from '../../../../utils/constants';
-
import {
+ getTopic,
selectPreparedConsumersData,
selectPreparedTopicStats,
- getTopic,
setDataWasNotLoaded,
} from '../../../../store/reducers/topic';
-
+import type {EPathType} from '../../../../types/api/schema';
+import {cn} from '../../../../utils/cn';
+import {DEFAULT_TABLE_SETTINGS} from '../../../../utils/constants';
+import {useAutofetcher, useTypedDispatch, useTypedSelector} from '../../../../utils/hooks';
import {isCdcStreamEntityType} from '../../utils/schema';
import {ConsumersTopicStats} from './TopicStats';
import {columns} from './columns';
-
import i18n from './i18n';
import './Consumers.scss';
-const b = block('ydb-diagnostics-consumers');
+const b = cn('ydb-diagnostics-consumers');
interface ConsumersProps {
path: string;
@@ -41,7 +36,7 @@ export const Consumers = ({path, type}: ConsumersProps) => {
const dispatch = useTypedDispatch();
- const [searchValue, setSearchValue] = useState('');
+ const [searchValue, setSearchValue] = React.useState('');
const {autorefresh} = useTypedSelector((state) => state.schema);
const {loading, wasLoaded, error} = useTypedSelector((state) => state.topic);
@@ -49,8 +44,8 @@ export const Consumers = ({path, type}: ConsumersProps) => {
const consumers = useTypedSelector((state) => selectPreparedConsumersData(state));
const topic = useTypedSelector((state) => selectPreparedTopicStats(state));
- const fetchData = useCallback(
- (isBackground) => {
+ const fetchData = React.useCallback(
+ (isBackground: boolean) => {
if (!isBackground) {
dispatch(setDataWasNotLoaded);
}
@@ -62,7 +57,7 @@ export const Consumers = ({path, type}: ConsumersProps) => {
useAutofetcher(fetchData, [fetchData], autorefresh);
- const dataToRender = useMemo(() => {
+ const dataToRender = React.useMemo(() => {
if (!consumers) {
return [];
}
diff --git a/src/containers/Tenant/Diagnostics/Consumers/Headers/Headers.tsx b/src/containers/Tenant/Diagnostics/Consumers/Headers/Headers.tsx
index a52b6f66b0..9fdcb1362e 100644
--- a/src/containers/Tenant/Diagnostics/Consumers/Headers/Headers.tsx
+++ b/src/containers/Tenant/Diagnostics/Consumers/Headers/Headers.tsx
@@ -1,15 +1,12 @@
-import block from 'bem-cn-lite';
-
import {LabelWithPopover} from '../../../../../components/LabelWithPopover';
import {LagPopoverContent} from '../../../../../components/LagPopoverContent';
-
-import {CONSUMERS_COLUMNS_IDS, CONSUMERS_COLUMNS_TITILES} from '../utils/constants';
-
+import {cn} from '../../../../../utils/cn';
import i18n from '../i18n';
+import {CONSUMERS_COLUMNS_IDS, CONSUMERS_COLUMNS_TITILES} from '../utils/constants';
import './Headers.scss';
-const b = block('ydb-diagnostics-consumers-columns-header');
+const b = cn('ydb-diagnostics-consumers-columns-header');
export const ReadLagsHeader = () => (
[] = [
{
diff --git a/src/containers/Tenant/Diagnostics/Consumers/i18n/index.ts b/src/containers/Tenant/Diagnostics/Consumers/i18n/index.ts
index eae471d108..5495a1e6c7 100644
--- a/src/containers/Tenant/Diagnostics/Consumers/i18n/index.ts
+++ b/src/containers/Tenant/Diagnostics/Consumers/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../../../utils/i18n';
+import {registerKeysets} from '../../../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-diagnostics-consumers';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/containers/Tenant/Diagnostics/Describe/Describe.tsx b/src/containers/Tenant/Diagnostics/Describe/Describe.tsx
index 08b34ab4d0..cc55b51ec3 100644
--- a/src/containers/Tenant/Diagnostics/Describe/Describe.tsx
+++ b/src/containers/Tenant/Diagnostics/Describe/Describe.tsx
@@ -1,25 +1,24 @@
-import {useCallback, useEffect, useState} from 'react';
-import {shallowEqual} from 'react-redux';
-import cn from 'bem-cn-lite';
+import React from 'react';
+
import JSONTree from 'react-json-inspector';
-import 'react-json-inspector/json-inspector.css';
+import {shallowEqual} from 'react-redux';
-import {Loader} from '../../../../components/Loader';
import {ResponseError} from '../../../../components/Errors/ResponseError';
-
-import {useAutofetcher, useTypedSelector, useTypedDispatch} from '../../../../utils/hooks';
+import {Loader} from '../../../../components/Loader';
import {
getDescribe,
- setDataWasNotLoaded,
- setCurrentDescribePath,
getDescribeBatched,
+ setCurrentDescribePath,
+ setDataWasNotLoaded,
} from '../../../../store/reducers/describe';
import {selectSchemaMergedChildrenPaths} from '../../../../store/reducers/schema/schema';
import type {EPathType} from '../../../../types/api/schema';
-
+import {cn} from '../../../../utils/cn';
+import {useAutofetcher, useTypedDispatch, useTypedSelector} from '../../../../utils/hooks';
import {isEntityWithMergedImplementation} from '../../utils/schema';
import './Describe.scss';
+import 'react-json-inspector/json-inspector.css';
const b = cn('kv-describe');
@@ -37,9 +36,9 @@ const Describe = ({tenant, type}: IDescribeProps) => {
(state) => state.describe,
);
- const [preparedDescribeData, setPreparedDescribeData] = useState
}
diff --git a/src/containers/Tenant/Diagnostics/Partitions/Partitions.tsx b/src/containers/Tenant/Diagnostics/Partitions/Partitions.tsx
index 60ddba157a..0e914a9a7a 100644
--- a/src/containers/Tenant/Diagnostics/Partitions/Partitions.tsx
+++ b/src/containers/Tenant/Diagnostics/Partitions/Partitions.tsx
@@ -1,42 +1,39 @@
-import block from 'bem-cn-lite';
-import {useCallback, useEffect, useMemo, useState} from 'react';
+import React from 'react';
import DataTable from '@gravity-ui/react-data-table';
-import {
- useAutofetcher,
- useTypedSelector,
- useTypedDispatch,
- useSetting,
-} from '../../../../utils/hooks';
-import {DEFAULT_TABLE_SETTINGS, PARTITIONS_HIDDEN_COLUMNS_KEY} from '../../../../utils/constants';
-
+import {ResponseError} from '../../../../components/Errors/ResponseError';
+import {TableSkeleton} from '../../../../components/TableSkeleton/TableSkeleton';
import {selectNodesMap} from '../../../../store/reducers/nodesList';
+import {
+ getPartitions,
+ setDataWasNotLoaded as setPartitionsDataWasNotLoaded,
+ setSelectedConsumer,
+} from '../../../../store/reducers/partitions/partitions';
import {
cleanTopicData,
getTopic,
selectConsumersNames,
setDataWasNotLoaded as setTopicDataWasNotLoaded,
} from '../../../../store/reducers/topic';
+import {cn} from '../../../../utils/cn';
+import {DEFAULT_TABLE_SETTINGS, PARTITIONS_HIDDEN_COLUMNS_KEY} from '../../../../utils/constants';
import {
- getPartitions,
- setDataWasNotLoaded as setPartitionsDataWasNotLoaded,
- setSelectedConsumer,
-} from '../../../../store/reducers/partitions/partitions';
-
-import {TableSkeleton} from '../../../../components/TableSkeleton/TableSkeleton';
-import {ResponseError} from '../../../../components/Errors/ResponseError';
+ useAutofetcher,
+ useSetting,
+ useTypedDispatch,
+ useTypedSelector,
+} from '../../../../utils/hooks';
-import type {PreparedPartitionDataWithHosts} from './utils/types';
-import {addHostToPartitions} from './utils';
import {PartitionsControls} from './PartitionsControls/PartitionsControls';
-import {useGetPartitionsColumns} from './utils/useGetPartitionsColumns';
-
import i18n from './i18n';
+import {addHostToPartitions} from './utils';
+import type {PreparedPartitionDataWithHosts} from './utils/types';
+import {useGetPartitionsColumns} from './utils/useGetPartitionsColumns';
import './Partitions.scss';
-export const b = block('ydb-diagnostics-partitions');
+export const b = cn('ydb-diagnostics-partitions');
interface PartitionsProps {
path?: string;
@@ -47,11 +44,11 @@ export const Partitions = ({path}: PartitionsProps) => {
// Manual path control to ensure that topic state will be reset before data fetch
// so no request with wrong params will be sent
- const [componentCurrentPath, setComponentCurrentPath] = useState(path);
+ const [componentCurrentPath, setComponentCurrentPath] = React.useState(path);
- const [partitionsToRender, setPartitionsToRender] = useState(
- [],
- );
+ const [partitionsToRender, setPartitionsToRender] = React.useState<
+ PreparedPartitionDataWithHosts[]
+ >([]);
const consumers = useTypedSelector(selectConsumersNames);
const nodesMap = useTypedSelector(selectNodesMap);
@@ -78,7 +75,7 @@ export const Partitions = ({path}: PartitionsProps) => {
const [columns, columnsIdsForSelector] = useGetPartitionsColumns(selectedConsumer);
- useEffect(() => {
+ React.useEffect(() => {
dispatch(cleanTopicData());
dispatch(setTopicDataWasNotLoaded());
@@ -87,11 +84,11 @@ export const Partitions = ({path}: PartitionsProps) => {
setComponentCurrentPath(path);
}, [dispatch, path]);
- const partitionsWithHosts = useMemo(() => {
+ const partitionsWithHosts = React.useMemo(() => {
return addHostToPartitions(rawPartitions, nodesMap);
}, [rawPartitions, nodesMap]);
- const fetchData = useCallback(
+ const fetchData = React.useCallback(
(isBackground: boolean) => {
if (!isBackground) {
dispatch(setPartitionsDataWasNotLoaded());
@@ -107,7 +104,7 @@ export const Partitions = ({path}: PartitionsProps) => {
// Wrong consumer could be passed in search query
// Reset consumer if it doesn't exist for current topic
- useEffect(() => {
+ React.useEffect(() => {
const isTopicWithoutConsumers = topicWasLoaded && !consumers;
const wrongSelectedConsumer =
selectedConsumer && consumers && !consumers.includes(selectedConsumer);
@@ -117,7 +114,7 @@ export const Partitions = ({path}: PartitionsProps) => {
}
}, [dispatch, topicWasLoaded, selectedConsumer, consumers]);
- const columnsToShow = useMemo(() => {
+ const columnsToShow = React.useMemo(() => {
return columns.filter((column) => !hiddenColumns.includes(column.name));
}, [columns, hiddenColumns]);
diff --git a/src/containers/Tenant/Diagnostics/Partitions/PartitionsControls/PartitionsControls.tsx b/src/containers/Tenant/Diagnostics/Partitions/PartitionsControls/PartitionsControls.tsx
index 67067282a5..3348ebb9fc 100644
--- a/src/containers/Tenant/Diagnostics/Partitions/PartitionsControls/PartitionsControls.tsx
+++ b/src/containers/Tenant/Diagnostics/Partitions/PartitionsControls/PartitionsControls.tsx
@@ -1,17 +1,15 @@
-import {useEffect, useMemo, useState} from 'react';
-import escapeRegExp from 'lodash/escapeRegExp';
-
-import {TableColumnSetupItem} from '@gravity-ui/uikit/build/esm/components/Table/hoc/withTableSettings/withTableSettings';
-import {Select, SelectOption, TableColumnSetup} from '@gravity-ui/uikit';
+import React from 'react';
-import type {ValueOf} from '../../../../../types/common';
+import type {SelectOption, TableColumnSetupItem, TableColumnSetupProps} from '@gravity-ui/uikit';
+import {Select, TableColumnSetup} from '@gravity-ui/uikit';
+import escapeRegExp from 'lodash/escapeRegExp';
import {Search} from '../../../../../components/Search/Search';
-
-import type {PreparedPartitionDataWithHosts} from '../utils/types';
-import {PARTITIONS_COLUMNS_IDS, PARTITIONS_COLUMNS_TITILES} from '../utils/constants';
-import i18n from '../i18n';
+import type {ValueOf} from '../../../../../types/common';
import {b} from '../Partitions';
+import i18n from '../i18n';
+import {PARTITIONS_COLUMNS_IDS, PARTITIONS_COLUMNS_TITLES} from '../utils/constants';
+import type {PreparedPartitionDataWithHosts} from '../utils/types';
interface PartitionsControlsProps {
consumers: string[] | undefined;
@@ -36,10 +34,10 @@ export const PartitionsControls = ({
onHiddenColumnsChange,
initialColumnsIds,
}: PartitionsControlsProps) => {
- const [generalSearchValue, setGeneralSearchValue] = useState('');
- const [partitionIdSearchValue, setPartitionIdSearchValue] = useState('');
+ const [generalSearchValue, setGeneralSearchValue] = React.useState('');
+ const [partitionIdSearchValue, setPartitionIdSearchValue] = React.useState('');
- useEffect(() => {
+ React.useEffect(() => {
if (!partitions) {
return;
}
@@ -80,7 +78,7 @@ export const PartitionsControls = ({
onSearchChange(filteredPartitions);
}, [partitionIdSearchValue, generalSearchValue, partitions, onSearchChange]);
- const consumersToSelect = useMemo(() => {
+ const consumersToSelect = React.useMemo(() => {
const options =
consumers && consumers.length
? consumers.map((consumer) => ({
@@ -92,15 +90,24 @@ export const PartitionsControls = ({
return [{value: '', content: i18n('controls.consumerSelector.emptyOption')}, ...options];
}, [consumers]);
- const columnsToSelect = useMemo(() => {
- return initialColumnsIds.map((id) => {
- return {
- title: PARTITIONS_COLUMNS_TITILES[id as ValueOf],
+ const columnsToSelect = React.useMemo(() => {
+ const columns: TableColumnSetupItem[] = [];
+ for (const id of initialColumnsIds) {
+ const isId = id === PARTITIONS_COLUMNS_IDS.PARTITION_ID;
+ const column: TableColumnSetupItem = {
+ title: PARTITIONS_COLUMNS_TITLES[id as ValueOf],
selected: Boolean(!hiddenColumns.includes(id)),
id: id,
- required: id === PARTITIONS_COLUMNS_IDS.PARTITION_ID,
+ required: isId,
+ sticky: isId ? 'start' : undefined,
};
- });
+ if (isId) {
+ columns.unshift(column);
+ } else {
+ columns.push(column);
+ }
+ }
+ return columns;
}, [initialColumnsIds, hiddenColumns]);
const handleConsumerSelectChange = (value: string[]) => {
@@ -115,7 +122,7 @@ export const PartitionsControls = ({
setGeneralSearchValue(value);
};
- const hadleTableColumnsSetupChange = (value: TableColumnSetupItem[]) => {
+ const handleTableColumnsSetupChange: TableColumnSetupProps['onUpdate'] = (value) => {
const result = [...hiddenColumns];
// Process current set of columns
@@ -165,10 +172,11 @@ export const PartitionsControls = ({
/>
);
diff --git a/src/containers/Tenant/Diagnostics/Partitions/columns/columns.tsx b/src/containers/Tenant/Diagnostics/Partitions/columns/columns.tsx
index 1067e0573b..a076a983b4 100644
--- a/src/containers/Tenant/Diagnostics/Partitions/columns/columns.tsx
+++ b/src/containers/Tenant/Diagnostics/Partitions/columns/columns.tsx
@@ -1,15 +1,23 @@
-import DataTable, {Column} from '@gravity-ui/react-data-table';
-import block from 'bem-cn-lite';
+import type {Column} from '@gravity-ui/react-data-table';
+import DataTable from '@gravity-ui/react-data-table';
-import {SpeedMultiMeter} from '../../../../../components/SpeedMultiMeter';
import {EntityStatus} from '../../../../../components/EntityStatus/EntityStatus';
-import {getDefaultNodePath} from '../../../../Node/NodePages';
+import {SpeedMultiMeter} from '../../../../../components/SpeedMultiMeter';
+import {cn} from '../../../../../utils/cn';
import {formatBytes, formatMsToUptime} from '../../../../../utils/dataFormatters/dataFormatters';
import {isNumeric} from '../../../../../utils/utils';
-
+import {getDefaultNodePath} from '../../../../Node/NodePages';
+import {
+ MultilineHeader,
+ ReadLagsHeader,
+ ReadSessionHeader,
+ UncommitedMessagesHeader,
+ UnreadMessagesHeader,
+ WriteLagsHeader,
+} from '../Headers';
import {
PARTITIONS_COLUMNS_IDS,
- PARTITIONS_COLUMNS_TITILES,
+ PARTITIONS_COLUMNS_TITLES,
PARTITIONS_READ_LAGS_SUB_COLUMNS_IDS,
PARTITIONS_READ_LAGS_SUB_COLUMNS_TITLES,
PARTITIONS_WRITE_LAGS_SUB_COLUMNS_IDS,
@@ -18,25 +26,16 @@ import {
} from '../utils/constants';
import type {PreparedPartitionDataWithHosts} from '../utils/types';
-import {
- MultilineHeader,
- ReadLagsHeader,
- ReadSessionHeader,
- UncommitedMessagesHeader,
- UnreadMessagesHeader,
- WriteLagsHeader,
-} from '../Headers';
-
import './Columns.scss';
-const b = block('ydb-diagnostics-partitions-columns');
+const b = cn('ydb-diagnostics-partitions-columns');
export const allColumns: Column[] = [
{
name: PARTITIONS_COLUMNS_IDS.PARTITION_ID,
header: (
),
sortAccessor: (row) => isNumeric(row.partitionId) && Number(row.partitionId),
@@ -46,23 +45,21 @@ export const allColumns: Column[] = [
{
name: PARTITIONS_COLUMNS_IDS.STORE_SIZE,
header: (
-
+
),
align: DataTable.RIGHT,
render: ({row}) => formatBytes(row.storeSize),
},
{
name: PARTITIONS_COLUMNS_IDS.WRITE_SPEED,
- header: PARTITIONS_COLUMNS_TITILES[PARTITIONS_COLUMNS_IDS.WRITE_SPEED],
+ header: PARTITIONS_COLUMNS_TITLES[PARTITIONS_COLUMNS_IDS.WRITE_SPEED],
align: DataTable.LEFT,
sortAccessor: (row) => row.writeSpeed.perMinute,
render: ({row}) => ,
},
{
name: PARTITIONS_COLUMNS_IDS.READ_SPEED,
- header: PARTITIONS_COLUMNS_TITILES[PARTITIONS_COLUMNS_IDS.READ_SPEED],
+ header: PARTITIONS_COLUMNS_TITLES[PARTITIONS_COLUMNS_IDS.READ_SPEED],
align: DataTable.LEFT,
sortAccessor: (row) => row.readSpeed?.perMinute,
render: ({row}) => ,
@@ -137,7 +134,7 @@ export const allColumns: Column[] = [
name: PARTITIONS_COLUMNS_IDS.START_OFFSET,
header: (
),
sortAccessor: (row) => isNumeric(row.startOffset) && Number(row.startOffset),
@@ -147,9 +144,7 @@ export const allColumns: Column[] = [
{
name: PARTITIONS_COLUMNS_IDS.END_OFFSET,
header: (
-
+
),
sortAccessor: (row) => isNumeric(row.endOffset) && Number(row.endOffset),
align: DataTable.RIGHT,
@@ -159,7 +154,7 @@ export const allColumns: Column[] = [
name: PARTITIONS_COLUMNS_IDS.COMMITED_OFFSET,
header: (
),
sortAccessor: (row) => isNumeric(row.commitedOffset) && Number(row.commitedOffset),
@@ -186,7 +181,7 @@ export const allColumns: Column[] = [
name: PARTITIONS_COLUMNS_IDS.READER_NAME,
header: (
),
align: DataTable.LEFT,
@@ -206,7 +201,7 @@ export const allColumns: Column[] = [
name: PARTITIONS_COLUMNS_IDS.PARTITION_HOST,
header: (
),
align: DataTable.LEFT,
@@ -227,7 +222,7 @@ export const allColumns: Column[] = [
name: PARTITIONS_COLUMNS_IDS.CONNECTION_HOST,
header: (
),
align: DataTable.LEFT,
@@ -250,6 +245,6 @@ export const allColumns: Column[] = [
// These columns will be empty and should not be displayed
export const generalColumns = allColumns.filter((column) => {
return generalPartitionColumnsIds.includes(
- column.name as typeof generalPartitionColumnsIds[number],
+ column.name as (typeof generalPartitionColumnsIds)[number],
);
});
diff --git a/src/containers/Tenant/Diagnostics/Partitions/i18n/index.ts b/src/containers/Tenant/Diagnostics/Partitions/i18n/index.ts
index 41e09632d0..bd62098dc7 100644
--- a/src/containers/Tenant/Diagnostics/Partitions/i18n/index.ts
+++ b/src/containers/Tenant/Diagnostics/Partitions/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../../../utils/i18n';
+import {registerKeysets} from '../../../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-diagnostics-partitions';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/containers/Tenant/Diagnostics/Partitions/utils/constants.ts b/src/containers/Tenant/Diagnostics/Partitions/utils/constants.ts
index 0e12fc67cc..c4195b6067 100644
--- a/src/containers/Tenant/Diagnostics/Partitions/utils/constants.ts
+++ b/src/containers/Tenant/Diagnostics/Partitions/utils/constants.ts
@@ -23,7 +23,7 @@ export const PARTITIONS_COLUMNS_IDS = {
CONNECTION_HOST: 'connectionHost',
} as const;
-export const PARTITIONS_COLUMNS_TITILES = {
+export const PARTITIONS_COLUMNS_TITLES = {
[PARTITIONS_COLUMNS_IDS.PARTITION_ID]: 'Partition ID',
[PARTITIONS_COLUMNS_IDS.STORE_SIZE]: 'Store size',
diff --git a/src/containers/Tenant/Diagnostics/Partitions/utils/index.ts b/src/containers/Tenant/Diagnostics/Partitions/utils/index.ts
index 89f164d718..982cb89a0d 100644
--- a/src/containers/Tenant/Diagnostics/Partitions/utils/index.ts
+++ b/src/containers/Tenant/Diagnostics/Partitions/utils/index.ts
@@ -1,5 +1,6 @@
import type {PreparedPartitionData} from '../../../../../store/reducers/partitions/types';
import type {NodesMap} from '../../../../../types/store/nodesList';
+
import type {PreparedPartitionDataWithHosts} from './types';
export const addHostToPartitions = (
diff --git a/src/containers/Tenant/Diagnostics/Partitions/utils/useGetPartitionsColumns.ts b/src/containers/Tenant/Diagnostics/Partitions/utils/useGetPartitionsColumns.ts
index 64a90653e6..5b83a47813 100644
--- a/src/containers/Tenant/Diagnostics/Partitions/utils/useGetPartitionsColumns.ts
+++ b/src/containers/Tenant/Diagnostics/Partitions/utils/useGetPartitionsColumns.ts
@@ -1,19 +1,20 @@
-import {useEffect, useState} from 'react';
+import React from 'react';
import type {Column} from '@gravity-ui/react-data-table';
-import type {PreparedPartitionDataWithHosts} from './types';
import {allColumns, generalColumns} from '../columns';
+
import {allPartitionsColumnsIds, generalPartitionColumnsIds} from './constants';
+import type {PreparedPartitionDataWithHosts} from './types';
// Columns are different for partitions with consumers and without
export const useGetPartitionsColumns = (
selectedConsumer: string | undefined,
): [Column[], string[]] => {
- const [columns, setColumns] = useState[]>([]);
- const [columnsIdsForSelector, setColumnsIdsForSelector] = useState([]);
+ const [columns, setColumns] = React.useState[]>([]);
+ const [columnsIdsForSelector, setColumnsIdsForSelector] = React.useState([]);
- useEffect(() => {
+ React.useEffect(() => {
if (selectedConsumer) {
setColumns(allColumns);
setColumnsIdsForSelector(allPartitionsColumnsIds);
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/DefaultOverviewContent.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/DefaultOverviewContent.tsx
index 179dc405d3..da411d2103 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/DefaultOverviewContent.tsx
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/DefaultOverviewContent.tsx
@@ -1,4 +1,5 @@
import {TenantDashboard} from '../TenantDashboard/TenantDashboard';
+
import {defaultDashboardConfig} from './defaultDashboardConfig';
interface DefaultOverviewContentProps {
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/Healthcheck.scss b/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/Healthcheck.scss
index a139f1ff41..4b8b4f4d45 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/Healthcheck.scss
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/Healthcheck.scss
@@ -30,8 +30,9 @@
}
&__preview-header {
- margin-bottom: var(--diagnostics-section-title-margin);
gap: 8px;
+
+ margin-bottom: var(--diagnostics-section-title-margin);
}
&__preview-title {
@@ -46,20 +47,18 @@
&__preview-title-wrapper {
display: flex;
align-items: center;
+ gap: 8px;
margin-bottom: 4px;
-
- gap: 8px;
}
&__issues-statistics {
display: flex;
flex-wrap: wrap;
align-items: center;
+ gap: 10px;
margin: 8px 0;
-
- gap: 10px;
}
&__self-check-status-indicator {
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckDetails.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckDetails.tsx
index c0d9c62e4b..bd40b3662a 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckDetails.tsx
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckDetails.tsx
@@ -1,13 +1,14 @@
-import cn from 'bem-cn-lite';
+import React from 'react';
-import type {IResponseError} from '../../../../../types/api/error';
-import type {IssuesTree} from '../../../../../store/reducers/healthcheckInfo/types';
import {ResponseError} from '../../../../../components/Errors/ResponseError';
import {Loader} from '../../../../../components/Loader';
+import type {IssuesTree} from '../../../../../store/reducers/healthcheckInfo/types';
+import type {IResponseError} from '../../../../../types/api/error';
+import {cn} from '../../../../../utils/cn';
import IssueTree from './IssuesViewer/IssueTree';
-
import i18n from './i18n';
+
import './Healthcheck.scss';
const b = cn('healthcheck');
@@ -36,11 +37,11 @@ export function HealthcheckDetails(props: HealthcheckDetailsProps) {
}
return (
- <>
+
{issueTrees.map((issueTree) => (
))}
- >
+
);
};
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.tsx
index fd8708a8e0..f4ccaa0cd9 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.tsx
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.tsx
@@ -1,18 +1,20 @@
-import cn from 'bem-cn-lite';
+import React from 'react';
import {Button, Icon} from '@gravity-ui/uikit';
-import updateArrow from '../../../../../assets/icons/update-arrow.svg';
-
-import {SelfCheckResult, type StatusFlag} from '../../../../../types/api/healthcheck';
-import type {IResponseError} from '../../../../../types/api/error';
-import {hcStatusToColorFlag} from '../../../../../store/reducers/healthcheckInfo/utils';
import {DiagnosticCard} from '../../../../../components/DiagnosticCard/DiagnosticCard';
import {EntityStatus} from '../../../../../components/EntityStatus/EntityStatus';
import {ResponseError} from '../../../../../components/Errors/ResponseError';
import {Loader} from '../../../../../components/Loader';
+import {hcStatusToColorFlag} from '../../../../../store/reducers/healthcheckInfo/utils';
+import type {IResponseError} from '../../../../../types/api/error';
+import type {SelfCheckResult, StatusFlag} from '../../../../../types/api/healthcheck';
+import {cn} from '../../../../../utils/cn';
import i18n from './i18n';
+
+import updateArrow from '../../../../../assets/icons/update-arrow.svg';
+
import './Healthcheck.scss';
const b = cn('healthcheck');
@@ -66,7 +68,7 @@ export function HealthcheckPreview(props: HealthcheckPreviewProps) {
{!issuesStatistics || !issuesStatistics.length ? (
i18n('status_message.ok')
) : (
- <>
+
{i18n('label.issues')}
{issuesStatistics.map(([status, count]) => (
@@ -79,7 +81,7 @@ export function HealthcheckPreview(props: HealthcheckPreviewProps) {
/>
))}
- >
+
)}
);
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTree.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTree.tsx
index f626ec7a14..99152ce47f 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTree.tsx
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTree.tsx
@@ -1,13 +1,12 @@
-import {useCallback, useState} from 'react';
-import cn from 'bem-cn-lite';
-import _omit from 'lodash/omit';
+import React from 'react';
+import _omit from 'lodash/omit';
import JSONTree from 'react-json-inspector';
-
import {TreeView} from 'ydb-ui-components';
-import {IssuesTree} from '../../../../../../store/reducers/healthcheckInfo/types';
+import type {IssuesTree} from '../../../../../../store/reducers/healthcheckInfo/types';
import {hcStatusToColorFlag} from '../../../../../../store/reducers/healthcheckInfo/utils';
+import {cn} from '../../../../../../utils/cn';
import {IssueTreeItem} from './IssueTreeItem';
@@ -20,9 +19,26 @@ interface IssuesViewerProps {
}
const IssueTree = ({issueTree}: IssuesViewerProps) => {
- const [collapsedIssues, setCollapsedIssues] = useState>({});
-
- const renderTree = useCallback(
+ const [collapsedIssues, setCollapsedIssues] = React.useState>({});
+
+ const renderInfoPanel = React.useCallback((info?: object) => {
+ if (!info) {
+ return null;
+ }
+
+ return (
+
+ true}
+ className={b('inspector')}
+ />
+
+ );
+ }, []);
+
+ const renderTree = React.useCallback(
(data: IssuesTree[]) => {
return data.map((item) => {
const {id} = item;
@@ -60,27 +76,7 @@ const IssueTree = ({issueTree}: IssuesViewerProps) => {
);
});
},
- [issueTree, collapsedIssues],
- );
-
- const renderInfoPanel = useCallback(
- (info) => {
- if (!info) {
- return null;
- }
-
- return (
-
- true}
- className={b('inspector')}
- />
-
- );
- },
- [issueTree],
+ [collapsedIssues, renderInfoPanel],
);
return (
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTreeItem/IssueTreeItem.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTreeItem/IssueTreeItem.tsx
index 61913429e4..1dac61e59c 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTreeItem/IssueTreeItem.tsx
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTreeItem/IssueTreeItem.tsx
@@ -1,7 +1,6 @@
-import cn from 'bem-cn-lite';
-
-import type {EFlag} from '../../../../../../../types/api/enums';
import {EntityStatus} from '../../../../../../../components/EntityStatus/EntityStatus';
+import type {EFlag} from '../../../../../../../types/api/enums';
+import {cn} from '../../../../../../../utils/cn';
import './IssueTreeItem.scss';
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/i18n/index.ts b/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/i18n/index.ts
index a855a79030..b0fa69fde3 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/i18n/index.ts
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../../../../utils/i18n';
+import {registerKeysets} from '../../../../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-diagnostics-healthcheck';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.tsx
index 55bc831e00..c29ff829d5 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.tsx
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.tsx
@@ -1,10 +1,8 @@
-import cn from 'bem-cn-lite';
-
import {CircularProgressBar} from '../../../../../../components/CircularProgressBar/CircularProgressBar';
import {DiagnosticCard} from '../../../../../../components/DiagnosticCard/DiagnosticCard';
-import {formatUsage} from '../../../../../../store/reducers/tenants/utils';
import type {MetricStatus} from '../../../../../../store/reducers/tenants/types';
-
+import {formatUsage} from '../../../../../../store/reducers/tenants/utils';
+import {cn} from '../../../../../../utils/cn';
import i18n from '../../i18n';
import './MetricCard.scss';
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.tsx
index d8300900b1..988d1c2da7 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.tsx
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.tsx
@@ -1,22 +1,22 @@
-import cn from 'bem-cn-lite';
-
import {Link, useLocation} from 'react-router-dom';
-import type {TenantMetricsTab} from '../../../../../store/reducers/tenant/types';
-import {TENANT_METRICS_TABS_IDS} from '../../../../../store/reducers/tenant/constants';
-import {useTypedSelector} from '../../../../../utils/hooks';
import {parseQuery} from '../../../../../routes';
-import {TenantTabsGroups, getTenantPath} from '../../../TenantPages';
+import {TENANT_METRICS_TABS_IDS} from '../../../../../store/reducers/tenant/constants';
+import type {TenantMetricsTab} from '../../../../../store/reducers/tenant/types';
import {
calculateUsage,
cpuUsageToStatus,
- storageUsageToStatus,
- memoryUsageToStatus,
formatTenantMetrics,
+ memoryUsageToStatus,
+ storageUsageToStatus,
} from '../../../../../store/reducers/tenants/utils';
-import type {SelfCheckResult, StatusFlag} from '../../../../../types/api/healthcheck';
import type {IResponseError} from '../../../../../types/api/error';
+import type {SelfCheckResult, StatusFlag} from '../../../../../types/api/healthcheck';
+import {cn} from '../../../../../utils/cn';
+import {useTypedSelector} from '../../../../../utils/hooks';
+import {TenantTabsGroups, getTenantPath} from '../../../TenantPages';
import {HealthcheckPreview} from '../Healthcheck/HealthcheckPreview';
+
import {MetricCard} from './MetricCard/MetricCard';
import './MetricsCards.scss';
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TenantCpu.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TenantCpu.tsx
index cd19f50b84..705266b769 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TenantCpu.tsx
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TenantCpu.tsx
@@ -1,10 +1,13 @@
+import React from 'react';
+
import type {AdditionalNodesProps} from '../../../../../types/additionalProps';
import {TenantDashboard} from '../TenantDashboard/TenantDashboard';
-import {cpuDashboardConfig} from './cpuDashboardConfig';
-import {TopNodesByLoad} from './TopNodesByLoad';
+
import {TopNodesByCpu} from './TopNodesByCpu';
-import {TopShards} from './TopShards';
+import {TopNodesByLoad} from './TopNodesByLoad';
import {TopQueries} from './TopQueries';
+import {TopShards} from './TopShards';
+import {cpuDashboardConfig} from './cpuDashboardConfig';
interface TenantCpuProps {
path: string;
@@ -13,12 +16,12 @@ interface TenantCpuProps {
export function TenantCpu({path, additionalNodesProps}: TenantCpuProps) {
return (
- <>
+
- >
+
);
}
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopNodesByCpu.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopNodesByCpu.tsx
index 1b34568dd3..41a17d9d6a 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopNodesByCpu.tsx
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopNodesByCpu.tsx
@@ -1,22 +1,20 @@
-import {useCallback} from 'react';
+import React from 'react';
-import {
- useAutofetcher,
- useSearchQuery,
- useTypedDispatch,
- useTypedSelector,
-} from '../../../../../utils/hooks';
+import {TENANT_DIAGNOSTICS_TABS_IDS} from '../../../../../store/reducers/tenant/constants';
import {
getTopNodesByCpu,
selectTopNodesByCpu,
setDataWasNotLoaded,
} from '../../../../../store/reducers/tenantOverview/topNodesByCpu/topNodesByCpu';
-import {TENANT_DIAGNOSTICS_TABS_IDS} from '../../../../../store/reducers/tenant/constants';
import type {AdditionalNodesProps} from '../../../../../types/additionalProps';
+import {
+ useAutofetcher,
+ useSearchQuery,
+ useTypedDispatch,
+ useTypedSelector,
+} from '../../../../../utils/hooks';
import {getTopNodesByCpuColumns} from '../../../../Nodes/getNodesColumns';
-
import {TenantTabsGroups, getTenantPath} from '../../../TenantPages';
-
import {TenantOverviewTableLayout} from '../TenantOverviewTableLayout';
import {getSectionTitle} from '../getSectionTitle';
import i18n from '../i18n';
@@ -36,8 +34,8 @@ export function TopNodesByCpu({path, additionalNodesProps}: TopNodesByCpuProps)
const topNodes = useTypedSelector(selectTopNodesByCpu);
const columns = getTopNodesByCpuColumns(additionalNodesProps?.getNodeRef);
- const fetchNodes = useCallback(
- (isBackground) => {
+ const fetchNodes = React.useCallback(
+ (isBackground: boolean) => {
if (!isBackground) {
dispatch(setDataWasNotLoaded());
}
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopNodesByLoad.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopNodesByLoad.tsx
index 9d9a9264e1..274e5ee4f4 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopNodesByLoad.tsx
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopNodesByLoad.tsx
@@ -1,22 +1,20 @@
-import {useCallback} from 'react';
+import React from 'react';
-import {
- useAutofetcher,
- useSearchQuery,
- useTypedDispatch,
- useTypedSelector,
-} from '../../../../../utils/hooks';
+import {TENANT_DIAGNOSTICS_TABS_IDS} from '../../../../../store/reducers/tenant/constants';
import {
getTopNodesByLoad,
selectTopNodesByLoad,
setDataWasNotLoaded,
} from '../../../../../store/reducers/tenantOverview/topNodesByLoad/topNodesByLoad';
-import {TENANT_DIAGNOSTICS_TABS_IDS} from '../../../../../store/reducers/tenant/constants';
import type {AdditionalNodesProps} from '../../../../../types/additionalProps';
+import {
+ useAutofetcher,
+ useSearchQuery,
+ useTypedDispatch,
+ useTypedSelector,
+} from '../../../../../utils/hooks';
import {getTopNodesByLoadColumns} from '../../../../Nodes/getNodesColumns';
-
import {TenantTabsGroups, getTenantPath} from '../../../TenantPages';
-
import {TenantOverviewTableLayout} from '../TenantOverviewTableLayout';
import {getSectionTitle} from '../getSectionTitle';
import i18n from '../i18n';
@@ -36,8 +34,8 @@ export function TopNodesByLoad({path, additionalNodesProps}: TopNodesByLoadProps
const topNodes = useTypedSelector(selectTopNodesByLoad);
const columns = getTopNodesByLoadColumns(additionalNodesProps?.getNodeRef);
- const fetchNodes = useCallback(
- (isBackground) => {
+ const fetchNodes = React.useCallback(
+ (isBackground: boolean) => {
if (!isBackground) {
dispatch(setDataWasNotLoaded());
}
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopQueries.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopQueries.tsx
index 677a521f0a..86d7b75f9b 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopQueries.tsx
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopQueries.tsx
@@ -1,6 +1,9 @@
+import React from 'react';
+
import {useHistory, useLocation} from 'react-router';
-import {useCallback} from 'react';
+import {parseQuery} from '../../../../../routes';
+import {changeUserInput} from '../../../../../store/reducers/executeQuery';
import {
TENANT_DIAGNOSTICS_TABS_IDS,
TENANT_PAGE,
@@ -11,13 +14,9 @@ import {
fetchTenantOverviewTopQueries,
setDataWasNotLoaded,
} from '../../../../../store/reducers/tenantOverview/topQueries/tenantOverviewTopQueries';
-import {changeUserInput} from '../../../../../store/reducers/executeQuery';
import {useAutofetcher, useTypedDispatch, useTypedSelector} from '../../../../../utils/hooks';
-import {parseQuery} from '../../../../../routes';
-
import {TenantTabsGroups, getTenantPath} from '../../../TenantPages';
import {getTenantOverviewTopQueriesColumns} from '../../TopQueries/getTopQueriesColumns';
-
import {TenantOverviewTableLayout} from '../TenantOverviewTableLayout';
import {getSectionTitle} from '../getSectionTitle';
import i18n from '../i18n';
@@ -55,8 +54,8 @@ export function TopQueries({path}: TopQueriesProps) {
autorefresh,
);
- const handleRowClick = useCallback(
- (row) => {
+ const handleRowClick = React.useCallback(
+ (row: any) => {
const {QueryText: input} = row;
dispatch(changeUserInput({input}));
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopShards.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopShards.tsx
index 2a83966ed5..5cd9bff72a 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopShards.tsx
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopShards.tsx
@@ -1,17 +1,14 @@
import {useLocation} from 'react-router';
-import {useAutofetcher, useTypedDispatch, useTypedSelector} from '../../../../../utils/hooks';
import {parseQuery} from '../../../../../routes';
-
+import {TENANT_DIAGNOSTICS_TABS_IDS} from '../../../../../store/reducers/tenant/constants';
import {
sendTenantOverviewTopShardsQuery,
setDataWasNotLoaded,
} from '../../../../../store/reducers/tenantOverview/topShards/tenantOverviewTopShards';
-import {TENANT_DIAGNOSTICS_TABS_IDS} from '../../../../../store/reducers/tenant/constants';
-import {getTopShardsColumns} from '../../TopShards/getTopShardsColumns';
-
+import {useAutofetcher, useTypedDispatch, useTypedSelector} from '../../../../../utils/hooks';
import {TenantTabsGroups, getTenantPath} from '../../../TenantPages';
-
+import {getTopShardsColumns} from '../../TopShards/getTopShardsColumns';
import {TenantOverviewTableLayout} from '../TenantOverviewTableLayout';
import {getSectionTitle} from '../getSectionTitle';
import i18n from '../i18n';
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.tsx
index 23930af361..8a5fbbb53b 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.tsx
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.tsx
@@ -1,16 +1,17 @@
-import {useState} from 'react';
+import React from 'react';
+
import {StringParam, useQueryParam} from 'use-query-params';
+import {MetricChart} from '../../../../../components/MetricChart';
+import type {
+ ChartDataStatus,
+ ChartOptions,
+ MetricDescription,
+} from '../../../../../components/MetricChart';
+import {TimeFrameSelector} from '../../../../../components/TimeFrameSelector/TimeFrameSelector';
import {cn} from '../../../../../utils/cn';
-import type {TimeFrame} from '../../../../../utils/timeframes';
import {useTypedSelector} from '../../../../../utils/hooks';
-import {TimeFrameSelector} from '../../../../../components/TimeFrameSelector/TimeFrameSelector';
-import {
- type ChartOptions,
- MetricChart,
- type MetricDescription,
- type ChartDataStatus,
-} from '../../../../../components/MetricChart';
+import type {TimeFrame} from '../../../../../utils/timeframes';
import './TenantDashboard.scss';
@@ -31,7 +32,7 @@ interface TenantDashboardProps {
}
export const TenantDashboard = ({database, charts}: TenantDashboardProps) => {
- const [isDashboardHidden, setIsDashboardHidden] = useState(true);
+ const [isDashboardHidden, setIsDashboardHidden] = React.useState(true);
const [timeFrame = '1h', setTimeframe] = useQueryParam('timeframe', StringParam);
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/TenantMemory/TenantMemory.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/TenantMemory/TenantMemory.tsx
index b1d3d36c61..4ec6617d75 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/TenantMemory/TenantMemory.tsx
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/TenantMemory/TenantMemory.tsx
@@ -1,6 +1,9 @@
+import React from 'react';
+
import {TenantDashboard} from '../TenantDashboard/TenantDashboard';
-import {memoryDashboardConfig} from './memoryDashboardConfig';
+
import {TopNodesByMemory} from './TopNodesByMemory';
+import {memoryDashboardConfig} from './memoryDashboardConfig';
interface TenantMemoryProps {
path: string;
@@ -8,9 +11,9 @@ interface TenantMemoryProps {
export function TenantMemory({path}: TenantMemoryProps) {
return (
- <>
+
- >
+
);
}
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/TenantMemory/TopNodesByMemory.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/TenantMemory/TopNodesByMemory.tsx
index 8e29d6e94e..bd47cf5e7b 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/TenantMemory/TopNodesByMemory.tsx
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/TenantMemory/TopNodesByMemory.tsx
@@ -1,22 +1,20 @@
-import {useCallback} from 'react';
+import React from 'react';
-import {
- useAutofetcher,
- useTypedSelector,
- useSearchQuery,
- useTypedDispatch,
-} from '../../../../../utils/hooks';
+import {TENANT_DIAGNOSTICS_TABS_IDS} from '../../../../../store/reducers/tenant/constants';
import {
getTopNodesByMemory,
selectTopNodesByMemory,
setDataWasNotLoaded,
} from '../../../../../store/reducers/tenantOverview/topNodesByMemory/topNodesByMemory';
-import {TENANT_DIAGNOSTICS_TABS_IDS} from '../../../../../store/reducers/tenant/constants';
import type {AdditionalNodesProps} from '../../../../../types/additionalProps';
+import {
+ useAutofetcher,
+ useSearchQuery,
+ useTypedDispatch,
+ useTypedSelector,
+} from '../../../../../utils/hooks';
import {getTopNodesByMemoryColumns} from '../../../../Nodes/getNodesColumns';
-
import {TenantTabsGroups, getTenantPath} from '../../../TenantPages';
-
import {TenantOverviewTableLayout} from '../TenantOverviewTableLayout';
import {getSectionTitle} from '../getSectionTitle';
import i18n from '../i18n';
@@ -38,8 +36,8 @@ export function TopNodesByMemory({path, additionalNodesProps}: TopNodesByMemoryP
getNodeRef: additionalNodesProps?.getNodeRef,
});
- const fetchNodes = useCallback(
- (isBackground) => {
+ const fetchNodes = React.useCallback(
+ (isBackground: boolean) => {
if (!isBackground) {
dispatch(setDataWasNotLoaded());
}
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.scss b/src/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.scss
index 3057e13033..ae2339b8c7 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.scss
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.scss
@@ -19,19 +19,20 @@
&__top {
display: flex;
align-items: center;
+ gap: 4px;
margin-bottom: 10px;
line-height: 24px;
- gap: 4px;
}
&__top-label {
+ gap: 10px;
+
margin-bottom: var(--diagnostics-section-title-margin);
font-weight: 600;
line-height: 24px;
- gap: 10px;
}
&__info {
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.tsx
index 0b8934a51c..2f58c2824f 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.tsx
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.tsx
@@ -1,25 +1,27 @@
-import {useCallback} from 'react';
+import React from 'react';
import {Loader} from '@gravity-ui/uikit';
import {EntityStatus} from '../../../../components/EntityStatus/EntityStatus';
-import {TENANT_DEFAULT_TITLE} from '../../../../utils/constants';
import {TENANT_METRICS_TABS_IDS} from '../../../../store/reducers/tenant/constants';
-import {mapDatabaseTypeToDBName} from '../../utils/schema';
-import {useAutofetcher, useTypedSelector, useTypedDispatch} from '../../../../utils/hooks';
-import type {AdditionalNodesProps, AdditionalTenantsProps} from '../../../../types/additionalProps';
import {getTenantInfo, setDataWasNotLoaded} from '../../../../store/reducers/tenant/tenant';
import {calculateTenantMetrics} from '../../../../store/reducers/tenants/utils';
-import {TenantCpu} from './TenantCpu/TenantCpu';
+import type {AdditionalNodesProps, AdditionalTenantsProps} from '../../../../types/additionalProps';
+import {TENANT_DEFAULT_TITLE} from '../../../../utils/constants';
+import {useAutofetcher, useTypedDispatch, useTypedSelector} from '../../../../utils/hooks';
+import {mapDatabaseTypeToDBName} from '../../utils/schema';
+
+import {DefaultOverviewContent} from './DefaultOverviewContent/DefaultOverviewContent';
import {HealthcheckDetails} from './Healthcheck/HealthcheckDetails';
-import {MetricsCards, type TenantMetrics} from './MetricsCards/MetricsCards';
-import {TenantStorage} from './TenantStorage/TenantStorage';
+import {MetricsCards} from './MetricsCards/MetricsCards';
+import type {TenantMetrics} from './MetricsCards/MetricsCards';
+import {TenantCpu} from './TenantCpu/TenantCpu';
import {TenantMemory} from './TenantMemory/TenantMemory';
-import {DefaultOverviewContent} from './DefaultOverviewContent/DefaultOverviewContent';
+import {TenantStorage} from './TenantStorage/TenantStorage';
import {useHealthcheck} from './useHealthcheck';
+import {b} from './utils';
import './TenantOverview.scss';
-import {b} from './utils';
interface TenantOverviewProps {
tenantName: string;
@@ -52,7 +54,7 @@ export function TenantOverview({
error: healthcheckError,
} = useHealthcheck(tenantName);
- const fetchTenant = useCallback(
+ const fetchTenant = React.useCallback(
(isBackground = true) => {
if (!isBackground) {
dispatch(setDataWasNotLoaded());
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/TenantOverviewTableLayout.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/TenantOverviewTableLayout.tsx
index 9b7473397c..994789bdc3 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/TenantOverviewTableLayout.tsx
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/TenantOverviewTableLayout.tsx
@@ -1,19 +1,20 @@
-import type {ReactNode} from 'react';
+import React from 'react';
import DataTable from '@gravity-ui/react-data-table';
import type {DataTableProps} from '@gravity-ui/react-data-table';
+import {ResponseError} from '../../../../components/Errors/ResponseError';
+import {TableSkeleton} from '../../../../components/TableSkeleton/TableSkeleton';
+import type {IResponseError} from '../../../../types/api/error';
import {
TENANT_OVERVIEW_TABLES_LIMIT,
TENANT_OVERVIEW_TABLES_SETTINGS,
} from '../../../../utils/constants';
-import type {IResponseError} from '../../../../types/api/error';
-import {TableSkeleton} from '../../../../components/TableSkeleton/TableSkeleton';
-import {ResponseError} from '../../../../components/Errors/ResponseError';
+
import {b} from './utils';
interface TenantOverviewTableLayoutProps extends Omit, 'theme'> {
- title: ReactNode;
+ title: React.ReactNode;
loading?: boolean;
wasLoaded?: boolean;
error?: IResponseError;
@@ -44,9 +45,9 @@ export function TenantOverviewTableLayout({
);
};
return (
- <>
+
{title}
{renderContent()}
- >
+
);
}
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TenantStorage.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TenantStorage.tsx
index 152d449f8f..3649d655c5 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TenantStorage.tsx
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TenantStorage.tsx
@@ -1,17 +1,18 @@
+import React from 'react';
+
import InfoViewer from '../../../../../components/InfoViewer/InfoViewer';
-import {ProgressViewer} from '../../../../../components/ProgressViewer/ProgressViewer';
import {LabelWithPopover} from '../../../../../components/LabelWithPopover';
+import {ProgressViewer} from '../../../../../components/ProgressViewer/ProgressViewer';
import {formatStorageValues} from '../../../../../utils/dataFormatters/dataFormatters';
-
import {TenantDashboard} from '../TenantDashboard/TenantDashboard';
+import i18n from '../i18n';
+import {b} from '../utils';
-import '../TenantOverview.scss';
-
-import {storageDashboardConfig} from './storageDashboardConfig';
-import {TopTables} from './TopTables';
import {TopGroups} from './TopGroups';
-import {b} from '../utils';
-import i18n from '../i18n';
+import {TopTables} from './TopTables';
+import {storageDashboardConfig} from './storageDashboardConfig';
+
+import '../TenantOverview.scss';
export interface TenantStorageMetrics {
blobStorageUsed?: number;
@@ -68,11 +69,11 @@ export function TenantStorage({tenantName, metrics}: TenantStorageProps) {
];
return (
- <>
+
- >
+
);
}
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TopGroups.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TopGroups.tsx
index 2fb05c4833..0f89150b2e 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TopGroups.tsx
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TopGroups.tsx
@@ -1,21 +1,19 @@
-import {useCallback} from 'react';
+import React from 'react';
+import {TENANT_DIAGNOSTICS_TABS_IDS} from '../../../../../store/reducers/tenant/constants';
+import {
+ getTopStorageGroups,
+ selectTopStorageGroups,
+ setDataWasNotLoaded,
+} from '../../../../../store/reducers/tenantOverview/topStorageGroups/topStorageGroups';
import {
useAutofetcher,
useSearchQuery,
useTypedDispatch,
useTypedSelector,
} from '../../../../../utils/hooks';
-import {
- setDataWasNotLoaded,
- getTopStorageGroups,
- selectTopStorageGroups,
-} from '../../../../../store/reducers/tenantOverview/topStorageGroups/topStorageGroups';
-import {TENANT_DIAGNOSTICS_TABS_IDS} from '../../../../../store/reducers/tenant/constants';
import {getStorageTopGroupsColumns} from '../../../../Storage/StorageGroups/getStorageGroupsColumns';
-
import {TenantTabsGroups, getTenantPath} from '../../../TenantPages';
-
import {TenantOverviewTableLayout} from '../TenantOverviewTableLayout';
import {getSectionTitle} from '../getSectionTitle';
import i18n from '../i18n';
@@ -35,7 +33,7 @@ export function TopGroups({tenant}: TopGroupsProps) {
const columns = getStorageTopGroupsColumns();
- const fetchData = useCallback(
+ const fetchData = React.useCallback(
(isBackground: boolean) => {
if (!isBackground) {
dispatch(setDataWasNotLoaded());
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TopTables.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TopTables.tsx
index 0b29e279e1..839fdf4c50 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TopTables.tsx
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TopTables.tsx
@@ -1,17 +1,16 @@
+import type {Column} from '@gravity-ui/react-data-table';
+import DataTable from '@gravity-ui/react-data-table';
import {useLocation} from 'react-router';
-import DataTable, {Column} from '@gravity-ui/react-data-table';
-
-import {useAutofetcher, useTypedDispatch, useTypedSelector} from '../../../../../utils/hooks';
+import {CellWithPopover} from '../../../../../components/CellWithPopover/CellWithPopover';
+import {LinkToSchemaObject} from '../../../../../components/LinkToSchemaObject/LinkToSchemaObject';
import {
fetchTopTables,
setDataWasNotLoaded,
} from '../../../../../store/reducers/tenantOverview/executeTopTables/executeTopTables';
import type {KeyValueRow} from '../../../../../types/api/query';
import {formatBytes, getSizeWithSignificantDigits} from '../../../../../utils/bytesParsers';
-import {LinkToSchemaObject} from '../../../../../components/LinkToSchemaObject/LinkToSchemaObject';
-import {CellWithPopover} from '../../../../../components/CellWithPopover/CellWithPopover';
-
+import {useAutofetcher, useTypedDispatch, useTypedSelector} from '../../../../../utils/hooks';
import {TenantOverviewTableLayout} from '../TenantOverviewTableLayout';
import {getSectionTitle} from '../getSectionTitle';
import i18n from '../i18n';
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/getSectionTitle.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/getSectionTitle.tsx
index 2b96a0aa62..ab03f3ab7c 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/getSectionTitle.tsx
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/getSectionTitle.tsx
@@ -1,3 +1,5 @@
+import React from 'react';
+
import {InternalLink} from '../../../../components/InternalLink/InternalLink';
import i18n from './i18n';
@@ -18,9 +20,9 @@ export const getSectionTitle = ({
}: GetSectionTitleParams) => {
if (link) {
return (
- <>
+
{prefix} {entity} {postfix}
- >
+
);
}
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/i18n/index.ts b/src/containers/Tenant/Diagnostics/TenantOverview/i18n/index.ts
index f2246dfd03..d4e3f1d3f8 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/i18n/index.ts
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/i18n/index.ts
@@ -1,9 +1,7 @@
-import {i18n, Lang} from '../../../../../utils/i18n';
+import {registerKeysets} from '../../../../../utils/i18n';
import en from './en.json';
const COMPONENT = 'ydb-diagnostics-tenant-overview';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {en});
diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/useHealthcheck.ts b/src/containers/Tenant/Diagnostics/TenantOverview/useHealthcheck.ts
index 6961d8114a..be54290c06 100644
--- a/src/containers/Tenant/Diagnostics/TenantOverview/useHealthcheck.ts
+++ b/src/containers/Tenant/Diagnostics/TenantOverview/useHealthcheck.ts
@@ -1,4 +1,4 @@
-import {useCallback} from 'react';
+import React from 'react';
import {
getHealthcheckInfo,
@@ -7,9 +7,10 @@ import {
setDataWasNotLoaded,
} from '../../../../store/reducers/healthcheckInfo/healthcheckInfo';
import type {IssuesTree} from '../../../../store/reducers/healthcheckInfo/types';
-import {type StatusFlag, SelfCheckResult} from '../../../../types/api/healthcheck';
import type {IResponseError} from '../../../../types/api/error';
-import {useTypedSelector, useTypedDispatch} from '../../../../utils/hooks';
+import {SelfCheckResult} from '../../../../types/api/healthcheck';
+import type {StatusFlag} from '../../../../types/api/healthcheck';
+import {useTypedDispatch, useTypedSelector} from '../../../../utils/hooks';
interface HealthcheckParams {
issueTrees: IssuesTree[];
@@ -29,7 +30,7 @@ export const useHealthcheck = (tenantName: string): HealthcheckParams => {
const issuesStatistics = useTypedSelector(selectIssuesStatistics);
const issueTrees = useTypedSelector(selectIssuesTrees);
- const fetchHealthcheck = useCallback(
+ const fetchHealthcheck = React.useCallback(
(isBackground = true) => {
if (!isBackground) {
dispatch(setDataWasNotLoaded());
diff --git a/src/containers/Tenant/Diagnostics/TopQueries/TopQueries.tsx b/src/containers/Tenant/Diagnostics/TopQueries/TopQueries.tsx
index 940344d826..b676faf801 100644
--- a/src/containers/Tenant/Diagnostics/TopQueries/TopQueries.tsx
+++ b/src/containers/Tenant/Diagnostics/TopQueries/TopQueries.tsx
@@ -1,40 +1,39 @@
-import {useCallback, useEffect, useRef, useState} from 'react';
-import {useHistory, useLocation} from 'react-router';
-import cn from 'bem-cn-lite';
+import React from 'react';
import DataTable from '@gravity-ui/react-data-table';
import {Loader} from '@gravity-ui/uikit';
+import {useHistory, useLocation} from 'react-router';
-import {DateRange, DateRangeValues} from '../../../../components/DateRange';
+import type {DateRangeValues} from '../../../../components/DateRange';
+import {DateRange} from '../../../../components/DateRange';
import {Search} from '../../../../components/Search';
-
+import {parseQuery} from '../../../../routes';
import {changeUserInput} from '../../../../store/reducers/executeQuery';
-
-import type {EPathType} from '../../../../types/api/schema';
-import type {IQueryResult} from '../../../../types/store/query';
+import {
+ fetchTopQueries,
+ setTopQueriesFilters,
+ setTopQueriesState,
+} from '../../../../store/reducers/executeTopQueries/executeTopQueries';
import type {ITopQueriesFilters} from '../../../../store/reducers/executeTopQueries/types';
-
import {
TENANT_PAGE,
TENANT_PAGES_IDS,
TENANT_QUERY_TABS_ID,
} from '../../../../store/reducers/tenant/constants';
-import {
- setTopQueriesFilters,
- setTopQueriesState,
- fetchTopQueries,
-} from '../../../../store/reducers/executeTopQueries/executeTopQueries';
+import type {EPathType} from '../../../../types/api/schema';
+import type {IQueryResult} from '../../../../types/store/query';
+import {cn} from '../../../../utils/cn';
import {HOUR_IN_SECONDS} from '../../../../utils/constants';
+import {isSortableTopQueriesProperty} from '../../../../utils/diagnostics';
import {useAutofetcher, useTypedDispatch, useTypedSelector} from '../../../../utils/hooks';
import {prepareQueryError} from '../../../../utils/query';
-import {parseQuery} from '../../../../routes';
+import {TenantTabsGroups, getTenantPath} from '../../TenantPages';
import {QUERY_TABLE_SETTINGS} from '../../utils/constants';
-import {isSortableTopQueriesProperty} from '../../../../utils/diagnostics';
import {isColumnEntityType} from '../../utils/schema';
-import {TenantTabsGroups, getTenantPath} from '../../TenantPages';
-import {getTopQueriesColumns} from './getTopQueriesColumns';
+import {getTopQueriesColumns} from './getTopQueriesColumns';
import i18n from './i18n';
+
import './TopQueries.scss';
const b = cn('kv-top-queries');
@@ -60,14 +59,14 @@ export const TopQueries = ({path, type}: TopQueriesProps) => {
} = useTypedSelector((state) => state.executeTopQueries);
const rawColumns = getTopQueriesColumns();
- const preventFetch = useRef(false);
+ const preventFetch = React.useRef(false);
// some filters sync between redux state and URL
// component state is for default values,
// default values are determined from the query response, and should not propagate to URL
- const [filters, setFilters] = useState(storeFilters);
+ const [filters, setFilters] = React.useState(storeFilters);
- useEffect(() => {
+ React.useEffect(() => {
dispatch(setTopQueriesFilters(filters));
}, [dispatch, filters]);
@@ -124,8 +123,8 @@ export const TopQueries = ({path, type}: TopQueriesProps) => {
autorefresh,
);
- const handleRowClick = useCallback(
- (row) => {
+ const handleRowClick = React.useCallback(
+ (row: any) => {
const {QueryText: input} = row;
dispatch(changeUserInput({input}));
diff --git a/src/containers/Tenant/Diagnostics/TopQueries/getTopQueriesColumns.tsx b/src/containers/Tenant/Diagnostics/TopQueries/getTopQueriesColumns.tsx
index da8839b81d..e6edebdf83 100644
--- a/src/containers/Tenant/Diagnostics/TopQueries/getTopQueriesColumns.tsx
+++ b/src/containers/Tenant/Diagnostics/TopQueries/getTopQueriesColumns.tsx
@@ -1,14 +1,14 @@
-import cn from 'bem-cn-lite';
+import DataTable from '@gravity-ui/react-data-table';
+import type {Column} from '@gravity-ui/react-data-table';
-import DataTable, {type Column} from '@gravity-ui/react-data-table';
-
-import type {KeyValueRow} from '../../../../types/api/query';
-import {formatDateTime, formatNumber} from '../../../../utils/dataFormatters/dataFormatters';
-import {generateHash} from '../../../../utils/generateHash';
import {
- TruncatedQuery,
OneLineQueryWithPopover,
+ TruncatedQuery,
} from '../../../../components/TruncatedQuery/TruncatedQuery';
+import type {KeyValueRow} from '../../../../types/api/query';
+import {cn} from '../../../../utils/cn';
+import {formatDateTime, formatNumber} from '../../../../utils/dataFormatters/dataFormatters';
+import {generateHash} from '../../../../utils/generateHash';
import {parseUsToMs} from '../../../../utils/timeParsers';
import {MAX_QUERY_HEIGHT} from '../../utils/constants';
diff --git a/src/containers/Tenant/Diagnostics/TopQueries/i18n/index.ts b/src/containers/Tenant/Diagnostics/TopQueries/i18n/index.ts
index 47b8659112..d4b0035c79 100644
--- a/src/containers/Tenant/Diagnostics/TopQueries/i18n/index.ts
+++ b/src/containers/Tenant/Diagnostics/TopQueries/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../../../utils/i18n';
+import {registerKeysets} from '../../../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-diagnostics-top-queries';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/containers/Tenant/Diagnostics/TopShards/Filters/Filters.tsx b/src/containers/Tenant/Diagnostics/TopShards/Filters/Filters.tsx
index 85f3b4a80a..c24fb3e096 100644
--- a/src/containers/Tenant/Diagnostics/TopShards/Filters/Filters.tsx
+++ b/src/containers/Tenant/Diagnostics/TopShards/Filters/Filters.tsx
@@ -1,16 +1,12 @@
import {RadioButton} from '@gravity-ui/uikit';
-import {DateRange, DateRangeValues} from '../../../../../components/DateRange';
-
-import {
- EShardsWorkloadMode,
- type IShardsWorkloadFilters,
-} from '../../../../../store/reducers/shardsWorkload/types';
-
+import type {DateRangeValues} from '../../../../../components/DateRange';
+import {DateRange} from '../../../../../components/DateRange';
+import {EShardsWorkloadMode} from '../../../../../store/reducers/shardsWorkload/types';
+import type {IShardsWorkloadFilters} from '../../../../../store/reducers/shardsWorkload/types';
import {isEnumMember} from '../../../../../utils/typecheckers';
-
-import i18n from '../i18n';
import {b} from '../TopShards';
+import i18n from '../i18n';
import './Filters.scss';
diff --git a/src/containers/Tenant/Diagnostics/TopShards/TopShards.tsx b/src/containers/Tenant/Diagnostics/TopShards/TopShards.tsx
index 57f11a8db6..d7be4c0fa6 100644
--- a/src/containers/Tenant/Diagnostics/TopShards/TopShards.tsx
+++ b/src/containers/Tenant/Diagnostics/TopShards/TopShards.tsx
@@ -1,34 +1,31 @@
-import {useState, useEffect, useMemo} from 'react';
-import cn from 'bem-cn-lite';
-import {useLocation} from 'react-router';
+import React from 'react';
-import DataTable, {Column, Settings, SortOrder} from '@gravity-ui/react-data-table';
+import type {Column, Settings, SortOrder} from '@gravity-ui/react-data-table';
+import DataTable from '@gravity-ui/react-data-table';
import {Loader} from '@gravity-ui/uikit';
+import {useLocation} from 'react-router';
import {
sendShardQuery,
- setShardsState,
setShardsQueryFilters,
+ setShardsState,
} from '../../../../store/reducers/shardsWorkload/shardsWorkload';
-import {
- EShardsWorkloadMode,
- type IShardsWorkloadFilters,
-} from '../../../../store/reducers/shardsWorkload/types';
-
-import type {EPathType} from '../../../../types/api/schema';
+import {EShardsWorkloadMode} from '../../../../store/reducers/shardsWorkload/types';
+import type {IShardsWorkloadFilters} from '../../../../store/reducers/shardsWorkload/types';
import type {CellValue, KeyValueRow} from '../../../../types/api/query';
-
-import {formatDateTime} from '../../../../utils/dataFormatters/dataFormatters';
+import type {EPathType} from '../../../../types/api/schema';
+import {cn} from '../../../../utils/cn';
import {DEFAULT_TABLE_SETTINGS, HOUR_IN_SECONDS} from '../../../../utils/constants';
+import {formatDateTime} from '../../../../utils/dataFormatters/dataFormatters';
+import {isSortableTopShardsProperty} from '../../../../utils/diagnostics';
import {useAutofetcher, useTypedDispatch, useTypedSelector} from '../../../../utils/hooks';
import {prepareQueryError} from '../../../../utils/query';
-import {isSortableTopShardsProperty} from '../../../../utils/diagnostics';
import {isColumnEntityType} from '../../utils/schema';
import {Filters} from './Filters';
import {getShardsWorkloadColumns} from './getTopShardsColumns';
-
import i18n from './i18n';
+
import './TopShards.scss';
export const b = cn('top-shards');
@@ -109,7 +106,7 @@ export const TopShards = ({tenantPath, type}: TopShardsProps) => {
// default filters shouldn't propagate into URL until user interacts with the control
// redux initial value can't be used, as it synchronizes with URL
- const [filters, setFilters] = useState(() => {
+ const [filters, setFilters] = React.useState(() => {
const defaultValue = {...storeFilters};
if (!defaultValue.mode) {
@@ -123,7 +120,7 @@ export const TopShards = ({tenantPath, type}: TopShardsProps) => {
return defaultValue;
});
- const [sortOrder, setSortOrder] = useState(tableColumnsNames.CPUCores);
+ const [sortOrder, setSortOrder] = React.useState(tableColumnsNames.CPUCores);
useAutofetcher(
() => {
@@ -141,7 +138,7 @@ export const TopShards = ({tenantPath, type}: TopShardsProps) => {
);
// don't show loader for requests triggered by table sort, only for path change
- useEffect(() => {
+ React.useEffect(() => {
dispatch(
setShardsState({
wasLoaded: false,
@@ -178,7 +175,7 @@ export const TopShards = ({tenantPath, type}: TopShardsProps) => {
setFilters((state) => ({...state, ...newStateValue}));
};
- const tableColumns = useMemo(() => {
+ const tableColumns = React.useMemo(() => {
const rawColumns: Column[] = getShardsWorkloadColumns(tenantPath, location);
const columns: Column[] = rawColumns.map((column) => ({
diff --git a/src/containers/Tenant/Diagnostics/TopShards/getTopShardsColumns.tsx b/src/containers/Tenant/Diagnostics/TopShards/getTopShardsColumns.tsx
index 277f7eb63d..dac7a58ef1 100644
--- a/src/containers/Tenant/Diagnostics/TopShards/getTopShardsColumns.tsx
+++ b/src/containers/Tenant/Diagnostics/TopShards/getTopShardsColumns.tsx
@@ -1,16 +1,16 @@
+import DataTable from '@gravity-ui/react-data-table';
+import type {Column} from '@gravity-ui/react-data-table';
import type {Location} from 'history';
-import DataTable, {type Column} from '@gravity-ui/react-data-table';
-
+import {InternalLink} from '../../../../components/InternalLink';
+import {LinkToSchemaObject} from '../../../../components/LinkToSchemaObject/LinkToSchemaObject';
+import {UsageLabel} from '../../../../components/UsageLabel/UsageLabel';
+import routes, {createHref} from '../../../../routes';
+import {getLoadSeverityForShard} from '../../../../store/reducers/tenantOverview/topShards/utils';
import type {KeyValueRow} from '../../../../types/api/query';
import type {ValueOf} from '../../../../types/common';
import {formatNumber, roundToPrecision} from '../../../../utils/dataFormatters/dataFormatters';
-import {getLoadSeverityForShard} from '../../../../store/reducers/tenantOverview/topShards/utils';
-import {InternalLink} from '../../../../components/InternalLink';
-import routes, {createHref} from '../../../../routes';
import {getDefaultNodePath} from '../../../Node/NodePages';
-import {UsageLabel} from '../../../../components/UsageLabel/UsageLabel';
-import {LinkToSchemaObject} from '../../../../components/LinkToSchemaObject/LinkToSchemaObject';
const TOP_SHARDS_COLUMNS_IDS = {
TabletId: 'TabletId',
diff --git a/src/containers/Tenant/Diagnostics/TopShards/i18n/index.ts b/src/containers/Tenant/Diagnostics/TopShards/i18n/index.ts
index f54a401961..d67b3a49c9 100644
--- a/src/containers/Tenant/Diagnostics/TopShards/i18n/index.ts
+++ b/src/containers/Tenant/Diagnostics/TopShards/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../../../utils/i18n';
+import {registerKeysets} from '../../../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-diagnostics-top-shards';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/containers/Tenant/Info/ExternalDataSource/ExternalDataSource.tsx b/src/containers/Tenant/Info/ExternalDataSource/ExternalDataSource.tsx
index becfecdd45..3dbb3a519b 100644
--- a/src/containers/Tenant/Info/ExternalDataSource/ExternalDataSource.tsx
+++ b/src/containers/Tenant/Info/ExternalDataSource/ExternalDataSource.tsx
@@ -1,19 +1,17 @@
-import block from 'bem-cn-lite';
-
-import type {TEvDescribeSchemeResult} from '../../../../types/api/schema';
-import {useTypedSelector} from '../../../../utils/hooks';
-
-import {InfoViewer, InfoViewerItem} from '../../../../components/InfoViewer';
-import {formatCommonItem} from '../../../../components/InfoViewer/formatters';
import {EntityStatus} from '../../../../components/EntityStatus/EntityStatus';
import {ResponseError} from '../../../../components/Errors/ResponseError';
-
+import type {InfoViewerItem} from '../../../../components/InfoViewer';
+import {InfoViewer} from '../../../../components/InfoViewer';
+import {formatCommonItem} from '../../../../components/InfoViewer/formatters';
+import type {TEvDescribeSchemeResult} from '../../../../types/api/schema';
+import {cn} from '../../../../utils/cn';
+import {useTypedSelector} from '../../../../utils/hooks';
import {getEntityName} from '../../utils';
-
import i18n from '../i18n';
+
import './ExternalDataSource.scss';
-const b = block('ydb-external-data-source-info');
+const b = cn('ydb-external-data-source-info');
const prepareExternalDataSourceSummary = (data: TEvDescribeSchemeResult): InfoViewerItem[] => {
return [
diff --git a/src/containers/Tenant/Info/ExternalTable/ExternalTable.tsx b/src/containers/Tenant/Info/ExternalTable/ExternalTable.tsx
index cc9ff47fd7..a7242aa578 100644
--- a/src/containers/Tenant/Info/ExternalTable/ExternalTable.tsx
+++ b/src/containers/Tenant/Info/ExternalTable/ExternalTable.tsx
@@ -1,21 +1,21 @@
import {useLocation} from 'react-router';
-import block from 'bem-cn-lite';
-import type {TEvDescribeSchemeResult} from '../../../../types/api/schema';
-import {useTypedSelector} from '../../../../utils/hooks';
-import {createExternalUILink, parseQuery} from '../../../../routes';
-import {formatCommonItem} from '../../../../components/InfoViewer/formatters';
-import {InfoViewer, InfoViewerItem} from '../../../../components/InfoViewer';
-import {LinkWithIcon} from '../../../../components/LinkWithIcon/LinkWithIcon';
import {EntityStatus} from '../../../../components/EntityStatus/EntityStatus';
import {ResponseError} from '../../../../components/Errors/ResponseError';
-
+import type {InfoViewerItem} from '../../../../components/InfoViewer';
+import {InfoViewer} from '../../../../components/InfoViewer';
+import {formatCommonItem} from '../../../../components/InfoViewer/formatters';
+import {LinkWithIcon} from '../../../../components/LinkWithIcon/LinkWithIcon';
+import {createExternalUILink, parseQuery} from '../../../../routes';
+import type {TEvDescribeSchemeResult} from '../../../../types/api/schema';
+import {cn} from '../../../../utils/cn';
+import {useTypedSelector} from '../../../../utils/hooks';
import {getEntityName} from '../../utils';
-
import i18n from '../i18n';
+
import './ExternalTable.scss';
-const b = block('ydb-external-table-info');
+const b = cn('ydb-external-table-info');
const prepareExternalTableSummary = (
data: TEvDescribeSchemeResult,
diff --git a/src/containers/Tenant/Info/i18n/index.ts b/src/containers/Tenant/Info/i18n/index.ts
index b45f2f4672..eedac2f26d 100644
--- a/src/containers/Tenant/Info/i18n/index.ts
+++ b/src/containers/Tenant/Info/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../../../utils/i18n';
+import {registerKeysets} from '../../../../utils/i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-tenant-objects-info';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/containers/Tenant/ObjectGeneral/ObjectGeneral.tsx b/src/containers/Tenant/ObjectGeneral/ObjectGeneral.tsx
index b64e6dc349..2067dc33a5 100644
--- a/src/containers/Tenant/ObjectGeneral/ObjectGeneral.tsx
+++ b/src/containers/Tenant/ObjectGeneral/ObjectGeneral.tsx
@@ -1,17 +1,15 @@
-import {useLocation} from 'react-router';
-import cn from 'bem-cn-lite';
-
import {useThemeValue} from '@gravity-ui/uikit';
+import {useLocation} from 'react-router';
-import type {EPathType} from '../../../types/api/schema';
-import type {AdditionalTenantsProps, AdditionalNodesProps} from '../../../types/additionalProps';
+import {parseQuery} from '../../../routes';
import {TENANT_PAGES_IDS} from '../../../store/reducers/tenant/constants';
-import {useSetting} from '../../../utils/hooks';
+import type {AdditionalNodesProps, AdditionalTenantsProps} from '../../../types/additionalProps';
+import type {EPathType} from '../../../types/api/schema';
+import {cn} from '../../../utils/cn';
import {TENANT_INITIAL_PAGE_KEY} from '../../../utils/constants';
-import {parseQuery} from '../../../routes';
-
-import {Query} from '../Query/Query';
+import {useSetting} from '../../../utils/hooks';
import Diagnostics from '../Diagnostics/Diagnostics';
+import {Query} from '../Query/Query';
import './ObjectGeneral.scss';
diff --git a/src/containers/Tenant/ObjectSummary/ObjectSummary.tsx b/src/containers/Tenant/ObjectSummary/ObjectSummary.tsx
index fbe53230d9..b7c21eb5b9 100644
--- a/src/containers/Tenant/ObjectSummary/ObjectSummary.tsx
+++ b/src/containers/Tenant/ObjectSummary/ObjectSummary.tsx
@@ -1,10 +1,11 @@
+import React from 'react';
+
import {HelpPopover} from '@gravity-ui/components';
import {Button, Tabs} from '@gravity-ui/uikit';
-import cn from 'bem-cn-lite';
import qs from 'qs';
-import React, {ReactNode, useEffect, useReducer} from 'react';
import {useLocation} from 'react-router';
import {Link} from 'react-router-dom';
+
import {ClipboardButton} from '../../../components/ClipboardButton';
import {Icon} from '../../../components/Icon';
import InfoViewer from '../../../components/InfoViewer/InfoViewer';
@@ -22,12 +23,13 @@ import {
TENANT_SUMMARY_TABS_IDS,
} from '../../../store/reducers/tenant/constants';
import {setQueryTab, setSummaryTab, setTenantPage} from '../../../store/reducers/tenant/tenant';
-import {
+import type {
EPathSubType,
- EPathType,
TColumnDescription,
TColumnTableDescription,
} from '../../../types/api/schema';
+import {EPathType} from '../../../types/api/schema';
+import {cn} from '../../../utils/cn';
import {
DEFAULT_IS_TENANT_COMMON_INFO_COLLAPSED,
DEFAULT_SIZE_TENANT_SUMMARY_KEY,
@@ -35,18 +37,19 @@ import {
import {formatDateTime} from '../../../utils/dataFormatters/dataFormatters';
import {useTypedDispatch, useTypedSelector} from '../../../utils/hooks';
import {Acl} from '../Acl/Acl';
-import i18n from '../i18n';
import {ExternalDataSourceSummary} from '../Info/ExternalDataSource/ExternalDataSource';
import {ExternalTableSummary} from '../Info/ExternalTable/ExternalTable';
import {SchemaTree} from '../Schema/SchemaTree/SchemaTree';
import {SchemaViewer} from '../Schema/SchemaViewer/SchemaViewer';
-import {TenantTabsGroups, TENANT_INFO_TABS, TENANT_SCHEMA_TAB} from '../TenantPages';
+import {TENANT_INFO_TABS, TENANT_SCHEMA_TAB, TenantTabsGroups} from '../TenantPages';
+import i18n from '../i18n';
import {
PaneVisibilityActionTypes,
PaneVisibilityToggleButtons,
paneVisibilityToggleReducerCreator,
} from '../utils/paneVisibilityToggleHelpers';
import {isColumnEntityType, isExternalTable, isIndexTable, isTableType} from '../utils/schema';
+
import './ObjectSummary.scss';
const b = cn('object-summary');
@@ -100,7 +103,7 @@ export function ObjectSummary({
isCollapsed,
}: ObjectSummaryProps) {
const dispatch = useTypedDispatch();
- const [commonInfoVisibilityState, dispatchCommonInfoVisibilityState] = useReducer(
+ const [commonInfoVisibilityState, dispatchCommonInfoVisibilityState] = React.useReducer(
paneVisibilityToggleReducerCreator(DEFAULT_IS_TENANT_COMMON_INFO_COLLAPSED),
undefined,
getTenantCommonInfoState,
@@ -142,7 +145,7 @@ export function ObjectSummary({
columns = currentObjectData?.PathDescription?.Table?.Columns;
}
- useEffect(() => {
+ React.useEffect(() => {
const isTable = isTableType(type);
if (type && !isTable && !TENANT_INFO_TABS.find((el) => el.id === summaryTab)) {
@@ -181,7 +184,7 @@ export function ObjectSummary({
const renderObjectOverview = () => {
// verbose mapping to guarantee a correct render for new path types
// TS will error when a new type is added but not mapped here
- const pathTypeToComponent: Record ReactNode) | undefined> = {
+ const pathTypeToComponent: Record React.ReactNode) | undefined> = {
[EPathType.EPathTypeInvalid]: undefined,
[EPathType.EPathTypeDir]: undefined,
[EPathType.EPathTypeTable]: undefined,
diff --git a/src/containers/Tenant/Query/ExecuteResult/ExecuteResult.tsx b/src/containers/Tenant/Query/ExecuteResult/ExecuteResult.tsx
index e496afcb68..a521f936d4 100644
--- a/src/containers/Tenant/Query/ExecuteResult/ExecuteResult.tsx
+++ b/src/containers/Tenant/Query/ExecuteResult/ExecuteResult.tsx
@@ -1,7 +1,8 @@
+import React from 'react';
+
import {RadioButton, Tabs} from '@gravity-ui/uikit';
-import cn from 'bem-cn-lite';
-import React, {useEffect, useState} from 'react';
import JSONTree from 'react-json-inspector';
+
import {ClipboardButton} from '../../../../components/ClipboardButton';
import Divider from '../../../../components/Divider/Divider';
import EnableFullscreenButton from '../../../../components/EnableFullscreenButton/EnableFullscreenButton';
@@ -13,12 +14,14 @@ import type {ColumnType, KeyValueRow} from '../../../../types/api/query';
import type {ValueOf} from '../../../../types/common';
import type {IQueryResult, QueryErrorResponse} from '../../../../types/store/query';
import {getArray} from '../../../../utils';
+import {cn} from '../../../../utils/cn';
import {useTypedDispatch, useTypedSelector} from '../../../../utils/hooks';
import {prepareQueryError} from '../../../../utils/query';
import {PaneVisibilityToggleButtons} from '../../utils/paneVisibilityToggleHelpers';
import {ResultIssues} from '../Issues/Issues';
import {QueryDuration} from '../QueryDuration/QueryDuration';
import {getPreparedResult} from '../utils/getPreparedResult';
+
import './ExecuteResult.scss';
const b = cn('ydb-query-execute-result');
@@ -52,8 +55,8 @@ export function ExecuteResult({
onCollapseResults,
onExpandResults,
}: ExecuteResultProps) {
- const [selectedResultSet, setSelectedResultSet] = useState(0);
- const [activeSection, setActiveSection] = useState(resultOptionsIds.result);
+ const [selectedResultSet, setSelectedResultSet] = React.useState(0);
+ const [activeSection, setActiveSection] = React.useState(resultOptionsIds.result);
const isFullscreen = useTypedSelector((state) => state.fullscreen);
const dispatch = useTypedDispatch();
@@ -65,7 +68,7 @@ export function ExecuteResult({
const textResults = getPreparedResult(currentResult);
const copyDisabled = !textResults.length;
- useEffect(() => {
+ React.useEffect(() => {
return () => {
dispatch(disableFullscreen());
};
@@ -84,7 +87,7 @@ export function ExecuteResult({
const renderContent = () => {
return (
- <>
+
{isMulti && resultsSetsCount > 1 && (
{renderResultTable(currentResult, currentColumns)}
- >
+
);
};
diff --git a/src/containers/Tenant/Query/ExplainResult/ExplainResult.js b/src/containers/Tenant/Query/ExplainResult/ExplainResult.js
index 2215587971..692e3808dc 100644
--- a/src/containers/Tenant/Query/ExplainResult/ExplainResult.js
+++ b/src/containers/Tenant/Query/ExplainResult/ExplainResult.js
@@ -1,28 +1,25 @@
-import React, {useEffect, useRef, useState} from 'react';
-import cn from 'bem-cn-lite';
-import {MonacoEditor} from '../../../../components/MonacoEditor/MonacoEditor';
-import JSONTree from 'react-json-inspector';
-import 'react-json-inspector/json-inspector.css';
+import React from 'react';
-import {TextOverflow, getYdbPlanNodeShape, getTopology} from '@gravity-ui/paranoid';
+import {TextOverflow, getTopology, getYdbPlanNodeShape} from '@gravity-ui/paranoid';
import {Loader, RadioButton} from '@gravity-ui/uikit';
+import JSONTree from 'react-json-inspector';
import Divider from '../../../../components/Divider/Divider';
import EnableFullscreenButton from '../../../../components/EnableFullscreenButton/EnableFullscreenButton';
import Fullscreen from '../../../../components/Fullscreen/Fullscreen';
+import {MonacoEditor} from '../../../../components/MonacoEditor/MonacoEditor';
import {QueryExecutionStatus} from '../../../../components/QueryExecutionStatus';
-
import {explainVersions} from '../../../../store/reducers/explainQuery';
import {disableFullscreen} from '../../../../store/reducers/fullscreen';
-
-import {LANGUAGE_S_EXPRESSION_ID} from '../../../../utils/monaco/s-expression/constants';
+import {cn} from '../../../../utils/cn';
import {useTypedDispatch, useTypedSelector} from '../../../../utils/hooks';
-
+import {LANGUAGE_S_EXPRESSION_ID} from '../../../../utils/monaco/s-expression/constants';
import {PaneVisibilityToggleButtons} from '../../utils/paneVisibilityToggleHelpers';
-import {renderExplainNode} from './utils';
+import {getColors, renderExplainNode} from './utils';
import './ExplainResult.scss';
+import 'react-json-inspector/json-inspector.css';
const b = cn('ydb-query-explain-result');
@@ -49,30 +46,11 @@ const explainOptions = [
];
function GraphRoot(props) {
- const paranoid = useRef();
+ const paranoid = React.useRef();
const {data, opts, shapes, theme} = props;
- const [componentTheme, updateComponentTheme] = useState(theme);
-
- useEffect(() => {
- updateComponentTheme(theme);
- }, [theme]);
-
- const render = () => {
- paranoid.current = getTopology('graphRoot', data, opts, shapes);
- paranoid.current.render();
- };
-
- useEffect(() => {
- render();
-
- return () => {
- paranoid.current = undefined;
- };
- }, []);
-
- useEffect(() => {
+ React.useEffect(() => {
const graphRoot = document.getElementById('graphRoot');
if (!graphRoot) {
@@ -81,10 +59,14 @@ function GraphRoot(props) {
graphRoot.innerHTML = '';
- render();
- }, [componentTheme]);
+ paranoid.current = getTopology('graphRoot', data, {...opts, colors: getColors()}, shapes);
+ paranoid.current.render();
+ return () => {
+ paranoid.current = undefined;
+ };
+ }, [theme]);
- useEffect(() => {
+ React.useEffect(() => {
paranoid.current?.updateData?.(props.data);
}, [props.data]);
@@ -93,15 +75,15 @@ function GraphRoot(props) {
export function ExplainResult(props) {
const dispatch = useTypedDispatch();
- const [activeOption, setActiveOption] = useState(ExplainOptionIds.schema);
+ const [activeOption, setActiveOption] = React.useState(ExplainOptionIds.schema);
const isFullscreen = useTypedSelector((state) => state.fullscreen);
- useEffect(() => {
+ React.useEffect(() => {
return () => {
dispatch(disableFullscreen());
};
- }, []);
+ }, [dispatch]);
const onSelectOption = (tabId) => {
setActiveOption(tabId);
@@ -162,8 +144,6 @@ export function ExplainResult(props) {
value={props.ast}
options={EDITOR_OPTIONS}
wrappingIndent="indent"
- // pass noop otherwise it will throw error
- editorWillUnmount={() => {}}
/>
);
diff --git a/src/containers/Tenant/Query/ExplainResult/utils.ts b/src/containers/Tenant/Query/ExplainResult/utils.ts
index 3056c39ad1..2bac451412 100644
--- a/src/containers/Tenant/Query/ExplainResult/utils.ts
+++ b/src/containers/Tenant/Query/ExplainResult/utils.ts
@@ -4,3 +4,44 @@ export const renderExplainNode = (node: GraphNode): string => {
const parts = node.name.split('|');
return parts.length > 1 ? parts[1] : node.name;
};
+
+export function getColors() {
+ const colorsMap: Record = {
+ success: '--g-color-text-positive',
+ error: '--g-color-text-danger',
+ warning: '--g-color-text-warning',
+ errorBackground: '--g-color-base-danger-medium',
+ warningBackground: '--g-color-base-warning-medium',
+ mute: '--g-color-line-generic',
+ stroke: '--g-color-text-hint',
+ fill: '--g-color-base-generic-ultralight',
+ nodeFill: '--g-color-base-float',
+ nodeShadow: '--g-color-sfx-shadow',
+ titleColor: '--g-color-text-primary',
+ textColor: '--g-color-text-complementary',
+ buttonBorderColor: '--g-color-line-generic',
+ // groupBorderColor: '--g-color-celestial-thunder',
+ // groupFill: '--g-color-celestial',
+ titleHoverColor: '--g-color-text-link-hover',
+ nodeHover: '--g-color-base-float-hover',
+ specialHover: '--g-color-line-focus',
+ };
+
+ const style = getComputedStyle(document.body);
+ const colors = Object.keys(colorsMap).reduce(
+ (acc, key) => {
+ const color = style.getPropertyValue(colorsMap[key]).replace(/ /g, '');
+ if (color) {
+ acc[key] = color;
+ }
+ return acc;
+ },
+ {} as Record,
+ );
+
+ const getCommonColor = (name: string) => {
+ return style.getPropertyValue(`--g-color-${name}`).replace(/ /g, '');
+ };
+
+ return {...colors, getCommonColor};
+}
diff --git a/src/containers/Tenant/Query/Issues/Issues.tsx b/src/containers/Tenant/Query/Issues/Issues.tsx
index 4b7d7426e6..38ba5af1e3 100644
--- a/src/containers/Tenant/Query/Issues/Issues.tsx
+++ b/src/containers/Tenant/Query/Issues/Issues.tsx
@@ -1,17 +1,19 @@
-import * as React from 'react';
-import cn from 'bem-cn-lite';
+import React from 'react';
-import {Button, Icon, ArrowToggle} from '@gravity-ui/uikit';
-import ShortyString from '../../../../components/ShortyString/ShortyString';
+import type {IconData} from '@gravity-ui/uikit';
+import {ArrowToggle, Button, Icon} from '@gravity-ui/uikit';
+import ShortyString from '../../../../components/ShortyString/ShortyString';
import type {ErrorResponse, IssueMessage} from '../../../../types/api/query';
+import {cn} from '../../../../utils/cn';
+
+import type {SEVERITY} from './models';
+import {getSeverity} from './models';
-import fatalIcon from '../../../../assets/icons/circle-xmark.svg';
-import errorIcon from '../../../../assets/icons/triangle-exclamation.svg';
import warningIcon from '../../../../assets/icons/circle-exclamation.svg';
import infoIcon from '../../../../assets/icons/circle-info.svg';
-
-import {SEVERITY, getSeverity} from './models';
+import fatalIcon from '../../../../assets/icons/circle-xmark.svg';
+import errorIcon from '../../../../assets/icons/triangle-exclamation.svg';
import './Issues.scss';
@@ -143,7 +145,7 @@ function IssueList(props: {issues: IssueMessage[]; expanded: boolean; level: num
);
}
-const severityIcons: Record = {
+const severityIcons: Record = {
S_INFO: infoIcon,
S_WARNING: warningIcon,
S_ERROR: errorIcon,
diff --git a/src/containers/Tenant/Query/Issues/models.ts b/src/containers/Tenant/Query/Issues/models.ts
index 93fc0a538c..cc61603d71 100644
--- a/src/containers/Tenant/Query/Issues/models.ts
+++ b/src/containers/Tenant/Query/Issues/models.ts
@@ -1,6 +1,6 @@
export const SEVERITY_LIST = ['S_FATAL', 'S_ERROR', 'S_WARNING', 'S_INFO'] as const;
-export type SEVERITY = typeof SEVERITY_LIST[number];
+export type SEVERITY = (typeof SEVERITY_LIST)[number];
// Severity values from ydb/library/yql/public/issue/protos/issue_severity.proto
// FATAL = 0;
diff --git a/src/containers/Tenant/Query/Preview/Preview.tsx b/src/containers/Tenant/Query/Preview/Preview.tsx
index 1d2ce248f4..949d208ed8 100644
--- a/src/containers/Tenant/Query/Preview/Preview.tsx
+++ b/src/containers/Tenant/Query/Preview/Preview.tsx
@@ -1,21 +1,18 @@
-import {useCallback} from 'react';
-import cn from 'bem-cn-lite';
+import React from 'react';
-import {Loader, Button} from '@gravity-ui/uikit';
+import {Button, Loader} from '@gravity-ui/uikit';
-import type {EPathType} from '../../../../types/api/schema';
+import EnableFullscreenButton from '../../../../components/EnableFullscreenButton/EnableFullscreenButton';
+import Fullscreen from '../../../../components/Fullscreen/Fullscreen';
+import {Icon} from '../../../../components/Icon';
+import {QueryResultTable} from '../../../../components/QueryResultTable';
import {sendQuery, setQueryOptions} from '../../../../store/reducers/preview';
import {setShowPreview} from '../../../../store/reducers/schema/schema';
-import {prepareQueryError} from '../../../../utils/query';
+import type {EPathType} from '../../../../types/api/schema';
+import {cn} from '../../../../utils/cn';
import {useAutofetcher, useTypedDispatch, useTypedSelector} from '../../../../utils/hooks';
-
-import {Icon} from '../../../../components/Icon';
-import Fullscreen from '../../../../components/Fullscreen/Fullscreen';
-import {QueryResultTable} from '../../../../components/QueryResultTable';
-import EnableFullscreenButton from '../../../../components/EnableFullscreenButton/EnableFullscreenButton';
-
+import {prepareQueryError} from '../../../../utils/query';
import {isExternalTable, isTableType} from '../../utils/schema';
-
import i18n from '../i18n';
import './Preview.scss';
@@ -34,8 +31,8 @@ export const Preview = ({database, type}: PreviewProps) => {
const {autorefresh, currentSchemaPath} = useTypedSelector((state) => state.schema);
const isFullscreen = useTypedSelector((state) => state.fullscreen);
- const sendQueryForPreview = useCallback(
- (isBackground) => {
+ const sendQueryForPreview = React.useCallback(
+ (isBackground: boolean) => {
if (!isTableType(type)) {
return;
}
diff --git a/src/containers/Tenant/Query/QueriesHistory/QueriesHistory.tsx b/src/containers/Tenant/Query/QueriesHistory/QueriesHistory.tsx
index 3fe44e1707..627e4cfa99 100644
--- a/src/containers/Tenant/Query/QueriesHistory/QueriesHistory.tsx
+++ b/src/containers/Tenant/Query/QueriesHistory/QueriesHistory.tsx
@@ -1,21 +1,20 @@
-import block from 'bem-cn-lite';
+import type {Column} from '@gravity-ui/react-data-table';
+import DataTable from '@gravity-ui/react-data-table';
-import DataTable, {Column} from '@gravity-ui/react-data-table';
-
-import type {QueryInHistory} from '../../../../types/store/executeQuery';
import {TruncatedQuery} from '../../../../components/TruncatedQuery/TruncatedQuery';
-import {setQueryTab} from '../../../../store/reducers/tenant/tenant';
import {selectQueriesHistory} from '../../../../store/reducers/executeQuery';
import {TENANT_QUERY_TABS_ID} from '../../../../store/reducers/tenant/constants';
+import {setQueryTab} from '../../../../store/reducers/tenant/tenant';
+import type {QueryInHistory} from '../../../../types/store/executeQuery';
+import {cn} from '../../../../utils/cn';
import {useQueryModes, useTypedDispatch, useTypedSelector} from '../../../../utils/hooks';
import {QUERY_MODES, QUERY_SYNTAX} from '../../../../utils/query';
import {MAX_QUERY_HEIGHT, QUERY_TABLE_SETTINGS} from '../../utils/constants';
-
import i18n from '../i18n';
import './QueriesHistory.scss';
-const b = block('ydb-queries-history');
+const b = cn('ydb-queries-history');
interface QueriesHistoryProps {
changeUserInput: (value: {input: string}) => void;
diff --git a/src/containers/Tenant/Query/Query.tsx b/src/containers/Tenant/Query/Query.tsx
index 29835e839b..6d819309b9 100644
--- a/src/containers/Tenant/Query/Query.tsx
+++ b/src/containers/Tenant/Query/Query.tsx
@@ -1,22 +1,23 @@
import React from 'react';
+
import {Helmet} from 'react-helmet-async';
-import block from 'bem-cn-lite';
-import type {EPathType} from '../../../types/api/schema';
-import type {SavedQuery} from '../../../types/store/query';
import {changeUserInput} from '../../../store/reducers/executeQuery';
import {TENANT_QUERY_TABS_ID} from '../../../store/reducers/tenant/constants';
-import {useSetting, useTypedDispatch, useTypedSelector} from '../../../utils/hooks';
+import type {EPathType} from '../../../types/api/schema';
+import type {SavedQuery} from '../../../types/store/query';
+import {cn} from '../../../utils/cn';
import {SAVED_QUERIES_KEY} from '../../../utils/constants';
+import {useSetting, useTypedDispatch, useTypedSelector} from '../../../utils/hooks';
-import {QueryTabs, queryEditorTabs} from './QueryTabs/QueryTabs';
-import {SavedQueries} from './SavedQueries/SavedQueries';
import QueriesHistory from './QueriesHistory/QueriesHistory';
import QueryEditor from './QueryEditor/QueryEditor';
+import {QueryTabs, queryEditorTabs} from './QueryTabs/QueryTabs';
+import {SavedQueries} from './SavedQueries/SavedQueries';
import './Query.scss';
-const b = block('ydb-query');
+const b = cn('ydb-query');
interface QueryProps {
theme: string;
diff --git a/src/containers/Tenant/Query/QueryDuration/QueryDuration.tsx b/src/containers/Tenant/Query/QueryDuration/QueryDuration.tsx
index 1b067640fd..b459687ae6 100644
--- a/src/containers/Tenant/Query/QueryDuration/QueryDuration.tsx
+++ b/src/containers/Tenant/Query/QueryDuration/QueryDuration.tsx
@@ -1,8 +1,6 @@
-import block from 'bem-cn-lite';
-
-import {formatDurationToShortTimeFormat, parseUsToMs} from '../../../../utils/timeParsers';
import {LabelWithPopover} from '../../../../components/LabelWithPopover';
-
+import {cn} from '../../../../utils/cn';
+import {formatDurationToShortTimeFormat, parseUsToMs} from '../../../../utils/timeParsers';
import i18n from '../i18n';
import './QueryDuration.scss';
@@ -11,7 +9,7 @@ interface QueryDurationProps {
duration?: string | number;
}
-const b = block('ydb-query-duration');
+const b = cn('ydb-query-duration');
export const QueryDuration = ({duration}: QueryDurationProps) => {
if (!duration) {
diff --git a/src/containers/Tenant/Query/QueryEditor/QueryEditor.tsx b/src/containers/Tenant/Query/QueryEditor/QueryEditor.tsx
index 4f8b196302..e65e0116f7 100644
--- a/src/containers/Tenant/Query/QueryEditor/QueryEditor.tsx
+++ b/src/containers/Tenant/Query/QueryEditor/QueryEditor.tsx
@@ -1,52 +1,50 @@
-import {useEffect, useReducer, useRef, useState} from 'react';
-import {connect} from 'react-redux';
-import cn from 'bem-cn-lite';
+import React from 'react';
+
import throttle from 'lodash/throttle';
-import {MonacoEditor} from '../../../../components/MonacoEditor/MonacoEditor';
import type Monaco from 'monaco-editor';
+import {connect} from 'react-redux';
+import {MonacoEditor} from '../../../../components/MonacoEditor/MonacoEditor';
import SplitPane from '../../../../components/SplitPane';
-
+import type {RootState} from '../../../../store';
import {
- sendExecuteQuery,
- saveQueryToHistory,
- goToPreviousQuery,
goToNextQuery,
+ goToPreviousQuery,
+ saveQueryToHistory,
+ sendExecuteQuery,
setTenantPath,
} from '../../../../store/reducers/executeQuery';
import {getExplainQuery, getExplainQueryAst} from '../../../../store/reducers/explainQuery';
import {setShowPreview} from '../../../../store/reducers/schema/schema';
+import type {EPathType} from '../../../../types/api/schema';
+import type {ValueOf} from '../../../../types/common';
+import type {ExecuteQueryState} from '../../../../types/store/executeQuery';
+import type {ExplainQueryState} from '../../../../types/store/explainQuery';
+import type {QueryAction, QueryMode, SavedQuery} from '../../../../types/store/query';
+import {cn} from '../../../../utils/cn';
import {
DEFAULT_IS_QUERY_RESULT_COLLAPSED,
DEFAULT_SIZE_RESULT_PANE_KEY,
- SAVED_QUERIES_KEY,
LAST_USED_QUERY_ACTION_KEY,
QUERY_USE_MULTI_SCHEMA_KEY,
+ SAVED_QUERIES_KEY,
} from '../../../../utils/constants';
-import {useSetting, useQueryModes} from '../../../../utils/hooks';
+import {useQueryModes, useSetting} from '../../../../utils/hooks';
import {QUERY_ACTIONS} from '../../../../utils/query';
import {parseJson} from '../../../../utils/utils';
-import {useEditorOptions} from './helpers';
-
+import type {InitialPaneState} from '../../utils/paneVisibilityToggleHelpers';
import {
- InitialPaneState,
PaneVisibilityActionTypes,
paneVisibilityToggleReducerCreator,
} from '../../utils/paneVisibilityToggleHelpers';
-import {Preview} from '../Preview/Preview';
-
import {ExecuteResult} from '../ExecuteResult/ExecuteResult';
import {ExplainResult} from '../ExplainResult/ExplainResult';
+import {Preview} from '../Preview/Preview';
import {QueryEditorControls} from '../QueryEditorControls/QueryEditorControls';
-
-import type {QueryAction, QueryMode, SavedQuery} from '../../../../types/store/query';
-import type {ExecuteQueryState} from '../../../../types/store/executeQuery';
-import type {ExplainQueryState} from '../../../../types/store/explainQuery';
-import type {ValueOf} from '../../../../types/common';
-import type {EPathType} from '../../../../types/api/schema';
-import type {RootState} from '../../../../store';
import i18n from '../i18n';
+import {useEditorOptions} from './helpers';
+
import './QueryEditor.scss';
const CONTEXT_MENU_GROUP_ID = 'navigation';
@@ -99,20 +97,20 @@ function QueryEditor(props: QueryEditorProps) {
} = props;
const {tenantPath: savedPath} = executeQuery;
- const [resultType, setResultType] = useState(RESULT_TYPES.EXECUTE);
+ const [resultType, setResultType] = React.useState(RESULT_TYPES.EXECUTE);
- const [isResultLoaded, setIsResultLoaded] = useState(false);
+ const [isResultLoaded, setIsResultLoaded] = React.useState(false);
const [queryMode, setQueryMode] = useQueryModes();
const [useMultiSchema] = useSetting(QUERY_USE_MULTI_SCHEMA_KEY);
const [lastUsedQueryAction, setLastUsedQueryAction] = useSetting(
LAST_USED_QUERY_ACTION_KEY,
);
const [savedQueries, setSavedQueries] = useSetting(SAVED_QUERIES_KEY);
- const [monacoHotKey, setMonacoHotKey] = useState | null>(
- null,
- );
+ const [monacoHotKey, setMonacoHotKey] = React.useState | null>(null);
- useEffect(() => {
+ React.useEffect(() => {
if (savedPath !== path) {
if (savedPath) {
changeUserInput({input: ''});
@@ -121,14 +119,14 @@ function QueryEditor(props: QueryEditorProps) {
}
}, [changeUserInput, setPath, path, savedPath]);
- const [resultVisibilityState, dispatchResultVisibilityState] = useReducer(
+ const [resultVisibilityState, dispatchResultVisibilityState] = React.useReducer(
paneVisibilityToggleReducerCreator(DEFAULT_IS_QUERY_RESULT_COLLAPSED),
initialTenantCommonInfoState,
);
- const editorRef = useRef();
+ const editorRef = React.useRef();
- useEffect(() => {
+ React.useEffect(() => {
const updateEditor = () => {
if (editorRef.current) {
editorRef.current.layout();
@@ -147,7 +145,7 @@ function QueryEditor(props: QueryEditorProps) {
};
}, []);
- useEffect(() => {
+ React.useEffect(() => {
const storageEventHandler = (event: StorageEvent) => {
if (event.key === SAVED_QUERIES_KEY) {
const v = parseJson(event.newValue);
@@ -161,11 +159,11 @@ function QueryEditor(props: QueryEditorProps) {
};
}, [setSavedQueries]);
- useEffect(() => {
+ React.useEffect(() => {
dispatchResultVisibilityState(PaneVisibilityActionTypes.triggerCollapse);
}, []);
- useEffect(() => {
+ React.useEffect(() => {
if (props.showPreview || isResultLoaded) {
dispatchResultVisibilityState(PaneVisibilityActionTypes.triggerExpand);
} else {
@@ -173,7 +171,7 @@ function QueryEditor(props: QueryEditorProps) {
}
}, [props.showPreview, isResultLoaded]);
- useEffect(() => {
+ React.useEffect(() => {
const {input, history} = executeQuery;
const hasUnsavedInput = input
@@ -240,7 +238,7 @@ function QueryEditor(props: QueryEditorProps) {
dispatchResultVisibilityState(PaneVisibilityActionTypes.triggerExpand);
};
- useEffect(() => {
+ React.useEffect(() => {
if (monacoHotKey === null) {
return;
}
@@ -293,7 +291,7 @@ function QueryEditor(props: QueryEditorProps) {
run: () => setMonacoHotKey(MONACO_HOT_KEY_ACTIONS.sendQuery),
});
- const canSendSelectedText = editor.createContextKey('canSendSelectedText', false);
+ const canSendSelectedText = editor.createContextKey('canSendSelectedText', false);
editor.onDidChangeCursorSelection(({selection, secondarySelections}) => {
const notEmpty =
selection.selectionStartLineNumber !== selection.positionLineNumber ||
@@ -419,8 +417,6 @@ function QueryEditor(props: QueryEditorProps) {
options={editorOptions}
onChange={onChange}
editorDidMount={editorDidMount}
- // pass noop otherwise it will throw error
- editorWillUnmount={() => {}}
theme={`vs-${theme}`}
/>
diff --git a/src/containers/Tenant/Query/QueryEditor/helpers.ts b/src/containers/Tenant/Query/QueryEditor/helpers.ts
index 9cc5a0234e..97dfdf774f 100644
--- a/src/containers/Tenant/Query/QueryEditor/helpers.ts
+++ b/src/containers/Tenant/Query/QueryEditor/helpers.ts
@@ -1,6 +1,8 @@
+import React from 'react';
+
import type Monaco from 'monaco-editor';
+
import {ENABLE_AUTOCOMPLETE, useSetting} from '../../../../lib';
-import {useMemo} from 'react';
export type EditorOptions = Monaco.editor.IEditorOptions & Monaco.editor.IGlobalEditorOptions;
@@ -15,7 +17,7 @@ export const EDITOR_OPTIONS: EditorOptions = {
export function useEditorOptions() {
const [enableAutocomplete] = useSetting(ENABLE_AUTOCOMPLETE);
- const options = useMemo(() => {
+ const options = React.useMemo(() => {
const useAutocomplete = Boolean(enableAutocomplete);
return {
quickSuggestions: useAutocomplete,
diff --git a/src/containers/Tenant/Query/QueryEditorControls/QueryEditorControls.scss b/src/containers/Tenant/Query/QueryEditorControls/QueryEditorControls.scss
index cfc2187579..4241d69f95 100644
--- a/src/containers/Tenant/Query/QueryEditorControls/QueryEditorControls.scss
+++ b/src/containers/Tenant/Query/QueryEditorControls/QueryEditorControls.scss
@@ -3,12 +3,11 @@
flex: 0 0 40px;
justify-content: space-between;
align-items: flex-end;
+ gap: 24px;
min-height: 40px;
padding: 5px 0px;
- gap: 24px;
-
&__left {
display: flex;
gap: 12px;
diff --git a/src/containers/Tenant/Query/QueryEditorControls/QueryEditorControls.tsx b/src/containers/Tenant/Query/QueryEditorControls/QueryEditorControls.tsx
index 2248fa0b25..5486de6a5b 100644
--- a/src/containers/Tenant/Query/QueryEditorControls/QueryEditorControls.tsx
+++ b/src/containers/Tenant/Query/QueryEditorControls/QueryEditorControls.tsx
@@ -1,15 +1,14 @@
-import block from 'bem-cn-lite';
+import React from 'react';
-import {Button, ButtonView, DropdownMenu} from '@gravity-ui/uikit';
-import {useMemo} from 'react';
+import type {ButtonView} from '@gravity-ui/uikit';
+import {Button, DropdownMenu} from '@gravity-ui/uikit';
-import type {QueryAction, QueryMode} from '../../../../types/store/query';
-import {QUERY_MODES, QUERY_MODES_TITLES} from '../../../../utils/query';
import {Icon} from '../../../../components/Icon';
import {LabelWithPopover} from '../../../../components/LabelWithPopover';
-
+import type {QueryAction, QueryMode} from '../../../../types/store/query';
+import {cn} from '../../../../utils/cn';
+import {QUERY_MODES, QUERY_MODES_TITLES} from '../../../../utils/query';
import SaveQuery from '../SaveQuery/SaveQuery';
-
import i18n from '../i18n';
import './QueryEditorControls.scss';
@@ -17,7 +16,7 @@ import './QueryEditorControls.scss';
const queryModeSelectorQa = 'query-mode-selector';
const queryModeSelectorPopupQa = 'query-mode-selector-popup';
-const b = block('ydb-query-editor-controls');
+const b = cn('ydb-query-editor-controls');
const QueryModeSelectorOptions = {
[QUERY_MODES.script]: {
@@ -67,7 +66,7 @@ export const QueryEditorControls = ({
queryMode,
highlightedAction,
}: QueryEditorControlsProps) => {
- const querySelectorMenuItems = useMemo(() => {
+ const querySelectorMenuItems = React.useMemo(() => {
return Object.entries(QueryModeSelectorOptions).map(([mode, {title, description}]) => {
return {
text: (
diff --git a/src/containers/Tenant/Query/QueryTabs/QueryTabs.tsx b/src/containers/Tenant/Query/QueryTabs/QueryTabs.tsx
index 0e6a7eb991..047c81cd2d 100644
--- a/src/containers/Tenant/Query/QueryTabs/QueryTabs.tsx
+++ b/src/containers/Tenant/Query/QueryTabs/QueryTabs.tsx
@@ -1,14 +1,11 @@
-import {useLocation} from 'react-router';
-
import {Tabs} from '@gravity-ui/uikit';
+import {useLocation} from 'react-router';
-import type {TenantQueryTab} from '../../../../store/reducers/tenant/types';
-import {TENANT_QUERY_TABS_ID} from '../../../../store/reducers/tenant/constants';
import {InternalLink} from '../../../../components/InternalLink/InternalLink';
import {parseQuery} from '../../../../routes';
-
+import {TENANT_QUERY_TABS_ID} from '../../../../store/reducers/tenant/constants';
+import type {TenantQueryTab} from '../../../../store/reducers/tenant/types';
import {TenantTabsGroups, getTenantPath} from '../../TenantPages';
-
import i18n from '../i18n';
const newQuery = {
diff --git a/src/containers/Tenant/Query/SaveQuery/SaveQuery.js b/src/containers/Tenant/Query/SaveQuery/SaveQuery.js
index 2a29762402..d0db3fa253 100644
--- a/src/containers/Tenant/Query/SaveQuery/SaveQuery.js
+++ b/src/containers/Tenant/Query/SaveQuery/SaveQuery.js
@@ -1,9 +1,10 @@
-import React, {useState} from 'react';
+import React from 'react';
+
+import {Button, Dialog, DropdownMenu, TextInput} from '@gravity-ui/uikit';
import some from 'lodash/some';
-import cn from 'bem-cn-lite';
-import {Dialog, DropdownMenu, TextInput, Button} from '@gravity-ui/uikit';
import {setQueryNameToEdit} from '../../../../store/reducers/saveQuery';
+import {cn} from '../../../../utils/cn';
import {useTypedDispatch, useTypedSelector} from '../../../../utils/hooks';
import './SaveQuery.scss';
@@ -12,9 +13,9 @@ const b = cn('kv-save-query');
function SaveQuery({savedQueries, onSaveQuery, saveButtonDisabled}) {
const singleClusterMode = useTypedSelector((state) => state.singleClusterMode);
- const [isDialogVisible, setIsDialogVisible] = useState(false);
- const [queryName, setQueryName] = useState('');
- const [validationError, setValidationError] = useState(null);
+ const [isDialogVisible, setIsDialogVisible] = React.useState(false);
+ const [queryName, setQueryName] = React.useState('');
+ const [validationError, setValidationError] = React.useState(null);
const queryNameToEdit = useTypedSelector((state) => state.saveQuery);
const dispatch = useTypedDispatch();
diff --git a/src/containers/Tenant/Query/SavedQueries/SavedQueries.tsx b/src/containers/Tenant/Query/SavedQueries/SavedQueries.tsx
index 6676beac6d..9d8adc1d6d 100644
--- a/src/containers/Tenant/Query/SavedQueries/SavedQueries.tsx
+++ b/src/containers/Tenant/Query/SavedQueries/SavedQueries.tsx
@@ -1,25 +1,23 @@
-import {MouseEvent, useState} from 'react';
-import block from 'bem-cn-lite';
+import React from 'react';
-import {Dialog, Button} from '@gravity-ui/uikit';
-import DataTable, {Column} from '@gravity-ui/react-data-table';
+import type {Column} from '@gravity-ui/react-data-table';
+import DataTable from '@gravity-ui/react-data-table';
+import {Button, Dialog} from '@gravity-ui/uikit';
-import type {SavedQuery} from '../../../../types/store/query';
+import {Icon} from '../../../../components/Icon';
+import {TruncatedQuery} from '../../../../components/TruncatedQuery/TruncatedQuery';
import {setQueryNameToEdit} from '../../../../store/reducers/saveQuery';
-import {setQueryTab} from '../../../../store/reducers/tenant/tenant';
import {TENANT_QUERY_TABS_ID} from '../../../../store/reducers/tenant/constants';
-
-import {TruncatedQuery} from '../../../../components/TruncatedQuery/TruncatedQuery';
-import {Icon} from '../../../../components/Icon';
-
+import {setQueryTab} from '../../../../store/reducers/tenant/tenant';
+import type {SavedQuery} from '../../../../types/store/query';
+import {cn} from '../../../../utils/cn';
import {useTypedDispatch} from '../../../../utils/hooks';
import {MAX_QUERY_HEIGHT, QUERY_TABLE_SETTINGS} from '../../utils/constants';
-
import i18n from '../i18n';
import './SavedQueries.scss';
-const b = block('ydb-saved-queries');
+const b = cn('ydb-saved-queries');
interface DeleteDialogProps {
visible: boolean;
@@ -61,8 +59,8 @@ interface SavedQueriesProps {
export const SavedQueries = ({savedQueries, changeUserInput, onDeleteQuery}: SavedQueriesProps) => {
const dispatch = useTypedDispatch();
- const [isDeleteDialogVisible, setIsDeleteDialogVisible] = useState(false);
- const [queryNameToDelete, setQueryNameToDelete] = useState('');
+ const [isDeleteDialogVisible, setIsDeleteDialogVisible] = React.useState(false);
+ const [queryNameToDelete, setQueryNameToDelete] = React.useState('');
const closeDeleteDialog = () => {
setIsDeleteDialogVisible(false);
@@ -86,7 +84,7 @@ export const SavedQueries = ({savedQueries, changeUserInput, onDeleteQuery}: Sav
};
const onDeleteQueryClick = (queryName: string) => {
- return (event: MouseEvent) => {
+ return (event: React.MouseEvent) => {
event.stopPropagation();
setIsDeleteDialogVisible(true);
setQueryNameToDelete(queryName);
@@ -123,7 +121,7 @@ export const SavedQueries = ({savedQueries, changeUserInput, onDeleteQuery}: Sav
];
return (
- <>
+
- >
+
);
};
diff --git a/src/containers/Tenant/Schema/SchemaTree/SchemaTree.tsx b/src/containers/Tenant/Schema/SchemaTree/SchemaTree.tsx
index a30aab53b0..8fc33e635e 100644
--- a/src/containers/Tenant/Schema/SchemaTree/SchemaTree.tsx
+++ b/src/containers/Tenant/Schema/SchemaTree/SchemaTree.tsx
@@ -1,11 +1,10 @@
-import {useEffect} from 'react';
+import React from 'react';
import {NavigationTree} from 'ydb-ui-components';
+import {preloadSchemas, setCurrentSchemaPath} from '../../../../store/reducers/schema/schema';
import type {EPathType, TEvDescribeSchemeResult} from '../../../../types/api/schema';
-import {setCurrentSchemaPath, preloadSchemas} from '../../../../store/reducers/schema/schema';
import {useQueryModes, useTypedDispatch} from '../../../../utils/hooks';
-
import {isChildlessPathType, mapPathTypeToNavigationTreeType} from '../../utils/schema';
import {getActions} from '../../utils/schemaActions';
import {getControls} from '../../utils/schemaControls';
@@ -61,7 +60,7 @@ export function SchemaTree(props: SchemaTreeProps) {
dispatch(setCurrentSchemaPath(activePath));
};
- useEffect(() => {
+ React.useEffect(() => {
// if the cached path is not in the current tree, show root
if (!currentPath?.startsWith(rootPath)) {
handleActivePathUpdate(rootPath);
diff --git a/src/containers/Tenant/Schema/SchemaViewer/SchemaViewer.tsx b/src/containers/Tenant/Schema/SchemaViewer/SchemaViewer.tsx
index 13195fdfb9..c1a3018d61 100644
--- a/src/containers/Tenant/Schema/SchemaViewer/SchemaViewer.tsx
+++ b/src/containers/Tenant/Schema/SchemaViewer/SchemaViewer.tsx
@@ -1,13 +1,12 @@
-import {useMemo} from 'react';
-import cn from 'bem-cn-lite';
+import React from 'react';
-import DataTable, {Column} from '@gravity-ui/react-data-table';
+import type {Column} from '@gravity-ui/react-data-table';
+import DataTable from '@gravity-ui/react-data-table';
+import {Icon} from '../../../../components/Icon';
import type {EPathType, TColumnDescription} from '../../../../types/api/schema';
+import {cn} from '../../../../utils/cn';
import {DEFAULT_TABLE_SETTINGS} from '../../../../utils/constants';
-
-import {Icon} from '../../../../components/Icon';
-
import {isExternalTable} from '../../utils/schema';
import './SchemaViewer.scss';
@@ -30,7 +29,7 @@ interface SchemaViewerProps {
export const SchemaViewer = ({keyColumnIds = [], columns = [], type}: SchemaViewerProps) => {
// Keys should be displayd by their order in keyColumnIds (Primary Key)
- const keyColumnsOrderValues = useMemo(() => {
+ const keyColumnsOrderValues = React.useMemo(() => {
return keyColumnIds.reduce
>((result, keyColumnId, index) => {
// Put columns with negative values, so they will be the first with ascending sort
// Minus keyColumnIds.length for the first key, -1 for the last
diff --git a/src/containers/Tenant/Tenant.tsx b/src/containers/Tenant/Tenant.tsx
index 8cd9ebfa77..34331db07a 100644
--- a/src/containers/Tenant/Tenant.tsx
+++ b/src/containers/Tenant/Tenant.tsx
@@ -1,28 +1,26 @@
-import {useEffect, useReducer, useRef} from 'react';
-import cn from 'bem-cn-lite';
-import {useLocation} from 'react-router';
+import React from 'react';
+
import qs from 'qs';
import {Helmet} from 'react-helmet-async';
+import {useLocation} from 'react-router';
-import type {TEvDescribeSchemeResult} from '../../types/api/schema';
-import type {AdditionalTenantsProps, AdditionalNodesProps} from '../../types/additionalProps';
-
-import {DEFAULT_IS_TENANT_SUMMARY_COLLAPSED, DEFAULT_SIZE_TENANT_KEY} from '../../utils/constants';
-import {useTypedSelector, useTypedDispatch} from '../../utils/hooks';
+import {AccessDenied} from '../../components/Errors/403';
+import SplitPane from '../../components/SplitPane';
import {setHeaderBreadcrumbs} from '../../store/reducers/header/header';
import {disableAutorefresh, getSchema} from '../../store/reducers/schema/schema';
+import type {AdditionalNodesProps, AdditionalTenantsProps} from '../../types/additionalProps';
+import type {TEvDescribeSchemeResult} from '../../types/api/schema';
+import {cn} from '../../utils/cn';
+import {DEFAULT_IS_TENANT_SUMMARY_COLLAPSED, DEFAULT_SIZE_TENANT_KEY} from '../../utils/constants';
+import {useTypedDispatch, useTypedSelector} from '../../utils/hooks';
-import SplitPane from '../../components/SplitPane';
-import {AccessDenied} from '../../components/Errors/403';
-
-import {ObjectSummary} from './ObjectSummary/ObjectSummary';
import ObjectGeneral from './ObjectGeneral/ObjectGeneral';
-
+import {ObjectSummary} from './ObjectSummary/ObjectSummary';
+import i18n from './i18n';
import {
PaneVisibilityActionTypes,
paneVisibilityToggleReducerCreator,
} from './utils/paneVisibilityToggleHelpers';
-import i18n from './i18n';
import './Tenant.scss';
@@ -44,23 +42,23 @@ interface TenantProps {
}
function Tenant(props: TenantProps) {
- const [summaryVisibilityState, dispatchSummaryVisibilityAction] = useReducer(
+ const [summaryVisibilityState, dispatchSummaryVisibilityAction] = React.useReducer(
paneVisibilityToggleReducerCreator(DEFAULT_IS_TENANT_SUMMARY_COLLAPSED),
undefined,
getTenantSummaryState,
);
- const previousTenant = useRef();
+ const previousTenant = React.useRef();
const {currentSchemaPath, currentSchema: currentItem = {}} = useTypedSelector(
(state) => state.schema,
);
- const {PathType: preloadedPathType, PathSubType: preloadedPathSubType} = useTypedSelector(
- (state) =>
+ const {PathType: preloadedPathType, PathSubType: preloadedPathSubType} =
+ useTypedSelector((state) =>
currentSchemaPath
- ? state.schema.data[currentSchemaPath]?.PathDescription?.Self || {}
- : {},
- );
+ ? state.schema.data[currentSchemaPath]?.PathDescription?.Self
+ : undefined,
+ ) || {};
const {PathType: currentPathType, PathSubType: currentPathSubType} =
(currentItem as TEvDescribeSchemeResult).PathDescription?.Self || {};
@@ -78,7 +76,7 @@ function Tenant(props: TenantProps) {
const {name} = queryParams;
const tenantName = name as string;
- useEffect(() => {
+ React.useEffect(() => {
if (tenantName && typeof tenantName === 'string' && previousTenant.current !== tenantName) {
const register = async () => {
const {registerYQLCompletionItemProvider} = await import(
@@ -91,21 +89,21 @@ function Tenant(props: TenantProps) {
}
}, [tenantName]);
- useEffect(() => {
+ React.useEffect(() => {
dispatch(getSchema({path: tenantName}));
}, [tenantName, dispatch]);
- useEffect(() => {
+ React.useEffect(() => {
if (currentSchemaPath) {
dispatch(getSchema({path: currentSchemaPath}));
}
}, [currentSchemaPath, dispatch]);
- useEffect(() => {
+ React.useEffect(() => {
dispatch(disableAutorefresh());
}, [currentSchemaPath, tenantName, dispatch]);
- useEffect(() => {
+ React.useEffect(() => {
if (tenantName) {
dispatch(setHeaderBreadcrumbs('tenant', {tenantName}));
}
diff --git a/src/containers/Tenant/utils/index.ts b/src/containers/Tenant/utils/index.ts
index 212ba4251a..f85b2cccaf 100644
--- a/src/containers/Tenant/utils/index.ts
+++ b/src/containers/Tenant/utils/index.ts
@@ -1,4 +1,5 @@
-import {TPathDescription} from '../../../types/api/schema';
+import type {TPathDescription} from '../../../types/api/schema';
+
import {mapPathTypeToEntityName} from './schema';
export const getEntityName = (pathDescription?: TPathDescription) => {
diff --git a/src/containers/Tenant/utils/paneVisibilityToggleHelpers.tsx b/src/containers/Tenant/utils/paneVisibilityToggleHelpers.tsx
index 433fc0d001..e756b86686 100644
--- a/src/containers/Tenant/utils/paneVisibilityToggleHelpers.tsx
+++ b/src/containers/Tenant/utils/paneVisibilityToggleHelpers.tsx
@@ -1,8 +1,9 @@
import React from 'react';
+
import {Button} from '@gravity-ui/uikit';
-import cn from 'bem-cn-lite';
import {Icon} from '../../../components/Icon';
+import {cn} from '../../../utils/cn';
import './ToggleButton.scss';
diff --git a/src/containers/Tenant/utils/schemaActions.ts b/src/containers/Tenant/utils/schemaActions.ts
index b854472325..eee65e6568 100644
--- a/src/containers/Tenant/utils/schemaActions.ts
+++ b/src/containers/Tenant/utils/schemaActions.ts
@@ -1,14 +1,11 @@
-import {Dispatch} from 'react';
import copy from 'copy-to-clipboard';
-
import type {NavigationTreeNodeType, NavigationTreeProps} from 'ydb-ui-components';
-import type {QueryMode} from '../../../types/store/query';
import {changeUserInput} from '../../../store/reducers/executeQuery';
+import {TENANT_PAGES_IDS, TENANT_QUERY_TABS_ID} from '../../../store/reducers/tenant/constants';
import {setQueryTab, setTenantPage} from '../../../store/reducers/tenant/tenant';
-import {TENANT_QUERY_TABS_ID, TENANT_PAGES_IDS} from '../../../store/reducers/tenant/constants';
+import type {QueryMode} from '../../../types/store/query';
import createToast from '../../../utils/createToast';
-
import i18n from '../i18n';
import {
@@ -30,7 +27,7 @@ interface ActionsAdditionalEffects {
const bindActions = (
path: string,
- dispatch: Dispatch,
+ dispatch: React.Dispatch,
additionalEffects: ActionsAdditionalEffects,
) => {
const {setActivePath, setQueryMode} = additionalEffects;
@@ -79,7 +76,7 @@ const bindActions = (
type ActionsSet = ReturnType['getActions']>;
export const getActions =
- (dispatch: Dispatch, additionalEffects: ActionsAdditionalEffects) =>
+ (dispatch: React.Dispatch, additionalEffects: ActionsAdditionalEffects) =>
(path: string, type: NavigationTreeNodeType) => {
const actions = bindActions(path, dispatch, additionalEffects);
const copyItem = {text: i18n('actions.copyPath'), action: actions.copyPath};
diff --git a/src/containers/Tenant/utils/schemaControls.tsx b/src/containers/Tenant/utils/schemaControls.tsx
index 3cc9eedf04..bd4d1cbc00 100644
--- a/src/containers/Tenant/utils/schemaControls.tsx
+++ b/src/containers/Tenant/utils/schemaControls.tsx
@@ -1,13 +1,10 @@
-import {Dispatch} from 'react';
-
-import {NavigationTreeNodeType, NavigationTreeProps} from 'ydb-ui-components';
import {Button} from '@gravity-ui/uikit';
+import type {NavigationTreeNodeType, NavigationTreeProps} from 'ydb-ui-components';
+import {Icon} from '../../../components/Icon';
import {setShowPreview} from '../../../store/reducers/schema/schema';
-import {setQueryTab, setTenantPage} from '../../../store/reducers/tenant/tenant';
import {TENANT_PAGES_IDS, TENANT_QUERY_TABS_ID} from '../../../store/reducers/tenant/constants';
-import {Icon} from '../../../components/Icon';
-
+import {setQueryTab, setTenantPage} from '../../../store/reducers/tenant/tenant';
import i18n from '../i18n';
interface ControlsAdditionalEffects {
@@ -16,7 +13,7 @@ interface ControlsAdditionalEffects {
const bindActions = (
path: string,
- dispatch: Dispatch,
+ dispatch: React.Dispatch,
additionalEffects: ControlsAdditionalEffects,
) => {
const {setActivePath} = additionalEffects;
@@ -34,7 +31,7 @@ const bindActions = (
type Controls = ReturnType['renderAdditionalNodeElements']>;
export const getControls =
- (dispatch: Dispatch, additionalEffects: ControlsAdditionalEffects) =>
+ (dispatch: React.Dispatch, additionalEffects: ControlsAdditionalEffects) =>
(path: string, type: NavigationTreeNodeType) => {
const options = bindActions(path, dispatch, additionalEffects);
const openPreview = (
diff --git a/src/containers/Tenants/Tenants.tsx b/src/containers/Tenants/Tenants.tsx
index 291cffbc8e..899907fb16 100644
--- a/src/containers/Tenants/Tenants.tsx
+++ b/src/containers/Tenants/Tenants.tsx
@@ -1,40 +1,40 @@
-import cn from 'bem-cn-lite';
+import React from 'react';
-import DataTable, {Column} from '@gravity-ui/react-data-table';
+import type {Column} from '@gravity-ui/react-data-table';
+import DataTable from '@gravity-ui/react-data-table';
import {Button} from '@gravity-ui/uikit';
+import {EntitiesCount} from '../../components/EntitiesCount';
import {EntityStatus} from '../../components/EntityStatus/EntityStatus';
+import {ResponseError} from '../../components/Errors/ResponseError';
+import {Illustration} from '../../components/Illustration';
import {PoolsGraph} from '../../components/PoolsGraph/PoolsGraph';
-import {TabletsStatistic} from '../../components/TabletsStatistic';
import {ProblemFilter} from '../../components/ProblemFilter';
-import {Illustration} from '../../components/Illustration';
-import {EntitiesCount} from '../../components/EntitiesCount';
import {Search} from '../../components/Search';
import {TableWithControlsLayout} from '../../components/TableWithControlsLayout/TableWithControlsLayout';
-import {ResponseError} from '../../components/Errors/ResponseError';
-
-import type {AdditionalTenantsProps} from '../../types/additionalProps';
+import {TabletsStatistic} from '../../components/TabletsStatistic';
+import {clusterName} from '../../store';
+import {
+ ProblemFilterValues,
+ changeFilter,
+ selectProblemFilter,
+} from '../../store/reducers/settings/settings';
import type {ProblemFilterValue} from '../../store/reducers/settings/types';
-import type {PreparedTenant} from '../../store/reducers/tenants/types';
-import {getTenantsInfo, setSearchValue} from '../../store/reducers/tenants/tenants';
import {
selectFilteredTenants,
selectTenantsSearchValue,
} from '../../store/reducers/tenants/selectors';
-import {
- changeFilter,
- ProblemFilterValues,
- selectProblemFilter,
-} from '../../store/reducers/settings/settings';
+import {getTenantsInfo, setSearchValue} from '../../store/reducers/tenants/tenants';
+import type {PreparedTenant} from '../../store/reducers/tenants/types';
+import type {AdditionalTenantsProps} from '../../types/additionalProps';
+import {cn} from '../../utils/cn';
+import {DEFAULT_TABLE_SETTINGS} from '../../utils/constants';
import {
formatBytesToGigabyte,
formatCPU,
formatNumber,
} from '../../utils/dataFormatters/dataFormatters';
-import {DEFAULT_TABLE_SETTINGS} from '../../utils/constants';
import {useAutofetcher, useTypedDispatch, useTypedSelector} from '../../utils/hooks';
-import {clusterName} from '../../store';
-
import {getTenantPath} from '../Tenant/TenantPages';
import './Tenants.scss';
@@ -71,7 +71,7 @@ export const Tenants = ({additionalTenantsProps}: TenantsProps) => {
const renderControls = () => {
return (
- <>
+
{
label={'Databases'}
loading={loading && !wasLoaded}
/>
- >
+
);
};
diff --git a/src/containers/UserSettings/Setting.tsx b/src/containers/UserSettings/Setting.tsx
index a2d2327ace..d3b85516a0 100644
--- a/src/containers/UserSettings/Setting.tsx
+++ b/src/containers/UserSettings/Setting.tsx
@@ -1,10 +1,7 @@
-import type {ReactNode} from 'react';
-
-import {RadioButton, Switch} from '@gravity-ui/uikit';
import {Settings} from '@gravity-ui/navigation';
+import {RadioButton, Switch} from '@gravity-ui/uikit';
import {LabelWithPopover} from '../../components/LabelWithPopover/LabelWithPopover';
-
import {useSetting} from '../../utils/hooks';
import {b} from './UserSettings';
@@ -14,9 +11,9 @@ export type SettingsElementType = 'switch' | 'radio';
export interface SettingProps {
type?: SettingsElementType;
title: string;
- description?: ReactNode;
+ description?: React.ReactNode;
settingKey: string;
- helpPopoverContent?: ReactNode;
+ helpPopoverContent?: React.ReactNode;
options?: {value: string; content: string}[];
defaultValue?: unknown;
onValueUpdate?: VoidFunction;
@@ -39,7 +36,7 @@ export const Setting = ({
onValueUpdate?.();
};
- const renderTitleComponent = (value: ReactNode) => {
+ const renderTitleComponent = (value: React.ReactNode) => {
if (helpPopoverContent) {
return (
{
+ React.useEffect(() => {
dispatch(setHeaderBreadcrumbs('vDisk', {nodeId, pDiskId, vDiskSlotId}));
}, [dispatch, nodeId, pDiskId, vDiskSlotId]);
- const fetchData = useCallback(
+ const fetchData = React.useCallback(
async (isBackground?: boolean) => {
if (!isBackground) {
dispatch(setVDiskDataWasNotLoaded());
@@ -152,7 +152,7 @@ export function VDiskPage() {
const renderGroupInfo = () => {
if (groupData) {
return (
- <>
+
{vDiskPageKeyset('group')}
@@ -167,7 +167,7 @@ export function VDiskPage() {
);
})}
- >
+
);
}
@@ -180,10 +180,10 @@ export function VDiskPage() {
}
return (
- <>
+
{renderInfo()}
{renderGroupInfo()}
- >
+
);
};
diff --git a/src/containers/Versions/GroupedNodesTree/GroupedNodesTree.scss b/src/containers/Versions/GroupedNodesTree/GroupedNodesTree.scss
index d0b1b0e41b..ea599b954d 100644
--- a/src/containers/Versions/GroupedNodesTree/GroupedNodesTree.scss
+++ b/src/containers/Versions/GroupedNodesTree/GroupedNodesTree.scss
@@ -16,8 +16,7 @@
position: relative;
z-index: 0;
- overflow-x: auto;
- overflow-y: hidden;
+ overflow: auto hidden;
margin-right: $margin-size;
margin-left: $margin-size;
@@ -53,7 +52,7 @@
width: $item-width;
}
- & .yc-progress__stack {
+ & .g-progress__stack {
cursor: pointer;
}
}
diff --git a/src/containers/Versions/GroupedNodesTree/GroupedNodesTree.tsx b/src/containers/Versions/GroupedNodesTree/GroupedNodesTree.tsx
index 21f9081a62..1454fdead5 100644
--- a/src/containers/Versions/GroupedNodesTree/GroupedNodesTree.tsx
+++ b/src/containers/Versions/GroupedNodesTree/GroupedNodesTree.tsx
@@ -1,14 +1,13 @@
-import {useState, useEffect} from 'react';
-import cn from 'bem-cn-lite';
+import React from 'react';
import {TreeView} from 'ydb-ui-components';
import type {PreparedClusterNode} from '../../../store/reducers/clusterNodes/types';
import type {VersionValue} from '../../../types/versions';
-
-import type {GroupedNodesItem} from '../types';
-import {NodesTreeTitle} from '../NodesTreeTitle/NodesTreeTitle';
+import {cn} from '../../../utils/cn';
import {NodesTable} from '../NodesTable/NodesTable';
+import {NodesTreeTitle} from '../NodesTreeTitle/NodesTreeTitle';
+import type {GroupedNodesItem} from '../types';
import './GroupedNodesTree.scss';
@@ -33,9 +32,9 @@ export const GroupedNodesTree = ({
versionsValues,
level = 0,
}: GroupedNodesTreeProps) => {
- const [isOpened, toggleBlock] = useState(false);
+ const [isOpened, toggleBlock] = React.useState(false);
- useEffect(() => {
+ React.useEffect(() => {
toggleBlock(expanded);
}, [expanded]);
diff --git a/src/containers/Versions/NodesTable/NodesTable.tsx b/src/containers/Versions/NodesTable/NodesTable.tsx
index 598f48fde1..21a60d2ffb 100644
--- a/src/containers/Versions/NodesTable/NodesTable.tsx
+++ b/src/containers/Versions/NodesTable/NodesTable.tsx
@@ -1,15 +1,15 @@
-import DataTable, {Column} from '@gravity-ui/react-data-table';
+import type {Column} from '@gravity-ui/react-data-table';
+import DataTable from '@gravity-ui/react-data-table';
+import {EntityStatus} from '../../../components/EntityStatus/EntityStatus';
+import {PoolsGraph} from '../../../components/PoolsGraph/PoolsGraph';
+import {ProgressViewer} from '../../../components/ProgressViewer/ProgressViewer';
import type {PreparedClusterNode} from '../../../store/reducers/clusterNodes/types';
-import {isUnavailableNode} from '../../../utils/nodes';
import {DEFAULT_TABLE_SETTINGS} from '../../../utils/constants';
import {formatBytes} from '../../../utils/dataFormatters/dataFormatters';
+import {isUnavailableNode} from '../../../utils/nodes';
import {getDefaultNodePath} from '../../Node/NodePages';
-import {ProgressViewer} from '../../../components/ProgressViewer/ProgressViewer';
-import {PoolsGraph} from '../../../components/PoolsGraph/PoolsGraph';
-import {EntityStatus} from '../../../components/EntityStatus/EntityStatus';
-
const columns: Column[] = [
{
name: 'NodeId',
diff --git a/src/containers/Versions/NodesTreeTitle/NodesTreeTitle.scss b/src/containers/Versions/NodesTreeTitle/NodesTreeTitle.scss
index eff066f668..5bf100824f 100644
--- a/src/containers/Versions/NodesTreeTitle/NodesTreeTitle.scss
+++ b/src/containers/Versions/NodesTreeTitle/NodesTreeTitle.scss
@@ -50,7 +50,7 @@
width: 250px;
- & .yc-progress {
+ & .g-progress {
width: 200px;
}
}
diff --git a/src/containers/Versions/NodesTreeTitle/NodesTreeTitle.tsx b/src/containers/Versions/NodesTreeTitle/NodesTreeTitle.tsx
index 373e4867d1..4b930f24da 100644
--- a/src/containers/Versions/NodesTreeTitle/NodesTreeTitle.tsx
+++ b/src/containers/Versions/NodesTreeTitle/NodesTreeTitle.tsx
@@ -1,12 +1,14 @@
import {Progress} from '@gravity-ui/uikit';
-import block from 'bem-cn-lite';
+
import {ClipboardButton} from '../../../components/ClipboardButton';
import type {PreparedClusterNode} from '../../../store/reducers/clusterNodes/types';
import type {VersionValue} from '../../../types/versions';
+import {cn} from '../../../utils/cn';
import type {GroupedNodesItem} from '../types';
+
import './NodesTreeTitle.scss';
-const b = block('ydb-versions-nodes-tree-title');
+const b = cn('ydb-versions-nodes-tree-title');
interface NodesTreeTitleProps {
title?: string;
diff --git a/src/containers/Versions/Versions.tsx b/src/containers/Versions/Versions.tsx
index ac32e4356b..292044dd72 100644
--- a/src/containers/Versions/Versions.tsx
+++ b/src/containers/Versions/Versions.tsx
@@ -1,20 +1,20 @@
-import {useState} from 'react';
-import block from 'bem-cn-lite';
+import React from 'react';
import {Checkbox, RadioButton} from '@gravity-ui/uikit';
+import {Loader} from '../../components/Loader';
+import {getClusterNodes} from '../../store/reducers/clusterNodes/clusterNodes';
import type {VersionToColorMap} from '../../types/versions';
+import {cn} from '../../utils/cn';
import {useAutofetcher, useTypedDispatch, useTypedSelector} from '../../utils/hooks';
-import {getClusterNodes} from '../../store/reducers/clusterNodes/clusterNodes';
-import {Loader} from '../../components/Loader';
-import {getGroupedStorageNodes, getGroupedTenantNodes, getOtherNodes} from './groupNodes';
import {GroupedNodesTree} from './GroupedNodesTree/GroupedNodesTree';
+import {getGroupedStorageNodes, getGroupedTenantNodes, getOtherNodes} from './groupNodes';
import {GroupByValue} from './types';
import './Versions.scss';
-const b = block('ydb-versions');
+const b = cn('ydb-versions');
interface VersionsProps {
versionToColor?: VersionToColorMap;
@@ -27,8 +27,8 @@ export const Versions = ({versionToColor}: VersionsProps) => {
useAutofetcher(() => dispatch(getClusterNodes()), [dispatch], true);
- const [groupByValue, setGroupByValue] = useState(GroupByValue.VERSION);
- const [expanded, setExpanded] = useState(false);
+ const [groupByValue, setGroupByValue] = React.useState(GroupByValue.VERSION);
+ const [expanded, setExpanded] = React.useState(false);
const handleGroupByValueChange = (value: string) => {
setGroupByValue(value as GroupByValue);
@@ -72,7 +72,7 @@ export const Versions = ({versionToColor}: VersionsProps) => {
const storageNodes = getGroupedStorageNodes(nodes, versionToColor);
const otherNodes = getOtherNodes(nodes, versionToColor);
const storageNodesContent = storageNodes?.length ? (
- <>
+
Storage nodes
{storageNodes.map(({title, nodes: itemNodes, items, versionColor}) => (
{
versionColor={versionColor}
/>
))}
- >
+
) : null;
const tenantNodesContent = tenantNodes?.length ? (
- <>
+
Database nodes
{renderControls()}
{tenantNodes.map(({title, nodes: itemNodes, items, versionColor, versionsValues}) => (
@@ -100,10 +100,10 @@ export const Versions = ({versionToColor}: VersionsProps) => {
versionsValues={versionsValues}
/>
))}
- >
+
) : null;
const otherNodesContent = otherNodes?.length ? (
- <>
+
Other nodes
{otherNodes.map(({title, nodes: itemNodes, items, versionColor, versionsValues}) => (
{
versionsValues={versionsValues}
/>
))}
- >
+
) : null;
return (
diff --git a/src/containers/Versions/groupNodes.ts b/src/containers/Versions/groupNodes.ts
index 135fc49ced..c4df31825c 100644
--- a/src/containers/Versions/groupNodes.ts
+++ b/src/containers/Versions/groupNodes.ts
@@ -1,10 +1,11 @@
import groupBy from 'lodash/groupBy';
-import type {VersionToColorMap} from '../../types/versions';
import type {PreparedClusterNode} from '../../store/reducers/clusterNodes/types';
+import type {VersionToColorMap} from '../../types/versions';
import {getMinorVersion, parseNodesToVersionsValues} from '../../utils/versions';
-import {GroupByValue, GroupedNodesItem} from './types';
+import type {GroupedNodesItem} from './types';
+import {GroupByValue} from './types';
const sortByTitle = (a: GroupedNodesItem, b: GroupedNodesItem) =>
a.title?.localeCompare(b.title || '') || -1;
diff --git a/src/containers/Versions/types.ts b/src/containers/Versions/types.ts
index 051475a8df..0e766cb0fb 100644
--- a/src/containers/Versions/types.ts
+++ b/src/containers/Versions/types.ts
@@ -1,5 +1,5 @@
-import type {VersionValue} from '../../types/versions';
import type {PreparedClusterNode} from '../../store/reducers/clusterNodes/types';
+import type {VersionValue} from '../../types/versions';
export interface GroupedNodesItem {
title?: string;
diff --git a/src/index.tsx b/src/index.tsx
index 8f0c03d05a..1b437a73cd 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -1,11 +1,11 @@
-import React from 'react';
-import ReactDOM from 'react-dom';
+/* eslint-disable import/order */
+import ReactDOM from 'react-dom/client';
import '@gravity-ui/uikit/styles/styles.scss';
import {ErrorBoundary} from './lib';
-import {store, history} from './store/defaultStore';
import reportWebVitals from './reportWebVitals';
+import {history, store} from './store/defaultStore';
import './styles/themes.scss';
import './styles/constants.scss';
@@ -22,13 +22,15 @@ async function render() {
App = await import('./lib').then(({MultiClusterApp}) => MultiClusterApp);
}
- ReactDOM.render(
-
-
-
-
- ,
- document.getElementById('root'),
+ const container = document.getElementById('root');
+ if (!container) {
+ throw new Error("Can't find root element");
+ }
+ const root = ReactDOM.createRoot(container);
+ root.render(
+
+
+ ,
);
}
diff --git a/src/routes.ts b/src/routes.ts
index fb4c98b1fd..87d183379f 100644
--- a/src/routes.ts
+++ b/src/routes.ts
@@ -1,7 +1,7 @@
import type {Location} from 'history';
-import qs from 'qs';
-import {compile} from 'path-to-regexp';
import isEmpty from 'lodash/isEmpty';
+import {compile} from 'path-to-regexp';
+import qs from 'qs';
import {backend, clusterName, webVersion} from './store';
diff --git a/src/services/api.ts b/src/services/api.ts
index b2a9593812..90f0e60a35 100644
--- a/src/services/api.ts
+++ b/src/services/api.ts
@@ -1,6 +1,20 @@
import AxiosWrapper from '@gravity-ui/axios-wrapper';
import type {AxiosRequestConfig} from 'axios';
+import {backend as BACKEND, metaBackend as META_BACKEND} from '../store';
+import type {ComputeApiRequestParams, NodesApiRequestParams} from '../store/reducers/nodes/types';
+import type {StorageApiRequestParams} from '../store/reducers/storage/types';
+import type {TMetaInfo} from '../types/api/acl';
+import type {TClusterInfo} from '../types/api/cluster';
+import type {TComputeInfo} from '../types/api/compute';
+import type {DescribeConsumerResult} from '../types/api/consumer';
+import type {HealthCheckAPIResponse} from '../types/api/healthcheck';
+import type {JsonHotKeysResponse} from '../types/api/hotkeys';
+import type {MetaCluster, MetaClusters, MetaTenants} from '../types/api/meta';
+import type {TNetInfo} from '../types/api/netInfo';
+import type {TNodesInfo} from '../types/api/nodes';
+import type {TEvNodesInfo} from '../types/api/nodesList';
+import type {TEvPDiskStateResponse} from '../types/api/pdisk';
import type {
Actions,
ExplainActions,
@@ -8,42 +22,28 @@ import type {
QueryAPIResponse,
Schemas,
} from '../types/api/query';
+import type {JsonRenderRequestParams, JsonRenderResponse} from '../types/api/render';
+import type {TEvDescribeSchemeResult} from '../types/api/schema';
+import type {TStorageInfo} from '../types/api/storage';
+import type {TEvSystemStateResponse} from '../types/api/systemState';
import type {
TDomainKey,
TEvTabletStateResponse,
UnmergedTEvTabletStateResponse,
} from '../types/api/tablet';
-import type {TMetaInfo} from '../types/api/acl';
-import type {TClusterInfo} from '../types/api/cluster';
-import type {TComputeInfo} from '../types/api/compute';
-import type {DescribeConsumerResult} from '../types/api/consumer';
-import type {HealthCheckAPIResponse} from '../types/api/healthcheck';
-import type {TNetInfo} from '../types/api/netInfo';
-import type {TNodesInfo} from '../types/api/nodes';
-import type {TEvNodesInfo} from '../types/api/nodesList';
-import type {TEvDescribeSchemeResult} from '../types/api/schema';
-import type {TStorageInfo} from '../types/api/storage';
-import type {TEvSystemStateResponse} from '../types/api/systemState';
import type {TTenantInfo, TTenants} from '../types/api/tenant';
import type {DescribeTopicResult} from '../types/api/topic';
-import type {TEvPDiskStateResponse} from '../types/api/pdisk';
import type {TEvVDiskStateResponse} from '../types/api/vdisk';
import type {TUserToken} from '../types/api/whoami';
-import type {JsonRenderRequestParams, JsonRenderResponse} from '../types/api/render';
import type {QuerySyntax} from '../types/store/query';
-import type {ComputeApiRequestParams, NodesApiRequestParams} from '../store/reducers/nodes/types';
-import type {StorageApiRequestParams} from '../store/reducers/storage/types';
-import type {MetaCluster, MetaClusters, MetaTenants} from '../types/api/meta';
-import type {JsonHotKeysResponse} from '../types/api/hotkeys';
-
-import {backend as BACKEND, metaBackend as META_BACKEND} from '../store';
-import {prepareSortValue} from '../utils/filters';
-import {createPDiskDeveloperUILink} from '../utils/developerUI/developerUI';
import {BINARY_DATA_IN_PLAIN_TEXT_DISPLAY} from '../utils/constants';
+import {createPDiskDeveloperUILink} from '../utils/developerUI/developerUI';
+import {prepareSortValue} from '../utils/filters';
+import type {Nullable} from '../utils/typecheckers';
+
import {parseMetaCluster} from './parsers/parseMetaCluster';
import {parseMetaTenants} from './parsers/parseMetaTenants';
import {settingsManager} from './settings';
-import {Nullable} from '../utils/typecheckers';
type AxiosOptions = {
concurrentId?: string;
diff --git a/src/services/parsers/parseMetaCluster.ts b/src/services/parsers/parseMetaCluster.ts
index 11b53e96bf..cda3eb11f6 100644
--- a/src/services/parsers/parseMetaCluster.ts
+++ b/src/services/parsers/parseMetaCluster.ts
@@ -1,5 +1,4 @@
import type {TClusterInfo} from '../../types/api/cluster';
-
import type {MetaCluster} from '../../types/api/meta';
export const parseMetaCluster = (data: MetaCluster): TClusterInfo => {
diff --git a/src/services/parsers/parseMetaTenants.ts b/src/services/parsers/parseMetaTenants.ts
index c936a33932..af1f963dfb 100644
--- a/src/services/parsers/parseMetaTenants.ts
+++ b/src/services/parsers/parseMetaTenants.ts
@@ -1,6 +1,5 @@
-import type {TTenantInfo} from '../../types/api/tenant';
-
import type {MetaTenants} from '../../types/api/meta';
+import type {TTenantInfo} from '../../types/api/tenant';
export const parseMetaTenants = (data: MetaTenants): TTenantInfo => {
return {
diff --git a/src/services/settings.ts b/src/services/settings.ts
index 5314ece3d9..f6b278c999 100644
--- a/src/services/settings.ts
+++ b/src/services/settings.ts
@@ -1,7 +1,8 @@
import {TENANT_PAGES_IDS} from '../store/reducers/tenant/constants';
-
import {
ASIDE_HEADER_COMPACT_KEY,
+ BINARY_DATA_IN_PLAIN_TEXT_DISPLAY,
+ ENABLE_AUTOCOMPLETE,
INVERTED_DISKS_KEY,
LANGUAGE_KEY,
LAST_USED_QUERY_ACTION_KEY,
@@ -12,10 +13,8 @@ import {
TENANT_INITIAL_PAGE_KEY,
THEME_KEY,
USE_BACKEND_PARAMS_FOR_TABLES_KEY,
- USE_NODES_ENDPOINT_IN_DIAGNOSTICS_KEY,
USE_CLUSTER_BALANCER_AS_BACKEND_KEY,
- BINARY_DATA_IN_PLAIN_TEXT_DISPLAY,
- ENABLE_AUTOCOMPLETE,
+ USE_NODES_ENDPOINT_IN_DIAGNOSTICS_KEY,
} from '../utils/constants';
import {QUERY_ACTIONS, QUERY_MODES} from '../utils/query';
import {parseJson} from '../utils/utils';
diff --git a/src/setupTests.js b/src/setupTests.js
index af79cff2b9..c894baa7a9 100644
--- a/src/setupTests.js
+++ b/src/setupTests.js
@@ -1,15 +1,14 @@
+/* eslint-disable import/order */
// jest-dom adds custom jest matchers for asserting on DOM nodes.
// allows you to do things like:
// expect(element).toHaveTextContent(/react/i)
// learn more: https://github.com/testing-library/jest-dom
import '@testing-library/jest-dom';
-
import {configure as configureUiKit} from '@gravity-ui/uikit';
-import {configure as configureYdbUiComponents} from 'ydb-ui-components';
-import {i18n, Lang} from '../src/utils/i18n';
+
+import {Lang, i18n} from '../src/utils/i18n';
i18n.setLang(Lang.En);
-configureYdbUiComponents({lang: Lang.En});
configureUiKit({lang: Lang.En});
// only to prevent warnings from history lib
diff --git a/src/store/configureStore.ts b/src/store/configureStore.ts
index a1357e2021..56188846a8 100644
--- a/src/store/configureStore.ts
+++ b/src/store/configureStore.ts
@@ -1,14 +1,15 @@
import {configureStore as configureReduxStore} from '@reduxjs/toolkit';
-import {History, createBrowserHistory} from 'history';
+import type {Action, Reducer, UnknownAction} from '@reduxjs/toolkit';
+import type {History} from 'history';
+import {createBrowserHistory} from 'history';
import {listenForHistoryChange} from 'redux-location-state';
-import {getUrlData} from './getUrlData';
-import getLocationMiddleware from './state-url-mapping';
-import rootReducer from './reducers';
import {createApi} from '../services/api';
-import type {Action, Reducer, UnknownAction} from '@reduxjs/toolkit';
+import {getUrlData} from './getUrlData';
+import rootReducer from './reducers';
import {UPDATE_REF} from './reducers/tooltip';
+import getLocationMiddleware from './state-url-mapping';
export let backend: string | undefined, basename: string, clusterName: string | undefined;
@@ -77,7 +78,6 @@ export function configureStore({
);
window.api = api;
- window.store = store; // TODO: check is it really needed
return {history, store};
}
diff --git a/src/store/reducers/authentication/authentication.ts b/src/store/reducers/authentication/authentication.ts
index 8109289a80..b5cc210184 100644
--- a/src/store/reducers/authentication/authentication.ts
+++ b/src/store/reducers/authentication/authentication.ts
@@ -1,6 +1,6 @@
import type {Reducer} from '@reduxjs/toolkit';
-import {createRequestActionTypes, createApiRequest} from '../../utils';
+import {createApiRequest, createRequestActionTypes} from '../../utils';
import type {AuthenticationAction, AuthenticationState} from './types';
diff --git a/src/store/reducers/authentication/types.ts b/src/store/reducers/authentication/types.ts
index 293ed6ab4e..5aba2838b9 100644
--- a/src/store/reducers/authentication/types.ts
+++ b/src/store/reducers/authentication/types.ts
@@ -1,7 +1,7 @@
import type {AuthErrorResponse} from '../../../types/api/error';
import type {ApiRequestAction} from '../../utils';
-import {FETCH_USER, SET_AUTHENTICATED, SET_UNAUTHENTICATED} from './authentication';
+import type {FETCH_USER, SET_AUTHENTICATED, SET_UNAUTHENTICATED} from './authentication';
export interface AuthenticationState {
isAuthenticated: boolean;
diff --git a/src/store/reducers/cluster/cluster.ts b/src/store/reducers/cluster/cluster.ts
index a2ea372161..93a9a0a0fc 100644
--- a/src/store/reducers/cluster/cluster.ts
+++ b/src/store/reducers/cluster/cluster.ts
@@ -1,8 +1,10 @@
import type {Dispatch, Reducer} from '@reduxjs/toolkit';
+import type {ClusterTab} from '../../../containers/Cluster/utils';
+import {clusterTabsIds, isClusterTab} from '../../../containers/Cluster/utils';
import {DEFAULT_CLUSTER_TAB_KEY} from '../../../utils/constants';
-import {clusterTabsIds, isClusterTab, ClusterTab} from '../../../containers/Cluster/utils';
-import {createRequestActionTypes, createApiRequest} from '../../utils';
+import {createApiRequest, createRequestActionTypes} from '../../utils';
+
import type {ClusterAction, ClusterState} from './types';
import {createSelectClusterGroupsQuery, parseGroupsStatsQueryResponse} from './utils';
diff --git a/src/store/reducers/clusterNodes/clusterNodes.tsx b/src/store/reducers/clusterNodes/clusterNodes.tsx
index 61f8824064..f8b61c8798 100644
--- a/src/store/reducers/clusterNodes/clusterNodes.tsx
+++ b/src/store/reducers/clusterNodes/clusterNodes.tsx
@@ -1,11 +1,10 @@
import type {Reducer} from '@reduxjs/toolkit';
-import {createRequestActionTypes, createApiRequest} from '../../utils';
+import {calcUptime} from '../../../utils/dataFormatters/dataFormatters';
+import {createApiRequest, createRequestActionTypes} from '../../utils';
import type {ClusterNodesAction, ClusterNodesState, PreparedClusterNode} from './types';
-import {calcUptime} from '../../../utils/dataFormatters/dataFormatters';
-
export const FETCH_CLUSTER_NODES = createRequestActionTypes('cluster', 'FETCH_CLUSTER_NODES');
const initialState = {loading: false, wasLoaded: false};
diff --git a/src/store/reducers/clusterNodes/types.ts b/src/store/reducers/clusterNodes/types.ts
index 780458fc26..92bfc1dc8f 100644
--- a/src/store/reducers/clusterNodes/types.ts
+++ b/src/store/reducers/clusterNodes/types.ts
@@ -2,7 +2,7 @@ import type {IResponseError} from '../../../types/api/error';
import type {TSystemStateInfo} from '../../../types/api/nodes';
import type {ApiRequestAction} from '../../utils';
-import {FETCH_CLUSTER_NODES} from './clusterNodes';
+import type {FETCH_CLUSTER_NODES} from './clusterNodes';
export interface PreparedClusterNode extends TSystemStateInfo {
uptime: string;
diff --git a/src/store/reducers/clusters/clusters.ts b/src/store/reducers/clusters/clusters.ts
index 263ec214c5..302e92ddc2 100644
--- a/src/store/reducers/clusters/clusters.ts
+++ b/src/store/reducers/clusters/clusters.ts
@@ -1,6 +1,6 @@
import type {Reducer} from '@reduxjs/toolkit';
-import {createRequestActionTypes, createApiRequest} from '../../utils';
+import {createApiRequest, createRequestActionTypes} from '../../utils';
import type {ClustersAction, ClustersFilters, ClustersState} from './types';
import {prepareClustersData} from './utils';
diff --git a/src/store/reducers/clusters/selectors.ts b/src/store/reducers/clusters/selectors.ts
index 45c62320ab..92b55daf53 100644
--- a/src/store/reducers/clusters/selectors.ts
+++ b/src/store/reducers/clusters/selectors.ts
@@ -1,9 +1,10 @@
-import {type Selector, createSelector} from '@reduxjs/toolkit';
+import {createSelector} from '@reduxjs/toolkit';
+import type {Selector} from '@reduxjs/toolkit';
import escapeRegExp from 'lodash/escapeRegExp';
+import type {MetaExtendedClusterInfo} from '../../../types/api/meta';
import {getMinorVersion} from '../../../utils/versions';
-import type {MetaExtendedClusterInfo} from '../../../types/api/meta';
import type {ClusterDataAggregation, ClustersStateSlice, PreparedCluster} from './types';
// ==== Filters ====
diff --git a/src/store/reducers/clusters/types.ts b/src/store/reducers/clusters/types.ts
index 0ab4e42447..0f027e8d3e 100644
--- a/src/store/reducers/clusters/types.ts
+++ b/src/store/reducers/clusters/types.ts
@@ -1,8 +1,8 @@
-import type {ApiRequestAction} from '../../utils';
-
import type {MetaExtendedClusterInfo} from '../../../types/api/meta';
import type {ExtendedMetaClusterVersion} from '../../../utils/clusterVersionColors';
-import {FETCH_CLUSTERS, changeClustersFilters} from './clusters';
+import type {ApiRequestAction} from '../../utils';
+
+import type {FETCH_CLUSTERS, changeClustersFilters} from './clusters';
export interface PreparedCluster extends MetaExtendedClusterInfo {
preparedVersions: ExtendedMetaClusterVersion[];
diff --git a/src/store/reducers/describe.ts b/src/store/reducers/describe.ts
index 919cf48428..b1c80fee13 100644
--- a/src/store/reducers/describe.ts
+++ b/src/store/reducers/describe.ts
@@ -1,12 +1,12 @@
import type {Reducer} from '@reduxjs/toolkit';
import type {
- IDescribeState,
IDescribeAction,
- IDescribeHandledResponse,
IDescribeData,
+ IDescribeHandledResponse,
+ IDescribeState,
} from '../../types/store/describe';
-import {createRequestActionTypes, createApiRequest} from '../utils';
+import {createApiRequest, createRequestActionTypes} from '../utils';
export const FETCH_DESCRIBE = createRequestActionTypes('describe', 'FETCH_DESCRIBE');
const SET_CURRENT_DESCRIBE_PATH = 'describe/SET_CURRENT_DESCRIBE_PATH';
diff --git a/src/store/reducers/executeQuery.ts b/src/store/reducers/executeQuery.ts
index adbefcbb69..f29b889241 100644
--- a/src/store/reducers/executeQuery.ts
+++ b/src/store/reducers/executeQuery.ts
@@ -1,5 +1,6 @@
import type {Reducer} from '@reduxjs/toolkit';
+import {settingsManager} from '../../services/settings';
import type {ExecuteActions, Schemas} from '../../types/api/query';
import type {
ExecuteQueryAction,
@@ -7,13 +8,11 @@ import type {
ExecuteQueryStateSlice,
QueryInHistory,
} from '../../types/store/executeQuery';
-import type {QueryRequestParams, QueryMode, QuerySyntax} from '../../types/store/query';
+import type {QueryMode, QueryRequestParams, QuerySyntax} from '../../types/store/query';
import {QUERIES_HISTORY_KEY} from '../../utils/constants';
-import {QUERY_MODES, QUERY_SYNTAX, parseQueryAPIExecuteResponse} from '../../utils/query';
import {parseQueryError} from '../../utils/error';
-import {settingsManager} from '../../services/settings';
-
-import {createRequestActionTypes, createApiRequest} from '../utils';
+import {QUERY_MODES, QUERY_SYNTAX, parseQueryAPIExecuteResponse} from '../../utils/query';
+import {createApiRequest, createRequestActionTypes} from '../utils';
const MAXIMUM_QUERIES_IN_HISTORY = 20;
diff --git a/src/store/reducers/executeTopQueries/executeTopQueries.ts b/src/store/reducers/executeTopQueries/executeTopQueries.ts
index f18d79b96b..b8021ce1b9 100644
--- a/src/store/reducers/executeTopQueries/executeTopQueries.ts
+++ b/src/store/reducers/executeTopQueries/executeTopQueries.ts
@@ -1,11 +1,10 @@
-import type {AnyAction, Reducer} from '@reduxjs/toolkit';
-import type {ThunkAction} from 'redux-thunk';
+import type {AnyAction, Reducer, ThunkAction} from '@reduxjs/toolkit';
+import type {RootState} from '../..';
import type {IQueryResult} from '../../../types/store/query';
import {parseQueryAPIExecuteResponse} from '../../../utils/query';
+import {createApiRequest, createRequestActionTypes} from '../../utils';
-import {createRequestActionTypes, createApiRequest} from '../../utils';
-import type {RootState} from '../..';
import type {ITopQueriesAction, ITopQueriesFilters, ITopQueriesState} from './types';
import {getFiltersConditions} from './utils';
diff --git a/src/store/reducers/executeTopQueries/types.ts b/src/store/reducers/executeTopQueries/types.ts
index 94e83502f4..f0a106b258 100644
--- a/src/store/reducers/executeTopQueries/types.ts
+++ b/src/store/reducers/executeTopQueries/types.ts
@@ -1,6 +1,11 @@
-import {FETCH_TOP_QUERIES, setTopQueriesState, setTopQueriesFilters} from './executeTopQueries';
-import type {ApiRequestAction} from '../../utils';
import type {IQueryResult, QueryErrorResponse} from '../../../types/store/query';
+import type {ApiRequestAction} from '../../utils';
+
+import type {
+ FETCH_TOP_QUERIES,
+ setTopQueriesFilters,
+ setTopQueriesState,
+} from './executeTopQueries';
export interface ITopQueriesFilters {
/** ms from epoch */
diff --git a/src/store/reducers/executeTopQueries/utils.ts b/src/store/reducers/executeTopQueries/utils.ts
index 210872bf62..e9b72e4605 100644
--- a/src/store/reducers/executeTopQueries/utils.ts
+++ b/src/store/reducers/executeTopQueries/utils.ts
@@ -1,4 +1,4 @@
-import {ITopQueriesFilters} from './types';
+import type {ITopQueriesFilters} from './types';
const endTimeColumn = 'EndTime';
const intervalEndColumn = 'IntervalEnd';
diff --git a/src/store/reducers/explainQuery.ts b/src/store/reducers/explainQuery.ts
index 250fa21586..5b761ae588 100644
--- a/src/store/reducers/explainQuery.ts
+++ b/src/store/reducers/explainQuery.ts
@@ -1,5 +1,5 @@
-import type {Reducer} from '@reduxjs/toolkit';
import type {ExplainPlanNodeData, GraphNode, Link} from '@gravity-ui/paranoid';
+import type {Reducer} from '@reduxjs/toolkit';
import type {ExplainActions} from '../../types/api/query';
import type {
@@ -7,13 +7,11 @@ import type {
ExplainQueryState,
PreparedExplainResponse,
} from '../../types/store/explainQuery';
-import type {QueryRequestParams, QueryMode, QuerySyntax} from '../../types/store/query';
-
+import type {QueryMode, QueryRequestParams, QuerySyntax} from '../../types/store/query';
+import {parseQueryError} from '../../utils/error';
import {preparePlan} from '../../utils/prepareQueryExplain';
import {QUERY_SYNTAX, parseQueryAPIExplainResponse, parseQueryExplainPlan} from '../../utils/query';
-import {parseQueryError} from '../../utils/error';
-
-import {createRequestActionTypes, createApiRequest} from '../utils';
+import {createApiRequest, createRequestActionTypes} from '../utils';
export const GET_EXPLAIN_QUERY = createRequestActionTypes('query', 'GET_EXPLAIN_QUERY');
export const GET_EXPLAIN_QUERY_AST = createRequestActionTypes('query', 'GET_EXPLAIN_QUERY_AST');
diff --git a/src/store/reducers/header/types.ts b/src/store/reducers/header/types.ts
index 1e5414fdde..57183bebaf 100644
--- a/src/store/reducers/header/types.ts
+++ b/src/store/reducers/header/types.ts
@@ -1,7 +1,7 @@
import type {ClusterTab} from '../../../containers/Cluster/utils';
import type {EType} from '../../../types/api/tablet';
-import {setHeaderBreadcrumbs} from './header';
+import type {setHeaderBreadcrumbs} from './header';
export type Page =
| 'cluster'
@@ -53,14 +53,14 @@ export type BreadcrumbsOptions =
export type PageBreadcrumbsOptions = T extends 'cluster'
? ClusterBreadcrumbsOptions
: T extends 'tenant'
- ? TenantBreadcrumbsOptions
- : T extends 'node'
- ? NodeBreadcrumbsOptions
- : T extends 'tablets'
- ? TabletsBreadcrumbsOptions
- : T extends 'tablet'
- ? TabletBreadcrumbsOptions
- : {};
+ ? TenantBreadcrumbsOptions
+ : T extends 'node'
+ ? NodeBreadcrumbsOptions
+ : T extends 'tablets'
+ ? TabletsBreadcrumbsOptions
+ : T extends 'tablet'
+ ? TabletBreadcrumbsOptions
+ : {};
export interface HeaderState {
page?: Page;
diff --git a/src/store/reducers/healthcheckInfo/healthcheckInfo.ts b/src/store/reducers/healthcheckInfo/healthcheckInfo.ts
index 0e1bd67def..a9c8ab396d 100644
--- a/src/store/reducers/healthcheckInfo/healthcheckInfo.ts
+++ b/src/store/reducers/healthcheckInfo/healthcheckInfo.ts
@@ -1,15 +1,15 @@
import {createSelector} from '@reduxjs/toolkit';
import type {Reducer, Selector} from '@reduxjs/toolkit';
+import type {IssueLog, StatusFlag} from '../../../types/api/healthcheck';
+import {createApiRequest, createRequestActionTypes} from '../../utils';
+
import type {
HealthCheckInfoAction,
HealthcheckInfoRootStateSlice,
HealthcheckInfoState,
IssuesTree,
} from './types';
-import type {IssueLog, StatusFlag} from '../../../types/api/healthcheck';
-
-import {createRequestActionTypes, createApiRequest} from '../../utils';
export const FETCH_HEALTHCHECK = createRequestActionTypes('cluster', 'FETCH_HEALTHCHECK');
diff --git a/src/store/reducers/healthcheckInfo/types.ts b/src/store/reducers/healthcheckInfo/types.ts
index 56a2964be0..538b48ae1b 100644
--- a/src/store/reducers/healthcheckInfo/types.ts
+++ b/src/store/reducers/healthcheckInfo/types.ts
@@ -1,6 +1,7 @@
-import type {HealthCheckAPIResponse, IssueLog} from '../../../types/api/healthcheck';
import type {IResponseError} from '../../../types/api/error';
+import type {HealthCheckAPIResponse, IssueLog} from '../../../types/api/healthcheck';
import type {ApiRequestAction} from '../../utils';
+
import type {FETCH_HEALTHCHECK, setDataWasNotLoaded} from './healthcheckInfo';
export interface IssuesTree extends IssueLog {
diff --git a/src/store/reducers/heatmap.ts b/src/store/reducers/heatmap.ts
index 79a6835c35..3b99654067 100644
--- a/src/store/reducers/heatmap.ts
+++ b/src/store/reducers/heatmap.ts
@@ -6,8 +6,7 @@ import type {
IHeatmapState,
IHeatmapTabletData,
} from '../../types/store/heatmap';
-
-import {createRequestActionTypes, createApiRequest} from '../utils';
+import {createApiRequest, createRequestActionTypes} from '../utils';
export const FETCH_HEATMAP = createRequestActionTypes('heatmap', 'FETCH_HEATMAP');
diff --git a/src/store/reducers/host.ts b/src/store/reducers/host.ts
index a3534612bb..045c731811 100644
--- a/src/store/reducers/host.ts
+++ b/src/store/reducers/host.ts
@@ -1,8 +1,7 @@
import type {Reducer} from '@reduxjs/toolkit';
import type {IHostAction, IHostState} from '../../types/store/host';
-
-import {createRequestActionTypes, createApiRequest} from '../utils';
+import {createApiRequest, createRequestActionTypes} from '../utils';
export const FETCH_HOST = createRequestActionTypes('host', 'FETCH_HOST');
diff --git a/src/store/reducers/hotKeys/hotKeys.ts b/src/store/reducers/hotKeys/hotKeys.ts
index 2f772bcf6a..5163c68f5d 100644
--- a/src/store/reducers/hotKeys/hotKeys.ts
+++ b/src/store/reducers/hotKeys/hotKeys.ts
@@ -1,9 +1,9 @@
import type {Reducer} from '@reduxjs/toolkit';
-import type {JsonHotKeysResponse} from '../../../types/api/hotkeys';
import type {IResponseError} from '../../../types/api/error';
-
+import type {JsonHotKeysResponse} from '../../../types/api/hotkeys';
import {createRequestActionTypes} from '../../utils';
+
import type {HotKeysAction, HotKeysState} from './types';
export const FETCH_HOT_KEYS = createRequestActionTypes('hot_keys', 'FETCH_HOT_KEYS');
diff --git a/src/store/reducers/hotKeys/types.ts b/src/store/reducers/hotKeys/types.ts
index d05e90e56f..9c959f1d04 100644
--- a/src/store/reducers/hotKeys/types.ts
+++ b/src/store/reducers/hotKeys/types.ts
@@ -1,5 +1,6 @@
import type {IResponseError} from '../../../types/api/error';
import type {HotKey} from '../../../types/api/hotkeys';
+
import type {
setHotKeysData,
setHotKeysDataWasNotLoaded,
diff --git a/src/store/reducers/index.ts b/src/store/reducers/index.ts
index 47219a883f..1b9157396b 100644
--- a/src/store/reducers/index.ts
+++ b/src/store/reducers/index.ts
@@ -1,49 +1,49 @@
import {combineReducers} from '@reduxjs/toolkit';
-import nodes from './nodes/nodes';
-import {topNodesByLoad} from './tenantOverview/topNodesByLoad/topNodesByLoad';
-import {topNodesByCpu} from './tenantOverview/topNodesByCpu/topNodesByCpu';
-import {topNodesByMemory} from './tenantOverview/topNodesByMemory/topNodesByMemory';
+import authentication from './authentication/authentication';
import cluster from './cluster/cluster';
import clusterNodes from './clusterNodes/clusterNodes';
-import tenant from './tenant/tenant';
-import storage from './storage/storage';
-import topStorageGroups from './tenantOverview/topStorageGroups/topStorageGroups';
-import node from './node/node';
-import tooltip from './tooltip';
-import tablets from './tablets';
+import clusters from './clusters/clusters';
+import describe from './describe';
+import executeQuery from './executeQuery';
+import executeTopQueries from './executeTopQueries/executeTopQueries';
+import explainQuery from './explainQuery';
+import fullscreen from './fullscreen';
+import header from './header/header';
+import healthcheckInfo from './healthcheckInfo/healthcheckInfo';
import heatmap from './heatmap';
-import schema from './schema/schema';
-import overview from './overview/overview';
import host from './host';
+import hotKeys from './hotKeys/hotKeys';
import network from './network/network';
-import tenants from './tenants/tenants';
-import tablet from './tablet';
-import topic from './topic';
+import node from './node/node';
+import nodes from './nodes/nodes';
+import nodesList from './nodesList';
+import olapStats from './olapStats';
+import overview from './overview/overview';
import partitions from './partitions/partitions';
import pDisk from './pdisk/pdisk';
-import executeQuery from './executeQuery';
-import explainQuery from './explainQuery';
-import tabletsFilters from './tabletsFilters';
-import settings from './settings/settings';
import preview from './preview';
-import nodesList from './nodesList';
-import describe from './describe';
+import saveQuery from './saveQuery';
+import schema from './schema/schema';
import schemaAcl from './schemaAcl/schemaAcl';
-import executeTopQueries from './executeTopQueries/executeTopQueries';
-import {tenantOverviewTopQueries} from './tenantOverview/topQueries/tenantOverviewTopQueries';
-import executeTopTables from './tenantOverview/executeTopTables/executeTopTables';
-import healthcheckInfo from './healthcheckInfo/healthcheckInfo';
+import settings from './settings/settings';
import shardsWorkload from './shardsWorkload/shardsWorkload';
-import {tenantOverviewTopShards} from './tenantOverview/topShards/tenantOverviewTopShards';
-import hotKeys from './hotKeys/hotKeys';
-import olapStats from './olapStats';
-import authentication from './authentication/authentication';
-import header from './header/header';
-import saveQuery from './saveQuery';
-import fullscreen from './fullscreen';
import singleClusterMode from './singleClusterMode';
-import clusters from './clusters/clusters';
+import storage from './storage/storage';
+import tablet from './tablet';
+import tablets from './tablets';
+import tabletsFilters from './tabletsFilters';
+import tenant from './tenant/tenant';
+import executeTopTables from './tenantOverview/executeTopTables/executeTopTables';
+import {topNodesByCpu} from './tenantOverview/topNodesByCpu/topNodesByCpu';
+import {topNodesByLoad} from './tenantOverview/topNodesByLoad/topNodesByLoad';
+import {topNodesByMemory} from './tenantOverview/topNodesByMemory/topNodesByMemory';
+import {tenantOverviewTopQueries} from './tenantOverview/topQueries/tenantOverviewTopQueries';
+import {tenantOverviewTopShards} from './tenantOverview/topShards/tenantOverviewTopShards';
+import topStorageGroups from './tenantOverview/topStorageGroups/topStorageGroups';
+import tenants from './tenants/tenants';
+import tooltip from './tooltip';
+import topic from './topic';
import vDisk from './vdisk/vdisk';
export const rootReducer = {
diff --git a/src/store/reducers/network/network.ts b/src/store/reducers/network/network.ts
index 001f00d4e1..dc1af970c1 100644
--- a/src/store/reducers/network/network.ts
+++ b/src/store/reducers/network/network.ts
@@ -1,6 +1,6 @@
import type {Reducer} from '@reduxjs/toolkit';
-import {createRequestActionTypes, createApiRequest} from '../../utils';
+import {createApiRequest, createRequestActionTypes} from '../../utils';
import type {NetworkAction, NetworkState} from './types';
diff --git a/src/store/reducers/network/types.ts b/src/store/reducers/network/types.ts
index 1b3016c8c8..fd2f39a3b7 100644
--- a/src/store/reducers/network/types.ts
+++ b/src/store/reducers/network/types.ts
@@ -2,7 +2,7 @@ import type {IResponseError} from '../../../types/api/error';
import type {TNetInfo} from '../../../types/api/netInfo';
import type {ApiRequestAction} from '../../utils';
-import {FETCH_ALL_NODES_NETWORK, setDataWasNotLoaded} from './network';
+import type {FETCH_ALL_NODES_NETWORK, setDataWasNotLoaded} from './network';
export interface NetworkState {
loading: boolean;
diff --git a/src/store/reducers/node/node.ts b/src/store/reducers/node/node.ts
index 1018ca513a..a3ed6383e6 100644
--- a/src/store/reducers/node/node.ts
+++ b/src/store/reducers/node/node.ts
@@ -1,6 +1,6 @@
import type {Reducer} from '@reduxjs/toolkit';
-import {createRequestActionTypes, createApiRequest} from '../../utils';
+import {createApiRequest, createRequestActionTypes} from '../../utils';
import type {NodeAction, NodeState} from './types';
import {prepareNodeData} from './utils';
diff --git a/src/store/reducers/node/types.ts b/src/store/reducers/node/types.ts
index 8e81fba9f7..1f325ab80d 100644
--- a/src/store/reducers/node/types.ts
+++ b/src/store/reducers/node/types.ts
@@ -5,7 +5,7 @@ import type {PreparedPDisk} from '../../../utils/disks/types';
import type {PreparedNodeSystemState} from '../../../utils/nodes';
import type {ApiRequestAction} from '../../utils';
-import {FETCH_NODE, FETCH_NODE_STRUCTURE, resetNode} from './node';
+import type {FETCH_NODE, FETCH_NODE_STRUCTURE, resetNode} from './node';
interface RawStructurePDisk extends PreparedPDisk {
vDisks: Record;
diff --git a/src/store/reducers/node/utils.ts b/src/store/reducers/node/utils.ts
index 9b464e3954..6be190f825 100644
--- a/src/store/reducers/node/utils.ts
+++ b/src/store/reducers/node/utils.ts
@@ -1,5 +1,6 @@
import type {TEvSystemStateResponse} from '../../../types/api/systemState';
import {prepareNodeSystemState} from '../../../utils/nodes';
+
import type {PreparedNode} from './types';
export const prepareNodeData = (data: TEvSystemStateResponse): PreparedNode => {
diff --git a/src/store/reducers/nodes/nodes.ts b/src/store/reducers/nodes/nodes.ts
index f666ee58f7..2289fd4e41 100644
--- a/src/store/reducers/nodes/nodes.ts
+++ b/src/store/reducers/nodes/nodes.ts
@@ -1,9 +1,8 @@
import type {Reducer} from '@reduxjs/toolkit';
-import {NodesUptimeFilterValues} from '../../../utils/nodes';
import {EVersion} from '../../../types/api/compute';
-
-import {createRequestActionTypes, createApiRequest} from '../../utils';
+import {NodesUptimeFilterValues} from '../../../utils/nodes';
+import {createApiRequest, createRequestActionTypes} from '../../utils';
import type {
ComputeApiRequestParams,
@@ -124,7 +123,7 @@ export const setNodesUptimeFilter = (value: NodesUptimeFilterValues) =>
({
type: SET_NODES_UPTIME_FILTER,
data: value,
- } as const);
+ }) as const;
export const setDataWasNotLoaded = () => {
return {
diff --git a/src/store/reducers/nodes/selectors.ts b/src/store/reducers/nodes/selectors.ts
index d128c5562a..35408b86e7 100644
--- a/src/store/reducers/nodes/selectors.ts
+++ b/src/store/reducers/nodes/selectors.ts
@@ -1,14 +1,15 @@
-import {Selector, createSelector} from '@reduxjs/toolkit';
+import type {Selector} from '@reduxjs/toolkit';
+import {createSelector} from '@reduxjs/toolkit';
import {EFlag} from '../../../types/api/enums';
-import {calcUptimeInSeconds} from '../../../utils/dataFormatters/dataFormatters';
import {HOUR_IN_SECONDS} from '../../../utils/constants';
-import {NodesUptimeFilterValues} from '../../../utils/nodes';
+import {calcUptimeInSeconds} from '../../../utils/dataFormatters/dataFormatters';
import {prepareSearchValue} from '../../../utils/filters';
-
+import {NodesUptimeFilterValues} from '../../../utils/nodes';
+import {ProblemFilterValues} from '../settings/settings';
import type {ProblemFilterValue} from '../settings/types';
+
import type {NodesPreparedEntity, NodesStateSlice} from './types';
-import {ProblemFilterValues} from '../settings/settings';
// ==== Filters ====
diff --git a/src/store/reducers/nodes/types.ts b/src/store/reducers/nodes/types.ts
index 1c6c571845..dc76a939d3 100644
--- a/src/store/reducers/nodes/types.ts
+++ b/src/store/reducers/nodes/types.ts
@@ -1,18 +1,18 @@
import type {OrderType} from '@gravity-ui/react-data-table';
-import type {IResponseError} from '../../../types/api/error';
-import type {TEndpoint, TPoolStats} from '../../../types/api/nodes';
import type {
EVersion,
TTabletStateInfo as TComputeTabletStateInfo,
} from '../../../types/api/compute';
-import type {TTabletStateInfo as TFullTabletStateInfo} from '../../../types/api/tablet';
import type {EFlag} from '../../../types/api/enums';
+import type {IResponseError} from '../../../types/api/error';
+import type {TEndpoint, TPoolStats} from '../../../types/api/nodes';
+import type {TTabletStateInfo as TFullTabletStateInfo} from '../../../types/api/tablet';
+import type {NodesSortValue, NodesUptimeFilterValues} from '../../../utils/nodes';
import type {ApiRequestAction} from '../../utils';
import type {VisibleEntities} from '../storage/types';
-import type {NodesSortValue, NodesUptimeFilterValues} from '../../../utils/nodes';
-import {
+import type {
FETCH_NODES,
resetNodesState,
setDataWasNotLoaded,
diff --git a/src/store/reducers/nodesList.ts b/src/store/reducers/nodesList.ts
index e0829b7fae..4e71928c3b 100644
--- a/src/store/reducers/nodesList.ts
+++ b/src/store/reducers/nodesList.ts
@@ -1,12 +1,12 @@
import type {Reducer} from '@reduxjs/toolkit';
import type {
- NodesListState,
NodesListAction,
NodesListRootStateSlice,
+ NodesListState,
} from '../../types/store/nodesList';
-import {createRequestActionTypes, createApiRequest} from '../utils';
import {prepareNodesMap} from '../../utils/nodes';
+import {createApiRequest, createRequestActionTypes} from '../utils';
export const FETCH_NODES_LIST = createRequestActionTypes('nodesList', 'FETCH_NODES_LIST');
diff --git a/src/store/reducers/olapStats.ts b/src/store/reducers/olapStats.ts
index 1b13f6f739..6ace287b8a 100644
--- a/src/store/reducers/olapStats.ts
+++ b/src/store/reducers/olapStats.ts
@@ -1,10 +1,8 @@
import type {Reducer} from '@reduxjs/toolkit';
import type {OlapStatsAction, OlapStatsState} from '../../types/store/olapStats';
-
import {parseQueryAPIExecuteResponse} from '../../utils/query';
-
-import {createRequestActionTypes, createApiRequest} from '../utils';
+import {createApiRequest, createRequestActionTypes} from '../utils';
export const FETCH_OLAP_STATS = createRequestActionTypes('query', 'SEND_OLAP_STATS_QUERY');
const RESET_LOADING_STATE = 'olapStats/RESET_LOADING_STATE';
diff --git a/src/store/reducers/overview/overview.ts b/src/store/reducers/overview/overview.ts
index 6b4bd504aa..b04152f5c7 100644
--- a/src/store/reducers/overview/overview.ts
+++ b/src/store/reducers/overview/overview.ts
@@ -1,8 +1,8 @@
import type {Reducer} from '@reduxjs/toolkit';
-import type {OverviewState, OverviewAction, OverviewHandledResponse} from './types';
+import {createApiRequest, createRequestActionTypes} from '../../utils';
-import {createRequestActionTypes, createApiRequest} from '../../utils';
+import type {OverviewAction, OverviewHandledResponse, OverviewState} from './types';
export const FETCH_OVERVIEW = createRequestActionTypes('overview', 'FETCH_OVERVIEW');
const SET_CURRENT_OVERVIEW_PATH = 'overview/SET_CURRENT_OVERVIEW_PATH';
diff --git a/src/store/reducers/overview/types.ts b/src/store/reducers/overview/types.ts
index f6b110a6ea..5744583013 100644
--- a/src/store/reducers/overview/types.ts
+++ b/src/store/reducers/overview/types.ts
@@ -1,9 +1,9 @@
-import type {ApiRequestAction} from '../../utils';
import type {IResponseError} from '../../../types/api/error';
import type {TEvDescribeSchemeResult} from '../../../types/api/schema';
+import type {Nullable} from '../../../utils/typecheckers';
+import type {ApiRequestAction} from '../../utils';
-import {FETCH_OVERVIEW, setDataWasNotLoaded, setCurrentOverviewPath} from './overview';
-import {Nullable} from '../../../utils/typecheckers';
+import type {FETCH_OVERVIEW, setCurrentOverviewPath, setDataWasNotLoaded} from './overview';
export interface OverviewState {
loading: boolean;
diff --git a/src/store/reducers/partitions/partitions.ts b/src/store/reducers/partitions/partitions.ts
index 16296c5bb3..a771495615 100644
--- a/src/store/reducers/partitions/partitions.ts
+++ b/src/store/reducers/partitions/partitions.ts
@@ -1,6 +1,6 @@
import type {Reducer} from '@reduxjs/toolkit';
-import {createRequestActionTypes, createApiRequest} from '../../utils';
+import {createApiRequest, createRequestActionTypes} from '../../utils';
import type {PartitionsAction, PartitionsState} from './types';
import {prepareConsumerPartitions, prepareTopicPartitions} from './utils';
diff --git a/src/store/reducers/partitions/types.ts b/src/store/reducers/partitions/types.ts
index 42cace58f1..432e6c3eee 100644
--- a/src/store/reducers/partitions/types.ts
+++ b/src/store/reducers/partitions/types.ts
@@ -2,7 +2,7 @@ import type {IResponseError} from '../../../types/api/error';
import type {ProcessSpeedStats} from '../../../utils/bytesParsers';
import type {ApiRequestAction} from '../../utils';
-import {FETCH_PARTITIONS, setDataWasNotLoaded, setSelectedConsumer} from './partitions';
+import type {FETCH_PARTITIONS, setDataWasNotLoaded, setSelectedConsumer} from './partitions';
// Fields that could be undefined corresponds to partitions without consumers
export interface PreparedPartitionData {
diff --git a/src/store/reducers/partitions/utils.ts b/src/store/reducers/partitions/utils.ts
index 1c376c9ff4..d29ca8fe7c 100644
--- a/src/store/reducers/partitions/utils.ts
+++ b/src/store/reducers/partitions/utils.ts
@@ -4,11 +4,11 @@ import type {
PartitionStats,
} from '../../../types/api/consumer';
import type {PartitionInfo as TopicPartitionInfo} from '../../../types/api/topic';
-
import {convertBytesObjectToSpeed} from '../../../utils/bytesParsers';
import {parseLag, parseTimestampToIdleTime} from '../../../utils/timeParsers';
import {isNumeric} from '../../../utils/utils';
-import {PreparedPartitionData} from './types';
+
+import type {PreparedPartitionData} from './types';
const prepareGeneralPartitionStats = (partitionStats: PartitionStats | undefined) => {
const {
diff --git a/src/store/reducers/pdisk/pdisk.ts b/src/store/reducers/pdisk/pdisk.ts
index 64d57fe92a..4efb5a5be7 100644
--- a/src/store/reducers/pdisk/pdisk.ts
+++ b/src/store/reducers/pdisk/pdisk.ts
@@ -1,7 +1,8 @@
import type {Reducer} from '@reduxjs/toolkit';
import {EVersion} from '../../../types/api/storage';
-import {createRequestActionTypes, createApiRequest} from '../../utils';
+import {createApiRequest, createRequestActionTypes} from '../../utils';
+
import type {PDiskAction, PDiskState} from './types';
import {preparePDiksDataResponse, preparePDiskStorageResponse} from './utils';
diff --git a/src/store/reducers/pdisk/types.ts b/src/store/reducers/pdisk/types.ts
index b3a728fabf..8fcd50d335 100644
--- a/src/store/reducers/pdisk/types.ts
+++ b/src/store/reducers/pdisk/types.ts
@@ -2,6 +2,7 @@ import type {IResponseError} from '../../../types/api/error';
import type {PreparedPDisk} from '../../../utils/disks/types';
import type {ApiRequestAction} from '../../utils';
import type {PreparedStorageGroup} from '../storage/types';
+
import type {FETCH_PDISK, FETCH_PDISK_GROUPS, setPDiskDataWasNotLoaded} from './pdisk';
interface PDiskData extends PreparedPDisk {
diff --git a/src/store/reducers/preview.ts b/src/store/reducers/preview.ts
index ccfe8ea5de..3a8f0418f3 100644
--- a/src/store/reducers/preview.ts
+++ b/src/store/reducers/preview.ts
@@ -1,8 +1,8 @@
import type {ExecuteActions} from '../../types/api/query';
import type {IQueryResult, QueryErrorResponse} from '../../types/store/query';
import {parseQueryAPIExecuteResponse} from '../../utils/query';
-
-import {createRequestActionTypes, createApiRequest, ApiRequestAction} from '../utils';
+import type {ApiRequestAction} from '../utils';
+import {createApiRequest, createRequestActionTypes} from '../utils';
const SEND_QUERY = createRequestActionTypes('preview', 'SEND_QUERY');
const SET_QUERY_OPTIONS = 'preview/SET_QUERY_OPTIONS';
diff --git a/src/store/reducers/schema/schema.ts b/src/store/reducers/schema/schema.ts
index e140ef1a78..a8fa666e7a 100644
--- a/src/store/reducers/schema/schema.ts
+++ b/src/store/reducers/schema/schema.ts
@@ -1,19 +1,18 @@
-import type {Selector, Reducer} from '@reduxjs/toolkit';
-
+import type {Reducer, Selector} from '@reduxjs/toolkit';
import {createSelector} from '@reduxjs/toolkit';
+import {isEntityWithMergedImplementation} from '../../../containers/Tenant/utils/schema';
import type {EPathType} from '../../../types/api/schema';
+import {createApiRequest, createRequestActionTypes} from '../../utils';
+
import type {
SchemaAction,
SchemaData,
SchemaHandledResponse,
- SchemaStateSlice,
SchemaState,
+ SchemaStateSlice,
} from './types';
-import {isEntityWithMergedImplementation} from '../../../containers/Tenant/utils/schema';
-import {createRequestActionTypes, createApiRequest} from '../../utils';
-
export const FETCH_SCHEMA = createRequestActionTypes('schema', 'FETCH_SCHEMA');
const PRELOAD_SCHEMAS = 'schema/PRELOAD_SCHEMAS';
const SET_SCHEMA = 'schema/SET_SCHEMA';
diff --git a/src/store/reducers/schema/types.ts b/src/store/reducers/schema/types.ts
index 5dbbc46e9d..4439813eed 100644
--- a/src/store/reducers/schema/types.ts
+++ b/src/store/reducers/schema/types.ts
@@ -1,11 +1,11 @@
-import type {ApiRequestAction} from '../../utils';
import type {IResponseError} from '../../../types/api/error';
import type {TEvDescribeSchemeResult} from '../../../types/api/schema';
+import type {ApiRequestAction} from '../../utils';
-import {
+import type {
+ FETCH_SCHEMA,
disableAutorefresh,
enableAutorefresh,
- FETCH_SCHEMA,
preloadSchemas,
resetLoadingState,
setCurrentSchemaPath,
diff --git a/src/store/reducers/schemaAcl/schemaAcl.ts b/src/store/reducers/schemaAcl/schemaAcl.ts
index bc97719179..cdef8b44d9 100644
--- a/src/store/reducers/schemaAcl/schemaAcl.ts
+++ b/src/store/reducers/schemaAcl/schemaAcl.ts
@@ -1,6 +1,6 @@
import type {Reducer} from '@reduxjs/toolkit';
-import {createRequestActionTypes, createApiRequest} from '../../utils';
+import {createApiRequest, createRequestActionTypes} from '../../utils';
import type {SchemaAclAction, SchemaAclState} from './types';
diff --git a/src/store/reducers/schemaAcl/types.ts b/src/store/reducers/schemaAcl/types.ts
index 27deb0b0e2..ca9812d757 100644
--- a/src/store/reducers/schemaAcl/types.ts
+++ b/src/store/reducers/schemaAcl/types.ts
@@ -2,7 +2,7 @@ import type {TACE, TMetaInfo} from '../../../types/api/acl';
import type {IResponseError} from '../../../types/api/error';
import type {ApiRequestAction} from '../../utils';
-import {FETCH_SCHEMA_ACL, setAclWasNotLoaded} from './schemaAcl';
+import type {FETCH_SCHEMA_ACL, setAclWasNotLoaded} from './schemaAcl';
export interface SchemaAclState {
loading: boolean;
diff --git a/src/store/reducers/settings/settings.ts b/src/store/reducers/settings/settings.ts
index e698c8b665..e4c1e50649 100644
--- a/src/store/reducers/settings/settings.ts
+++ b/src/store/reducers/settings/settings.ts
@@ -1,9 +1,9 @@
-import type {Reducer} from '@reduxjs/toolkit';
-import type {ThunkAction} from 'redux-thunk';
-
-import {DEFAULT_USER_SETTINGS, SettingsObject, settingsManager} from '../../../services/settings';
+import type {Reducer, ThunkAction} from '@reduxjs/toolkit';
import type {RootState} from '../..';
+import type {SettingsObject} from '../../../services/settings';
+import {DEFAULT_USER_SETTINGS, settingsManager} from '../../../services/settings';
+
import type {
ProblemFilterValue,
SetSettingValueAction,
diff --git a/src/store/reducers/settings/types.ts b/src/store/reducers/settings/types.ts
index 761804d4a2..5ab3670646 100644
--- a/src/store/reducers/settings/types.ts
+++ b/src/store/reducers/settings/types.ts
@@ -1,6 +1,12 @@
-import type {ValueOf} from '../../../types/common';
import type {SettingsObject} from '../../../services/settings';
-import {changeFilter, setUserSettings, ProblemFilterValues, SET_SETTING_VALUE} from './settings';
+import type {ValueOf} from '../../../types/common';
+
+import type {
+ ProblemFilterValues,
+ SET_SETTING_VALUE,
+ changeFilter,
+ setUserSettings,
+} from './settings';
export type ProblemFilterValue = ValueOf;
diff --git a/src/store/reducers/shardsWorkload/shardsWorkload.ts b/src/store/reducers/shardsWorkload/shardsWorkload.ts
index 8da4740d8a..ce0f44c655 100644
--- a/src/store/reducers/shardsWorkload/shardsWorkload.ts
+++ b/src/store/reducers/shardsWorkload/shardsWorkload.ts
@@ -1,7 +1,8 @@
import type {Reducer} from '@reduxjs/toolkit';
import {parseQueryAPIExecuteResponse} from '../../../utils/query';
-import {createRequestActionTypes, createApiRequest} from '../../utils';
+import {createApiRequest, createRequestActionTypes} from '../../utils';
+
import type {IShardsWorkloadAction, IShardsWorkloadFilters, IShardsWorkloadState} from './types';
import {EShardsWorkloadMode} from './types';
diff --git a/src/store/reducers/shardsWorkload/types.ts b/src/store/reducers/shardsWorkload/types.ts
index 41e4af9953..2254e70545 100644
--- a/src/store/reducers/shardsWorkload/types.ts
+++ b/src/store/reducers/shardsWorkload/types.ts
@@ -1,6 +1,7 @@
-import {SEND_SHARD_QUERY, setShardsState, setShardsQueryFilters} from './shardsWorkload';
-import type {ApiRequestAction} from '../../utils';
import type {IQueryResult, QueryErrorResponse} from '../../../types/store/query';
+import type {ApiRequestAction} from '../../utils';
+
+import type {SEND_SHARD_QUERY, setShardsQueryFilters, setShardsState} from './shardsWorkload';
export enum EShardsWorkloadMode {
Immediate = 'immediate',
diff --git a/src/store/reducers/storage/selectors.ts b/src/store/reducers/storage/selectors.ts
index 607215a3fe..12faeb5fb0 100644
--- a/src/store/reducers/storage/selectors.ts
+++ b/src/store/reducers/storage/selectors.ts
@@ -1,19 +1,21 @@
-import {Selector, createSelector} from '@reduxjs/toolkit';
-
import type {OrderType} from '@gravity-ui/react-data-table';
import {ASCENDING, DESCENDING} from '@gravity-ui/react-data-table/build/esm/lib/constants';
+import type {Selector} from '@reduxjs/toolkit';
+import {createSelector} from '@reduxjs/toolkit';
-import {NODES_SORT_VALUES, type NodesSortValue} from '../../../utils/nodes';
-import {STORAGE_SORT_VALUES, type StorageSortValue, getUsage} from '../../../utils/storage';
-
+import {NODES_SORT_VALUES} from '../../../utils/nodes';
+import type {NodesSortValue} from '../../../utils/nodes';
+import {STORAGE_SORT_VALUES, getUsage} from '../../../utils/storage';
+import type {StorageSortValue} from '../../../utils/storage';
import {filterNodesByUptime} from '../nodes/selectors';
+
+import {VISIBLE_ENTITIES} from './constants';
import type {
PreparedStorageGroup,
PreparedStorageNode,
StorageStateSlice,
UsageFilter,
} from './types';
-import {VISIBLE_ENTITIES} from './constants';
// ==== Filters ====
diff --git a/src/store/reducers/storage/storage.ts b/src/store/reducers/storage/storage.ts
index ff8879ee9e..2c9b077fad 100644
--- a/src/store/reducers/storage/storage.ts
+++ b/src/store/reducers/storage/storage.ts
@@ -2,10 +2,10 @@ import type {Reducer} from '@reduxjs/toolkit';
import {EVersion} from '../../../types/api/storage';
import {NodesUptimeFilterValues} from '../../../utils/nodes';
-
-import {createRequestActionTypes, createApiRequest} from '../../utils';
-
+import {createApiRequest, createRequestActionTypes} from '../../utils';
import type {NodesApiRequestParams, NodesSortParams} from '../nodes/types';
+
+import {STORAGE_TYPES, VISIBLE_ENTITIES} from './constants';
import type {
StorageAction,
StorageApiRequestParams,
@@ -14,7 +14,6 @@ import type {
StorageType,
VisibleEntities,
} from './types';
-import {VISIBLE_ENTITIES, STORAGE_TYPES} from './constants';
import {prepareStorageGroupsResponse, prepareStorageNodesResponse} from './utils';
export const FETCH_STORAGE = createRequestActionTypes('storage', 'FETCH_STORAGE');
diff --git a/src/store/reducers/storage/types.ts b/src/store/reducers/storage/types.ts
index a1b92d4d3c..9b8b071095 100644
--- a/src/store/reducers/storage/types.ts
+++ b/src/store/reducers/storage/types.ts
@@ -3,14 +3,14 @@ import type {OrderType} from '@gravity-ui/react-data-table';
import type {IResponseError} from '../../../types/api/error';
import type {TSystemStateInfo} from '../../../types/api/nodes';
import type {EVersion, TStorageGroupInfo} from '../../../types/api/storage';
-import type {PreparedPDisk, PreparedVDisk} from '../../../utils/disks/types';
import type {ValueOf} from '../../../types/common';
+import type {PreparedPDisk, PreparedVDisk} from '../../../utils/disks/types';
import type {NodesSortValue, NodesUptimeFilterValues} from '../../../utils/nodes';
import type {StorageSortValue} from '../../../utils/storage';
import type {ApiRequestAction} from '../../utils';
-import {STORAGE_TYPES, VISIBLE_ENTITIES} from './constants';
-import {
+import type {STORAGE_TYPES, VISIBLE_ENTITIES} from './constants';
+import type {
FETCH_STORAGE,
setDataWasNotLoaded,
setGroupsSortParams,
diff --git a/src/store/reducers/storage/utils.ts b/src/store/reducers/storage/utils.ts
index d4172c04d0..f40ac00e53 100644
--- a/src/store/reducers/storage/utils.ts
+++ b/src/store/reducers/storage/utils.ts
@@ -1,16 +1,17 @@
+import {EFlag} from '../../../types/api/enums';
import type {TNodeInfo, TNodesInfo} from '../../../types/api/nodes';
+import {TPDiskState} from '../../../types/api/pdisk';
import type {
TStorageGroupInfo,
TStorageGroupInfoV2,
TStorageInfo,
TStoragePoolInfo,
} from '../../../types/api/storage';
-import {EVDiskState, type TVDiskStateInfo} from '../../../types/api/vdisk';
-import {TPDiskState} from '../../../types/api/pdisk';
-import {EFlag} from '../../../types/api/enums';
+import {EVDiskState} from '../../../types/api/vdisk';
+import type {TVDiskStateInfo} from '../../../types/api/vdisk';
import {preparePDiskData, prepareVDiskData} from '../../../utils/disks/prepareDisks';
-import {getUsage} from '../../../utils/storage';
import {prepareNodeSystemState} from '../../../utils/nodes';
+import {getUsage} from '../../../utils/storage';
import type {PreparedStorageGroup, PreparedStorageNode, PreparedStorageResponse} from './types';
diff --git a/src/store/reducers/tablet.ts b/src/store/reducers/tablet.ts
index aa28a15bfa..e3ea18584f 100644
--- a/src/store/reducers/tablet.ts
+++ b/src/store/reducers/tablet.ts
@@ -8,9 +8,8 @@ import type {
ITabletPreparedHistoryItem,
ITabletState,
} from '../../types/store/tablet';
-
-import {createRequestActionTypes, createApiRequest} from '../utils';
import {prepareNodesMap} from '../../utils/nodes';
+import {createApiRequest, createRequestActionTypes} from '../utils';
export const FETCH_TABLET = createRequestActionTypes('TABLET', 'FETCH_TABLET');
export const FETCH_TABLET_DESCRIBE = createRequestActionTypes('TABLET', 'FETCH_TABLET_DESCRIBE');
diff --git a/src/store/reducers/tablets.ts b/src/store/reducers/tablets.ts
index 4ee816a939..00cb758eb8 100644
--- a/src/store/reducers/tablets.ts
+++ b/src/store/reducers/tablets.ts
@@ -6,8 +6,7 @@ import type {
ITabletsApiRequestParams,
ITabletsState,
} from '../../types/store/tablets';
-
-import {createRequestActionTypes, createApiRequest} from '../utils';
+import {createApiRequest, createRequestActionTypes} from '../utils';
export const FETCH_TABLETS = createRequestActionTypes('tablets', 'FETCH_TABLETS');
@@ -87,7 +86,7 @@ export const setTypeFilter = (typeFilter: EType[]) => {
export const clearWasLoadingFlag = () =>
({
type: CLEAR_WAS_LOADING_TABLETS,
- } as const);
+ }) as const;
export function getTabletsInfo(data: ITabletsApiRequestParams) {
return createApiRequest({
diff --git a/src/store/reducers/tabletsFilters.js b/src/store/reducers/tabletsFilters.js
index a660b10625..cc38bd3413 100644
--- a/src/store/reducers/tabletsFilters.js
+++ b/src/store/reducers/tabletsFilters.js
@@ -1,6 +1,7 @@
import {createSelector} from '@reduxjs/toolkit';
-import {createRequestActionTypes, createApiRequest} from '../utils';
+
import {AUTO_RELOAD_INTERVAL} from '../../utils/constants';
+import {createApiRequest, createRequestActionTypes} from '../utils';
const FETCH_TABLETS_FILTERS = createRequestActionTypes('tabletsFilters', 'FETCH_TABLETS_FILTERS');
diff --git a/src/store/reducers/tenant/tenant.ts b/src/store/reducers/tenant/tenant.ts
index 2a94ef1625..b10d1ef831 100644
--- a/src/store/reducers/tenant/tenant.ts
+++ b/src/store/reducers/tenant/tenant.ts
@@ -1,6 +1,8 @@
import type {Reducer} from '@reduxjs/toolkit';
import type {TTenant} from '../../../types/api/tenant';
+import {createApiRequest, createRequestActionTypes} from '../../utils';
+
import type {
TenantAction,
TenantDiagnosticsTab,
@@ -11,8 +13,6 @@ import type {
TenantSummaryTab,
} from './types';
-import {createRequestActionTypes, createApiRequest} from '../../utils';
-
export const FETCH_TENANT = createRequestActionTypes('tenant', 'FETCH_TENANT');
const SET_TOP_LEVEL_TAB = 'tenant/SET_TOP_LEVEL_TAB';
diff --git a/src/store/reducers/tenant/types.ts b/src/store/reducers/tenant/types.ts
index 69af7d9fd6..198921dc50 100644
--- a/src/store/reducers/tenant/types.ts
+++ b/src/store/reducers/tenant/types.ts
@@ -3,22 +3,22 @@ import type {TTenant} from '../../../types/api/tenant';
import type {ValueOf} from '../../../types/common';
import type {ApiRequestAction} from '../../utils';
-import {
- TENANT_QUERY_TABS_ID,
+import type {
TENANT_DIAGNOSTICS_TABS_IDS,
+ TENANT_METRICS_TABS_IDS,
TENANT_PAGES_IDS,
+ TENANT_QUERY_TABS_ID,
TENANT_SUMMARY_TABS_IDS,
- TENANT_METRICS_TABS_IDS,
} from './constants';
-import {
+import type {
FETCH_TENANT,
clearTenant,
+ setDataWasNotLoaded,
setDiagnosticsTab,
+ setMetricsTab,
setQueryTab,
setSummaryTab,
- setMetricsTab,
setTenantPage,
- setDataWasNotLoaded,
} from './tenant';
export type TenantPage = ValueOf;
diff --git a/src/store/reducers/tenantOverview/executeTopTables/executeTopTables.ts b/src/store/reducers/tenantOverview/executeTopTables/executeTopTables.ts
index 9fa27bdff7..9f0faa9a0a 100644
--- a/src/store/reducers/tenantOverview/executeTopTables/executeTopTables.ts
+++ b/src/store/reducers/tenantOverview/executeTopTables/executeTopTables.ts
@@ -3,6 +3,7 @@ import type {Reducer} from '@reduxjs/toolkit';
import {TENANT_OVERVIEW_TABLES_LIMIT} from '../../../../utils/constants';
import {parseQueryAPIExecuteResponse} from '../../../../utils/query';
import {createApiRequest, createRequestActionTypes} from '../../../utils';
+
import type {TopTablesAction, TopTablesState} from './types';
export const FETCH_TOP_TABLES = createRequestActionTypes('top-tables', 'FETCH_TOP_TABLES');
diff --git a/src/store/reducers/tenantOverview/executeTopTables/types.ts b/src/store/reducers/tenantOverview/executeTopTables/types.ts
index 9f4873b544..5cad8e605c 100644
--- a/src/store/reducers/tenantOverview/executeTopTables/types.ts
+++ b/src/store/reducers/tenantOverview/executeTopTables/types.ts
@@ -1,6 +1,7 @@
import type {IQueryResult, QueryErrorResponse} from '../../../../types/store/query';
import type {ApiRequestAction} from '../../../utils';
-import {FETCH_TOP_TABLES, setDataWasNotLoaded} from './executeTopTables';
+
+import type {FETCH_TOP_TABLES, setDataWasNotLoaded} from './executeTopTables';
export interface TopTablesState {
loading: boolean;
diff --git a/src/store/reducers/tenantOverview/topNodesByCpu/topNodesByCpu.ts b/src/store/reducers/tenantOverview/topNodesByCpu/topNodesByCpu.ts
index 17737af5a5..fafcfdb20d 100644
--- a/src/store/reducers/tenantOverview/topNodesByCpu/topNodesByCpu.ts
+++ b/src/store/reducers/tenantOverview/topNodesByCpu/topNodesByCpu.ts
@@ -2,8 +2,9 @@ import type {Reducer} from '@reduxjs/toolkit';
import {TENANT_OVERVIEW_TABLES_LIMIT} from '../../../../utils/constants';
import {createApiRequest, createRequestActionTypes} from '../../../utils';
-import {prepareNodesData} from '../../nodes/utils';
import type {NodesApiRequestParams} from '../../nodes/types';
+import {prepareNodesData} from '../../nodes/utils';
+
import type {TopNodesByCpuAction, TopNodesByCpuState, TopPoolsStateSlice} from './types';
export const FETCH_TOP_NODES_BY_CPU = createRequestActionTypes(
diff --git a/src/store/reducers/tenantOverview/topNodesByCpu/types.ts b/src/store/reducers/tenantOverview/topNodesByCpu/types.ts
index d6a1fe4162..114564e16a 100644
--- a/src/store/reducers/tenantOverview/topNodesByCpu/types.ts
+++ b/src/store/reducers/tenantOverview/topNodesByCpu/types.ts
@@ -1,7 +1,8 @@
import type {IResponseError} from '../../../../types/api/error';
import type {ApiRequestAction} from '../../../utils';
import type {NodesPreparedEntity} from '../../nodes/types';
-import {FETCH_TOP_NODES_BY_CPU, setDataWasNotLoaded} from './topNodesByCpu';
+
+import type {FETCH_TOP_NODES_BY_CPU, setDataWasNotLoaded} from './topNodesByCpu';
export interface TopNodesByCpuState {
loading: boolean;
diff --git a/src/store/reducers/tenantOverview/topNodesByLoad/topNodesByLoad.ts b/src/store/reducers/tenantOverview/topNodesByLoad/topNodesByLoad.ts
index 73af8ccb0b..7a0ad437b5 100644
--- a/src/store/reducers/tenantOverview/topNodesByLoad/topNodesByLoad.ts
+++ b/src/store/reducers/tenantOverview/topNodesByLoad/topNodesByLoad.ts
@@ -2,8 +2,9 @@ import type {Reducer} from '@reduxjs/toolkit';
import {TENANT_OVERVIEW_TABLES_LIMIT} from '../../../../utils/constants';
import {createApiRequest, createRequestActionTypes} from '../../../utils';
-import {prepareNodesData} from '../../nodes/utils';
import type {NodesApiRequestParams} from '../../nodes/types';
+import {prepareNodesData} from '../../nodes/utils';
+
import type {TopNodesByLoadAction, TopNodesByLoadState, TopNodesByLoadStateSlice} from './types';
export const FETCH_TOP_NODES_BY_LOAD = createRequestActionTypes(
diff --git a/src/store/reducers/tenantOverview/topNodesByLoad/types.ts b/src/store/reducers/tenantOverview/topNodesByLoad/types.ts
index 4e29e4d812..4044fceb02 100644
--- a/src/store/reducers/tenantOverview/topNodesByLoad/types.ts
+++ b/src/store/reducers/tenantOverview/topNodesByLoad/types.ts
@@ -1,7 +1,8 @@
import type {IResponseError} from '../../../../types/api/error';
import type {ApiRequestAction} from '../../../utils';
import type {NodesPreparedEntity} from '../../nodes/types';
-import {FETCH_TOP_NODES_BY_LOAD, setDataWasNotLoaded} from './topNodesByLoad';
+
+import type {FETCH_TOP_NODES_BY_LOAD, setDataWasNotLoaded} from './topNodesByLoad';
export interface TopNodesByLoadState {
loading: boolean;
diff --git a/src/store/reducers/tenantOverview/topNodesByMemory/topNodesByMemory.ts b/src/store/reducers/tenantOverview/topNodesByMemory/topNodesByMemory.ts
index ceefabd1e4..3f97dd3f2e 100644
--- a/src/store/reducers/tenantOverview/topNodesByMemory/topNodesByMemory.ts
+++ b/src/store/reducers/tenantOverview/topNodesByMemory/topNodesByMemory.ts
@@ -2,9 +2,10 @@ import type {Reducer} from '@reduxjs/toolkit';
import {TENANT_OVERVIEW_TABLES_LIMIT} from '../../../../utils/constants';
import {createApiRequest, createRequestActionTypes} from '../../../utils';
-import {prepareNodesData} from '../../nodes/utils';
import type {NodesApiRequestParams} from '../../nodes/types';
-import type {TopNodesByMemoryAction, TopNodesByMemoryState, TopNodesByMemorySlice} from './types';
+import {prepareNodesData} from '../../nodes/utils';
+
+import type {TopNodesByMemoryAction, TopNodesByMemorySlice, TopNodesByMemoryState} from './types';
export const FETCH_TOP_NODES_BY_MEMORY = createRequestActionTypes(
'topNodesByMemory',
diff --git a/src/store/reducers/tenantOverview/topNodesByMemory/types.ts b/src/store/reducers/tenantOverview/topNodesByMemory/types.ts
index 8600042a6f..c052d212c8 100644
--- a/src/store/reducers/tenantOverview/topNodesByMemory/types.ts
+++ b/src/store/reducers/tenantOverview/topNodesByMemory/types.ts
@@ -1,7 +1,8 @@
import type {IResponseError} from '../../../../types/api/error';
import type {ApiRequestAction} from '../../../utils';
import type {NodesPreparedEntity} from '../../nodes/types';
-import {FETCH_TOP_NODES_BY_MEMORY, setDataWasNotLoaded} from './topNodesByMemory';
+
+import type {FETCH_TOP_NODES_BY_MEMORY, setDataWasNotLoaded} from './topNodesByMemory';
export interface TopNodesByMemoryState {
loading: boolean;
diff --git a/src/store/reducers/tenantOverview/topQueries/tenantOverviewTopQueries.ts b/src/store/reducers/tenantOverview/topQueries/tenantOverviewTopQueries.ts
index 646a107927..4b9d214f67 100644
--- a/src/store/reducers/tenantOverview/topQueries/tenantOverviewTopQueries.ts
+++ b/src/store/reducers/tenantOverview/topQueries/tenantOverviewTopQueries.ts
@@ -2,8 +2,8 @@ import type {Reducer} from '@reduxjs/toolkit';
import {TENANT_OVERVIEW_TABLES_LIMIT} from '../../../../utils/constants';
import {parseQueryAPIExecuteResponse} from '../../../../utils/query';
+import {createApiRequest, createRequestActionTypes} from '../../../utils';
-import {createRequestActionTypes, createApiRequest} from '../../../utils';
import type {TenantOverviewTopQueriesAction, TenantOverviewTopQueriesState} from './types';
export const FETCH_TENANT_OVERVIEW_TOP_QUERIES = createRequestActionTypes(
diff --git a/src/store/reducers/tenantOverview/topQueries/types.ts b/src/store/reducers/tenantOverview/topQueries/types.ts
index 31764dc42d..f774501eda 100644
--- a/src/store/reducers/tenantOverview/topQueries/types.ts
+++ b/src/store/reducers/tenantOverview/topQueries/types.ts
@@ -1,6 +1,10 @@
import type {IQueryResult, QueryErrorResponse} from '../../../../types/store/query';
import type {ApiRequestAction} from '../../../utils';
-import {FETCH_TENANT_OVERVIEW_TOP_QUERIES, setDataWasNotLoaded} from './tenantOverviewTopQueries';
+
+import type {
+ FETCH_TENANT_OVERVIEW_TOP_QUERIES,
+ setDataWasNotLoaded,
+} from './tenantOverviewTopQueries';
export interface TenantOverviewTopQueriesState {
loading: boolean;
diff --git a/src/store/reducers/tenantOverview/topShards/tenantOverviewTopShards.ts b/src/store/reducers/tenantOverview/topShards/tenantOverviewTopShards.ts
index fd7370c2b8..f2ae796800 100644
--- a/src/store/reducers/tenantOverview/topShards/tenantOverviewTopShards.ts
+++ b/src/store/reducers/tenantOverview/topShards/tenantOverviewTopShards.ts
@@ -2,8 +2,9 @@ import type {Reducer} from '@reduxjs/toolkit';
import {TENANT_OVERVIEW_TABLES_LIMIT} from '../../../../utils/constants';
import {parseQueryAPIExecuteResponse} from '../../../../utils/query';
-import {createRequestActionTypes, createApiRequest} from '../../../utils';
-import {TenantOverviewTopShardsAction, TenantOverviewTopShardsState} from './types';
+import {createApiRequest, createRequestActionTypes} from '../../../utils';
+
+import type {TenantOverviewTopShardsAction, TenantOverviewTopShardsState} from './types';
export const FETCH_TENANT_OVERVIEW_TOP_SHARDS = createRequestActionTypes(
'tenantOverviewTopShards',
diff --git a/src/store/reducers/tenantOverview/topShards/types.ts b/src/store/reducers/tenantOverview/topShards/types.ts
index d679e3109b..029c916442 100644
--- a/src/store/reducers/tenantOverview/topShards/types.ts
+++ b/src/store/reducers/tenantOverview/topShards/types.ts
@@ -1,6 +1,10 @@
import type {IQueryResult, QueryErrorResponse} from '../../../../types/store/query';
import type {ApiRequestAction} from '../../../utils';
-import {FETCH_TENANT_OVERVIEW_TOP_SHARDS, setDataWasNotLoaded} from './tenantOverviewTopShards';
+
+import type {
+ FETCH_TENANT_OVERVIEW_TOP_SHARDS,
+ setDataWasNotLoaded,
+} from './tenantOverviewTopShards';
export interface TenantOverviewTopShardsState {
loading: boolean;
diff --git a/src/store/reducers/tenantOverview/topStorageGroups/topStorageGroups.ts b/src/store/reducers/tenantOverview/topStorageGroups/topStorageGroups.ts
index 1704f41c66..39baf13d8c 100644
--- a/src/store/reducers/tenantOverview/topStorageGroups/topStorageGroups.ts
+++ b/src/store/reducers/tenantOverview/topStorageGroups/topStorageGroups.ts
@@ -1,9 +1,10 @@
import type {Reducer} from '@reduxjs/toolkit';
-import {TENANT_OVERVIEW_TABLES_LIMIT} from '../../../../utils/constants';
import {EVersion} from '../../../../types/api/storage';
+import {TENANT_OVERVIEW_TABLES_LIMIT} from '../../../../utils/constants';
import {createApiRequest, createRequestActionTypes} from '../../../utils';
import type {StorageApiRequestParams} from '../../storage/types';
+
import type {
TopStorageGroupsAction,
TopStorageGroupsState,
diff --git a/src/store/reducers/tenantOverview/topStorageGroups/types.ts b/src/store/reducers/tenantOverview/topStorageGroups/types.ts
index 5d6d764a20..90cb763d85 100644
--- a/src/store/reducers/tenantOverview/topStorageGroups/types.ts
+++ b/src/store/reducers/tenantOverview/topStorageGroups/types.ts
@@ -1,7 +1,8 @@
import type {IResponseError} from '../../../../types/api/error';
import type {ApiRequestAction} from '../../../utils';
import type {PreparedStorageGroup} from '../../storage/types';
-import {FETCH_TOP_STORAGE_GROUPS, setDataWasNotLoaded} from './topStorageGroups';
+
+import type {FETCH_TOP_STORAGE_GROUPS, setDataWasNotLoaded} from './topStorageGroups';
export interface TopStorageGroupsState {
loading: boolean;
diff --git a/src/store/reducers/tenantOverview/topStorageGroups/utils.ts b/src/store/reducers/tenantOverview/topStorageGroups/utils.ts
index 9662bbc7d0..b3f5bf1709 100644
--- a/src/store/reducers/tenantOverview/topStorageGroups/utils.ts
+++ b/src/store/reducers/tenantOverview/topStorageGroups/utils.ts
@@ -1,6 +1,7 @@
-import {TENANT_OVERVIEW_TABLES_LIMIT} from '../../../../utils/constants';
import type {TStorageInfo} from '../../../../types/api/storage';
+import {TENANT_OVERVIEW_TABLES_LIMIT} from '../../../../utils/constants';
import {prepareStorageGroups} from '../../storage/utils';
+
import type {PreparedTopStorageGroupsResponse} from './types';
export const prepareTopStorageGroupsResponse = (
diff --git a/src/store/reducers/tenants/selectors.ts b/src/store/reducers/tenants/selectors.ts
index a500469fc0..a1e2c60917 100644
--- a/src/store/reducers/tenants/selectors.ts
+++ b/src/store/reducers/tenants/selectors.ts
@@ -1,11 +1,11 @@
-import {Selector, createSelector} from '@reduxjs/toolkit';
+import type {Selector} from '@reduxjs/toolkit';
+import {createSelector} from '@reduxjs/toolkit';
import escapeRegExp from 'lodash/escapeRegExp';
-import {EFlag} from '../../../types/api/enums';
-
import type {RootState} from '../..';
-import type {ProblemFilterValue} from '../settings/types';
+import {EFlag} from '../../../types/api/enums';
import {ProblemFilterValues, selectProblemFilter} from '../settings/settings';
+import type {ProblemFilterValue} from '../settings/types';
import type {PreparedTenant, TenantsStateSlice} from './types';
diff --git a/src/store/reducers/tenants/tenants.ts b/src/store/reducers/tenants/tenants.ts
index 2ddab6d209..cc017dae45 100644
--- a/src/store/reducers/tenants/tenants.ts
+++ b/src/store/reducers/tenants/tenants.ts
@@ -1,6 +1,6 @@
import type {Reducer} from '@reduxjs/toolkit';
-import {createRequestActionTypes, createApiRequest} from '../../utils';
+import {createApiRequest, createRequestActionTypes} from '../../utils';
import type {TenantsAction, TenantsState} from './types';
import {prepareTenants} from './utils';
diff --git a/src/store/reducers/tenants/types.ts b/src/store/reducers/tenants/types.ts
index 14d3c2f61f..36d885ebb8 100644
--- a/src/store/reducers/tenants/types.ts
+++ b/src/store/reducers/tenants/types.ts
@@ -1,10 +1,10 @@
-import {FETCH_TENANTS, setSearchValue} from './tenants';
-
-import {ValueOf} from '../../../types/common';
-import type {TTenant} from '../../../types/api/tenant';
import type {IResponseError} from '../../../types/api/error';
+import type {TTenant} from '../../../types/api/tenant';
+import type {ValueOf} from '../../../types/common';
import type {ApiRequestAction} from '../../utils';
-import {METRIC_STATUS} from './contants';
+
+import type {METRIC_STATUS} from './contants';
+import type {FETCH_TENANTS, setSearchValue} from './tenants';
export interface PreparedTenant extends TTenant {
backend: string | undefined;
diff --git a/src/store/reducers/tenants/utils.ts b/src/store/reducers/tenants/utils.ts
index e97e71f022..54d2b91b8d 100644
--- a/src/store/reducers/tenants/utils.ts
+++ b/src/store/reducers/tenants/utils.ts
@@ -3,6 +3,7 @@ import type {TTenant} from '../../../types/api/tenant';
import {formatBytes} from '../../../utils/bytesParsers';
import {formatCPUWithLabel} from '../../../utils/dataFormatters/dataFormatters';
import {isNumeric} from '../../../utils/utils';
+
import {METRIC_STATUS} from './contants';
const getControlPlaneValue = (tenant: TTenant) => {
diff --git a/src/store/reducers/tooltip.ts b/src/store/reducers/tooltip.ts
index 9b69666d96..76ab9f9fac 100644
--- a/src/store/reducers/tooltip.ts
+++ b/src/store/reducers/tooltip.ts
@@ -1,7 +1,7 @@
-import isEqual from 'lodash/isEqual';
import type {Reducer} from '@reduxjs/toolkit';
+import isEqual from 'lodash/isEqual';
-import {
+import type {
ITooltipAction,
ITooltipPositions,
ITooltipState,
diff --git a/src/store/reducers/topic.ts b/src/store/reducers/topic.ts
index 02ecd1e95b..ef9eacbd29 100644
--- a/src/store/reducers/topic.ts
+++ b/src/store/reducers/topic.ts
@@ -9,10 +9,9 @@ import type {
ITopicRootStateSlice,
ITopicState,
} from '../../types/store/topic';
-
-import {createRequestActionTypes, createApiRequest} from '../utils';
-import {parseLag, parseTimestampToIdleTime} from '../../utils/timeParsers';
import {convertBytesObjectToSpeed} from '../../utils/bytesParsers';
+import {parseLag, parseTimestampToIdleTime} from '../../utils/timeParsers';
+import {createApiRequest, createRequestActionTypes} from '../utils';
export const FETCH_TOPIC = createRequestActionTypes('topic', 'FETCH_TOPIC');
diff --git a/src/store/reducers/vdisk/types.ts b/src/store/reducers/vdisk/types.ts
index 23da407fda..729fb5a610 100644
--- a/src/store/reducers/vdisk/types.ts
+++ b/src/store/reducers/vdisk/types.ts
@@ -2,6 +2,7 @@ import type {IResponseError} from '../../../types/api/error';
import type {PreparedVDisk} from '../../../utils/disks/types';
import type {ApiRequestAction} from '../../utils';
import type {PreparedStorageGroup} from '../storage/types';
+
import type {FETCH_VDISK, setVDiskDataWasNotLoaded} from './vdisk';
export type VDiskGroup = Partial;
diff --git a/src/store/reducers/vdisk/utils.ts b/src/store/reducers/vdisk/utils.ts
index ae305c7487..d930a0522d 100644
--- a/src/store/reducers/vdisk/utils.ts
+++ b/src/store/reducers/vdisk/utils.ts
@@ -5,6 +5,7 @@ import type {TEvVDiskStateResponse} from '../../../types/api/vdisk';
import {preparePDiskData, prepareVDiskData} from '../../../utils/disks/prepareDisks';
import {prepareNodeSystemState} from '../../../utils/nodes';
import {prepareStorageGroupData} from '../storage/utils';
+
import type {VDiskData} from './types';
export function prepareVDiskDataResponse([vDiskResponse, pDiskResponse, nodeResponse]: [
diff --git a/src/store/reducers/vdisk/vdisk.ts b/src/store/reducers/vdisk/vdisk.ts
index ac6e30caa6..4ca9bd0caa 100644
--- a/src/store/reducers/vdisk/vdisk.ts
+++ b/src/store/reducers/vdisk/vdisk.ts
@@ -2,7 +2,8 @@ import type {Reducer} from '@reduxjs/toolkit';
import {EVersion} from '../../../types/api/storage';
import {valueIsDefined} from '../../../utils';
-import {createRequestActionTypes, createApiRequest} from '../../utils';
+import {createApiRequest, createRequestActionTypes} from '../../utils';
+
import type {VDiskAction, VDiskGroup, VDiskState} from './types';
import {prepareVDiskDataResponse, prepareVDiskGroupResponse} from './utils';
diff --git a/src/store/state-url-mapping.ts b/src/store/state-url-mapping.ts
index 7178584b51..eab3c5dbf4 100644
--- a/src/store/state-url-mapping.ts
+++ b/src/store/state-url-mapping.ts
@@ -1,18 +1,18 @@
-import {LocationWithQuery, ParamSetup, createReduxLocationActions} from 'redux-location-state';
-import qs from 'qs';
+import type {Action, Reducer, UnknownAction} from '@reduxjs/toolkit';
+import type {History, Location} from 'history';
import each from 'lodash/each';
import keys from 'lodash/keys';
import merge from 'lodash/merge';
-import {stateToParams} from 'redux-location-state/lib/stateToParams';
-import {parseQuery} from 'redux-location-state/lib/parseQuery';
-import {LOCATION_PUSH, LOCATION_POP} from 'redux-location-state/lib/constants';
+import qs from 'qs';
+import type {LocationWithQuery, ParamSetup} from 'redux-location-state';
+import {createReduxLocationActions} from 'redux-location-state';
+import {LOCATION_POP, LOCATION_PUSH} from 'redux-location-state/lib/constants';
import {getMatchingDeclaredPath} from 'redux-location-state/lib/helpers';
+import {parseQuery} from 'redux-location-state/lib/parseQuery';
+import {stateToParams} from 'redux-location-state/lib/stateToParams';
-import {initialState as initialSettingsState} from './reducers/settings/settings';
import {initialState as initialHeatmapState} from './reducers/heatmap';
-
-import type {History, Location} from 'history';
-import type {Action, Reducer, UnknownAction} from '@reduxjs/toolkit';
+import {initialState as initialSettingsState} from './reducers/settings/settings';
const paramSetup: ParamSetup = {
global: {
diff --git a/src/store/utils.ts b/src/store/utils.ts
index 13246502d7..999de0ec82 100644
--- a/src/store/utils.ts
+++ b/src/store/utils.ts
@@ -1,9 +1,10 @@
import type {Dispatch} from '@reduxjs/toolkit';
-import {AxiosResponse} from 'axios';
+import type {AxiosResponse} from 'axios';
import createToast from '../utils/createToast';
import {SET_UNAUTHENTICATED} from './reducers/authentication/authentication';
+
import type {GetState} from '.';
export const nop = (result: any) => result;
diff --git a/src/styles/mixins.scss b/src/styles/mixins.scss
index 3bfe129860..8d12d5c8d2 100644
--- a/src/styles/mixins.scss
+++ b/src/styles/mixins.scss
@@ -19,22 +19,27 @@
font-size: var(--g-text-body-1-font-size);
line-height: var(--g-text-body-1-line-height);
}
+
@mixin body-2-typography() {
font-size: var(--g-text-body-2-font-size);
line-height: var(--g-text-body-2-line-height);
}
+
@mixin body-3-typography() {
font-size: var(--g-text-body-3-font-size);
line-height: var(--g-text-body-3-line-height);
}
+
@mixin lead-typography() {
font-size: var(--g-text-subheader-3-font-size);
line-height: var(--g-text-subheader-3-line-height);
}
+
@mixin header-1-typography() {
font-size: var(--g-text-header-1-font-size);
line-height: var(--g-text-header-1-line-height);
}
+
@mixin header-2-typography() {
font-size: var(--g-text-header-2-font-size);
line-height: var(--g-text-header-2-line-height);
@@ -152,6 +157,7 @@
background-color: var(--ydb-data-table-color-hover) !important;
}
+ /* stylelint-disable-next-line order/order */
@for $i from 0 through $nth {
& .data-table__td:nth-child(#{$i}),
& .data-table__head-row:first-child .data-table__th:nth-child(#{$i}) {
diff --git a/src/types/additionalProps.ts b/src/types/additionalProps.ts
index 724b28f76e..3ef358b5e9 100644
--- a/src/types/additionalProps.ts
+++ b/src/types/additionalProps.ts
@@ -1,8 +1,7 @@
-import type {ReactNode} from 'react';
-
import type {InfoViewerItem} from '../components/InfoViewer';
-import type {ETenantType} from './api/tenant';
+
import type {TSystemStateInfo} from './api/nodes';
+import type {ETenantType} from './api/tenant';
import type {VersionToColorMap} from './versions';
export interface AdditionalVersionsProps {
@@ -21,7 +20,7 @@ export interface AdditionalClusterProps {
export interface AdditionalTenantsProps {
prepareTenantBackend?: (backend: string | undefined) => string | undefined;
- getMonitoringLink?: (name?: string, type?: ETenantType) => ReactNode;
+ getMonitoringLink?: (name?: string, type?: ETenantType) => React.ReactNode;
}
export type NodeAddress = Pick;
diff --git a/src/types/api/compute.ts b/src/types/api/compute.ts
index 93481b2a3a..0cf2a54bf6 100644
--- a/src/types/api/compute.ts
+++ b/src/types/api/compute.ts
@@ -1,6 +1,6 @@
-import {EFlag} from './enums';
-import {TEndpoint, TLegacyNodeLocation, TPoolStats} from './nodes';
-import {TMetrics} from './tenant';
+import type {EFlag} from './enums';
+import type {TEndpoint, TLegacyNodeLocation, TPoolStats} from './nodes';
+import type {TMetrics} from './tenant';
/**
* endpoint: viewer/json/compute
diff --git a/src/types/api/consumer.ts b/src/types/api/consumer.ts
index 97cead593c..c15086cfb7 100644
--- a/src/types/api/consumer.ts
+++ b/src/types/api/consumer.ts
@@ -1,6 +1,6 @@
/* eslint-disable camelcase */
-import {IProtobufTimeObject} from './common';
+import type {IProtobufTimeObject} from './common';
/**
* endpoint: /json/describe_consumer
diff --git a/src/types/api/nodes.ts b/src/types/api/nodes.ts
index 7f9517303c..acda23fcf6 100644
--- a/src/types/api/nodes.ts
+++ b/src/types/api/nodes.ts
@@ -1,7 +1,7 @@
-import {EFlag} from './enums';
-import {TPDiskStateInfo} from './pdisk';
-import {TTabletStateInfo} from './tablet';
-import {TVDiskStateInfo} from './vdisk';
+import type {EFlag} from './enums';
+import type {TPDiskStateInfo} from './pdisk';
+import type {TTabletStateInfo} from './tablet';
+import type {TVDiskStateInfo} from './vdisk';
/**
* endpoint: /viewer/json/nodes
diff --git a/src/types/api/pdisk.ts b/src/types/api/pdisk.ts
index fef14a9767..3eb77bc79a 100644
--- a/src/types/api/pdisk.ts
+++ b/src/types/api/pdisk.ts
@@ -1,4 +1,4 @@
-import {EFlag} from './enums';
+import type {EFlag} from './enums';
/**
* endpoint: /viewer/json/pdiskinfo
diff --git a/src/types/api/query.ts b/src/types/api/query.ts
index 5c15c13b38..ad07918aa0 100644
--- a/src/types/api/query.ts
+++ b/src/types/api/query.ts
@@ -252,8 +252,8 @@ interface DefaultSchemaResult {
type ResultFields = Schema extends 'modern'
? ModernSchemaResult
: Schema extends 'multi'
- ? MultiSchemaResult
- : DefaultSchemaResult;
+ ? MultiSchemaResult
+ : DefaultSchemaResult;
/**
* meta.type = 'query'
@@ -291,8 +291,8 @@ export type QueryAPIResponse<
> = Action extends ExplainActions
? ExplainResponse
: Action extends ExecuteActions
- ? ExecuteResponse
- : unknown;
+ ? ExecuteResponse
+ : unknown;
// ==== types to use in query result preparation ====
export type AnyExplainResponse = ExplainQueryResponse | ExplainScriptResponse;
diff --git a/src/types/api/schema/table.ts b/src/types/api/schema/table.ts
index 94f5ac7946..44b30ca663 100644
--- a/src/types/api/schema/table.ts
+++ b/src/types/api/schema/table.ts
@@ -1,6 +1,6 @@
import type {TCdcStreamDescription} from './cdcStream';
-import type {TIndexDescription} from './tableIndex';
import type {EColumnCodec, EUnit, TColumnDescription, TPathID, TStorageSettings} from './shared';
+import type {TIndexDescription} from './tableIndex';
export interface TTableDescription {
Name?: string;
diff --git a/src/types/api/storage.ts b/src/types/api/storage.ts
index 0b67891983..8c30788cbe 100644
--- a/src/types/api/storage.ts
+++ b/src/types/api/storage.ts
@@ -1,5 +1,5 @@
-import {EFlag} from './enums';
-import {TVDiskStateInfo} from './vdisk';
+import type {EFlag} from './enums';
+import type {TVDiskStateInfo} from './vdisk';
/**
* endpoint: /viewer/json/storage
diff --git a/src/types/api/systemState.ts b/src/types/api/systemState.ts
index b183c67e49..c15b172944 100644
--- a/src/types/api/systemState.ts
+++ b/src/types/api/systemState.ts
@@ -1,4 +1,4 @@
-import {TSystemStateInfo} from './nodes';
+import type {TSystemStateInfo} from './nodes';
/**
* endpoint: /viewer/json/sysinfo
diff --git a/src/types/api/tablet.ts b/src/types/api/tablet.ts
index aef4416385..76dcf5498e 100644
--- a/src/types/api/tablet.ts
+++ b/src/types/api/tablet.ts
@@ -1,4 +1,4 @@
-import {EFlag} from './enums';
+import type {EFlag} from './enums';
/**
* endpoint: /viewer/json/tabletinfo
diff --git a/src/types/api/tenant.ts b/src/types/api/tenant.ts
index d018d26960..5b00412827 100644
--- a/src/types/api/tenant.ts
+++ b/src/types/api/tenant.ts
@@ -1,6 +1,6 @@
-import {EFlag} from './enums';
-import {TPoolStats, TSystemStateInfo} from './nodes';
-import {TTabletStateInfo} from './tablet';
+import type {EFlag} from './enums';
+import type {TPoolStats, TSystemStateInfo} from './nodes';
+import type {TTabletStateInfo} from './tablet';
/**
* endpoint: /viewer/json/tenants
diff --git a/src/types/api/topic.ts b/src/types/api/topic.ts
index 5a9e0caf11..ce9158fdd2 100644
--- a/src/types/api/topic.ts
+++ b/src/types/api/topic.ts
@@ -1,7 +1,13 @@
/* eslint-disable camelcase */
-import {IProtobufTimeObject} from './common';
-import {Consumer, Entry, MultipleWindowsStat, PartitionStats, SupportedCodecs} from './consumer';
+import type {IProtobufTimeObject} from './common';
+import type {
+ Consumer,
+ Entry,
+ MultipleWindowsStat,
+ PartitionStats,
+ SupportedCodecs,
+} from './consumer';
/**
* endpoint: /json/describe_topic
diff --git a/src/types/api/vdisk.ts b/src/types/api/vdisk.ts
index 516ea22801..41e1191f3e 100644
--- a/src/types/api/vdisk.ts
+++ b/src/types/api/vdisk.ts
@@ -1,5 +1,5 @@
-import {EFlag} from './enums';
-import {TPDiskStateInfo} from './pdisk';
+import type {EFlag} from './enums';
+import type {TPDiskStateInfo} from './pdisk';
/**
* endpoint: /viewer/json/vdiskinfo
diff --git a/src/types/assets.d.ts b/src/types/assets.d.ts
index 16fb1cff5a..dc5de479a1 100644
--- a/src/types/assets.d.ts
+++ b/src/types/assets.d.ts
@@ -1,5 +1,6 @@
declare module '*.svg' {
- const content: SVGIconData;
+ // eslint-disable-next-line @typescript-eslint/consistent-type-imports
+ const content: import('@gravity-ui/uikit').IconData;
export default content;
}
@@ -7,5 +8,3 @@ declare module '*.png';
declare module '*.jpg';
declare module '*.jpeg';
declare module '*.ico';
-
-declare type SVGIconData = import('@gravity-ui/uikit/build/esm/components/Icon/types').SVGIconData;
diff --git a/src/types/bem-cn-lite.d.ts b/src/types/bem-cn-lite.d.ts
deleted file mode 100644
index 477e9bf3ca..0000000000
--- a/src/types/bem-cn-lite.d.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-// copy from bem-cn-lite with export Modifications
-declare module 'bem-cn-lite' {
- export interface Modifications {
- [name: string]: string | boolean | undefined;
- }
-
- declare function bemClassNameLite(blockName: string): {
- (
- elementName: string,
- modifiers: Modifications | null,
- mixin?: string | string[] | undefined,
- ): string;
- (elementName: string, mixin?: string | string[] | undefined): string;
- (elementName: string, modifiers: Modifications): string;
- (mods: Modifications | null, mixin?: string | string[] | undefined): string;
- (elementName: string): string;
- (mods: Modifications | null): string;
- (): string;
- builder(): import('bem-cn').Block;
- };
- declare namespace bemClassNameLite {
- let setup: (config: import('bem-cn').BemSettings) => void;
- let reset: () => void;
- }
- export default bemClassNameLite;
-}
diff --git a/src/types/redux-location-state.d.ts b/src/types/redux-location-state.d.ts
index ed357e7009..29d6fb4151 100644
--- a/src/types/redux-location-state.d.ts
+++ b/src/types/redux-location-state.d.ts
@@ -1,7 +1,7 @@
/* eslint-disable @typescript-eslint/no-duplicate-imports */
declare module 'redux-location-state' {
import type {Middleware, Reducer, Store} from '@reduxjs/toolkit';
- import type {History, Location} from 'History';
+ import type {History, Location} from 'history';
export function listenForHistoryChange(store: Store, history: History): void;
@@ -42,7 +42,7 @@ declare module 'redux-location-state' {
}
declare module 'redux-location-state/lib/parseQuery' {
- import {ParamSetup} from 'redux-location-state';
+ import type {ParamSetup} from 'redux-location-state';
export function parseQuery(setupObject: ParamSetup, payload: any): Record;
}
@@ -52,13 +52,13 @@ declare module 'redux-location-state/lib/constants' {
}
declare module 'redux-location-state/lib/helpers' {
+ import type {Location} from 'history';
import type {ParamSetup} from 'redux-location-state';
- import type {Location} from 'History';
export function getMatchingDeclaredPath(setupObject: ParamSetup, location: Location): string;
}
declare module 'redux-location-state/lib/stateToParams' {
- import type {Location} from 'History';
+ import type {Location} from 'history';
import type {ParamSetup} from 'redux-location-state';
export function stateToParams(
setupObject: ParamSetup,
diff --git a/src/types/store/describe.ts b/src/types/store/describe.ts
index 0ce9734009..49c8a32d83 100644
--- a/src/types/store/describe.ts
+++ b/src/types/store/describe.ts
@@ -1,11 +1,11 @@
-import {
+import type {
FETCH_DESCRIBE,
setCurrentDescribePath,
setDataWasNotLoaded,
} from '../../store/reducers/describe';
-import {ApiRequestAction} from '../../store/utils';
-import {IResponseError} from '../api/error';
-import {TEvDescribeSchemeResult} from '../api/schema';
+import type {ApiRequestAction} from '../../store/utils';
+import type {IResponseError} from '../api/error';
+import type {TEvDescribeSchemeResult} from '../api/schema';
export type IDescribeData = Record;
diff --git a/src/types/store/executeQuery.ts b/src/types/store/executeQuery.ts
index a8c94f473e..ee1d71da09 100644
--- a/src/types/store/executeQuery.ts
+++ b/src/types/store/executeQuery.ts
@@ -1,12 +1,13 @@
-import {
+import type {
SEND_QUERY,
changeUserInput,
- saveQueryToHistory,
- goToPreviousQuery,
goToNextQuery,
+ goToPreviousQuery,
+ saveQueryToHistory,
setTenantPath,
} from '../../store/reducers/executeQuery';
import type {ApiRequestAction} from '../../store/utils';
+
import type {IQueryResult, QueryError, QueryErrorResponse} from './query';
export interface QueryInHistory {
diff --git a/src/types/store/explainQuery.ts b/src/types/store/explainQuery.ts
index 43e80e3960..2de5a94787 100644
--- a/src/types/store/explainQuery.ts
+++ b/src/types/store/explainQuery.ts
@@ -1,8 +1,9 @@
import type {ExplainPlanNodeData, GraphNode, Link} from '@gravity-ui/paranoid';
-import {GET_EXPLAIN_QUERY, GET_EXPLAIN_QUERY_AST} from '../../store/reducers/explainQuery';
+import type {GET_EXPLAIN_QUERY, GET_EXPLAIN_QUERY_AST} from '../../store/reducers/explainQuery';
import type {ApiRequestAction} from '../../store/utils';
import type {PlanTable, QueryPlan, ScriptPlan} from '../api/query';
+
import type {IQueryResult, QueryError, QueryErrorResponse} from './query';
export interface PreparedExplainResponse {
diff --git a/src/types/store/heatmap.ts b/src/types/store/heatmap.ts
index ff1686943a..289b11475c 100644
--- a/src/types/store/heatmap.ts
+++ b/src/types/store/heatmap.ts
@@ -1,9 +1,8 @@
+import type {FETCH_HEATMAP, setHeatmapOptions} from '../../store/reducers/heatmap';
import type {ApiRequestAction} from '../../store/utils';
-import {FETCH_HEATMAP, setHeatmapOptions} from '../../store/reducers/heatmap';
-
import type {IResponseError} from '../api/error';
-import type {TTabletStateInfo} from '../api/tablet';
import type {TTableStats} from '../api/schema';
+import type {TTabletStateInfo} from '../api/tablet';
import type {TMetrics} from '../api/tenant';
export interface IHeatmapTabletData extends TTabletStateInfo {
diff --git a/src/types/store/host.ts b/src/types/store/host.ts
index e860d6b8ac..36fa0da768 100644
--- a/src/types/store/host.ts
+++ b/src/types/store/host.ts
@@ -1,5 +1,4 @@
-import {FETCH_HOST} from '../../store/reducers/host';
-
+import type {FETCH_HOST} from '../../store/reducers/host';
import type {ApiRequestAction} from '../../store/utils';
import type {IResponseError} from '../api/error';
import type {TSystemStateInfo} from '../api/nodes';
diff --git a/src/types/store/nodesList.ts b/src/types/store/nodesList.ts
index a0fc659342..ae0ad15a2d 100644
--- a/src/types/store/nodesList.ts
+++ b/src/types/store/nodesList.ts
@@ -1,5 +1,4 @@
-import {FETCH_NODES_LIST} from '../../store/reducers/nodesList';
-
+import type {FETCH_NODES_LIST} from '../../store/reducers/nodesList';
import type {ApiRequestAction} from '../../store/utils';
import type {IResponseError} from '../api/error';
import type {TEvNodesInfo} from '../api/nodesList';
diff --git a/src/types/store/olapStats.ts b/src/types/store/olapStats.ts
index 01867cd1a5..acc9768f18 100644
--- a/src/types/store/olapStats.ts
+++ b/src/types/store/olapStats.ts
@@ -1,5 +1,6 @@
-import {FETCH_OLAP_STATS, resetLoadingState} from '../../store/reducers/olapStats';
+import type {FETCH_OLAP_STATS, resetLoadingState} from '../../store/reducers/olapStats';
import type {ApiRequestAction} from '../../store/utils';
+
import type {IQueryResult} from './query';
export interface OlapStatsState {
diff --git a/src/types/store/query.ts b/src/types/store/query.ts
index 069688d44f..aded93c7a8 100644
--- a/src/types/store/query.ts
+++ b/src/types/store/query.ts
@@ -1,12 +1,11 @@
-import {QUERY_ACTIONS, QUERY_MODES, QUERY_SYNTAX} from '../../utils/query';
-
+import type {QUERY_ACTIONS, QUERY_MODES, QUERY_SYNTAX} from '../../utils/query';
import type {IResponseError, NetworkError} from '../api/error';
import type {
- KeyValueRow,
ColumnType,
+ KeyValueRow,
ErrorResponse as QueryErrorResponseData,
- ScriptPlan,
QueryPlan,
+ ScriptPlan,
TKqpStatsQuery,
} from '../api/query';
import type {ValueOf} from '../common';
diff --git a/src/types/store/tablet.ts b/src/types/store/tablet.ts
index 4440a908fe..51854bcd59 100644
--- a/src/types/store/tablet.ts
+++ b/src/types/store/tablet.ts
@@ -1,9 +1,12 @@
+import type {
+ FETCH_TABLET,
+ FETCH_TABLET_DESCRIBE,
+ clearTabletData,
+} from '../../store/reducers/tablet';
import type {ApiRequestAction} from '../../store/utils';
import type {IResponseError} from '../api/error';
import type {ETabletState, TTabletStateInfo} from '../api/tablet';
-import {FETCH_TABLET, FETCH_TABLET_DESCRIBE, clearTabletData} from '../../store/reducers/tablet';
-
export interface ITabletPreparedHistoryItem {
nodeId: string;
generation: number | undefined;
diff --git a/src/types/store/tablets.ts b/src/types/store/tablets.ts
index 856f86c5c2..30fb0e1cfb 100644
--- a/src/types/store/tablets.ts
+++ b/src/types/store/tablets.ts
@@ -1,13 +1,12 @@
-import type {ApiRequestAction} from '../../store/utils';
-import {
- clearWasLoadingFlag,
+import type {
FETCH_TABLETS,
+ clearWasLoadingFlag,
setStateFilter,
setTypeFilter,
} from '../../store/reducers/tablets';
-
+import type {ApiRequestAction} from '../../store/utils';
import type {IResponseError} from '../api/error';
-import type {TEvTabletStateResponse, EType, ETabletState} from '../api/tablet';
+import type {ETabletState, EType, TEvTabletStateResponse} from '../api/tablet';
export interface ITabletsState {
loading: boolean;
diff --git a/src/types/store/tooltip.ts b/src/types/store/tooltip.ts
index 989ad7f47a..e3357dbc55 100644
--- a/src/types/store/tooltip.ts
+++ b/src/types/store/tooltip.ts
@@ -1,5 +1,5 @@
-import {hideTooltip, showTooltip} from '../../store/reducers/tooltip';
-import {tooltipTemplates} from '../../utils/tooltip';
+import type {hideTooltip, showTooltip} from '../../store/reducers/tooltip';
+import type {tooltipTemplates} from '../../utils/tooltip';
export type ITooltipTemplateType = keyof typeof tooltipTemplates;
diff --git a/src/types/store/topic.ts b/src/types/store/topic.ts
index 09dd1c8697..5706b432c9 100644
--- a/src/types/store/topic.ts
+++ b/src/types/store/topic.ts
@@ -1,4 +1,4 @@
-import {FETCH_TOPIC, cleanTopicData, setDataWasNotLoaded} from '../../store/reducers/topic';
+import type {FETCH_TOPIC, cleanTopicData, setDataWasNotLoaded} from '../../store/reducers/topic';
import type {ApiRequestAction} from '../../store/utils';
import type {ProcessSpeedStats} from '../../utils/bytesParsers';
import type {IResponseError} from '../api/error';
diff --git a/src/types/window.d.ts b/src/types/window.d.ts
index 43a044fe8d..a100bc79d4 100644
--- a/src/types/window.d.ts
+++ b/src/types/window.d.ts
@@ -1,3 +1,4 @@
+/* eslint-disable @typescript-eslint/consistent-type-imports */
enum RumErrorLevel {
DEBUG = 'debug',
ERROR = 'error',
@@ -35,8 +36,6 @@ interface Window {
custom_backend?: string;
meta_backend?: string;
- store?: import('@reduxjs/toolkit').Store;
-
userSettings?: import('../services/settings').SettingsObject;
systemSettings?: import('../services/settings').SettingsObject;
diff --git a/src/utils/__test__/parseBalancer.test.ts b/src/utils/__test__/parseBalancer.test.ts
index 6b38b418fb..07ee2af3b8 100644
--- a/src/utils/__test__/parseBalancer.test.ts
+++ b/src/utils/__test__/parseBalancer.test.ts
@@ -1,9 +1,9 @@
import {
- removeViewerPathname,
- removeProtocol,
- removePort,
getCleanBalancerValue,
parseBalancer,
+ removePort,
+ removeProtocol,
+ removeViewerPathname,
} from '../parseBalancer';
describe('parseBalancer', () => {
diff --git a/src/utils/__test__/prepareBackend.test.ts b/src/utils/__test__/prepareBackend.test.ts
index fa0c71b711..a42cf23672 100644
--- a/src/utils/__test__/prepareBackend.test.ts
+++ b/src/utils/__test__/prepareBackend.test.ts
@@ -1,4 +1,4 @@
-import {prepareHost, getBackendFromNodeHost, getBackendFromRawNodeData} from '../prepareBackend';
+import {getBackendFromNodeHost, getBackendFromRawNodeData, prepareHost} from '../prepareBackend';
describe('prepareHost', () => {
it('should add vm prefix to cloud din nodes', () => {
diff --git a/src/utils/additionalProps.ts b/src/utils/additionalProps.ts
index 7b7c24ee7c..7ff5c8d21a 100644
--- a/src/utils/additionalProps.ts
+++ b/src/utils/additionalProps.ts
@@ -1,5 +1,5 @@
-import type {AdditionalNodesProps, NodeAddress} from '../types/additionalProps';
import {backend} from '../store';
+import type {AdditionalNodesProps, NodeAddress} from '../types/additionalProps';
import {getBackendFromRawNodeData} from './prepareBackend';
diff --git a/src/utils/bytesParsers/convertBytesObjectToSpeed.ts b/src/utils/bytesParsers/convertBytesObjectToSpeed.ts
index 5ea58afbff..5c6871fbbe 100644
--- a/src/utils/bytesParsers/convertBytesObjectToSpeed.ts
+++ b/src/utils/bytesParsers/convertBytesObjectToSpeed.ts
@@ -1,5 +1,4 @@
import type {MultipleWindowsStat} from '../../types/api/consumer';
-
import {DAY_IN_SECONDS, HOUR_IN_SECONDS, MINUTE_IN_SECONDS} from '../constants';
export interface ProcessSpeedStats {
diff --git a/src/utils/bytesParsers/formatBytes.ts b/src/utils/bytesParsers/formatBytes.ts
index 607fa3b613..c5d4745986 100644
--- a/src/utils/bytesParsers/formatBytes.ts
+++ b/src/utils/bytesParsers/formatBytes.ts
@@ -1,5 +1,5 @@
-import {formatNumber, roundToPrecision} from '../dataFormatters/dataFormatters';
import {GIGABYTE, KILOBYTE, MEGABYTE, TERABYTE} from '../constants';
+import {formatNumber, roundToPrecision} from '../dataFormatters/dataFormatters';
import {isNumeric} from '../utils';
import i18n from './i18n';
diff --git a/src/utils/bytesParsers/i18n/index.ts b/src/utils/bytesParsers/i18n/index.ts
index 14263047f9..5fb2deaec1 100644
--- a/src/utils/bytesParsers/i18n/index.ts
+++ b/src/utils/bytesParsers/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../i18n';
+import {registerKeysets} from '../../i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-bytes-parsers';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/utils/clusterVersionColors.ts b/src/utils/clusterVersionColors.ts
index 19425e7e95..c45a1e246d 100644
--- a/src/utils/clusterVersionColors.ts
+++ b/src/utils/clusterVersionColors.ts
@@ -2,6 +2,7 @@ import uniqBy from 'lodash/uniqBy';
import type {MetaClusterVersion} from '../types/api/meta';
import type {VersionToColorMap} from '../types/versions';
+
import {COLORS, GREY_COLOR, getMinorVersion, hashCode} from './versions';
const UNDEFINED_COLOR_INDEX = '__no_color__';
diff --git a/src/utils/cn.ts b/src/utils/cn.ts
index 4510275f45..ba14f81e43 100644
--- a/src/utils/cn.ts
+++ b/src/utils/cn.ts
@@ -1,3 +1,6 @@
-import cn from 'bem-cn-lite';
+import {withNaming} from '@bem-react/classname';
-export {cn};
+export const cn = withNaming({
+ e: '__',
+ m: '_',
+});
diff --git a/src/utils/createToast.tsx b/src/utils/createToast.tsx
index d78269629d..d2a0e3c3af 100644
--- a/src/utils/createToast.tsx
+++ b/src/utils/createToast.tsx
@@ -1,6 +1,6 @@
-import {Toaster} from '@gravity-ui/uikit';
+import {toaster} from '@gravity-ui/uikit/toaster-singleton-react-18';
-export const toaster = new Toaster();
+export {toaster};
interface CreateToastProps {
name?: string;
@@ -13,7 +13,7 @@ function createToast({name, title, type, content}: CreateToastProps) {
return toaster.add({
name: name ?? 'Request succeeded',
title: title ?? 'Request succeeded',
- type: type ?? 'success',
+ theme: type === 'error' ? 'danger' : 'success',
content: content,
isClosable: true,
autoHiding: type === 'success' ? 5000 : false,
diff --git a/src/utils/dataFormatters/dataFormatters.ts b/src/utils/dataFormatters/dataFormatters.ts
index 542b991691..063506ce74 100644
--- a/src/utils/dataFormatters/dataFormatters.ts
+++ b/src/utils/dataFormatters/dataFormatters.ts
@@ -1,14 +1,14 @@
import {dateTimeParse} from '@gravity-ui/date-utils';
import type {TVDiskID, TVSlotId} from '../../types/api/vdisk';
-import {DAY_IN_SECONDS, GIGABYTE} from '../constants';
-import {configuredNumeral} from '../numeral';
-import {isNumeric} from '../utils';
import {
- type BytesSizes,
formatBytes as formatBytesCustom,
getSizeWithSignificantDigits,
} from '../bytesParsers/formatBytes';
+import type {BytesSizes} from '../bytesParsers/formatBytes';
+import {DAY_IN_SECONDS, GIGABYTE} from '../constants';
+import {configuredNumeral} from '../numeral';
+import {isNumeric} from '../utils';
import i18n from './i18n';
diff --git a/src/utils/dataFormatters/i18n/index.ts b/src/utils/dataFormatters/i18n/index.ts
index ae7d212e21..3a60fdb981 100644
--- a/src/utils/dataFormatters/i18n/index.ts
+++ b/src/utils/dataFormatters/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../i18n';
+import {registerKeysets} from '../../i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-format-cpu';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/utils/diagnostics.ts b/src/utils/diagnostics.ts
index 7c8a2d1e4d..e0b5f8f1bc 100644
--- a/src/utils/diagnostics.ts
+++ b/src/utils/diagnostics.ts
@@ -1,4 +1,4 @@
-import {ValueOf} from '../types/common';
+import type {ValueOf} from '../types/common';
const TOP_SHARDS_SORT_VALUES = {
CPUCores: 'CPUCores',
diff --git a/src/utils/disks/calculatePDiskSeverity.ts b/src/utils/disks/calculatePDiskSeverity.ts
index 8c6fe9635b..de4ddcd298 100644
--- a/src/utils/disks/calculatePDiskSeverity.ts
+++ b/src/utils/disks/calculatePDiskSeverity.ts
@@ -1,6 +1,7 @@
import {EFlag} from '../../types/api/enums';
import type {TPDiskState, TPDiskStateInfo} from '../../types/api/pdisk';
import {generateEvaluator} from '../generateEvaluator';
+
import {
DISK_COLOR_STATE_TO_NUMERIC_SEVERITY,
NOT_AVAILABLE_SEVERITY,
diff --git a/src/utils/disks/calculateVDiskSeverity.ts b/src/utils/disks/calculateVDiskSeverity.ts
index c44b818890..2e5715f3be 100644
--- a/src/utils/disks/calculateVDiskSeverity.ts
+++ b/src/utils/disks/calculateVDiskSeverity.ts
@@ -1,5 +1,6 @@
import type {EFlag} from '../../types/api/enums';
-import {EVDiskState, type TVDiskStateInfo} from '../../types/api/vdisk';
+import type {EVDiskState, TVDiskStateInfo} from '../../types/api/vdisk';
+
import {
DISK_COLOR_STATE_TO_NUMERIC_SEVERITY,
NOT_AVAILABLE_SEVERITY,
diff --git a/src/utils/disks/helpers.ts b/src/utils/disks/helpers.ts
index 5441a6b92b..8370b44ce9 100644
--- a/src/utils/disks/helpers.ts
+++ b/src/utils/disks/helpers.ts
@@ -1,4 +1,5 @@
import type {TVDiskStateInfo, TVSlotId} from '../../types/api/vdisk';
+
import {DISK_NUMERIC_SEVERITY_TO_STATE_COLOR, NOT_AVAILABLE_SEVERITY_COLOR} from './constants';
export function isFullVDiskData(disk: TVDiskStateInfo | TVSlotId): disk is TVDiskStateInfo {
diff --git a/src/utils/disks/prepareDisks.ts b/src/utils/disks/prepareDisks.ts
index e559247c04..ce0b30bfbe 100644
--- a/src/utils/disks/prepareDisks.ts
+++ b/src/utils/disks/prepareDisks.ts
@@ -1,6 +1,7 @@
import type {TPDiskStateInfo} from '../../types/api/pdisk';
import type {TVDiskStateInfo} from '../../types/api/vdisk';
import {isNumeric} from '../utils';
+
import {calculatePDiskSeverity} from './calculatePDiskSeverity';
import {calculateVDiskSeverity} from './calculateVDiskSeverity';
import {getPDiskType} from './getPDiskType';
diff --git a/src/utils/disks/types.ts b/src/utils/disks/types.ts
index fac29e60c9..eba691ae15 100644
--- a/src/utils/disks/types.ts
+++ b/src/utils/disks/types.ts
@@ -1,6 +1,7 @@
import type {TPDiskStateInfo} from '../../types/api/pdisk';
import type {TVDiskStateInfo, TVSlotId} from '../../types/api/vdisk';
import type {ValueOf} from '../../types/common';
+
import type {PDISK_TYPES} from './getPDiskType';
export interface PreparedPDisk extends TPDiskStateInfo {
diff --git a/src/utils/filters.ts b/src/utils/filters.ts
index d7b357ac15..9fd8e791c9 100644
--- a/src/utils/filters.ts
+++ b/src/utils/filters.ts
@@ -1,7 +1,6 @@
-import escapeRegExp from 'lodash/escapeRegExp';
-
import type {OrderType} from '@gravity-ui/react-data-table';
import {DESCENDING} from '@gravity-ui/react-data-table/build/esm/lib/constants';
+import escapeRegExp from 'lodash/escapeRegExp';
export const prepareSortValue = (
sortValue: string | undefined,
diff --git a/src/utils/hooks/useAutofetcher.ts b/src/utils/hooks/useAutofetcher.ts
index d9a2a4ab59..16272f75da 100644
--- a/src/utils/hooks/useAutofetcher.ts
+++ b/src/utils/hooks/useAutofetcher.ts
@@ -1,13 +1,13 @@
-import {DependencyList, useEffect, useRef} from 'react';
+import React from 'react';
import {AutoFetcher} from '../autofetcher';
export const useAutofetcher = (
fetchData: (isBackground: boolean) => void,
- deps: DependencyList,
+ deps: React.DependencyList,
enabled = true,
) => {
- const ref = useRef(null);
+ const ref = React.useRef(null);
if (ref.current === null) {
ref.current = new AutoFetcher();
@@ -16,11 +16,11 @@ export const useAutofetcher = (
const autofetcher = ref.current;
// initial fetch
- useEffect(() => {
+ React.useEffect(() => {
fetchData(false);
}, deps); // eslint-disable-line react-hooks/exhaustive-deps
- useEffect(() => {
+ React.useEffect(() => {
autofetcher.stop();
if (enabled) {
diff --git a/src/utils/hooks/useNodesRequestParams.ts b/src/utils/hooks/useNodesRequestParams.ts
index 86d554e277..4aa047554e 100644
--- a/src/utils/hooks/useNodesRequestParams.ts
+++ b/src/utils/hooks/useNodesRequestParams.ts
@@ -1,10 +1,11 @@
-import {useMemo} from 'react';
+import React from 'react';
import type {NodesGeneralRequestParams} from '../../store/reducers/nodes/types';
import type {ProblemFilterValue} from '../../store/reducers/settings/types';
-
import {USE_BACKEND_PARAMS_FOR_TABLES_KEY} from '../constants';
-import {NodesUptimeFilterValues, getProblemParamValue, getUptimeParamValue} from '../nodes';
+import type {NodesUptimeFilterValues} from '../nodes';
+import {getProblemParamValue, getUptimeParamValue} from '../nodes';
+
import {useSetting} from './useSetting';
interface NodesRawRequestParams
@@ -24,7 +25,7 @@ export const useNodesRequestParams = ({
// If backend params are enabled, update params value to use them in fetch request
// Otherwise no params will be updated, no hooks that depend on requestParams will be triggered
- return useMemo(() => {
+ return React.useMemo(() => {
if (useBackendParamsForTables) {
const problemsOnly = getProblemParamValue(problemFilter);
const uptime = getUptimeParamValue(nodesUptimeFilter);
diff --git a/src/utils/hooks/useQueryModes.ts b/src/utils/hooks/useQueryModes.ts
index 5e5bc5c6d9..165c1a8d26 100644
--- a/src/utils/hooks/useQueryModes.ts
+++ b/src/utils/hooks/useQueryModes.ts
@@ -1,5 +1,6 @@
import type {QueryMode} from '../../types/store/query';
import {QUERY_INITIAL_MODE_KEY} from '../constants';
+
import {useSetting} from './useSetting';
export const useQueryModes = () => {
diff --git a/src/utils/hooks/useSetting.ts b/src/utils/hooks/useSetting.ts
index f681867db2..f9e06e7da6 100644
--- a/src/utils/hooks/useSetting.ts
+++ b/src/utils/hooks/useSetting.ts
@@ -1,9 +1,9 @@
-import {useCallback} from 'react';
+import React from 'react';
import {getSettingValue, setSettingValue} from '../../store/reducers/settings/settings';
-import {useTypedSelector} from './useTypedSelector';
import {useTypedDispatch} from './useTypedDispatch';
+import {useTypedSelector} from './useTypedSelector';
export const useSetting = (key: string, defaultValue?: T): [T, (value: T) => void] => {
const dispatch = useTypedDispatch();
@@ -13,7 +13,7 @@ export const useSetting = (key: string, defaultValue?: T): [T, (value: T) =>
return (getSettingValue(state, key) ?? defaultValue) as T;
});
- const setValue = useCallback(
+ const setValue = React.useCallback(
(value: T) => {
dispatch(setSettingValue(key, value));
},
diff --git a/src/utils/hooks/useStorageRequestParams.ts b/src/utils/hooks/useStorageRequestParams.ts
index a81ab6d5d6..ada435d434 100644
--- a/src/utils/hooks/useStorageRequestParams.ts
+++ b/src/utils/hooks/useStorageRequestParams.ts
@@ -1,8 +1,9 @@
-import {useMemo} from 'react';
+import React from 'react';
import type {StorageSortAndFilterParams} from '../../store/reducers/storage/types';
import {EVersion} from '../../types/api/storage';
import {USE_BACKEND_PARAMS_FOR_TABLES_KEY} from '../constants';
+
import {useSetting} from './useSetting';
export const useStorageRequestParams = ({
@@ -14,7 +15,7 @@ export const useStorageRequestParams = ({
// If backend params are enabled, update params value to use them in fetch request
// Otherwise no params will be updated, no hooks that depend on requestParams will be triggered
- return useMemo(() => {
+ return React.useMemo(() => {
if (useBackendParamsForTables) {
return {
version: EVersion.v2,
diff --git a/src/utils/hooks/useTableResize.ts b/src/utils/hooks/useTableResize.ts
index 481a64b89d..8180a6896c 100644
--- a/src/utils/hooks/useTableResize.ts
+++ b/src/utils/hooks/useTableResize.ts
@@ -1,6 +1,9 @@
-import {useCallback, useState} from 'react';
+import React from 'react';
+
import type {Column as DataTableColumn} from '@gravity-ui/react-data-table';
-import {DEFAULT_RESIZEABLE, type Column as VirtualTableColumn} from '../../components/VirtualTable';
+
+import {DEFAULT_RESIZEABLE} from '../../components/VirtualTable';
+import type {Column as VirtualTableColumn} from '../../components/VirtualTable';
import {settingsManager} from '../../services/settings';
export type Column = VirtualTableColumn & DataTableColumn;
@@ -26,16 +29,18 @@ export const updateColumnsWidth = (
export const useTableResize = (
localStorageKey: string,
): [TableColumnsWidthSetup, HandleTableColumnsResize] => {
- const [tableColumnsWidthSetup, setTableColumnsWidth] = useState(() => {
- const setupFromLS = settingsManager.readUserSettingsValue(
- localStorageKey,
- {},
- ) as TableColumnsWidthSetup;
-
- return setupFromLS;
- });
+ const [tableColumnsWidthSetup, setTableColumnsWidth] = React.useState(
+ () => {
+ const setupFromLS = settingsManager.readUserSettingsValue(
+ localStorageKey,
+ {},
+ ) as TableColumnsWidthSetup;
+
+ return setupFromLS;
+ },
+ );
- const handleSetupChange: HandleTableColumnsResize = useCallback(
+ const handleSetupChange: HandleTableColumnsResize = React.useCallback(
(newSetup) => {
setTableColumnsWidth((previousSetup) => {
// ResizeObserver callback may be triggered only for currently resized column
diff --git a/src/utils/hooks/useTableSort.ts b/src/utils/hooks/useTableSort.ts
index 11398b604d..e5daeb08c5 100644
--- a/src/utils/hooks/useTableSort.ts
+++ b/src/utils/hooks/useTableSort.ts
@@ -1,6 +1,6 @@
-import {useMemo} from 'react';
+import React from 'react';
-import {OrderType, SortOrder} from '@gravity-ui/react-data-table';
+import type {OrderType, SortOrder} from '@gravity-ui/react-data-table';
import {DESCENDING} from '@gravity-ui/react-data-table/build/esm/lib/constants';
interface SortParams {
@@ -14,7 +14,7 @@ export const useTableSort = (
{sortValue, sortOrder = DESCENDING}: SortParams,
onSort: (params: SortParams) => void,
): [SortOrder | undefined, HandleSort] => {
- const sort: SortOrder | undefined = useMemo(() => {
+ const sort: SortOrder | undefined = React.useMemo(() => {
if (!sortValue) {
return undefined;
}
diff --git a/src/utils/hooks/useTypedDispatch.ts b/src/utils/hooks/useTypedDispatch.ts
index 0784fe0fd0..6be5ec416b 100644
--- a/src/utils/hooks/useTypedDispatch.ts
+++ b/src/utils/hooks/useTypedDispatch.ts
@@ -1,4 +1,5 @@
import {useDispatch} from 'react-redux';
+
import type {AppDispatch} from '../../store';
export const useTypedDispatch: () => AppDispatch = useDispatch;
diff --git a/src/utils/hooks/useTypedSelector.ts b/src/utils/hooks/useTypedSelector.ts
index 1926b63e6a..a437d789fd 100644
--- a/src/utils/hooks/useTypedSelector.ts
+++ b/src/utils/hooks/useTypedSelector.ts
@@ -1,4 +1,5 @@
-import {TypedUseSelectorHook, useSelector} from 'react-redux';
+import type {TypedUseSelectorHook} from 'react-redux';
+import {useSelector} from 'react-redux';
import type {RootState} from '../../store';
diff --git a/src/utils/i18n/i18n.ts b/src/utils/i18n/i18n.ts
index c4161386c3..09ed7ec269 100644
--- a/src/utils/i18n/i18n.ts
+++ b/src/utils/i18n/i18n.ts
@@ -1,11 +1,9 @@
-import {I18N, KeysData} from '@gravity-ui/i18n';
+import type {KeysData} from '@gravity-ui/i18n';
+import {I18N} from '@gravity-ui/i18n';
import {configure as configureUiKit} from '@gravity-ui/uikit';
-import {configure as configureUiKitComponents} from '@gravity-ui/components';
-import {configure as configureUiKitNavigation} from '@gravity-ui/navigation';
-import {configure as configureYdbUiComponents} from 'ydb-ui-components';
-import {LANGUAGE_KEY} from '../constants';
import {settingsManager} from '../../services/settings';
+import {LANGUAGE_KEY} from '../constants';
enum Lang {
En = 'en',
@@ -22,10 +20,7 @@ const i18n = new I18N({
fallbackLang: Lang.En,
});
-configureYdbUiComponents({lang: currentLang});
configureUiKit({lang: currentLang});
-configureUiKitComponents({lang: currentLang});
-configureUiKitNavigation({lang: currentLang});
export function registerKeysets(id: string, data: Record) {
type Keys = Extract;
diff --git a/src/utils/lazyComponent.tsx b/src/utils/lazyComponent.tsx
index 7d077b09dc..837890f77f 100644
--- a/src/utils/lazyComponent.tsx
+++ b/src/utils/lazyComponent.tsx
@@ -1,8 +1,9 @@
-import * as React from 'react';
+import React from 'react';
import {Loader} from '@gravity-ui/uikit';
-import {ErrorBoundaryFallback} from '../components/ErrorBoundary/ErrorBoundary';
+
import {useComponent} from '../components/ComponentsProvider/ComponentsProvider';
+import {ErrorBoundaryFallback} from '../components/ErrorBoundary/ErrorBoundary';
export function lazyComponent(
moduleLoader: () => Promise,
diff --git a/src/utils/monaco/s-expression/registerLanguage.ts b/src/utils/monaco/s-expression/registerLanguage.ts
index 1ff5188496..b56e14e7ec 100644
--- a/src/utils/monaco/s-expression/registerLanguage.ts
+++ b/src/utils/monaco/s-expression/registerLanguage.ts
@@ -1,4 +1,5 @@
import * as monaco from 'monaco-editor';
+
import {LANGUAGE_S_EXPRESSION_ID} from './constants';
export function registerSExpressionLanguage() {
diff --git a/src/utils/monaco/yqlSuggestions/generateSuggestions.ts b/src/utils/monaco/yqlSuggestions/generateSuggestions.ts
index 4f5d402f81..d5b746d13c 100644
--- a/src/utils/monaco/yqlSuggestions/generateSuggestions.ts
+++ b/src/utils/monaco/yqlSuggestions/generateSuggestions.ts
@@ -1,9 +1,9 @@
-import type * as monaco from 'monaco-editor/esm/vs/editor/editor.api';
import type {
ColumnAliasSuggestion,
KeywordSuggestion,
YqlAutocompleteResult,
} from '@gravity-ui/websql-autocomplete';
+import type * as monaco from 'monaco-editor/esm/vs/editor/editor.api';
import {
AggregateFunctions,
@@ -16,7 +16,7 @@ import {
} from './constants';
const CompletionItemKind: {
- [K in keyof typeof monaco.languages.CompletionItemKind]: typeof monaco.languages.CompletionItemKind[K];
+ [K in keyof typeof monaco.languages.CompletionItemKind]: (typeof monaco.languages.CompletionItemKind)[K];
} = {
Method: 0,
Function: 1,
diff --git a/src/utils/monaco/yqlSuggestions/registerCompletionItemProvider.ts b/src/utils/monaco/yqlSuggestions/registerCompletionItemProvider.ts
index 0fc6f5cddd..24bb74b6e7 100644
--- a/src/utils/monaco/yqlSuggestions/registerCompletionItemProvider.ts
+++ b/src/utils/monaco/yqlSuggestions/registerCompletionItemProvider.ts
@@ -1,4 +1,5 @@
import * as monaco from 'monaco-editor';
+
import {createProvideSuggestionsFunction} from './yqlSuggestions';
let completionProvider: monaco.IDisposable | undefined;
diff --git a/src/utils/monaco/yqlSuggestions/yqlSuggestions.ts b/src/utils/monaco/yqlSuggestions/yqlSuggestions.ts
index 39ed09d000..f3cff89108 100644
--- a/src/utils/monaco/yqlSuggestions/yqlSuggestions.ts
+++ b/src/utils/monaco/yqlSuggestions/yqlSuggestions.ts
@@ -1,5 +1,5 @@
-import type Monaco from 'monaco-editor';
import type {CursorPosition} from '@gravity-ui/websql-autocomplete';
+import type Monaco from 'monaco-editor';
import {
generateAggregateFunctionsSuggestion,
@@ -63,14 +63,12 @@ async function getSuggestions(
functionsSuggestions = await generateSimpleFunctionsSuggestion(rangeToInsertSuggestion);
}
if (parseResult.suggestAggregateFunctions) {
- aggregateFunctionsSuggestions = await generateAggregateFunctionsSuggestion(
- rangeToInsertSuggestion,
- );
+ aggregateFunctionsSuggestions =
+ await generateAggregateFunctionsSuggestion(rangeToInsertSuggestion);
}
if (parseResult.suggestWindowFunctions) {
- windowFunctionsSuggestions = await generateWindowFunctionsSuggestion(
- rangeToInsertSuggestion,
- );
+ windowFunctionsSuggestions =
+ await generateWindowFunctionsSuggestion(rangeToInsertSuggestion);
}
if (parseResult.suggestTableFunctions) {
tableFunctionsSuggestions = await generateTableFunctionsSuggestion(rangeToInsertSuggestion);
diff --git a/src/utils/nodes.ts b/src/utils/nodes.ts
index ff493cabe1..a7aa66c9da 100644
--- a/src/utils/nodes.ts
+++ b/src/utils/nodes.ts
@@ -1,14 +1,14 @@
-import type {TSystemStateInfo} from '../types/api/nodes';
-import type {TNodeInfo} from '../types/api/nodesList';
import type {NodesPreparedEntity} from '../store/reducers/nodes/types';
-import type {NodesMap} from '../types/store/nodesList';
-import type {ValueOf} from '../types/common';
-import type {ProblemFilterValue} from '../store/reducers/settings/types';
import {ProblemFilterValues} from '../store/reducers/settings/settings';
+import type {ProblemFilterValue} from '../store/reducers/settings/types';
import {EFlag} from '../types/api/enums';
+import type {TSystemStateInfo} from '../types/api/nodes';
+import type {TNodeInfo} from '../types/api/nodesList';
+import type {ValueOf} from '../types/common';
+import type {NodesMap} from '../types/store/nodesList';
-import {calcUptime} from './dataFormatters/dataFormatters';
import {HOUR_IN_SECONDS} from './constants';
+import {calcUptime} from './dataFormatters/dataFormatters';
export enum NodesUptimeFilterValues {
'All' = 'All',
diff --git a/src/utils/prepareQueryExplain.ts b/src/utils/prepareQueryExplain.ts
index 58b2435da5..3a61714313 100644
--- a/src/utils/prepareQueryExplain.ts
+++ b/src/utils/prepareQueryExplain.ts
@@ -1,10 +1,10 @@
import type {
- Link,
+ ExplainPlanNodeData,
GraphNode,
+ Link,
TopologyNodeDataStats,
- TopologyNodeDataStatsSection,
- ExplainPlanNodeData,
TopologyNodeDataStatsItem,
+ TopologyNodeDataStatsSection,
} from '@gravity-ui/paranoid';
import type {PlanNode} from '../types/api/query';
diff --git a/src/utils/query.test.ts b/src/utils/query.test.ts
index 3ca8d3d6b4..f55daca61f 100644
--- a/src/utils/query.test.ts
+++ b/src/utils/query.test.ts
@@ -1,4 +1,5 @@
import type {PlanMeta, PlanNode, PlanTable, TKqpStatsQuery} from '../types/api/query';
+
import {
parseQueryAPIExecuteResponse,
parseQueryAPIExplainResponse,
diff --git a/src/utils/tests/providers.tsx b/src/utils/tests/providers.tsx
index 81592dcb01..c7e3274a35 100644
--- a/src/utils/tests/providers.tsx
+++ b/src/utils/tests/providers.tsx
@@ -1,7 +1,8 @@
-import React, {PropsWithChildren} from 'react';
-import {Provider} from 'react-redux';
+import React from 'react';
+
import {render} from '@testing-library/react';
import type {RenderOptions} from '@testing-library/react';
+import {Provider} from 'react-redux';
import {configureStore} from '../../store';
@@ -18,7 +19,7 @@ export const renderWithStore = (
) => {
const {store} = storeConfiguration;
- function Wrapper({children}: PropsWithChildren<{}>) {
+ function Wrapper({children}: {children?: React.ReactNode}) {
return {children};
}
diff --git a/src/utils/timeParsers/i18n/index.ts b/src/utils/timeParsers/i18n/index.ts
index 61f9288b3b..c12c526a69 100644
--- a/src/utils/timeParsers/i18n/index.ts
+++ b/src/utils/timeParsers/i18n/index.ts
@@ -1,11 +1,8 @@
-import {i18n, Lang} from '../../i18n';
+import {registerKeysets} from '../../i18n';
import en from './en.json';
import ru from './ru.json';
const COMPONENT = 'ydb-time-parsers';
-i18n.registerKeyset(Lang.En, COMPONENT, en);
-i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
-
-export default i18n.keyset(COMPONENT);
+export default registerKeysets(COMPONENT, {ru, en});
diff --git a/src/utils/timeParsers/parsers.ts b/src/utils/timeParsers/parsers.ts
index 128269f41d..0ce73b868e 100644
--- a/src/utils/timeParsers/parsers.ts
+++ b/src/utils/timeParsers/parsers.ts
@@ -1,6 +1,6 @@
import type {IProtobufTimeObject} from '../../types/api/common';
-
import {isNumeric} from '../utils';
+
import {parseProtobufDurationToMs, parseProtobufTimestampToMs} from './protobufParsers';
export const parseLag = (value: string | IProtobufTimeObject | undefined) =>
diff --git a/src/utils/timeParsers/protobufParsers.ts b/src/utils/timeParsers/protobufParsers.ts
index 09d66e1a96..29203a4126 100644
--- a/src/utils/timeParsers/protobufParsers.ts
+++ b/src/utils/timeParsers/protobufParsers.ts
@@ -1,5 +1,4 @@
import type {IProtobufTimeObject} from '../../types/api/common';
-
import {MS_IN_NANOSECONDS} from '../constants';
/**
diff --git a/src/utils/tooltip.js b/src/utils/tooltip.js
index 11a542c511..c022876b45 100644
--- a/src/utils/tooltip.js
+++ b/src/utils/tooltip.js
@@ -1,12 +1,13 @@
-import cn from 'bem-cn-lite';
import JSONTree from 'react-json-inspector';
import {
NodeEndpointsTooltipContent,
- TabletTooltipContent,
PoolTooltipContent,
+ TabletTooltipContent,
} from '../components/TooltipsContent';
+import {cn} from './cn';
+
const nodeB = cn('node-tootltip');
const NodeTooltip = (props) => {
diff --git a/src/utils/utils.js b/src/utils/utils.js
index 7bde297fa7..7d80784e15 100644
--- a/src/utils/utils.js
+++ b/src/utils/utils.js
@@ -26,7 +26,7 @@ export function bytesToSize(bytes) {
return '';
}
if (bytes < base) return String(bytes);
- let i = parseInt(Math.floor(Math.log(bytes) / Math.log(base)));
+ let i = parseInt(Math.floor(Math.log(bytes) / Math.log(base)), 10);
if (i >= sizes.length) {
i = sizes.length - 1;
}
diff --git a/src/utils/versions/parseNodesToVersionsValues.ts b/src/utils/versions/parseNodesToVersionsValues.ts
index 726e8e993a..e9f750c708 100644
--- a/src/utils/versions/parseNodesToVersionsValues.ts
+++ b/src/utils/versions/parseNodesToVersionsValues.ts
@@ -1,5 +1,6 @@
import type {TSystemStateInfo} from '../../types/api/nodes';
import type {VersionToColorMap, VersionValue} from '../../types/versions';
+
import {getMinorVersion} from './parseVersion';
export const parseNodesToVersionsValues = (
diff --git a/tests/models/BaseModel.ts b/tests/models/BaseModel.ts
index 9da58cdbf0..afb8f514b2 100644
--- a/tests/models/BaseModel.ts
+++ b/tests/models/BaseModel.ts
@@ -1,4 +1,4 @@
-import {Page, Locator} from '@playwright/test';
+import type {Locator, Page} from '@playwright/test';
export class BaseModel {
readonly page: Page;
diff --git a/tests/models/PageModel.ts b/tests/models/PageModel.ts
index d0f3c8ea68..7a28345f5b 100644
--- a/tests/models/PageModel.ts
+++ b/tests/models/PageModel.ts
@@ -1,5 +1,5 @@
+import type {Page} from '@playwright/test';
import qs from 'qs';
-import {Page} from '@playwright/test';
import {BaseModel} from './BaseModel';
diff --git a/tests/suites/internalViewer/internalViewer.test.ts b/tests/suites/internalViewer/internalViewer.test.ts
index b8ed564f11..cd44ac1c5c 100644
--- a/tests/suites/internalViewer/internalViewer.test.ts
+++ b/tests/suites/internalViewer/internalViewer.test.ts
@@ -1,4 +1,4 @@
-import {test, expect} from '@playwright/test';
+import {expect, test} from '@playwright/test';
test.describe('Test InternalViewer', async () => {
test('Test internalViewer header link', async ({page}) => {
diff --git a/tests/suites/nodes/NodesPage.ts b/tests/suites/nodes/NodesPage.ts
index 9d5f406950..f163e37574 100644
--- a/tests/suites/nodes/NodesPage.ts
+++ b/tests/suites/nodes/NodesPage.ts
@@ -1,8 +1,8 @@
-import {Locator, Page} from '@playwright/test';
+import type {Locator, Page} from '@playwright/test';
+import {PageModel} from '../../models/PageModel';
import {nodesPage} from '../../utils/constants';
import {selectContentTable} from '../../utils/selectContentTable';
-import {PageModel} from '../../models/PageModel';
export class NodesPage extends PageModel {
readonly table: Locator;
diff --git a/tests/suites/nodes/nodes.test.ts b/tests/suites/nodes/nodes.test.ts
index 2497fe6f50..eb629085bc 100644
--- a/tests/suites/nodes/nodes.test.ts
+++ b/tests/suites/nodes/nodes.test.ts
@@ -1,4 +1,4 @@
-import {test, expect} from '@playwright/test';
+import {expect, test} from '@playwright/test';
import {NodesPage} from './NodesPage';
diff --git a/tests/suites/storage/StoragePage.ts b/tests/suites/storage/StoragePage.ts
index c0ee652550..e18e9a2bc9 100644
--- a/tests/suites/storage/StoragePage.ts
+++ b/tests/suites/storage/StoragePage.ts
@@ -1,8 +1,8 @@
-import {Locator, Page} from '@playwright/test';
+import type {Locator, Page} from '@playwright/test';
+import {PageModel} from '../../models/PageModel';
import {storagePage} from '../../utils/constants';
import {selectContentTable} from '../../utils/selectContentTable';
-import {PageModel} from '../../models/PageModel';
type EntityType = 'Groups' | 'Nodes';
type VisibleEntityType = 'Degraded' | 'Out of space' | 'All';
diff --git a/tests/suites/storage/storage.test.ts b/tests/suites/storage/storage.test.ts
index 93040c8274..38b0107068 100644
--- a/tests/suites/storage/storage.test.ts
+++ b/tests/suites/storage/storage.test.ts
@@ -1,4 +1,4 @@
-import {test, expect} from '@playwright/test';
+import {expect, test} from '@playwright/test';
import {StoragePage} from './StoragePage';
diff --git a/tests/suites/tenant/TenantPage.ts b/tests/suites/tenant/TenantPage.ts
index b960a47894..56dfa44298 100644
--- a/tests/suites/tenant/TenantPage.ts
+++ b/tests/suites/tenant/TenantPage.ts
@@ -1,11 +1,9 @@
-import {Locator, Page} from '@playwright/test';
+import type {Page} from '@playwright/test';
-import {tenantPage} from '../../utils/constants';
import {PageModel} from '../../models/PageModel';
+import {tenantPage} from '../../utils/constants';
export class TenantPage extends PageModel {
- readonly table: Locator;
-
constructor(page: Page) {
super(page, tenantPage);
}
diff --git a/tests/suites/tenant/queryEditor/QueryEditor.ts b/tests/suites/tenant/queryEditor/QueryEditor.ts
index 70424c919d..8920cf096e 100644
--- a/tests/suites/tenant/queryEditor/QueryEditor.ts
+++ b/tests/suites/tenant/queryEditor/QueryEditor.ts
@@ -1,4 +1,4 @@
-import {Locator, Page} from '@playwright/test';
+import type {Locator, Page} from '@playwright/test';
import {BaseModel} from '../../../models/BaseModel';
import {selectContentTable} from '../../../utils/selectContentTable';
@@ -63,7 +63,7 @@ export class QueryEditor extends BaseModel {
}
protected async selectExplainResultType(type: ExplainResultType) {
- const radio = this.selector.locator('.ydb-query-explain-result__controls .yc-radio-button');
+ const radio = this.selector.locator('.ydb-query-explain-result__controls .g-radio-button');
await radio.getByLabel(type).click();
}
diff --git a/tests/suites/tenant/queryEditor/queryEditor.test.ts b/tests/suites/tenant/queryEditor/queryEditor.test.ts
index 99255e605a..e3d4d259a9 100644
--- a/tests/suites/tenant/queryEditor/queryEditor.test.ts
+++ b/tests/suites/tenant/queryEditor/queryEditor.test.ts
@@ -1,8 +1,8 @@
-import {test, expect} from '@playwright/test';
+import {expect, test} from '@playwright/test';
import {tenantName} from '../../../utils/constants';
-
import {TenantPage} from '../TenantPage';
+
import {QueryEditor} from './QueryEditor';
test.describe('Test Query Editor', async () => {
diff --git a/tests/suites/tenants/TenantsPage.ts b/tests/suites/tenants/TenantsPage.ts
index 986995888c..593d972212 100644
--- a/tests/suites/tenants/TenantsPage.ts
+++ b/tests/suites/tenants/TenantsPage.ts
@@ -1,8 +1,8 @@
-import {Locator, Page} from '@playwright/test';
+import type {Locator, Page} from '@playwright/test';
+import {PageModel} from '../../models/PageModel';
import {tenantsPage} from '../../utils/constants';
import {selectContentTable} from '../../utils/selectContentTable';
-import {PageModel} from '../../models/PageModel';
export class TenantsPage extends PageModel {
readonly table: Locator;
diff --git a/tests/suites/tenants/tenants.test.ts b/tests/suites/tenants/tenants.test.ts
index 0c25c77c37..32f1824ce0 100644
--- a/tests/suites/tenants/tenants.test.ts
+++ b/tests/suites/tenants/tenants.test.ts
@@ -1,4 +1,4 @@
-import {test, expect} from '@playwright/test';
+import {expect, test} from '@playwright/test';
import {TenantsPage} from './TenantsPage';
diff --git a/tests/utils/selectContentTable.ts b/tests/utils/selectContentTable.ts
index 1a86bb9f2e..c95995c59a 100644
--- a/tests/utils/selectContentTable.ts
+++ b/tests/utils/selectContentTable.ts
@@ -1,4 +1,4 @@
-import {Locator} from '@playwright/test';
+import type {Locator} from '@playwright/test';
// react-data-table has 2 table elements - for header and for the content
// so we select content table that is wrapped with .data-table__box
diff --git a/tsconfig.json b/tsconfig.json
index 263b1963df..58aec18834 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -9,6 +9,5 @@
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true
- },
- "include": ["src/**/*"]
+ }
}
diff --git a/tsconfig.package.json b/tsconfig.package.json
index 850a68967d..245953dd01 100644
--- a/tsconfig.package.json
+++ b/tsconfig.package.json
@@ -6,5 +6,6 @@
"noEmit": false,
"importHelpers": true
},
+ "include": ["src/**/*"],
"exclude": ["src/setup*", "src/index.tsx", "**/__tests__", "**/tests"]
}