From d9629ed7e11abd66605d5bfd84581f694b38495a Mon Sep 17 00:00:00 2001
From: natha
Date: Fri, 18 Jul 2025 16:35:53 -0300
Subject: [PATCH 1/6] FAQ push
---
.../static/frontend/package-lock.json | 796 +++---------------
src/frontend/static/frontend/package.json | 2 +-
src/frontend/static/frontend/rspack.common.js | 3 +-
src/frontend/static/frontend/rspack.prod.js | 2 +-
.../frontend/src/components/MainNavbar.tsx | 13 +-
.../frontend/src/components/faq/FAQ.tsx | 83 ++
6 files changed, 221 insertions(+), 678 deletions(-)
create mode 100644 src/frontend/static/frontend/src/components/faq/FAQ.tsx
diff --git a/src/frontend/static/frontend/package-lock.json b/src/frontend/static/frontend/package-lock.json
index 1e714c0b..a0dfe2e6 100644
--- a/src/frontend/static/frontend/package-lock.json
+++ b/src/frontend/static/frontend/package-lock.json
@@ -14,7 +14,7 @@
"@visx/scale": "^3.5.0",
"@visx/stats": "^3.5.0",
"@visx/tooltip": "^3.3.0",
- "apexcharts": "^3.52.0",
+ "apexcharts": "^4.0.0",
"axios": "^1.8.4",
"cytoscape": "^3.30.2",
"d3": "^7.9.0",
@@ -67,6 +67,7 @@
"version": "1.2.6",
"resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
"integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -2029,6 +2030,7 @@
"version": "4.5.1",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz",
"integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==",
+ "dev": true,
"dependencies": {
"eslint-visitor-keys": "^3.4.3"
},
@@ -2046,6 +2048,7 @@
"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"
},
@@ -2057,6 +2060,7 @@
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
"integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
+ "dev": true,
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
}
@@ -2082,6 +2086,7 @@
"version": "0.20.0",
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz",
"integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==",
+ "dev": true,
"license": "Apache-2.0",
"dependencies": {
"@eslint/object-schema": "^2.1.6",
@@ -2096,6 +2101,7 @@
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz",
"integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==",
+ "dev": true,
"license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2105,6 +2111,7 @@
"version": "0.14.0",
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz",
"integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==",
+ "dev": true,
"license": "Apache-2.0",
"dependencies": {
"@types/json-schema": "^7.0.15"
@@ -2117,6 +2124,7 @@
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
"integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
+ "dev": true,
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
@@ -2139,6 +2147,7 @@
"version": "8.14.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
"integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
+ "dev": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -2150,6 +2159,7 @@
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
"integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "dev": true,
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
@@ -2161,6 +2171,7 @@
"version": "10.3.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
"integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
+ "dev": true,
"dependencies": {
"acorn": "^8.14.0",
"acorn-jsx": "^5.3.2",
@@ -2177,6 +2188,7 @@
"version": "14.0.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
"integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+ "dev": true,
"engines": {
"node": ">=18"
},
@@ -2188,6 +2200,7 @@
"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"
},
@@ -2199,6 +2212,7 @@
"version": "9.27.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz",
"integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2211,6 +2225,7 @@
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
"integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
+ "dev": true,
"license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2220,6 +2235,7 @@
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz",
"integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==",
+ "dev": true,
"license": "Apache-2.0",
"dependencies": {
"@eslint/core": "^0.14.0",
@@ -2233,6 +2249,7 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"prelude-ls": "^1.2.1",
@@ -2246,6 +2263,7 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.8.0"
@@ -2255,6 +2273,7 @@
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"prelude-ls": "^1.2.1"
@@ -2344,6 +2363,7 @@
"version": "0.19.1",
"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
"integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+ "dev": true,
"engines": {
"node": ">=18.18.0"
}
@@ -2352,6 +2372,7 @@
"version": "0.16.6",
"resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
"integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
+ "dev": true,
"dependencies": {
"@humanfs/core": "^0.19.1",
"@humanwhocodes/retry": "^0.3.0"
@@ -2364,6 +2385,7 @@
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
"integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
+ "dev": true,
"engines": {
"node": ">=18.18"
},
@@ -2399,6 +2421,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
"integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
"engines": {
"node": ">=12.22"
},
@@ -2416,6 +2439,7 @@
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz",
"integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==",
+ "dev": true,
"engines": {
"node": ">=18.18"
},
@@ -4428,6 +4452,57 @@
"magic-string": "^0.25.0"
}
},
+ "node_modules/@svgdotjs/svg.draggable.js": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.6.tgz",
+ "integrity": "sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA==",
+ "peerDependencies": {
+ "@svgdotjs/svg.js": "^3.2.4"
+ }
+ },
+ "node_modules/@svgdotjs/svg.filter.js": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/@svgdotjs/svg.filter.js/-/svg.filter.js-3.0.9.tgz",
+ "integrity": "sha512-/69XMRCDoam2HgC4ldHIaDgeQf1ViHIsa0Ld4uWgiXtZ+E24DWHe/9Ib6kbNiZ7WRIdlVokUDR1Fg0kjIpkfbw==",
+ "dependencies": {
+ "@svgdotjs/svg.js": "^3.2.4"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/@svgdotjs/svg.js": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@svgdotjs/svg.js/-/svg.js-3.2.4.tgz",
+ "integrity": "sha512-BjJ/7vWNowlX3Z8O4ywT58DqbNRyYlkk6Yz/D13aB7hGmfQTvGX4Tkgtm/ApYlu9M7lCQi15xUEidqMUmdMYwg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Fuzzyma"
+ }
+ },
+ "node_modules/@svgdotjs/svg.resize.js": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@svgdotjs/svg.resize.js/-/svg.resize.js-2.0.5.tgz",
+ "integrity": "sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA==",
+ "engines": {
+ "node": ">= 14.18"
+ },
+ "peerDependencies": {
+ "@svgdotjs/svg.js": "^3.2.4",
+ "@svgdotjs/svg.select.js": "^4.0.1"
+ }
+ },
+ "node_modules/@svgdotjs/svg.select.js": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@svgdotjs/svg.select.js/-/svg.select.js-4.0.3.tgz",
+ "integrity": "sha512-qkMgso1sd2hXKd1FZ1weO7ANq12sNmQJeGDjs46QwDVsxSRcHmvWKL2NDF7Yimpwf3sl5esOLkPqtV2bQ3v/Jg==",
+ "engines": {
+ "node": ">= 14.18"
+ },
+ "peerDependencies": {
+ "@svgdotjs/svg.js": "^3.2.4"
+ }
+ },
"node_modules/@svgr/babel-plugin-add-jsx-attribute": {
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz",
@@ -4635,25 +4710,6 @@
"url": "https://github.com/sponsors/gregberge"
}
},
- "node_modules/@swc/helpers": {
- "version": "0.5.15",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
- "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==",
- "dev": true,
- "optional": true,
- "peer": true,
- "dependencies": {
- "tslib": "^2.8.0"
- }
- },
- "node_modules/@swc/helpers/node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "dev": true,
- "optional": true,
- "peer": true
- },
"node_modules/@tootallnate/once": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
@@ -5009,16 +5065,6 @@
"@types/json-schema": "*"
}
},
- "node_modules/@types/eslint-scope": {
- "version": "3.7.7",
- "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
- "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
- "peer": true,
- "dependencies": {
- "@types/eslint": "*",
- "@types/estree": "*"
- }
- },
"node_modules/@types/estree": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
@@ -6164,29 +6210,6 @@
"@webassemblyjs/ast": "1.9.0"
}
},
- "node_modules/@webassemblyjs/helper-numbers": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",
- "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
- "peer": true,
- "dependencies": {
- "@webassemblyjs/floating-point-hex-parser": "1.13.2",
- "@webassemblyjs/helper-api-error": "1.13.2",
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@webassemblyjs/helper-numbers/node_modules/@webassemblyjs/floating-point-hex-parser": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
- "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
- "peer": true
- },
- "node_modules/@webassemblyjs/helper-numbers/node_modules/@webassemblyjs/helper-api-error": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
- "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
- "peer": true
- },
"node_modules/@webassemblyjs/helper-wasm-bytecode": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
@@ -6436,6 +6459,7 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
"integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
+ "dev": true,
"dependencies": {
"ajv": "^8.0.0"
},
@@ -6452,6 +6476,7 @@
"version": "8.12.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
"integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "dev": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
@@ -6466,7 +6491,8 @@
"node_modules/ajv-formats/node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
},
"node_modules/ajv-keywords": {
"version": "3.5.2",
@@ -6569,17 +6595,16 @@
}
},
"node_modules/apexcharts": {
- "version": "3.52.0",
- "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.52.0.tgz",
- "integrity": "sha512-7dg0ADKs8AA89iYMZMe2sFDG0XK5PfqllKV9N+i3hKHm3vEtdhwz8AlXGm+/b0nJ6jKiaXsqci5LfVxNhtB+dA==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-4.0.0.tgz",
+ "integrity": "sha512-6G4Zuph04abbUzzroHXkXARk0LwKdBdQQo5+zRebi+sOoj5Q/toj4z6QMB6e6w/FdkeaO1i3NH3LnCv8hcqczw==",
"dependencies": {
- "@yr/monotone-cubic-spline": "^1.0.3",
- "svg.draggable.js": "^2.2.2",
- "svg.easing.js": "^2.0.0",
- "svg.filter.js": "^2.0.2",
- "svg.pathmorphing.js": "^0.1.3",
- "svg.resize.js": "^1.4.3",
- "svg.select.js": "^3.0.1"
+ "@svgdotjs/svg.draggable.js": "^3.0.4",
+ "@svgdotjs/svg.filter.js": "^3.0.8",
+ "@svgdotjs/svg.js": "^3.2.4",
+ "@svgdotjs/svg.resize.js": "^2.0.2",
+ "@svgdotjs/svg.select.js": "^4.0.1",
+ "@yr/monotone-cubic-spline": "^1.0.3"
}
},
"node_modules/aproba": {
@@ -8650,18 +8675,6 @@
"url": "https://opencollective.com/core-js"
}
},
- "node_modules/core-js-pure": {
- "version": "3.23.2",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.2.tgz",
- "integrity": "sha512-t6u7H4Ff/yZNk+zqTr74UjCcZ3k8ApBryeLLV4rYQd9aF3gqmjjGjjR44ENfeBMH8VVvSynIjAJ0mUuFhzQtrA==",
- "deprecated": "core-js-pure@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js-pure.",
- "hasInstallScript": true,
- "peer": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
- }
- },
"node_modules/core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
@@ -10757,7 +10770,8 @@
"node_modules/es-module-lexer": {
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
- "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw=="
+ "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
+ "dev": true
},
"node_modules/es-object-atoms": {
"version": "1.1.1",
@@ -10909,6 +10923,7 @@
"version": "9.27.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz",
"integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
@@ -11456,6 +11471,7 @@
"version": "8.14.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
"integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
+ "dev": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -11467,6 +11483,7 @@
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -11481,6 +11498,7 @@
"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"
@@ -11496,6 +11514,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
@@ -11506,12 +11525,14 @@
"node_modules/eslint/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
},
"node_modules/eslint/node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dev": true,
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
@@ -11525,6 +11546,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
"engines": {
"node": ">=10"
},
@@ -11536,6 +11558,7 @@
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
"integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
+ "dev": true,
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^5.2.0"
@@ -11551,6 +11574,7 @@
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
"integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "dev": true,
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
@@ -11562,6 +11586,7 @@
"version": "10.3.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
"integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
+ "dev": true,
"dependencies": {
"acorn": "^8.14.0",
"acorn-jsx": "^5.3.2",
@@ -11578,6 +11603,7 @@
"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"
}
@@ -11586,6 +11612,7 @@
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
"integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "dev": true,
"dependencies": {
"flat-cache": "^4.0.0"
},
@@ -11597,6 +11624,7 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
"integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "dev": true,
"dependencies": {
"flatted": "^3.2.9",
"keyv": "^4.5.4"
@@ -11609,6 +11637,7 @@
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
"dependencies": {
"is-glob": "^4.0.3"
},
@@ -11620,6 +11649,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
"engines": {
"node": ">=8"
}
@@ -11628,6 +11658,7 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
"dependencies": {
"prelude-ls": "^1.2.1",
"type-check": "~0.4.0"
@@ -11640,6 +11671,7 @@
"version": "0.9.3",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
"integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+ "dev": true,
"dependencies": {
"@aashutoshrathi/word-wrap": "^1.2.3",
"deep-is": "^0.1.3",
@@ -11656,6 +11688,7 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
"engines": {
"node": ">=8"
}
@@ -11664,6 +11697,7 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
"engines": {
"node": ">= 0.8.0"
}
@@ -11672,6 +11706,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
"dependencies": {
"shebang-regex": "^3.0.0"
},
@@ -11683,6 +11718,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
"engines": {
"node": ">=8"
}
@@ -11691,6 +11727,7 @@
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -11702,6 +11739,7 @@
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
"dependencies": {
"prelude-ls": "^1.2.1"
},
@@ -11713,6 +11751,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
"dependencies": {
"isexe": "^2.0.0"
},
@@ -12316,6 +12355,7 @@
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz",
"integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==",
+ "dev": true,
"funding": [
{
"type": "github",
@@ -13006,12 +13046,6 @@
"node": ">= 6"
}
},
- "node_modules/glob-to-regexp": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
- "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
- "peer": true
- },
"node_modules/global-modules": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
@@ -17156,16 +17190,6 @@
"node": ">=8"
}
},
- "node_modules/jiti": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz",
- "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==",
- "optional": true,
- "peer": true,
- "bin": {
- "jiti": "lib/jiti-cli.mjs"
- }
- },
"node_modules/jquery": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz",
@@ -17321,7 +17345,8 @@
"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=="
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true
},
"node_modules/json-parse-better-errors": {
"version": "1.0.2",
@@ -17388,6 +17413,7 @@
"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"
}
@@ -19748,20 +19774,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/neo-react-semantic-ui-range/node_modules/typescript": {
- "version": "4.9.5",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
- "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
- "optional": true,
- "peer": true,
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=4.2.0"
- }
- },
"node_modules/neo-react-semantic-ui-range/node_modules/universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
@@ -25767,89 +25779,6 @@
"resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz",
"integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ=="
},
- "node_modules/svg.draggable.js": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz",
- "integrity": "sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==",
- "dependencies": {
- "svg.js": "^2.0.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/svg.easing.js": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/svg.easing.js/-/svg.easing.js-2.0.0.tgz",
- "integrity": "sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==",
- "dependencies": {
- "svg.js": ">=2.3.x"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/svg.filter.js": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/svg.filter.js/-/svg.filter.js-2.0.2.tgz",
- "integrity": "sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==",
- "dependencies": {
- "svg.js": "^2.2.5"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/svg.js": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz",
- "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA=="
- },
- "node_modules/svg.pathmorphing.js": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz",
- "integrity": "sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==",
- "dependencies": {
- "svg.js": "^2.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/svg.resize.js": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz",
- "integrity": "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==",
- "dependencies": {
- "svg.js": "^2.6.5",
- "svg.select.js": "^2.1.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/svg.resize.js/node_modules/svg.select.js": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz",
- "integrity": "sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==",
- "dependencies": {
- "svg.js": "^2.2.5"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/svg.select.js": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-3.0.1.tgz",
- "integrity": "sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==",
- "dependencies": {
- "svg.js": "^2.6.5"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
"node_modules/svgo": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz",
@@ -26103,176 +26032,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/terser-webpack-plugin": {
- "version": "5.3.14",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz",
- "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==",
- "peer": true,
- "dependencies": {
- "@jridgewell/trace-mapping": "^0.3.25",
- "jest-worker": "^27.4.5",
- "schema-utils": "^4.3.0",
- "serialize-javascript": "^6.0.2",
- "terser": "^5.31.1"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^5.1.0"
- },
- "peerDependenciesMeta": {
- "@swc/core": {
- "optional": true
- },
- "esbuild": {
- "optional": true
- },
- "uglify-js": {
- "optional": true
- }
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/acorn": {
- "version": "8.14.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
- "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
- "peer": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "peer": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
- "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
- "peer": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3"
- },
- "peerDependencies": {
- "ajv": "^8.8.2"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "peer": true
- },
- "node_modules/terser-webpack-plugin/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "peer": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/jest-worker": {
- "version": "27.5.1",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
- "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
- "peer": true,
- "dependencies": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "peer": true
- },
- "node_modules/terser-webpack-plugin/node_modules/schema-utils": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz",
- "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==",
- "peer": true,
- "dependencies": {
- "@types/json-schema": "^7.0.9",
- "ajv": "^8.9.0",
- "ajv-formats": "^2.1.1",
- "ajv-keywords": "^5.1.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
- "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
- "peer": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
- "node_modules/terser-webpack-plugin/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==",
- "peer": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/terser": {
- "version": "5.39.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz",
- "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==",
- "peer": true,
- "dependencies": {
- "@jridgewell/source-map": "^0.3.3",
- "acorn": "^8.8.2",
- "commander": "^2.20.0",
- "source-map-support": "~0.5.20"
- },
- "bin": {
- "terser": "bin/terser"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/terser/node_modules/commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
@@ -26791,19 +26550,6 @@
"node": ">=4"
}
},
- "node_modules/type-fest": {
- "version": "0.13.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
- "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
@@ -26908,6 +26654,7 @@
"version": "5.8.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz",
"integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==",
+ "dev": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -27806,54 +27553,6 @@
"node": ">=10.4"
}
},
- "node_modules/webpack": {
- "version": "5.99.8",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.8.tgz",
- "integrity": "sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@types/eslint-scope": "^3.7.7",
- "@types/estree": "^1.0.6",
- "@types/json-schema": "^7.0.15",
- "@webassemblyjs/ast": "^1.14.1",
- "@webassemblyjs/wasm-edit": "^1.14.1",
- "@webassemblyjs/wasm-parser": "^1.14.1",
- "acorn": "^8.14.0",
- "browserslist": "^4.24.0",
- "chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.17.1",
- "es-module-lexer": "^1.2.1",
- "eslint-scope": "5.1.1",
- "events": "^3.2.0",
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.2.11",
- "json-parse-even-better-errors": "^2.3.1",
- "loader-runner": "^4.2.0",
- "mime-types": "^2.1.27",
- "neo-async": "^2.6.2",
- "schema-utils": "^4.3.2",
- "tapable": "^2.1.1",
- "terser-webpack-plugin": "^5.3.11",
- "watchpack": "^2.4.1",
- "webpack-sources": "^3.2.3"
- },
- "bin": {
- "webpack": "bin/webpack.js"
- },
- "engines": {
- "node": ">=10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependenciesMeta": {
- "webpack-cli": {
- "optional": true
- }
- }
- },
"node_modules/webpack-bundle-analyzer": {
"version": "4.10.2",
"resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz",
@@ -28694,257 +28393,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/webpack/node_modules/@webassemblyjs/ast": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz",
- "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
- "peer": true,
- "dependencies": {
- "@webassemblyjs/helper-numbers": "1.13.2",
- "@webassemblyjs/helper-wasm-bytecode": "1.13.2"
- }
- },
- "node_modules/webpack/node_modules/@webassemblyjs/helper-api-error": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
- "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
- "peer": true
- },
- "node_modules/webpack/node_modules/@webassemblyjs/helper-buffer": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
- "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
- "peer": true
- },
- "node_modules/webpack/node_modules/@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
- "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
- "peer": true
- },
- "node_modules/webpack/node_modules/@webassemblyjs/helper-wasm-section": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",
- "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.14.1",
- "@webassemblyjs/helper-buffer": "1.14.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
- "@webassemblyjs/wasm-gen": "1.14.1"
- }
- },
- "node_modules/webpack/node_modules/@webassemblyjs/ieee754": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",
- "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
- "peer": true,
- "dependencies": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "node_modules/webpack/node_modules/@webassemblyjs/leb128": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",
- "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
- "peer": true,
- "dependencies": {
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/webpack/node_modules/@webassemblyjs/utf8": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
- "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
- "peer": true
- },
- "node_modules/webpack/node_modules/@webassemblyjs/wasm-edit": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",
- "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.14.1",
- "@webassemblyjs/helper-buffer": "1.14.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
- "@webassemblyjs/helper-wasm-section": "1.14.1",
- "@webassemblyjs/wasm-gen": "1.14.1",
- "@webassemblyjs/wasm-opt": "1.14.1",
- "@webassemblyjs/wasm-parser": "1.14.1",
- "@webassemblyjs/wast-printer": "1.14.1"
- }
- },
- "node_modules/webpack/node_modules/@webassemblyjs/wasm-gen": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz",
- "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.14.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
- "@webassemblyjs/ieee754": "1.13.2",
- "@webassemblyjs/leb128": "1.13.2",
- "@webassemblyjs/utf8": "1.13.2"
- }
- },
- "node_modules/webpack/node_modules/@webassemblyjs/wasm-opt": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz",
- "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.14.1",
- "@webassemblyjs/helper-buffer": "1.14.1",
- "@webassemblyjs/wasm-gen": "1.14.1",
- "@webassemblyjs/wasm-parser": "1.14.1"
- }
- },
- "node_modules/webpack/node_modules/@webassemblyjs/wasm-parser": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz",
- "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.14.1",
- "@webassemblyjs/helper-api-error": "1.13.2",
- "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
- "@webassemblyjs/ieee754": "1.13.2",
- "@webassemblyjs/leb128": "1.13.2",
- "@webassemblyjs/utf8": "1.13.2"
- }
- },
- "node_modules/webpack/node_modules/@webassemblyjs/wast-printer": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz",
- "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.14.1",
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/webpack/node_modules/acorn": {
- "version": "8.14.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
- "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
- "peer": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/webpack/node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/webpack/node_modules/ajv-keywords": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
- "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3"
- },
- "peerDependencies": {
- "ajv": "^8.8.2"
- }
- },
- "node_modules/webpack/node_modules/enhanced-resolve": {
- "version": "5.17.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
- "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
- "peer": true,
- "dependencies": {
- "graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/webpack/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "license": "MIT",
- "peer": true
- },
- "node_modules/webpack/node_modules/loader-runner": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
- "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
- "peer": true,
- "engines": {
- "node": ">=6.11.5"
- }
- },
- "node_modules/webpack/node_modules/schema-utils": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz",
- "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@types/json-schema": "^7.0.9",
- "ajv": "^8.9.0",
- "ajv-formats": "^2.1.1",
- "ajv-keywords": "^5.1.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/webpack/node_modules/tapable": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
- "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/webpack/node_modules/watchpack": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz",
- "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==",
- "peer": true,
- "dependencies": {
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.1.2"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/webpack/node_modules/webpack-sources": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
- "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
- "peer": true,
- "engines": {
- "node": ">=10.13.0"
- }
- },
"node_modules/websocket-driver": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
diff --git a/src/frontend/static/frontend/package.json b/src/frontend/static/frontend/package.json
index 5e1038bb..5ed162cc 100644
--- a/src/frontend/static/frontend/package.json
+++ b/src/frontend/static/frontend/package.json
@@ -48,7 +48,7 @@
"@visx/scale": "^3.5.0",
"@visx/stats": "^3.5.0",
"@visx/tooltip": "^3.3.0",
- "apexcharts": "^3.52.0",
+ "apexcharts": "^4.0.0",
"axios": "^1.8.4",
"cytoscape": "^3.30.2",
"d3": "^7.9.0",
diff --git a/src/frontend/static/frontend/rspack.common.js b/src/frontend/static/frontend/rspack.common.js
index 8de93ce3..914fccf4 100644
--- a/src/frontend/static/frontend/rspack.common.js
+++ b/src/frontend/static/frontend/rspack.common.js
@@ -24,7 +24,8 @@ export const common = {
survival: `${PATHS.src}/survival.tsx`,
aboutUs: `${PATHS.src}/about-us.tsx`,
openSource: `${PATHS.src}/open-source.tsx`,
- sitePolicy: `${PATHS.src}/site-policy.tsx`
+ sitePolicy: `${PATHS.src}/site-policy.tsx`,
+ faq: `${PATHS.src}/faq.tsx`
},
output: {
path: PATHS.output,
diff --git a/src/frontend/static/frontend/rspack.prod.js b/src/frontend/static/frontend/rspack.prod.js
index ac78fe38..e35b42e1 100644
--- a/src/frontend/static/frontend/rspack.prod.js
+++ b/src/frontend/static/frontend/rspack.prod.js
@@ -1,4 +1,4 @@
-import { common } from './rspack.common.js'
+import { common } from './'
export default {
...common,
diff --git a/src/frontend/static/frontend/src/components/MainNavbar.tsx b/src/frontend/static/frontend/src/components/MainNavbar.tsx
index 060d3d21..94ccbbc3 100644
--- a/src/frontend/static/frontend/src/components/MainNavbar.tsx
+++ b/src/frontend/static/frontend/src/components/MainNavbar.tsx
@@ -149,7 +149,7 @@ const LogInLogOutPanel = (props: LogInLogOutPanelProps) => {
)
}
-type ActiveItemOptions = 'home' | 'pipeline' | 'files' | 'cgds' | 'survival' | 'institutions' | 'about-us' | 'biomarkers' | 'open-source'
+type ActiveItemOptions = 'home' | 'pipeline' | 'files' | 'cgds' | 'survival' | 'institutions' | 'about-us' | 'biomarkers' | 'open-source' | 'faq'
interface MainNavbarProps {
activeItem?: ActiveItemOptions,
@@ -289,6 +289,17 @@ const MainNavbar = (props: MainNavbarProps) => {
+
+
+ FAQ
+
+
+
Open source
diff --git a/src/frontend/static/frontend/src/components/faq/FAQ.tsx b/src/frontend/static/frontend/src/components/faq/FAQ.tsx
new file mode 100644
index 00000000..082675ab
--- /dev/null
+++ b/src/frontend/static/frontend/src/components/faq/FAQ.tsx
@@ -0,0 +1,83 @@
+import React from 'react'
+import { Base } from '../Base'
+import { Container, Divider, Grid, Header, HeaderSubheader, List, ListContent, ListDescription, ListHeader, ListIcon, ListItem } from 'semantic-ui-react'
+
+export const FAQ = () => {
+ return (
+
+
+
+ {/* Git hub */}
+
+
+
+ At Omicsdatascience , we believe in open science. Explore our open-source projects, freely available to the community to foster collaboration, transparency, and innovation in biomedical research. Avilable in our GitHub organization .
+
+
+ These repositories represent some of our most prominent open-source initiatives, developed to empower the research community with accessible and cutting-edge bioinformatics tools.
+
+
+
+
+
+ Multiomix
+ Cloud-based platform to infer cancer genomic and epigenomic events associated with gene expression modulation.
+
+
+
+
+
+ Modulector
+ Modulector is a performing open platform that provides information about miRNAs, genes and methylation sites based on a compilation of information from different resources.
+
+
+
+
+
+ BioApi
+ A powerful abstraction of genomics databases. Bioapi is a REST API that provides data related to gene nomenclature, gene expression, and metabolic pathways.
+
+
+
+
+
+
+
+
+
+ In addition to our open-source software, we regularly publish peer-reviewed scientific articles that document the methodologies, innovations, and findings behind our tools. We invite you to explore our publications to better understand the research impact of our work.
+
+
+
+
+
+
+ Multiomix
+
+
+ A cloud-based platform to infer cancer genomic and epigenomic events associated with gene expression modulation
+
+
+
+
+
+
+
+ Modulector
+
+
+ Una plataforma como servicio para el acceso a bases de datos de micro ARNs
+
+
+
+
+
+
+
+
+
+
+ )
+}
\ No newline at end of file
From 5093a5d889d4707372d02b693bb6e7ad7f5ffc21 Mon Sep 17 00:00:00 2001
From: Genaro Camele
Date: Mon, 21 Jul 2025 18:17:08 -0300
Subject: [PATCH 2/6] Added missing file
---
src/frontend/static/frontend/src/components/faq/FAQ.tsx | 2 +-
src/frontend/static/frontend/src/faq.tsx | 8 ++++++++
2 files changed, 9 insertions(+), 1 deletion(-)
create mode 100644 src/frontend/static/frontend/src/faq.tsx
diff --git a/src/frontend/static/frontend/src/components/faq/FAQ.tsx b/src/frontend/static/frontend/src/components/faq/FAQ.tsx
index 082675ab..b8969f75 100644
--- a/src/frontend/static/frontend/src/components/faq/FAQ.tsx
+++ b/src/frontend/static/frontend/src/components/faq/FAQ.tsx
@@ -80,4 +80,4 @@ export const FAQ = () => {
)
-}
\ No newline at end of file
+}
diff --git a/src/frontend/static/frontend/src/faq.tsx b/src/frontend/static/frontend/src/faq.tsx
new file mode 100644
index 00000000..7c41060f
--- /dev/null
+++ b/src/frontend/static/frontend/src/faq.tsx
@@ -0,0 +1,8 @@
+import React from 'react'
+import { createRoot } from 'react-dom/client'
+import { FAQ } from './components/faq/FAQ'
+
+const container = document.getElementById('faq-app')
+const root = createRoot(container!)
+// eslint-disable-next-line @stylistic/jsx-pascal-case
+root.render( )
From 3b8033dae4687b137be60bb15bf63859669acfac Mon Sep 17 00:00:00 2001
From: natha
Date: Thu, 28 Aug 2025 16:41:11 -0300
Subject: [PATCH 3/6] FAQ Components
---
.../frontend/src/components/faq/FAQ.tsx | 142 ++++++++----------
src/frontend/static/frontend/src/faq.tsx | 1 -
src/frontend/templates/frontend/base.html | 1 +
src/frontend/templates/frontend/faq.html | 16 ++
src/frontend/urls.py | 3 +-
src/frontend/views.py | 4 +
6 files changed, 87 insertions(+), 80 deletions(-)
create mode 100644 src/frontend/templates/frontend/faq.html
diff --git a/src/frontend/static/frontend/src/components/faq/FAQ.tsx b/src/frontend/static/frontend/src/components/faq/FAQ.tsx
index b8969f75..bb783695 100644
--- a/src/frontend/static/frontend/src/components/faq/FAQ.tsx
+++ b/src/frontend/static/frontend/src/components/faq/FAQ.tsx
@@ -1,83 +1,69 @@
import React from 'react'
+import { Container, Divider, Grid, Header, Segment, List } from 'semantic-ui-react'
import { Base } from '../Base'
-import { Container, Divider, Grid, Header, HeaderSubheader, List, ListContent, ListDescription, ListHeader, ListIcon, ListItem } from 'semantic-ui-react'
export const FAQ = () => {
- return (
-
-
-
- {/* Git hub */}
-
-
-
- At Omicsdatascience , we believe in open science. Explore our open-source projects, freely available to the community to foster collaboration, transparency, and innovation in biomedical research. Avilable in our GitHub organization .
-
-
- These repositories represent some of our most prominent open-source initiatives, developed to empower the research community with accessible and cutting-edge bioinformatics tools.
-
-
-
-
-
- Multiomix
- Cloud-based platform to infer cancer genomic and epigenomic events associated with gene expression modulation.
-
-
-
-
-
- Modulector
- Modulector is a performing open platform that provides information about miRNAs, genes and methylation sites based on a compilation of information from different resources.
-
-
-
-
-
- BioApi
- A powerful abstraction of genomics databases. Bioapi is a REST API that provides data related to gene nomenclature, gene expression, and metabolic pathways.
-
-
-
-
-
-
-
-
-
- In addition to our open-source software, we regularly publish peer-reviewed scientific articles that document the methodologies, innovations, and findings behind our tools. We invite you to explore our publications to better understand the research impact of our work.
-
-
-
-
-
-
- Multiomix
-
-
- A cloud-based platform to infer cancer genomic and epigenomic events associated with gene expression modulation
-
-
-
-
-
-
-
- Modulector
-
-
- Una plataforma como servicio para el acceso a bases de datos de micro ARNs
-
-
-
-
-
-
-
-
-
-
- )
+ return (
+
+
+
+
+
+ Frequently Asked Questions
+
+
+
+ How are cBioPortal datasets incorporated and preprocessed?
+
+ Datasets from cBioPortal are synchronized regularly to ensure data consistency.
+ If there is an update that we miss, users can contact us directly.
+ Duplicate molecules are removed to keep the dataset clean.
+ Samples without information for a given molecule in a biomarker are excluded from trained models,
+ statistical validations, feature selection experiments, and inference steps.
+
+
+ Clinical data also undergo preprocessing: cases with NaN, empty or Null values are filtered out.
+ Additionally, cases with an event but survival time equal to zero are excluded (pending clarification from cBioPortal).
+
+
+
+
+
+
+ How is user-uploaded data privacy handled?
+
+ Uploaded data is securely stored and only accessible to the uploading user.
+ Once deleted, the data is permanently removed from our servers and cannot be recovered.
+ No third parties have access to private user data.
+
+
+
+
+
+
+ Libraries and Tools with Licenses
+
+ For legal and transparency reasons, we provide a list of third-party libraries and tools used in this platform,
+ along with their respective licenses. This ensures compliance and acknowledgment of the open-source
+ community contributions that power our ecosystem.
+
+
+
+
+
+
+
+
+
+
+
+ )
}
diff --git a/src/frontend/static/frontend/src/faq.tsx b/src/frontend/static/frontend/src/faq.tsx
index 7c41060f..def10ef7 100644
--- a/src/frontend/static/frontend/src/faq.tsx
+++ b/src/frontend/static/frontend/src/faq.tsx
@@ -4,5 +4,4 @@ import { FAQ } from './components/faq/FAQ'
const container = document.getElementById('faq-app')
const root = createRoot(container!)
-// eslint-disable-next-line @stylistic/jsx-pascal-case
root.render( )
diff --git a/src/frontend/templates/frontend/base.html b/src/frontend/templates/frontend/base.html
index 4d7a9fbc..9bff5afc 100644
--- a/src/frontend/templates/frontend/base.html
+++ b/src/frontend/templates/frontend/base.html
@@ -59,6 +59,7 @@
const urlSearchUser = "{% url 'search_user' %}" {# URL to search user view #}
const urlUpdateUser = "{% url 'update_user' %}" {# URL to update user view #}
const currentUserId = "{{ user.id }}"
+ const urlFAQ = "{% url 'faq' %}" {# URL to FAQ page #}
{% render_bundle 'base' 'js' %}
diff --git a/src/frontend/templates/frontend/faq.html b/src/frontend/templates/frontend/faq.html
new file mode 100644
index 00000000..29c94675
--- /dev/null
+++ b/src/frontend/templates/frontend/faq.html
@@ -0,0 +1,16 @@
+{% extends 'frontend/base.html' %}
+{% load static %}
+{% load render_bundle from webpack_loader %}
+
+{% block title %} | FAQ{% endblock %}
+{% block meta_description %}
+Frequently Asked Questions about Multiomix and our platform.
+{% endblock %}
+
+{% block content %}
+
+{% endblock %}
+
+{% block js %}
+ {% render_bundle 'faq' 'js' %}
+{% endblock %}
\ No newline at end of file
diff --git a/src/frontend/urls.py b/src/frontend/urls.py
index dd05e672..28a95c9e 100644
--- a/src/frontend/urls.py
+++ b/src/frontend/urls.py
@@ -8,6 +8,7 @@
path('survival', views.survival_action, name='survival'),
path('about-us', views.about_us_action, name='about_us'),
path('open-source', views.open_source, name='open_source'),
- path('site-policy', views.terms_and_privacy_policy_action, name='site_policy')
+ path('site-policy', views.terms_and_privacy_policy_action, name='site_policy'),
+ path('faq', views.faq_action, name='faq')
]
diff --git a/src/frontend/views.py b/src/frontend/views.py
index dac426ec..116984dd 100644
--- a/src/frontend/views.py
+++ b/src/frontend/views.py
@@ -46,3 +46,7 @@ def survival_action(request):
def open_source(request):
"""Open source view"""
return render(request, "frontend/open-source.html")
+
+def faq_action(request):
+ """FAQ view"""
+ return render(request, "frontend/faq.html")
From 0a651d5492b810b3b3dbaa792cd3332fdceb1266 Mon Sep 17 00:00:00 2001
From: natha
Date: Thu, 25 Sep 2025 23:34:36 -0300
Subject: [PATCH 4/6] FAQ comments added
---
src/frontend/static/frontend/rspack.prod.js | 2 +-
.../frontend/src/components/faq/FAQ.tsx | 66 +++++++++++++------
.../components/faq/FAQQuestionAndAnswer.tsx | 30 +++++++++
3 files changed, 78 insertions(+), 20 deletions(-)
create mode 100644 src/frontend/static/frontend/src/components/faq/FAQQuestionAndAnswer.tsx
diff --git a/src/frontend/static/frontend/rspack.prod.js b/src/frontend/static/frontend/rspack.prod.js
index e35b42e1..ac78fe38 100644
--- a/src/frontend/static/frontend/rspack.prod.js
+++ b/src/frontend/static/frontend/rspack.prod.js
@@ -1,4 +1,4 @@
-import { common } from './'
+import { common } from './rspack.common.js'
export default {
...common,
diff --git a/src/frontend/static/frontend/src/components/faq/FAQ.tsx b/src/frontend/static/frontend/src/components/faq/FAQ.tsx
index bb783695..bae8f591 100644
--- a/src/frontend/static/frontend/src/components/faq/FAQ.tsx
+++ b/src/frontend/static/frontend/src/components/faq/FAQ.tsx
@@ -1,6 +1,13 @@
import React from 'react'
import { Container, Divider, Grid, Header, Segment, List } from 'semantic-ui-react'
import { Base } from '../Base'
+import {FAQQuestionAndAnswer} from "./FAQQuestionAndAnswer";
+
+/**
+ * FAQ Page (Frequently Asked Questions).
+ *
+ * Uses the `FAQQuestionAndAnswer` component to display each questions and answers.
+ */
export const FAQ = () => {
return (
@@ -12,11 +19,15 @@ export const FAQ = () => {
Frequently Asked Questions
-
- How are cBioPortal datasets incorporated and preprocessed?
-
- Datasets from cBioPortal are synchronized regularly to ensure data consistency.
- If there is an update that we miss, users can contact us directly.
+ {/* Question 1: Datasets */}
+
+
+ Datasets from cBioPortal are synchronized regularly to ensure data consistency.
+ If there is an update that we miss, users can contact us directly.
Duplicate molecules are removed to keep the dataset clean.
Samples without information for a given molecule in a biomarker are excluded from trained models,
statistical validations, feature selection experiments, and inference steps.
@@ -25,41 +36,58 @@ export const FAQ = () => {
Clinical data also undergo preprocessing: cases with NaN, empty or Null values are filtered out.
Additionally, cases with an event but survival time equal to zero are excluded (pending clarification from cBioPortal).
-
-
-
-
-
- How is user-uploaded data privacy handled?
+ >
+ }
+ />
+
+ {/* Question 2: Privacy */}
+
Uploaded data is securely stored and only accessible to the uploading user.
Once deleted, the data is permanently removed from our servers and cannot be recovered.
No third parties have access to private user data.
-
+ }
+ />
-
- Libraries and Tools with Licenses
+ {/* Question 3: Licenses */}
+
- For legal and transparency reasons, we provide a list of third-party libraries and tools used in this platform,
+ For legal and transparency reasons, we provide a list of third-party libraries and tools used in this platform,
along with their respective licenses. This ensures compliance and acknowledgment of the open-source
community contributions that power our ecosystem.
+
-
+ }
+ />
-
+ }
+
+ />
diff --git a/src/frontend/static/frontend/src/components/faq/FAQQuestionAndAnswer.tsx b/src/frontend/static/frontend/src/components/faq/FAQQuestionAndAnswer.tsx
new file mode 100644
index 00000000..d7e6e6eb
--- /dev/null
+++ b/src/frontend/static/frontend/src/components/faq/FAQQuestionAndAnswer.tsx
@@ -0,0 +1,30 @@
+import React from "react";
+import { Segment, Header } from "semantic-ui-react";
+
+/**
+ * Props for the FAQQuestionAndAnswer component.
+ */
+interface FAQQuestionAndAnswerProps {
+ /** The unique identifier for the segment */
+ segmentId: string;
+ /** The title of the FAQ question */
+ headerTitle: string;
+ /** The answer content for the FAQ question */
+ answer: React.ReactNode;
+}
+
+/**
+ * Reusable component for displaying a FAQ question and its answer.
+ *
+ * @param props - Object containing `segmentId`, `headerTitle`, and `answer`
+ * @returns A React component that displays a FAQ question and its answer.
+*/
+export const FAQQuestionAndAnswer = (props: FAQQuestionAndAnswerProps) => {
+ const { segmentId, headerTitle, answer } = props;
+ return (
+
+
+ {answer}
+
+ )
+}
From 7f44c7fa045338594cc9eeddb2ee9e8e78468079 Mon Sep 17 00:00:00 2001
From: natharisa
Date: Fri, 26 Dec 2025 11:58:21 -0300
Subject: [PATCH 5/6] Translations
---
.../static/frontend/package-lock.json | 1006 ++++++++++++++---
src/frontend/static/frontend/package.json | 12 +-
.../src/components/about-us/AboutUs.tsx | 28 +-
.../BiomarkerInferenceExperimentsPanel.tsx | 7 +-
...renceExperimentClinicalAttributeSelect.tsx | 4 +-
.../InferenceExperimentResultMetrics.tsx | 6 +-
.../inference/InferenceExperimentsTable.tsx | 48 +-
.../inference/NewInferenceExperimentModal.tsx | 27 +-
.../SamplesAndGroupsInferenceTable.tsx | 23 +-
.../SamplesAndTimeInferenceCharts.tsx | 6 +-
.../SamplesAndTimeInferenceTable.tsx | 29 +-
.../molecules/CurrentMoleculeDetails.tsx | 6 +-
.../molecules/MoleculesDetailsMenu.tsx | 15 +-
.../molecules/MoleculesTable.tsx | 29 +-
.../GeneOntologyCytoscapeChart.tsx | 45 +-
.../gene-ontology/GeneOntologyPanel.tsx | 40 +-
.../genes/ActionableCancerGenesPanel.tsx | 5 +-
.../genes/GeneAssociationsNetworkPanel.tsx | 35 +-
.../molecules/genes/GeneInformation.tsx | 14 +-
.../molecules/genes/MetabolicPathways.tsx | 12 +-
.../molecules/genes/PathwaysInformation.tsx | 6 +-
.../methylation/MethylationInformation.tsx | 28 +-
.../NewStatisticalValidationModal.tsx | 22 +-
.../StatisticalValidationMenu.tsx | 12 +-
.../StatisticalValidationsTable.tsx | 44 +-
.../result/SamplesAndGroupsTable.tsx | 14 +-
...tatisticalValidationResultBestFeatures.tsx | 13 +-
...StatisticalValidationResultKaplanMeier.tsx | 38 +-
.../StatisticalValidationResultMetrics.tsx | 26 +-
.../trained-models/NewClusteringModelForm.tsx | 55 +-
.../static/frontend/src/locales/en.ts | 303 +++++
.../static/frontend/src/locales/es.ts | 303 +++++
32 files changed, 1814 insertions(+), 447 deletions(-)
create mode 100644 src/frontend/static/frontend/src/locales/en.ts
create mode 100644 src/frontend/static/frontend/src/locales/es.ts
diff --git a/src/frontend/static/frontend/package-lock.json b/src/frontend/static/frontend/package-lock.json
index 511f13d5..834d2b8e 100644
--- a/src/frontend/static/frontend/package-lock.json
+++ b/src/frontend/static/frontend/package-lock.json
@@ -14,7 +14,7 @@
"@visx/scale": "^3.5.0",
"@visx/stats": "^3.5.0",
"@visx/tooltip": "^3.3.0",
- "apexcharts": "^4.0.0",
+ "apexcharts": "^3.52.0",
"axios": "^1.8.4",
"cytoscape": "^3.30.2",
"d3": "^7.9.0",
@@ -28,6 +28,7 @@
"react-avatar": "^5.0.3",
"react-colorful": "^5.6.1",
"react-dom": "^18.3.1",
+ "react-intl": "^7.1.14",
"react-virtualized": "^9.22.6",
"recharts": "^2.15.1",
"semantic-ui-react": "^2.1.5",
@@ -76,7 +77,6 @@
"version": "1.2.6",
"resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
"integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -2284,7 +2284,6 @@
"version": "4.5.1",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz",
"integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==",
- "dev": true,
"dependencies": {
"eslint-visitor-keys": "^3.4.3"
},
@@ -2302,7 +2301,6 @@
"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"
},
@@ -2314,7 +2312,6 @@
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
"integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
- "dev": true,
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
}
@@ -2340,7 +2337,6 @@
"version": "0.20.0",
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz",
"integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==",
- "dev": true,
"license": "Apache-2.0",
"dependencies": {
"@eslint/object-schema": "^2.1.6",
@@ -2355,7 +2351,6 @@
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz",
"integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==",
- "dev": true,
"license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2365,7 +2360,6 @@
"version": "0.14.0",
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz",
"integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==",
- "dev": true,
"license": "Apache-2.0",
"dependencies": {
"@types/json-schema": "^7.0.15"
@@ -2378,7 +2372,6 @@
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
"integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
- "dev": true,
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
@@ -2401,7 +2394,6 @@
"version": "8.14.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
"integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
- "dev": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -2413,7 +2405,6 @@
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
"integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
- "dev": true,
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
@@ -2425,7 +2416,6 @@
"version": "10.3.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
"integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
- "dev": true,
"dependencies": {
"acorn": "^8.14.0",
"acorn-jsx": "^5.3.2",
@@ -2442,7 +2432,6 @@
"version": "14.0.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
"integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
- "dev": true,
"engines": {
"node": ">=18"
},
@@ -2454,7 +2443,6 @@
"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"
},
@@ -2466,7 +2454,6 @@
"version": "9.27.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz",
"integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==",
- "dev": true,
"license": "MIT",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2479,7 +2466,6 @@
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
"integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
- "dev": true,
"license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2489,7 +2475,6 @@
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz",
"integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==",
- "dev": true,
"license": "Apache-2.0",
"dependencies": {
"@eslint/core": "^0.14.0",
@@ -2503,7 +2488,6 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"prelude-ls": "^1.2.1",
@@ -2517,7 +2501,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.8.0"
@@ -2527,7 +2510,6 @@
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
"license": "MIT",
"dependencies": {
"prelude-ls": "^1.2.1"
@@ -2561,6 +2543,102 @@
"react-dom": "^16.8.0 || ^17 || ^18"
}
},
+ "node_modules/@formatjs/ecma402-abstract": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz",
+ "integrity": "sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==",
+ "dependencies": {
+ "@formatjs/fast-memoize": "2.2.7",
+ "@formatjs/intl-localematcher": "0.6.2",
+ "decimal.js": "^10.4.3",
+ "tslib": "^2.8.0"
+ }
+ },
+ "node_modules/@formatjs/ecma402-abstract/node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
+ },
+ "node_modules/@formatjs/fast-memoize": {
+ "version": "2.2.7",
+ "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.7.tgz",
+ "integrity": "sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==",
+ "dependencies": {
+ "tslib": "^2.8.0"
+ }
+ },
+ "node_modules/@formatjs/fast-memoize/node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
+ },
+ "node_modules/@formatjs/icu-messageformat-parser": {
+ "version": "2.11.4",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.4.tgz",
+ "integrity": "sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "2.3.6",
+ "@formatjs/icu-skeleton-parser": "1.8.16",
+ "tslib": "^2.8.0"
+ }
+ },
+ "node_modules/@formatjs/icu-messageformat-parser/node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
+ },
+ "node_modules/@formatjs/icu-skeleton-parser": {
+ "version": "1.8.16",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.16.tgz",
+ "integrity": "sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "2.3.6",
+ "tslib": "^2.8.0"
+ }
+ },
+ "node_modules/@formatjs/icu-skeleton-parser/node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
+ },
+ "node_modules/@formatjs/intl": {
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-3.1.8.tgz",
+ "integrity": "sha512-LWXgwI5zTMatvR8w8kCNh/priDTOF/ZssokMBHJ7ZWXFoYLVOYo0EJERD9Eajv+xsfQO1QkuAt77KWQ1OI4mOQ==",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "2.3.6",
+ "@formatjs/fast-memoize": "2.2.7",
+ "@formatjs/icu-messageformat-parser": "2.11.4",
+ "intl-messageformat": "10.7.18",
+ "tslib": "^2.8.0"
+ },
+ "peerDependencies": {
+ "typescript": "^5.6.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@formatjs/intl-localematcher": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz",
+ "integrity": "sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==",
+ "dependencies": {
+ "tslib": "^2.8.0"
+ }
+ },
+ "node_modules/@formatjs/intl-localematcher/node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
+ },
+ "node_modules/@formatjs/intl/node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
+ },
"node_modules/@gamestdio/websocket": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@gamestdio/websocket/-/websocket-0.3.2.tgz",
@@ -2617,7 +2695,6 @@
"version": "0.19.1",
"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
"integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
- "dev": true,
"engines": {
"node": ">=18.18.0"
}
@@ -2626,7 +2703,6 @@
"version": "0.16.6",
"resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
"integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
- "dev": true,
"dependencies": {
"@humanfs/core": "^0.19.1",
"@humanwhocodes/retry": "^0.3.0"
@@ -2639,7 +2715,6 @@
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
"integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
- "dev": true,
"engines": {
"node": ">=18.18"
},
@@ -2675,7 +2750,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
"integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "dev": true,
"engines": {
"node": ">=12.22"
},
@@ -2693,7 +2767,6 @@
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz",
"integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==",
- "dev": true,
"engines": {
"node": ">=18.18"
},
@@ -4695,57 +4768,6 @@
"magic-string": "^0.25.0"
}
},
- "node_modules/@svgdotjs/svg.draggable.js": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.6.tgz",
- "integrity": "sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA==",
- "peerDependencies": {
- "@svgdotjs/svg.js": "^3.2.4"
- }
- },
- "node_modules/@svgdotjs/svg.filter.js": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/@svgdotjs/svg.filter.js/-/svg.filter.js-3.0.9.tgz",
- "integrity": "sha512-/69XMRCDoam2HgC4ldHIaDgeQf1ViHIsa0Ld4uWgiXtZ+E24DWHe/9Ib6kbNiZ7WRIdlVokUDR1Fg0kjIpkfbw==",
- "dependencies": {
- "@svgdotjs/svg.js": "^3.2.4"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/@svgdotjs/svg.js": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@svgdotjs/svg.js/-/svg.js-3.2.4.tgz",
- "integrity": "sha512-BjJ/7vWNowlX3Z8O4ywT58DqbNRyYlkk6Yz/D13aB7hGmfQTvGX4Tkgtm/ApYlu9M7lCQi15xUEidqMUmdMYwg==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Fuzzyma"
- }
- },
- "node_modules/@svgdotjs/svg.resize.js": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@svgdotjs/svg.resize.js/-/svg.resize.js-2.0.5.tgz",
- "integrity": "sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA==",
- "engines": {
- "node": ">= 14.18"
- },
- "peerDependencies": {
- "@svgdotjs/svg.js": "^3.2.4",
- "@svgdotjs/svg.select.js": "^4.0.1"
- }
- },
- "node_modules/@svgdotjs/svg.select.js": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@svgdotjs/svg.select.js/-/svg.select.js-4.0.3.tgz",
- "integrity": "sha512-qkMgso1sd2hXKd1FZ1weO7ANq12sNmQJeGDjs46QwDVsxSRcHmvWKL2NDF7Yimpwf3sl5esOLkPqtV2bQ3v/Jg==",
- "engines": {
- "node": ">= 14.18"
- },
- "peerDependencies": {
- "@svgdotjs/svg.js": "^3.2.4"
- }
- },
"node_modules/@svgr/babel-plugin-add-jsx-attribute": {
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz",
@@ -5308,10 +5330,20 @@
"@types/json-schema": "*"
}
},
+ "node_modules/@types/eslint-scope": {
+ "version": "3.7.7",
+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
+ "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
+ "peer": true,
+ "dependencies": {
+ "@types/eslint": "*",
+ "@types/estree": "*"
+ }
+ },
"node_modules/@types/estree": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
- "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="
},
"node_modules/@types/express": {
"version": "4.17.21",
@@ -5371,6 +5403,17 @@
"@types/node": "*"
}
},
+ "node_modules/@types/hoist-non-react-statics": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.7.tgz",
+ "integrity": "sha512-PQTyIulDkIDro8P+IHbKCsw7U2xxBYflVzW/FgWdCAePD9xGSidgA76/GeJ6lBKoblyhf9pBY763gbrN+1dI8g==",
+ "dependencies": {
+ "hoist-non-react-statics": "^3.3.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*"
+ }
+ },
"node_modules/@types/html-minifier-terser": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz",
@@ -6453,6 +6496,29 @@
"@webassemblyjs/ast": "1.9.0"
}
},
+ "node_modules/@webassemblyjs/helper-numbers": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",
+ "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/floating-point-hex-parser": "1.13.2",
+ "@webassemblyjs/helper-api-error": "1.13.2",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/helper-numbers/node_modules/@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
+ "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-numbers/node_modules/@webassemblyjs/helper-api-error": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
+ "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
+ "peer": true
+ },
"node_modules/@webassemblyjs/helper-wasm-bytecode": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
@@ -6702,7 +6768,6 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
"integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
- "dev": true,
"dependencies": {
"ajv": "^8.0.0"
},
@@ -6719,7 +6784,6 @@
"version": "8.12.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
"integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
- "dev": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
@@ -6734,8 +6798,7 @@
"node_modules/ajv-formats/node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
},
"node_modules/ajv-keywords": {
"version": "3.5.2",
@@ -6838,16 +6901,17 @@
}
},
"node_modules/apexcharts": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-4.0.0.tgz",
- "integrity": "sha512-6G4Zuph04abbUzzroHXkXARk0LwKdBdQQo5+zRebi+sOoj5Q/toj4z6QMB6e6w/FdkeaO1i3NH3LnCv8hcqczw==",
+ "version": "3.54.1",
+ "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.54.1.tgz",
+ "integrity": "sha512-E4et0h/J1U3r3EwS/WlqJCQIbepKbp6wGUmaAwJOMjHUP4Ci0gxanLa7FR3okx6p9coi4st6J853/Cb1NP0vpA==",
"dependencies": {
- "@svgdotjs/svg.draggable.js": "^3.0.4",
- "@svgdotjs/svg.filter.js": "^3.0.8",
- "@svgdotjs/svg.js": "^3.2.4",
- "@svgdotjs/svg.resize.js": "^2.0.2",
- "@svgdotjs/svg.select.js": "^4.0.1",
- "@yr/monotone-cubic-spline": "^1.0.3"
+ "@yr/monotone-cubic-spline": "^1.0.3",
+ "svg.draggable.js": "^2.2.2",
+ "svg.easing.js": "^2.0.0",
+ "svg.filter.js": "^2.0.2",
+ "svg.pathmorphing.js": "^0.1.3",
+ "svg.resize.js": "^1.4.3",
+ "svg.select.js": "^3.0.1"
}
},
"node_modules/aproba": {
@@ -7742,6 +7806,14 @@
}
]
},
+ "node_modules/baseline-browser-mapping": {
+ "version": "2.8.20",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.20.tgz",
+ "integrity": "sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==",
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.js"
+ }
+ },
"node_modules/batch": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
@@ -8045,9 +8117,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.25.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz",
- "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==",
+ "version": "4.27.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz",
+ "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==",
"funding": [
{
"type": "opencollective",
@@ -8062,12 +8134,12 @@
"url": "https://github.com/sponsors/ai"
}
],
- "license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001726",
- "electron-to-chromium": "^1.5.173",
- "node-releases": "^2.0.19",
- "update-browserslist-db": "^1.1.3"
+ "baseline-browser-mapping": "^2.8.19",
+ "caniuse-lite": "^1.0.30001751",
+ "electron-to-chromium": "^1.5.238",
+ "node-releases": "^2.0.26",
+ "update-browserslist-db": "^1.1.4"
},
"bin": {
"browserslist": "cli.js"
@@ -8342,9 +8414,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001727",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz",
- "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==",
+ "version": "1.0.30001751",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz",
+ "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==",
"funding": [
{
"type": "opencollective",
@@ -8358,8 +8430,7 @@
"type": "github",
"url": "https://github.com/sponsors/ai"
}
- ],
- "license": "CC-BY-4.0"
+ ]
},
"node_modules/capture-exit": {
"version": "2.0.0",
@@ -8894,6 +8965,17 @@
"url": "https://opencollective.com/core-js"
}
},
+ "node_modules/core-js-pure": {
+ "version": "3.46.0",
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.46.0.tgz",
+ "integrity": "sha512-NMCW30bHNofuhwLhYPt66OLOKTMbOhgTTatKVbaQC3KRHpTCiRIBYvtshr+NBYSnBxwAFhjW/RfJ0XbIjS16rw==",
+ "hasInstallScript": true,
+ "peer": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
"node_modules/core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
@@ -10733,10 +10815,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.5.188",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.188.tgz",
- "integrity": "sha512-pfEx5CBFAocOKNrc+i5fSvhDaI1Vr9R9aT5uX1IzM3hhdL6k649wfuUcdUd9EZnmbE1xdfA51CwqQ61CO3Xl3g==",
- "license": "ISC"
+ "version": "1.5.240",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.240.tgz",
+ "integrity": "sha512-OBwbZjWgrCOH+g6uJsA2/7Twpas2OlepS9uvByJjR2datRDuKGYeD+nP8lBBks2qnB7bGJNHDUx7c/YLaT3QMQ=="
},
"node_modules/elliptic": {
"version": "6.6.1",
@@ -10991,8 +11072,7 @@
"node_modules/es-module-lexer": {
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
- "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
- "dev": true
+ "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw=="
},
"node_modules/es-object-atoms": {
"version": "1.1.1",
@@ -11144,7 +11224,6 @@
"version": "9.27.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz",
"integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
@@ -11713,7 +11792,6 @@
"version": "8.14.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
"integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
- "dev": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -11725,7 +11803,6 @@
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -11740,7 +11817,6 @@
"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"
@@ -11756,7 +11832,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
@@ -11767,14 +11842,12 @@
"node_modules/eslint/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"node_modules/eslint/node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
- "dev": true,
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
@@ -11788,7 +11861,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
"engines": {
"node": ">=10"
},
@@ -11800,7 +11872,6 @@
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
"integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
- "dev": true,
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^5.2.0"
@@ -11816,7 +11887,6 @@
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
"integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
- "dev": true,
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
@@ -11828,7 +11898,6 @@
"version": "10.3.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
"integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
- "dev": true,
"dependencies": {
"acorn": "^8.14.0",
"acorn-jsx": "^5.3.2",
@@ -11845,7 +11914,6 @@
"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"
}
@@ -11854,7 +11922,6 @@
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
"integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
- "dev": true,
"dependencies": {
"flat-cache": "^4.0.0"
},
@@ -11866,7 +11933,6 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
"integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
- "dev": true,
"dependencies": {
"flatted": "^3.2.9",
"keyv": "^4.5.4"
@@ -11879,7 +11945,6 @@
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
"dependencies": {
"is-glob": "^4.0.3"
},
@@ -11891,7 +11956,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
"engines": {
"node": ">=8"
}
@@ -11900,7 +11964,6 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
"dependencies": {
"prelude-ls": "^1.2.1",
"type-check": "~0.4.0"
@@ -11913,7 +11976,6 @@
"version": "0.9.3",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
"integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
- "dev": true,
"dependencies": {
"@aashutoshrathi/word-wrap": "^1.2.3",
"deep-is": "^0.1.3",
@@ -11930,7 +11992,6 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
"engines": {
"node": ">=8"
}
@@ -11939,7 +12000,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true,
"engines": {
"node": ">= 0.8.0"
}
@@ -11948,7 +12008,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
"dependencies": {
"shebang-regex": "^3.0.0"
},
@@ -11960,7 +12019,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
"engines": {
"node": ">=8"
}
@@ -11969,7 +12027,6 @@
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -11981,7 +12038,6 @@
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
"dependencies": {
"prelude-ls": "^1.2.1"
},
@@ -11993,7 +12049,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
"dependencies": {
"isexe": "^2.0.0"
},
@@ -12597,7 +12652,6 @@
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz",
"integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==",
- "dev": true,
"funding": [
{
"type": "github",
@@ -13275,6 +13329,12 @@
"node": ">= 6"
}
},
+ "node_modules/glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+ "peer": true
+ },
"node_modules/global-modules": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
@@ -13643,6 +13703,14 @@
"minimalistic-crypto-utils": "^1.0.1"
}
},
+ "node_modules/hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "dependencies": {
+ "react-is": "^16.7.0"
+ }
+ },
"node_modules/hoopy": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz",
@@ -14283,6 +14351,22 @@
"node": ">=10.13.0"
}
},
+ "node_modules/intl-messageformat": {
+ "version": "10.7.18",
+ "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.18.tgz",
+ "integrity": "sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "2.3.6",
+ "@formatjs/fast-memoize": "2.2.7",
+ "@formatjs/icu-messageformat-parser": "2.11.4",
+ "tslib": "^2.8.0"
+ }
+ },
+ "node_modules/intl-messageformat/node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
+ },
"node_modules/ip": {
"version": "1.1.9",
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz",
@@ -17591,8 +17675,7 @@
"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
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
},
"node_modules/json-parse-better-errors": {
"version": "1.0.2",
@@ -17659,7 +17742,6 @@
"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"
}
@@ -20154,6 +20236,20 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/neo-react-semantic-ui-range/node_modules/typescript": {
+ "version": "4.9.5",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
+ "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
+ "optional": true,
+ "peer": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=4.2.0"
+ }
+ },
"node_modules/neo-react-semantic-ui-range/node_modules/universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
@@ -20769,9 +20865,9 @@
}
},
"node_modules/node-releases": {
- "version": "2.0.19",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
- "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="
+ "version": "2.0.26",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.26.tgz",
+ "integrity": "sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA=="
},
"node_modules/normalize-package-data": {
"version": "3.0.3",
@@ -23638,6 +23734,35 @@
"resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz",
"integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="
},
+ "node_modules/react-intl": {
+ "version": "7.1.14",
+ "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-7.1.14.tgz",
+ "integrity": "sha512-VE/0Wi/lHJlBC7APQpCzLUdIt3GB5B0GZrRW8Q+ACbkHI4j+Wwgg9J1TniN6zmLHmPH5gxXcMy+fkSPfw5p1WQ==",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "2.3.6",
+ "@formatjs/icu-messageformat-parser": "2.11.4",
+ "@formatjs/intl": "3.1.8",
+ "@types/hoist-non-react-statics": "^3.3.1",
+ "@types/react": "16 || 17 || 18 || 19",
+ "hoist-non-react-statics": "^3.3.2",
+ "intl-messageformat": "10.7.18",
+ "tslib": "^2.8.0"
+ },
+ "peerDependencies": {
+ "react": "16 || 17 || 18 || 19",
+ "typescript": "^5.6.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-intl/node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
+ },
"node_modules/react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
@@ -26175,6 +26300,89 @@
"resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz",
"integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ=="
},
+ "node_modules/svg.draggable.js": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz",
+ "integrity": "sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==",
+ "dependencies": {
+ "svg.js": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/svg.easing.js": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/svg.easing.js/-/svg.easing.js-2.0.0.tgz",
+ "integrity": "sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==",
+ "dependencies": {
+ "svg.js": ">=2.3.x"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/svg.filter.js": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/svg.filter.js/-/svg.filter.js-2.0.2.tgz",
+ "integrity": "sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==",
+ "dependencies": {
+ "svg.js": "^2.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/svg.js": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz",
+ "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA=="
+ },
+ "node_modules/svg.pathmorphing.js": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz",
+ "integrity": "sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==",
+ "dependencies": {
+ "svg.js": "^2.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/svg.resize.js": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz",
+ "integrity": "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==",
+ "dependencies": {
+ "svg.js": "^2.6.5",
+ "svg.select.js": "^2.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/svg.resize.js/node_modules/svg.select.js": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz",
+ "integrity": "sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==",
+ "dependencies": {
+ "svg.js": "^2.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/svg.select.js": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-3.0.1.tgz",
+ "integrity": "sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==",
+ "dependencies": {
+ "svg.js": "^2.6.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/svgo": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz",
@@ -26428,15 +26636,185 @@
"node": ">=6.0.0"
}
},
- "node_modules/terser/node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "node_modules/terser/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "node_modules/terser-webpack-plugin": {
+ "version": "5.3.14",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz",
+ "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "jest-worker": "^27.4.5",
+ "schema-utils": "^4.3.0",
+ "serialize-javascript": "^6.0.2",
+ "terser": "^5.31.1"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "^5.1.0"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
+ },
+ "esbuild": {
+ "optional": true
+ },
+ "uglify-js": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/acorn": {
+ "version": "8.15.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "peer": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "peer": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+ "peer": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3"
+ },
+ "peerDependencies": {
+ "ajv": "^8.8.2"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "peer": true
+ },
+ "node_modules/terser-webpack-plugin/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/jest-worker": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
+ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+ "peer": true,
+ "dependencies": {
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "peer": true
+ },
+ "node_modules/terser-webpack-plugin/node_modules/schema-utils": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz",
+ "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==",
+ "peer": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.9",
+ "ajv": "^8.9.0",
+ "ajv-formats": "^2.1.1",
+ "ajv-keywords": "^5.1.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+ "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
+ "peer": true,
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/terser-webpack-plugin/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==",
+ "peer": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/terser": {
+ "version": "5.44.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz",
+ "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/source-map": "^0.3.3",
+ "acorn": "^8.15.0",
+ "commander": "^2.20.0",
+ "source-map-support": "~0.5.20"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/terser/node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+ },
+ "node_modules/terser/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"engines": {
"node": ">=0.10.0"
}
@@ -27050,7 +27428,6 @@
"version": "5.8.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz",
"integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==",
- "dev": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -27300,9 +27677,9 @@
}
},
"node_modules/update-browserslist-db": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
- "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz",
+ "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==",
"funding": [
{
"type": "opencollective",
@@ -27953,6 +28330,54 @@
"node": ">=10.4"
}
},
+ "node_modules/webpack": {
+ "version": "5.102.1",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.102.1.tgz",
+ "integrity": "sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==",
+ "peer": true,
+ "dependencies": {
+ "@types/eslint-scope": "^3.7.7",
+ "@types/estree": "^1.0.8",
+ "@types/json-schema": "^7.0.15",
+ "@webassemblyjs/ast": "^1.14.1",
+ "@webassemblyjs/wasm-edit": "^1.14.1",
+ "@webassemblyjs/wasm-parser": "^1.14.1",
+ "acorn": "^8.15.0",
+ "acorn-import-phases": "^1.0.3",
+ "browserslist": "^4.26.3",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^5.17.3",
+ "es-module-lexer": "^1.2.1",
+ "eslint-scope": "5.1.1",
+ "events": "^3.2.0",
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.2.11",
+ "json-parse-even-better-errors": "^2.3.1",
+ "loader-runner": "^4.2.0",
+ "mime-types": "^2.1.27",
+ "neo-async": "^2.6.2",
+ "schema-utils": "^4.3.3",
+ "tapable": "^2.3.0",
+ "terser-webpack-plugin": "^5.3.11",
+ "watchpack": "^2.4.4",
+ "webpack-sources": "^3.3.3"
+ },
+ "bin": {
+ "webpack": "bin/webpack.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependenciesMeta": {
+ "webpack-cli": {
+ "optional": true
+ }
+ }
+ },
"node_modules/webpack-bundle-analyzer": {
"version": "4.10.2",
"resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz",
@@ -28793,6 +29218,273 @@
"node": ">=0.10.0"
}
},
+ "node_modules/webpack/node_modules/@webassemblyjs/ast": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz",
+ "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/helper-numbers": "1.13.2",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2"
+ }
+ },
+ "node_modules/webpack/node_modules/@webassemblyjs/helper-api-error": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
+ "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
+ "peer": true
+ },
+ "node_modules/webpack/node_modules/@webassemblyjs/helper-buffer": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
+ "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
+ "peer": true
+ },
+ "node_modules/webpack/node_modules/@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
+ "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
+ "peer": true
+ },
+ "node_modules/webpack/node_modules/@webassemblyjs/helper-wasm-section": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",
+ "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-buffer": "1.14.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/wasm-gen": "1.14.1"
+ }
+ },
+ "node_modules/webpack/node_modules/@webassemblyjs/ieee754": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",
+ "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
+ "peer": true,
+ "dependencies": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "node_modules/webpack/node_modules/@webassemblyjs/leb128": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",
+ "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
+ "peer": true,
+ "dependencies": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/webpack/node_modules/@webassemblyjs/utf8": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
+ "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
+ "peer": true
+ },
+ "node_modules/webpack/node_modules/@webassemblyjs/wasm-edit": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",
+ "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-buffer": "1.14.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/helper-wasm-section": "1.14.1",
+ "@webassemblyjs/wasm-gen": "1.14.1",
+ "@webassemblyjs/wasm-opt": "1.14.1",
+ "@webassemblyjs/wasm-parser": "1.14.1",
+ "@webassemblyjs/wast-printer": "1.14.1"
+ }
+ },
+ "node_modules/webpack/node_modules/@webassemblyjs/wasm-gen": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz",
+ "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/ieee754": "1.13.2",
+ "@webassemblyjs/leb128": "1.13.2",
+ "@webassemblyjs/utf8": "1.13.2"
+ }
+ },
+ "node_modules/webpack/node_modules/@webassemblyjs/wasm-opt": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz",
+ "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-buffer": "1.14.1",
+ "@webassemblyjs/wasm-gen": "1.14.1",
+ "@webassemblyjs/wasm-parser": "1.14.1"
+ }
+ },
+ "node_modules/webpack/node_modules/@webassemblyjs/wasm-parser": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz",
+ "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-api-error": "1.13.2",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/ieee754": "1.13.2",
+ "@webassemblyjs/leb128": "1.13.2",
+ "@webassemblyjs/utf8": "1.13.2"
+ }
+ },
+ "node_modules/webpack/node_modules/@webassemblyjs/wast-printer": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz",
+ "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/webpack/node_modules/acorn": {
+ "version": "8.15.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "peer": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/webpack/node_modules/acorn-import-phases": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz",
+ "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==",
+ "peer": true,
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "peerDependencies": {
+ "acorn": "^8.14.0"
+ }
+ },
+ "node_modules/webpack/node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "peer": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/webpack/node_modules/ajv-keywords": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+ "peer": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3"
+ },
+ "peerDependencies": {
+ "ajv": "^8.8.2"
+ }
+ },
+ "node_modules/webpack/node_modules/enhanced-resolve": {
+ "version": "5.18.3",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz",
+ "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==",
+ "peer": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "peer": true
+ },
+ "node_modules/webpack/node_modules/loader-runner": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz",
+ "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==",
+ "peer": true,
+ "engines": {
+ "node": ">=6.11.5"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/webpack/node_modules/schema-utils": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz",
+ "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==",
+ "peer": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.9",
+ "ajv": "^8.9.0",
+ "ajv-formats": "^2.1.1",
+ "ajv-keywords": "^5.1.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/webpack/node_modules/tapable": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz",
+ "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/webpack/node_modules/watchpack": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz",
+ "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==",
+ "peer": true,
+ "dependencies": {
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack/node_modules/webpack-sources": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz",
+ "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==",
+ "peer": true,
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
"node_modules/websocket-driver": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
diff --git a/src/frontend/static/frontend/package.json b/src/frontend/static/frontend/package.json
index a6869712..ebd009d0 100644
--- a/src/frontend/static/frontend/package.json
+++ b/src/frontend/static/frontend/package.json
@@ -22,11 +22,6 @@
"@babel/preset-env": "^7.27.2",
"@babel/preset-react": "^7.27.1",
"@babel/preset-typescript": "^7.27.1",
- "babel-loader": "^10.0.0",
- "babel-plugin-react-compiler": "^19.1.0-rc.2",
- "eslint-plugin-react-compiler": "^19.1.0-rc.2",
- "react-compiler-runtime": "^19.1.0-rc.2",
-
"@eslint/compat": "^1.2.8",
"@eslint/eslintrc": "^3.3.1",
"@eslint/js": "^9.27.0",
@@ -37,13 +32,17 @@
"@types/react-dom": "^18.3.5",
"@types/react-virtualized": "^9.22.2",
"@types/validator": "^13.12.3",
+ "babel-loader": "^10.0.0",
+ "babel-plugin-react-compiler": "^19.1.0-rc.2",
"css-loader": "^7.1.2",
"eslint": "^9.27.0",
"eslint-plugin-jsdoc": "^50.6.9",
"eslint-plugin-react": "^7.37.4",
+ "eslint-plugin-react-compiler": "^19.1.0-rc.2",
"eslint-plugin-react-hooks": "^5.2.0",
"globals": "^16.0.0",
"neostandard": "^0.12.1",
+ "react-compiler-runtime": "^19.1.0-rc.2",
"style-loader": "^4.0.0",
"ts-checker-rspack-plugin": "^1.1.1",
"ts-loader": "^9.5.2",
@@ -58,7 +57,7 @@
"@visx/scale": "^3.5.0",
"@visx/stats": "^3.5.0",
"@visx/tooltip": "^3.3.0",
- "apexcharts": "^4.0.0",
+ "apexcharts": "^3.52.0",
"axios": "^1.8.4",
"cytoscape": "^3.30.2",
"d3": "^7.9.0",
@@ -72,6 +71,7 @@
"react-avatar": "^5.0.3",
"react-colorful": "^5.6.1",
"react-dom": "^18.3.1",
+ "react-intl": "^7.1.14",
"react-virtualized": "^9.22.6",
"recharts": "^2.15.1",
"semantic-ui-react": "^2.1.5",
diff --git a/src/frontend/static/frontend/src/components/about-us/AboutUs.tsx b/src/frontend/static/frontend/src/components/about-us/AboutUs.tsx
index 6e26bbb3..6440da30 100644
--- a/src/frontend/static/frontend/src/components/about-us/AboutUs.tsx
+++ b/src/frontend/static/frontend/src/components/about-us/AboutUs.tsx
@@ -1,6 +1,7 @@
import React from 'react'
import { Container, Divider, Grid, Header, Image, List } from 'semantic-ui-react'
import { Base } from '../Base'
+import { useIntl } from 'react-intl'
const EMAILS: string[] = [
'mcabba@gmail.com',
@@ -13,6 +14,7 @@ const EMAILS: string[] = [
* @returns Component
*/
export const AboutUs = () => {
+ const intl = useIntl()
return (
@@ -34,13 +36,13 @@ export const AboutUs = () => {
- Multiomix is the result of interdisciplinary work between members of the following scientific institutions:
+ {intl.formatMessage({ id: 'about.description' })}
-
-
-
+
+
+
@@ -51,12 +53,12 @@ export const AboutUs = () => {
- Project coordination:
+ {intl.formatMessage({ id: 'about.coordination' })}
-
-
+
+
@@ -67,15 +69,15 @@ export const AboutUs = () => {
- Project members
+ {intl.formatMessage({ id: 'about.members.title' })}
- Main contributor: B.Comp.Sc. Genaro Camele
+ {intl.formatMessage({ id: 'about.members.main' })}
- Collaborators: Esp. Hernán Chanfreau, Dr. Sebastián Menazzi, St. Agustín Marraco, B.Comp.Sc. Julián Muhlberger, St. Ramiro Lasorsa, PhD. Waldo Hasperué
+ {intl.formatMessage({ id: 'about.members.collaborators' })}
@@ -87,10 +89,10 @@ export const AboutUs = () => {
{/* Contact */}
- Contact:
+ {intl.formatMessage({ id: 'about.contact.title' })}
- For questions or suggestions please contact us:
+ {intl.formatMessage({ id: 'about.contact.questions' })}
{EMAILS.map((email) => (
@@ -98,7 +100,7 @@ export const AboutUs = () => {
))}
- You can also contact us for creating your research institution. It will let researchers share datasets inside Multiomix.
+ {intl.formatMessage({ id: 'about.contact.institutions' })}
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/BiomarkerInferenceExperimentsPanel.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/BiomarkerInferenceExperimentsPanel.tsx
index 3c43ab0a..d4c6bf22 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/BiomarkerInferenceExperimentsPanel.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/BiomarkerInferenceExperimentsPanel.tsx
@@ -7,6 +7,7 @@ import { NewInferenceExperimentModal } from './NewInferenceExperimentModal'
import { InferenceExperimentResultModal } from './InferenceExperimentResultModal'
import ky from 'ky'
import { alertGeneralError } from '../../../../utils/util_functions'
+import { useIntl } from 'react-intl'
declare const urlBiomarkerInferenceExperimentsDetails: string
@@ -23,7 +24,7 @@ interface BiomarkerInferenceExperimentsPanelProps {
*/
export const BiomarkerInferenceExperimentsPanel = (props: BiomarkerInferenceExperimentsPanelProps) => {
const abortController = useRef(new AbortController())
-
+ const intl = useIntl()
const [openModalNewInferenceExperiment, setOpenModalNewInferenceExperiment] = useState(false)
const [openModalResultInferenceExperiment, setOpenModalResultInferenceExperiment] = useState(false)
const [selectedInferenceExperiment, setSelectedInferenceExperiment] = useState
>(null)
@@ -92,7 +93,7 @@ export const BiomarkerInferenceExperimentsPanel = (props: BiomarkerInferenceExpe
return (
}
+ closeIcon={ }
closeOnEscape={false}
centered={false}
closeOnDimmerClick={false}
@@ -100,7 +101,7 @@ export const BiomarkerInferenceExperimentsPanel = (props: BiomarkerInferenceExpe
onClose={closeStatResult}
open={openModalResultInferenceExperiment}
>
-
+
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/InferenceExperimentClinicalAttributeSelect.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/InferenceExperimentClinicalAttributeSelect.tsx
index 1ddc75a9..7b5c4baa 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/InferenceExperimentClinicalAttributeSelect.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/InferenceExperimentClinicalAttributeSelect.tsx
@@ -67,7 +67,7 @@ export const InferenceExperimentClinicalAttributeSelect = (props: InferenceExper
}, [props.selectedInferenceExperiment.id])
return (
<>
-
+
{ props.setSelectedClinicalAttribute(value as string) }}
- placeholder='Clinical attribute to group by'
+ placeholder='inference.clinicalAttribute.placeholder'
disabled={clinicalAttributesOptions.length === 0}
/>
>
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/InferenceExperimentResultMetrics.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/InferenceExperimentResultMetrics.tsx
index 405c5d1f..2d74c9bf 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/InferenceExperimentResultMetrics.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/InferenceExperimentResultMetrics.tsx
@@ -2,6 +2,7 @@ import React from 'react'
import { Header, Segment } from 'semantic-ui-react'
import { InferenceExperimentForTable } from '../../types'
import { ModelDetailsPanel } from '../ModelDetailsPanels'
+import { useIntl } from 'react-intl'
// declare const urlInferenceExperimentMetrics: string
@@ -17,15 +18,16 @@ interface InferenceExperimentResultMetricsProps {
* @returns Component
*/
export const InferenceExperimentResultMetrics = (props: InferenceExperimentResultMetricsProps) => {
+ const intl = useIntl()
return (
<>
- "{props.selectedInferenceExperiment.name}" metrics
+ {intl.formatMessage({ id: 'inference.metrics.title' }, { name: props.selectedInferenceExperiment.name })}
{/* Model details. */}
-
+ {intl.formatMessage({ id: 'inference.model.details' })}
{props.selectedInferenceExperiment.trained_model !== null &&
}
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/InferenceExperimentsTable.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/InferenceExperimentsTable.tsx
index 1cbb1fbd..946309b0 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/InferenceExperimentsTable.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/InferenceExperimentsTable.tsx
@@ -11,6 +11,7 @@ import { Nullable } from '../../../../utils/interfaces'
import { StopExperimentButton } from '../../../pipeline/all-experiments-view/StopExperimentButton'
import { DeleteButton } from '../../../common/DeleteButton'
import { TableCellSources } from '../../../common/TableCellSources'
+import { useIntl } from 'react-intl'
declare const urlBiomarkerInferenceExperiments: string
declare const urlStopInferenceExperiment: string
@@ -31,6 +32,7 @@ interface InferenceExperimentsTableProps {
* @returns Component.
*/
export const InferenceExperimentsTable = (props: InferenceExperimentsTableProps) => {
+ const intl = useIntl()
const [stoppingInferenceExperiment, setStoppingInferenceExperiment] = useState(false)
const [inferenceExperimentToStop, setInferenceExperimentToStop] = useState>(null)
@@ -109,13 +111,13 @@ export const InferenceExperimentsTable = (props: InferenceExperimentsTableProps)
return (
-
+
- Are you sure you want to stop the inference experiment {inferenceExperimentToStop.name} ?
+ {intl.formatMessage({ id: 'inference.stop.confirm' }, { name: inferenceExperimentToStop.name })}
- Cancel
+ {intl.formatMessage({ id: 'common.cancel' })}
- Stop
+ {intl.formatMessage({ id: 'common.stop' })}
@@ -141,16 +143,16 @@ export const InferenceExperimentsTable = (props: InferenceExperimentsTableProps)
return (
-
+
- Are you sure you want to delete the inference experiment {inferenceExperimentToRemove.name} ?
+ {intl.formatMessage({ id: 'inference.delete.confirm' }, { name: inferenceExperimentToRemove.name })}
- Cancel
+ {intl.formatMessage({ id: 'common.cancel' })}
- Delete
+ {intl.formatMessage({ id: 'common.delete' })}
@@ -165,24 +167,25 @@ export const InferenceExperimentsTable = (props: InferenceExperimentsTableProps)
{/* Modal to confirm deleting the InferenceExperiment */}
{getDeletionConfirmModal()}
- headerTitle='Inference experiments'
+ headerTitle={intl.formatMessage({ id: 'inference.experiments.table.title' })}
headers={[
- { name: 'Name', serverCodeToSort: 'name', width: 3 },
- { name: 'Description', serverCodeToSort: 'description', width: 4 },
- { name: 'State', serverCodeToSort: 'state', textAlign: 'center' },
- { name: 'Model', serverCodeToSort: 'model', width: 1 },
- { name: 'Date', serverCodeToSort: 'created' },
- { name: 'Datasets' },
- { name: 'Actions' }
+ { name: intl.formatMessage({ id: 'inference.table.columns.name' }), serverCodeToSort: 'name', width: 3 },
+ { name: intl.formatMessage({ id: 'inference.table.columns.description' }), serverCodeToSort: 'description', width: 4 },
+ { name: intl.formatMessage({ id: 'inference.table.columns.state' }), serverCodeToSort: 'state', textAlign: 'center' },
+ { name: intl.formatMessage({ id: 'inference.table.columns.model' }), serverCodeToSort: 'model', width: 1 },
+ { name: intl.formatMessage({ id: 'inference.table.columns.date' }), serverCodeToSort: 'created' },
+ { name: intl.formatMessage({ id: 'inference.table.columns.dataset' }) },
+ { name: intl.formatMessage({ id: 'inference.table.columns.actions' }) }
+
]}
queryParams={{ biomarker_pk: props.selectedBiomarker.id }}
defaultSortProp={{ sortField: 'created', sortOrderAscendant: false }}
showSearchInput
- searchLabel='Name'
- searchPlaceholder='Search by name or description'
+ searchLabel={intl.formatMessage({ id: 'inference.search.label' })}
+ searchPlaceholder={intl.formatMessage({ id: 'inference.search.placeholder' })}
urlToRetrieveData={urlBiomarkerInferenceExperiments}
customElements={[
-
+
{ props.setOpenModalNewInferenceExperiment(true) }}>
@@ -219,14 +222,15 @@ export const InferenceExperimentsTable = (props: InferenceExperimentsTableProps)
onClick={() => { props.openInferenceResult(inferenceExperiment) }}
className='clickable'
color='blue'
- title='See results'
+ title={intl.formatMessage({ id: 'inference.results.tooltip' })}
+
/>
)}
{/* Stop button */}
{isInProcess && (
setInferenceExperimentToStop(inferenceExperiment)}
/>
)}
@@ -235,7 +239,7 @@ export const InferenceExperimentsTable = (props: InferenceExperimentsTableProps)
{/* Todo: Revisar ownerid */}
{!isInProcess && (
setInferenceExperimentToRemove(inferenceExperiment)}
ownerId={null}
/>
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/NewInferenceExperimentModal.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/NewInferenceExperimentModal.tsx
index 22ddb004..61aaac85 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/NewInferenceExperimentModal.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/NewInferenceExperimentModal.tsx
@@ -7,6 +7,7 @@ import { SourceSelectors } from '../../../common/SourceSelectors'
import { DjangoCGDSStudy, DjangoUserFile } from '../../../../utils/django_interfaces'
import { BiomarkerTrainedModelsTable } from '../BiomarkerTrainedModelsTable'
import ky from 'ky'
+import { useIntl } from 'react-intl'
declare const urlSubmitInferenceExperiment: string
@@ -56,6 +57,7 @@ const getDefaultNewInferenceExperimentData = (): NewInferenceExperimentData => (
* @returns Component
*/
export const NewInferenceExperimentModal = (props: NewInferenceExperimentModalProps) => {
+ const intl = useIntl()
const [form, setForm] = useState(getDefaultNewInferenceExperimentData())
const [currentStep, setCurrentStep] = useState(1)
const [sendingData, setSendingData] = useState(false)
@@ -292,7 +294,7 @@ export const NewInferenceExperimentModal = (props: NewInferenceExperimentModalPr
return (
}
+ closeIcon={ }
closeOnEscape={false}
centered={false}
closeOnDimmerClick={false}
@@ -302,7 +304,7 @@ export const NewInferenceExperimentModal = (props: NewInferenceExperimentModalPr
>
- Create new inference experiment
+ {intl.formatMessage({ id: 'inference.new.title' })}
@@ -311,27 +313,30 @@ export const NewInferenceExperimentModal = (props: NewInferenceExperimentModalPr
{/* Basic data */}
-
+
+ {intl.formatMessage({ id: 'inference.new.basicData' })}
+
- Required field
+ {intl.formatMessage({ id: 'inference.new.requiredField' })}
+
@@ -341,7 +346,7 @@ export const NewInferenceExperimentModal = (props: NewInferenceExperimentModalPr
1} link onClick={() => { setCurrentStep(1) }}>
- Step 1: Trained model
+ {intl.formatMessage({ id: 'inference.new.step1' })}
- Step 2: molecules datasets
+ {intl.formatMessage({ id: 'inference.new.step2' })}
@@ -378,7 +383,7 @@ export const NewInferenceExperimentModal = (props: NewInferenceExperimentModalPr
color='red'
onClick={() => setCurrentStep(currentStep - 1)}
>
- Go back
+ {intl.formatMessage({ id: 'inference.new.goBack' })}
)}
@@ -392,7 +397,7 @@ export const NewInferenceExperimentModal = (props: NewInferenceExperimentModalPr
}}
disabled={!selectedTrainedModelIsValid}
>
- Continue
+ {intl.formatMessage({ id: 'inference.new.continue' })}
)}
@@ -406,7 +411,7 @@ export const NewInferenceExperimentModal = (props: NewInferenceExperimentModalPr
}}
disabled={!formIsValid()}
>
- Confirm
+ {intl.formatMessage({ id: 'inference.new.confirm' })}
)}
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/SamplesAndGroupsInferenceTable.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/SamplesAndGroupsInferenceTable.tsx
index 5a763c07..47a3937c 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/SamplesAndGroupsInferenceTable.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/SamplesAndGroupsInferenceTable.tsx
@@ -5,6 +5,7 @@ import { PaginatedTable } from '../../../common/PaginatedTable'
import { TableCellWithTitle } from '../../../common/TableCellWithTitle'
import { ClusterLabelsSetSelect } from '../../../common/cluster-labels/ClusterLabelsSetSelect'
import { NewClusterLabelsSetModal } from '../../../common/cluster-labels/NewClusterLabelsSetModal'
+import { useIntl } from 'react-intl'
declare const urlInferenceExperimentSamplesAndClusters: string
declare const urlInferenceExperimentSamplesAndClustersDownload: string
@@ -22,6 +23,7 @@ interface SamplesAndGroupsInferenceTableProps {
* @returns Component.
*/
export const SamplesAndGroupsInferenceTable = (props: SamplesAndGroupsInferenceTableProps) => {
+ const intl = useIntl()
const [selectedClusterSetPk, setSelectedClusterSetPk] = useState(undefined)
const [openClusterLabelsSetModal, setOpenClusterLabelsSetModal] = useState(false)
@@ -47,15 +49,16 @@ export const SamplesAndGroupsInferenceTable = (props: SamplesAndGroupsInferenceT
headers={[
- { name: 'Sample', serverCodeToSort: 'sample', width: 3, textAlign: 'center' },
- { name: 'Cluster', serverCodeToSort: 'cluster', width: 2, textAlign: 'center' }
+ { name: intl.formatMessage({ id: 'inference.table.columns.sample' }), serverCodeToSort: 'sample', width: 3, textAlign: 'center' },
+ { name: intl.formatMessage({ id: 'inference.table.columns.cluster' }), serverCodeToSort: 'cluster', width: 2, textAlign: 'center' }
+
]}
queryParams={{
inference_experiment_pk: props.selectedInferenceExperiment.id,
...extraQueryParams
}}
customElements={[
-
+
@@ -63,10 +66,10 @@ export const SamplesAndGroupsInferenceTable = (props: SamplesAndGroupsInferenceT
]}
customFilters={[
{
- label: 'Cluster',
+ label: intl.formatMessage({ id: 'inference.table.filter.cluster.label' }),
keyForServer: 'cluster',
defaultValue: '',
- placeholder: 'Filter by cluster',
+ placeholder: intl.formatMessage({ id: 'inference.table.filter.cluster.placeholder' }),
allowZero: true,
urlToRetrieveOptions: `${urlClustersUniqueInferenceExperiment}/${props.selectedInferenceExperiment.id}/`
}
@@ -74,8 +77,8 @@ export const SamplesAndGroupsInferenceTable = (props: SamplesAndGroupsInferenceT
defaultSortProp={{ sortField: 'sample', sortOrderAscendant: false }}
showSearchInput
defaultPageSize={25}
- searchLabel='Sample'
- searchPlaceholder='Search by sample'
+ searchLabel={intl.formatMessage({ id: 'inference.table.search.label' })}
+ searchPlaceholder={intl.formatMessage({ id: 'inference.table.search.placeholder' })}
urlToRetrieveData={urlInferenceExperimentSamplesAndClusters}
mapFunction={(sampleAndCluster: SampleAndCluster) => {
return (
@@ -88,7 +91,7 @@ export const SamplesAndGroupsInferenceTable = (props: SamplesAndGroupsInferenceT
/>
- {selectedTrainedModelPk !== null && (
+ {selectedTrainedModelPk !== null && (
<>
- { setOpenClusterLabelsSetModal(true) }}>Add Cluster labels
- >
+ { setOpenClusterLabelsSetModal(true) }}>{intl.formatMessage({ id: 'inference.table.addClusterLabels' })}
+ >
)}
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/SamplesAndTimeInferenceCharts.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/SamplesAndTimeInferenceCharts.tsx
index c91dd401..0c60893a 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/SamplesAndTimeInferenceCharts.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/SamplesAndTimeInferenceCharts.tsx
@@ -8,6 +8,7 @@ import { alertGeneralError } from '../../../../utils/util_functions'
import { ResultPlaceholder } from '../stat-validations/result/ResultPlaceholder'
import { BoxPlotChart } from '../../../pipeline/experiment-result/gene-gem-details/stats/BoxPlotChart'
import { COLOR_YELLOW_FILL, COLOR_YELLOW_STROKE } from '../../../../utils/constants'
+import { useIntl } from 'react-intl'
declare const urlClinicalSourceAddOrEditInferenceExperiment: string
declare const urlUnlinkClinicalSourceInferenceExperiment: string
@@ -36,6 +37,7 @@ interface SamplesAndTimeInferenceChartsProps {
* @returns Component.
*/
export const SamplesAndTimeInferenceCharts = (props: SamplesAndTimeInferenceChartsProps) => {
+ const intl = useIntl()
const abortController = useRef(new AbortController())
const [loadingChartData, setLoadingChartData] = useState(false)
const [chartData, setChartData] = useState([])
@@ -80,10 +82,10 @@ export const SamplesAndTimeInferenceCharts = (props: SamplesAndTimeInferenceChar
- No clinical attribute selected
+ {intl.formatMessage({ id: 'inference.charts.noAttribute' })}
- Please, select one in the right Select.
+ {intl.formatMessage({ id: 'inference.charts.selectAttribute' })}
)
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/SamplesAndTimeInferenceTable.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/SamplesAndTimeInferenceTable.tsx
index de57c85c..d47aa937 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/SamplesAndTimeInferenceTable.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/SamplesAndTimeInferenceTable.tsx
@@ -9,6 +9,7 @@ import { InfoPopup } from '../../../pipeline/experiment-result/gene-gem-details/
import { SamplesAndTimeInferenceCharts } from './SamplesAndTimeInferenceCharts'
import { InferenceExperimentClinicalAttributeSelect } from './InferenceExperimentClinicalAttributeSelect'
import { ClinicalSourcePopup } from '../../../pipeline/all-experiments-view/ClinicalSourcePopup'
+import { useIntl } from 'react-intl'
declare const urlInferenceExperimentSamplesAndTime: string
declare const urlClinicalSourceAddOrEditInferenceExperiment: string
@@ -28,6 +29,7 @@ interface SamplesAndTimeInferenceTableProps {
* @returns Component.
*/
export const SamplesAndTimeInferenceTable = (props: SamplesAndTimeInferenceTableProps) => {
+ const intl = useIntl()
const [activeMenuItem, setActiveMenuItem] = useState<'table' | 'charts'>('charts') // TODO: change to 'table'
const [selectedRangeSetPk, setSelectedClusterSetPk] = useState(undefined)
const [openRangeLabelsSetModal, setOpenRangeLabelsSetModal] = useState(false)
@@ -48,8 +50,9 @@ export const SamplesAndTimeInferenceTable = (props: SamplesAndTimeInferenceTable
return (
headers={[
- { name: 'Sample', serverCodeToSort: 'sample', width: 3, textAlign: 'center' },
- { name: 'Predicted time', serverCodeToSort: 'prediction', width: 2, textAlign: 'center' }
+ { name: intl.formatMessage({ id: 'inference.timeTable.columns.sample' }), serverCodeToSort: 'sample', width: 3, textAlign: 'center' },
+ { name: intl.formatMessage({ id: 'inference.timeTable.columns.predictedTime' }), serverCodeToSort: 'prediction', width: 2, textAlign: 'center' }
+
]}
queryParams={{
inference_experiment_pk: props.selectedInferenceExperiment.id,
@@ -57,18 +60,18 @@ export const SamplesAndTimeInferenceTable = (props: SamplesAndTimeInferenceTable
}}
customFilters={[
{
- label: 'Range',
+ label: intl.formatMessage({ id: 'inference.timeTable.filter.range.label' }),
keyForServer: 'prediction',
defaultValue: '',
- placeholder: 'Filter by range',
+ placeholder: intl.formatMessage({ id: 'inference.timeTable.filter.range.placeholder' }),
disabledFunction: () => selectedRangeSetPk === undefined
}
]}
defaultSortProp={{ sortField: 'sample', sortOrderAscendant: false }}
showSearchInput
defaultPageSize={25}
- searchLabel='Sample'
- searchPlaceholder='Search by sample'
+ searchLabel={intl.formatMessage({ id: 'inference.timeTable.search.label' })}
+ searchPlaceholder={intl.formatMessage({ id: 'inference.timeTable.search.placeholder' })}
searchWidth={5}
entriesSelectWidth={3}
urlToRetrieveData={urlInferenceExperimentSamplesAndTime}
@@ -116,10 +119,10 @@ export const SamplesAndTimeInferenceTable = (props: SamplesAndTimeInferenceTable
active={activeMenuItem === 'charts'}
onClick={() => setActiveMenuItem('charts')}
>
- Charts
+ {intl.formatMessage({ id: 'inference.timeTable.menu.table' })}
- {selectedTrainedModelPk !== null && (
+ {selectedTrainedModelPk !== null && (
<>
{/* Clinical attribute select */}
- {(activeMenuItem === 'charts' && props.selectedInferenceExperiment.clinical_source_id) && (
+ {(activeMenuItem === 'charts' && props.selectedInferenceExperiment.clinical_source_id) && (
<>
- >
+ >
)}
{/* Range Select */}
@@ -176,8 +179,8 @@ export const SamplesAndTimeInferenceTable = (props: SamplesAndTimeInferenceTable
setSelectedClusterSetPk={setSelectedClusterSetPk}
/>
- { setOpenRangeLabelsSetModal(true) }}>Add Range labels
- >
+ { setOpenRangeLabelsSetModal(true) }}>{intl.formatMessage({ id: 'inference.timeTable.addRangeLabels' })}
+ >
)}
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/CurrentMoleculeDetails.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/CurrentMoleculeDetails.tsx
index 4f463eeb..50231679 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/CurrentMoleculeDetails.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/CurrentMoleculeDetails.tsx
@@ -11,6 +11,7 @@ import { GeneAssociationsNetworkPanel } from './genes/GeneAssociationsNetworkPan
import { MiRNADrugsPanel } from '../../../pipeline/experiment-result/gene-gem-details/MiRNADrugsPanel'
import { MiRNADiseasesPanel } from '../../../pipeline/experiment-result/gene-gem-details/MiRNADiseasesPanel'
import { ActionableCancerGenesPanel } from './genes/ActionableCancerGenesPanel'
+import { useIntl } from 'react-intl'
// const MENU_DEFAULT: ActiveBiomarkerMoleculeItemMenu = ActiveBiomarkerMoleculeItemMenu.DETAILS // TODO: use this
const MENU_DEFAULT: ActiveBiomarkerMoleculeItemMenu = ActiveBiomarkerMoleculeItemMenu.DETAILS
@@ -31,6 +32,7 @@ interface CurrentMoleculeDetailsProps {
*/
export const CurrentMoleculeDetails = (props: CurrentMoleculeDetailsProps) => {
const [activeItem, setActiveItem] = useState(MENU_DEFAULT)
+ const intl = useIntl()
/** Effect to set the active item to DETAILS when the selected molecule changes. */
useEffect(() => {
@@ -98,10 +100,10 @@ export const CurrentMoleculeDetails = (props: CurrentMoleculeDetailsProps) => {
- No molecule selected
+ {intl.formatMessage({ id: 'currentMoleculeDetails.noSelection' })}
- Select one in the left panel
+ {intl.formatMessage({ id: 'currentMoleculeDetails.selectOne' })}
)
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/MoleculesDetailsMenu.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/MoleculesDetailsMenu.tsx
index 5a98008b..ea118238 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/MoleculesDetailsMenu.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/MoleculesDetailsMenu.tsx
@@ -3,6 +3,7 @@ import { Menu } from 'semantic-ui-react'
import { InfoPopup } from '../../../pipeline/experiment-result/gene-gem-details/InfoPopup'
import { ActiveBiomarkerMoleculeItemMenu, BiomarkerMolecule } from '../../types'
import { MoleculeType } from '../../../../utils/interfaces'
+import { useIntl } from 'react-intl'
/** MoleculesDetailsMenu props. */
interface MoleculesDetailsMenuProps {
@@ -29,13 +30,13 @@ interface ItemMenuProp {
*/
export const MoleculesDetailsMenu = (props: MoleculesDetailsMenuProps) => {
const isGene = [MoleculeType.MRNA, MoleculeType.CNA].includes(props.selectedMolecule.type)
-
+ const intl = useIntl()
/**
* Array with all the items and conditions
*/
const items: ItemMenuProp[] = [
{
- name: 'Details',
+ name: intl.formatMessage({ id: 'moleculesDetailsMenu.details' }),
onClick: () => props.setActiveItem(ActiveBiomarkerMoleculeItemMenu.DETAILS),
isActive: props.activeItem === ActiveBiomarkerMoleculeItemMenu.DETAILS,
popupInfo: `Details of ${props.selectedMolecule.identifier} obtained from different standardized sources`,
@@ -50,14 +51,14 @@ export const MoleculesDetailsMenu = (props: MoleculesDetailsMenuProps) => {
// isVisible: isGene
// },
{
- name: 'Gene associations network',
+ name: intl.formatMessage({ id: 'moleculesDetailsMenu.geneAssociations' }),
onClick: () => props.setActiveItem(ActiveBiomarkerMoleculeItemMenu.GENE_ASSOCIATIONS_NETWORK),
isActive: props.activeItem === ActiveBiomarkerMoleculeItemMenu.GENE_ASSOCIATIONS_NETWORK,
popupInfo: 'It shows the network of gene associations of the genes of this biomarker',
isVisible: isGene
},
{
- name: 'Gene Ontology',
+ name: intl.formatMessage({ id: 'moleculesDetailsMenu.geneOntology' }),
onClick: () => props.setActiveItem(ActiveBiomarkerMoleculeItemMenu.GENE_ONTOLOGY),
isActive: props.activeItem === ActiveBiomarkerMoleculeItemMenu.GENE_ONTOLOGY,
popupInfo: 'Gene Ontology (GO) is a powerful tool for understanding the biological processes, molecular functions, and cellular components associated with a gene',
@@ -72,21 +73,21 @@ export const MoleculesDetailsMenu = (props: MoleculesDetailsMenuProps) => {
// isVisible: isGene
// },
{
- name: 'Diseases',
+ name: intl.formatMessage({ id: 'moleculesDetailsMenu.diseases' }),
onClick: () => props.setActiveItem(ActiveBiomarkerMoleculeItemMenu.DISEASES),
isActive: props.activeItem === ActiveBiomarkerMoleculeItemMenu.DISEASES,
popupInfo: 'Interactions of the molecule with diseases that have been reported in the literature',
isVisible: [MoleculeType.MIRNA].includes(props.selectedMolecule.type)
},
{
- name: 'Drugs',
+ name: intl.formatMessage({ id: 'moleculesDetailsMenu.drugs' }),
onClick: () => props.setActiveItem(ActiveBiomarkerMoleculeItemMenu.DRUGS),
isActive: props.activeItem === ActiveBiomarkerMoleculeItemMenu.DRUGS,
popupInfo: 'Interactions of the molecule with drugs that have been reported in the literature',
isVisible: [MoleculeType.MIRNA].includes(props.selectedMolecule.type)
},
{
- name: 'miRNA-Gene interactions',
+ name: intl.formatMessage({ id: 'moleculesDetailsMenu.miRNAGeneInteractions' }),
onClick: () => props.setActiveItem(ActiveBiomarkerMoleculeItemMenu.MIRNA_GENE_INTERACTIONS),
isActive: props.activeItem === ActiveBiomarkerMoleculeItemMenu.MIRNA_GENE_INTERACTIONS,
popupInfo: 'Different miRNA-Gene interactions that have been reported in the literature along with the associated mirDIP score and Pubmed sources',
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/MoleculesTable.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/MoleculesTable.tsx
index dc1b9d23..b58bb72e 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/MoleculesTable.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/MoleculesTable.tsx
@@ -5,6 +5,7 @@ import { PaginatedTable } from '../../../common/PaginatedTable'
import { TableCellWithTitle } from '../../../common/TableCellWithTitle'
import { MoleculeTypeLabel } from '../../labels/MoleculeTypeLabel'
import { MoleculeType, Nullable } from '../../../../utils/interfaces'
+import { useIntl } from 'react-intl'
declare const urlBiomarkerMolecules: string
@@ -18,35 +19,35 @@ interface MoleculesTableProps {
openMoleculeDetails: (molecule: BiomarkerMolecule) => void
}
-const moleculesTypesOptions: DropdownItemProps[] = [
- { key: MoleculeType.MRNA, text: 'mRNA', value: MoleculeType.MRNA },
- { key: MoleculeType.MIRNA, text: 'miRNA', value: MoleculeType.MIRNA },
- { key: MoleculeType.CNA, text: 'CNA', value: MoleculeType.CNA },
- { key: MoleculeType.METHYLATION, text: 'Methylation', value: MoleculeType.METHYLATION }
-]
-
/**
* Renders a Table with the samples and the cluster where they belong.
* @param props Component props.
* @returns Component.
*/
export const MoleculesTable = (props: MoleculesTableProps) => {
+ const intl = useIntl()
+ const moleculesTypesOptions: DropdownItemProps[] = [
+ { key: MoleculeType.MRNA, text: intl.formatMessage({ id: 'moleculesTable.type.mrna' }), value: MoleculeType.MRNA },
+ { key: MoleculeType.MIRNA, text: intl.formatMessage({ id: 'moleculesTable.type.mirna' }), value: MoleculeType.MIRNA },
+ { key: MoleculeType.CNA, text: intl.formatMessage({ id: 'moleculesTable.type.cna' }), value: MoleculeType.CNA },
+ { key: MoleculeType.METHYLATION, text: intl.formatMessage({ id: 'moleculesTable.type.methylation' }), value: MoleculeType.METHYLATION }
+ ]
return (
headers={[
- { name: 'Identifier', serverCodeToSort: 'identifier', width: 3 },
- { name: 'Type', serverCodeToSort: 'type', width: 2 },
- { name: 'Actions' }
+ { name: intl.formatMessage({ id: 'moleculesTable.header.identifier' }), serverCodeToSort: 'identifier', width: 3 },
+ { name: intl.formatMessage({ id: 'moleculesTable.header.type' }), serverCodeToSort: 'type', width: 2 },
+ { name: intl.formatMessage({ id: 'moleculesTable.header.actions' }) }
]}
queryParams={{ biomarker_pk: props.selectedBiomarker.id }}
customFilters={[
- { label: 'Type', keyForServer: 'type', defaultValue: '', options: moleculesTypesOptions, width: 6 }
+ { label: intl.formatMessage({ id: 'moleculesTable.header.type' }), keyForServer: 'type', defaultValue: '', options: moleculesTypesOptions, width: 6 }
]}
defaultSortProp={{ sortField: 'identifier', sortOrderAscendant: true }}
showSearchInput
defaultPageSize={25}
- searchLabel='Sample'
- searchPlaceholder='Search by identifier'
+ searchLabel={intl.formatMessage({ id: 'moleculesTable.search.label' })}
+ searchPlaceholder={intl.formatMessage({ id: 'moleculesTable.search.placeholder' })}
urlToRetrieveData={urlBiomarkerMolecules}
searchWidth={6}
entriesSelectWidth={3}
@@ -61,7 +62,7 @@ export const MoleculesTable = (props: MoleculesTableProps) => {
name='chart bar'
className='clickable'
color='blue'
- title='Details'
+ title={intl.formatMessage({ id: 'moleculesTable.details' })}
onClick={() => props.openMoleculeDetails(molecule)}
/>
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/gene-ontology/GeneOntologyCytoscapeChart.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/gene-ontology/GeneOntologyCytoscapeChart.tsx
index 9b277bba..d1c94702 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/gene-ontology/GeneOntologyCytoscapeChart.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/gene-ontology/GeneOntologyCytoscapeChart.tsx
@@ -6,6 +6,7 @@ import { alertGeneralError } from '../../../../../utils/util_functions'
import { OntologyRelationTermToTermFilter, CytoscapeElements, OntologyType, GoTermToTermSearchParams, GoTermToTermForm } from './types'
import { Button, Form, Grid } from 'semantic-ui-react'
import '../../../../../css/cytoscape.css'
+import { useIntl } from 'react-intl'
declare const urlGOTermToTerms: string
@@ -20,18 +21,27 @@ const COLORS_BY_ONTOLOGY_RELATION = {
* Renders the legends for the Cytoscape instance.
* @returns Component.
*/
-const CytoscapeLegends = () => (
-
-
Relations
-
-
- {Object.entries(COLORS_BY_ONTOLOGY_RELATION).map(([_, [relationDescription, color]]) => (
- {relationDescription}
- ))}
-
+const CytoscapeLegends = () => {
+ const intl = useIntl()
+
+ return (
+
+
+ {intl.formatMessage({ id: 'geneOntology.legend.relations' })}
+
+
+
+ {Object.entries(COLORS_BY_ONTOLOGY_RELATION).map(([_, [relationDescription, color]]) => (
+
+
+ {relationDescription}
+
+ ))}
+
+
-
-)
+ )
+}
/** GeneOntologyCytoscapeChart props. */
interface GeneOntologyCytoscapeChartProps {
@@ -47,6 +57,7 @@ interface GeneOntologyCytoscapeChartProps {
* @returns Component.
*/
export const GeneOntologyCytoscapeChart = (props: GeneOntologyCytoscapeChartProps) => {
+ const intl = useIntl()
const abortControllerTerm = useRef(new AbortController())
const [termsRelatedToTermForm, setTermsRelatedToTermForm] = useState
({
relations: [OntologyRelationTermToTermFilter.PART_OF, OntologyRelationTermToTermFilter.REGULATES, OntologyRelationTermToTermFilter.HAS_PART],
@@ -188,12 +199,12 @@ export const GeneOntologyCytoscapeChart = (props: GeneOntologyCytoscapeChartProp
{/* Go back button. */}
-
+
{/* Form for termsRelatedToTermForm */}
- Relations
+ {intl.formatMessage({ id: 'geneOntology.form.relations' })}
{Object.entries(OntologyRelationTermToTermFilter)
.filter(([_key, value]) => value !== OntologyRelationTermToTermFilter.IS_A)
.map(([key, value]) => (
@@ -206,7 +217,7 @@ export const GeneOntologyCytoscapeChart = (props: GeneOntologyCytoscapeChartProp
))}
- Ontology type
+ {intl.formatMessage({ id: 'geneOntology.form.ontologyType' })}
{Object.entries(OntologyType).map(([key, value]) => (
handleChangesInForm('general_depth', parseInt(e.target.value))}
/>
handleChangesInForm('hierarchical_depth_to_children', parseInt(e.target.value))}
/>
handleChangesInForm('to_root', termsRelatedToTermForm.to_root === 1 ? 0 : 1)}
/>
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/gene-ontology/GeneOntologyPanel.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/gene-ontology/GeneOntologyPanel.tsx
index 433a06f1..b851a8e3 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/gene-ontology/GeneOntologyPanel.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/gene-ontology/GeneOntologyPanel.tsx
@@ -7,6 +7,7 @@ import { Nullable } from '../../../../../utils/interfaces'
import { GeneOntologyCytoscapeChart } from './GeneOntologyCytoscapeChart'
import { GORelationType, GeneToTermFilterType, GeneToTermForm, GeneToTermSearchParams, GoTerm, OntologyType, TermsRelatedToGene } from './types'
import { debounce } from 'lodash'
+import { useIntl } from 'react-intl'
// Defined in biomarkers.html
declare const urlGOGeneToTerms: string
@@ -18,6 +19,7 @@ interface GeneOntologyPanelProps {
}
export const GeneOntologyPanel = (props: GeneOntologyPanelProps) => {
+ const intl = useIntl()
const abortController = useRef(new AbortController())
const [terms, setTerms] = useState>(null)
const [selectedTerm, setSelectedTerm] = useState>(null)
@@ -121,9 +123,9 @@ export const GeneOntologyPanel = (props: GeneOntologyPanelProps) => {
- Filter type
+ {intl.formatMessage({ id: 'geneOntology.panel.filterType' })}
handleChangesInForm('filter_type', GeneToTermFilterType.INTERSECTION)}
@@ -131,7 +133,7 @@ export const GeneOntologyPanel = (props: GeneOntologyPanelProps) => {
handleChangesInForm('filter_type', GeneToTermFilterType.UNION)}
@@ -139,7 +141,7 @@ export const GeneOntologyPanel = (props: GeneOntologyPanelProps) => {
handleChangesInForm('filter_type', GeneToTermFilterType.ENRICHMENT)}
@@ -149,17 +151,17 @@ export const GeneOntologyPanel = (props: GeneOntologyPanelProps) => {
{termsRelatedToGeneForm.filter_type === GeneToTermFilterType.ENRICHMENT && (
<>
handleChangesInForm('p_value_threshold', value)}
/>
handleChangesInForm('correction_method', value)}
@@ -168,9 +170,9 @@ export const GeneOntologyPanel = (props: GeneOntologyPanelProps) => {
)}
- Relation type
+ {intl.formatMessage({ id: 'geneOntology.panel.relationType' })}
handleCheckboxChange('relation_type', value)}
@@ -178,7 +180,7 @@ export const GeneOntologyPanel = (props: GeneOntologyPanelProps) => {
handleCheckboxChange('relation_type', value)}
@@ -186,7 +188,7 @@ export const GeneOntologyPanel = (props: GeneOntologyPanelProps) => {
handleCheckboxChange('relation_type', value)}
@@ -194,7 +196,7 @@ export const GeneOntologyPanel = (props: GeneOntologyPanelProps) => {
handleCheckboxChange('relation_type', value)}
@@ -205,7 +207,7 @@ export const GeneOntologyPanel = (props: GeneOntologyPanelProps) => {
Ontology type
handleCheckboxChange('ontology_type', value)}
@@ -213,7 +215,7 @@ export const GeneOntologyPanel = (props: GeneOntologyPanelProps) => {
handleCheckboxChange('ontology_type', value)}
@@ -221,7 +223,7 @@ export const GeneOntologyPanel = (props: GeneOntologyPanelProps) => {
handleCheckboxChange('ontology_type', value)}
@@ -238,8 +240,8 @@ export const GeneOntologyPanel = (props: GeneOntologyPanelProps) => {
- Term
- Ontology type
+ {intl.formatMessage({ id: 'geneOntology.panel.table.term' })}
+ {intl.formatMessage({ id: 'geneOntology.panel.table.ontologyType' })}
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/genes/ActionableCancerGenesPanel.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/genes/ActionableCancerGenesPanel.tsx
index 64c4b305..34ff45e3 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/genes/ActionableCancerGenesPanel.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/genes/ActionableCancerGenesPanel.tsx
@@ -1,7 +1,10 @@
import React from 'react'
+import { useIntl } from 'react-intl'
export const ActionableCancerGenesPanel = () => {
+ const intl = useIntl()
+
return (
- ActionableCancerGenesPanel
+ {intl.formatMessage({ id: 'actionableCancerGenes.panel.title' })}
)
}
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/genes/GeneAssociationsNetworkPanel.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/genes/GeneAssociationsNetworkPanel.tsx
index a7d5db85..6b08ec48 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/genes/GeneAssociationsNetworkPanel.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/genes/GeneAssociationsNetworkPanel.tsx
@@ -7,6 +7,7 @@ import { alertGeneralError } from '../../../../../utils/util_functions'
import { InfoPopup } from '../../../../pipeline/experiment-result/gene-gem-details/InfoPopup'
import { ExternalLink } from '../../../../common/ExternalLink'
import '../../../../../css/cytoscape.css'
+import { useIntl } from 'react-intl'
// Defined in biomarkers.html
declare const urlGeneAssociationsNetwork: string
@@ -25,18 +26,27 @@ const COLORS_BY_STRING_RELATION = {
* Renders the legends for the Cytoscape instance.
* @returns Component.
*/
-const CytoscapeLegends = () => (
-
-
Relations
-
-
- {Object.entries(COLORS_BY_STRING_RELATION).map(([_, [relationDescription, color]]) => (
- {relationDescription}
- ))}
-
+const CytoscapeLegends = () => {
+ const intl = useIntl()
+
+ return (
+
+
+ {intl.formatMessage({ id: 'geneAssociations.legend.relations' })}
+
+
+
+ {Object.entries(COLORS_BY_STRING_RELATION).map(([relationKey, [_, color]]) => (
+
+
+ {intl.formatMessage({ id: `geneAssociations.relation.${relationKey}` })}
+
+ ))}
+
+
-
-)
+ )
+}
/** GeneAssociationsNetworkPanel props. */
interface GeneAssociationsNetworkPanelProps {
@@ -45,6 +55,7 @@ interface GeneAssociationsNetworkPanelProps {
}
export const GeneAssociationsNetworkPanel = (props: GeneAssociationsNetworkPanelProps) => {
+ const intl = useIntl()
const abortControllerTerm = useRef(new AbortController())
const [minCombinedScore, setMinCombinedScore] = React.useState(950)
@@ -251,7 +262,7 @@ export const GeneAssociationsNetworkPanel = (props: GeneAssociationsNetworkPanel
- Min combined score
+ {intl.formatMessage({ id: 'geneAssociations.form.minCombinedScore' })}
{
+ const intl = useIntl()
const abortController = useRef(new AbortController())
const [geneData, setGeneData] = useState>(null)
const [loadingData, setLoadingData] = useState(false)
@@ -337,9 +340,10 @@ export const GeneInformation = (props: GeneInformationProps) => {
- No Details found
+ {intl.formatMessage({ id: 'geneInformation.noDetails.title' })}
+
- No Details were found for this gene.
+ {intl.formatMessage({ id: 'geneInformation.noDetails.subtitle' })}
@@ -361,11 +365,11 @@ export const GeneInformation = (props: GeneInformationProps) => {
extra={(
- GRCh37:
+ {intl.formatMessage({ id: 'geneInformation.grch37' })}:
chr{geneData.chromosome} : {geneData.start_GRCh37}-{geneData.end_GRCh37}
- GRCh38:
+ {intl.formatMessage({ id: 'geneInformation.grch38' })}:
chr{geneData.chromosome} : {geneData.start_position}-{geneData.end_position}
@@ -375,7 +379,7 @@ export const GeneInformation = (props: GeneInformationProps) => {
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/genes/MetabolicPathways.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/genes/MetabolicPathways.tsx
index d6e65974..23b93f5e 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/genes/MetabolicPathways.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/genes/MetabolicPathways.tsx
@@ -6,6 +6,7 @@ import { ResultPlaceholder } from '../../stat-validations/result/ResultPlacehold
import { DropdownItemProps, Grid, Header, Input, List, SearchProps, Select } from 'semantic-ui-react'
import { InputLabel } from '../../../../common/InputLabel'
import { InfoPopup } from '../../../../pipeline/experiment-result/gene-gem-details/InfoPopup'
+import { useIntl } from 'react-intl'
declare const urlMetabolicPathways: string
@@ -38,6 +39,7 @@ interface MetabolicPathwaysProps {
* @returns Component.
*/
export const MetabolicPathways = (props: MetabolicPathwaysProps) => {
+ const intl = useIntl()
const abortController = useRef(new AbortController())
const [searchInput, setSearchInput] = useState
('')
const [selectedSource, setSelectedSource] = useState(undefined)
@@ -93,21 +95,21 @@ export const MetabolicPathways = (props: MetabolicPathwaysProps) => {
- Metabolic pathways
+ {intl.formatMessage({ id: 'metabolicPathways.header' })}
-
+
{
{
+ const intl = useIntl()
const abortController = useRef(new AbortController())
const [pathwaysData, setPathwaysData] = useState>(null)
const [loadingData, setLoadingData] = useState(false)
@@ -76,9 +78,9 @@ export const PathwaysInformation = (props: PathwaysInformationProps) => {
- No pathways found
+ {intl.formatMessage({ id: 'pathwaysInformation.noPathways.title' })}
- No pathways were found for this gene.
+ {intl.formatMessage({ id: 'pathwaysInformation.noPathways.subtitle' })}
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/methylation/MethylationInformation.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/methylation/MethylationInformation.tsx
index 7a6b81f1..09b68827 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/methylation/MethylationInformation.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/methylation/MethylationInformation.tsx
@@ -5,6 +5,7 @@ import { DjangoMethylationDataJSON } from '../../../../../utils/django_interface
import { Nullable, KySearchParams } from '../../../../../utils/interfaces'
import { InfoPopup } from '../../../../pipeline/experiment-result/gene-gem-details/InfoPopup'
import { ExternalLink } from '../../../../common/ExternalLink'
+import { useIntl } from 'react-intl'
declare const urlMethylationData: string
@@ -25,6 +26,7 @@ interface MethylationInformationProps {
* @returns Component.
*/
export const MethylationInformation = (props: MethylationInformationProps) => {
+ const intl = useIntl()
const [methylationData, setMethylationData] = useState>(null)
const [loading, setLoading] = useState(true)
@@ -76,7 +78,8 @@ export const MethylationInformation = (props: MethylationInformationProps) => {
- No details found for this methylation site
+ {intl.formatMessage({ id: 'methylationInformation.noDetails' })}
+
@@ -103,12 +106,12 @@ export const MethylationInformation = (props: MethylationInformationProps) => {
- Methylation Information
+ {intl.formatMessage({ id: 'methylationInformation.header' })}
@@ -119,7 +122,7 @@ export const MethylationInformation = (props: MethylationInformationProps) => {
{methylationData.chromosome_position && (
- Chr. Position: {methylationData.chromosome_position}
+ {intl.formatMessage({ id: 'methylationInformation.chromosomePosition' })} {methylationData.chromosome_position}
)}
@@ -128,20 +131,23 @@ export const MethylationInformation = (props: MethylationInformationProps) => {
- List of islands related to the methylation site according to the UCSC database
+ {intl.formatMessage({ id: 'methylationInformation.infoPopup.ucsc' })}{' '}
+
+ UCSC
+
)}
onTop
/>
- UCSC CpG Islands
+ {intl.formatMessage({ id: 'methylationInformation.header.ucsc' })}
- CpG Island
- Relation
+ {intl.formatMessage({ id: 'methylationInformation.table.cpgIsland' })}
+ {intl.formatMessage({ id: 'methylationInformation.table.relation' })}
@@ -165,14 +171,14 @@ export const MethylationInformation = (props: MethylationInformationProps) => {
onEvent='hover'
/>
- Related genes
+ {intl.formatMessage({ id: 'methylationInformation.header.genes' })}
- Gene
- Regions
+ {intl.formatMessage({ id: 'methylationInformation.table.gene' })}
+ {intl.formatMessage({ id: 'methylationInformation.table.regions' })}
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/NewStatisticalValidationModal.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/NewStatisticalValidationModal.tsx
index 7ca63dde..ebd9abf9 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/NewStatisticalValidationModal.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/NewStatisticalValidationModal.tsx
@@ -7,6 +7,7 @@ import { SourceSelectors } from '../../../common/SourceSelectors'
import { DjangoCGDSStudy, DjangoUserFile } from '../../../../utils/django_interfaces'
import { BiomarkerTrainedModelsTable } from '../BiomarkerTrainedModelsTable'
import ky from 'ky'
+import { useIntl } from 'react-intl'
declare const urlNewStatisticalValidation: string
@@ -59,6 +60,7 @@ const getDefaultNewStatisticalValidationData = (): NewStatisticalValidationData
* @returns Component
*/
export const NewStatisticalValidationModal = (props: NewStatisticalValidationModalProps) => {
+ const intl = useIntl()
const [form, setForm] = useState(getDefaultNewStatisticalValidationData())
const [currentStep, setCurrentStep] = useState(1)
const [sendingData, setSendingData] = useState(false)
@@ -309,7 +311,7 @@ export const NewStatisticalValidationModal = (props: NewStatisticalValidationMod
>
- Create new statistical validation
+ {intl.formatMessage({ id: 'newStatValidation.header.create' })}
@@ -318,27 +320,27 @@ export const NewStatisticalValidationModal = (props: NewStatisticalValidationMod
{/* Basic data */}
-
+ {intl.formatMessage({ id: 'newStatValidation.header.basicData' })}
- Required field
+ {intl.formatMessage({ id: 'newStatValidation.form.requiredField' })}
@@ -348,7 +350,7 @@ export const NewStatisticalValidationModal = (props: NewStatisticalValidationMod
1} link onClick={() => { setCurrentStep(1) }}>
- Step 1: Trained model
+ {intl.formatMessage({ id: 'newStatValidation.step.trainedModel' })}
- Step 2: Validation datasets
+ {intl.formatMessage({ id: 'newStatValidation.step.validationDatasets' })}
@@ -385,7 +387,7 @@ export const NewStatisticalValidationModal = (props: NewStatisticalValidationMod
color='red'
onClick={() => setCurrentStep(currentStep - 1)}
>
- Go back
+ {intl.formatMessage({ id: 'common.cancel' })}
)}
@@ -399,7 +401,7 @@ export const NewStatisticalValidationModal = (props: NewStatisticalValidationMod
}}
disabled={!selectedTrainedModelIsValid}
>
- Continue
+ {intl.formatMessage({ id: 'newStatValidation.button.continue' })}
)}
@@ -413,7 +415,7 @@ export const NewStatisticalValidationModal = (props: NewStatisticalValidationMod
}}
disabled={!formIsValid()}
>
- Confirm
+ {intl.formatMessage({ id: 'newStatValidation.button.confirm' })}
)}
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/StatisticalValidationMenu.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/StatisticalValidationMenu.tsx
index 784a68b3..38c15668 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/StatisticalValidationMenu.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/StatisticalValidationMenu.tsx
@@ -2,6 +2,7 @@ import React from 'react'
import { Menu } from 'semantic-ui-react'
import { StatisticalValidationForTable, ActiveStatValidationsItemMenu } from '../../types'
import { InfoPopup } from '../../../pipeline/experiment-result/gene-gem-details/InfoPopup'
+import { useIntl } from 'react-intl'
/** StatisticalValidationMenu props. */
interface StatisticalValidationMenuProps {
@@ -19,13 +20,14 @@ interface StatisticalValidationMenuProps {
* @returns Component.
*/
export const StatisticalValidationMenu = (props: StatisticalValidationMenuProps) => {
+ const intl = useIntl()
return (
props.setActiveItem(ActiveStatValidationsItemMenu.BEST_FEATURES)}
>
- Most significant features
+ {intl.formatMessage({ id: 'statValidationMenu.bestFeatures' })}
props.setActiveItem(ActiveStatValidationsItemMenu.KAPLAN_MEIER)}
>
- Kaplan-Meier
+ {intl.formatMessage({ id: 'statValidationMenu.kaplanMeier' })}
props.setActiveItem(ActiveStatValidationsItemMenu.HEATMAP)}
>
- Heatmap
+ {intl.formatMessage({ id: 'statValidationMenu.heatmap' })}
{
+ const intl = useIntl()
const [stoppingStatValidation, setStoppingStatValidation] = useState(false)
const [statValidationToStop, setStatValidationToStop] = useState>(null)
@@ -109,13 +111,13 @@ export const StatisticalValidationsTable = (props: StatisticalValidationsTablePr
return (
-
+
- Are you sure you want to stop the statistical validation {statValidationToStop.name} ?
+ {intl.formatMessage({ id: 'statValidationsTable.stopValidation.confirm' }, { name: statValidationToStop.name })}?
- Cancel
+ {intl.formatMessage({ id: 'common.cancel' })}
- Stop
+ {intl.formatMessage({ id: 'common.stop' })}
@@ -141,16 +143,16 @@ export const StatisticalValidationsTable = (props: StatisticalValidationsTablePr
return (
-
+
- Are you sure you want to delete the statistical validation {statValidationToRemove.name} ?
+ {intl.formatMessage({ id: 'statValidationsTable.deleteValidation.confirm' }, { name: statValidationToRemove.name })}?
- Cancel
+ {intl.formatMessage({ id: 'common.cancel' })}
- Delete
+ {intl.formatMessage({ id: 'common.delete' })}
@@ -167,24 +169,24 @@ export const StatisticalValidationsTable = (props: StatisticalValidationsTablePr
{/* Table */}
- headerTitle='Statistical validations'
+ headerTitle={intl.formatMessage({ id: 'statValidationsTable.headerTitle' })}
headers={[
- { name: 'Name', serverCodeToSort: 'name', width: 3 },
- { name: 'Description', serverCodeToSort: 'description', width: 4 },
- { name: 'State', serverCodeToSort: 'state', textAlign: 'center' },
- { name: 'Model', textAlign: 'center', width: 2 },
- { name: 'Date', serverCodeToSort: 'created' },
- { name: 'Datasets' },
+ { name: intl.formatMessage({ id: 'statValidationsTable.headers.name' }), serverCodeToSort: 'name', width: 3 },
+ { name: intl.formatMessage({ id: 'statValidationsTable.headers.description' }), serverCodeToSort: 'description', width: 4 },
+ { name: intl.formatMessage({ id: 'statValidationsTable.headers.state' }), serverCodeToSort: 'state', textAlign: 'center' },
+ { name: intl.formatMessage({ id: 'statValidationsTable.headers.model' }), textAlign: 'center', width: 2 },
+ { name: intl.formatMessage({ id: 'statValidationsTable.headers.date' }), serverCodeToSort: 'created' },
+ { name: intl.formatMessage({ id: 'statValidationsTable.headers.datasets' }) },
{ name: 'Actions' }
]}
queryParams={{ biomarker_pk: props.selectedBiomarker.id }}
defaultSortProp={{ sortField: 'created', sortOrderAscendant: false }}
showSearchInput
- searchLabel='Name'
- searchPlaceholder='Search by name or description'
+ searchLabel={intl.formatMessage({ id: 'statValidationsTable.search.label' })}
+ searchPlaceholder={intl.formatMessage({ id: 'statValidationsTable.search.placeholder' })}
urlToRetrieveData={urlBiomarkerStatisticalValidations}
customElements={[
-
+
{ props.setOpenModalNewStatValidation(true) }}>
@@ -223,14 +225,14 @@ export const StatisticalValidationsTable = (props: StatisticalValidationsTablePr
onClick={() => { props.openStatResult(statisticalValidation) }}
className='clickable'
color='blue'
- title='See results'
+ title={intl.formatMessage({ id: 'statValidationsTable.actions.seeResults' })}
/>
)}
{/* Stop button */}
{isInProcess && (
setStatValidationToStop(statisticalValidation)}
/>
)}
@@ -239,7 +241,7 @@ export const StatisticalValidationsTable = (props: StatisticalValidationsTablePr
{/** Todo: revisar ownerId */}
{!isInProcess && (
setStatValidationToRemove(statisticalValidation)}
ownerId={null}
/>
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/SamplesAndGroupsTable.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/SamplesAndGroupsTable.tsx
index 751b26b3..4b370bd6 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/SamplesAndGroupsTable.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/SamplesAndGroupsTable.tsx
@@ -3,6 +3,7 @@ import { SampleAndCluster, StatisticalValidationForTable } from '../../../types'
import { Table } from 'semantic-ui-react'
import { PaginatedTable } from '../../../../common/PaginatedTable'
import { TableCellWithTitle } from '../../../../common/TableCellWithTitle'
+import { useIntl } from 'react-intl'
declare const urlStatisticalValidationSamplesAndClusters: string
declare const urlClustersUniqueStatValidation: string
@@ -19,19 +20,20 @@ interface SamplesAndGroupsTableProps {
*/
export const SamplesAndGroupsTable = (props: SamplesAndGroupsTableProps) => {
/* TODO: implement here the colors for background too */
+ const intl = useIntl()
return (
headers={[
- { name: 'Sample', serverCodeToSort: 'sample', width: 3 },
- { name: 'Cluster', serverCodeToSort: 'cluster', width: 2 }
+ { name: intl.formatMessage({ id: 'samplesAndGroupsTable.header.sample' }), serverCodeToSort: 'sample', width: 3 },
+ { name: intl.formatMessage({ id: 'samplesAndGroupsTable.header.cluster' }), serverCodeToSort: 'cluster', width: 2 }
]}
queryParams={{ statistical_validation_pk: props.selectedStatisticalValidation.id }}
customFilters={[
{
- label: 'Cluster',
+ label: intl.formatMessage({ id: 'samplesAndGroupsTable.filter.cluster' }),
keyForServer: 'cluster',
defaultValue: '',
- placeholder: 'Filter by cluster',
+ placeholder: intl.formatMessage({ id: 'samplesAndGroupsTable.filter.cluster.placeholder' }),
allowZero: true,
urlToRetrieveOptions: `${urlClustersUniqueStatValidation}/${props.selectedStatisticalValidation.id}/`
}
@@ -39,8 +41,8 @@ export const SamplesAndGroupsTable = (props: SamplesAndGroupsTableProps) => {
defaultSortProp={{ sortField: 'sample', sortOrderAscendant: false }}
showSearchInput
defaultPageSize={25}
- searchLabel='Sample'
- searchPlaceholder='Search by sample'
+ searchLabel={intl.formatMessage({ id: 'samplesAndGroupsTable.search.label' })}
+ searchPlaceholder={intl.formatMessage({ id: 'samplesAndGroupsTable.search.placeholder' })}
urlToRetrieveData={urlStatisticalValidationSamplesAndClusters}
mapFunction={(sampleAndCluster: SampleAndCluster) => {
return (
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/StatisticalValidationResultBestFeatures.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/StatisticalValidationResultBestFeatures.tsx
index 737039f3..ff1ded6d 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/StatisticalValidationResultBestFeatures.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/StatisticalValidationResultBestFeatures.tsx
@@ -5,6 +5,7 @@ import ky from 'ky'
import { alertGeneralError } from '../../../../../utils/util_functions'
import ReactApexChart from 'react-apexcharts'
import { ResultPlaceholder } from '../result/ResultPlaceholder'
+import { useIntl } from 'react-intl'
/** Epsilon to add to the min/max value of coefficients. */
const EPSILON = 1
@@ -23,6 +24,7 @@ interface StatisticalValidationResultBestFeaturesProps {
* @returns Component
*/
export const StatisticalValidationResultBestFeatures = (props: StatisticalValidationResultBestFeaturesProps) => {
+ const intl = useIntl()
const abortController = useRef(new AbortController())
const [loading, setLoading] = useState(false)
const [statValidationData, setStatValidationData] = useState>(null)
@@ -76,7 +78,7 @@ export const StatisticalValidationResultBestFeatures = (props: StatisticalValida
const moleculesNames = statValidationData ? statValidationData.map((elem) => elem.identifier) : []
const chartSeries: ApexAxisChartSeries = [{
- name: 'Coefficient',
+ name: intl.formatMessage({ id: 'statValidationBestFeatures.series.coefficient' }),
data: coefficients
}]
@@ -111,7 +113,8 @@ export const StatisticalValidationResultBestFeatures = (props: StatisticalValida
},
yaxis: {
title: {
- text: 'Molecule'
+ text: intl.formatMessage({ id: 'statValidationBestFeatures.axis.molecule' })
+
}
},
tooltip: {
@@ -125,14 +128,16 @@ export const StatisticalValidationResultBestFeatures = (props: StatisticalValida
xaxis: {
categories: moleculesNames,
title: {
- text: 'Coefficient'
+ text: intl.formatMessage({ id: 'statValidationBestFeatures.axis.coefficient' })
+
},
type: 'category',
min: Math.ceil(Math.min(...coefficients) - EPSILON),
max: Math.ceil(Math.max(...coefficients) + EPSILON)
},
noData: {
- text: 'No significant features found for this statistical validation'
+ text: intl.formatMessage({ id: 'statValidationBestFeatures.noData' })
+
}
}
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/StatisticalValidationResultKaplanMeier.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/StatisticalValidationResultKaplanMeier.tsx
index f8451a88..8cbc556f 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/StatisticalValidationResultKaplanMeier.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/StatisticalValidationResultKaplanMeier.tsx
@@ -9,6 +9,7 @@ import { InfoPopup } from '../../../../pipeline/experiment-result/gene-gem-detai
import { ResultPlaceholder } from './ResultPlaceholder'
import { SamplesAndGroupsTable } from './SamplesAndGroupsTable'
import { debounce } from 'lodash'
+import { useIntl } from 'react-intl'
declare const urlStatisticalValidationKaplanMeierClustering: string
declare const urlStatisticalValidationKaplanMeierByAttr: string
@@ -30,6 +31,7 @@ type KaplanMeierStrategy = 'clustering' | 'clinical_attribute'
* @returns Component
*/
export const StatisticalValidationResultKaplanMeier = (props: StatisticalValidationResultKaplanMeierProps) => {
+ const intl = useIntl()
const abortController = useRef(new AbortController())
const hasClusteringModel = props.selectedStatisticalValidation.fitness_function === FitnessFunction.CLUSTERING
const [loadingKaplanMeier, setLoadingKaplanMeier] = useState(false)
@@ -174,8 +176,8 @@ export const StatisticalValidationResultKaplanMeier = (props: StatisticalValidat
data={kaplanMeierData.groups}
height={480}
width={600}
- xAxisLabel='Time'
- yAxisLabel='Probability'
+ xAxisLabel={intl.formatMessage({ id: 'kaplanMeier.axis.time' })}
+ yAxisLabel={intl.formatMessage({ id: 'kaplanMeier.axis.probability' })}
/>
)
}
@@ -194,16 +196,16 @@ export const StatisticalValidationResultKaplanMeier = (props: StatisticalValidat
{/* Clustering metrics. */}
-
+ {intl.formatMessage({ id: 'kaplanMeier.header.clusteringMetrics' })}
setKaplanMeierStrategy('clustering')}
active={kaplanMeierStrategy === 'clustering'}
>
- Clustering model
+ {intl.formatMessage({ id: 'kaplanMeier.button.clusteringModel' })}
setKaplanMeierStrategy('clinical_attribute')}
active={kaplanMeierStrategy === 'clinical_attribute'}
>
- Group by clinical
+ {intl.formatMessage({ id: 'kaplanMeier.button.groupByClinical' })}
-
+
)}
{/* Clinical attribute select */}
- {(!hasClusteringModel || kaplanMeierStrategy === 'clinical_attribute') && (
+ {(!hasClusteringModel || kaplanMeierStrategy === 'clinical_attribute') && (
{ setSelectedClinicalAttribute(value as string) }}
- placeholder='Clinical attribute to group by'
+ placeholder={intl.formatMessage({ id: 'kaplanMeier.select.clinicalAttribute' })}
disabled={clinicalAttributesOptions.length === 0}
- />
+ />
)}
{/* TODO: add InfoPopups for every metric and their interpretation. */}
{kaplanMeierData ? kaplanMeierData.concordance_index.toFixed(3) : '-'}
- C-Index
+ {intl.formatMessage({ id: 'kaplanMeier.metric.cIndex' })}
{kaplanMeierData ? kaplanMeierData.log_likelihood.toFixed(3) : '-'}
- Partial Log-Likelihood
+ {intl.formatMessage({ id: 'kaplanMeier.metric.partialLogLikelihood' })}
{/* Samples and clusters modal. */}
- {(hasClusteringModel && kaplanMeierStrategy === 'clustering' && kaplanMeierData !== null) && (
+ {(hasClusteringModel && kaplanMeierStrategy === 'clustering' && kaplanMeierData !== null) && (
setShowSamplesAndClusters(false)}
onOpen={() => setShowSamplesAndClusters(true)}
closeIcon={ }
open={showSamplesAndClusters}
- trigger={See samples and clusters }
+ trigger={{intl.formatMessage({ id: 'kaplanMeier.button.seeSamplesAndClusters' })} }
>
- Samples and clusters
+ {intl.formatMessage({ id: 'kaplanMeier.modal.samplesAndClusters' })}
- setShowSamplesAndClusters(false)}>Close
+ setShowSamplesAndClusters(false)}>{intl.formatMessage({ id: 'common.close' })}
-
+
)}
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/StatisticalValidationResultMetrics.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/StatisticalValidationResultMetrics.tsx
index a749ca9c..a69fb325 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/StatisticalValidationResultMetrics.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/StatisticalValidationResultMetrics.tsx
@@ -5,6 +5,7 @@ import ky from 'ky'
import { alertGeneralError } from '../../../../../utils/util_functions'
import { Header, Placeholder, Segment, Statistic } from 'semantic-ui-react'
import { ModelDetailsPanel } from '../../ModelDetailsPanels'
+import { useIntl } from 'react-intl'
declare const urlStatisticalValidationMetrics: string
@@ -20,6 +21,7 @@ interface StatisticalValidationResultMetricsProps {
* @returns Component
*/
export const StatisticalValidationResultMetrics = (props: StatisticalValidationResultMetricsProps) => {
+ const intl = useIntl()
const abortController = useRef(new AbortController())
const [loadingMetrics, setLoadingMetrics] = useState(false)
const [statValidationData, setStatValidationData] = useState>(null)
@@ -72,21 +74,21 @@ export const StatisticalValidationResultMetrics = (props: StatisticalValidationR
return (
<>
- "{props.selectedStatisticalValidation.name}" metrics
+ "{props.selectedStatisticalValidation.name}" {intl.formatMessage({ id: 'statValidationMetrics.header.metrics' })}
{/* Model details. */}
-
+ {intl.formatMessage({ id: 'statValidationMetrics.header.modelDetails' })}
{props.selectedStatisticalValidation.trained_model !== null &&
}
{/* Result metrics data. */}
- {!isClustering && (
+ {!isClustering && (
- {loadingMetrics && (
+ {loadingMetrics && (
@@ -96,28 +98,28 @@ export const StatisticalValidationResultMetrics = (props: StatisticalValidationR
-
+
)}
- {(!loadingMetrics && statValidationData !== null) && (
+ {(!loadingMetrics && statValidationData !== null) && (
<>
-
+ {intl.formatMessage({ id: 'statValidationMetrics.header.validationMetrics' })}
{statValidationData.mean_squared_error ? statValidationData.mean_squared_error.toFixed(3) : '-'}
- MSE
+ {intl.formatMessage({ id: 'statValidationMetrics.metric.mse' })}
{statValidationData.c_index ? statValidationData.c_index.toFixed(3) : '-'}
- C-Index
+ {intl.formatMessage({ id: 'statValidationMetrics.metric.cIndex' })}
{statValidationData.r2_score ? statValidationData.r2_score.toFixed(3) : '-'}
- R2 score
+ {intl.formatMessage({ id: 'statValidationMetrics.metric.r2Score' })}
- >
+ >
)}
-
+
)}
>
)
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/trained-models/NewClusteringModelForm.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/trained-models/NewClusteringModelForm.tsx
index cdbf9014..dc12fc04 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/trained-models/NewClusteringModelForm.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/trained-models/NewClusteringModelForm.tsx
@@ -4,6 +4,7 @@ import { clusteringAlgorithmOptions, clusteringMetricOptions, clusteringScoringM
import { ClusteringMetric, ClusteringParameters } from '../../types'
import { InfoPopup } from '../../../pipeline/experiment-result/gene-gem-details/InfoPopup'
import { InputLabel } from '../../../common/InputLabel'
+import { useIntl } from 'react-intl'
interface NewClusteringModelFormProps {
/** Getter of the selected params to handle in the form. */
@@ -15,22 +16,16 @@ interface NewClusteringModelFormProps {
}
export const NewClusteringModelForm = (props: NewClusteringModelFormProps) => {
+ const intl = useIntl()
return (
<>
+
- K-Means: Groups data by minimizing intra-cluster variance; effective for clustering RNA and miRNA expression profiles.
- Spectral Clustering: Uses graph-based similarity to identify complex patterns; ideal for integrating methylation and CNA data.
- BK-Means: A hierarchical variation of K-Means, suitable for layered clustering of clinical and multi-omics datasets.
- Ward’s Method: Minimizes variance in hierarchical clustering; well-suited for combining RNA and methylation data in integrated analyses.
- >
- )}
+ content={intl.formatMessage({ id: 'newClusteringForm.info.algorithm' })}
onTop={false}
onEvent='hover'
noBorder
@@ -39,7 +34,7 @@ export const NewClusteringModelForm = (props: NewClusteringModelFormProps) => {
)}
options={clusteringAlgorithmOptions}
- placeholder='Select an algorithm'
+ placeholder={intl.formatMessage({ id: 'newClusteringForm.placeholder.algorithm' })}
name='algorithm'
value={props.parameters.algorithm}
onChange={props.handleChangeParams}
@@ -48,16 +43,16 @@ export const NewClusteringModelForm = (props: NewClusteringModelFormProps) => {
{ props.handleChangeOptimalNClusters(checked ?? false) }}
- label='Search for the optimal number of clusters'
+ label={intl.formatMessage({ id: 'newClusteringForm.label.searchOptimalClusters' })}
/>
{!props.parameters.lookForOptimalNClusters && (
+
{
fluid
selectOnBlur={false}
label={(
-
+
- Cox Regression: A proportional hazards model to identify associations between multi-omics features (RNA, miRNA, methylation) and clinical outcomes over time.
- Log-Rank Test: A non-parametric test to compare the survival distributions of two or more groups; currently not available.
- >
- )}
+ content={intl.formatMessage({ id: 'newClusteringForm.info.metric' })}
onTop={false}
onEvent='hover'
noBorder
@@ -93,7 +83,7 @@ export const NewClusteringModelForm = (props: NewClusteringModelFormProps) => {
)}
options={clusteringMetricOptions}
- placeholder='Select a metric'
+ placeholder={intl.formatMessage({ id: 'newClusteringForm.placeholder.metric' })}
name='metric'
value={props.parameters.metric}
onChange={props.handleChangeParams}
@@ -105,14 +95,9 @@ export const NewClusteringModelForm = (props: NewClusteringModelFormProps) => {
fluid
selectOnBlur={false}
label={(
-
+
- C-Index: A measure of concordance between predicted and observed survival outcomes; higher values indicate better model performance.
- Log Likelihood: The probability of observing the data given the model; lower values indicate better model performance.
- >
- )}
+ content={intl.formatMessage({ id: 'newClusteringForm.info.scoringMethod' })}
onTop={false}
onEvent='hover'
noBorder
@@ -121,7 +106,7 @@ export const NewClusteringModelForm = (props: NewClusteringModelFormProps) => {
)}
options={clusteringScoringMethodOptions}
- placeholder='Select a method'
+ placeholder={intl.formatMessage({ id: 'newClusteringForm.placeholder.scoringMethod' })}
name='scoringMethod'
value={props.parameters.scoringMethod}
onChange={props.handleChangeParams}
@@ -131,9 +116,9 @@ export const NewClusteringModelForm = (props: NewClusteringModelFormProps) => {
+
{
/>
)}
- placeholder='An integer number'
+ placeholder={intl.formatMessage({ id: 'newClusteringForm.placeholder.integer' })}
type='number'
step={1}
min={0}
@@ -152,9 +137,9 @@ export const NewClusteringModelForm = (props: NewClusteringModelFormProps) => {
+
{
/>
)}
- placeholder='An integer number'
+ placeholder={intl.formatMessage({ id: 'newClusteringForm.placeholder.integer' })}
type='number'
step={0.1}
min={0}
diff --git a/src/frontend/static/frontend/src/locales/en.ts b/src/frontend/static/frontend/src/locales/en.ts
new file mode 100644
index 00000000..116f72a4
--- /dev/null
+++ b/src/frontend/static/frontend/src/locales/en.ts
@@ -0,0 +1,303 @@
+export default {
+ // common actions
+ 'common.cancel': 'Cancel',
+ 'common.delete': 'Delete',
+ 'common.stop': 'Stop',
+ 'common.save': 'Save',
+ 'common.close': 'Close',
+
+ // Auth/user
+ 'auth.login': 'Log in',
+ 'auth.greeting': 'Hi, {username}',
+ 'auth.editProfile': 'Edit profile',
+ 'auth.logout': 'Exit',
+
+ // Menús
+ 'menu.analysis': 'Analysis',
+ 'menu.gem': 'GEM',
+ 'menu.gem.tooltip': 'Gene Expression Modulation',
+ 'menu.biomarkers': 'Biomarkers',
+ 'menu.datasets': 'Datasets',
+ 'menu.multiomix': 'Multiomix',
+ 'menu.cbioportal': 'cBioPortal',
+ 'menu.institutions': 'Institutions',
+ 'menu.admin': 'Admin',
+ 'menu.admin.genes': 'Database: Genes',
+ 'menu.about': 'About us',
+ 'menu.faq': 'Frequently Asked Questions',
+ 'menu.opensource': 'Open Source',
+
+ // About us
+ 'about.description': 'Multiomix is the result of interdisciplinary work between members of the following scientific institutions:',
+ 'about.institution.caeti': 'CAETI - Universidad Abierta Interamericana',
+ 'about.institution.ciniba': 'CINIBA - Faculty of Medical Sciences - UNLP',
+ 'about.institution.lidi': 'LIDI - Faculty of Informatics - UNLP',
+
+ 'about.coordination': 'Project coordination:',
+ 'about.coordinator.Abba': 'PhD Martín Abba',
+ 'about.coordinator.Butti': 'Dr. MSc. Matias Butti',
+
+ 'about.members.title': 'Project members:',
+ 'about.members.main': 'Main contributor: B.Comp.Sc. Genaro Camele',
+ 'about.members.collaborators': 'Collaborators: Esp. Hernán Chanfreau, Dr. Sebastián Menazzi, St. Agustín Marraco, B.Comp.Sc. Julián Muhlberger, St. Ramiro Lasorsa, PhD. Waldo Hasperué',
+
+ 'about.contact.title': 'Contact:',
+ 'about.contact.questions': 'For questions or suggestions please contact us:',
+ 'about.contact.institutions': 'You can also contact us for creating your research institution. It will let researchers share datasets inside Multiomix.',
+
+ // BIOMARKERS
+ // 1.BiomarkerInferenceExperimentsPanel.tsx
+ 'inference.experiment.title': 'Inference experiment "{name}"',
+ // 2.InferenceExperimentClinicalAttributeSelect.tsx label
+ 'inference.clinicalAttribute.label': 'Group by clinical attribute',
+ 'inference.clinicalAttribute.placeholder': 'Clinical attribute to group by',
+ // 3.InferenceExperimentResultMetrics.tsx
+ 'inference.metrics.title': '"{name}" metrics',
+ 'inference.model.details': 'Model details',
+ // 5.InferenceExperimentsTable.tsx
+ 'inference.stop.title': 'Stop inference experiment',
+ 'inference.stop.confirm': 'Are you sure you want to stop the inference experiment "{name}"?',
+ 'inference.stop.cancel': '{common.cancel}',
+ 'inference.stop.button': '{common.stop}',
+
+ 'inference.delete.title': 'Delete experiment',
+ 'inference.delete.confirm': 'Are you sure you want to delete the inference experiment "{name}"?',
+ 'inference.delete.cancel': '{common.cancel}',
+ 'inference.delete.button': '{common.delete}',
+
+ 'inference.table.title': 'Inference experiments',
+ 'inference.table.columns.name': 'Name',
+ 'inference.table.columns.description': 'Description',
+ 'inference.table.columns.state': 'State',
+ 'inference.table.columns.model': 'Model',
+ 'inference.table.columns.date': 'Date',
+ 'inference.table.columns.dataset': 'Datasets',
+ 'inference.table.columns.actions': 'Actions',
+
+ 'inference.search.label': 'Name',
+ 'inference.search.placeholder': 'Search by name or description',
+
+ 'inference.new.title': 'New inference experiment',
+ 'inference.results.title': 'See results',
+ 'inference.results.tooltip': 'View experiment results',
+ // 6.NewInferenceExperimentModal.tsx
+ 'inference.newInference.title': 'Create new inference experiment',
+ 'inference.new.basicData': 'Basic data',
+ 'inference.new.name': 'Name',
+ 'inference.new.description': 'Description (optional)',
+ 'inference.new.requiredField': 'Required field',
+ 'inference.new.step1': 'Step 1: Trained model',
+ 'inference.new.step2': 'Step 2: molecules datasets',
+ 'inference.new.goBack': 'Go back',
+ 'inference.new.continue': 'Continue',
+ 'inference.new.confirm': 'Confirm',
+ // 7.SamplesAndGroupsInferenceTable.tsx
+ 'inference.table.columns.sample': 'Sample',
+ 'inference.table.columns.cluster': 'Cluster',
+ 'inference.table.download.tooltip': 'Download results in a CSV file',
+ 'inference.table.filter.cluster.label': 'Cluster',
+ 'inference.table.filter.cluster.placeholder': 'Filter by cluster',
+ 'inference.table.search.label': 'Sample',
+ 'inference.table.search.placeholder': 'Search by sample',
+ 'inference.table.addClusterLabels': 'Add Cluster labels',
+ // 8.SamplesAndTimeInferenceCharts.tsx
+ 'inference.charts.noAttribute': 'No clinical attribute selected',
+ 'inference.charts.selectAttribute': 'Please, select one in the right Select.',
+ // 9.SamplesAndTimeInferenceTable.tsx
+ 'inference.timeTable.columns.sample': 'Sample',
+ 'inference.timeTable.columns.predictedTime': 'Predicted time',
+ 'inference.timeTable.filter.range.label': 'Range',
+ 'inference.timeTable.filter.range.placeholder': 'Filter by range',
+ 'inference.timeTable.search.label': 'Sample',
+ 'inference.timeTable.search.placeholder': 'Search by sample',
+ 'inference.timeTable.menu.table': 'Table',
+ 'inference.timeTable.menu.charts': 'Charts',
+ 'inference.timeTable.menu.table.info': 'Table with all the samples and their predicted hazard/survival time',
+ 'inference.timeTable.menu.charts.info': 'Shows some charts with the samples and their predicted hazard/survival time grouped by some condition',
+ 'inference.timeTable.addRangeLabels': 'Add Range labels',
+ // 10.molecules/GeneOntologyCytoscapeChart.tsx
+ 'geneOntology.goBack': 'Go back',
+ 'geneOntology.legend.relations': 'Relations',
+ 'geneOntology.form.relations': 'Relations',
+ 'geneOntology.form.ontologyType': 'Ontology type',
+ 'geneOntology.form.generalDepth': 'General depth',
+ 'geneOntology.form.hierarchicalDepth': 'Hierarchical depth to children',
+ 'geneOntology.form.toRoot': 'To root',
+ 'geneOntology.relation.hasPart': 'Has part',
+ 'geneOntology.relation.isA': 'Is a',
+ 'geneOntology.relation.partOf': 'Part of',
+ 'geneOntology.relation.regulates': 'Regulates',
+ // 11.GeneOntologyPanel
+ 'geneOntology.panel.filterType': 'Filter type',
+ 'geneOntology.panel.filterType.intersection': 'Intersection',
+ 'geneOntology.panel.filterType.union': 'Union',
+ 'geneOntology.panel.filterType.enrichment': 'Enrichment',
+ 'geneOntology.panel.pValueThreshold': 'P-value threshold',
+ 'geneOntology.panel.correctionMethod': 'Correction method',
+ 'geneOntology.panel.correctionMethod.analytical': 'Analytical',
+ 'geneOntology.panel.correctionMethod.bonferroni': 'Bonferroni',
+ 'geneOntology.panel.correctionMethod.falseDiscoveryRate': 'False discovery rate',
+ 'geneOntology.panel.relationType': 'Relation type',
+ 'geneOntology.panel.relationType.enables': 'Enables',
+ 'geneOntology.panel.relationType.involvedIn': 'Involved in',
+ 'geneOntology.panel.relationType.partOf': 'Part of',
+ 'geneOntology.panel.relationType.locatedIn': 'Located in',
+ 'geneOntology.panel.ontologyType': 'Ontology type',
+ 'geneOntology.panel.ontologyType.biologicalProcess': 'Biological process',
+ 'geneOntology.panel.ontologyType.molecularFunction': 'Molecular function',
+ 'geneOntology.panel.ontologyType.cellularComponent': 'Cellular component',
+ 'geneOntology.panel.table.term': 'Term',
+ 'geneOntology.panel.table.ontologyType': 'Ontology type',
+ // 12.GENES.ActionableCancerGenesPanel.tsx
+ 'actionableCancerGenes.panel.title': 'Actionable Cancer Genes Panel',
+ // 13.GeneAssociationsNetworkPanel
+ 'geneAssociations.legend.relations': 'Relations',
+ 'geneAssociations.relation.fusion': 'Fusion',
+ 'geneAssociations.relation.coOccurrence': 'Co-occurrence',
+ 'geneAssociations.relation.experimental': 'Experimental',
+ 'geneAssociations.relation.textMining': 'Text mining',
+ 'geneAssociations.relation.database': 'Database',
+ 'geneAssociations.relation.coExpression': 'Co-expression',
+ 'geneAssociations.form.minCombinedScore': 'Min combined score',
+ 'geneAssociations.infoPopup.text': 'The combined score is computed by combining the probabilities from the different evidence channels and corrected for the probability of randomly observing an interaction. For a more detailed description please see von Mering, et al. Nucleic Acids Res. 2005',
+ // 14.GeneInformation.tsx
+ 'geneInformation.noDetails.title': 'No Details found',
+ 'geneInformation.noDetails.subtitle': 'No Details were found for this gene.',
+ 'geneInformation.summary': 'Summary',
+ 'geneInformation.grch37': 'GRCh37',
+ 'geneInformation.grch38': 'GRCh38',
+ // 15.MetabolicPathwaysPanel.tsx
+ 'metabolicPathways.infoPopup': 'List of genes that are involved in a pathway for a given database',
+ 'metabolicPathways.header': 'Metabolic pathways',
+ 'metabolicPathways.selectSource': 'Select a source',
+ 'metabolicPathways.sourcePlaceholder': 'Source',
+ 'metabolicPathways.searchPlaceholder': 'Search',
+ // 16.PathwaysInformation.tsx
+ 'pathwaysInformation.noPathways.title': 'No pathways found',
+ 'pathwaysInformation.noPathways.subtitle': 'No pathways were found for this gene.',
+ // 17.MethylationInformation.tsx
+ 'methylationInformation.noDetails': 'No details found for this methylation site',
+ 'methylationInformation.infoPopup.aliases': 'Methylation aliases and chromosome position',
+ 'methylationInformation.header': 'Methylation Information',
+ 'methylationInformation.chromosomePosition': 'Chr. Position:',
+ 'methylationInformation.infoPopup.ucsc': 'List of islands related to the methylation site according to the UCSC database',
+ 'methylationInformation.header.ucsc': 'UCSC CpG Islands',
+ 'methylationInformation.table.cpgIsland': 'CpG Island',
+ 'methylationInformation.table.relation': 'Relation',
+ 'methylationInformation.infoPopup.genes': 'Genes related to this methylation site and the regions where the methylation site is located. These regions, according to the NCBI RefSeq database, can be: 5UTR=5\' untranslated region between the Transcription Start Site (TTS) and ATG start site, 3UTR=3\' untranslated region between the stop codon and poly A signal, exon_#, TSS200=1-200 bp 5\' the TSS, or TS1500=200-1500 bp 5\' of the TSS',
+ 'methylationInformation.header.genes': 'Related genes',
+ 'methylationInformation.table.gene': 'Gene',
+ 'methylationInformation.table.regions': 'Regions',
+ // 18.CurrentMoleculeDetails.tsx
+ 'currentMoleculeDetails.noSelection': 'No molecule selected',
+ 'currentMoleculeDetails.selectOne': 'Select one in the left panel',
+ // 19.MoleculesDetailsMenu.tsx
+ 'moleculesDetailsMenu.details': 'Details',
+ 'moleculesDetailsMenu.details.info': 'Details of {identifier} obtained from different standardized sources',
+ 'moleculesDetailsMenu.geneAssociations': 'Gene associations network',
+ 'moleculesDetailsMenu.geneAssociations.info': 'It shows the network of gene associations of the genes of this biomarker',
+ 'moleculesDetailsMenu.geneOntology': 'Gene Ontology',
+ 'moleculesDetailsMenu.geneOntology.info': 'Gene Ontology (GO) is a powerful tool for understanding the biological processes, molecular functions, and cellular components associated with a gene',
+ 'moleculesDetailsMenu.diseases': 'Diseases',
+ 'moleculesDetailsMenu.diseases.info': 'Interactions of the molecule with diseases that have been reported in the literature',
+ 'moleculesDetailsMenu.drugs': 'Drugs',
+ 'moleculesDetailsMenu.drugs.info': 'Interactions of the molecule with drugs that have been reported in the literature',
+ 'moleculesDetailsMenu.miRNAGeneInteractions': 'miRNA-Gene interactions',
+ 'moleculesDetailsMenu.miRNAGeneInteractions.info': 'Different miRNA-Gene interactions that have been reported in the literature along with the associated mirDIP score and Pubmed sources',
+ // 20.MoleculesTable.tsx
+ 'moleculesTable.type.mrna': 'mRNA',
+ 'moleculesTable.type.mirna': 'miRNA',
+ 'moleculesTable.type.cna': 'CNA',
+ 'moleculesTable.type.methylation': 'Methylation',
+ 'moleculesTable.header.identifier': 'Identifier',
+ 'moleculesTable.header.type': 'Type',
+ 'moleculesTable.header.actions': 'Actions',
+ 'moleculesTable.search.label': 'Sample',
+ 'moleculesTable.search.placeholder': 'Search by identifier',
+ 'moleculesTable.details': 'Details',
+ // 21.SamplesAndGroupsTable.tsx
+ 'samplesAndGroupsTable.header.sample': 'Sample',
+ 'samplesAndGroupsTable.header.cluster': 'Cluster',
+ 'samplesAndGroupsTable.filter.cluster': 'Cluster',
+ 'samplesAndGroupsTable.filter.cluster.placeholder': 'Filter by cluster',
+ 'samplesAndGroupsTable.search.label': 'Sample',
+ 'samplesAndGroupsTable.search.placeholder': 'Search by sample',
+ // 22.StatisticalValidationResultBestFeatures.tsx
+ 'statValidationBestFeatures.series.coefficient': 'Coefficient',
+ 'statValidationBestFeatures.axis.molecule': 'Molecule',
+ 'statValidationBestFeatures.axis.coefficient': 'Coefficient',
+ 'statValidationBestFeatures.noData': 'No significant features found for this statistical validation',
+ // 23.StatisticalValidationResultKaplanMeier.tsx
+ 'kaplanMeier.axis.time': 'Time',
+ 'kaplanMeier.axis.probability': 'Probability',
+ 'kaplanMeier.info.coxRegression': 'These metrics are computed using Cox-Regression',
+ 'kaplanMeier.header.clusteringMetrics': 'Clustering metrics',
+ 'kaplanMeier.button.clusteringModel': 'Clustering model',
+ 'kaplanMeier.button.groupByClinical': 'Group by clinical',
+ 'kaplanMeier.select.clinicalAttribute': 'Clinical attribute to group by',
+ 'kaplanMeier.metric.cIndex': 'C-Index',
+ 'kaplanMeier.metric.partialLogLikelihood': 'Partial Log-Likelihood',
+ 'kaplanMeier.button.seeSamplesAndClusters': 'See samples and clusters',
+ 'kaplanMeier.modal.samplesAndClusters': 'Samples and clusters',
+ // 24.StatisticalValidationResultMetrics.tsx
+ 'statValidationMetrics.header.metrics': 'metrics',
+ 'statValidationMetrics.header.modelDetails': 'Model details',
+ 'statValidationMetrics.header.validationMetrics': 'Validation metrics',
+ 'statValidationMetrics.metric.mse': 'MSE',
+ 'statValidationMetrics.metric.r2Score': 'R2 score',
+ // 25.NewStatisticalValidationModal.tsx
+ 'newStatValidation.header.create': 'Create new statistical validation',
+ 'newStatValidation.header.basicData': 'Basic data',
+ 'newStatValidation.form.name': 'Name',
+ 'newStatValidation.form.descriptionOptional': 'Description (optional)',
+ 'newStatValidation.form.requiredField': 'Required field',
+ 'newStatValidation.step.trainedModel': 'Step 1: Trained model',
+ 'newStatValidation.step.validationDatasets': 'Step 2: Validation datasets',
+ 'newStatValidation.button.continue': 'Continue',
+ 'newStatValidation.button.confirm': 'Confirm',
+ // 26.StatisticalValidationMenu.tsx
+ 'statValidationMenu.bestFeatures': 'Most significant features',
+ 'statValidationMenu.bestFeatures.info': 'Most significant features for the survival analysis',
+ 'statValidationMenu.kaplanMeier': 'Kaplan-Meier',
+ 'statValidationMenu.kaplanMeier.info': 'Kaplan-Meier curve showing survival or hazard ratio',
+ 'statValidationMenu.heatmap': 'Heatmap',
+ 'statValidationMenu.heatmap.info': 'Heatmap for every sample and molecule',
+ // 27.StatisticalValidationsTable.tsx
+
+ 'statValidationsTable.stopValidation.header': 'Stop statistical validation',
+ 'statValidationsTable.stopValidation.confirm': 'Are you sure you want to stop the statistical validation {name}?',
+ 'statValidationsTable.deleteValidation.header': 'Delete statistical validation',
+ 'statValidationsTable.deleteValidation.confirm': 'Are you sure you want to delete the statistical validation {name}?',
+ 'statValidationsTable.headerTitle': 'Statistical validations',
+ 'statValidationsTable.headers.name': 'Name',
+ 'statValidationsTable.headers.description': 'Description',
+ 'statValidationsTable.headers.state': 'State',
+ 'statValidationsTable.headers.model': 'Model',
+ 'statValidationsTable.headers.date': 'Date',
+ 'statValidationsTable.headers.datasets': 'Datasets',
+ 'statValidationsTable.headers.actions': 'Actions',
+ 'statValidationsTable.search.label': 'Name',
+ 'statValidationsTable.search.placeholder': 'Search by name or description',
+ 'statValidationsTable.newValidation': 'New statistical validation',
+ 'statValidationsTable.actions.seeResults': 'See results',
+ 'statValidationsTable.actions.stopValidation': 'Stop statistical validation',
+ 'statValidationsTable.actions.deleteValidation': 'Delete statistical validation',
+ // 28.NewClusteringModelForm.tsx
+ 'newClusteringForm.label.algorithm': 'Algorithm',
+ 'newClusteringForm.placeholder.algorithm': 'Select an algorithm',
+ 'newClusteringForm.label.searchOptimalClusters': 'Search for the optimal number of clusters',
+ 'newClusteringForm.label.nClusters': 'Number of clusters',
+ 'newClusteringForm.info.nClusters': 'The number of clusters to group the data into. The optimal number can be found by looking for the elbow in the curve of the sum of squared distances between samples and their closest cluster center.',
+ 'newClusteringForm.label.metric': 'Metric',
+ 'newClusteringForm.placeholder.metric': 'Select a metric',
+ 'newClusteringForm.label.scoringMethod': 'Scoring method',
+ 'newClusteringForm.placeholder.scoringMethod': 'Select a method',
+ 'newClusteringForm.label.randomState': 'Random state',
+ 'newClusteringForm.label.penalizer': 'Penalizer',
+ 'newClusteringForm.placeholder.integer': 'An integer number',
+ 'newClusteringForm.info.algorithm': 'K-Means: Groups data by minimizing intra-cluster variance; effective for RNA and miRNA. Spectral Clustering: Uses graph-based similarity to identify complex patterns; ideal for methylation and CNA. BK-Means: A hierarchical variation of K-Means, suitable for layered clustering of clinical and multi-omics datasets. Ward’s Method: Minimizes variance in hierarchical clustering; well-suited for combining RNA and methylation data.',
+ 'newClusteringForm.info.metric': 'Cox Regression: A proportional hazards model to identify associations between multi-omics features and clinical outcomes. Log-Rank Test: A non-parametric test to compare survival distributions; currently not available.',
+ 'newClusteringForm.info.scoringMethod': 'C-Index: A measure of concordance between predicted and observed survival outcomes; higher values indicate better performance. Log Likelihood: The probability of observing the data given the model; lower values indicate better performance.',
+ 'newClusteringForm.info.randomState': 'The seed used by the random number generator to ensure reproducibility.',
+ 'newClusteringForm.info.penalizer': 'Useful when clinical data has few samples or events; increases robustness and avoids NaN values.',
+}
diff --git a/src/frontend/static/frontend/src/locales/es.ts b/src/frontend/static/frontend/src/locales/es.ts
new file mode 100644
index 00000000..d6093728
--- /dev/null
+++ b/src/frontend/static/frontend/src/locales/es.ts
@@ -0,0 +1,303 @@
+export default {
+ // Common actions
+ 'common.cancel': 'Cancelar',
+ 'common.delete': 'Eliminar',
+ 'common.stop': 'Detener',
+ 'common.save': 'Guardar',
+ 'common.close': 'Cerrar',
+
+ // Auth/usuario
+ 'auth.login': 'Iniciar sesión',
+ 'auth.greeting': 'Hola, {username}',
+ 'auth.editProfile': 'Editar perfil',
+ 'auth.logout': 'Salir',
+
+ // Menús
+ 'menu.analysis': 'Análisis',
+ 'menu.gem': 'GEM',
+ 'menu.gem.tooltip': 'Modulación de Expresión Génica',
+ 'menu.biomarkers': 'Biomarcadores',
+ 'menu.datasets': 'Conjuntos de datos',
+ 'menu.multiomix': 'Multiomix',
+ 'menu.cbioportal': 'cBioPortal',
+ 'menu.institutions': 'Instituciones',
+ 'menu.admin': 'Administración',
+ 'menu.admin.genes': 'Base de datos: Genes',
+ 'menu.about': 'Sobre nosotros',
+ 'menu.faq': 'Preguntas frecuentes',
+ 'menu.opensource': 'Código abierto',
+
+ // About us
+ 'about.description': 'Multiomix es el resultado del trabajo interdisciplinario entre miembros de las siguientes instituciones científicas:',
+ 'about.institution.caeti': 'CAETI - Universidad Abierta Interamericana',
+ 'about.institution.ciniba': 'CINIBA - Facultad de Ciencias Médicas - UNLP',
+ 'about.institution.lidi': 'LIDI - Facultad de Informática - UNLP',
+
+ 'about.coordination': 'Coordinación del proyecto:',
+ 'about.coordinator.Abba': 'PhD Martín Abba',
+ 'about.coordinator.Butti': 'Dr. MSc. Matias Butti',
+
+ 'about.members.title': 'Miembros del proyecto:',
+ 'about.members.main': 'Contribuyente principal: B.Comp.Sc. Genaro Camele',
+ 'about.members.collaborators': 'Colaboradores: Esp. Hernán Chanfreau, Dr. Sebastián Menazzi, St. Agustín Marraco, B.Comp.Sc. Julián Muhlberger, St. Ramiro Lasorsa, PhD. Waldo Hasperué',
+
+ 'about.contact.title': 'Contacto:',
+ 'about.contact.questions': 'Para preguntas o sugerencias, contáctenos:',
+ 'about.contact.institutions': 'También puede contactarnos para crear su institución de investigación. Esto permitirá a los investigadores compartir conjuntos de datos dentro de Multiomix.',
+
+ // BIOMARKERS
+
+ // BiomarkerInferenceExperimentsPanel.tsx
+ 'inference.experiment.title': 'Experimento de interferencia "{name}"',
+ // 2.InferenceExperimentClinicalAttributeSelect.tsx
+ 'inference.clinicalAttribute.label': 'Agrupar por atributo clínico',
+ 'inference.clinicalAttribute.placeholder': 'Atributo clínico para agrupar',
+ // 3.InferenceExperimentResultMetrics.tsx
+ 'inference.metrics.title': 'Métricas de "{name}"',
+ 'inference.model.details': 'Detalles del modelo',
+ // 5.InferenceExperimentsTable.tsx
+ 'inference.stop.title': 'Detener experimento de inferencia',
+ 'inference.stop.confirm': '¿Estás segura de que quieres detener el experimento de inferencia "{name}"?',
+ 'inference.stop.cancel': '{common.cancel}',
+ 'inference.stop.button': '{common.stop}',
+
+ 'inference.delete.title': 'Eliminar experimento',
+ 'inference.delete.confirm': '¿Estás segura de que quieres eliminar el experimento de inferencia "{name}"?',
+ 'inference.delete.cancel': '{common.cancel}',
+ 'inference.delete.button': '{common.delete}',
+
+ 'inference.table.title': 'Experimentos de inferencia',
+ 'inference.table.columns.name': 'Nombre',
+ 'inference.table.columns.description': 'Descripción',
+ 'inference.table.columns.state': 'Estado',
+ 'inference.table.columns.model': 'Modelo',
+ 'inference.table.columns.date': 'Fecha',
+ 'inference.table.columns.dataset': 'Conjuntos de datos',
+ 'inference.table.columns.actions': 'Acciones',
+
+ 'inference.search.label': 'Nombre',
+ 'inference.search.placeholder': 'Buscar por nombre o descripción',
+
+ 'inference.new.title': 'Nuevo experimento de inferencia',
+ 'inference.results.title': 'Ver resultados',
+ 'inference.results.tooltip': 'Eliminar experimento',
+ // 6.NewInferenceExperimentModal.tsx
+ 'inference.newInference.title': 'Crear nuevo experimento de inferencia',
+ 'inference.new.basicData': 'Datos básicos',
+ 'inference.new.name': 'Nombre',
+ 'inference.new.description': 'Descripción (opcional)',
+ 'inference.new.requiredField': 'Campo obligatorio',
+ 'inference.new.step1': 'Paso 1: Modelo entrenado',
+ 'inference.new.step2': 'Paso 2: Conjuntos de datos de moléculas',
+ 'inference.new.goBack': 'Volver',
+ 'inference.new.continue': 'Continuar',
+ 'inference.new.confirm': 'Confirmar',
+ // 7.SamplesAndGroupsInferenceTable.tsx
+ 'inference.table.columns.sample': 'Muestra',
+ 'inference.table.columns.cluster': 'Grupo',
+ 'inference.table.download.tooltip': 'Descargar resultados en un archivo CSV',
+ 'inference.table.filter.cluster.label': 'Grupo',
+ 'inference.table.filter.cluster.placeholder': 'Filtrar por grupo',
+ 'inference.table.search.label': 'Muestra',
+ 'inference.table.search.placeholder': 'Buscar por muestra',
+ 'inference.table.addClusterLabels': 'Agregar etiquetas de grupo',
+ // 8.SamplesAndTimeInferenceCharts.tsx
+ 'inference.charts.noAttribute': 'No se seleccionó ningún atributo clínico',
+ 'inference.charts.selectAttribute': 'Por favor, selecciona uno en el selector de la derecha.',
+ // 9.SamplesAndTimeInferenceTable.tsx
+ 'inference.timeTable.columns.sample': 'Muestra',
+ 'inference.timeTable.columns.predictedTime': 'Tiempo predicho',
+ 'inference.timeTable.filter.range.label': 'Rango',
+ 'inference.timeTable.filter.range.placeholder': 'Filtrar por rango',
+ 'inference.timeTable.search.label': 'Muestra',
+ 'inference.timeTable.search.placeholder': 'Buscar por muestra',
+ 'inference.timeTable.menu.table': 'Tabla',
+ 'inference.timeTable.menu.charts': 'Gráficos',
+ 'inference.timeTable.menu.table.info': 'Tabla con todas las muestras y su tiempo de riesgo/supervivencia predicho',
+ 'inference.timeTable.menu.charts.info': 'Muestra gráficos con las muestras y su tiempo de riesgo/supervivencia predicho agrupado por alguna condición',
+ 'inference.timeTable.addRangeLabels': 'Agregar etiquetas de rango',
+ // 10.molecules/GeneOntologyCytoscapeChart.tsx
+ 'geneOntology.goBack': 'Volver',
+ 'geneOntology.legend.relations': 'Relaciones',
+ 'geneOntology.form.relations': 'Relaciones',
+ 'geneOntology.form.ontologyType': 'Tipo de ontología',
+ 'geneOntology.form.generalDepth': 'Profundidad general',
+ 'geneOntology.form.hierarchicalDepth': 'Profundidad jerárquica hacia hijos',
+ 'geneOntology.form.toRoot': 'Hasta la raíz',
+ 'geneOntology.relation.hasPart': 'Tiene parte',
+ 'geneOntology.relation.isA': 'Es un',
+ 'geneOntology.relation.partOf': 'Parte de',
+ 'geneOntology.relation.regulates': 'Regula',
+ // 11.GeneOntologyPanel
+ 'geneOntology.panel.filterType': 'Tipo de filtro',
+ 'geneOntology.panel.filterType.intersection': 'Intersección',
+ 'geneOntology.panel.filterType.union': 'Unión',
+ 'geneOntology.panel.filterType.enrichment': 'Enriquecimiento',
+ 'geneOntology.panel.pValueThreshold': 'Umbral de valor p',
+ 'geneOntology.panel.correctionMethod': 'Método de corrección',
+ 'geneOntology.panel.correctionMethod.analytical': 'Analítico',
+ 'geneOntology.panel.correctionMethod.bonferroni': 'Bonferroni',
+ 'geneOntology.panel.correctionMethod.falseDiscoveryRate': 'Tasa de descubrimiento falso',
+ 'geneOntology.panel.relationType': 'Tipo de relación',
+ 'geneOntology.panel.relationType.enables': 'Habilita',
+ 'geneOntology.panel.relationType.involvedIn': 'Involucrado en',
+ 'geneOntology.panel.relationType.partOf': 'Parte de',
+ 'geneOntology.panel.relationType.locatedIn': 'Ubicado en',
+ 'geneOntology.panel.ontologyType': 'Tipo de ontología',
+ 'geneOntology.panel.ontologyType.biologicalProcess': 'Proceso biológico',
+ 'geneOntology.panel.ontologyType.molecularFunction': 'Función molecular',
+ 'geneOntology.panel.ontologyType.cellularComponent': 'Componente celular',
+ 'geneOntology.panel.table.term': 'Término',
+ 'geneOntology.panel.table.ontologyType': 'Tipo de ontología',
+ // 12GENES.ActionableCancerGenesPanel.tsx
+ 'actionableGenes.panel.title': 'Panel de genes de cáncer accionables',
+ // 13.GeneAssociationsNetworkPanel
+ 'geneAssociations.legend.relations': 'Relaciones',
+ 'geneAssociations.relation.fusion': 'Fusión',
+ 'geneAssociations.relation.coOccurrence': 'Co-ocurrencia',
+ 'geneAssociations.relation.experimental': 'Experimental',
+ 'geneAssociations.relation.textMining': 'Minería de texto',
+ 'geneAssociations.relation.database': 'Base de datos',
+ 'geneAssociations.relation.coExpression': 'Co-expresión',
+ 'geneAssociations.form.minCombinedScore': 'Puntuación combinada mínima',
+ 'geneAssociations.infoPopup.text': 'La puntuación combinada se calcula combinando las probabilidades de los diferentes canales de evidencia y se corrige por la probabilidad de observar una interacción al azar. Para una descripción más detallada consulte von Mering, et al. Nucleic Acids Res. 2005',
+ // 14.GeneInformation
+ 'geneInformation.noDetails.title': 'No se encontraron detalles',
+ 'geneInformation.noDetails.subtitle': 'No se encontraron detalles para este gen.',
+ 'geneInformation.summary': 'Resumen',
+ 'geneInformation.grch37': 'GRCh37',
+ 'geneInformation.grch38': 'GRCh38',
+ // 15.MetabolicPathwaysPanel.tsx
+ 'metabolicPathways.infoPopup': 'Lista de genes que participan en una vía para una base de datos dada',
+ 'metabolicPathways.header': 'Vías metabólicas',
+ 'metabolicPathways.selectSource': 'Selecciona una fuente',
+ 'metabolicPathways.sourcePlaceholder': 'Fuente',
+ 'metabolicPathways.searchPlaceholder': 'Buscar',
+ // 16.PathwaysInformation.tsx
+ 'pathwaysInformation.noPathways.title': 'No se encontraron vías',
+ 'pathwaysInformation.noPathways.subtitle': 'No se encontraron vías para este gen.',
+ // 17.MethylationInformation.tsx
+ 'methylationInformation.noDetails': 'No se encontraron detalles para este sitio de metilación',
+ 'methylationInformation.infoPopup.aliases': 'Alias de metilación y posición cromosómica',
+ 'methylationInformation.header': 'Información de metilación',
+ 'methylationInformation.chromosomePosition': 'Posición cromosómica:',
+ 'methylationInformation.infoPopup.ucsc': 'Lista de islas relacionadas con el sitio de metilación según la base de datos UCSC',
+ 'methylationInformation.header.ucsc': 'Islas CpG UCSC',
+ 'methylationInformation.table.cpgIsland': 'Isla CpG',
+ 'methylationInformation.table.relation': 'Relación',
+ 'methylationInformation.infoPopup.genes': 'Genes relacionados con este sitio de metilación y las regiones donde se encuentra. Estas regiones, según la base de datos NCBI RefSeq, pueden ser: 5UTR=5\' región no traducida entre el sitio de inicio de transcripción (TTS) y el sitio de inicio ATG, 3UTR=3\' región no traducida entre el codón de parada y la señal poli A, exon_#, TSS200=1-200 pb 5\' del TSS, o TS1500=200-1500 pb 5\' del TSS',
+ 'methylationInformation.header.genes': 'Genes relacionados',
+ 'methylationInformation.table.gene': 'Gen',
+ 'methylationInformation.table.regions': 'Regiones',
+ // 18.CurrentMoleculeDetails.tsx
+ 'currentMoleculeDetails.noSelection': 'Ninguna molécula seleccionada',
+ 'currentMoleculeDetails.selectOne': 'Selecciona una en el panel izquierdo',
+ // 19.MoleculesDetailsMenu.tsx
+ 'moleculesDetailsMenu.details': 'Detalles',
+ 'moleculesDetailsMenu.details.info': 'Detalles de {identifier} obtenidos de diferentes fuentes estandarizadas',
+ 'moleculesDetailsMenu.geneAssociations': 'Red de asociaciones génicas',
+ 'moleculesDetailsMenu.geneAssociations.info': 'Muestra la red de asociaciones génicas de los genes de este biomarcador',
+ 'moleculesDetailsMenu.geneOntology': 'Ontología génica',
+ 'moleculesDetailsMenu.geneOntology.info': 'La Ontología Génica (GO) es una herramienta poderosa para comprender los procesos biológicos, funciones moleculares y componentes celulares asociados a un gen',
+ 'moleculesDetailsMenu.diseases': 'Enfermedades',
+ 'moleculesDetailsMenu.diseases.info': 'Interacciones de la molécula con enfermedades reportadas en la literatura',
+ 'moleculesDetailsMenu.drugs': 'Fármacos',
+ 'moleculesDetailsMenu.drugs.info': 'Interacciones de la molécula con fármacos reportadas en la literatura',
+ 'moleculesDetailsMenu.miRNAGeneInteractions': 'Interacciones miRNA-Gen',
+ 'moleculesDetailsMenu.miRNAGeneInteractions.info': 'Diferentes interacciones miRNA-Gen reportadas en la literatura junto con el puntaje mirDIP y fuentes de PubMed',
+ // 20.MoleculesTable.tsx
+ 'moleculesTable.type.mrna': 'mRNA',
+ 'moleculesTable.type.mirna': 'miRNA',
+ 'moleculesTable.type.cna': 'CNA',
+ 'moleculesTable.type.methylation': 'Metilación',
+ 'moleculesTable.header.identifier': 'Identificador',
+ 'moleculesTable.header.type': 'Tipo',
+ 'moleculesTable.header.actions': 'Acciones',
+ 'moleculesTable.search.label': 'Muestra',
+ 'moleculesTable.search.placeholder': 'Buscar por identificador',
+ 'moleculesTable.details': 'Detalles',
+ // 21.SamplesAndGroupsTable.tsx
+ 'samplesAndGroupsTable.header.sample': 'Muestra',
+ 'samplesAndGroupsTable.header.cluster': 'Cluster',
+ 'samplesAndGroupsTable.filter.cluster': 'Cluster',
+ 'samplesAndGroupsTable.filter.cluster.placeholder': 'Filtrar por cluster',
+ 'samplesAndGroupsTable.search.label': 'Muestra',
+ 'samplesAndGroupsTable.search.placeholder': 'Buscar por muestra',
+ // 22.StatisticalValidationResultBestFeatures.tsx
+ 'statValidationBestFeatures.series.coefficient': 'Coeficiente',
+ 'statValidationBestFeatures.axis.molecule': 'Molécula',
+ 'statValidationBestFeatures.axis.coefficient': 'Coeficiente',
+ 'statValidationBestFeatures.noData': 'No se encontraron características significativas para esta validación estadística',
+ // 23.StatisticalValidationResultKaplanMeier.tsx
+ 'kaplanMeier.axis.time': 'Tiempo',
+ 'kaplanMeier.axis.probability': 'Probabilidad',
+ 'kaplanMeier.info.coxRegression': 'Estas métricas se calculan usando Cox-Regression',
+ 'kaplanMeier.header.clusteringMetrics': 'Métricas de clustering',
+ 'kaplanMeier.button.clusteringModel': 'Modelo de clustering',
+ 'kaplanMeier.button.groupByClinical': 'Agrupar por atributo clínico',
+ 'kaplanMeier.select.clinicalAttribute': 'Atributo clínico para agrupar',
+ 'kaplanMeier.metric.cIndex': 'Índice C',
+ 'kaplanMeier.metric.partialLogLikelihood': 'Log-verosimilitud parcial',
+ 'kaplanMeier.button.seeSamplesAndClusters': 'Ver muestras y clusters',
+ 'kaplanMeier.modal.samplesAndClusters': 'Muestras y clusters',
+ // 24.StatisticalValidationResultMetrics.tsx
+ 'statValidationMetrics.header.metrics': 'métricas',
+ 'statValidationMetrics.header.modelDetails': 'Detalles del modelo',
+ 'statValidationMetrics.header.validationMetrics': 'Métricas de validación',
+ 'statValidationMetrics.metric.mse': 'MSE',
+ 'statValidationMetrics.metric.r2Score': 'Puntaje R2',
+ // 25.NewStatisticalValidationModal.tsx
+ 'newStatValidation.header.create': 'Crear nueva validación estadística',
+ 'newStatValidation.header.basicData': 'Datos básicos',
+ 'newStatValidation.form.name': 'Nombre',
+ 'newStatValidation.form.descriptionOptional': 'Descripción (opcional)',
+ 'newStatValidation.form.requiredField': 'Campo obligatorio',
+ 'newStatValidation.step.trainedModel': 'Paso 1: Modelo entrenado',
+ 'newStatValidation.step.validationDatasets': 'Paso 2: Conjuntos de validación',
+ 'newStatValidation.button.continue': 'Continuar',
+ 'newStatValidation.button.confirm': 'Confirmar',
+ // 26.StatisticalValidationMenu.tsx
+ 'statValidationMenu.bestFeatures': 'Características más significativas',
+ 'statValidationMenu.bestFeatures.info': 'Características más significativas para el análisis de supervivencia',
+ 'statValidationMenu.kaplanMeier': 'Kaplan-Meier',
+ 'statValidationMenu.kaplanMeier.info': 'Curva Kaplan-Meier mostrando supervivencia o hazard ratio',
+ 'statValidationMenu.heatmap': 'Mapa de calor',
+ 'statValidationMenu.heatmap.info': 'Mapa de calor para cada muestra y molécula',
+ // 27.StatisticalValidationsTable.tsx
+ 'statValidationsTable.stopValidation.header': 'Detener validación estadística',
+ 'statValidationsTable.stopValidation.confirm': '¿Está seguro de que desea detener la validación estadística {name}?',
+ 'statValidationsTable.deleteValidation.header': 'Eliminar validación estadística',
+ 'statValidationsTable.deleteValidation.confirm': '¿Está seguro de que desea eliminar la validación estadística {name}?',
+ 'statValidationsTable.headerTitle': 'Validaciones estadísticas',
+ 'statValidationsTable.headers.name': 'Nombre',
+ 'statValidationsTable.headers.description': 'Descripción',
+ 'statValidationsTable.headers.state': 'Estado',
+ 'statValidationsTable.headers.model': 'Modelo',
+ 'statValidationsTable.headers.date': 'Fecha',
+ 'statValidationsTable.headers.datasets': 'Conjuntos de datos',
+ 'statValidationsTable.headers.actions': 'Acciones',
+ 'statValidationsTable.search.label': 'Nombre',
+ 'statValidationsTable.search.placeholder': 'Buscar por nombre o descripción',
+ 'statValidationsTable.newValidation': 'Nueva validación estadística',
+ 'statValidationsTable.actions.seeResults': 'Ver resultados',
+ 'statValidationsTable.actions.stopValidation': 'Detener validación estadística',
+ 'statValidationsTable.actions.deleteValidation': 'Eliminar validación estadística',
+ // 28.NewClusteringModelForm.tsx
+ 'newClusteringForm.label.algorithm': 'Algoritmo',
+ 'newClusteringForm.placeholder.algorithm': 'Seleccione un algoritmo',
+ 'newClusteringForm.label.searchOptimalClusters': 'Buscar el número óptimo de clusters',
+ 'newClusteringForm.label.nClusters': 'Número de clusters',
+ 'newClusteringForm.info.nClusters': 'Número de clusters para agrupar los datos. El número óptimo puede encontrarse buscando el codo en la curva de la suma de distancias cuadradas entre muestras y su centro de cluster más cercano.',
+ 'newClusteringForm.label.metric': 'Métrica',
+ 'newClusteringForm.placeholder.metric': 'Seleccione una métrica',
+ 'newClusteringForm.label.scoringMethod': 'Método de puntuación',
+ 'newClusteringForm.placeholder.scoringMethod': 'Seleccione un método',
+ 'newClusteringForm.label.randomState': 'Semilla aleatoria',
+ 'newClusteringForm.label.penalizer': 'Penalizador',
+ 'newClusteringForm.placeholder.integer': 'Un número entero',
+ 'newClusteringForm.info.algorithm': 'K-Means: agrupa datos minimizando la varianza intra-cluster; útil para RNA y miRNA. Spectral Clustering: usa similitud basada en grafos para patrones complejos; ideal para metilación y CNA. BK-Means: variación jerárquica de K-Means, adecuada para datasets clínicos y multi-ómicos. Método de Ward: minimiza la varianza en clustering jerárquico; útil para combinar RNA y metilación.',
+ 'newClusteringForm.info.metric': 'Cox Regression: modelo de riesgos proporcionales para asociaciones entre multi-ómicos y resultados clínicos. Log-Rank Test: prueba no paramétrica para comparar distribuciones de supervivencia; actualmente no disponible.',
+ 'newClusteringForm.info.scoringMethod': 'C-Index: medida de concordancia entre resultados predichos y observados; valores altos indican mejor desempeño. Log Likelihood: probabilidad de observar los datos dado el modelo; valores bajos indican mejor desempeño.',
+ 'newClusteringForm.info.randomState': 'Semilla usada por el generador aleatorio para asegurar reproducibilidad.',
+ 'newClusteringForm.info.penalizer': 'Útil cuando hay pocas muestras o eventos observados; aumenta la robustez del modelo evitando problemas con valores NaN.',
+}
From d4edda9ae9cd53f3845283661e138aa1755f9906 Mon Sep 17 00:00:00 2001
From: natharisa
Date: Fri, 16 Jan 2026 11:39:14 -0300
Subject: [PATCH 6/6] translation updates
---
.../src/components/about-us/AboutUs.tsx | 10 +--
.../inference/InferenceExperimentsTable.tsx | 8 +--
.../inference/NewInferenceExperimentModal.tsx | 6 +-
.../SamplesAndGroupsInferenceTable.tsx | 8 +--
.../SamplesAndTimeInferenceTable.tsx | 6 +-
.../molecules/MoleculesDetailsMenu.tsx | 2 +-
.../molecules/MoleculesTable.tsx | 6 +-
.../GeneOntologyCytoscapeChart.tsx | 2 +-
.../molecules/genes/GeneInformation.tsx | 8 +--
.../molecules/genes/MetabolicPathways.tsx | 2 +-
.../molecules/genes/PathwaysInformation.tsx | 4 +-
.../methylation/MethylationInformation.tsx | 2 +-
.../NewStatisticalValidationModal.tsx | 4 +-
.../StatisticalValidationsTable.tsx | 10 +--
.../result/SamplesAndGroupsTable.tsx | 6 +-
...tatisticalValidationResultBestFeatures.tsx | 2 +-
.../StatisticalValidationResultMetrics.tsx | 2 +-
.../trained-models/NewRFModelForm.tsx | 6 +-
.../static/frontend/src/locales/en.ts | 62 ++++++-------------
.../static/frontend/src/locales/es.ts | 57 ++++++-----------
20 files changed, 87 insertions(+), 126 deletions(-)
diff --git a/src/frontend/static/frontend/src/components/about-us/AboutUs.tsx b/src/frontend/static/frontend/src/components/about-us/AboutUs.tsx
index 6440da30..c978f099 100644
--- a/src/frontend/static/frontend/src/components/about-us/AboutUs.tsx
+++ b/src/frontend/static/frontend/src/components/about-us/AboutUs.tsx
@@ -57,8 +57,8 @@ export const AboutUs = () => {
-
-
+
+
@@ -70,14 +70,16 @@ export const AboutUs = () => {
{intl.formatMessage({ id: 'about.members.title' })}
+
- {intl.formatMessage({ id: 'about.members.main' })}
+ {intl.formatMessage({ id: 'about.members.main' })} B.Comp.Sc. Genaro Camele
- {intl.formatMessage({ id: 'about.members.collaborators' })}
+ {intl.formatMessage({ id: 'about.members.collaborators' })} Esp. Hernán Chanfreau, Dr. Sebastián Menazzi, St. Agustín Marraco, B.Comp.Sc. Julián Muhlberger, St. Ramiro Lasorsa, PhD. Waldo Hasperué
+
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/InferenceExperimentsTable.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/InferenceExperimentsTable.tsx
index 946309b0..9d581863 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/InferenceExperimentsTable.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/InferenceExperimentsTable.tsx
@@ -169,19 +169,19 @@ export const InferenceExperimentsTable = (props: InferenceExperimentsTableProps)
headerTitle={intl.formatMessage({ id: 'inference.experiments.table.title' })}
headers={[
- { name: intl.formatMessage({ id: 'inference.table.columns.name' }), serverCodeToSort: 'name', width: 3 },
- { name: intl.formatMessage({ id: 'inference.table.columns.description' }), serverCodeToSort: 'description', width: 4 },
+ { name: intl.formatMessage({ id: 'common.name' }), serverCodeToSort: 'name', width: 3 },
+ { name: intl.formatMessage({ id: 'common.description' }), serverCodeToSort: 'description', width: 4 },
{ name: intl.formatMessage({ id: 'inference.table.columns.state' }), serverCodeToSort: 'state', textAlign: 'center' },
{ name: intl.formatMessage({ id: 'inference.table.columns.model' }), serverCodeToSort: 'model', width: 1 },
{ name: intl.formatMessage({ id: 'inference.table.columns.date' }), serverCodeToSort: 'created' },
{ name: intl.formatMessage({ id: 'inference.table.columns.dataset' }) },
- { name: intl.formatMessage({ id: 'inference.table.columns.actions' }) }
+ { name: intl.formatMessage({ id: 'common.actions' }) }
]}
queryParams={{ biomarker_pk: props.selectedBiomarker.id }}
defaultSortProp={{ sortField: 'created', sortOrderAscendant: false }}
showSearchInput
- searchLabel={intl.formatMessage({ id: 'inference.search.label' })}
+ searchLabel={intl.formatMessage({ id: 'common.name' })}
searchPlaceholder={intl.formatMessage({ id: 'inference.search.placeholder' })}
urlToRetrieveData={urlBiomarkerInferenceExperiments}
customElements={[
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/NewInferenceExperimentModal.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/NewInferenceExperimentModal.tsx
index 61aaac85..1ff3afb7 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/NewInferenceExperimentModal.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/NewInferenceExperimentModal.tsx
@@ -322,7 +322,7 @@ export const NewInferenceExperimentModal = (props: NewInferenceExperimentModalPr
name='name'
value={form.name}
icon='asterisk'
- placeholder={intl.formatMessage({ id: 'inference.new.name' })}
+ placeholder={intl.formatMessage({ id: 'common.name' })}
onChange={handleInputChange}
/>
@@ -383,7 +383,7 @@ export const NewInferenceExperimentModal = (props: NewInferenceExperimentModalPr
color='red'
onClick={() => setCurrentStep(currentStep - 1)}
>
- {intl.formatMessage({ id: 'inference.new.goBack' })}
+ {intl.formatMessage({ id: 'common.goBack' })}
)}
@@ -411,7 +411,7 @@ export const NewInferenceExperimentModal = (props: NewInferenceExperimentModalPr
}}
disabled={!formIsValid()}
>
- {intl.formatMessage({ id: 'inference.new.confirm' })}
+ {intl.formatMessage({ id: 'common.confirm' })}
)}
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/SamplesAndGroupsInferenceTable.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/SamplesAndGroupsInferenceTable.tsx
index 47a3937c..d915da4e 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/SamplesAndGroupsInferenceTable.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/SamplesAndGroupsInferenceTable.tsx
@@ -49,7 +49,7 @@ export const SamplesAndGroupsInferenceTable = (props: SamplesAndGroupsInferenceT
headers={[
- { name: intl.formatMessage({ id: 'inference.table.columns.sample' }), serverCodeToSort: 'sample', width: 3, textAlign: 'center' },
+ { name: intl.formatMessage({ id: 'common.sample' }), serverCodeToSort: 'sample', width: 3, textAlign: 'center' },
{ name: intl.formatMessage({ id: 'inference.table.columns.cluster' }), serverCodeToSort: 'cluster', width: 2, textAlign: 'center' }
]}
@@ -66,7 +66,7 @@ export const SamplesAndGroupsInferenceTable = (props: SamplesAndGroupsInferenceT
]}
customFilters={[
{
- label: intl.formatMessage({ id: 'inference.table.filter.cluster.label' }),
+ label: intl.formatMessage({ id: 'common.sample' }),
keyForServer: 'cluster',
defaultValue: '',
placeholder: intl.formatMessage({ id: 'inference.table.filter.cluster.placeholder' }),
@@ -77,8 +77,8 @@ export const SamplesAndGroupsInferenceTable = (props: SamplesAndGroupsInferenceT
defaultSortProp={{ sortField: 'sample', sortOrderAscendant: false }}
showSearchInput
defaultPageSize={25}
- searchLabel={intl.formatMessage({ id: 'inference.table.search.label' })}
- searchPlaceholder={intl.formatMessage({ id: 'inference.table.search.placeholder' })}
+ searchLabel={intl.formatMessage({ id: 'common.sample' })}
+ searchPlaceholder={intl.formatMessage({ id: 'common.search' })}
urlToRetrieveData={urlInferenceExperimentSamplesAndClusters}
mapFunction={(sampleAndCluster: SampleAndCluster) => {
return (
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/SamplesAndTimeInferenceTable.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/SamplesAndTimeInferenceTable.tsx
index d47aa937..32956d34 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/SamplesAndTimeInferenceTable.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/inference/SamplesAndTimeInferenceTable.tsx
@@ -50,7 +50,7 @@ export const SamplesAndTimeInferenceTable = (props: SamplesAndTimeInferenceTable
return (
headers={[
- { name: intl.formatMessage({ id: 'inference.timeTable.columns.sample' }), serverCodeToSort: 'sample', width: 3, textAlign: 'center' },
+ { name: intl.formatMessage({ id: 'common.sample' }), serverCodeToSort: 'sample', width: 3, textAlign: 'center' },
{ name: intl.formatMessage({ id: 'inference.timeTable.columns.predictedTime' }), serverCodeToSort: 'prediction', width: 2, textAlign: 'center' }
]}
@@ -70,8 +70,8 @@ export const SamplesAndTimeInferenceTable = (props: SamplesAndTimeInferenceTable
defaultSortProp={{ sortField: 'sample', sortOrderAscendant: false }}
showSearchInput
defaultPageSize={25}
- searchLabel={intl.formatMessage({ id: 'inference.timeTable.search.label' })}
- searchPlaceholder={intl.formatMessage({ id: 'inference.timeTable.search.placeholder' })}
+ searchLabel={intl.formatMessage({ id: 'common.sample' })}
+ searchPlaceholder={intl.formatMessage({ id: 'common.search' })}
searchWidth={5}
entriesSelectWidth={3}
urlToRetrieveData={urlInferenceExperimentSamplesAndTime}
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/MoleculesDetailsMenu.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/MoleculesDetailsMenu.tsx
index ea118238..d41a8bfe 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/MoleculesDetailsMenu.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/MoleculesDetailsMenu.tsx
@@ -36,7 +36,7 @@ export const MoleculesDetailsMenu = (props: MoleculesDetailsMenuProps) => {
*/
const items: ItemMenuProp[] = [
{
- name: intl.formatMessage({ id: 'moleculesDetailsMenu.details' }),
+ name: intl.formatMessage({ id: 'common.details' }),
onClick: () => props.setActiveItem(ActiveBiomarkerMoleculeItemMenu.DETAILS),
isActive: props.activeItem === ActiveBiomarkerMoleculeItemMenu.DETAILS,
popupInfo: `Details of ${props.selectedMolecule.identifier} obtained from different standardized sources`,
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/MoleculesTable.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/MoleculesTable.tsx
index b58bb72e..e19784ab 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/MoleculesTable.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/MoleculesTable.tsx
@@ -46,8 +46,8 @@ export const MoleculesTable = (props: MoleculesTableProps) => {
defaultSortProp={{ sortField: 'identifier', sortOrderAscendant: true }}
showSearchInput
defaultPageSize={25}
- searchLabel={intl.formatMessage({ id: 'moleculesTable.search.label' })}
- searchPlaceholder={intl.formatMessage({ id: 'moleculesTable.search.placeholder' })}
+ searchLabel={intl.formatMessage({ id: 'common.sample' })}
+ searchPlaceholder={intl.formatMessage({ id: 'common.search' }) + ' ' + intl.formatMessage({ id: 'moleculesTable.header.identifier' })}
urlToRetrieveData={urlBiomarkerMolecules}
searchWidth={6}
entriesSelectWidth={3}
@@ -62,7 +62,7 @@ export const MoleculesTable = (props: MoleculesTableProps) => {
name='chart bar'
className='clickable'
color='blue'
- title={intl.formatMessage({ id: 'moleculesTable.details' })}
+ title={intl.formatMessage({ id: 'common.details' })}
onClick={() => props.openMoleculeDetails(molecule)}
/>
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/gene-ontology/GeneOntologyCytoscapeChart.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/gene-ontology/GeneOntologyCytoscapeChart.tsx
index d1c94702..429c6a37 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/gene-ontology/GeneOntologyCytoscapeChart.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/molecules/gene-ontology/GeneOntologyCytoscapeChart.tsx
@@ -199,7 +199,7 @@ export const GeneOntologyCytoscapeChart = (props: GeneOntologyCytoscapeChartProp
{/* Go back button. */}
-
+
{/* Form for termsRelatedToTermForm */}
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/NewStatisticalValidationModal.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/NewStatisticalValidationModal.tsx
index ebd9abf9..151a0b5c 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/NewStatisticalValidationModal.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/NewStatisticalValidationModal.tsx
@@ -327,7 +327,7 @@ export const NewStatisticalValidationModal = (props: NewStatisticalValidationMod
name='name'
value={form.name}
icon='asterisk'
- placeholder={intl.formatMessage({ id: 'newStatValidation.form.name' })}
+ placeholder={intl.formatMessage({ id: 'common.name' })}
onChange={handleInputChange}
/>
@@ -415,7 +415,7 @@ export const NewStatisticalValidationModal = (props: NewStatisticalValidationMod
}}
disabled={!formIsValid()}
>
- {intl.formatMessage({ id: 'newStatValidation.button.confirm' })}
+ {intl.formatMessage({ id: 'common.confirm' })}
)}
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/StatisticalValidationsTable.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/StatisticalValidationsTable.tsx
index 4513af9a..03b9f5b5 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/StatisticalValidationsTable.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/StatisticalValidationsTable.tsx
@@ -171,19 +171,19 @@ export const StatisticalValidationsTable = (props: StatisticalValidationsTablePr
headerTitle={intl.formatMessage({ id: 'statValidationsTable.headerTitle' })}
headers={[
- { name: intl.formatMessage({ id: 'statValidationsTable.headers.name' }), serverCodeToSort: 'name', width: 3 },
- { name: intl.formatMessage({ id: 'statValidationsTable.headers.description' }), serverCodeToSort: 'description', width: 4 },
+ { name: intl.formatMessage({ id: 'common.name' }), serverCodeToSort: 'name', width: 3 },
+ { name: intl.formatMessage({ id: 'common.description' }), serverCodeToSort: 'description', width: 4 },
{ name: intl.formatMessage({ id: 'statValidationsTable.headers.state' }), serverCodeToSort: 'state', textAlign: 'center' },
{ name: intl.formatMessage({ id: 'statValidationsTable.headers.model' }), textAlign: 'center', width: 2 },
{ name: intl.formatMessage({ id: 'statValidationsTable.headers.date' }), serverCodeToSort: 'created' },
{ name: intl.formatMessage({ id: 'statValidationsTable.headers.datasets' }) },
- { name: 'Actions' }
+ { name: intl.formatMessage({ id: 'common.actions' }) }
]}
queryParams={{ biomarker_pk: props.selectedBiomarker.id }}
defaultSortProp={{ sortField: 'created', sortOrderAscendant: false }}
showSearchInput
- searchLabel={intl.formatMessage({ id: 'statValidationsTable.search.label' })}
- searchPlaceholder={intl.formatMessage({ id: 'statValidationsTable.search.placeholder' })}
+ searchLabel={intl.formatMessage({ id: 'common.name' })}
+ searchPlaceholder={intl.formatMessage({ id: 'common.search' }) + ' ' + intl.formatMessage({ id: 'common.name' }) + ' / ' + intl.formatMessage({ id: 'common.description' })}
urlToRetrieveData={urlBiomarkerStatisticalValidations}
customElements={[
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/SamplesAndGroupsTable.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/SamplesAndGroupsTable.tsx
index 4b370bd6..8499bf5b 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/SamplesAndGroupsTable.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/SamplesAndGroupsTable.tsx
@@ -24,7 +24,7 @@ export const SamplesAndGroupsTable = (props: SamplesAndGroupsTableProps) => {
return (
headers={[
- { name: intl.formatMessage({ id: 'samplesAndGroupsTable.header.sample' }), serverCodeToSort: 'sample', width: 3 },
+ { name: intl.formatMessage({ id: 'common.sample' }), serverCodeToSort: 'sample', width: 3 },
{ name: intl.formatMessage({ id: 'samplesAndGroupsTable.header.cluster' }), serverCodeToSort: 'cluster', width: 2 }
]}
queryParams={{ statistical_validation_pk: props.selectedStatisticalValidation.id }}
@@ -41,8 +41,8 @@ export const SamplesAndGroupsTable = (props: SamplesAndGroupsTableProps) => {
defaultSortProp={{ sortField: 'sample', sortOrderAscendant: false }}
showSearchInput
defaultPageSize={25}
- searchLabel={intl.formatMessage({ id: 'samplesAndGroupsTable.search.label' })}
- searchPlaceholder={intl.formatMessage({ id: 'samplesAndGroupsTable.search.placeholder' })}
+ searchLabel={intl.formatMessage({ id: 'common.sample' })}
+ searchPlaceholder={intl.formatMessage({ id: 'common.search' }) + ' ' + intl.formatMessage({ id: 'common.sample' })}
urlToRetrieveData={urlStatisticalValidationSamplesAndClusters}
mapFunction={(sampleAndCluster: SampleAndCluster) => {
return (
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/StatisticalValidationResultBestFeatures.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/StatisticalValidationResultBestFeatures.tsx
index ff1ded6d..bcb00df3 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/StatisticalValidationResultBestFeatures.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/StatisticalValidationResultBestFeatures.tsx
@@ -136,7 +136,7 @@ export const StatisticalValidationResultBestFeatures = (props: StatisticalValida
max: Math.ceil(Math.max(...coefficients) + EPSILON)
},
noData: {
- text: intl.formatMessage({ id: 'statValidationBestFeatures.noData' })
+ text: intl.formatMessage({ id: 'common.noDetails' }) + ' ' + intl.formatMessage({ id: 'statValidationBestFeatures.context.features' })
}
}
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/StatisticalValidationResultMetrics.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/StatisticalValidationResultMetrics.tsx
index a69fb325..a73067fd 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/StatisticalValidationResultMetrics.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/stat-validations/result/StatisticalValidationResultMetrics.tsx
@@ -79,7 +79,7 @@ export const StatisticalValidationResultMetrics = (props: StatisticalValidationR
{/* Model details. */}
- {intl.formatMessage({ id: 'statValidationMetrics.header.modelDetails' })}
+ {intl.formatMessage({ id: 'common.details' }) + ' ' + intl.formatMessage({ id: 'statValidationMetrics.header.model' })}
{props.selectedStatisticalValidation.trained_model !== null &&
}
diff --git a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/trained-models/NewRFModelForm.tsx b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/trained-models/NewRFModelForm.tsx
index 4b3b09b6..c159e00c 100644
--- a/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/trained-models/NewRFModelForm.tsx
+++ b/src/frontend/static/frontend/src/components/biomarkers/biomarker-details-modal/trained-models/NewRFModelForm.tsx
@@ -3,6 +3,7 @@ import { Form, InputOnChangeData } from 'semantic-ui-react'
import { RFParameters } from '../../types'
import { InfoPopup } from '../../../pipeline/experiment-result/gene-gem-details/InfoPopup'
import { InputLabel } from '../../../common/InputLabel'
+import { useIntl } from 'react-intl'
interface NewSVMModelFormProps {
/** Getter of the selected params to handle in the form. */
@@ -14,6 +15,7 @@ interface NewSVMModelFormProps {
}
export const NewRFModelForm = (props: NewSVMModelFormProps) => {
+ const intl = useIntl()
// TODO: add an InfoPopup for all the inputs
const lookForOptimalNEstimators = props.parameters.lookForOptimalNEstimators
return (
@@ -40,9 +42,9 @@ export const NewRFModelForm = (props: NewSVMModelFormProps) => {
+