diff --git a/package-lock.json b/package-lock.json
index 3336df3..6310b85 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,20 +8,20 @@
"name": "client",
"version": "0.0.0",
"dependencies": {
- "@marsidev/react-turnstile": "^1.5.4",
+ "@marsidev/react-turnstile": "^1.6.0",
"@vnedyalk0v/react19-simple-maps": "^2.0.10",
"axios": "^1.19.0",
"country-list": "^2.4.1",
"d3-geo": "^3.1.1",
"d3-scale": "^4.0.2",
- "i18next": "^26.3.6",
+ "i18next": "^26.4.0",
"i18next-browser-languagedetector": "^8.2.1",
- "lucide-react": "^1.28.0",
+ "lucide-react": "^1.34.0",
"or": "^0.2.0",
"qrcode.react": "^4.2.0",
"react": "^19.2.8",
"react-dom": "^19.2.8",
- "react-i18next": "^17.0.11",
+ "react-i18next": "^17.0.12",
"react-is": "^19.2.8",
"react-markdown": "^10.1.0",
"react-router-dom": "^7.18.2",
@@ -31,17 +31,17 @@
"devDependencies": {
"@eslint/js": "^10.0.1",
"@types/country-list": "^2.1.4",
- "@types/node": "^26.1.2",
+ "@types/node": "^26.2.0",
"@types/react": "^19.2.18",
- "@types/react-dom": "^19.2.4",
- "@vitejs/plugin-react": "^6.0.5",
- "eslint": "^10.8.0",
+ "@types/react-dom": "^19.2.5",
+ "@vitejs/plugin-react": "^6.1.0",
+ "eslint": "^10.9.0",
"eslint-plugin-react-hooks": "^7.1.1",
- "eslint-plugin-react-refresh": "^0.5.3",
- "globals": "^17.8.0",
+ "eslint-plugin-react-refresh": "^0.5.4",
+ "globals": "^17.11.0",
"typescript": "^7.0.2",
- "typescript-eslint": "^8.65.0",
- "vite": "^8.2.0"
+ "typescript-eslint": "^8.67.0",
+ "vite": "^8.2.2"
}
},
"node_modules/@babel/code-frame": {
@@ -237,9 +237,9 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.29.2",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz",
- "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz",
+ "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -293,40 +293,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/@emnapi/core": {
- "version": "2.0.0-alpha.3",
- "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-2.0.0-alpha.3.tgz",
- "integrity": "sha512-AZypUeJ/yByuxyS7BlSNRDOMLMlROYtjYdIAuBmJssVz1UJDSeYxLrdizhXCFYhedC5bqd/ASy8EuNXbVVXp9g==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/wasi-threads": "2.0.1",
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@emnapi/runtime": {
- "version": "2.0.0-alpha.3",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-2.0.0-alpha.3.tgz",
- "integrity": "sha512-hFPAhMUjJD9BSyCANEISPOogeXC9Zo9ZQl7L6vKnaVsMkCtzznaW/naYypeyl0Gv5rYfWYsZbpixTMpjDJzQeA==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@emnapi/wasi-threads": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-2.0.1.tgz",
- "integrity": "sha512-9DsSk+o5NBX0CCJT8s0EROGSGxjR/tKu6aBTaVyq+SjAEQH4XcdcRxPBRzsBLizTTJ49MJjF+jgu3qnO9GLQcQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
"node_modules/@eslint-community/eslint-utils": {
"version": "4.9.1",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
@@ -572,41 +538,19 @@
}
},
"node_modules/@marsidev/react-turnstile": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/@marsidev/react-turnstile/-/react-turnstile-1.5.4.tgz",
- "integrity": "sha512-2+ulBzQPYcC5jZ4Pghlcc6a6+CQ6L0cgTxtbavZbcHcG5/wSQsTAM+vDudF94L9AUPG4uSNQF1kotmvx0Ns/QA==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@marsidev/react-turnstile/-/react-turnstile-1.6.0.tgz",
+ "integrity": "sha512-T2Um71ZdBgQBiyS01xgRMvDWk+mEsrLtXLFVhOC917OVEO584wbPOWj1sw35RaM17+q9QoADgLVcH60xr9NRqQ==",
"license": "MIT",
"peerDependencies": {
"react": "^17.0.2 || ^18.0.0 || ^19.0",
"react-dom": "^17.0.2 || ^18.0.0 || ^19.0"
}
},
- "node_modules/@napi-rs/wasm-runtime": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.2.tgz",
- "integrity": "sha512-JfB4kuJQjaoHuCTseIINHtHWeJnvgEcxjwA5t/Y00ZgaOO1Crz3fjT/p8kT28zA/Caz7oiUMn3d6H2yOVCVwuw==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@tybys/wasm-util": "^0.10.3"
- },
- "engines": {
- "node": "^20.19.0 || ^22.13.0 || >=23.5.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Brooooooklyn"
- },
- "peerDependencies": {
- "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.3",
- "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.3"
- }
- },
"node_modules/@oxc-project/types": {
- "version": "0.142.0",
- "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.142.0.tgz",
- "integrity": "sha512-7W+2q5AKQVU36fkaryontrHn3YDt1RyUYXatw9i5H8ocYe2sPKSFB6eS8WNPeRKiN1qAWWZUPm7gwFzJGrccqQ==",
+ "version": "0.146.0",
+ "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.146.0.tgz",
+ "integrity": "sha512-XC0QsnnhVe7sLIWmYmdPw7x5P0h4W8vUU3Nv1ySgWXtvCz8NizoAEpGXA0sOYoJQV2Rl13LgURAHQ5cI5ILCSA==",
"dev": true,
"license": "MIT",
"funding": {
@@ -639,10 +583,27 @@
}
}
},
+ "node_modules/@rolldown/binding-android-arm-eabi": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.5.tgz",
+ "integrity": "sha512-DLe/i+l8ynIBY7XEQ191TeZvCoowIGa18R+dIV30GW7DiOtp74i/xX8hs8GUjW5ARV7VZuie3d6AumSmCwbeRA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
"node_modules/@rolldown/binding-android-arm64": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.1.tgz",
- "integrity": "sha512-02hOeOSryYxVrOIphmLAsqnCJWxwlzFk+pEt/N/i6OgT3lShHO7xGCU5cpgchRDHboAEbSjzgGh+O/u1GswQmA==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.5.tgz",
+ "integrity": "sha512-zXcwKlQApYAOELHd8PwKDFkagYF9Wy4e0RJ+0qnzl9Pjnpj75TEG8ufv40p2J7kCEfwZAsNiuzRIyNNMWT38ig==",
"cpu": [
"arm64"
],
@@ -657,9 +618,9 @@
}
},
"node_modules/@rolldown/binding-darwin-arm64": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.1.tgz",
- "integrity": "sha512-fMsTOnN0OjFm3CyppWPitKnc8UlliVARUULW6cfU6AIqjdtgmSFWSk9vecHzZduv/yMWIHDlRhM1e8Iff9uAfA==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.5.tgz",
+ "integrity": "sha512-dK4QakI42nzWgJT5sm4y4y/O//D4OxM75/cH28RLV+nzIN9AY+YsbuUVrUTjlLjXR6vpyxFbSsbmNuJ6BP9sww==",
"cpu": [
"arm64"
],
@@ -674,9 +635,9 @@
}
},
"node_modules/@rolldown/binding-darwin-x64": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.1.tgz",
- "integrity": "sha512-1wjKdz/XLGKHaTNHjQveQ/B23TKx4ItAqm1JbyVuvNPc4Ze0Fb48s49TAd/2zcplPl8okE/UbTgmlVfwT7eFeQ==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.5.tgz",
+ "integrity": "sha512-fqSALaUu1Wjd1nK2uW2kJDWdLCc8lx1IcY+MTY26Aurfdx19anlzhqXOgCFbBFQnlFDTn4TC1/7Nz4Bl2mLP3A==",
"cpu": [
"x64"
],
@@ -691,9 +652,9 @@
}
},
"node_modules/@rolldown/binding-freebsd-x64": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.1.tgz",
- "integrity": "sha512-Fa0jHR07E7YBN4vOEsbVf2briYNsuOowfLJaXULZM0ldMlaCaj2LJgLMbMe4iacRyZmvR8efFhgR9wKuGclQUg==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.5.tgz",
+ "integrity": "sha512-/vCnNxlkxs9tKxNDcyWUePpJ/PgTzxIaVhoM5SmG8UV+GR/IcPam4VYxi7GIMo7PSDuNqlJqvprqii9NqqVCMw==",
"cpu": [
"x64"
],
@@ -708,9 +669,9 @@
}
},
"node_modules/@rolldown/binding-linux-arm-gnueabihf": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.1.tgz",
- "integrity": "sha512-pzkgu1SSHGgRRyRZ4fbmSgmajbVt+epaLP99NDjFft69v/ypfTi6swBMiVdh2EkQ0OSnHE1lZDM7DRGkyAzUpA==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.5.tgz",
+ "integrity": "sha512-abk0NLA519LxRCszmbE0jYKuQ9YPocOXTiOXOo6Yr+YAT95VH+PtqYAjOJvGKt3viEd/x4qzabAlwd5bHOOARg==",
"cpu": [
"arm"
],
@@ -725,9 +686,9 @@
}
},
"node_modules/@rolldown/binding-linux-arm64-gnu": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.1.tgz",
- "integrity": "sha512-QI5SEDY8cbiYWHx0VO4vIc3UlS6a32vXHjU8Qy/17adEmZIPuByJg13UEvo9c/UCiUkdcVWY83C+b+JrwnNyUg==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.5.tgz",
+ "integrity": "sha512-Y7eALiJ8lr0M2HH103Js+g7V34wf6snlpZLAsHI90uLhr3PVlNsbFVAXJC9d/V6BnPyKtpSwI+NcB/RLxsQxuA==",
"cpu": [
"arm64"
],
@@ -742,9 +703,9 @@
}
},
"node_modules/@rolldown/binding-linux-arm64-musl": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.1.tgz",
- "integrity": "sha512-Sm41FyCeXqmYcERoYOCbGIL5hNfd8w9LQ7Y61Bev48HkcjaJqV/iiVOaiDxjVTRMS+QKrZmD8cfPt4uMVnvM+A==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.5.tgz",
+ "integrity": "sha512-xMvZgnbZg4YVnR/AX2b3oOPDTFYJvUVaJg5FedA/LuvexAtXibZQej4cnTkw3rjsJ/ggUROB64TdtETiim+FYA==",
"cpu": [
"arm64"
],
@@ -759,9 +720,9 @@
}
},
"node_modules/@rolldown/binding-linux-ppc64-gnu": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.1.tgz",
- "integrity": "sha512-2x+WhXTGl9yJYPbltW/BSEPTVz9OIWQyER4N+gJEDWkkn904eRcBzELqh/Hf7K0w/ubGbKNMv0ZC+94QK/IFEg==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.5.tgz",
+ "integrity": "sha512-GRjeqTUDHTo5GwntsLaAMcBahG3nlpjftXWZLN73HiYQlhwEowvarFgQnRnQZtIp4keXX7quXFbG38uPZBa2EA==",
"cpu": [
"ppc64"
],
@@ -776,9 +737,9 @@
}
},
"node_modules/@rolldown/binding-linux-s390x-gnu": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.1.tgz",
- "integrity": "sha512-eEjmQpuRQayHPWWnywaWHkFT3ToPbP3RYy42VVd/B9aBGDA+Ol25EIWHxKQST3IiWJjikCWUF7KtbfqwZrzVwQ==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.5.tgz",
+ "integrity": "sha512-vLNTR45F2Uwc8AufkNXPmB4VliaXs+FvcheEogIzOXzO4l+LzieXF5A/TWxLy5HtqpsRCHUfd0lPVrrdgXdLHQ==",
"cpu": [
"s390x"
],
@@ -793,9 +754,9 @@
}
},
"node_modules/@rolldown/binding-linux-x64-gnu": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.1.tgz",
- "integrity": "sha512-/Orga1fZYkLc/56jBICcHrKchl8Z2UKdDSr3LG9ToWO1lQ6a4Livk9Xz+9WN91zsz5QR3XQz2NNoSDEvP6qadw==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.5.tgz",
+ "integrity": "sha512-Mgj59/HTuYeK9Gz2MA+mBWKnHsAgkBSec15ZMb1st3oIfFbX7gCjOae7GydHhzcyQi9Z/7M1QuN9bR3oFqF0jQ==",
"cpu": [
"x64"
],
@@ -810,9 +771,9 @@
}
},
"node_modules/@rolldown/binding-linux-x64-musl": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.1.tgz",
- "integrity": "sha512-xxBJRL+0q0Kce7orznGWLuylHDY65vuARXZRpX+hPdv+DqK2c3NlCsVA98tlWzWNEE7yPqA/1NQ5nnCrj49Y5A==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.5.tgz",
+ "integrity": "sha512-mY8AP0/ichsbhAxGnLa3d3+MwV0EfgrPND2bplI3Ym8T6R2pJ0N87bvrKVwNXmdy3jnr6eQBecdqx/HMknBmpA==",
"cpu": [
"x64"
],
@@ -827,9 +788,9 @@
}
},
"node_modules/@rolldown/binding-openharmony-arm64": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.1.tgz",
- "integrity": "sha512-M6AdXIXw3s+/8XpKMzdGDEXGS1S7kwUsy+rcTIUIOx5Ge4nXKCtAFHFV9YKkXvGcC5WMoTjAteLzlsQROVI0Yw==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.5.tgz",
+ "integrity": "sha512-8SLssA2oweAxyRgDp789ACfRb/3P+zNRJpzZxSizxF9m8NUDQ4+3xjo8ttjhVGGw6Qxb70oZiEtIjaKikCO7Yw==",
"cpu": [
"arm64"
],
@@ -843,26 +804,10 @@
"node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/@rolldown/binding-wasm32-wasi": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.2.1.tgz",
- "integrity": "sha512-/TX0SoRGojHzSAHpfVBbavRVSazg5U3h3Y3VXfcc0cdugq6kxdqw8LPGFiPr+/7gE/60zRcsOY2Vi9b9eT0jww==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/core": "2.0.0-alpha.3",
- "@emnapi/runtime": "2.0.0-alpha.3",
- "@napi-rs/wasm-runtime": "^1.2.0"
- },
- "engines": {
- "node": "^20.19.0 || ^22.13.0 || >=23.5.0"
- }
- },
"node_modules/@rolldown/binding-win32-arm64-msvc": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.1.tgz",
- "integrity": "sha512-EvRrivJieyHG+AO9lleZWgq+g0+S7oV2C51yuqlcyU/R9net+sI4Pj0F+lUoP2bEr6TWX3SqFaaS0SzfLxSzkw==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.5.tgz",
+ "integrity": "sha512-vGbruD5zquhoc8D9SViXgN2FBJtNdTyQ4DtG+SWiEGlJiAzoKcZ2xp+xuXCffhubVdt0NJlTZqkeRuERy7g8Cw==",
"cpu": [
"arm64"
],
@@ -877,9 +822,9 @@
}
},
"node_modules/@rolldown/binding-win32-x64-msvc": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.1.tgz",
- "integrity": "sha512-Z4eCmn5QJ/5+azF9knpLWKfVd9aidn0mAe9TpJgvBLId9Ax3t0+JVxBmT25Bv7NBbVW1TZyKjQjQReouMeH5UQ==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.5.tgz",
+ "integrity": "sha512-e/SXpgISz+IoqVcSSI0rx/d/he8zqLex+/rCWpnHpmVfmPIUjag9H6P7zotf0gJHwPUhQxZ/mF8tr6acebT9yw==",
"cpu": [
"x64"
],
@@ -912,17 +857,6 @@
"integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==",
"license": "MIT"
},
- "node_modules/@tybys/wasm-util": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz",
- "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
"node_modules/@types/country-list": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@types/country-list/-/country-list-2.1.4.tgz",
@@ -1056,9 +990,9 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "26.1.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.2.tgz",
- "integrity": "sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-26.2.0.tgz",
+ "integrity": "sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1076,9 +1010,9 @@
}
},
"node_modules/@types/react-dom": {
- "version": "19.2.4",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.4.tgz",
- "integrity": "sha512-Bsc+QHgp+P/F02XDzNCY9jnZNCUuLki36KT7VKrTXXLdHf+vHMNZnW1rVu5DNW/rCK+fya3DATySbLM4yhtKUw==",
+ "version": "19.2.5",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.5.tgz",
+ "integrity": "sha512-fMPwH9v7r/pp43yUd2/Mbiex5KouJwwR3dzHkhLREUC6764VyDsqxhAxv6OFEYR1RhjOyD1naqba8ECDBe7ZQg==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -1098,17 +1032,17 @@
"license": "MIT"
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.65.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.65.0.tgz",
- "integrity": "sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==",
+ "version": "8.67.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.67.0.tgz",
+ "integrity": "sha512-Un7Heoyj65NREbKAyIrFxeM143NZpExWmy1Nep4DLeQOeLlTeumPjoNKnBrU5D5moWXbPJgRa5Uwcdu0faVNGQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.12.2",
- "@typescript-eslint/scope-manager": "8.65.0",
- "@typescript-eslint/type-utils": "8.65.0",
- "@typescript-eslint/utils": "8.65.0",
- "@typescript-eslint/visitor-keys": "8.65.0",
+ "@typescript-eslint/scope-manager": "8.67.0",
+ "@typescript-eslint/type-utils": "8.67.0",
+ "@typescript-eslint/utils": "8.67.0",
+ "@typescript-eslint/visitor-keys": "8.67.0",
"ignore": "^7.0.5",
"natural-compare": "^1.4.0",
"ts-api-utils": "^2.5.0"
@@ -1121,7 +1055,7 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^8.65.0",
+ "@typescript-eslint/parser": "^8.67.0",
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
"typescript": ">=4.8.4 <6.1.0"
}
@@ -1137,16 +1071,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.65.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.65.0.tgz",
- "integrity": "sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==",
+ "version": "8.67.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.67.0.tgz",
+ "integrity": "sha512-fUBfTuuEulWqX6V8+O3PtScV01tzYYRUDTAirHFKoRAt7nOzoGiPt0M/bB47wWNy0coOOcgEwAMUtBpykMxl6w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.65.0",
- "@typescript-eslint/types": "8.65.0",
- "@typescript-eslint/typescript-estree": "8.65.0",
- "@typescript-eslint/visitor-keys": "8.65.0",
+ "@typescript-eslint/scope-manager": "8.67.0",
+ "@typescript-eslint/types": "8.67.0",
+ "@typescript-eslint/typescript-estree": "8.67.0",
+ "@typescript-eslint/visitor-keys": "8.67.0",
"debug": "^4.4.3"
},
"engines": {
@@ -1162,14 +1096,14 @@
}
},
"node_modules/@typescript-eslint/project-service": {
- "version": "8.65.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.65.0.tgz",
- "integrity": "sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==",
+ "version": "8.67.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.67.0.tgz",
+ "integrity": "sha512-cvE8c7ulYeXN9fYuszhCeCsbzyVEXuhrRCybnBre7TUmqb5nRmBfQAwCj0O3WJFDeyAZt4VYv51vMCC9LHSdYw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.65.0",
- "@typescript-eslint/types": "^8.65.0",
+ "@typescript-eslint/tsconfig-utils": "^8.67.0",
+ "@typescript-eslint/types": "^8.67.0",
"debug": "^4.4.3"
},
"engines": {
@@ -1184,14 +1118,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.65.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.65.0.tgz",
- "integrity": "sha512-Esbl8OSYiVxBokYgWPf7VVWg/BE798wXhimnn9ML9Pt5qoDf8bfQlgjlKXR/k98+AcNzlLKYrpCcrcuZ9DZLgg==",
+ "version": "8.67.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.67.0.tgz",
+ "integrity": "sha512-EgvsleTwS4E+WzzSvem8fAUubLwatMNF1B5hHSLQxcvs7q2dtRhGyujHwLJSYlG41niJ7GP24Aha2+0mb1b2kg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.65.0",
- "@typescript-eslint/visitor-keys": "8.65.0"
+ "@typescript-eslint/types": "8.67.0",
+ "@typescript-eslint/visitor-keys": "8.67.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1202,9 +1136,9 @@
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.65.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.65.0.tgz",
- "integrity": "sha512-j6GzGqCiRdA7Qhur2VVmKZAkBLfnHFQfx4TaJGL9RMveZqCo48jSHHO0DTgizEnGhtWnqmbtCUSrqSkdiY/0Hg==",
+ "version": "8.67.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.67.0.tgz",
+ "integrity": "sha512-vV+LUSv5njUWsknE71fqKTlXUva+R76SaeORd6Zojcunk/6DvKFXONU3BrAs2H49mbygUXt6gbYunzwqNwlhdg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1219,15 +1153,15 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.65.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.65.0.tgz",
- "integrity": "sha512-YjaZ7PRI5qY7ax2L3PbvX0rRyGtipAReCWs0mhhDBHjH/vl0g0BonaGXrKdKpMbIIsMIwDgbk/xzkBTyAltS5g==",
+ "version": "8.67.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.67.0.tgz",
+ "integrity": "sha512-aVWDXbRmdXO9siTfX4ditQI1T9+zVcNazT48EJCD0v40/9RIFoUgZ05CmGEq9H2gixRpjUn/iplwvlcvutJW/Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.65.0",
- "@typescript-eslint/typescript-estree": "8.65.0",
- "@typescript-eslint/utils": "8.65.0",
+ "@typescript-eslint/types": "8.67.0",
+ "@typescript-eslint/typescript-estree": "8.67.0",
+ "@typescript-eslint/utils": "8.67.0",
"debug": "^4.4.3",
"ts-api-utils": "^2.5.0"
},
@@ -1244,9 +1178,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.65.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.65.0.tgz",
- "integrity": "sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==",
+ "version": "8.67.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.67.0.tgz",
+ "integrity": "sha512-sBtgslww8nsMYUjhdPBiSyUqSzT8uR6g93A2QXnQC8+cGdjz0CyaOdqHDRJb1AtORbZCNUJBBeFA/tNR2uQmww==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1258,16 +1192,16 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.65.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.65.0.tgz",
- "integrity": "sha512-JboAE2swaYt4tb1fHhHTABE2K+OLy09XfcTbhnk4Pw96f9dd2e9iYsJ28gBggHlo5z5x1rkyWvcPoTuNTd4oGg==",
+ "version": "8.67.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.67.0.tgz",
+ "integrity": "sha512-EKQBCE9yNlRJYm7jdTW5AhDacDUmSwQb0FAJAmK2EKYrNXIsa2vxcSZx6PvJ/dEdI6lS+Y9W+EXckLj0iPFGcw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/project-service": "8.65.0",
- "@typescript-eslint/tsconfig-utils": "8.65.0",
- "@typescript-eslint/types": "8.65.0",
- "@typescript-eslint/visitor-keys": "8.65.0",
+ "@typescript-eslint/project-service": "8.67.0",
+ "@typescript-eslint/tsconfig-utils": "8.67.0",
+ "@typescript-eslint/types": "8.67.0",
+ "@typescript-eslint/visitor-keys": "8.67.0",
"debug": "^4.4.3",
"minimatch": "^10.2.2",
"semver": "^7.7.3",
@@ -1299,16 +1233,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.65.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.65.0.tgz",
- "integrity": "sha512-gXiwIHsYreboxeJucHKPvgwl7dXt50mF8s1/c00cP/WoVTyWKFdtfhRWwZiXYFU5H2O8vVoSLNrexFZjYS/SGA==",
+ "version": "8.67.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.67.0.tgz",
+ "integrity": "sha512-U9D1FdwEWBwok3hxxSdhclMb0twvt9QnjIQ0VfQ1AiX2epnpSgv2ubVDsayOFyY8K6FX+AQ7E0FKWVG3iKsj1A==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.9.1",
- "@typescript-eslint/scope-manager": "8.65.0",
- "@typescript-eslint/types": "8.65.0",
- "@typescript-eslint/typescript-estree": "8.65.0"
+ "@typescript-eslint/scope-manager": "8.67.0",
+ "@typescript-eslint/types": "8.67.0",
+ "@typescript-eslint/typescript-estree": "8.67.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1323,13 +1257,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.65.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.65.0.tgz",
- "integrity": "sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==",
+ "version": "8.67.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.67.0.tgz",
+ "integrity": "sha512-fkv8dHRDqfGtTHuJeebdrQ7cX6Ad4WAS00rgHh9UGvMycF1mjBfsxry1XsLIFhWZ6Judlh6UdzK+TYlbpCXgnA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.65.0",
+ "@typescript-eslint/types": "8.67.0",
"eslint-visitor-keys": "^5.0.0"
},
"engines": {
@@ -1687,9 +1621,9 @@
"license": "ISC"
},
"node_modules/@vitejs/plugin-react": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.5.tgz",
- "integrity": "sha512-BOVzne/NL162sMdResB25mUv+vWMF5NoAjNf09TeGlE7ZpszZWSD3winycicLJw72yeVsoCn/2kOhEuCvEShMA==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.1.0.tgz",
+ "integrity": "sha512-qd2BzUBehkov86WFhg0JkEFEYyCLG9uPCe6qWTY/kRlss9OvJrOF2UbIWT7p+8IzZHkEu0DNGHc4HSv+JdDLsw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1701,6 +1635,7 @@
"peerDependencies": {
"@rolldown/plugin-babel": "^0.1.7 || ^0.2.0",
"babel-plugin-react-compiler": "^1.0.0",
+ "oxc-transform-react": "^0.145.0",
"vite": "^8.0.0"
},
"peerDependenciesMeta": {
@@ -1709,6 +1644,9 @@
},
"babel-plugin-react-compiler": {
"optional": true
+ },
+ "oxc-transform-react": {
+ "optional": true
}
}
},
@@ -2436,9 +2374,9 @@
}
},
"node_modules/eslint": {
- "version": "10.8.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.8.0.tgz",
- "integrity": "sha512-nuKKvN+oIBO0koN7Tm7dlkmnkc21mtt0QJLwAKzjLq14y6lRTdVG36MZHJ8eQHwdJMwZbQNMlPOYedMq/oVJvQ==",
+ "version": "10.9.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.9.0.tgz",
+ "integrity": "sha512-5KeEOJZBfEVA47boFiBsf+6MmmJpffM7qEBg4pLla2e4nlKgdKlqCW0oSLOGsT8Wl5uCGJptLV1bkaiShj90Gw==",
"dev": true,
"license": "MIT",
"workspaces": [
@@ -2515,9 +2453,9 @@
}
},
"node_modules/eslint-plugin-react-refresh": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.5.3.tgz",
- "integrity": "sha512-5EMmLCV98Pi4o/f/3DP/v/tNqLHMIc9I8LKClNDWhZ9JTho89/kQcitCXQBMG7sAfVRK0Ie3T2EDOzp1YXYiVA==",
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.5.4.tgz",
+ "integrity": "sha512-7bqTKz7T0r+HKWFarNXByDE9/5+73wI2ru+M3zuqGbR7s/b/5/pQJXZoufWlrngqGqoZto73ZkGumCdLxk+4rw==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -2853,9 +2791,9 @@
}
},
"node_modules/globals": {
- "version": "17.8.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-17.8.0.tgz",
- "integrity": "sha512-Zz/LMDZScFmkakeL2cTHzf+PbWKdpU3uclqkZT7TjDG58j5WPt0PpA+n9uPI24fZtlw07q0OtEi84K+umsRzqQ==",
+ "version": "17.11.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-17.11.0.tgz",
+ "integrity": "sha512-Z2I8hM+PbJDXQDq3Icgpzv+mPdwr68iZUU9d5WW4FuXfDUQfkZaZuvjMv42/5crNyw154+9+VWXbYrUgDXbxNw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3006,9 +2944,9 @@
}
},
"node_modules/i18next": {
- "version": "26.3.6",
- "resolved": "https://registry.npmjs.org/i18next/-/i18next-26.3.6.tgz",
- "integrity": "sha512-Bu5Z2nAXgfVyM8xvW3jk9EKRIuX37PudsrBViThNFx7CR7aaYTpP01cxNB/E4c4UUzTDiAZRstEhsRfPOL/8xA==",
+ "version": "26.4.0",
+ "resolved": "https://registry.npmjs.org/i18next/-/i18next-26.4.0.tgz",
+ "integrity": "sha512-rsmK5bFqsD1AetSFSIa43wtNR4WpvvH4p0tLEsTxkC7QTrfdFm06nbQ95bh8Og4wwaCnUEcm9DVYL2cgxitiQg==",
"funding": [
{
"type": "individual",
@@ -3549,9 +3487,9 @@
}
},
"node_modules/lucide-react": {
- "version": "1.28.0",
- "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.28.0.tgz",
- "integrity": "sha512-fARAFJULsGuDDydjp6+6blekG/sBIM29TerzLjc9bQUKAcEfrSc4ZQKb25KRz4OMKd87cZTb5dgq0w/T6KufVg==",
+ "version": "1.34.0",
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.34.0.tgz",
+ "integrity": "sha512-vnjGJNI7Htk5+oWW8gXGuaLgwgAb0T6/iZbBrp9JCfRFwdNWZ0YTm3eyxjOLgwN6r8iyAf3UA70zNmBRBNv7yg==",
"license": "ISC",
"peerDependencies": {
"react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
@@ -4465,9 +4403,9 @@
"license": "MIT"
},
"node_modules/nanoid": {
- "version": "3.3.16",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz",
- "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==",
+ "version": "3.3.18",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz",
+ "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==",
"dev": true,
"funding": [
{
@@ -4624,9 +4562,9 @@
}
},
"node_modules/postcss": {
- "version": "8.5.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.23.tgz",
- "integrity": "sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==",
+ "version": "8.5.26",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz",
+ "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==",
"dev": true,
"funding": [
{
@@ -4644,7 +4582,7 @@
],
"license": "MIT",
"dependencies": {
- "nanoid": "^3.3.16",
+ "nanoid": "^3.3.17",
"picocolors": "^1.1.1",
"source-map-js": "^1.2.1"
},
@@ -4722,12 +4660,12 @@
}
},
"node_modules/react-i18next": {
- "version": "17.0.11",
- "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-17.0.11.tgz",
- "integrity": "sha512-cDtkXgxjuFTWUH6V+aQn1Ve5vDiUztCNPWW5GtSHDccsgRXO1nE6QFWCEmc1KAutrb3OUv87wFShJL5RhUwPXg==",
+ "version": "17.0.12",
+ "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-17.0.12.tgz",
+ "integrity": "sha512-lFWPEGkxQ6RhusdUkysFBD58VHfSSzvHBzqMgN0SvfVpdQGfwtNkStTqdy08/sJd7s807qqutgx93fRpD0DJ3Q==",
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.29.2",
+ "@babel/runtime": "^7.29.7",
"html-parse-stringify": "^4.0.1",
"use-sync-external-store": "^1.6.0"
},
@@ -4960,13 +4898,13 @@
"license": "MIT"
},
"node_modules/rolldown": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.1.tgz",
- "integrity": "sha512-4FKJhg8d3OiyQOA6Q1Q0hoFFpW9/OoX+VsHzpECsdsIZoOArrAK90gl59YK/Z+gnDel45bgJZK03ozH/9bCqEw==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.5.tgz",
+ "integrity": "sha512-VD2IE5PUG4Oj8zz2VGykiYd5wbnjdIiSsNQb8Qu5B+noEp+A78mu2iVvpp27g8es14Tk9rofNs5Tku9iQCS4fA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@oxc-project/types": "=0.142.0",
+ "@oxc-project/types": "=0.146.0",
"@rolldown/pluginutils": "^1.0.0"
},
"bin": {
@@ -4976,21 +4914,21 @@
"node": "^20.19.0 || >=22.12.0"
},
"optionalDependencies": {
- "@rolldown/binding-android-arm64": "1.2.1",
- "@rolldown/binding-darwin-arm64": "1.2.1",
- "@rolldown/binding-darwin-x64": "1.2.1",
- "@rolldown/binding-freebsd-x64": "1.2.1",
- "@rolldown/binding-linux-arm-gnueabihf": "1.2.1",
- "@rolldown/binding-linux-arm64-gnu": "1.2.1",
- "@rolldown/binding-linux-arm64-musl": "1.2.1",
- "@rolldown/binding-linux-ppc64-gnu": "1.2.1",
- "@rolldown/binding-linux-s390x-gnu": "1.2.1",
- "@rolldown/binding-linux-x64-gnu": "1.2.1",
- "@rolldown/binding-linux-x64-musl": "1.2.1",
- "@rolldown/binding-openharmony-arm64": "1.2.1",
- "@rolldown/binding-wasm32-wasi": "1.2.1",
- "@rolldown/binding-win32-arm64-msvc": "1.2.1",
- "@rolldown/binding-win32-x64-msvc": "1.2.1"
+ "@rolldown/binding-android-arm-eabi": "1.2.5",
+ "@rolldown/binding-android-arm64": "1.2.5",
+ "@rolldown/binding-darwin-arm64": "1.2.5",
+ "@rolldown/binding-darwin-x64": "1.2.5",
+ "@rolldown/binding-freebsd-x64": "1.2.5",
+ "@rolldown/binding-linux-arm-gnueabihf": "1.2.5",
+ "@rolldown/binding-linux-arm64-gnu": "1.2.5",
+ "@rolldown/binding-linux-arm64-musl": "1.2.5",
+ "@rolldown/binding-linux-ppc64-gnu": "1.2.5",
+ "@rolldown/binding-linux-s390x-gnu": "1.2.5",
+ "@rolldown/binding-linux-x64-gnu": "1.2.5",
+ "@rolldown/binding-linux-x64-musl": "1.2.5",
+ "@rolldown/binding-openharmony-arm64": "1.2.5",
+ "@rolldown/binding-win32-arm64-msvc": "1.2.5",
+ "@rolldown/binding-win32-x64-msvc": "1.2.5"
}
},
"node_modules/scheduler": {
@@ -5160,14 +5098,6 @@
"typescript": ">=4.8.4"
}
},
- "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,
- "license": "0BSD",
- "optional": true
- },
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -5217,16 +5147,16 @@
}
},
"node_modules/typescript-eslint": {
- "version": "8.65.0",
- "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.65.0.tgz",
- "integrity": "sha512-/ggrHAwyjENDusvyxbuqxAC2dTnZg/Z8F+fgQtYIz+L6n/9HfSlEZcFGV/NsMNa6CkGk0xUjUAFwC0vHOflvIA==",
+ "version": "8.67.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.67.0.tgz",
+ "integrity": "sha512-S2udFs8tCKEKffuJ4TB1idGUZiXdCPGi3IPBGWXarbLQ5UPXORV8QEVzJ4gCRduURMb5EkpNCdjbk0eDIuI8Yg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/eslint-plugin": "8.65.0",
- "@typescript-eslint/parser": "8.65.0",
- "@typescript-eslint/typescript-estree": "8.65.0",
- "@typescript-eslint/utils": "8.65.0"
+ "@typescript-eslint/eslint-plugin": "8.67.0",
+ "@typescript-eslint/parser": "8.67.0",
+ "@typescript-eslint/typescript-estree": "8.67.0",
+ "@typescript-eslint/utils": "8.67.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5435,16 +5365,16 @@
}
},
"node_modules/vite": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.0.tgz",
- "integrity": "sha512-pn+CFpM0lwDeKwmOq1ZaBK/9sjorZcgqxki6MbY/jPEVd9vichIlmlD4HmQ5wdP5EgqQCFRaACBxMC7uEGc6lQ==",
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.2.tgz",
+ "integrity": "sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"lightningcss": "^1.33.0",
"picomatch": "^4.0.5",
- "postcss": "^8.5.23",
- "rolldown": "~1.2.0",
+ "postcss": "^8.5.26",
+ "rolldown": "~1.2.4",
"tinyglobby": "^0.2.17"
},
"bin": {
@@ -5461,7 +5391,7 @@
},
"peerDependencies": {
"@types/node": "^20.19.0 || >=22.12.0",
- "@vitejs/devtools": "^0.4.0",
+ "@vitejs/devtools": "^0.4.0 || ^0.5.0",
"esbuild": "^0.27.0 || ^0.28.0",
"jiti": ">=1.21.0",
"less": "^4.0.0",
diff --git a/package.json b/package.json
index 0738aab..de72a0a 100644
--- a/package.json
+++ b/package.json
@@ -11,20 +11,20 @@
"preview": "vite preview"
},
"dependencies": {
- "@marsidev/react-turnstile": "^1.5.4",
+ "@marsidev/react-turnstile": "^1.6.0",
"@vnedyalk0v/react19-simple-maps": "^2.0.10",
"axios": "^1.19.0",
"country-list": "^2.4.1",
"d3-geo": "^3.1.1",
"d3-scale": "^4.0.2",
- "i18next": "^26.3.6",
+ "i18next": "^26.4.0",
"i18next-browser-languagedetector": "^8.2.1",
- "lucide-react": "^1.28.0",
+ "lucide-react": "^1.34.0",
"or": "^0.2.0",
"qrcode.react": "^4.2.0",
"react": "^19.2.8",
"react-dom": "^19.2.8",
- "react-i18next": "^17.0.11",
+ "react-i18next": "^17.0.12",
"react-is": "^19.2.8",
"react-markdown": "^10.1.0",
"react-router-dom": "^7.18.2",
@@ -34,19 +34,19 @@
"devDependencies": {
"@eslint/js": "^10.0.1",
"@types/country-list": "^2.1.4",
- "@types/node": "^26.1.2",
+ "@types/node": "^26.2.0",
"@types/react": "^19.2.18",
- "@types/react-dom": "^19.2.4",
- "@vitejs/plugin-react": "^6.0.5",
- "eslint": "^10.8.0",
+ "@types/react-dom": "^19.2.5",
+ "@vitejs/plugin-react": "^6.1.0",
+ "eslint": "^10.9.0",
"eslint-plugin-react-hooks": "^7.1.1",
- "eslint-plugin-react-refresh": "^0.5.3",
- "globals": "^17.8.0",
+ "eslint-plugin-react-refresh": "^0.5.4",
+ "globals": "^17.11.0",
"typescript": "^7.0.2",
- "typescript-eslint": "^8.65.0",
- "vite": "^8.2.0"
+ "typescript-eslint": "^8.67.0",
+ "vite": "^8.2.2"
},
"overrides": {
- "vite": "^8.2.0"
+ "vite": "^8.2.2"
}
}
diff --git a/src/App.css b/src/App.css
index 80e9b98..b2f9693 100644
--- a/src/App.css
+++ b/src/App.css
@@ -474,8 +474,7 @@ h3 {
grid-template-columns: 1fr;
}
- .auth-card,
- .settings-card {
+ .auth-card {
padding: 2rem 1.5rem;
}
}
@@ -909,8 +908,7 @@ h3 {
padding: 2rem;
}
-.auth-card,
-.settings-card {
+.auth-card {
background: var(--surface);
border: 1px solid var(--border);
padding: 3rem;
@@ -1950,7 +1948,103 @@ h3 {
/* Screenshot Gallery */
.screenshot-gallery {
- margin-bottom: 3rem;
+ margin-bottom: 2rem;
+}
+
+.plugin-recent-update {
+ background: var(--surface);
+ border: 1px solid var(--border);
+ border-left: 3px solid var(--primary);
+ border-radius: 12px;
+ padding: 1.25rem 1.5rem;
+ margin-bottom: 2.25rem;
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
+}
+
+.plugin-recent-update-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 1rem;
+ flex-wrap: wrap;
+ margin-bottom: 0.85rem;
+ padding-bottom: 0.85rem;
+ border-bottom: 1px solid var(--border);
+}
+
+.plugin-recent-update-title-group {
+ display: flex;
+ align-items: center;
+ gap: 0.65rem;
+ flex-wrap: wrap;
+}
+
+.plugin-recent-update-title {
+ font-size: 1rem;
+ font-weight: 800;
+ color: var(--text);
+ margin: 0;
+ display: flex;
+ align-items: center;
+ gap: 0.45rem;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+}
+
+.plugin-recent-update-badge {
+ display: inline-flex;
+ align-items: center;
+ padding: 2px 8px;
+ border-radius: 6px;
+ background: rgba(var(--primary-rgb), 0.12);
+ color: var(--primary);
+ font-family: var(--font-mono);
+ font-size: 0.82rem;
+ font-weight: 700;
+ border: 1px solid rgba(var(--primary-rgb), 0.25);
+}
+
+.plugin-recent-update-date {
+ font-size: 0.82rem;
+ color: var(--text-muted);
+}
+
+.plugin-recent-update-history-btn {
+ display: inline-flex;
+ align-items: center;
+ gap: 5px;
+ background: rgba(255, 255, 255, 0.04);
+ border: 1px solid var(--border);
+ color: var(--text-muted);
+ padding: 5px 12px;
+ border-radius: 6px;
+ font-size: 0.78rem;
+ font-weight: 600;
+ cursor: pointer;
+ transition: all 0.15s ease;
+}
+
+.plugin-recent-update-history-btn:hover {
+ color: var(--text);
+ background: rgba(255, 255, 255, 0.08);
+ border-color: var(--primary);
+}
+
+.plugin-recent-update-body {
+ font-size: 0.92rem;
+ line-height: 1.6;
+ color: var(--text);
+}
+
+.plugin-recent-update-body p:last-child {
+ margin-bottom: 0;
+}
+
+.plugin-recent-update-empty {
+ font-size: 0.88rem;
+ color: var(--text-muted);
+ font-style: italic;
+ margin: 0;
}
.lightbox-overlay {
@@ -2049,76 +2143,7 @@ h3 {
}
-/* --- Profile Page --- */
-.profile-page .page-title {
- margin-bottom: 2rem;
-}
-
-.profile-layout {
- display: flex;
- gap: 2rem;
- max-width: 1200px;
- margin: 0 auto;
- align-items: flex-start;
-}
-
-.profile-nav {
- display: flex;
- flex-direction: column;
- background: var(--surface);
- border: 1px solid var(--border);
- border-radius: 12px;
- padding: 1rem;
- min-width: 200px;
- position: sticky;
- top: 120px;
- /* Adjust based on navbar height */
-}
-
-.profile-nav-item {
- display: block;
- padding: 0.8rem 1rem;
- margin-bottom: 0.5rem;
- border: none;
- background: transparent;
- color: var(--text-muted);
- text-align: left;
- cursor: pointer;
- font-size: 1rem;
- font-weight: 600;
- border-radius: 8px;
- transition: all 0.2s;
-}
-
-.profile-nav-item:hover {
- color: var(--text);
- background: rgba(var(--primary-rgb), 0.1);
- /* Subtle hover effect */
-}
-
-.profile-nav-item.active {
- color: var(--primary);
- background: rgba(var(--primary-rgb), 0.2);
- /* Highlight active tab */
- font-weight: 700;
-}
-
-.profile-content {
- flex-grow: 1;
- background: var(--surface);
- border: 1px solid var(--border);
- border-radius: 12px;
- padding: 2.5rem;
-}
-
-.profile-section .section-title {
- margin-top: 0;
- margin-bottom: 2rem;
-}
-
-.profile-section form {
- margin-top: 1.5rem;
-}
+/* --- Form Groups & Messages --- */
.form-group {
margin-bottom: 1.5rem;
@@ -2568,120 +2593,7 @@ h3 {
font-weight: 700;
}
-/* --- Profile Page --- */
-.profile-page .page-title {
- margin-bottom: 2rem;
-}
-.profile-layout {
- display: flex;
- gap: 2rem;
- max-width: 1200px;
- margin: 0 auto;
- align-items: flex-start;
-}
-
-.profile-nav {
- display: flex;
- flex-direction: column;
- background: var(--surface);
- border: 1px solid var(--border);
- border-radius: 12px;
- padding: 1rem;
- min-width: 200px;
- position: sticky;
- top: 120px;
-}
-
-.profile-nav-item {
- display: block;
- padding: 0.8rem 1rem;
- margin-bottom: 0.5rem;
- border: none;
- background: transparent;
- color: var(--text-muted);
- text-align: left;
- cursor: pointer;
- font-size: 1rem;
- font-weight: 600;
- border-radius: 8px;
- transition: all 0.2s;
-}
-
-.profile-nav-item:hover {
- color: var(--text);
- background: rgba(var(--primary-rgb), 0.1);
-}
-
-.profile-nav-item.active {
- color: var(--primary);
- background: rgba(var(--primary-rgb), 0.2);
- font-weight: 700;
-}
-
-.profile-content {
- flex-grow: 1;
- background: var(--surface);
- border: 1px solid var(--border);
- border-radius: 12px;
- padding: 2.5rem;
-}
-
-.profile-section .section-title {
- margin-top: 0;
- margin-bottom: 2rem;
-}
-
-.profile-section form {
- margin-top: 1.5rem;
-}
-
-.form-group {
- margin-bottom: 1.5rem;
-}
-
-.form-group label {
- display: block;
- font-size: 0.85rem;
- color: var(--text-muted);
- margin-bottom: 0.5rem;
- text-transform: uppercase;
- font-weight: 600;
-}
-
-.form-group input {
- width: 100%;
- padding: 12px 15px;
- border-radius: 8px;
- border: 1px solid var(--border);
- background: var(--bg);
- color: var(--text);
- font-size: 1rem;
- outline: none;
- transition: border-color 0.2s;
-}
-
-.form-group input:focus {
- border-color: var(--primary);
-}
-
-.form-message {
- margin-bottom: 1rem;
- padding: 10px;
- border-radius: 8px;
- text-align: center;
- font-weight: 600;
-}
-
-.form-message.success {
- background: rgba(74, 222, 128, 0.2);
- color: var(--success);
-}
-
-.form-message.error {
- background: rgba(255, 68, 68, 0.2);
- color: #ff4444;
-}
.btn-report {
background: none;
@@ -2830,7 +2742,7 @@ h3 {
position: relative;
display: flex;
flex-direction: column;
- background: var(--bg);
+ background: var(--surface);
border: 1px solid var(--border);
border-radius: 10px;
overflow: hidden;
@@ -3176,7 +3088,40 @@ h3 {
SETTINGS PAGE (ProfilePage.tsx)
═══════════════════════════════════════════════════════════════════════════ */
+.profile-page {
+ max-width: 1200px;
+ width: 100%;
+ margin: 0 auto;
+ padding: 3rem 1.5rem 5rem;
+ box-sizing: border-box;
+}
+
+.profile-page .page-title {
+ margin-bottom: 2.25rem;
+ font-size: clamp(2rem, 3.5vw, 2.75rem);
+}
+
+.profile-layout {
+ display: grid;
+ grid-template-columns: 260px 1fr;
+ gap: 2rem;
+ align-items: start;
+ width: 100%;
+}
+
/* ── Nav sidebar enhancements ── */
+.profile-nav {
+ display: flex;
+ flex-direction: column;
+ background: var(--surface);
+ border: 1px solid var(--border);
+ border-radius: 14px;
+ padding: 0.85rem;
+ position: sticky;
+ top: 90px;
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);
+}
+
.settings-nav-user {
display: flex;
align-items: center;
@@ -3198,7 +3143,7 @@ h3 {
}
.settings-nav-meta { overflow: hidden; }
.settings-nav-name {
- font-size: 0.9rem;
+ font-size: 0.92rem;
font-weight: 700;
color: var(--text);
margin: 0;
@@ -3207,9 +3152,9 @@ h3 {
text-overflow: ellipsis;
}
.settings-nav-email {
- font-size: 0.75rem;
+ font-size: 0.78rem;
color: var(--text-muted);
- margin: 0.1rem 0 0;
+ margin: 0.15rem 0 0;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
@@ -3222,15 +3167,56 @@ h3 {
.profile-nav-item {
display: flex;
align-items: center;
- gap: 0.6rem;
+ gap: 0.65rem;
+ padding: 0.75rem 0.95rem;
+ margin-bottom: 0.2rem;
+ border: none;
+ background: transparent;
+ color: var(--text-muted);
+ text-align: left;
+ cursor: pointer;
+ font-size: 0.9rem;
+ font-weight: 600;
+ border-radius: 8px;
+ transition: all 0.18s ease;
+ width: 100%;
+ box-sizing: border-box;
+}
+.profile-nav-item:hover {
+ color: var(--text);
+ background: rgba(255, 255, 255, 0.05);
+}
+.profile-nav-item.active {
+ color: #ffffff;
+ background: var(--primary);
+ font-weight: 700;
}
.profile-nav-item.danger { color: #ef4444; }
-.profile-nav-item.danger:hover { background: rgba(239, 68, 68, 0.1); }
-.profile-nav-item.danger.active { background: rgba(239, 68, 68, 0.15); color: #ef4444; }
+.profile-nav-item.danger:hover { background: rgba(239, 68, 68, 0.12); color: #ef4444; }
+.profile-nav-item.danger.active { background: #ef4444; color: #ffffff; }
+
+/* ── Profile Content Area (Transparent, no nested box!) ── */
+.profile-content {
+ min-width: 0;
+ width: 100%;
+ background: transparent !important;
+ border: none !important;
+ padding: 0 !important;
+ display: flex;
+ flex-direction: column;
+ gap: 1.5rem;
+}
+
+.profile-section {
+ display: flex;
+ flex-direction: column;
+ gap: 1.25rem;
+ width: 100%;
+}
/* ── Section header ── */
.settings-section-header {
- margin-bottom: 2rem;
+ margin-bottom: 0.5rem;
padding-bottom: 1.25rem;
border-bottom: 1px solid var(--border);
}
@@ -3241,27 +3227,32 @@ h3 {
line-height: 1.5;
}
-/* ── Settings card ── */
+/* ── Settings card (Unified clean card surface) ── */
.settings-card {
- background: var(--bg);
+ background: var(--surface);
border: 1px solid var(--border);
- border-radius: 12px;
+ border-radius: 14px;
margin-bottom: 1.25rem;
overflow: hidden;
- transition: border-color 0.2s;
+ width: 100%;
+ max-width: 100%;
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
+ transition: border-color 0.2s ease, box-shadow 0.2s ease;
+}
+.settings-card:hover {
+ border-color: color-mix(in srgb, var(--border) 60%, var(--primary));
}
-.settings-card:hover { border-color: color-mix(in srgb, var(--border) 60%, var(--primary)); }
.settings-card-header {
display: flex;
align-items: flex-start;
gap: 0.85rem;
- padding: 1.15rem 1.5rem;
+ padding: 1.25rem 1.75rem;
border-bottom: 1px solid var(--border);
- background: var(--surface);
+ background: rgba(255, 255, 255, 0.02);
}
.settings-card-icon {
- width: 32px;
- height: 32px;
+ width: 34px;
+ height: 34px;
border-radius: 8px;
background: rgba(var(--primary-rgb), 0.12);
color: var(--primary);
@@ -3271,19 +3262,19 @@ h3 {
flex-shrink: 0;
}
.settings-card-title {
- font-size: 0.92rem;
+ font-size: 0.95rem;
font-weight: 700;
color: var(--text);
margin: 0;
}
.settings-card-desc {
- font-size: 0.8rem;
+ font-size: 0.82rem;
color: var(--text-muted);
- margin: 0.2rem 0 0;
+ margin: 0.25rem 0 0;
line-height: 1.45;
}
.settings-card-body {
- padding: 1.5rem;
+ padding: 1.75rem;
}
/* ── Field ── */
@@ -3308,10 +3299,10 @@ h3 {
}
.settings-input {
width: 100%;
- padding: 10px 14px;
+ padding: 11px 14px;
border-radius: 8px;
border: 1px solid var(--border);
- background: var(--surface);
+ background: var(--bg);
color: var(--text);
font-size: 0.92rem;
outline: none;
@@ -3322,6 +3313,10 @@ h3 {
border-color: var(--primary);
box-shadow: 0 0 0 3px rgba(var(--primary-rgb), 0.15);
}
+.settings-input:disabled {
+ opacity: 0.6;
+ cursor: not-allowed;
+}
.settings-select { cursor: pointer; appearance: auto; }
/* ── Password input with eye toggle ── */
@@ -3606,6 +3601,40 @@ h3 {
.settings-danger-box { }
/* ── Responsive ── */
+@media (max-width: 960px) {
+ .profile-layout {
+ grid-template-columns: 220px 1fr;
+ gap: 1.5rem;
+ }
+}
+
@media (max-width: 768px) {
- .settings-toast { right: 1rem; left: 1rem; max-width: none; }
+ .profile-page {
+ padding: 2rem 1rem 3.5rem;
+ }
+
+ .profile-layout {
+ grid-template-columns: 1fr;
+ gap: 1.25rem;
+ }
+
+ .profile-nav {
+ position: static;
+ top: auto;
+ padding: 0.75rem;
+ }
+
+ .settings-card-header {
+ padding: 1.1rem 1.25rem;
+ }
+
+ .settings-card-body {
+ padding: 1.25rem;
+ }
+
+ .settings-toast {
+ right: 1rem;
+ left: 1rem;
+ max-width: none;
+ }
}
\ No newline at end of file
diff --git a/src/App.tsx b/src/App.tsx
index 5068907..fa357e7 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,7 +1,7 @@
import React, { createContext, useContext, useState, useEffect } from 'react';
import { BrowserRouter as Router, Routes, Route, Link, NavLink, useNavigate, Outlet, Navigate, useLocation } from 'react-router-dom';
import { useTranslation } from 'react-i18next';
-import { Search } from 'lucide-react';
+import { Search, Store, Package, Globe, PlusCircle } from 'lucide-react';
import Home from './pages/Home';
import PluginDetail from './pages/PluginDetail';
import LoginPage from './pages/auth/LoginPage';
@@ -124,9 +124,9 @@ const App = () => (
+ DEVELOPER STUDIO
+
+
+ {/* Mobile menu toggle button */}
+
+
+ {/* Navigation & Actions */}
+
+ Bug fixes and performance improvements. +
+ )} +