diff --git a/.gitignore b/.gitignore index 54608a4..a395b4d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ + *.db +dist + # Byte-compiled / optimized / DLL files __pycache__/ *.py[codz] diff --git a/src/config.ini b/src/config.ini index 6076cd3..74661e9 100644 --- a/src/config.ini +++ b/src/config.ini @@ -13,7 +13,7 @@ debug_enabled = True wg_conf_path = /etc/wireguard awg_conf_path = /etc/amnezia/amneziawg app_prefix = -auth_req = True +auth_req = False version = v5.0.0 dashboard_refresh_interval = 60000 dashboard_peer_list_display = grid diff --git a/src/main.py b/src/main.py index a0b36e6..88fcd0d 100644 --- a/src/main.py +++ b/src/main.py @@ -39,7 +39,11 @@ if __name__ == '__main__': prefix = config_server.get('app_prefix', '') # Configure the Flask app - app = flask.Flask("WGDashboard", template_folder=os.path.abspath("./static/dist/WGDashboardAdmin")) + app = flask.Flask( + "WGDashboard", + template_folder=os.path.abspath("./static/dist/WGDashboardAdmin"), + static_folder=os.path.abspath("./static/dist/WGDashboardAdmin") + ) app.register_blueprint(routes, url_prefix=prefix) app.wgd_config = config_contents diff --git a/src/modules/routes/routes.py b/src/modules/routes/routes.py index 8fc04de..e011887 100644 --- a/src/modules/routes/routes.py +++ b/src/modules/routes/routes.py @@ -3,8 +3,8 @@ import logging as log import flask - import json +import os from .response import make_resp_obj from .utilities import helpers @@ -69,7 +69,9 @@ def api_authenticate(): auth_required_flag = config_server.get('auth_req', True) if not auth_required_flag: - _, config_other = util.filter_config(flask.current_app.wgd_config, 'OTHER') + ok, config_other = util.filter_config(flask.current_app.wgd_config, 'OTHER') + if not ok: + return make_resp_obj("Internal error", {}, 500) return make_resp_obj( "Login successful, no authentication required", @@ -77,19 +79,23 @@ def api_authenticate(): 200 ) - data = request.get_json() + data = flask.request.get_json() if not data: return make_resp_obj("Invalid request body", {}, 400) return make_resp_obj("Authentication required", {}, 401) -@routes.route('/', methods=["GET"]) -def index(): - return make_resp_obj( - "Pong from the /", - {}, - 200 - ) +@routes.route("/", defaults={"path": ""}) +@routes.route("/") +def catch_all(path): + static_folder = flask.current_app.static_folder + template_folder = flask.current_app.template_folder + + file_path = os.path.join(static_folder, path) + if os.path.isfile(file_path): + return flask.send_from_directory(static_folder, path) + + return flask.send_from_directory(template_folder, "index.html") @routes.route('/health', methods=["GET"]) @routes.route('/healthz', methods=["GET"]) diff --git a/src/static/app/.gitignore b/src/static/app/.gitignore new file mode 100644 index 0000000..06100f8 --- /dev/null +++ b/src/static/app/.gitignore @@ -0,0 +1,30 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo +.vite/* \ No newline at end of file diff --git a/src/static/app/build.sh b/src/static/app/build.sh new file mode 100755 index 0000000..e61f246 --- /dev/null +++ b/src/static/app/build.sh @@ -0,0 +1,27 @@ +#!/bin/bash +echo "Running vite build..." +if vite build; then + echo "Vite build successful." +else + echo "Vite build failed. Exiting." + exit 1 +fi +echo "Checking for changes to commit..." +if git diff-index --quiet HEAD --; then + + if git commit -a; then + echo "Git commit successful." + else + echo "Git commit failed. Exiting." + exit 1 + fi +else + echo "No changes to commit. Skipping commit." +fi +echo "Pushing changes to remote..." +if git push; then + echo "Git push successful." +else + echo "Git push failed. Exiting." + exit 1 +fi diff --git a/src/static/app/index.html b/src/static/app/index.html new file mode 100644 index 0000000..afa86e3 --- /dev/null +++ b/src/static/app/index.html @@ -0,0 +1,26 @@ + + + + + + + + + + + + WGDashboard + + + + +
+ + + diff --git a/src/static/app/jsconfig.json b/src/static/app/jsconfig.json new file mode 100644 index 0000000..5a1f2d2 --- /dev/null +++ b/src/static/app/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + }, + "exclude": ["node_modules", "dist"] +} diff --git a/src/static/app/package-lock.json b/src/static/app/package-lock.json new file mode 100644 index 0000000..e840f43 --- /dev/null +++ b/src/static/app/package-lock.json @@ -0,0 +1,9098 @@ +{ + "name": "app", + "version": "4.3.2", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "app", + "version": "4.3.2", + "dependencies": { + "@volar/language-server": "2.4.28", + "@vue/language-server": "3.2.4", + "@vuepic/vue-datepicker": "^12.1.0", + "@vueuse/core": "^14.2.0", + "@vueuse/shared": "^14.1.0", + "animate.css": "^4.1.1", + "bootstrap": "^5.3.2", + "bootstrap-icons": "^1.11.3", + "cidr-tools": "^11.0.8", + "css-color-converter": "^2.0.0", + "dayjs": "^1.11.19", + "electron-builder": "^26.7.0", + "fuse.js": "^7.0.0", + "i": "^0.3.7", + "is-cidr": "^6.0.3", + "npm": "^11.8.0", + "ol": "^10.7.0", + "pinia": "^3.0.4", + "pinia-plugin-persistedstate": "^4.7.1", + "qrcode": "^1.5.3", + "qrcodejs": "^1.0.0", + "simple-code-editor": "^2.0.9", + "uuid": "^13.0.0", + "vue": "^3.5.28", + "vue-chartjs": "^5.3.3", + "vue-router": "^5.0.2" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^6.0.4", + "vite": "^7.3.1" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@date-fns/tz": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@date-fns/tz/-/tz-1.4.1.tgz", + "integrity": "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==", + "license": "MIT" + }, + "node_modules/@develar/schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@electron/asar": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.4.1.tgz", + "integrity": "sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==", + "license": "MIT", + "dependencies": { + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" + }, + "bin": { + "asar": "bin/asar.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@electron/asar/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@electron/fuses": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@electron/fuses/-/fuses-1.8.0.tgz", + "integrity": "sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.1", + "fs-extra": "^9.0.1", + "minimist": "^1.2.5" + }, + "bin": { + "electron-fuses": "dist/bin.js" + } + }, + "node_modules/@electron/fuses/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/get": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-3.1.0.tgz", + "integrity": "sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=14" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" + } + }, + "node_modules/@electron/get/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@electron/get/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/get/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@electron/get/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@electron/notarize": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.5.0.tgz", + "integrity": "sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.1", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/notarize/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/osx-sign": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.3.3.tgz", + "integrity": "sha512-KZ8mhXvWv2rIEgMbWZ4y33bDHyUKMXnx4M0sTyPNK/vcB81ImdeY9Ggdqy0SWbMDgmbqyQ+phgejh6V3R2QuSg==", + "license": "BSD-2-Clause", + "dependencies": { + "compare-version": "^0.1.2", + "debug": "^4.3.4", + "fs-extra": "^10.0.0", + "isbinaryfile": "^4.0.8", + "minimist": "^1.2.6", + "plist": "^3.0.5" + }, + "bin": { + "electron-osx-flat": "bin/electron-osx-flat.js", + "electron-osx-sign": "bin/electron-osx-sign.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@electron/osx-sign/node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/@electron/rebuild": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-4.0.3.tgz", + "integrity": "sha512-u9vpTHRMkOYCs/1FLiSVAFZ7FbjsXK+bQuzviJZa+lG7BHZl1nz52/IcGvwa3sk80/fc3llutBkbCq10Vh8WQA==", + "license": "MIT", + "dependencies": { + "@malept/cross-spawn-promise": "^2.0.0", + "debug": "^4.1.1", + "detect-libc": "^2.0.1", + "got": "^11.7.0", + "graceful-fs": "^4.2.11", + "node-abi": "^4.2.0", + "node-api-version": "^0.2.1", + "node-gyp": "^11.2.0", + "ora": "^5.1.0", + "read-binary-file-arch": "^1.0.6", + "semver": "^7.3.5", + "tar": "^7.5.6", + "yargs": "^17.0.1" + }, + "bin": { + "electron-rebuild": "lib/cli.js" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@electron/universal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-2.0.3.tgz", + "integrity": "sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==", + "license": "MIT", + "dependencies": { + "@electron/asar": "^3.3.1", + "@malept/cross-spawn-promise": "^2.0.0", + "debug": "^4.3.1", + "dir-compare": "^4.2.0", + "fs-extra": "^11.1.1", + "minimatch": "^9.0.3", + "plist": "^3.1.0" + }, + "engines": { + "node": ">=16.4" + } + }, + "node_modules/@electron/universal/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@electron/universal/node_modules/fs-extra": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@electron/universal/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@electron/windows-sign": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@electron/windows-sign/-/windows-sign-1.2.2.tgz", + "integrity": "sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ==", + "license": "BSD-2-Clause", + "optional": true, + "peer": true, + "dependencies": { + "cross-dirname": "^0.1.0", + "debug": "^4.3.4", + "fs-extra": "^11.1.1", + "minimist": "^1.2.8", + "postject": "^1.0.0-alpha.6" + }, + "bin": { + "electron-windows-sign": "bin/electron-windows-sign.js" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@electron/windows-sign/node_modules/fs-extra": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@emmetio/abbreviation": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz", + "integrity": "sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==", + "license": "MIT", + "dependencies": { + "@emmetio/scanner": "^1.0.4" + } + }, + "node_modules/@emmetio/css-abbreviation": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.8.tgz", + "integrity": "sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==", + "license": "MIT", + "dependencies": { + "@emmetio/scanner": "^1.0.4" + } + }, + "node_modules/@emmetio/css-parser": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@emmetio/css-parser/-/css-parser-0.4.1.tgz", + "integrity": "sha512-2bC6m0MV/voF4CTZiAbG5MWKbq5EBmDPKu9Sb7s7nVcEzNQlrZP6mFFFlIaISM8X6514H9shWMme1fCm8cWAfQ==", + "license": "MIT", + "dependencies": { + "@emmetio/stream-reader": "^2.2.0", + "@emmetio/stream-reader-utils": "^0.1.0" + } + }, + "node_modules/@emmetio/html-matcher": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@emmetio/html-matcher/-/html-matcher-1.3.0.tgz", + "integrity": "sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==", + "license": "ISC", + "dependencies": { + "@emmetio/scanner": "^1.0.0" + } + }, + "node_modules/@emmetio/scanner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.4.tgz", + "integrity": "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==", + "license": "MIT" + }, + "node_modules/@emmetio/stream-reader": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@emmetio/stream-reader/-/stream-reader-2.2.0.tgz", + "integrity": "sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==", + "license": "MIT" + }, + "node_modules/@emmetio/stream-reader-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@emmetio/stream-reader-utils/-/stream-reader-utils-0.1.0.tgz", + "integrity": "sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==", + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, + "node_modules/@floating-ui/vue": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@floating-ui/vue/-/vue-1.1.9.tgz", + "integrity": "sha512-BfNqNW6KA83Nexspgb9DZuz578R7HT8MZw1CfK9I6Ah4QReNWEJsXWHN+SdmOVLNGmTPDi+fDT535Df5PzMLbQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.4", + "@floating-ui/utils": "^0.2.10", + "vue-demi": ">=0.13.0" + } + }, + "node_modules/@floating-ui/vue/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@johnsoncodehk/pug-beautify": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@johnsoncodehk/pug-beautify/-/pug-beautify-0.2.2.tgz", + "integrity": "sha512-qqNS/YD0Nck5wtQLCPHAfGVgWbbGafxSPjNh0ekYPFSNNqnDH2kamnduzYly8IiADmeVx/MfAE1njMEjVeHTMA==", + "license": "MIT" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@kurkle/color": { + "version": "0.3.4", + "resolved": "https://registry.npmmirror.com/@kurkle/color/-/color-0.3.4.tgz", + "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==", + "license": "MIT", + "peer": true + }, + "node_modules/@malept/cross-spawn-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", + "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } + ], + "license": "Apache-2.0", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", + "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@npmcli/fs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@petamoriken/float16": { + "version": "3.9.2", + "resolved": "https://registry.npmmirror.com/@petamoriken/float16/-/float16-3.9.2.tgz", + "integrity": "sha512-VgffxawQde93xKxT3qap3OH+meZf7VaSB5Sqd4Rqc+FP5alWbpOyan/7tRbOAvynjpG3GpdtAuGU/NdhQpmrog==", + "license": "MIT" + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmmirror.com/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz", + "integrity": "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.50.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.2.tgz", + "integrity": "sha512-uLN8NAiFVIRKX9ZQha8wy6UUs06UNSZ32xj6giK/rmMXAgKahwExvK6SsmgU5/brh4w/nSgj8e0k3c1HBQpa0A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.50.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.2.tgz", + "integrity": "sha512-oEouqQk2/zxxj22PNcGSskya+3kV0ZKH+nQxuCCOGJ4oTXBdNTbv+f/E3c74cNLeMO1S5wVWacSws10TTSB77g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.50.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.2.tgz", + "integrity": "sha512-OZuTVTpj3CDSIxmPgGH8en/XtirV5nfljHZ3wrNwvgkT5DQLhIKAeuFSiwtbMto6oVexV0k1F1zqURPKf5rI1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.50.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.2.tgz", + "integrity": "sha512-Wa/Wn8RFkIkr1vy1k1PB//VYhLnlnn5eaJkfTQKivirOvzu5uVd2It01ukeQstMursuz7S1bU+8WW+1UPXpa8A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.50.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.2.tgz", + "integrity": "sha512-QkzxvH3kYN9J1w7D1A+yIMdI1pPekD+pWx7G5rXgnIlQ1TVYVC6hLl7SOV9pi5q9uIDF9AuIGkuzcbF7+fAhow==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.50.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.2.tgz", + "integrity": "sha512-dkYXB0c2XAS3a3jmyDkX4Jk0m7gWLFzq1C3qUnJJ38AyxIF5G/dyS4N9B30nvFseCfgtCEdbYFhk0ChoCGxPog==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.50.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.2.tgz", + "integrity": "sha512-9VlPY/BN3AgbukfVHAB8zNFWB/lKEuvzRo1NKev0Po8sYFKx0i+AQlCYftgEjcL43F2h9Ui1ZSdVBc4En/sP2w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.50.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.2.tgz", + "integrity": "sha512-+GdKWOvsifaYNlIVf07QYan1J5F141+vGm5/Y8b9uCZnG/nxoGqgCmR24mv0koIWWuqvFYnbURRqw1lv7IBINw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.50.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.2.tgz", + "integrity": "sha512-df0Eou14ojtUdLQdPFnymEQteENwSJAdLf5KCDrmZNsy1c3YaCNaJvYsEUHnrg+/DLBH612/R0xd3dD03uz2dg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.50.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.2.tgz", + "integrity": "sha512-iPeouV0UIDtz8j1YFR4OJ/zf7evjauqv7jQ/EFs0ClIyL+by++hiaDAfFipjOgyz6y6xbDvJuiU4HwpVMpRFDQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.50.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.50.2.tgz", + "integrity": "sha512-OL6KaNvBopLlj5fTa5D5bau4W82f+1TyTZRr2BdnfsrnQnmdxh4okMxR2DcDkJuh4KeoQZVuvHvzuD/lyLn2Kw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.50.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.2.tgz", + "integrity": "sha512-I21VJl1w6z/K5OTRl6aS9DDsqezEZ/yKpbqlvfHbW0CEF5IL8ATBMuUx6/mp683rKTK8thjs/0BaNrZLXetLag==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.50.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.2.tgz", + "integrity": "sha512-Hq6aQJT/qFFHrYMjS20nV+9SKrXL2lvFBENZoKfoTH2kKDOJqff5OSJr4x72ZaG/uUn+XmBnGhfr4lwMRrmqCQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.50.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.2.tgz", + "integrity": "sha512-82rBSEXRv5qtKyr0xZ/YMF531oj2AIpLZkeNYxmKNN6I2sVE9PGegN99tYDLK2fYHJITL1P2Lgb4ZXnv0PjQvw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.50.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.2.tgz", + "integrity": "sha512-4Q3S3Hy7pC6uaRo9gtXUTJ+EKo9AKs3BXKc2jYypEcMQ49gDPFU2P1ariX9SEtBzE5egIX6fSUmbmGazwBVF9w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.50.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.2.tgz", + "integrity": "sha512-9Jie/At6qk70dNIcopcL4p+1UirusEtznpNtcq/u/C5cC4HBX7qSGsYIcG6bdxj15EYWhHiu02YvmdPzylIZlA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.50.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.2.tgz", + "integrity": "sha512-HPNJwxPL3EmhzeAnsWQCM3DcoqOz3/IC6de9rWfGR8ZCuEHETi9km66bH/wG3YH0V3nyzyFEGUZeL5PKyy4xvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.50.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.2.tgz", + "integrity": "sha512-nMKvq6FRHSzYfKLHZ+cChowlEkR2lj/V0jYj9JnGUVPL2/mIeFGmVM2mLaFeNa5Jev7W7TovXqXIG2d39y1KYA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.50.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.2.tgz", + "integrity": "sha512-eFUvvnTYEKeTyHEijQKz81bLrUQOXKZqECeiWH6tb8eXXbZk+CXSG2aFrig2BQ/pjiVRj36zysjgILkqarS2YA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.50.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.2.tgz", + "integrity": "sha512-cBaWmXqyfRhH8zmUxK3d3sAhEWLrtMjWBRwdMMHJIXSjvjLKvv49adxiEz+FJ8AP90apSDDBx2Tyd/WylV6ikA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.50.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.2.tgz", + "integrity": "sha512-APwKy6YUhvZaEoHyM+9xqmTpviEI+9eL7LoCH+aLcvWYHJ663qG5zx7WzWZY+a9qkg5JtzcMyJ9z0WtQBMDmgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==", + "license": "MIT" + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.5.1", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-24.5.1.tgz", + "integrity": "sha512-/SQdmUP2xa+1rdx7VwB9yPq8PaKej8TD5cQ+XfKDPWWC+VDJU4rvVVagXqKUzhKjtFoNA8rXDJAkCxQPAe00+Q==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.12.0" + } + }, + "node_modules/@types/plist": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*", + "xmlbuilder": ">=11.0.1" + } + }, + "node_modules/@types/rbush": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@types/rbush/-/rbush-4.0.0.tgz", + "integrity": "sha512-+N+2H39P8X+Hy1I5mC6awlTX54k3FhiUmvt7HWzGJZvF+syUAAxP/stwppS8JE84YHqFgRMv6fCy31202CMFxQ==", + "license": "MIT" + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/verror": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.11.tgz", + "integrity": "sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.4.tgz", + "integrity": "sha512-uM5iXipgYIn13UUQCZNdWkYk+sysBeA97d5mHsAoAt1u/wpN3+zxOmsVJWosuzX+IMGRzeYUNytztrYznboIkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-rc.2" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.27.tgz", + "integrity": "sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ==", + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.27" + } + }, + "node_modules/@volar/language-server": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/language-server/-/language-server-2.4.28.tgz", + "integrity": "sha512-NqcLnE5gERKuS4PUFwlhMxf6vqYo7hXtbMFbViXcbVkbZ905AIVWhnSo0ZNBC2V127H1/2zP7RvVOVnyITFfBw==", + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "@volar/language-service": "2.4.28", + "@volar/typescript": "2.4.28", + "path-browserify": "^1.0.1", + "request-light": "^0.7.0", + "vscode-languageserver": "^9.0.1", + "vscode-languageserver-protocol": "^3.17.5", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@volar/language-server/node_modules/@volar/language-core": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.28.tgz", + "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==", + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.28" + } + }, + "node_modules/@volar/language-server/node_modules/@volar/language-service": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/language-service/-/language-service-2.4.28.tgz", + "integrity": "sha512-Rh/wYCZJrI5vCwMk9xyw/Z+MsWxlJY1rmMZPsxUoJKfzIRjS/NF1NmnuEcrMbEVGja00aVpCsInJfixQTMdvLw==", + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "vscode-languageserver-protocol": "^3.17.5", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@volar/language-server/node_modules/@volar/source-map": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.28.tgz", + "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==", + "license": "MIT" + }, + "node_modules/@volar/language-server/node_modules/@volar/typescript": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.28.tgz", + "integrity": "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==", + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@volar/language-service": { + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@volar/language-service/-/language-service-2.4.27.tgz", + "integrity": "sha512-SxKZ8yLhpWa7Y5e/RDxtNfm7j7xsXp/uf2urijXEffRNpPSmVdfzQrFFy5d7l8PNpZy+bHg+yakmqBPjQN+MOw==", + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.27", + "vscode-languageserver-protocol": "^3.17.5", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.27.tgz", + "integrity": "sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg==", + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.27.tgz", + "integrity": "sha512-eWaYCcl/uAPInSK2Lze6IqVWaBu/itVqR5InXcHXFyles4zO++Mglt3oxdgj75BDcv1Knr9Y93nowS8U3wqhxg==", + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.27", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vscode/emmet-helper": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.11.0.tgz", + "integrity": "sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==", + "license": "MIT", + "dependencies": { + "emmet": "^2.4.3", + "jsonc-parser": "^2.3.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "^3.15.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vscode/l10n": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.18.tgz", + "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==", + "license": "MIT" + }, + "node_modules/@vue-macros/common": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-3.1.2.tgz", + "integrity": "sha512-h9t4ArDdniO9ekYHAD95t9AZcAbb19lEGK+26iAjUODOIJKmObDNBSe4+6ELQAA3vtYiFPPBtHh7+cQCKi3Dng==", + "license": "MIT", + "dependencies": { + "@vue/compiler-sfc": "^3.5.22", + "ast-kit": "^2.1.2", + "local-pkg": "^1.1.2", + "magic-string-ast": "^1.0.2", + "unplugin-utils": "^0.3.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/vue-macros" + }, + "peerDependencies": { + "vue": "^2.7.0 || ^3.2.25" + }, + "peerDependenciesMeta": { + "vue": { + "optional": true + } + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.28", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.28.tgz", + "integrity": "sha512-kviccYxTgoE8n6OCw96BNdYlBg2GOWfBuOW4Vqwrt7mSKWKwFVvI8egdTltqRgITGPsTFYtKYfxIG8ptX2PJHQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@vue/shared": "3.5.28", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.28", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.28.tgz", + "integrity": "sha512-/1ZepxAb159jKR1btkefDP+J2xuWL5V3WtleRmxaT+K2Aqiek/Ab/+Ebrw2pPj0sdHO8ViAyyJWfhXXOP/+LQA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.28", + "@vue/shared": "3.5.28" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.28", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.28.tgz", + "integrity": "sha512-6TnKMiNkd6u6VeVDhZn/07KhEZuBSn43Wd2No5zaP5s3xm8IqFTHBj84HJah4UepSUJTro5SoqqlOY22FKY96g==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@vue/compiler-core": "3.5.28", + "@vue/compiler-dom": "3.5.28", + "@vue/compiler-ssr": "3.5.28", + "@vue/shared": "3.5.28", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.28", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.28.tgz", + "integrity": "sha512-JCq//9w1qmC6UGLWJX7RXzrGpKkroubey/ZFqTpvEIDJEKGgntuDMqkuWiZvzTzTA5h2qZvFBFHY7fAAa9475g==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.28", + "@vue/shared": "3.5.28" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.7", + "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-7.7.7.tgz", + "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.7" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.7", + "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz", + "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.7", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.7", + "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz", + "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/language-core": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.2.4.tgz", + "integrity": "sha512-bqBGuSG4KZM45KKTXzGtoCl9cWju5jsaBKaJJe3h5hRAAWpZUuj5G+L+eI01sPIkm4H6setKRlw7E85wLdDNew==", + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.27", + "@vue/compiler-dom": "^3.5.0", + "@vue/shared": "^3.5.0", + "alien-signals": "^3.0.0", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1", + "picomatch": "^4.0.2" + } + }, + "node_modules/@vue/language-server": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/language-server/-/language-server-3.2.4.tgz", + "integrity": "sha512-N1/Jx4s+y4xrZpp5uuuFh4v4B330d2jk886pVn3yPYn26f3Vtu8O26P88Y5U2BuLbsmarmJjTYaG3n5gEui6pg==", + "license": "MIT", + "dependencies": { + "@volar/language-server": "2.4.27", + "@vue/language-core": "3.2.4", + "@vue/language-service": "3.2.4", + "@vue/typescript-plugin": "3.2.4", + "vscode-uri": "^3.0.8" + }, + "bin": { + "vue-language-server": "bin/vue-language-server.js" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/@vue/language-server/node_modules/@volar/language-server": { + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@volar/language-server/-/language-server-2.4.27.tgz", + "integrity": "sha512-SymGNkErcHg8GjiG65iQN8sLkhqu1pwKhFySmxeBuYq5xFYagKBW36eiNITXQTdvT0tutI1GXcXdq/FdE/IyjA==", + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.27", + "@volar/language-service": "2.4.27", + "@volar/typescript": "2.4.27", + "path-browserify": "^1.0.1", + "request-light": "^0.7.0", + "vscode-languageserver": "^9.0.1", + "vscode-languageserver-protocol": "^3.17.5", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/language-service": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/language-service/-/language-service-3.2.4.tgz", + "integrity": "sha512-sY5+XQxmsBNeWnUBtbnubtv6wYdlxFURAjUSetUqaG0f0uYjqVnQ+4kITMHork+9HaV3zKmCY5zOf5psGW/Xkw==", + "license": "MIT", + "dependencies": { + "@volar/language-service": "2.4.27", + "@vue/language-core": "3.2.4", + "@vue/shared": "^3.5.0", + "path-browserify": "^1.0.1", + "volar-service-css": "0.0.68", + "volar-service-emmet": "0.0.68", + "volar-service-html": "0.0.68", + "volar-service-json": "0.0.68", + "volar-service-pug": "0.0.68", + "volar-service-pug-beautify": "0.0.68", + "volar-service-typescript": "0.0.68", + "vscode-html-languageservice": "^5.2.0", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.28", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.28.tgz", + "integrity": "sha512-gr5hEsxvn+RNyu9/9o1WtdYdwDjg5FgjUSBEkZWqgTKlo/fvwZ2+8W6AfKsc9YN2k/+iHYdS9vZYAhpi10kNaw==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.28" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.28", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.28.tgz", + "integrity": "sha512-POVHTdbgnrBBIpnbYU4y7pOMNlPn2QVxVzkvEA2pEgvzbelQq4ZOUxbp2oiyo+BOtiYlm8Q44wShHJoBvDPAjQ==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.28", + "@vue/shared": "3.5.28" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.28", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.28.tgz", + "integrity": "sha512-4SXxSF8SXYMuhAIkT+eBRqOkWEfPu6nhccrzrkioA6l0boiq7sp18HCOov9qWJA5HML61kW8p/cB4MmBiG9dSA==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.28", + "@vue/runtime-core": "3.5.28", + "@vue/shared": "3.5.28", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.28", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.28.tgz", + "integrity": "sha512-pf+5ECKGj8fX95bNincbzJ6yp6nyzuLDhYZCeFxUNp8EBrQpPpQaLX3nNCp49+UbgbPun3CeVE+5CXVV1Xydfg==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.28", + "@vue/shared": "3.5.28" + }, + "peerDependencies": { + "vue": "3.5.28" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.28", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.28.tgz", + "integrity": "sha512-cfWa1fCGBxrvaHRhvV3Is0MgmrbSCxYTXCSCau2I0a1Xw1N1pHAvkWCiXPRAqjvToILvguNyEwjevUqAuBQWvQ==", + "license": "MIT" + }, + "node_modules/@vue/typescript-plugin": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/typescript-plugin/-/typescript-plugin-3.2.4.tgz", + "integrity": "sha512-K/rKnIQre0X6YyKSbDW+DEYpVkOBrB0ScXus0nvtjI7zwo+0FE+wxUXAXeKtaQwJzQ0d8Pw2FPa0mcZhYpMQug==", + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.27", + "@vue/language-core": "3.2.4", + "@vue/shared": "^3.5.0", + "path-browserify": "^1.0.1", + "vue-component-meta": "3.2.4" + } + }, + "node_modules/@vuepic/vue-datepicker": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@vuepic/vue-datepicker/-/vue-datepicker-12.1.0.tgz", + "integrity": "sha512-QuWcO+CqIGYFoRNCagp9xUY9sMK/OHUlVIDxBYjw7HjCTWXfuE/r3l3loB00faEtb0Teo3DeBn26hT3tYA5pgg==", + "license": "MIT", + "dependencies": { + "@date-fns/tz": "^1.4.1", + "@floating-ui/vue": "^1.1.9", + "@vueuse/core": "^14.1.0", + "date-fns": "^4.1.0" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "vue": ">=3.5.0" + } + }, + "node_modules/@vueuse/core": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.2.0.tgz", + "integrity": "sha512-tpjzVl7KCQNVd/qcaCE9XbejL38V6KJAEq/tVXj7mDPtl6JtzmUdnXelSS+ULRkkrDgzYVK7EerQJvd2jR794Q==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.2.0", + "@vueuse/shared": "14.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/metadata": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.2.0.tgz", + "integrity": "sha512-i3axTGjU8b13FtyR4Keeama+43iD+BwX9C2TmzBVKqjSHArF03hjkp2SBZ1m72Jk2UtrX0aYCugBq2R1fhkuAQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.2.0.tgz", + "integrity": "sha512-Z0bmluZTlAXgUcJ4uAFaML16JcD8V0QG00Db3quR642I99JXIDRa2MI2LGxiLVhcBjVnL1jOzIvT5TT2lqJlkA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", + "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/7zip-bin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz", + "integrity": "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==", + "license": "MIT" + }, + "node_modules/abbrev": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/alien-signals": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.1.2.tgz", + "integrity": "sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==", + "license": "MIT" + }, + "node_modules/animate.css": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/animate.css/-/animate.css-4.1.1.tgz", + "integrity": "sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==", + "license": "MIT" + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansi-styles/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/app-builder-bin": { + "version": "5.0.0-alpha.12", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-5.0.0-alpha.12.tgz", + "integrity": "sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==", + "license": "MIT" + }, + "node_modules/app-builder-lib": { + "version": "26.7.0", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.7.0.tgz", + "integrity": "sha512-/UgCD8VrO79Wv8aBNpjMfsS1pIUfIPURoRn0Ik6tMe5avdZF+vQgl/juJgipcMmH3YS0BD573lCdCHyoi84USg==", + "license": "MIT", + "dependencies": { + "@develar/schema-utils": "~2.6.5", + "@electron/asar": "3.4.1", + "@electron/fuses": "^1.8.0", + "@electron/get": "^3.0.0", + "@electron/notarize": "2.5.0", + "@electron/osx-sign": "1.3.3", + "@electron/rebuild": "^4.0.3", + "@electron/universal": "2.0.3", + "@malept/flatpak-bundler": "^0.4.0", + "@types/fs-extra": "9.0.13", + "async-exit-hook": "^2.0.1", + "builder-util": "26.4.1", + "builder-util-runtime": "9.5.1", + "chromium-pickle-js": "^0.2.0", + "ci-info": "4.3.1", + "debug": "^4.3.4", + "dotenv": "^16.4.5", + "dotenv-expand": "^11.0.6", + "ejs": "^3.1.8", + "electron-publish": "26.6.0", + "fs-extra": "^10.1.0", + "hosted-git-info": "^4.1.0", + "isbinaryfile": "^5.0.0", + "jiti": "^2.4.2", + "js-yaml": "^4.1.0", + "json5": "^2.2.3", + "lazy-val": "^1.0.5", + "minimatch": "^10.0.3", + "plist": "3.1.0", + "proper-lockfile": "^4.1.2", + "resedit": "^1.7.0", + "semver": "~7.7.3", + "tar": "^7.5.7", + "temp-file": "^3.4.0", + "tiny-async-pool": "1.3.0", + "which": "^5.0.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "dmg-builder": "26.7.0", + "electron-builder-squirrel-windows": "26.7.0" + } + }, + "node_modules/app-builder-lib/node_modules/ci-info": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ast-kit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-2.2.0.tgz", + "integrity": "sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "pathe": "^2.0.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/ast-walker-scope": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/ast-walker-scope/-/ast-walker-scope-0.8.3.tgz", + "integrity": "sha512-cbdCP0PGOBq0ASG+sjnKIoYkWMKhhz+F/h9pRexUdX2Hd38+WOlBkRKlqkGOSm0YQpcFMQBJeK4WspUAkwsEdg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.4", + "ast-kit": "^2.1.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/birpc": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", + "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT", + "optional": true + }, + "node_modules/bootstrap": { + "version": "5.3.8", + "resolved": "https://registry.npmmirror.com/bootstrap/-/bootstrap-5.3.8.tgz", + "integrity": "sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT", + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, + "node_modules/bootstrap-icons": { + "version": "1.13.1", + "resolved": "https://registry.npmmirror.com/bootstrap-icons/-/bootstrap-icons-1.13.1.tgz", + "integrity": "sha512-ijombt4v6bv5CLeXvRWKy7CuM3TRTuPEuGaGKvTV5cz65rQSY8RQ2JcHt6b90cBBAC7s8fsf2EkQDldzCoXUjw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/builder-util": { + "version": "26.4.1", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-26.4.1.tgz", + "integrity": "sha512-FlgH43XZ50w3UtS1RVGDWOz8v9qMXPC7upMtKMtBEnYdt1OVoS61NYhKm/4x+cIaWqJTXua0+VVPI+fSPGXNIw==", + "license": "MIT", + "dependencies": { + "@types/debug": "^4.1.6", + "7zip-bin": "~5.2.0", + "app-builder-bin": "5.0.0-alpha.12", + "builder-util-runtime": "9.5.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.6", + "debug": "^4.3.4", + "fs-extra": "^10.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "js-yaml": "^4.1.0", + "sanitize-filename": "^1.6.3", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.4.0", + "tiny-async-pool": "1.3.0" + } + }, + "node_modules/builder-util-runtime": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.5.1.tgz", + "integrity": "sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/cacache": { + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", + "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", + "license": "MIT", + "dependencies": { + "is-regex": "^1.0.3" + } + }, + "node_modules/chart.js": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/chart.js/-/chart.js-4.5.0.tgz", + "integrity": "sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=8" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "license": "MIT" + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cidr-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/cidr-regex/-/cidr-regex-5.0.1.tgz", + "integrity": "sha512-2Apfc6qH9uwF3QHmlYBA8ExB9VHq+1/Doj9sEMY55TVBcpQ3y/+gmMpcNIBBtfb5k54Vphmta+1IxjMqPlWWAA==", + "license": "BSD-2-Clause", + "dependencies": { + "ip-regex": "5.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cidr-tools": { + "version": "11.0.8", + "resolved": "https://registry.npmjs.org/cidr-tools/-/cidr-tools-11.0.8.tgz", + "integrity": "sha512-z8TVpm6JAemTAuYsza3GL4KJH5VxSFwWge6YhA+9tFYoUICx8fraMdd6bCBb6Y/15o94POW32XghQt9LH4CHXQ==", + "license": "BSD-2-Clause", + "dependencies": { + "ip-bigint": "^8.2.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "license": "MIT", + "optional": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "0.5.3", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-0.5.3.tgz", + "integrity": "sha512-RwBeO/B/vZR3dfKL1ye/vx8MHZ40ugzpyfeVG5GsiuGnrlMWe2o8wxBbLCpw9CsxV+wHuzYlCiWnybrIA0ling==" + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/compare-version": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/confbox": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", + "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "license": "MIT", + "optional": true + }, + "node_modules/crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "buffer": "^5.1.0" + } + }, + "node_modules/cross-dirname": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cross-dirname/-/cross-dirname-0.1.0.tgz", + "integrity": "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-color-converter": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/css-color-converter/-/css-color-converter-2.0.0.tgz", + "integrity": "sha512-oLIG2soZz3wcC3aAl/7Us5RS8Hvvc6I8G8LniF/qfMmrm7fIKQ8RIDDRZeKyGL2SrWfNqYspuLShbnjBMVWm8g==", + "license": "MIT", + "dependencies": { + "color-convert": "^0.5.2", + "color-name": "^1.1.4", + "css-unit-converter": "^1.1.2" + } + }, + "node_modules/css-unit-converter": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/css-unit-converter/-/css-unit-converter-1.1.2.tgz", + "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==", + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/dayjs": { + "version": "1.11.19", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", + "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "optional": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmmirror.com/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "license": "MIT", + "optional": true + }, + "node_modules/dijkstrajs": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz", + "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==", + "license": "MIT" + }, + "node_modules/dir-compare": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz", + "integrity": "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==", + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.5", + "p-limit": "^3.1.0 " + } + }, + "node_modules/dir-compare/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dmg-builder": { + "version": "26.7.0", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.7.0.tgz", + "integrity": "sha512-uOOBA3f+kW3o4KpSoMQ6SNpdXU7WtxlJRb9vCZgOvqhTz4b3GjcoWKstdisizNZLsylhTMv8TLHFPFW0Uxsj/g==", + "license": "MIT", + "dependencies": { + "app-builder-lib": "26.7.0", + "builder-util": "26.4.1", + "fs-extra": "^10.1.0", + "iconv-lite": "^0.6.2", + "js-yaml": "^4.1.0" + }, + "optionalDependencies": { + "dmg-license": "^1.0.11" + } + }, + "node_modules/dmg-license": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "@types/plist": "^3.0.1", + "@types/verror": "^1.10.3", + "ajv": "^6.10.0", + "crc": "^3.8.0", + "iconv-corefoundation": "^1.1.7", + "plist": "^3.0.4", + "smart-buffer": "^4.0.2", + "verror": "^1.10.0" + }, + "bin": { + "dmg-license": "bin/dmg-license.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/earcut": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/earcut/-/earcut-3.0.2.tgz", + "integrity": "sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==", + "license": "ISC" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-builder": { + "version": "26.7.0", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-26.7.0.tgz", + "integrity": "sha512-LoXbCvSFxLesPneQ/fM7FB4OheIDA2tjqCdUkKlObV5ZKGhYgi5VHPHO/6UUOUodAlg7SrkPx7BZJPby+Vrtbg==", + "license": "MIT", + "dependencies": { + "app-builder-lib": "26.7.0", + "builder-util": "26.4.1", + "builder-util-runtime": "9.5.1", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "dmg-builder": "26.7.0", + "fs-extra": "^10.1.0", + "lazy-val": "^1.0.5", + "simple-update-notifier": "2.0.0", + "yargs": "^17.6.2" + }, + "bin": { + "electron-builder": "cli.js", + "install-app-deps": "install-app-deps.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/electron-builder-squirrel-windows": { + "version": "26.7.0", + "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.7.0.tgz", + "integrity": "sha512-3EqkQK+q0kGshdPSKEPb2p5F75TENMKu6Fe5aTdeaPfdzFK4Yjp5L0d6S7K8iyvqIsGQ/ei4bnpyX9wt+kVCKQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "app-builder-lib": "26.7.0", + "builder-util": "26.4.1", + "electron-winstaller": "5.4.0" + } + }, + "node_modules/electron-publish": { + "version": "26.6.0", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-26.6.0.tgz", + "integrity": "sha512-LsyHMMqbvJ2vsOvuWJ19OezgF2ANdCiHpIucDHNiLhuI+/F3eW98ouzWSRmXXi82ZOPZXC07jnIravY4YYwCLQ==", + "license": "MIT", + "dependencies": { + "@types/fs-extra": "^9.0.11", + "builder-util": "26.4.1", + "builder-util-runtime": "9.5.1", + "chalk": "^4.1.2", + "form-data": "^4.0.5", + "fs-extra": "^10.1.0", + "lazy-val": "^1.0.5", + "mime": "^2.5.2" + } + }, + "node_modules/electron-winstaller": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-5.4.0.tgz", + "integrity": "sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==", + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@electron/asar": "^3.2.1", + "debug": "^4.1.1", + "fs-extra": "^7.0.1", + "lodash": "^4.17.21", + "temp": "^0.9.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "optionalDependencies": { + "@electron/windows-sign": "^1.1.2" + } + }, + "node_modules/electron-winstaller/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/electron-winstaller/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "license": "MIT", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-winstaller/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/emmet": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.4.11.tgz", + "integrity": "sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==", + "license": "MIT", + "workspaces": [ + "./packages/scanner", + "./packages/abbreviation", + "./packages/css-abbreviation", + "./" + ], + "dependencies": { + "@emmetio/abbreviation": "^2.3.3", + "@emmetio/css-abbreviation": "^2.1.8" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "license": "MIT", + "optional": true + }, + "node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/exponential-backoff": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "license": "Apache-2.0" + }, + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "license": "MIT" + }, + "node_modules/extsprintf": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "optional": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fuse.js": { + "version": "7.1.0", + "resolved": "https://registry.npmmirror.com/fuse.js/-/fuse.js-7.1.0.tgz", + "integrity": "sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/geotiff": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/geotiff/-/geotiff-2.1.3.tgz", + "integrity": "sha512-PT6uoF5a1+kbC3tHmZSUsLHBp2QJlHasxxxxPW47QIY1VBKpFB+FcDvX+MxER6UzgLQZ0xDzJ9s48B9JbOCTqA==", + "license": "MIT", + "dependencies": { + "@petamoriken/float16": "^3.4.7", + "lerc": "^3.0.0", + "pako": "^2.0.4", + "parse-headers": "^2.0.2", + "quick-lru": "^6.1.1", + "web-worker": "^1.2.0", + "xml-utils": "^1.0.2", + "zstddec": "^0.1.0" + }, + "engines": { + "node": ">=10.19" + } + }, + "node_modules/geotiff/node_modules/quick-lru": { + "version": "6.1.2", + "resolved": "https://registry.npmmirror.com/quick-lru/-/quick-lru-6.1.2.tgz", + "integrity": "sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/highlight.js": { + "version": "11.11.1", + "resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-11.11.1.tgz", + "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/i": { + "version": "0.3.7", + "resolved": "https://registry.npmmirror.com/i/-/i-0.3.7.tgz", + "integrity": "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/iconv-corefoundation": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", + "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "cli-truncate": "^2.1.0", + "node-addon-api": "^1.6.3" + }, + "engines": { + "node": "^8.11.2 || >=10" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-bigint": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/ip-bigint/-/ip-bigint-8.2.4.tgz", + "integrity": "sha512-uLnCfRdjiqRSX36+sKW3PBsotx58qEXSfbRWqdy1N5w6LtlIDCQnxuVce5OIBD50WA9VX2DWixtiBVtalWb1fA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=18" + } + }, + "node_modules/ip-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz", + "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-cidr": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/is-cidr/-/is-cidr-6.0.3.tgz", + "integrity": "sha512-tPdsizbDiISrc4PoII6ZfpmAokx0oDKeYqAUp5bXOfznauOFXfEeosKBRrl0o0SriE4xoRR05Czn4YPCFMjSHA==", + "license": "BSD-2-Clause", + "dependencies": { + "cidr-regex": "^5.0.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmmirror.com/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/isbinaryfile": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.7.tgz", + "integrity": "sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==", + "license": "MIT", + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC", + "optional": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz", + "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==", + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/lazy-val": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", + "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", + "license": "MIT" + }, + "node_modules/lerc": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/lerc/-/lerc-3.0.0.tgz", + "integrity": "sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww==", + "license": "Apache-2.0" + }, + "node_modules/local-pkg": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.2.tgz", + "integrity": "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==", + "license": "MIT", + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.3.0", + "quansync": "^0.2.11" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magic-string-ast": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/magic-string-ast/-/magic-string-ast-1.0.3.tgz", + "integrity": "sha512-CvkkH1i81zl7mmb94DsRiFeG9V2fR2JeuK8yDgS8oiZSFa++wWLEgZ5ufEOyLHbvSbD1gTRKv9NdX69Rnvr9JA==", + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.19" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/make-fetch-happen": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", + "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "ssri": "^12.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "license": "MIT", + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", + "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "peer": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mlly": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", + "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", + "license": "MIT", + "dependencies": { + "acorn": "^8.15.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.1" + } + }, + "node_modules/mlly/node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/mlly/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "license": "MIT" + }, + "node_modules/mlly/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-abi": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-4.26.0.tgz", + "integrity": "sha512-8QwIZqikRvDIkXS2S93LjzhsSPJuIbfaMETWH+Bx8oOT9Sa9UsUtBFQlc3gBNd1+QINjaTloitXr1W3dQLi9Iw==", + "license": "MIT", + "dependencies": { + "semver": "^7.6.3" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "license": "MIT", + "optional": true + }, + "node_modules/node-api-version": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.2.1.tgz", + "integrity": "sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + } + }, + "node_modules/node-gyp": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.5.0.tgz", + "integrity": "sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==", + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "tar": "^7.4.3", + "tinyglobby": "^0.2.12", + "which": "^5.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/nopt": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "license": "ISC", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm": { + "version": "11.8.0", + "resolved": "https://registry.npmjs.org/npm/-/npm-11.8.0.tgz", + "integrity": "sha512-n19sJeW+RGKdkHo8SCc5xhSwkKhQUFfZaFzSc+EsYXLjSqIV0tl72aDYQVuzVvfrbysGwdaQsNLNy58J10EBSQ==", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/config", + "@npmcli/fs", + "@npmcli/map-workspaces", + "@npmcli/metavuln-calculator", + "@npmcli/package-json", + "@npmcli/promise-spawn", + "@npmcli/redact", + "@npmcli/run-script", + "@sigstore/tuf", + "abbrev", + "archy", + "cacache", + "chalk", + "ci-info", + "cli-columns", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", + "is-cidr", + "json-parse-even-better-errors", + "libnpmaccess", + "libnpmdiff", + "libnpmexec", + "libnpmfund", + "libnpmorg", + "libnpmpack", + "libnpmpublish", + "libnpmsearch", + "libnpmteam", + "libnpmversion", + "make-fetch-happen", + "minimatch", + "minipass", + "minipass-pipeline", + "ms", + "node-gyp", + "nopt", + "npm-audit-report", + "npm-install-checks", + "npm-package-arg", + "npm-pick-manifest", + "npm-profile", + "npm-registry-fetch", + "npm-user-validate", + "p-map", + "pacote", + "parse-conflict-json", + "proc-log", + "qrcode-terminal", + "read", + "semver", + "spdx-expression-parse", + "ssri", + "supports-color", + "tar", + "text-table", + "tiny-relative-date", + "treeverse", + "validate-npm-package-name", + "which" + ], + "license": "Artistic-2.0", + "workspaces": [ + "docs", + "smoke-tests", + "mock-globals", + "mock-registry", + "workspaces/*" + ], + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^9.1.10", + "@npmcli/config": "^10.5.0", + "@npmcli/fs": "^5.0.0", + "@npmcli/map-workspaces": "^5.0.3", + "@npmcli/metavuln-calculator": "^9.0.3", + "@npmcli/package-json": "^7.0.4", + "@npmcli/promise-spawn": "^9.0.1", + "@npmcli/redact": "^4.0.0", + "@npmcli/run-script": "^10.0.3", + "@sigstore/tuf": "^4.0.1", + "abbrev": "^4.0.0", + "archy": "~1.0.0", + "cacache": "^20.0.3", + "chalk": "^5.6.2", + "ci-info": "^4.3.1", + "cli-columns": "^4.0.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.3", + "glob": "^13.0.0", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^9.0.2", + "ini": "^6.0.0", + "init-package-json": "^8.2.4", + "is-cidr": "^6.0.1", + "json-parse-even-better-errors": "^5.0.0", + "libnpmaccess": "^10.0.3", + "libnpmdiff": "^8.0.13", + "libnpmexec": "^10.1.12", + "libnpmfund": "^7.0.13", + "libnpmorg": "^8.0.1", + "libnpmpack": "^9.0.13", + "libnpmpublish": "^11.1.3", + "libnpmsearch": "^9.0.1", + "libnpmteam": "^8.0.2", + "libnpmversion": "^8.0.3", + "make-fetch-happen": "^15.0.3", + "minimatch": "^10.1.1", + "minipass": "^7.1.1", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^12.1.0", + "nopt": "^9.0.0", + "npm-audit-report": "^7.0.0", + "npm-install-checks": "^8.0.0", + "npm-package-arg": "^13.0.2", + "npm-pick-manifest": "^11.0.3", + "npm-profile": "^12.0.1", + "npm-registry-fetch": "^19.1.1", + "npm-user-validate": "^4.0.0", + "p-map": "^7.0.4", + "pacote": "^21.0.4", + "parse-conflict-json": "^5.0.1", + "proc-log": "^6.1.0", + "qrcode-terminal": "^0.12.0", + "read": "^5.0.1", + "semver": "^7.7.3", + "spdx-expression-parse": "^4.0.0", + "ssri": "^13.0.0", + "supports-color": "^10.2.2", + "tar": "^7.5.4", + "text-table": "~0.2.0", + "tiny-relative-date": "^2.0.2", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^7.0.2", + "which": "^6.0.0" + }, + "bin": { + "npm": "bin/npm-cli.js", + "npx": "bin/npx-cli.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/npm/node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/npm/node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/@npmcli/agent": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^11.2.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/arborist": { + "version": "9.1.10", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^5.0.0", + "@npmcli/installed-package-contents": "^4.0.0", + "@npmcli/map-workspaces": "^5.0.0", + "@npmcli/metavuln-calculator": "^9.0.2", + "@npmcli/name-from-folder": "^4.0.0", + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/query": "^5.0.0", + "@npmcli/redact": "^4.0.0", + "@npmcli/run-script": "^10.0.0", + "bin-links": "^6.0.0", + "cacache": "^20.0.1", + "common-ancestor-path": "^2.0.0", + "hosted-git-info": "^9.0.0", + "json-stringify-nice": "^1.1.4", + "lru-cache": "^11.2.1", + "minimatch": "^10.0.3", + "nopt": "^9.0.0", + "npm-install-checks": "^8.0.0", + "npm-package-arg": "^13.0.0", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "pacote": "^21.0.2", + "parse-conflict-json": "^5.0.1", + "proc-log": "^6.0.0", + "proggy": "^4.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^3.0.1", + "semver": "^7.3.7", + "ssri": "^13.0.0", + "treeverse": "^3.0.0", + "walk-up-path": "^4.0.0" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/config": { + "version": "10.5.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/map-workspaces": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "ci-info": "^4.0.0", + "ini": "^6.0.0", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "walk-up-path": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/fs": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/git": { + "version": "7.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^9.0.0", + "ini": "^6.0.0", + "lru-cache": "^11.2.1", + "npm-pick-manifest": "^11.0.1", + "proc-log": "^6.0.0", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/installed-package-contents": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^5.0.0", + "npm-normalize-package-bin": "^5.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/map-workspaces": { + "version": "5.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "glob": "^13.0.0", + "minimatch": "^10.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { + "version": "9.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cacache": "^20.0.0", + "json-parse-even-better-errors": "^5.0.0", + "pacote": "^21.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/name-from-folder": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/package-json": { + "version": "7.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "glob": "^13.0.0", + "hosted-git-info": "^9.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "9.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/query": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/redact": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/run-script": { + "version": "10.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "node-gyp": "^12.1.0", + "proc-log": "^6.0.0", + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@sigstore/bundle": { + "version": "4.0.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@sigstore/core": { + "version": "3.1.0", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@sigstore/protobuf-specs": { + "version": "0.5.0", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/sign": { + "version": "4.1.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.1.0", + "@sigstore/protobuf-specs": "^0.5.0", + "make-fetch-happen": "^15.0.3", + "proc-log": "^6.1.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@sigstore/tuf": { + "version": "4.0.1", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0", + "tuf-js": "^4.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@sigstore/verify": { + "version": "3.1.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.1.0", + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@tufjs/models": { + "version": "4.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^10.1.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/abbrev": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/agent-base": { + "version": "7.1.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/ansi-regex": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/aproba": { + "version": "2.1.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/archy": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/bin-links": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cmd-shim": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "proc-log": "^6.0.0", + "read-cmd-shim": "^6.0.0", + "write-file-atomic": "^7.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/binary-extensions": { + "version": "3.1.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/cacache": { + "version": "20.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^5.0.0", + "fs-minipass": "^3.0.0", + "glob": "^13.0.0", + "lru-cache": "^11.1.0", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^13.0.0", + "unique-filename": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/chalk": { + "version": "5.6.2", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/npm/node_modules/chownr": { + "version": "3.0.0", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/ci-info": { + "version": "4.3.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/cidr-regex": { + "version": "5.0.1", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "ip-regex": "5.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/npm/node_modules/cli-columns": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/cmd-shim": { + "version": "8.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/common-ancestor-path": { + "version": "2.0.0", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">= 18" + } + }, + "node_modules/npm/node_modules/cssesc": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/debug": { + "version": "4.4.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/diff": { + "version": "8.0.3", + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/npm/node_modules/emoji-regex": { + "version": "8.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/encoding": { + "version": "0.1.13", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/npm/node_modules/env-paths": { + "version": "2.2.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/err-code": { + "version": "2.0.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/exponential-backoff": { + "version": "3.1.3", + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.16", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/npm/node_modules/fs-minipass": { + "version": "3.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/glob": { + "version": "13.0.0", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "path-scurry": "^2.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/graceful-fs": { + "version": "4.2.11", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/hosted-git-info": { + "version": "9.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^11.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/http-cache-semantics": { + "version": "4.2.0", + "inBundle": true, + "license": "BSD-2-Clause" + }, + "node_modules/npm/node_modules/http-proxy-agent": { + "version": "7.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/https-proxy-agent": { + "version": "7.0.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/iconv-lite": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/ignore-walk": { + "version": "8.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minimatch": "^10.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/imurmurhash": { + "version": "0.1.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/npm/node_modules/ini": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/init-package-json": { + "version": "8.2.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/package-json": "^7.0.0", + "npm-package-arg": "^13.0.0", + "promzard": "^3.0.1", + "read": "^5.0.1", + "semver": "^7.7.2", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^7.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/ip-address": { + "version": "10.1.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/npm/node_modules/ip-regex": { + "version": "5.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/is-cidr": { + "version": "6.0.1", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "cidr-regex": "5.0.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/npm/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/isexe": { + "version": "3.1.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "5.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/json-stringify-nice": { + "version": "1.1.4", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/jsonparse": { + "version": "1.3.1", + "engines": [ + "node >= 0.2.0" + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff": { + "version": "6.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff-apply": { + "version": "5.5.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/libnpmaccess": { + "version": "10.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^13.0.0", + "npm-registry-fetch": "^19.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmdiff": { + "version": "8.0.13", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.1.10", + "@npmcli/installed-package-contents": "^4.0.0", + "binary-extensions": "^3.0.0", + "diff": "^8.0.2", + "minimatch": "^10.0.3", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2", + "tar": "^7.5.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmexec": { + "version": "10.1.12", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.1.10", + "@npmcli/package-json": "^7.0.0", + "@npmcli/run-script": "^10.0.0", + "ci-info": "^4.0.0", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2", + "proc-log": "^6.0.0", + "promise-retry": "^2.0.1", + "read": "^5.0.1", + "semver": "^7.3.7", + "signal-exit": "^4.1.0", + "walk-up-path": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmfund": { + "version": "7.0.13", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.1.10" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmorg": { + "version": "8.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^19.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmpack": { + "version": "9.0.13", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.1.10", + "@npmcli/run-script": "^10.0.0", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmpublish": { + "version": "11.1.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/package-json": "^7.0.0", + "ci-info": "^4.0.0", + "npm-package-arg": "^13.0.0", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.7", + "sigstore": "^4.0.0", + "ssri": "^13.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmsearch": { + "version": "9.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^19.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmteam": { + "version": "8.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^19.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmversion": { + "version": "8.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "@npmcli/run-script": "^10.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/lru-cache": { + "version": "11.2.4", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/npm/node_modules/make-fetch-happen": { + "version": "15.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^4.0.0", + "cacache": "^20.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^6.0.0", + "promise-retry": "^2.0.1", + "ssri": "^13.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/minimatch": { + "version": "10.1.1", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/minipass": { + "version": "7.1.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm/node_modules/minipass-collect": { + "version": "2.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm/node_modules/minipass-fetch": { + "version": "5.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^3.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm/node_modules/minipass-flush": { + "version": "1.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline": { + "version": "1.2.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized": { + "version": "1.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minizlib": { + "version": "3.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/npm/node_modules/ms": { + "version": "2.1.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/mute-stream": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/negotiator": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/npm/node_modules/node-gyp": { + "version": "12.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^15.0.0", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "tar": "^7.5.2", + "tinyglobby": "^0.2.12", + "which": "^6.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/nopt": { + "version": "9.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^4.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/npm-audit-report": { + "version": "7.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/npm-bundled": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/npm-install-checks": { + "version": "8.0.0", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/npm-package-arg": { + "version": "13.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^7.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/npm-packlist": { + "version": "10.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/npm-pick-manifest": { + "version": "11.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "npm-package-arg": "^13.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/npm-profile": { + "version": "12.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/npm-registry-fetch": { + "version": "19.1.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^4.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^15.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^13.0.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/npm-user-validate": { + "version": "4.0.0", + "inBundle": true, + "license": "BSD-2-Clause", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/p-map": { + "version": "7.0.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/pacote": { + "version": "21.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "@npmcli/installed-package-contents": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "@npmcli/run-script": "^10.0.0", + "cacache": "^20.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^13.0.0", + "npm-packlist": "^10.0.1", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^4.0.0", + "ssri": "^13.0.0", + "tar": "^7.4.3" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/parse-conflict-json": { + "version": "5.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^5.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/path-scurry": { + "version": "2.0.1", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/proc-log": { + "version": "6.1.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/proggy": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/promise-all-reject-late": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-call-limit": { + "version": "3.0.2", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-retry": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/promzard": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "read": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/qrcode-terminal": { + "version": "0.12.0", + "inBundle": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/npm/node_modules/read": { + "version": "5.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "mute-stream": "^3.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/read-cmd-shim": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/retry": { + "version": "0.12.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/npm/node_modules/semver": { + "version": "7.7.3", + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/signal-exit": { + "version": "4.1.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/sigstore": { + "version": "4.1.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.1.0", + "@sigstore/protobuf-specs": "^0.5.0", + "@sigstore/sign": "^4.1.0", + "@sigstore/tuf": "^4.0.1", + "@sigstore/verify": "^3.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/smart-buffer": { + "version": "4.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks": { + "version": "2.8.7", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks-proxy-agent": { + "version": "8.0.5", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/spdx-correct": { + "version": "3.2.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-exceptions": { + "version": "2.5.0", + "inBundle": true, + "license": "CC-BY-3.0" + }, + "node_modules/npm/node_modules/spdx-expression-parse": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-license-ids": { + "version": "3.0.22", + "inBundle": true, + "license": "CC0-1.0" + }, + "node_modules/npm/node_modules/ssri": { + "version": "13.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/string-width": { + "version": "4.2.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/strip-ansi": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/supports-color": { + "version": "10.2.2", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/npm/node_modules/tar": { + "version": "7.5.4", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/text-table": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tiny-relative-date": { + "version": "2.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tinyglobby": { + "version": "0.2.15", + "inBundle": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/npm/node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/npm/node_modules/treeverse": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js": { + "version": "4.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "4.1.0", + "debug": "^4.4.3", + "make-fetch-happen": "^15.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/unique-filename": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/unique-slug": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/util-deprecate": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/validate-npm-package-license": { + "version": "3.0.4", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-name": { + "version": "7.0.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/walk-up-path": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/npm/node_modules/which": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/write-file-atomic": { + "version": "7.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/yallist": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ol": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/ol/-/ol-10.7.0.tgz", + "integrity": "sha512-122U5gamPqNgLpLOkogFJhgpywvd/5en2kETIDW+Ubfi9lPnZ0G9HWRdG+CX0oP8od2d6u6ky3eewIYYlrVczw==", + "license": "BSD-2-Clause", + "dependencies": { + "@types/rbush": "4.0.0", + "earcut": "^3.0.0", + "geotiff": "^2.1.3", + "pbf": "4.0.1", + "rbush": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/openlayers" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "license": "(MIT AND Zlib)" + }, + "node_modules/parse-headers": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/parse-headers/-/parse-headers-2.0.6.tgz", + "integrity": "sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A==", + "license": "MIT" + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/pbf": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/pbf/-/pbf-4.0.1.tgz", + "integrity": "sha512-SuLdBvS42z33m8ejRbInMapQe8n0D3vN/Xd5fmWM3tufNgRQFBpaW2YVJxQZV4iPNqb0vEFvssMEo5w9c6BTIA==", + "license": "BSD-3-Clause", + "dependencies": { + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, + "node_modules/pe-library": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pe-library/-/pe-library-0.4.1.tgz", + "integrity": "sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==", + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" + } + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.4.tgz", + "integrity": "sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^7.7.7" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.5.0", + "vue": "^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia-plugin-persistedstate": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-4.7.1.tgz", + "integrity": "sha512-WHOqh2esDlR3eAaknPbqXrkkj0D24h8shrDPqysgCFR6ghqP/fpFfJmMPJp0gETHsvrh9YNNg6dQfo2OEtDnIQ==", + "license": "MIT", + "dependencies": { + "defu": "^6.1.4" + }, + "peerDependencies": { + "@nuxt/kit": ">=3.0.0", + "@pinia/nuxt": ">=0.10.0", + "pinia": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + }, + "@pinia/nuxt": { + "optional": true + }, + "pinia": { + "optional": true + } + } + }, + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, + "node_modules/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "license": "MIT", + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postject": { + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/postject/-/postject-1.0.0-alpha.6.tgz", + "integrity": "sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "commander": "^9.4.0" + }, + "bin": { + "postject": "dist/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/postject/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/proc-log": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==", + "license": "MIT" + }, + "node_modules/pug-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", + "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", + "license": "MIT" + }, + "node_modules/pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "license": "MIT", + "dependencies": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode": { + "version": "1.5.4", + "resolved": "https://registry.npmmirror.com/qrcode/-/qrcode-1.5.4.tgz", + "integrity": "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==", + "license": "MIT", + "dependencies": { + "dijkstrajs": "^1.0.1", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/qrcode/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/qrcode/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "license": "ISC" + }, + "node_modules/qrcode/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcodejs": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/qrcodejs/-/qrcodejs-1.0.0.tgz", + "integrity": "sha512-67rj3mMBhSBepaD57qENnltO+r8rSYlqM7HGThks/BiyDAkc86sLvkKqjkqPS5v13f7tvnt6dbEf3qt7zq+BCg==" + }, + "node_modules/quansync": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/quickselect": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/quickselect/-/quickselect-3.0.0.tgz", + "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==", + "license": "ISC" + }, + "node_modules/rbush": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/rbush/-/rbush-4.0.1.tgz", + "integrity": "sha512-IP0UpfeWQujYC8Jg162rMNc01Rf0gWMMAb2Uxus/Q0qOFw4lCcq6ZnQEZwUoJqWyUGJ9th7JjwI4yIWo+uvoAQ==", + "license": "MIT", + "dependencies": { + "quickselect": "^3.0.0" + } + }, + "node_modules/read-binary-file-arch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/read-binary-file-arch/-/read-binary-file-arch-1.0.6.tgz", + "integrity": "sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "bin": { + "read-binary-file-arch": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/request-light": { + "version": "0.7.0", + "resolved": "https://registry.npmmirror.com/request-light/-/request-light-0.7.0.tgz", + "integrity": "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==", + "license": "MIT" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "license": "ISC" + }, + "node_modules/resedit": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/resedit/-/resedit-1.7.2.tgz", + "integrity": "sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==", + "license": "MIT", + "dependencies": { + "pe-library": "^0.4.1" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "license": "MIT" + }, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "license": "MIT", + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/rollup": { + "version": "4.50.2", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.50.2.tgz", + "integrity": "sha512-BgLRGy7tNS9H66aIMASq1qSYbAAJV6Z6WR4QYTvj5FgF15rZ/ympT1uixHXwzbZUBDbkvqUI1KR0fH1FhMaQ9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.50.2", + "@rollup/rollup-android-arm64": "4.50.2", + "@rollup/rollup-darwin-arm64": "4.50.2", + "@rollup/rollup-darwin-x64": "4.50.2", + "@rollup/rollup-freebsd-arm64": "4.50.2", + "@rollup/rollup-freebsd-x64": "4.50.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.50.2", + "@rollup/rollup-linux-arm-musleabihf": "4.50.2", + "@rollup/rollup-linux-arm64-gnu": "4.50.2", + "@rollup/rollup-linux-arm64-musl": "4.50.2", + "@rollup/rollup-linux-loong64-gnu": "4.50.2", + "@rollup/rollup-linux-ppc64-gnu": "4.50.2", + "@rollup/rollup-linux-riscv64-gnu": "4.50.2", + "@rollup/rollup-linux-riscv64-musl": "4.50.2", + "@rollup/rollup-linux-s390x-gnu": "4.50.2", + "@rollup/rollup-linux-x64-gnu": "4.50.2", + "@rollup/rollup-linux-x64-musl": "4.50.2", + "@rollup/rollup-openharmony-arm64": "4.50.2", + "@rollup/rollup-win32-arm64-msvc": "4.50.2", + "@rollup/rollup-win32-ia32-msvc": "4.50.2", + "@rollup/rollup-win32-x64-msvc": "4.50.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/scule": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "license": "MIT", + "optional": true + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "license": "MIT", + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/simple-code-editor": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/simple-code-editor/-/simple-code-editor-2.1.0.tgz", + "integrity": "sha512-mQ0bNhkOKgRFyoDF54zwuhWt8Wcj+T0sciCvyD3qJnNMOv01x4guRhq8ksUDUGUmAm3vPOWvkhP+YwKja0yh2g==", + "license": "MIT", + "dependencies": { + "highlight.js": "^11.8.0" + } + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "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==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/ssri": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", + "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/stat-mode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", + "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz", + "integrity": "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/temp": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", + "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", + "license": "MIT", + "peer": true, + "dependencies": { + "mkdirp": "^0.5.1", + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/temp-file": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", + "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", + "license": "MIT", + "dependencies": { + "async-exit-hook": "^2.0.1", + "fs-extra": "^10.0.0" + } + }, + "node_modules/tiny-async-pool": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tiny-async-pool/-/tiny-async-pool-1.3.0.tgz", + "integrity": "sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==", + "license": "MIT", + "dependencies": { + "semver": "^5.5.0" + } + }, + "node_modules/tiny-async-pool/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "license": "MIT", + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", + "license": "MIT" + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "license": "WTFPL", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "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==", + "license": "(MIT OR CC0-1.0)", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.9.2", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-auto-import-cache": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/typescript-auto-import-cache/-/typescript-auto-import-cache-0.3.6.tgz", + "integrity": "sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.8" + } + }, + "node_modules/ufo": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.12.0", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-7.12.0.tgz", + "integrity": "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==", + "license": "MIT" + }, + "node_modules/unique-filename": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", + "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==", + "license": "ISC", + "dependencies": { + "unique-slug": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/unique-slug": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz", + "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unplugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-3.0.0.tgz", + "integrity": "sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "picomatch": "^4.0.3", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/unplugin-utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.1.tgz", + "integrity": "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==", + "license": "MIT", + "dependencies": { + "pathe": "^2.0.3", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "license": "(WTFPL OR MIT)" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", + "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist-node/bin/uuid" + } + }, + "node_modules/verror": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "license": "MIT", + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/vite": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/volar-service-css": { + "version": "0.0.68", + "resolved": "https://registry.npmjs.org/volar-service-css/-/volar-service-css-0.0.68.tgz", + "integrity": "sha512-lJSMh6f3QzZ1tdLOZOzovLX0xzAadPhx8EKwraDLPxBndLCYfoTvnNuiFFV8FARrpAlW5C0WkH+TstPaCxr00Q==", + "license": "MIT", + "dependencies": { + "vscode-css-languageservice": "^6.3.0", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-emmet": { + "version": "0.0.68", + "resolved": "https://registry.npmjs.org/volar-service-emmet/-/volar-service-emmet-0.0.68.tgz", + "integrity": "sha512-nHvixrRQ83EzkQ4G/jFxu9Y4eSsXS/X2cltEPDM+K9qZmIv+Ey1w0tg1+6caSe8TU5Hgw4oSTwNMf/6cQb3LzQ==", + "license": "MIT", + "dependencies": { + "@emmetio/css-parser": "^0.4.1", + "@emmetio/html-matcher": "^1.3.0", + "@vscode/emmet-helper": "^2.9.3", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-html": { + "version": "0.0.68", + "resolved": "https://registry.npmjs.org/volar-service-html/-/volar-service-html-0.0.68.tgz", + "integrity": "sha512-fru9gsLJxy33xAltXOh4TEdi312HP80hpuKhpYQD4O5hDnkNPEBdcQkpB+gcX0oK0VxRv1UOzcGQEUzWCVHLfA==", + "license": "MIT", + "dependencies": { + "vscode-html-languageservice": "^5.3.0", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-json": { + "version": "0.0.68", + "resolved": "https://registry.npmjs.org/volar-service-json/-/volar-service-json-0.0.68.tgz", + "integrity": "sha512-2d73Khlffwa0o6B6nA4vCyvqqTBuik1aj1i+EPC8a2UdmjMBAvHhGUcUiF3EscGhenv42UxL7f3tWbsITBNGZg==", + "license": "MIT", + "dependencies": { + "vscode-json-languageservice": "^5.4.0", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-pug": { + "version": "0.0.68", + "resolved": "https://registry.npmjs.org/volar-service-pug/-/volar-service-pug-0.0.68.tgz", + "integrity": "sha512-/nZ8fYKDDrV/fqlBoMACWaghFfaIFZMH+qO9YiRsdGbekAvSZqjQAKl1DSJwWqAkabA68Md51mRIdzYzqleipQ==", + "license": "MIT", + "dependencies": { + "@volar/language-service": "~2.4.0", + "muggle-string": "^0.4.1", + "pug-lexer": "^5.0.1", + "pug-parser": "^6.0.0", + "volar-service-html": "0.0.68", + "vscode-html-languageservice": "^5.3.0", + "vscode-languageserver-textdocument": "^1.0.11" + } + }, + "node_modules/volar-service-pug-beautify": { + "version": "0.0.68", + "resolved": "https://registry.npmjs.org/volar-service-pug-beautify/-/volar-service-pug-beautify-0.0.68.tgz", + "integrity": "sha512-CUKfD2l9aPam7jeZT0bQtAOfSWm6XmOmTXOfYDMILuK6+5uYiMKbPW2y+OdK2FnHjcAC53GnHpUrIbfxojRoFQ==", + "license": "MIT", + "dependencies": { + "@johnsoncodehk/pug-beautify": "^0.2.2" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-typescript": { + "version": "0.0.68", + "resolved": "https://registry.npmjs.org/volar-service-typescript/-/volar-service-typescript-0.0.68.tgz", + "integrity": "sha512-z7B/7CnJ0+TWWFp/gh2r5/QwMObHNDiQiv4C9pTBNI2Wxuwymd4bjEORzrJ/hJ5Yd5+OzeYK+nFCKevoGEEeKw==", + "license": "MIT", + "dependencies": { + "path-browserify": "^1.0.1", + "semver": "^7.6.2", + "typescript-auto-import-cache": "^0.3.5", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-nls": "^5.2.0", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/vscode-css-languageservice": { + "version": "6.3.9", + "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.9.tgz", + "integrity": "sha512-1tLWfp+TDM5ZuVWht3jmaY5y7O6aZmpeXLoHl5bv1QtRsRKt4xYGRMmdJa5Pqx/FTkgRbsna9R+Gn2xE+evVuA==", + "license": "MIT", + "dependencies": { + "@vscode/l10n": "^0.0.18", + "vscode-languageserver-textdocument": "^1.0.12", + "vscode-languageserver-types": "3.17.5", + "vscode-uri": "^3.1.0" + } + }, + "node_modules/vscode-html-languageservice": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.6.1.tgz", + "integrity": "sha512-5Mrqy5CLfFZUgkyhNZLA1Ye5g12Cb/v6VM7SxUzZUaRKWMDz4md+y26PrfRTSU0/eQAl3XpO9m2og+GGtDMuaA==", + "license": "MIT", + "dependencies": { + "@vscode/l10n": "^0.0.18", + "vscode-languageserver-textdocument": "^1.0.12", + "vscode-languageserver-types": "^3.17.5", + "vscode-uri": "^3.1.0" + } + }, + "node_modules/vscode-json-languageservice": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-5.7.1.tgz", + "integrity": "sha512-sMK2F8p7St0lJCr/4IfbQRoEUDUZRR7Ud0IiSl8I/JtN+m9Gv+FJlNkSAYns2R7Ebm/PKxqUuWYOfBej/rAdBQ==", + "license": "MIT", + "dependencies": { + "@vscode/l10n": "^0.0.18", + "jsonc-parser": "^3.3.1", + "vscode-languageserver-textdocument": "^1.0.12", + "vscode-languageserver-types": "^3.17.5", + "vscode-uri": "^3.1.0" + } + }, + "node_modules/vscode-json-languageservice/node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "license": "MIT" + }, + "node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmmirror.com/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageserver": { + "version": "9.0.1", + "resolved": "https://registry.npmmirror.com/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", + "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", + "license": "MIT", + "dependencies": { + "vscode-languageserver-protocol": "3.17.5" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmmirror.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "license": "MIT", + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", + "resolved": "https://registry.npmmirror.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "license": "MIT" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmmirror.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "license": "MIT" + }, + "node_modules/vscode-nls": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", + "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==", + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.28", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.28.tgz", + "integrity": "sha512-BRdrNfeoccSoIZeIhyPBfvWSLFP4q8J3u8Ju8Ug5vu3LdD+yTM13Sg4sKtljxozbnuMu1NB1X5HBHRYUzFocKg==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.28", + "@vue/compiler-sfc": "3.5.28", + "@vue/runtime-dom": "3.5.28", + "@vue/server-renderer": "3.5.28", + "@vue/shared": "3.5.28" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-chartjs": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/vue-chartjs/-/vue-chartjs-5.3.3.tgz", + "integrity": "sha512-jqxtL8KZ6YJ5NTv6XzrzLS7osyegOi28UGNZW0h9OkDL7Sh1396ht4Dorh04aKrl2LiSalQ84WtqiG0RIJb0tA==", + "license": "MIT", + "peerDependencies": { + "chart.js": "^4.1.1", + "vue": "^3.0.0-0 || ^2.7.0" + } + }, + "node_modules/vue-component-meta": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vue-component-meta/-/vue-component-meta-3.2.4.tgz", + "integrity": "sha512-FHUxalhR36Kfmrd5B4yfw7kmnCsZL3SGc2vTgzeEGAcLyuhhB0d1j2VmfXvx5pnHLI+kvCb+bxGsRcNgrUJ0Ww==", + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.27", + "@vue/language-core": "3.2.4", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-router": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-5.0.2.tgz", + "integrity": "sha512-YFhwaE5c5JcJpNB1arpkl4/GnO32wiUWRB+OEj1T0DlDxEZoOfbltl2xEwktNU/9o1sGcGburIXSpbLpPFe/6w==", + "license": "MIT", + "dependencies": { + "@babel/generator": "^7.28.6", + "@vue-macros/common": "^3.1.1", + "@vue/devtools-api": "^8.0.0", + "ast-walker-scope": "^0.8.3", + "chokidar": "^5.0.0", + "json5": "^2.2.3", + "local-pkg": "^1.1.2", + "magic-string": "^0.30.21", + "mlly": "^1.8.0", + "muggle-string": "^0.4.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "scule": "^1.3.0", + "tinyglobby": "^0.2.15", + "unplugin": "^3.0.0", + "unplugin-utils": "^0.3.1", + "yaml": "^2.8.2" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@pinia/colada": ">=0.21.2", + "@vue/compiler-sfc": "^3.5.17", + "pinia": "^3.0.4", + "vue": "^3.5.0" + }, + "peerDependenciesMeta": { + "@pinia/colada": { + "optional": true + }, + "@vue/compiler-sfc": { + "optional": true + }, + "pinia": { + "optional": true + } + } + }, + "node_modules/vue-router/node_modules/@vue/devtools-api": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-8.0.6.tgz", + "integrity": "sha512-+lGBI+WTvJmnU2FZqHhEB8J1DXcvNlDeEalz77iYgOdY1jTj1ipSBaKj3sRhYcy+kqA8v/BSuvOz1XJucfQmUA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^8.0.6" + } + }, + "node_modules/vue-router/node_modules/@vue/devtools-kit": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.0.6.tgz", + "integrity": "sha512-9zXZPTJW72OteDXeSa5RVML3zWDCRcO5t77aJqSs228mdopYj5AiTpihozbsfFJ0IodfNs7pSgOGO3qfCuxDtw==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^8.0.6", + "birpc": "^2.6.1", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^2.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/vue-router/node_modules/@vue/devtools-shared": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.0.6.tgz", + "integrity": "sha512-Pp1JylTqlgMJvxW6MGyfTF8vGvlBSCAvMFaDCYa82Mgw7TT5eE5kkHgDvmOGHWeJE4zIDfCpCxHapsK2LtIAJg==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/vue-router/node_modules/perfect-debounce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz", + "integrity": "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==", + "license": "MIT" + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-worker": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/web-worker/-/web-worker-1.5.0.tgz", + "integrity": "sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==", + "license": "Apache-2.0" + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "license": "MIT" + }, + "node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "license": "ISC" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/xml-utils": { + "version": "1.10.2", + "resolved": "https://registry.npmmirror.com/xml-utils/-/xml-utils-1.10.2.tgz", + "integrity": "sha512-RqM+2o1RYs6T8+3DzDSoTRAUfrvaejbVHcp3+thnAtDKo8LskR+HomLajEy5UjTz24rpka7AxVBRR3g2wTUkJA==", + "license": "CC0-1.0" + }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "license": "MIT", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zstddec": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/zstddec/-/zstddec-0.1.0.tgz", + "integrity": "sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg==", + "license": "MIT AND BSD-3-Clause" + } + } +} diff --git a/src/static/app/package.json b/src/static/app/package.json new file mode 100644 index 0000000..cdf03ff --- /dev/null +++ b/src/static/app/package.json @@ -0,0 +1,49 @@ +{ + "name": "app", + "version": "4.3.2", + "private": true, + "type": "module", + "module": "es2022", + "scripts": { + "dev": "vite", + "build": "vite build --emptyOutDir", + "buildcommitpush": "./build.sh", + "build electron": "vite build --emptyOutDir && vite build --mode electron && cd ../../../../WGDashboard-Desktop && /opt/homebrew/bin/npm run \"electron dist\"", + "preview": "vite preview" + }, + "dependencies": { + "@volar/language-server": "2.4.28", + "@vue/language-server": "3.2.4", + "@vuepic/vue-datepicker": "^12.1.0", + "@vueuse/core": "^14.2.0", + "@vueuse/shared": "^14.1.0", + "animate.css": "^4.1.1", + "bootstrap": "^5.3.2", + "bootstrap-icons": "^1.11.3", + "cidr-tools": "^11.0.8", + "css-color-converter": "^2.0.0", + "dayjs": "^1.11.19", + "electron-builder": "^26.7.0", + "fuse.js": "^7.0.0", + "i": "^0.3.7", + "is-cidr": "^6.0.3", + "npm": "^11.8.0", + "ol": "^10.7.0", + "pinia": "^3.0.4", + "pinia-plugin-persistedstate": "^4.7.1", + "qrcode": "^1.5.3", + "qrcodejs": "^1.0.0", + "simple-code-editor": "^2.0.9", + "uuid": "^13.0.0", + "vue": "^3.5.28", + "vue-chartjs": "^5.3.3", + "vue-router": "^5.0.2" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^6.0.4", + "vite": "^7.3.1" + }, + "overrides": { + "tar": "^7.5.6" + } +} diff --git a/src/static/app/proxy.js b/src/static/app/proxy.js new file mode 100644 index 0000000..c65fc32 --- /dev/null +++ b/src/static/app/proxy.js @@ -0,0 +1 @@ +export const proxy = "http://wg.local:10086/" \ No newline at end of file diff --git a/src/static/app/public/img/Logo-1-128x128.png b/src/static/app/public/img/Logo-1-128x128.png new file mode 100644 index 0000000..b128f59 Binary files /dev/null and b/src/static/app/public/img/Logo-1-128x128.png differ diff --git a/src/static/app/public/img/Logo-1-256x256.png b/src/static/app/public/img/Logo-1-256x256.png new file mode 100644 index 0000000..df1da30 Binary files /dev/null and b/src/static/app/public/img/Logo-1-256x256.png differ diff --git a/src/static/app/public/img/Logo-1-384x384.png b/src/static/app/public/img/Logo-1-384x384.png new file mode 100644 index 0000000..498cb3f Binary files /dev/null and b/src/static/app/public/img/Logo-1-384x384.png differ diff --git a/src/static/app/public/img/Logo-1-512x512.png b/src/static/app/public/img/Logo-1-512x512.png new file mode 100644 index 0000000..33b27ce Binary files /dev/null and b/src/static/app/public/img/Logo-1-512x512.png differ diff --git a/src/static/app/public/img/Logo-1-Maskable-512x512.png b/src/static/app/public/img/Logo-1-Maskable-512x512.png new file mode 100644 index 0000000..c2add0f Binary files /dev/null and b/src/static/app/public/img/Logo-1-Maskable-512x512.png differ diff --git a/src/static/app/public/img/Logo-1-Rounded-128x128.png b/src/static/app/public/img/Logo-1-Rounded-128x128.png new file mode 100644 index 0000000..90e5bf0 Binary files /dev/null and b/src/static/app/public/img/Logo-1-Rounded-128x128.png differ diff --git a/src/static/app/public/img/Logo-1-Rounded-256x256.png b/src/static/app/public/img/Logo-1-Rounded-256x256.png new file mode 100644 index 0000000..6bf016b Binary files /dev/null and b/src/static/app/public/img/Logo-1-Rounded-256x256.png differ diff --git a/src/static/app/public/img/Logo-1-Rounded-384x384.png b/src/static/app/public/img/Logo-1-Rounded-384x384.png new file mode 100644 index 0000000..dae6f60 Binary files /dev/null and b/src/static/app/public/img/Logo-1-Rounded-384x384.png differ diff --git a/src/static/app/public/img/Logo-1-Rounded-512x512.png b/src/static/app/public/img/Logo-1-Rounded-512x512.png new file mode 100644 index 0000000..d7edf8e Binary files /dev/null and b/src/static/app/public/img/Logo-1-Rounded-512x512.png differ diff --git a/src/static/app/public/img/Logo-2-128x128.png b/src/static/app/public/img/Logo-2-128x128.png new file mode 100644 index 0000000..24594c4 Binary files /dev/null and b/src/static/app/public/img/Logo-2-128x128.png differ diff --git a/src/static/app/public/img/Logo-2-256x256.png b/src/static/app/public/img/Logo-2-256x256.png new file mode 100644 index 0000000..5ccabf8 Binary files /dev/null and b/src/static/app/public/img/Logo-2-256x256.png differ diff --git a/src/static/app/public/img/Logo-2-384x384.png b/src/static/app/public/img/Logo-2-384x384.png new file mode 100644 index 0000000..15df097 Binary files /dev/null and b/src/static/app/public/img/Logo-2-384x384.png differ diff --git a/src/static/app/public/img/Logo-2-512x512.png b/src/static/app/public/img/Logo-2-512x512.png new file mode 100644 index 0000000..e5a8418 Binary files /dev/null and b/src/static/app/public/img/Logo-2-512x512.png differ diff --git a/src/static/app/public/img/Logo-2-Rounded-128x128.png b/src/static/app/public/img/Logo-2-Rounded-128x128.png new file mode 100644 index 0000000..962251a Binary files /dev/null and b/src/static/app/public/img/Logo-2-Rounded-128x128.png differ diff --git a/src/static/app/public/img/Logo-2-Rounded-256x256.png b/src/static/app/public/img/Logo-2-Rounded-256x256.png new file mode 100644 index 0000000..927e5bb Binary files /dev/null and b/src/static/app/public/img/Logo-2-Rounded-256x256.png differ diff --git a/src/static/app/public/img/Logo-2-Rounded-384x384.png b/src/static/app/public/img/Logo-2-Rounded-384x384.png new file mode 100644 index 0000000..a455115 Binary files /dev/null and b/src/static/app/public/img/Logo-2-Rounded-384x384.png differ diff --git a/src/static/app/public/img/Logo-2-Rounded-512x512.png b/src/static/app/public/img/Logo-2-Rounded-512x512.png new file mode 100644 index 0000000..f1e703d Binary files /dev/null and b/src/static/app/public/img/Logo-2-Rounded-512x512.png differ diff --git a/src/static/app/public/json/manifest.json b/src/static/app/public/json/manifest.json new file mode 100644 index 0000000..295606a --- /dev/null +++ b/src/static/app/public/json/manifest.json @@ -0,0 +1,48 @@ +{ + "theme_color": "#343a40", + "background_color": "#343a40", + "display": "fullscreen", + "scope": "/", + "start_url": "/", + "name": "WGDashboard", + "short_name": "WGDashboard", + "screenshots": [ + { + "src": "https://wgdashboard-resources.tor1.cdn.digitaloceanspaces.com/Documentation%20Images/sign-in.png", + "sizes": "2880x1826", + "type": "image/png", + "form_factor": "wide" + }, + { + "src": "https://wgdashboard-resources.tor1.cdn.digitaloceanspaces.com/Documentation%20Images/index.png", + "sizes": "2880x1826", + "type": "image/png" + } + ], + "icons": [ + { + "src": "../img/Logo-2-Rounded-128x128.png", + "sizes": "128x128", + "type": "image/png", + "purpose": "any" + }, + { + "src": "../img/Logo-2-Rounded-256x256.png", + "sizes": "256x256", + "type": "image/png", + "purpose": "any" + }, + { + "src": "../img/Logo-2-Rounded-384x384.png", + "sizes": "384x384", + "type": "image/png", + "purpose": "any" + }, + { + "src": "../img/Logo-2-Rounded-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any" + } + ] +} \ No newline at end of file diff --git a/src/static/app/src/App.vue b/src/static/app/src/App.vue new file mode 100644 index 0000000..9bc02a7 --- /dev/null +++ b/src/static/app/src/App.vue @@ -0,0 +1,75 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/clientComponents/availablePeersGroup.vue b/src/static/app/src/components/clientComponents/availablePeersGroup.vue new file mode 100644 index 0000000..8702c85 --- /dev/null +++ b/src/static/app/src/components/clientComponents/availablePeersGroup.vue @@ -0,0 +1,96 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/clientComponents/clientAssignedPeers.vue b/src/static/app/src/components/clientComponents/clientAssignedPeers.vue new file mode 100644 index 0000000..6631fb3 --- /dev/null +++ b/src/static/app/src/components/clientComponents/clientAssignedPeers.vue @@ -0,0 +1,109 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/clientComponents/clientDelete.vue b/src/static/app/src/components/clientComponents/clientDelete.vue new file mode 100644 index 0000000..ae7c4f9 --- /dev/null +++ b/src/static/app/src/components/clientComponents/clientDelete.vue @@ -0,0 +1,62 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/clientComponents/clientGroup.vue b/src/static/app/src/components/clientComponents/clientGroup.vue new file mode 100644 index 0000000..43a4323 --- /dev/null +++ b/src/static/app/src/components/clientComponents/clientGroup.vue @@ -0,0 +1,57 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/clientComponents/clientProfile.vue b/src/static/app/src/components/clientComponents/clientProfile.vue new file mode 100644 index 0000000..96c0baf --- /dev/null +++ b/src/static/app/src/components/clientComponents/clientProfile.vue @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/clientComponents/clientResetPassword.vue b/src/static/app/src/components/clientComponents/clientResetPassword.vue new file mode 100644 index 0000000..a1c9066 --- /dev/null +++ b/src/static/app/src/components/clientComponents/clientResetPassword.vue @@ -0,0 +1,96 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/clientComponents/clientSettingComponents/oidcSettings.vue b/src/static/app/src/components/clientComponents/clientSettingComponents/oidcSettings.vue new file mode 100644 index 0000000..4e4254e --- /dev/null +++ b/src/static/app/src/components/clientComponents/clientSettingComponents/oidcSettings.vue @@ -0,0 +1,63 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/clientComponents/clientSettings.vue b/src/static/app/src/components/clientComponents/clientSettings.vue new file mode 100644 index 0000000..d872a34 --- /dev/null +++ b/src/static/app/src/components/clientComponents/clientSettings.vue @@ -0,0 +1,88 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/clientComponents/clientViewer.vue b/src/static/app/src/components/clientComponents/clientViewer.vue new file mode 100644 index 0000000..582bd75 --- /dev/null +++ b/src/static/app/src/components/clientComponents/clientViewer.vue @@ -0,0 +1,143 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/backupRestoreComponents/backup.vue b/src/static/app/src/components/configurationComponents/backupRestoreComponents/backup.vue new file mode 100644 index 0000000..6cf31e9 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/backupRestoreComponents/backup.vue @@ -0,0 +1,184 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/configurationBackupRestore.vue b/src/static/app/src/components/configurationComponents/configurationBackupRestore.vue new file mode 100644 index 0000000..e3f01f1 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/configurationBackupRestore.vue @@ -0,0 +1,123 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/configurationDescription.vue b/src/static/app/src/components/configurationComponents/configurationDescription.vue new file mode 100644 index 0000000..0eb9c8f --- /dev/null +++ b/src/static/app/src/components/configurationComponents/configurationDescription.vue @@ -0,0 +1,57 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/deleteConfiguration.vue b/src/static/app/src/components/configurationComponents/deleteConfiguration.vue new file mode 100644 index 0000000..1e351c3 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/deleteConfiguration.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/src/static/app/src/components/configurationComponents/editConfiguration.vue b/src/static/app/src/components/configurationComponents/editConfiguration.vue new file mode 100644 index 0000000..f5d67dc --- /dev/null +++ b/src/static/app/src/components/configurationComponents/editConfiguration.vue @@ -0,0 +1,270 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/editConfigurationComponents/editPeerSettingsOverride.vue b/src/static/app/src/components/configurationComponents/editConfigurationComponents/editPeerSettingsOverride.vue new file mode 100644 index 0000000..a2a6e16 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/editConfigurationComponents/editPeerSettingsOverride.vue @@ -0,0 +1,152 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/editConfigurationComponents/editRawConfigurationFile.vue b/src/static/app/src/components/configurationComponents/editConfigurationComponents/editRawConfigurationFile.vue new file mode 100644 index 0000000..5868d8e --- /dev/null +++ b/src/static/app/src/components/configurationComponents/editConfigurationComponents/editRawConfigurationFile.vue @@ -0,0 +1,103 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/editConfigurationComponents/updateConfigurationName.vue b/src/static/app/src/components/configurationComponents/editConfigurationComponents/updateConfigurationName.vue new file mode 100644 index 0000000..36ecae5 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/editConfigurationComponents/updateConfigurationName.vue @@ -0,0 +1,110 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/newPeersComponents/allowedIPsInput.vue b/src/static/app/src/components/configurationComponents/newPeersComponents/allowedIPsInput.vue new file mode 100644 index 0000000..131db38 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/newPeersComponents/allowedIPsInput.vue @@ -0,0 +1,207 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/newPeersComponents/bulkAdd.vue b/src/static/app/src/components/configurationComponents/newPeersComponents/bulkAdd.vue new file mode 100644 index 0000000..91c5c3a --- /dev/null +++ b/src/static/app/src/components/configurationComponents/newPeersComponents/bulkAdd.vue @@ -0,0 +1,85 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/newPeersComponents/dnsInput.vue b/src/static/app/src/components/configurationComponents/newPeersComponents/dnsInput.vue new file mode 100644 index 0000000..76552b7 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/newPeersComponents/dnsInput.vue @@ -0,0 +1,70 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/newPeersComponents/endpointAllowedIps.vue b/src/static/app/src/components/configurationComponents/newPeersComponents/endpointAllowedIps.vue new file mode 100644 index 0000000..3d857df --- /dev/null +++ b/src/static/app/src/components/configurationComponents/newPeersComponents/endpointAllowedIps.vue @@ -0,0 +1,66 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/newPeersComponents/mtuInput.vue b/src/static/app/src/components/configurationComponents/newPeersComponents/mtuInput.vue new file mode 100644 index 0000000..d3832fa --- /dev/null +++ b/src/static/app/src/components/configurationComponents/newPeersComponents/mtuInput.vue @@ -0,0 +1,29 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/newPeersComponents/nameInput.vue b/src/static/app/src/components/configurationComponents/newPeersComponents/nameInput.vue new file mode 100644 index 0000000..fa69523 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/newPeersComponents/nameInput.vue @@ -0,0 +1,31 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/newPeersComponents/notesInput.vue b/src/static/app/src/components/configurationComponents/newPeersComponents/notesInput.vue new file mode 100644 index 0000000..6d12ade --- /dev/null +++ b/src/static/app/src/components/configurationComponents/newPeersComponents/notesInput.vue @@ -0,0 +1,31 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/newPeersComponents/persistentKeepAliveInput.vue b/src/static/app/src/components/configurationComponents/newPeersComponents/persistentKeepAliveInput.vue new file mode 100644 index 0000000..62be3fe --- /dev/null +++ b/src/static/app/src/components/configurationComponents/newPeersComponents/persistentKeepAliveInput.vue @@ -0,0 +1,30 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/newPeersComponents/presharedKeyInput.vue b/src/static/app/src/components/configurationComponents/newPeersComponents/presharedKeyInput.vue new file mode 100644 index 0000000..2918e37 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/newPeersComponents/presharedKeyInput.vue @@ -0,0 +1,51 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/newPeersComponents/privatePublicKeyInput.vue b/src/static/app/src/components/configurationComponents/newPeersComponents/privatePublicKeyInput.vue new file mode 100644 index 0000000..f0c9680 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/newPeersComponents/privatePublicKeyInput.vue @@ -0,0 +1,137 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peer.vue b/src/static/app/src/components/configurationComponents/peer.vue new file mode 100644 index 0000000..4f98f69 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peer.vue @@ -0,0 +1,166 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerAddModal.vue b/src/static/app/src/components/configurationComponents/peerAddModal.vue new file mode 100644 index 0000000..e0ccded --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerAddModal.vue @@ -0,0 +1,180 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerAssignModal.vue b/src/static/app/src/components/configurationComponents/peerAssignModal.vue new file mode 100644 index 0000000..5a53192 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerAssignModal.vue @@ -0,0 +1,56 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerAssignModalComponents/assignedClients.vue b/src/static/app/src/components/configurationComponents/peerAssignModalComponents/assignedClients.vue new file mode 100644 index 0000000..7676969 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerAssignModalComponents/assignedClients.vue @@ -0,0 +1,52 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerAssignModalComponents/assignment.vue b/src/static/app/src/components/configurationComponents/peerAssignModalComponents/assignment.vue new file mode 100644 index 0000000..7329595 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerAssignModalComponents/assignment.vue @@ -0,0 +1,64 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerAssignModalComponents/searchClients.vue b/src/static/app/src/components/configurationComponents/peerAssignModalComponents/searchClients.vue new file mode 100644 index 0000000..ac2cbff --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerAssignModalComponents/searchClients.vue @@ -0,0 +1,80 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerAssignModalComponents/searchClientsGroup.vue b/src/static/app/src/components/configurationComponents/peerAssignModalComponents/searchClientsGroup.vue new file mode 100644 index 0000000..263c015 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerAssignModalComponents/searchClientsGroup.vue @@ -0,0 +1,58 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerConfigurationFile.vue b/src/static/app/src/components/configurationComponents/peerConfigurationFile.vue new file mode 100644 index 0000000..a191ca6 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerConfigurationFile.vue @@ -0,0 +1,130 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerCreate.vue b/src/static/app/src/components/configurationComponents/peerCreate.vue new file mode 100644 index 0000000..c1c9aed --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerCreate.vue @@ -0,0 +1,190 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerDetailsModal.vue b/src/static/app/src/components/configurationComponents/peerDetailsModal.vue new file mode 100644 index 0000000..f4451a4 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerDetailsModal.vue @@ -0,0 +1,184 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerIntersectionObserver.vue b/src/static/app/src/components/configurationComponents/peerIntersectionObserver.vue new file mode 100644 index 0000000..886f0da --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerIntersectionObserver.vue @@ -0,0 +1,32 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerJobs.vue b/src/static/app/src/components/configurationComponents/peerJobs.vue new file mode 100644 index 0000000..8538917 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerJobs.vue @@ -0,0 +1,114 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerJobsAllModal.vue b/src/static/app/src/components/configurationComponents/peerJobsAllModal.vue new file mode 100644 index 0000000..2528037 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerJobsAllModal.vue @@ -0,0 +1,91 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerJobsLogsModal.vue b/src/static/app/src/components/configurationComponents/peerJobsLogsModal.vue new file mode 100644 index 0000000..4f59c1a --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerJobsLogsModal.vue @@ -0,0 +1,189 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerList.old.vue b/src/static/app/src/components/configurationComponents/peerList.old.vue new file mode 100644 index 0000000..5c053aa --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerList.old.vue @@ -0,0 +1,776 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerList.vue b/src/static/app/src/components/configurationComponents/peerList.vue new file mode 100644 index 0000000..85ea665 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerList.vue @@ -0,0 +1,517 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerListComponents/peerDataUsageCharts.vue b/src/static/app/src/components/configurationComponents/peerListComponents/peerDataUsageCharts.vue new file mode 100644 index 0000000..f4a542e --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerListComponents/peerDataUsageCharts.vue @@ -0,0 +1,289 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerListComponents/peerListModals.vue b/src/static/app/src/components/configurationComponents/peerListComponents/peerListModals.vue new file mode 100644 index 0000000..16e19a0 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerListComponents/peerListModals.vue @@ -0,0 +1,65 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerQRCode.vue b/src/static/app/src/components/configurationComponents/peerQRCode.vue new file mode 100644 index 0000000..aa8b520 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerQRCode.vue @@ -0,0 +1,113 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerRow.vue b/src/static/app/src/components/configurationComponents/peerRow.vue new file mode 100644 index 0000000..ac700ad --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerRow.vue @@ -0,0 +1,79 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerScheduleJobsComponents/scheduleDropdown.vue b/src/static/app/src/components/configurationComponents/peerScheduleJobsComponents/scheduleDropdown.vue new file mode 100644 index 0000000..6d8fd2a --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerScheduleJobsComponents/scheduleDropdown.vue @@ -0,0 +1,48 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerScheduleJobsComponents/schedulePeerJob.vue b/src/static/app/src/components/configurationComponents/peerScheduleJobsComponents/schedulePeerJob.vue new file mode 100644 index 0000000..291043c --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerScheduleJobsComponents/schedulePeerJob.vue @@ -0,0 +1,219 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerSearch.vue b/src/static/app/src/components/configurationComponents/peerSearch.vue new file mode 100644 index 0000000..45dcd8a --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerSearch.vue @@ -0,0 +1,245 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerSearchBar.vue b/src/static/app/src/components/configurationComponents/peerSearchBar.vue new file mode 100644 index 0000000..33065d9 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerSearchBar.vue @@ -0,0 +1,75 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerSettings.vue b/src/static/app/src/components/configurationComponents/peerSettings.vue new file mode 100644 index 0000000..32fc08e --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerSettings.vue @@ -0,0 +1,274 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerSettingsDropdown.vue b/src/static/app/src/components/configurationComponents/peerSettingsDropdown.vue new file mode 100644 index 0000000..0c200fc --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerSettingsDropdown.vue @@ -0,0 +1,257 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerSettingsDropdownComponents/peerSettingsDropdownTool.vue b/src/static/app/src/components/configurationComponents/peerSettingsDropdownComponents/peerSettingsDropdownTool.vue new file mode 100644 index 0000000..2192aa4 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerSettingsDropdownComponents/peerSettingsDropdownTool.vue @@ -0,0 +1,38 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerSettingsDropdownComponents/peerTagSelectDropdown.vue b/src/static/app/src/components/configurationComponents/peerSettingsDropdownComponents/peerTagSelectDropdown.vue new file mode 100644 index 0000000..e61de2f --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerSettingsDropdownComponents/peerTagSelectDropdown.vue @@ -0,0 +1,50 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerShareLinkComponents/peerShareWithEmail.vue b/src/static/app/src/components/configurationComponents/peerShareLinkComponents/peerShareWithEmail.vue new file mode 100644 index 0000000..6b6b109 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerShareLinkComponents/peerShareWithEmail.vue @@ -0,0 +1,155 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerShareLinkComponents/peerShareWithEmailBodyPreview.vue b/src/static/app/src/components/configurationComponents/peerShareLinkComponents/peerShareWithEmailBodyPreview.vue new file mode 100644 index 0000000..fab5413 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerShareLinkComponents/peerShareWithEmailBodyPreview.vue @@ -0,0 +1,78 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerShareLinkModal.vue b/src/static/app/src/components/configurationComponents/peerShareLinkModal.vue new file mode 100644 index 0000000..310d45a --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerShareLinkModal.vue @@ -0,0 +1,203 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerTag.vue b/src/static/app/src/components/configurationComponents/peerTag.vue new file mode 100644 index 0000000..b782fdd --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerTag.vue @@ -0,0 +1,241 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerTagBadge.vue b/src/static/app/src/components/configurationComponents/peerTagBadge.vue new file mode 100644 index 0000000..9169250 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerTagBadge.vue @@ -0,0 +1,20 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerTagComponents/peerTagColorPicker.vue b/src/static/app/src/components/configurationComponents/peerTagComponents/peerTagColorPicker.vue new file mode 100644 index 0000000..cef105e --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerTagComponents/peerTagColorPicker.vue @@ -0,0 +1,49 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerTagComponents/peerTagIconPicker.vue b/src/static/app/src/components/configurationComponents/peerTagComponents/peerTagIconPicker.vue new file mode 100644 index 0000000..abf8d29 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerTagComponents/peerTagIconPicker.vue @@ -0,0 +1,69 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/peerTagComponents/peerTagSetting.vue b/src/static/app/src/components/configurationComponents/peerTagComponents/peerTagSetting.vue new file mode 100644 index 0000000..ce21497 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/peerTagComponents/peerTagSetting.vue @@ -0,0 +1,72 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/restrictedPeers.vue b/src/static/app/src/components/configurationComponents/restrictedPeers.vue new file mode 100644 index 0000000..d84cfcd --- /dev/null +++ b/src/static/app/src/components/configurationComponents/restrictedPeers.vue @@ -0,0 +1,23 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationComponents/selectPeers.vue b/src/static/app/src/components/configurationComponents/selectPeers.vue new file mode 100644 index 0000000..e4daf17 --- /dev/null +++ b/src/static/app/src/components/configurationComponents/selectPeers.vue @@ -0,0 +1,260 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationList.vue b/src/static/app/src/components/configurationList.vue new file mode 100644 index 0000000..005d04d --- /dev/null +++ b/src/static/app/src/components/configurationList.vue @@ -0,0 +1,152 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/configurationListComponents/configurationCard.vue b/src/static/app/src/components/configurationListComponents/configurationCard.vue new file mode 100644 index 0000000..11bc456 --- /dev/null +++ b/src/static/app/src/components/configurationListComponents/configurationCard.vue @@ -0,0 +1,128 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/map/osmap.vue b/src/static/app/src/components/map/osmap.vue new file mode 100644 index 0000000..049d407 --- /dev/null +++ b/src/static/app/src/components/map/osmap.vue @@ -0,0 +1,130 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/messageCentreComponent/message.vue b/src/static/app/src/components/messageCentreComponent/message.vue new file mode 100644 index 0000000..2ed710c --- /dev/null +++ b/src/static/app/src/components/messageCentreComponent/message.vue @@ -0,0 +1,90 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/navbar.vue b/src/static/app/src/components/navbar.vue new file mode 100644 index 0000000..f83b7fe --- /dev/null +++ b/src/static/app/src/components/navbar.vue @@ -0,0 +1,234 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/navbarComponents/agentContainer.vue b/src/static/app/src/components/navbarComponents/agentContainer.vue new file mode 100644 index 0000000..f92a9bd --- /dev/null +++ b/src/static/app/src/components/navbarComponents/agentContainer.vue @@ -0,0 +1,161 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/navbarComponents/agentMessage.vue b/src/static/app/src/components/navbarComponents/agentMessage.vue new file mode 100644 index 0000000..660b92e --- /dev/null +++ b/src/static/app/src/components/navbarComponents/agentMessage.vue @@ -0,0 +1,55 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/navbarComponents/agentModal.vue b/src/static/app/src/components/navbarComponents/agentModal.vue new file mode 100644 index 0000000..e9a60f6 --- /dev/null +++ b/src/static/app/src/components/navbarComponents/agentModal.vue @@ -0,0 +1,99 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/navbarComponents/helpModal.vue b/src/static/app/src/components/navbarComponents/helpModal.vue new file mode 100644 index 0000000..fca23a3 --- /dev/null +++ b/src/static/app/src/components/navbarComponents/helpModal.vue @@ -0,0 +1,79 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/newConfigurationComponents/newConfigurationTemplate.vue b/src/static/app/src/components/newConfigurationComponents/newConfigurationTemplate.vue new file mode 100644 index 0000000..bb5abf9 --- /dev/null +++ b/src/static/app/src/components/newConfigurationComponents/newConfigurationTemplate.vue @@ -0,0 +1,250 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/newConfigurationComponents/newConfigurationTemplates.vue b/src/static/app/src/components/newConfigurationComponents/newConfigurationTemplates.vue new file mode 100644 index 0000000..33126f8 --- /dev/null +++ b/src/static/app/src/components/newConfigurationComponents/newConfigurationTemplates.vue @@ -0,0 +1,88 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/peerDetailsModalComponents/peerEndpoints.vue b/src/static/app/src/components/peerDetailsModalComponents/peerEndpoints.vue new file mode 100644 index 0000000..6925d60 --- /dev/null +++ b/src/static/app/src/components/peerDetailsModalComponents/peerEndpoints.vue @@ -0,0 +1,169 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/peerDetailsModalComponents/peerSession.vue b/src/static/app/src/components/peerDetailsModalComponents/peerSession.vue new file mode 100644 index 0000000..2234d44 --- /dev/null +++ b/src/static/app/src/components/peerDetailsModalComponents/peerSession.vue @@ -0,0 +1,32 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/peerDetailsModalComponents/peerSessionCalendarDay.vue b/src/static/app/src/components/peerDetailsModalComponents/peerSessionCalendarDay.vue new file mode 100644 index 0000000..aa62331 --- /dev/null +++ b/src/static/app/src/components/peerDetailsModalComponents/peerSessionCalendarDay.vue @@ -0,0 +1,91 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/peerDetailsModalComponents/peerSessionCalendarView.vue b/src/static/app/src/components/peerDetailsModalComponents/peerSessionCalendarView.vue new file mode 100644 index 0000000..91f1df4 --- /dev/null +++ b/src/static/app/src/components/peerDetailsModalComponents/peerSessionCalendarView.vue @@ -0,0 +1,63 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/peerDetailsModalComponents/peerSessions.vue b/src/static/app/src/components/peerDetailsModalComponents/peerSessions.vue new file mode 100644 index 0000000..70afe8b --- /dev/null +++ b/src/static/app/src/components/peerDetailsModalComponents/peerSessions.vue @@ -0,0 +1,180 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/peerDetailsModalComponents/peerTraffics.vue b/src/static/app/src/components/peerDetailsModalComponents/peerTraffics.vue new file mode 100644 index 0000000..3af44b9 --- /dev/null +++ b/src/static/app/src/components/peerDetailsModalComponents/peerTraffics.vue @@ -0,0 +1,177 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/protocolBadge.vue b/src/static/app/src/components/protocolBadge.vue new file mode 100644 index 0000000..b62a577 --- /dev/null +++ b/src/static/app/src/components/protocolBadge.vue @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/restoreConfigurationComponents/backupGroup.vue b/src/static/app/src/components/restoreConfigurationComponents/backupGroup.vue new file mode 100644 index 0000000..ec64b5b --- /dev/null +++ b/src/static/app/src/components/restoreConfigurationComponents/backupGroup.vue @@ -0,0 +1,86 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/restoreConfigurationComponents/confirmBackup.vue b/src/static/app/src/components/restoreConfigurationComponents/confirmBackup.vue new file mode 100644 index 0000000..603e9f1 --- /dev/null +++ b/src/static/app/src/components/restoreConfigurationComponents/confirmBackup.vue @@ -0,0 +1,342 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/restoreConfigurationComponents/uploadModal.vue b/src/static/app/src/components/restoreConfigurationComponents/uploadModal.vue new file mode 100644 index 0000000..63daf37 --- /dev/null +++ b/src/static/app/src/components/restoreConfigurationComponents/uploadModal.vue @@ -0,0 +1,155 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/accountSettingsInputPassword.vue b/src/static/app/src/components/settingsComponent/accountSettingsInputPassword.vue new file mode 100644 index 0000000..cb5ec89 --- /dev/null +++ b/src/static/app/src/components/settingsComponent/accountSettingsInputPassword.vue @@ -0,0 +1,144 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/accountSettingsInputUsername.vue b/src/static/app/src/components/settingsComponent/accountSettingsInputUsername.vue new file mode 100644 index 0000000..bca37f0 --- /dev/null +++ b/src/static/app/src/components/settingsComponent/accountSettingsInputUsername.vue @@ -0,0 +1,84 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/accountSettingsMFA.vue b/src/static/app/src/components/settingsComponent/accountSettingsMFA.vue new file mode 100644 index 0000000..2533480 --- /dev/null +++ b/src/static/app/src/components/settingsComponent/accountSettingsMFA.vue @@ -0,0 +1,72 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/dashboardAPIKeys.vue b/src/static/app/src/components/settingsComponent/dashboardAPIKeys.vue new file mode 100644 index 0000000..c057710 --- /dev/null +++ b/src/static/app/src/components/settingsComponent/dashboardAPIKeys.vue @@ -0,0 +1,135 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/dashboardAPIKeysComponents/dashboardAPIKey.vue b/src/static/app/src/components/settingsComponent/dashboardAPIKeysComponents/dashboardAPIKey.vue new file mode 100644 index 0000000..79f918a --- /dev/null +++ b/src/static/app/src/components/settingsComponent/dashboardAPIKeysComponents/dashboardAPIKey.vue @@ -0,0 +1,97 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/dashboardAPIKeysComponents/newDashboardAPIKey.vue b/src/static/app/src/components/settingsComponent/dashboardAPIKeysComponents/newDashboardAPIKey.vue new file mode 100644 index 0000000..9aaad23 --- /dev/null +++ b/src/static/app/src/components/settingsComponent/dashboardAPIKeysComponents/newDashboardAPIKey.vue @@ -0,0 +1,108 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/dashboardEmailSettings.vue b/src/static/app/src/components/settingsComponent/dashboardEmailSettings.vue new file mode 100644 index 0000000..67d62cb --- /dev/null +++ b/src/static/app/src/components/settingsComponent/dashboardEmailSettings.vue @@ -0,0 +1,214 @@ + + + + + diff --git a/src/static/app/src/components/settingsComponent/dashboardIPPortInput.vue b/src/static/app/src/components/settingsComponent/dashboardIPPortInput.vue new file mode 100644 index 0000000..2446ccd --- /dev/null +++ b/src/static/app/src/components/settingsComponent/dashboardIPPortInput.vue @@ -0,0 +1,111 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/dashboardLanguage.vue b/src/static/app/src/components/settingsComponent/dashboardLanguage.vue new file mode 100644 index 0000000..cf653ef --- /dev/null +++ b/src/static/app/src/components/settingsComponent/dashboardLanguage.vue @@ -0,0 +1,88 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/dashboardSettingsInputIPAddressAndPort.vue b/src/static/app/src/components/settingsComponent/dashboardSettingsInputIPAddressAndPort.vue new file mode 100644 index 0000000..5046ba5 --- /dev/null +++ b/src/static/app/src/components/settingsComponent/dashboardSettingsInputIPAddressAndPort.vue @@ -0,0 +1,91 @@ + + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/dashboardSettingsInputWireguardConfigurationPath.vue b/src/static/app/src/components/settingsComponent/dashboardSettingsInputWireguardConfigurationPath.vue new file mode 100644 index 0000000..193805f --- /dev/null +++ b/src/static/app/src/components/settingsComponent/dashboardSettingsInputWireguardConfigurationPath.vue @@ -0,0 +1,117 @@ + + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/dashboardSettingsWireguardConfigurationAutostart.vue b/src/static/app/src/components/settingsComponent/dashboardSettingsWireguardConfigurationAutostart.vue new file mode 100644 index 0000000..e7754a2 --- /dev/null +++ b/src/static/app/src/components/settingsComponent/dashboardSettingsWireguardConfigurationAutostart.vue @@ -0,0 +1,75 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/dashboardTheme.vue b/src/static/app/src/components/settingsComponent/dashboardTheme.vue new file mode 100644 index 0000000..0f96b7e --- /dev/null +++ b/src/static/app/src/components/settingsComponent/dashboardTheme.vue @@ -0,0 +1,55 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/dashboardWebHooks.vue b/src/static/app/src/components/settingsComponent/dashboardWebHooks.vue new file mode 100644 index 0000000..0594aa9 --- /dev/null +++ b/src/static/app/src/components/settingsComponent/dashboardWebHooks.vue @@ -0,0 +1,145 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/dashboardWebHooksComponents/addWebHook.vue b/src/static/app/src/components/settingsComponent/dashboardWebHooksComponents/addWebHook.vue new file mode 100644 index 0000000..0d261b5 --- /dev/null +++ b/src/static/app/src/components/settingsComponent/dashboardWebHooksComponents/addWebHook.vue @@ -0,0 +1,244 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/dashboardWebHooksComponents/previousWebHookSession.vue b/src/static/app/src/components/settingsComponent/dashboardWebHooksComponents/previousWebHookSession.vue new file mode 100644 index 0000000..ff01bb9 --- /dev/null +++ b/src/static/app/src/components/settingsComponent/dashboardWebHooksComponents/previousWebHookSession.vue @@ -0,0 +1,37 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/dashboardWebHooksComponents/webHookSession.vue b/src/static/app/src/components/settingsComponent/dashboardWebHooksComponents/webHookSession.vue new file mode 100644 index 0000000..1516fa7 --- /dev/null +++ b/src/static/app/src/components/settingsComponent/dashboardWebHooksComponents/webHookSession.vue @@ -0,0 +1,111 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/dashboardWebHooksComponents/webHookSessions.vue b/src/static/app/src/components/settingsComponent/dashboardWebHooksComponents/webHookSessions.vue new file mode 100644 index 0000000..4feef68 --- /dev/null +++ b/src/static/app/src/components/settingsComponent/dashboardWebHooksComponents/webHookSessions.vue @@ -0,0 +1,70 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/dashboardWireguardConfigurationTracking.vue b/src/static/app/src/components/settingsComponent/dashboardWireguardConfigurationTracking.vue new file mode 100644 index 0000000..9f1ddde --- /dev/null +++ b/src/static/app/src/components/settingsComponent/dashboardWireguardConfigurationTracking.vue @@ -0,0 +1,76 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/dashboardWireguardConfigurationTrackingComponents/configurationTracking.vue b/src/static/app/src/components/settingsComponent/dashboardWireguardConfigurationTrackingComponents/configurationTracking.vue new file mode 100644 index 0000000..7bd8743 --- /dev/null +++ b/src/static/app/src/components/settingsComponent/dashboardWireguardConfigurationTrackingComponents/configurationTracking.vue @@ -0,0 +1,190 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/peerDefaultSettings.vue b/src/static/app/src/components/settingsComponent/peerDefaultSettings.vue new file mode 100644 index 0000000..eeccaf8 --- /dev/null +++ b/src/static/app/src/components/settingsComponent/peerDefaultSettings.vue @@ -0,0 +1,37 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/peersDefaultSettingsInput.vue b/src/static/app/src/components/settingsComponent/peersDefaultSettingsInput.vue new file mode 100644 index 0000000..0b6b97c --- /dev/null +++ b/src/static/app/src/components/settingsComponent/peersDefaultSettingsInput.vue @@ -0,0 +1,91 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/wgdashboardSettings.vue b/src/static/app/src/components/settingsComponent/wgdashboardSettings.vue new file mode 100644 index 0000000..bdbe2bb --- /dev/null +++ b/src/static/app/src/components/settingsComponent/wgdashboardSettings.vue @@ -0,0 +1,86 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/wireguardConfigurationSettings.vue b/src/static/app/src/components/settingsComponent/wireguardConfigurationSettings.vue new file mode 100644 index 0000000..fe16e71 --- /dev/null +++ b/src/static/app/src/components/settingsComponent/wireguardConfigurationSettings.vue @@ -0,0 +1,27 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/setupComponent/totp.vue b/src/static/app/src/components/setupComponent/totp.vue new file mode 100644 index 0000000..d14698c --- /dev/null +++ b/src/static/app/src/components/setupComponent/totp.vue @@ -0,0 +1,130 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/signIn/signInInput.vue b/src/static/app/src/components/signIn/signInInput.vue new file mode 100644 index 0000000..8abf26a --- /dev/null +++ b/src/static/app/src/components/signIn/signInInput.vue @@ -0,0 +1,30 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/signIn/signInTOTP.vue b/src/static/app/src/components/signIn/signInTOTP.vue new file mode 100644 index 0000000..98a6b37 --- /dev/null +++ b/src/static/app/src/components/signIn/signInTOTP.vue @@ -0,0 +1,29 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/signInComponents/RemoteServer.vue b/src/static/app/src/components/signInComponents/RemoteServer.vue new file mode 100644 index 0000000..791f2ff --- /dev/null +++ b/src/static/app/src/components/signInComponents/RemoteServer.vue @@ -0,0 +1,223 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/signInComponents/RemoteServerList.vue b/src/static/app/src/components/signInComponents/RemoteServerList.vue new file mode 100644 index 0000000..ed8da0d --- /dev/null +++ b/src/static/app/src/components/signInComponents/RemoteServerList.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/systemStatusComponents/cpuCore.vue b/src/static/app/src/components/systemStatusComponents/cpuCore.vue new file mode 100644 index 0000000..b830478 --- /dev/null +++ b/src/static/app/src/components/systemStatusComponents/cpuCore.vue @@ -0,0 +1,52 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/systemStatusComponents/networkInterface.vue b/src/static/app/src/components/systemStatusComponents/networkInterface.vue new file mode 100644 index 0000000..7c13815 --- /dev/null +++ b/src/static/app/src/components/systemStatusComponents/networkInterface.vue @@ -0,0 +1,168 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/systemStatusComponents/process.vue b/src/static/app/src/components/systemStatusComponents/process.vue new file mode 100644 index 0000000..6115cc2 --- /dev/null +++ b/src/static/app/src/components/systemStatusComponents/process.vue @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/systemStatusComponents/storageMount.vue b/src/static/app/src/components/systemStatusComponents/storageMount.vue new file mode 100644 index 0000000..233d89e --- /dev/null +++ b/src/static/app/src/components/systemStatusComponents/storageMount.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/systemStatusComponents/systemStatusWidget.vue b/src/static/app/src/components/systemStatusComponents/systemStatusWidget.vue new file mode 100644 index 0000000..c5c56de --- /dev/null +++ b/src/static/app/src/components/systemStatusComponents/systemStatusWidget.vue @@ -0,0 +1,128 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/components/text/localeText.vue b/src/static/app/src/components/text/localeText.vue new file mode 100644 index 0000000..91f6ef0 --- /dev/null +++ b/src/static/app/src/components/text/localeText.vue @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/css/dashboard.css b/src/static/app/src/css/dashboard.css new file mode 100644 index 0000000..132489b --- /dev/null +++ b/src/static/app/src/css/dashboard.css @@ -0,0 +1,1307 @@ +*{ + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; +} + +.dp__input{ + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !important; +} + +::-webkit-scrollbar { + display: none; +} + +.codeFont{ + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +.feather { + width: 16px; + height: 16px; + vertical-align: text-bottom; +} + +.btn-primary { + font-weight: bold; +} + +#app{ + width: 100%; + height: 100vh; +} + +@supports (height: 100dvh) { + #app{ + height: 100dvh; + } +} + +@property --brandColor1 { + syntax: ''; + initial-value: #009dff; + inherits: false; +} + +@property --brandColor2 { + syntax: ''; + initial-value: #F94647; + inherits: false; +} + +@property --distance2{ + syntax: ''; + initial-value: 0%; + inherits: false; +} + +@property --degree{ + syntax: ''; + initial-value: 234deg; + inherits: false; +} + +.dashboardLogo{ + background: rgb(23,139,255); + background: linear-gradient(234deg, var(--brandColor1) var(--distance2), var(--brandColor2) 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + transition: --brandColor1 1s, --brandColor2 0.3s, --distance2 1s !important; + +} + +.btn-brand{ + /*background: rgb(23,139,255);*/ + background: linear-gradient(var(--degree), var(--brandColor1) var(--distance2), var(--brandColor2) 100%); + border: 0 !important; + transition: --brandColor1 1s, --brandColor2 1s, --distance2 0.5s !important; +} + +.btn-brand.loading{ + animation: spin infinite forwards 3s linear; +} + +.btn-brand:hover, .dashboardLogo:hover{ + --brandColor1: #2dadff; + --brandColor2: #ff6c6d; + --distance2: 30%; +} + +.signInBtn.signedIn{ + --distance2: 100%; +} + +@keyframes spin { + 0%{ + --degree: 234deg; + } + 100%{ + --degree: 594deg; + } +} + +[data-bs-theme="dark"].main, +#app:has(.main[data-bs-theme="dark"]), +[data-bs-theme="dark"].navbar-container{ + background-color: #1b1e21; +} + + + +.sidebar .nav-link, .bottomNavContainer .nav-link{ + font-weight: 500; + color: #333; + transition: 0.2s cubic-bezier(0.82, -0.07, 0, 1); +} + +[data-bs-theme="dark"] .sidebar .nav-link{ + color: white; +} + +[data-bs-theme="dark"] .sidebar .nav-link.active{ + color: #74b7ff; +} + +[data-bs-theme="dark"] .nav-link:hover, [data-bs-theme="dark"] .nav-link.active{ + background-color: #323844; +} + +.nav-link:hover, .nav-link.active { + background-color: #e8e8e8; +} + +.sidebar .nav-link .feather { + margin-right: 4px; + color: #999; +} + +.sidebar .nav-link.active, .bottomNavContainer .nav-link.active { + color: #007bff; + +} + +.sidebar .nav-link:hover .feather, +.sidebar .nav-link.active .feather { + color: inherit; +} + +.sidebar-heading { + font-size: .75rem; + text-transform: uppercase; +} + + +/* + * Navbar + */ + +.navbar-brand { + padding-top: .75rem; + padding-bottom: .75rem; + font-size: 1rem; + /*background-color: rgba(0, 0, 0, .25);*/ + /*box-shadow: inset -1px 0 0 rgba(0, 0, 0, .25);*/ +} + +.navbar .navbar-toggler { + top: .25rem; + right: 1rem; +} + +.form-control { + transition: all 0.2s ease-in-out; +} + +.form-control:disabled { + cursor: not-allowed; +} + +.navbar .form-control { + padding: .75rem 1rem; + border-width: 0; + border-radius: 0; +} + +.form-control-dark { + color: #fff; + background-color: rgba(255, 255, 255, .1); + border-color: rgba(255, 255, 255, .1); +} + +.form-control-dark:focus { + border-color: transparent; + box-shadow: 0 0 0 3px rgba(255, 255, 255, .25); +} + +.dot { + width: 10px; + height: 10px; + border-radius: 50px; + display: inline-block; + margin-left: auto !important; + background-color: #6c757d; +} + +.dot.active{ + background-color: #28a745!important; + box-shadow: 0 0 0 0.2rem #28a74545; +} + +.h6-dot-running { + margin-left: 0.3rem; +} + +.card-running { + border-color: #28a745; +} + +.info h6 { + line-break: anywhere; + transition: all 0.4s cubic-bezier(0.96, -0.07, 0.34, 1.0); + opacity: 1; +} + +.info .row .col-sm { + display: flex; + flex-direction: column; +} + +.info .row .col-sm small { + display: flex; +} + +.info .row .col-sm small strong:last-child(1) { + margin-left: auto !important; +} + +.btn-control { + border: none !important; + padding: 0; + margin: 0 1rem 0 0; +} + +.btn-control:hover{ + background-color: transparent !important; +} + +.btn-control:active, +.btn-control:focus { + background-color: transparent !important; + border: none !important; + box-shadow: none; +} + +.btn-qrcode-peer { + padding: 0 !important; +} + +.btn-qrcode-peer:active, +.btn-qrcode-peer:hover { + transform: scale(0.9) rotate(180deg); + border: 0 !important; +} + +.btn-download-peer:active, +.btn-download-peer:hover { + color: #17a2b8 !important; + transform: translateY(5px); +} + +.share_peer_btn_group .btn-control { + margin: 0 0 0 1rem; + padding: 0 !important; + transition: all 0.4s cubic-bezier(1, -0.43, 0, 1); +} + +.btn-control:hover { + background: white; +} + +.btn-delete-peer:hover { + color: #dc3545; +} + +.btn-lock-peer:hover { + color: #28a745; +} + +.btn-lock-peer.lock{ + color: #6c757d +} + +.btn-lock-peer.lock:hover{ + color: #6c757d +} + +.btn-control.btn-outline-primary:hover{ + color: #007bff +} + +/* .btn-setting-peer:hover { + color: #007bff +} */ + +.btn-download-peer:hover { + color: #17a2b8; +} + +.login-container { + padding: 2rem; +} + +@media (max-width: 992px) { + .card-col { + margin-bottom: 1rem; + } +} + +.switch { + font-size: 2rem; +} + +.switch:hover { + text-decoration: none +} + +.btn-group-label:hover { + color: #007bff; + border-color: #007bff; + background: white; +} + +.peer_data_group { + text-align: right; + display: flex; + margin-bottom: 0.5rem +} + +.peer_data_group p { + text-transform: uppercase; + margin-bottom: 0; + margin-right: 1rem +} + +@media (max-width: 768px) { + .peer_data_group { + text-align: left; + } +} + +.index-switch { + display: flex; + align-items: center; + justify-content: flex-end; +} + +main { + margin-bottom: 3rem; +} + +.peer_list { + margin-bottom: 7rem +} + +@media (max-width: 768px) { + .add_btn { + bottom: 1.5rem !important; + } + .peer_list { + margin-bottom: 7rem !important; + } +} + +.btn-manage-group { + z-index: 99; + position: fixed; + bottom: 3rem; + right: 2rem; + display: flex; +} + +.btn-manage-group .setting_btn_menu { + position: absolute; + top: -124px; + background-color: white; + padding: 1rem 0; + right: 0; + box-shadow: 0 10px 20px rgb(0 0 0 / 19%), 0 6px 6px rgb(0 0 0 / 23%); + border-radius: 10px; + min-width: 250px; + display: none; + transform: translateY(-30px); + opacity: 0; + transition: all 0.3s cubic-bezier(0.58, 0.03, 0.05, 1); +} + +.btn-manage-group .setting_btn_menu.show { + display: block; +} + +.setting_btn_menu.showing { + transform: translateY(0px); + opacity: 1; +} + +.setting_btn_menu a { + display: flex; + padding: 0.5rem 1rem; + transition: all 0.1s ease-in-out; + font-size: 1rem; + align-items: center; + cursor: pointer; +} + +.setting_btn_menu a:hover { + background-color: #efefef; + text-decoration: none; +} + +.setting_btn_menu a i { + margin-right: auto !important; +} + +.add_btn { + height: 54px; + z-index: 99; + border-radius: 100px !important; + padding: 0 14px; + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); + margin-right: 1rem; + font-size: 1.5rem; +} + +.setting_btn { + height: 54px; + z-index: 99; + border-radius: 100px !important; + padding: 0 14px; + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); + font-size: 1.5rem; +} + +@-webkit-keyframes rotating +/* Safari and Chrome */ + +{ + from { + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + to { + -webkit-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes rotating { + from { + -ms-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + to { + -ms-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -webkit-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +.rotating::before { + -webkit-animation: rotating 0.75s linear infinite; + -moz-animation: rotating 0.75s linear infinite; + -ms-animation: rotating 0.75s linear infinite; + -o-animation: rotating 0.75s linear infinite; + animation: rotating 0.75s linear infinite; +} + +.peer_private_key_textbox_switch { + position: absolute; + right: 2rem; + transform: translateY(-28px); + font-size: 1.2rem; + cursor: pointer; +} + +#peer_private_key_textbox, +#private_key, +#public_key, +#peer_preshared_key_textbox { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +.progress-bar { + transition: 0.3s ease-in-out; +} + +.key { + transition: 0.2s ease-in-out; + cursor: pointer; +} + +.key:hover { + color: #007bff; +} + +.card { + border-radius: 10px; +} + +.peer_list .card .button-group { + height: 22px; +} + +.form-control { + border-radius: 10px; +} + +.btn { + border-radius: 8px; + /*padding: 0.6rem 0.9em;*/ +} + + +.login-box label[for="username"], +.login-box label[for="password"], +.login-box label[for="totp"] + +{ + font-size: 1rem; + margin: 0 !important; + transform: translateY(2.1rem) translateX(1rem); + padding: 0; +} + + +.modal-content { + border-radius: 10px; +} + +.tooltip-inner { + font-size: 0.8rem; +} + +@-webkit-keyframes loading { + 0% { + background-color: #dfdfdf; + } + 50% { + background-color: #adadad; + } + 100% { + background-color: #dfdfdf; + } +} + +@-moz-keyframes loading { + 0% { + background-color: #dfdfdf; + } + 50% { + background-color: #adadad; + } + 100% { + background-color: #dfdfdf; + } +} + +.conf_card { + transition: 0.2s ease-in-out; +} + +.conf_card:hover { + border-color: #007bff; +} + +.info_loading { + /* animation: loading 2s infinite ease-in-out; + /* border-radius: 5px; */ + height: 19.19px; + /* transition: 0.3s ease-in-out; */ + + /* transform: translateX(40px); */ + opacity: 0 !important; +} + +#conf_status_btn { + transition: 0.2s ease-in-out; +} + +#conf_status_btn.info_loading { + height: 38px; + border-radius: 5px; + animation: loading 3s infinite ease-in-out; +} + +#qrcode_img img { + width: 100%; +} + +#selected_ip_list .badge, +#selected_peer_list .badge { + margin: 0.1rem +} + +#add_modal.ip_modal_open { + transition: filter 0.2s ease-in-out; + filter: brightness(0.5); +} + +#delete_bulk_modal .list-group a.active { + background-color: #dc3545; + border-color: #dc3545; +} + +#selected_peer_list { + max-height: 80px; + overflow-y: scroll; + overflow-x: hidden; +} + +.no-response { + width: 100%; + height: 100%; + position: fixed; + background: #000000ba; + z-index: 10000; + display: none; + flex-direction: column; + align-items: center; + justify-content: center; + opacity: 0; + transition: all 1s ease-in-out; +} + +.no-response.active { + display: flex; +} + +.no-response.active.show { + opacity: 100; +} + +.no-response .container>* { + text-align: center; +} + +.no-responding { + transition: all 1s ease-in-out; + filter: blur(10px); +} + +pre.index-alert { + margin-bottom: 0; + padding: 1rem; + background-color: #343a40; + border: 1px solid rgba(0, 0, 0, .125); + border-radius: .25rem; + margin-top: 1rem; + color: white; +} + +.peerNameCol { + display: flex; + align-items: center; + margin-bottom: 0.2rem +} + +.peerName { + margin: 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.peerLightContainer { + text-transform: uppercase; + margin: 0; + margin-left: auto !important; +} + +/*.conf_card .dot,*/ +/*.info .dot {*/ +/* transform: translateX(10px);*/ +/*}*/ + +#config_body { + transition: 0.3s ease-in-out; +} + + +#config_body.firstLoading { + opacity: 0.2; +} + +.chartTitle { + display: flex; +} + +.chartControl { + margin-bottom: 1rem; + display: flex; + align-items: center; +} + +.chartTitle h6 { + margin-bottom: 0; + line-height: 1; + margin-right: 0.5rem; +} + +.chartContainer.fullScreen { + position: fixed; + z-index: 9999; + background-color: white; + top: 0; + left: 0; + width: calc( 100% + 15px); + height: 100%; + padding: 32px; +} + +.chartContainer.fullScreen .col-sm { + padding-right: 0; + height: 100%; +} + +.chartContainer.fullScreen .chartCanvasContainer { + width: 100%; + height: calc( 100% - 47px) !important; + max-height: calc( 100% - 47px) !important; +} + +#switch{ + transition: all 200ms ease-in; +} + +.toggle--switch{ + display: none; +} + +.toggleLabel{ + width: 64px; + height: 32px; + background-color: #6c757d17; + display: flex; + position: relative; + border: 2px solid #6c757d8c; + border-radius: 100px; + transition: all 200ms ease-in; + cursor: pointer; + margin: 0; +} + +.toggle--switch.waiting + .toggleLabel{ + opacity: 0.5; +} + +.toggleLabel::before{ + background-color: #6c757d; + height: 26px; + width: 26px; + content: ""; + border-radius: 100px; + margin: 1px; + position: absolute; + animation-name: off; + animation-duration: 350ms; + animation-fill-mode: forwards; + transition: all 200ms ease-in; + cursor: pointer; +} + +.toggleLabel:hover::before{ + filter: brightness(1.2); +} + + +.toggle--switch:checked + .toggleLabel{ + background-color: #007bff17 !important; + border: 2px solid #007bff8c; +} + +.toggle--switch:checked + .toggleLabel::before{ + background-color: #007bff; + animation-name: on; + animation-duration: 350ms; + animation-fill-mode: forwards; +} + +@keyframes on { + 0%{ + left: 0px; + } + 60%{ + left: 0px; + width: 40px; + } + 100%{ + left: 32px; + width: 26px; + } +} + +@keyframes off { + 0%{ + left: 32px; + } + 60%{ + left: 18px; + width: 40px; + } + 100%{ + left: 0px; + width: 26px; + } +} + +.toastContainer{ + z-index: 99999 !important; +} + +.toast{ + min-width: 300px; + background-color: rgba(255,255,255,1); + z-index: 99999; +} + +.toast-header{ + background-color: rgba(255,255,255); +} + +.toast-progressbar{ + width: 100%; + height: 4px; + background-color: #007bff; + border-bottom-left-radius: .25rem; +} + +.addConfigurationAvailableIPs{ + margin-bottom: 0; +} + +.input-feedback{ + display: none; +} + +#addConfigurationModal label{ + display: flex; + width: 100%; + align-items: center; +} + +#addConfigurationModal label a{ + margin-left: auto !important; +} + +#reGeneratePrivateKey{ + border-top-right-radius: 10px; + border-bottom-right-radius: 10px; +} + +.addConfigurationToggleStatus.waiting{ + opacity: 0.5; +} + +/*.conf_card .card-body .row .card-col{*/ +/* margin-bottom: 0.5rem;*/ +/*}*/ + +.peerDataUsageChartContainer{ + min-height: 50vh; + width: 100%; +} + +.peerDataUsageChartControl{ + display: block !important; + margin: 0; +} + +.peerDataUsageChartControl .switchUnit{ + width: 33.3%; +} + +.peerDataUsageChartControl .switchTimePeriod{ + width: 25%; +} + +@media (min-width: 1200px){ + #peerDataUsage .modal-xl { + max-width: 95vw; + } +} + +.bottom{ + display: none; +} + + +@media (max-width: 768px){ + .bottom{ + display: block; + } + + .btn-manage-group{ + bottom: calc( 3rem + 40px + env(safe-area-inset-bottom, 5px)); + } + + main{ + padding-bottom: calc(1rem + env(safe-area-inset-bottom)); + } +} + + +.bottomNavContainer{ + display: flex; + color: #333; + padding-bottom: env(safe-area-inset-bottom, 5px); + box-shadow: inset 0 1px 0 rgb(0 0 0 / 10%); +} + +.bottomNavButton{ + width: 25vw; + display: flex; + flex-direction: column; + align-items: center; + margin: 0.7rem 0; + color: rgba(51, 51, 51, 0.5); + cursor: pointer; + transition: all ease-in 0.2s; +} + +.bottomNavButton.active{ + color: #333; +} + +.bottomNavButton i{ + font-size: 1.2rem; +} + +.bottomNavButton .subNav{ + width: 100vw; + position: absolute; + z-index: 10000; + bottom: 0; + left: 0; + background-color: #272b30; + display: none; + animation-duration: 400ms; + padding-bottom: env(safe-area-inset-bottom, 5px); +} + +.bottomNavButton .subNav.active{ + display: block; +} + + +.bottomNavButton .subNav .nav .nav-item .nav-link{ + padding: 0.7rem 1rem; +} + +.bottomNavWrapper{ + height: 100%; + width: 100%; + background-color: #000000a1; + position: fixed; + z-index: 1030; + display: none; + left: 0; +} + +.bottomNavWrapper.active{ + display: block; +} + +.sb-update-url .dot-running{ + transform: translateX(10px); +} + +.list-group-item{ + transition: all 0.1s ease-in; +} + +.theme-switch-btn{ + width: 100%; +} + +.fade-enter-active, +.fade-leave-active { + transition: all 0.5s cubic-bezier(0.42, 0, 0.22, 1.0); +} + +.fade-enter-from, +.fade-leave-to { + transform: translateY(40px); + opacity: 0; +} + +.fade2-enter-active, +.fade2-leave-active { + transition: all 0.4s cubic-bezier(0.82, 0.58, 0.17, 1); +} + +.fade2-enter-from{ + transform: translateY(30px); + opacity: 0; +} + +.fade2-leave-to { + transform: translateY(-30px); + filter: blur(3px); + opacity: 0; +} + +.login-container-fluid{ + height: calc(100% - 50px); +} + +@media screen and (min-width: 576px) { + .login-container-fluid{ + height: 100%; + } +} + +.totp{ + font-family: var(--bs-font-monospace); +} + +.message-move, /* apply transition to moving elements */ +.message-enter-active, +.message-leave-active { + transition: all 0.5s cubic-bezier(0.82, 0.58, 0.17, 1); +} + +.message-enter-from, +.message-leave-to { + filter: blur(2px); + opacity: 0; +} + +.message-enter-from{ + transform: translateY(-30px); +} + +.message-leave-to{ + transform: translateY(30px); +} + + +/* ensure leaving items are taken out of layout flow so that moving + animations can be calculated correctly. */ +.message-leave-active { + position: absolute; +} + +.fade3-enter-active, +.fade3-leave-active { + transition: all 0.15s ease-in-out; +} + +.fade3-enter-from{ + transform: scale(1); + opacity: 0; +} + +.fade3-leave-to { + transform: scale(0.8); + opacity: 0; +} + +.list-move, /* apply transition to moving elements */ +.list-enter-active, +.list-leave-active { + transition: all 0.5s ease-in-out; +} + +/*.list-leave-active{*/ +/* position: absolute !important;*/ +/*}*/ + +.list-enter-from, +.list-leave-to { + opacity: 0; + transform: scale(1.1); +} + +/* ensure leaving items are taken out of layout flow so that moving + animations can be calculated correctly. */ +.list-leave-active { + position: absolute; +} + +.peerSettingContainer { + background-color: #00000060; + z-index: 9999; + backdrop-filter: blur(1px); + -webkit-backdrop-filter: blur(1px); +} + +.dashboardModal{ + min-height: calc(100% - 1.75rem * 2); + width: 700px +} + +.dashboardModal > .card{ + margin: 1.75rem; +} + +.zoom-enter-active, +.zoom-leave-active, .zoomReversed-enter-active, +.zoomReversed-leave-active { + transition: all 0.3s cubic-bezier(0.82, 0.58, 0.17, 1); +} + +.zoom-enter-from, +.zoom-leave-to { + transform: scale(1.1); + filter: blur(3px); + opacity: 0; +} + +.zoomReversed-enter-from, +.zoomReversed-leave-to { + transform: scale(0.9); + filter: blur(3px); + opacity: 0; +} + +.messageCentre{ + z-index: 9999; + top: 1rem; + right: 1rem; +} + +@media screen and (max-width: 768px) { + .messageCentre{ + width: calc(100% - 2rem); + } +} + + +.slide-move, /* apply transition to moving elements */ +.slide-enter-active, +.slide-leave-active { + transition: all 0.4s cubic-bezier(0.82, 0.58, 0.17, 1); +} + +.slide-leave-active{ + position: absolute; + width: 100%; +} +.slide-enter-from{ + opacity: 0; + transform: translateX(-50px) !important; +} + +.slide-leave-to { + opacity: 0; + transform: translateX(50px) !important; +} + + + +@property --bgdegree{ + syntax: ''; + initial-value: 234deg; + inherits: false; +} + +.login-container-fluid{ + background: linear-gradient(var(--bgdegree), #0035551a var(--distance2), #400b0b1a 100%); + animation: login 15s ease-in-out infinite; +} + +.login-container-fluid[data-bs-theme="dark"]{ + background: linear-gradient(var(--bgdegree), #003555 var(--distance2), #400b0b 100%); + animation: login 15s ease-in-out infinite; +} + +@keyframes login { + 0%{ + --bgdegree: 234deg; + } + 100%{ + --bgdegree: 594deg; + } +} + +.loadingBar{ + background: linear-gradient(var(--degree), var(--brandColor1) var(--distance2), var(--brandColor2) 100%); +} + +.loadingBar.loading{ + animation: loading cubic-bezier(0.82, 0.58, 0.17, 1) 0.2s forwards; +} +.loadingBar.loadingDone{ + animation: loadingDone cubic-bezier(0.82, 0.58, 0.17, 1) 0.5s forwards; +} + +@keyframes loading { + from{ + opacity: 0; + width: 0%; + } + to{ + opacity: 1; + width: 20%; + } +} + +@keyframes loadingDone { + from{ + opacity: 1; + width: 20%; + } + to{ + opacity: 0; + width: 100%; + } +} + +@media screen and (max-width: 576px) { + .dashboardModal{ + width: 100% !important; + } + .dashboardModal > .card{ + margin: 0.5rem !important; + } +} + +samp{ + word-wrap: anywhere; +} + +.amneziawgBg{ + background: rgb(145,199,193); + background: linear-gradient(90deg, rgba(145,199,193,1) 0%, rgba(107,95,161,1) 50%, rgba(227,142,65,1) 100%); +} + +.wireguardBg{ + background: rgb(125,32,32); + background: linear-gradient(90deg, rgba(125,32,32,1) 0%, rgba(255,56,56,1) 100%); +} + +.slideUp-enter-active, +.slideUp-leave-active{ + transition: all 0.5s cubic-bezier(0.82, 0.58, 0.17, 1); +} + +.slideUp-enter-from, +.slideUp-leave-to { + transform: translateY(100%); + filter: blur(3px); +} + + +.peerList-move, +.peerList-enter-active, +.peerList-leave-active{ + transition: all 0.5s cubic-bezier(0.82, 0.58, 0.17, 1); +} + +.peerList-enter-from{ + transform: translateY(100%); + opacity: 0; +} + +.peerList-leave-to{ + transform: scale(0.8); + opacity: 0; +} + +.peerList-leave-active { + position: absolute; +} + +.agent-message-move, /* apply transition to moving elements */ +.agent-message-enter-active, +.agent-message-leave-active { + transition: all 0.5s cubic-bezier(0.82, 0.58, 0.17, 1); +} +.agent-message-enter-from, +.agent-message-leave-to { + opacity: 0; + filter: blur(8px); + transform: translateY(30px); +} +.agent-message-leave-active { + position: absolute; +} + +.slide-fade-leave-active, .slide-fade-enter-active{ + transition: all 0.2s cubic-bezier(0.82, 0.58, 0.17, 1.3); +} + +.slide-fade-enter-from, +.slide-fade-leave-to { + transform: translateY(20px); + opacity: 0; + filter: blur(3px); +} + +[data-bs-theme="dark"] #map{ + filter: grayscale(80%) invert(100%) +} \ No newline at end of file diff --git a/src/static/app/src/main.js b/src/static/app/src/main.js new file mode 100644 index 0000000..4f5082d --- /dev/null +++ b/src/static/app/src/main.js @@ -0,0 +1,24 @@ +import './css/dashboard.css' +import 'bootstrap/dist/css/bootstrap.css' +import 'bootstrap/dist/js/bootstrap.js' +import 'bootstrap-icons/font/bootstrap-icons.css' +import 'animate.css/animate.css' +import '@vuepic/vue-datepicker/dist/main.css' +import {createApp, markRaw} from 'vue' +import { createPinia } from 'pinia' +import App from './App.vue' +import router from './router/router.js' +import piniaPluginPersistedstate from 'pinia-plugin-persistedstate' + +const app = createApp(App) + +app.use(router) +const pinia = createPinia(); +pinia.use(piniaPluginPersistedstate) +pinia.use(({ store }) => { + store.$router = markRaw(router) +}) + + +app.use(pinia) +app.mount('#app') \ No newline at end of file diff --git a/src/static/app/src/models/WireguardConfigurations.js b/src/static/app/src/models/WireguardConfigurations.js new file mode 100644 index 0000000..43d0fa5 --- /dev/null +++ b/src/static/app/src/models/WireguardConfigurations.js @@ -0,0 +1,18 @@ +import {fetchGet} from "@/utilities/fetch.js"; + +export class WireguardConfigurations{ + Configurations = undefined; + constructor() { + this.Configurations = undefined + } + async initialization(){ + await this.getConfigurations() + } + + + async getConfigurations(){ + await fetchGet("/api/getWireguardConfigurations", {}, (res) => { + if (res.status) this.Configurations = res.data + }); + } +} \ No newline at end of file diff --git a/src/static/app/src/router/router.js b/src/static/app/src/router/router.js new file mode 100644 index 0000000..ce272b3 --- /dev/null +++ b/src/static/app/src/router/router.js @@ -0,0 +1,233 @@ +import { createRouter, createWebHashHistory } from 'vue-router' +import {fetchGet} from "@/utilities/fetch.js"; +import {WireguardConfigurationsStore} from "@/stores/WireguardConfigurationsStore.js"; +import {DashboardConfigurationStore} from "@/stores/DashboardConfigurationStore.js"; + +const checkAuth = async () => { + let result = false + await fetchGet("/api/validateAuthentication", {}, (res) => { + result = res.status + }); + return result; +} + +const router = createRouter({ + history: createWebHashHistory(), + scrollBehavior(){ + if (document.querySelector("main") !== null){ + document.querySelector("main").scrollTo({ + top: 0 + }) + } + }, + routes: [ + { + name: "Index", + path: '/', + component: () => import('@/views/index.vue'), + meta: { + requiresAuth: true, + }, + children: [ + { + name: "Configuration List", + path: '', + component: () => import('@/components/configurationList.vue'), + meta: { + title: "WireGuard Configurations" + } + }, + { + name: "Settings", + path: 'settings', + component: () => import('@/views/settings.vue'), + children: [ + { + name: "WGDashboard Settings", + path: "", + component: () => import("@/components/settingsComponent/wgdashboardSettings.vue"), + meta: { + title: "WGDashboard Settings" + } + }, + { + name: "Peers Settings", + path: "peers_settings", + component: () => import("@/components/settingsComponent/peerDefaultSettings.vue"), + meta: { + title: "Peers Default Settings" + } + }, + { + name: "WireGuard Configuration Settings", + path: "wireguard_settings", + component: () => import("@/components/settingsComponent/wireguardConfigurationSettings.vue"), + meta: { + title: "WireGuard Configuration Settings" + } + } + ], + meta: { + title: "Settings" + } + }, + { + path: 'ping', + name: "Ping", + component: () => import('@/views/ping.vue'), + }, + { + path: 'traceroute', + name: "Traceroute", + component: () => import('@/views/traceroute.vue'), + }, + { + name: "New Configuration", + path: 'new_configuration', + component: () => import('@/views/newConfiguration.vue'), + meta: { + title: "New Configuration" + } + }, + { + name: "Restore Configuration", + path: 'restore_configuration', + component: () => import('@/views/restoreConfiguration.vue'), + meta: { + title: "Restore Configuration" + } + }, + { + name: "System Status", + path: 'system_status', + component: () => import("@/views/systemStatus.vue"), + meta: { + title: "System Status" + } + }, + { + name: "Clients", + path: 'clients', + component: () => import("@/views/clients.vue"), + meta: { + title: "Clients" + }, + children: [ + { + name: "Client Viewer", + path: ':id', + component: () => import('@/components/clientComponents/clientViewer.vue'), + meta: { + title: "Clients" + }, + } + ] + }, + { + name: "Webhooks", + path: "webhooks", + component: () => import("@/components/settingsComponent/dashboardWebHooks.vue"), + meta: { + title: "Webhooks" + } + }, + { + name: "Configuration", + path: 'configuration/:id', + component: () => import('@/views/configuration.vue'), + meta: { + title: "Configuration" + }, + children: [ + { + name: "Peers List", + path: 'peers', + component: () => import('@/components/configurationComponents/peerList.vue') + } + ] + }, + + ] + }, + { + path: '/signin', + component: () => import('@/views/signin.vue'), + meta: { + title: "Sign In", + hideTopNav: true + } + }, + { + path: '/welcome', + component: () => import("@/views/setup.vue"), + meta: { + requiresAuth: true, + title: "Welcome to WGDashboard", + hideTopNav: true + }, + }, + { + path: '/2FASetup', + component: () => import("@/components/setupComponent/totp.vue"), + meta: { + requiresAuth: true, + title: "Multi-Factor Authentication Setup", + hideTopNav: true + }, + }, + { + path: '/share', + component: () => import("@/views/share.vue"), + meta: { + title: "Share", + hideTopNav: true + } + } + ] +}); + +router.beforeEach(async (to, from, next) => { + const wireguardConfigurationsStore = WireguardConfigurationsStore(); + const dashboardConfigurationStore = DashboardConfigurationStore(); + + if (to.meta.title){ + document.title = to.meta.title + " | WGDashboard"; + }else if(to.params.id){ + document.title = to.params.id + " | WGDashboard"; + }else{ + document.title = "WGDashboard" + } + dashboardConfigurationStore.ShowNavBar = false; + document.querySelector(".loadingBar").classList.remove("loadingDone") + document.querySelector(".loadingBar").classList.add("loading") + if (to.meta.requiresAuth){ + if (!dashboardConfigurationStore.getActiveCrossServer()){ + if (await checkAuth()){ + await dashboardConfigurationStore.getConfiguration() + if (!wireguardConfigurationsStore.Configurations && to.name !== "Configuration List"){ + await wireguardConfigurationsStore.getConfigurations(); + } + dashboardConfigurationStore.Redirect = undefined; + next() + }else{ + dashboardConfigurationStore.Redirect = to; + next("/signin") + dashboardConfigurationStore.newMessage("WGDashboard", "Sign in session ended, please sign in again", "warning") + } + }else{ + await dashboardConfigurationStore.getConfiguration() + if (!wireguardConfigurationsStore.Configurations && to.name !== "Configuration List"){ + await wireguardConfigurationsStore.getConfigurations(); + } + next() + } + }else { + next() + } +}); + +router.afterEach(() => { + document.querySelector(".loadingBar").classList.remove("loading") + document.querySelector(".loadingBar").classList.add("loadingDone") +}) +export default router \ No newline at end of file diff --git a/src/static/app/src/stores/DashboardClientAssignmentStore.js b/src/static/app/src/stores/DashboardClientAssignmentStore.js new file mode 100644 index 0000000..3af19a4 --- /dev/null +++ b/src/static/app/src/stores/DashboardClientAssignmentStore.js @@ -0,0 +1,98 @@ +import {defineStore} from "pinia"; +import {ref} from "vue"; +import {fetchGet, fetchPost} from "@/utilities/fetch.js"; +import {DashboardConfigurationStore} from "@/stores/DashboardConfigurationStore.js"; + +export const DashboardClientAssignmentStore = + defineStore('DashboardClientAssignmentStore', () => { + const allConfigurationsPeers = ref({}) + const assignments = ref([]) + const clients = ref({}) + const clientsRaw = ref([]) + const unassigning = ref(false) + const assigning = ref("") + const dashboardConfigurationStore = DashboardConfigurationStore() + + const getClients = async () => { + await fetchGet('/api/clients/allClients', {},(res) => { + clients.value = res.data; + }) + } + + const getClientsRaw = async () => { + await fetchGet('/api/clients/allClientsRaw', {},(res) => { + clientsRaw.value = res.data; + console.log(clientsRaw.value) + }) + } + + const getClientById = (ClientID) => { + return Object.values(clients.value).flat().find(x => x.ClientID === ClientID) + } + + const getAssignedClients = async (ConfigurationName, Peer) => { + await fetchGet('/api/clients/assignedClients', { + ConfigurationName: ConfigurationName, + Peer: Peer + }, (res) => { + assignments.value = res.data + }) + } + + const assignClient = async (ConfigurationName, Peer, ClientID, get=true) => { + assigning.value = ClientID; + await fetchPost('/api/clients/assignClient', { + ConfigurationName: ConfigurationName, + Peer: Peer, + ClientID: ClientID + }, async (res) => { + if (res.status){ + dashboardConfigurationStore.newMessage("Server", "Assign successfully!", "success") + if (get) await getAssignedClients(ConfigurationName, Peer) + + }else{ + dashboardConfigurationStore.newMessage("Server", "Assign Failed. Reason: " + res.message, "success") + console.error("Assign Failed. Reason: " + res.message) + } + assigning.value = ""; + }) + } + + const unassignClient = async (ConfigurationName, Peer, AssignmentID) => { + unassigning.value = true; + await fetchPost('/api/clients/unassignClient', { + AssignmentID: AssignmentID + }, async (res) => { + if (res.status){ + dashboardConfigurationStore.newMessage("Server", "Unassign successfully!", "success") + if (ConfigurationName && Peer) await getAssignedClients(ConfigurationName, Peer) + }else{ + dashboardConfigurationStore.newMessage("Server", "Unassign Failed. Reason: " + res.message, "success") + console.error("Unassign Failed. Reason: " + res.message) + } + unassigning.value = false; + }) + } + + const getAllConfigurationsPeers = async () => { + await fetchGet("/api/clients/allConfigurationsPeers", {}, (res) => { + allConfigurationsPeers.value = res.data + }) + } + + return { + assignments, + getAssignedClients, + getClients, + getClientsRaw, + clients, + unassignClient, + assignClient, + getClientById, + unassigning, + assigning, + clientsRaw, + allConfigurationsPeers, + getAllConfigurationsPeers + } +}) \ No newline at end of file diff --git a/src/static/app/src/stores/DashboardConfigurationStore.js b/src/static/app/src/stores/DashboardConfigurationStore.js new file mode 100644 index 0000000..6dacddc --- /dev/null +++ b/src/static/app/src/stores/DashboardConfigurationStore.js @@ -0,0 +1,111 @@ +import {defineStore} from "pinia"; +import {fetchGet} from "@/utilities/fetch.js"; +import {v4} from "uuid"; +import {GetLocale} from "@/utilities/locale.js"; + +export const DashboardConfigurationStore = defineStore('DashboardConfigurationStore', { + state: () => ({ + Redirect: undefined, + Configuration: undefined, + Messages: [], + Peers: { + Selecting: false, + RefreshInterval: undefined + }, + CrossServerConfiguration:{ + Enable: false, + ServerList: {} + }, + SystemStatus: undefined, + ActiveServerConfiguration: undefined, + IsElectronApp: false, + ShowNavBar: false, + Locale: null, + HelpAgent: { + Enable: false + } + }), + actions: { + initCrossServerConfiguration(){ + const currentConfiguration = localStorage.getItem('CrossServerConfiguration'); + if (localStorage.getItem("ActiveCrossServerConfiguration") !== null){ + this.ActiveServerConfiguration = localStorage.getItem("ActiveCrossServerConfiguration"); + } + if (currentConfiguration === null){ + window.localStorage.setItem('CrossServerConfiguration', JSON.stringify(this.CrossServerConfiguration)) + }else{ + this.CrossServerConfiguration = JSON.parse(currentConfiguration) + } + }, + syncCrossServerConfiguration(){ + window.localStorage.setItem('CrossServerConfiguration', JSON.stringify(this.CrossServerConfiguration)) + }, + addCrossServerConfiguration(){ + this.CrossServerConfiguration.ServerList[v4().toString()] = { + host: "", + apiKey: "", + active: false + } + }, + deleteCrossServerConfiguration(key){ + delete this.CrossServerConfiguration.ServerList[key]; + }, + getActiveCrossServer(){ + const key = localStorage.getItem('ActiveCrossServerConfiguration'); + if (key !== null){ + return this.CrossServerConfiguration.ServerList[key] + } + return undefined + }, + async setActiveCrossServer(key){ + this.ActiveServerConfiguration = key; + localStorage.setItem('ActiveCrossServerConfiguration', key) + await fetchGet("/api/locale", {}, (res) => { + this.Locale = res.data + }) + }, + removeActiveCrossServer(){ + this.ActiveServerConfiguration = undefined; + localStorage.removeItem('ActiveCrossServerConfiguration') + }, + async getConfiguration(){ + await fetchGet("/api/getDashboardConfiguration", {}, (res) => { + if (res.status) this.Configuration = res.data + }); + }, + async signOut(){ + await fetchGet("/api/signout", {}, () => { + this.removeActiveCrossServer(); + document.cookie = ''; + this.$router.go('/signin') + }); + }, + newMessage(from, content, type){ + this.Messages.push({ + id: v4(), + from: GetLocale(from), + content: GetLocale(content), + type: type, + show: true + }) + }, + applyLocale(key){ + if (this.Locale === null) + return key + const reg = Object.keys(this.Locale) + const match = reg.filter(x => { + return key.match(new RegExp('^' + x + '$', 'g')) !== null + }) + console.log(match) + if (match.length === 0 || match.length > 1){ + return key + } + return this.Locale[match[0]] + } + }, + persist: { + pick: [ + 'HelpAgent.Enable' + ] + } +}); \ No newline at end of file diff --git a/src/static/app/src/stores/WireguardConfigurationsStore.js b/src/static/app/src/stores/WireguardConfigurationsStore.js new file mode 100644 index 0000000..77b8949 --- /dev/null +++ b/src/static/app/src/stores/WireguardConfigurationsStore.js @@ -0,0 +1,145 @@ +import {defineStore} from "pinia"; +import {fetchGet} from "@/utilities/fetch.js"; +import isCidr from "is-cidr"; +import {GetLocale} from "@/utilities/locale.js"; +import {fromString} from "css-color-converter"; + +export const WireguardConfigurationsStore = defineStore('WireguardConfigurationsStore', { + state: () => ({ + Configurations: [], + ConfigurationLoaded: false, + searchString: "", + ConfigurationListInterval: undefined, + Filter: { + HiddenTags: [], + ShowAllPeersWhenHiddenTags: true + }, + SortOptions: { + Name: GetLocale("Name"), + Status: GetLocale("Status"), + 'DataUsage.Total': GetLocale("Total Usage") + }, + CurrentSort: { + key: "Name", + order: "asc" + }, + CurrentDisplay: "List", + PeerScheduleJobs: { + dropdowns: { + Field: [ + { + display: GetLocale("Total Received"), + value: "total_receive", + unit: "GB", + type: 'number' + }, + { + display: GetLocale("Total Sent"), + value: "total_sent", + unit: "GB", + type: 'number' + }, + { + display: GetLocale("Total Usage"), + value: "total_data", + unit: "GB", + type: 'number' + }, + { + display: GetLocale("Date"), + value: "date", + type: 'date' + } + ], + Operator: [ + // { + // display: "equal", + // value: "eq" + // }, + // { + // display: "not equal", + // value: "neq" + // }, + { + display: GetLocale("larger than"), + value: "lgt" + }, + // { + // display: "less than", + // value: "lst" + // }, + ], + Action: [ + { + display: GetLocale("Restrict Peer"), + value: "restrict" + }, + { + display: GetLocale("Delete Peer"), + value: "delete" + }, + { + display: GetLocale("Reset Total Data Usage"), + value: "reset_total_data_usage" + } + ] + } + } + }), + getters: { + sortConfigurations(){ + return [...this.Configurations].sort((a, b) => { + if (this.CurrentSort.order === 'desc') { + return this.dotNotation(a, this.CurrentSort.key) < this.dotNotation(b, this.CurrentSort.key) ? + 1 : this.dotNotation(a, this.CurrentSort.key) > this.dotNotation(b, this.CurrentSort.key) ? -1 : 0; + } else { + return this.dotNotation(a, this.CurrentSort.key) > this.dotNotation(b, this.CurrentSort.key) ? + 1 : this.dotNotation(a, this.CurrentSort.key) < this.dotNotation(b, this.CurrentSort.key) ? -1 : 0; + } + }) + }, + }, + actions: { + async getConfigurations(){ + await fetchGet("/api/getWireguardConfigurations", {}, (res) => { + if (res.status) { + this.Configurations = res.data + } + this.ConfigurationLoaded = true + }); + }, + colorText(color){ + if (color){ + const cssColor = fromString(color) + if (cssColor) { + const rgb = cssColor.toRgbaArray() + return +((rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 255000).toFixed(2) > 0.5 ? "#000":"#fff" + } + } + return "#ffffff" + }, + dotNotation(object, dotNotation){ + let result = dotNotation.split('.').reduce((o, key) => o && o[key], object) + if (typeof result === "string"){ + return result.toLowerCase() + } + return result + }, + regexCheckIP(ip){ + let regex = /((^\s*((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))\s*$)|(^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$))/; + return regex.test(ip) + }, + checkCIDR(ip){ + return isCidr(ip) !== 0 + }, + checkWGKeyLength(key){ + const reg = /^[A-Za-z0-9+/]{43}=?=?$/; + return reg.test(key) + } + }, + persist: { + pick: [ + "CurrentSort", "CurrentDisplay", "Filter.ShowAllPeersWhenHiddenTags" + ] + } +}); \ No newline at end of file diff --git a/src/static/app/src/utilities/cookie.js b/src/static/app/src/utilities/cookie.js new file mode 100644 index 0000000..03657e5 --- /dev/null +++ b/src/static/app/src/utilities/cookie.js @@ -0,0 +1,9 @@ +export const cookie = { + + //https://stackoverflow.com/a/15724300 + getCookie(name) { + const value = `; ${document.cookie}`; + const parts = value.split(`; ${name}=`); + if (parts.length === 2) return parts.pop().split(';').shift(); + } +} \ No newline at end of file diff --git a/src/static/app/src/utilities/fetch.js b/src/static/app/src/utilities/fetch.js new file mode 100644 index 0000000..51f4e94 --- /dev/null +++ b/src/static/app/src/utilities/fetch.js @@ -0,0 +1,82 @@ +import {DashboardConfigurationStore} from "@/stores/DashboardConfigurationStore.js"; +import router from "@/router/router.js"; +const getHeaders = () => { + let headers = { + "Content-Type": "application/json" + } + const store = DashboardConfigurationStore(); + const crossServer = store.getActiveCrossServer(); + if (crossServer){ + headers['wg-dashboard-apikey'] = crossServer.apiKey + if (crossServer.headers){ + for (let header of Object.values(crossServer.headers)){ + if (header.key && header.value && !Object.keys(headers).includes(header.key)){ + headers[header.key] = header.value + } + } + } + } + + + return headers +} + +export const getUrl = (url) => { + const store = DashboardConfigurationStore(); + const apiKey = store.getActiveCrossServer(); + if (apiKey){ + return `${apiKey.host}${url}` + } + if (import.meta.env.MODE === 'development') { + return url; + } + // const appPrefix = window.APP_PREFIX || ''; + return `./.${url}`; +} + +export const fetchGet = async (url, params=undefined, callback=undefined) => { + const urlSearchParams = new URLSearchParams(params); + await fetch(`${getUrl(url)}?${urlSearchParams.toString()}`, { + headers: getHeaders() + }) + .then((x) => { + const store = DashboardConfigurationStore(); + if (!x.ok){ + if (x.status !== 200){ + if (x.status === 401){ + store.newMessage("WGDashboard", "Sign in session ended, please sign in again", "warning") + } + throw new Error(x.statusText) + } + }else{ + return x.json() + } + }) + .then(x => callback ? callback(x) : undefined).catch(x => { + console.log("Error:", x) + router.push({path: '/signin'}) + }) +} + +export const fetchPost = async (url, body, callback) => { + await fetch(`${getUrl(url)}`, { + headers: getHeaders(), + method: "POST", + body: JSON.stringify(body) + }).then((x) => { + const store = DashboardConfigurationStore(); + if (!x.ok){ + if (x.status !== 200){ + if (x.status === 401){ + store.newMessage("WGDashboard", "Sign in session ended, please sign in again", "warning") + } + throw new Error(x.statusText) + } + }else{ + return x.json() + } + }).then(x => callback ? callback(x) : undefined).catch(x => { + console.log("Error:", x) + router.push({path: '/signin'}) + }) +} \ No newline at end of file diff --git a/src/static/app/src/utilities/locale.js b/src/static/app/src/utilities/locale.js new file mode 100644 index 0000000..fe8b80e --- /dev/null +++ b/src/static/app/src/utilities/locale.js @@ -0,0 +1,14 @@ +import {DashboardConfigurationStore} from "@/stores/DashboardConfigurationStore.js"; +export const GetLocale = (key) => { + const store = DashboardConfigurationStore() + if (store.Locale === null) + return key + const reg = Object.keys(store.Locale) + const match = reg.filter(x => { + return key.match(new RegExp('^' + x + '$', 'gi')) !== null + }) + if (match.length === 0 || match.length > 1 || store.Locale[match[0]].length === 0){ + return key + } + return key.replace(new RegExp(match[0], 'gi'), store.Locale[match[0]]) +} \ No newline at end of file diff --git a/src/static/app/src/utilities/parseConfigurationFile.js b/src/static/app/src/utilities/parseConfigurationFile.js new file mode 100644 index 0000000..cc487b9 --- /dev/null +++ b/src/static/app/src/utilities/parseConfigurationFile.js @@ -0,0 +1,42 @@ +export const parseInterface = (conf) => { + const lineSplit = conf.split("\n"); + const configuration = {}; + for(let line of lineSplit){ + if( line === "[Peer]") break + if (line.length > 0){ + let l = line.replace(" = ", "=") + if (l.indexOf('=') > -1){ + l = [l.slice(0, l.indexOf('=')), l.slice(l.indexOf('=') + 1)] + if (l[0] === "ListenPort"){ + configuration[l[0]] = parseInt(l[1]) + }else{ + configuration[l[0]] = l[1] + } + } + } + } + return configuration +} + +export const parsePeers = (conf) => { + const lineSplit = conf.split("\n"); + const peers = []; + let pCounter = -1; + const firstPeer = lineSplit.indexOf("[Peer]"); + if (firstPeer === -1) return false; + + for (let l = firstPeer; l < lineSplit.length; l++){ + if (lineSplit[l] === "[Peer]"){ + pCounter += 1; + peers.push({}) + peers[pCounter]["name"] = "" + }else{ + let line = lineSplit[l].replace(" = ", "=") + if (line.indexOf('=') > -1){ + line = [line.slice(0, line.indexOf('=')), line.slice(line.indexOf('=') + 1)] + peers[pCounter][line[0]] = line[1] + } + } + } + return peers; +} \ No newline at end of file diff --git a/src/static/app/src/utilities/simple-code-editor/CodeEditor.vue b/src/static/app/src/utilities/simple-code-editor/CodeEditor.vue new file mode 100644 index 0000000..9129b7a --- /dev/null +++ b/src/static/app/src/utilities/simple-code-editor/CodeEditor.vue @@ -0,0 +1,513 @@ + + + + + diff --git a/src/static/app/src/utilities/simple-code-editor/Dropdown.vue b/src/static/app/src/utilities/simple-code-editor/Dropdown.vue new file mode 100644 index 0000000..805a6f0 --- /dev/null +++ b/src/static/app/src/utilities/simple-code-editor/Dropdown.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/src/static/app/src/utilities/simple-code-editor/themes/themes.css b/src/static/app/src/utilities/simple-code-editor/themes/themes.css new file mode 100644 index 0000000..ff5b016 --- /dev/null +++ b/src/static/app/src/utilities/simple-code-editor/themes/themes.css @@ -0,0 +1,144 @@ +@charset "UTF-8"; +[theme=github-dark] { + /*! + Theme: GitHub Dark + Description: Dark theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-dark + Current colors taken from GitHub's CSS + */ +} +[theme=github-dark] pre code.hljs { + display: block; + overflow-x: auto; + padding: 1em; +} +[theme=github-dark] code.hljs { + padding: 3px 5px; +} +[theme=github-dark] .hljs { + color: #c9d1d9; + background: #0d1117; +} +[theme=github-dark] .hljs-doctag, [theme=github-dark] .hljs-keyword, [theme=github-dark] .hljs-meta .hljs-keyword, [theme=github-dark] .hljs-template-tag, [theme=github-dark] .hljs-template-variable, [theme=github-dark] .hljs-type, [theme=github-dark] .hljs-variable.language_ { + color: #ff7b72; +} +[theme=github-dark] .hljs-title, [theme=github-dark] .hljs-title.class_, [theme=github-dark] .hljs-title.class_.inherited__, [theme=github-dark] .hljs-title.function_ { + color: #d2a8ff; +} +[theme=github-dark] .hljs-attr, [theme=github-dark] .hljs-attribute, [theme=github-dark] .hljs-literal, [theme=github-dark] .hljs-meta, [theme=github-dark] .hljs-number, [theme=github-dark] .hljs-operator, [theme=github-dark] .hljs-selector-attr, [theme=github-dark] .hljs-selector-class, [theme=github-dark] .hljs-selector-id, [theme=github-dark] .hljs-variable { + color: #79c0ff; +} +[theme=github-dark] .hljs-meta .hljs-string, [theme=github-dark] .hljs-regexp, [theme=github-dark] .hljs-string { + color: #a5d6ff; +} +[theme=github-dark] .hljs-built_in, [theme=github-dark] .hljs-symbol { + color: #ffa657; +} +[theme=github-dark] .hljs-code, [theme=github-dark] .hljs-comment, [theme=github-dark] .hljs-formula { + color: #8b949e; +} +[theme=github-dark] .hljs-name, [theme=github-dark] .hljs-quote, [theme=github-dark] .hljs-selector-pseudo, [theme=github-dark] .hljs-selector-tag { + color: #7ee787; +} +[theme=github-dark] .hljs-subst { + color: #c9d1d9; +} +[theme=github-dark] .hljs-section { + color: #1f6feb; + font-weight: 700; +} +[theme=github-dark] .hljs-bullet { + color: #f2cc60; +} +[theme=github-dark] .hljs-emphasis { + color: #c9d1d9; + font-style: italic; +} +[theme=github-dark] .hljs-strong { + color: #c9d1d9; + font-weight: 700; +} +[theme=github-dark] .hljs-addition { + color: #aff5b4; + background-color: #033a16; +} +[theme=github-dark] .hljs-deletion { + color: #ffdcd7; + background-color: #67060c; +} + +[theme=github] { + /*! + Theme: GitHub + Description: Light theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-light + Current colors taken from GitHub's CSS + */ +} +[theme=github] pre code.hljs { + display: block; + overflow-x: auto; + padding: 1em; +} +[theme=github] code.hljs { + padding: 3px 5px; +} +[theme=github] .hljs { + color: #24292e; + background: #efefef; +} +[theme=github] .hljs-doctag, [theme=github] .hljs-keyword, [theme=github] .hljs-meta .hljs-keyword, [theme=github] .hljs-template-tag, [theme=github] .hljs-template-variable, [theme=github] .hljs-type, [theme=github] .hljs-variable.language_ { + color: #d73a49; +} +[theme=github] .hljs-title, [theme=github] .hljs-title.class_, [theme=github] .hljs-title.class_.inherited__, [theme=github] .hljs-title.function_ { + color: #6f42c1; +} +[theme=github] .hljs-attr, [theme=github] .hljs-attribute, [theme=github] .hljs-literal, [theme=github] .hljs-meta, [theme=github] .hljs-number, [theme=github] .hljs-operator, [theme=github] .hljs-selector-attr, [theme=github] .hljs-selector-class, [theme=github] .hljs-selector-id, [theme=github] .hljs-variable { + color: #005cc5; +} +[theme=github] .hljs-meta .hljs-string, [theme=github] .hljs-regexp, [theme=github] .hljs-string { + color: #032f62; +} +[theme=github] .hljs-built_in, [theme=github] .hljs-symbol { + color: #e36209; +} +[theme=github] .hljs-code, [theme=github] .hljs-comment, [theme=github] .hljs-formula { + color: #6a737d; +} +[theme=github] .hljs-name, [theme=github] .hljs-quote, [theme=github] .hljs-selector-pseudo, [theme=github] .hljs-selector-tag { + color: #22863a; +} +[theme=github] .hljs-subst { + color: #24292e; +} +[theme=github] .hljs-section { + color: #005cc5; + font-weight: 700; +} +[theme=github] .hljs-bullet { + color: #735c0f; +} +[theme=github] .hljs-emphasis { + color: #24292e; + font-style: italic; +} +[theme=github] .hljs-strong { + color: #24292e; + font-weight: 700; +} +[theme=github] .hljs-addition { + color: #22863a; + background-color: #f0fff4; +} +[theme=github] .hljs-deletion { + color: #b31d28; + background-color: #ffeef0; +} \ No newline at end of file diff --git a/src/static/app/src/utilities/wireguard.js b/src/static/app/src/utilities/wireguard.js new file mode 100644 index 0000000..ab11a5b --- /dev/null +++ b/src/static/app/src/utilities/wireguard.js @@ -0,0 +1,313 @@ +/*! SPDX-License-Identifier: GPL-2.0 + * + * Copyright (C) 2015-2020 Jason A. Donenfeld . All Rights Reserved. + */ + +(function() { + function gf(init) { + var r = new Float64Array(16); + if (init) { + for (var i = 0; i < init.length; ++i) + r[i] = init[i]; + } + return r; + } + + function pack(o, n) { + var b, m = gf(), t = gf(); + for (var i = 0; i < 16; ++i) + t[i] = n[i]; + carry(t); + carry(t); + carry(t); + for (var j = 0; j < 2; ++j) { + m[0] = t[0] - 0xffed; + for (var i = 1; i < 15; ++i) { + m[i] = t[i] - 0xffff - ((m[i - 1] >> 16) & 1); + m[i - 1] &= 0xffff; + } + m[15] = t[15] - 0x7fff - ((m[14] >> 16) & 1); + b = (m[15] >> 16) & 1; + m[14] &= 0xffff; + cswap(t, m, 1 - b); + } + for (var i = 0; i < 16; ++i) { + o[2 * i] = t[i] & 0xff; + o[2 * i + 1] = t[i] >> 8; + } + } + + function carry(o) { + var c; + for (var i = 0; i < 16; ++i) { + o[(i + 1) % 16] += (i < 15 ? 1 : 38) * Math.floor(o[i] / 65536); + o[i] &= 0xffff; + } + } + + function cswap(p, q, b) { + var t, c = ~(b - 1); + for (var i = 0; i < 16; ++i) { + t = c & (p[i] ^ q[i]); + p[i] ^= t; + q[i] ^= t; + } + } + + function add(o, a, b) { + for (var i = 0; i < 16; ++i) + o[i] = (a[i] + b[i]) | 0; + } + + function subtract(o, a, b) { + for (var i = 0; i < 16; ++i) + o[i] = (a[i] - b[i]) | 0; + } + + function multmod(o, a, b) { + var t = new Float64Array(31); + for (var i = 0; i < 16; ++i) { + for (var j = 0; j < 16; ++j) + t[i + j] += a[i] * b[j]; + } + for (var i = 0; i < 15; ++i) + t[i] += 38 * t[i + 16]; + for (var i = 0; i < 16; ++i) + o[i] = t[i]; + carry(o); + carry(o); + } + + function invert(o, i) { + var c = gf(); + for (var a = 0; a < 16; ++a) + c[a] = i[a]; + for (var a = 253; a >= 0; --a) { + multmod(c, c, c); + if (a !== 2 && a !== 4) + multmod(c, c, i); + } + for (var a = 0; a < 16; ++a) + o[a] = c[a]; + } + + function clamp(z) { + z[31] = (z[31] & 127) | 64; + z[0] &= 248; + } + + function generatePublicKey(privateKey) { + var r, z = new Uint8Array(32); + var a = gf([1]), + b = gf([9]), + c = gf(), + d = gf([1]), + e = gf(), + f = gf(), + _121665 = gf([0xdb41, 1]), + _9 = gf([9]); + for (var i = 0; i < 32; ++i) + z[i] = privateKey[i]; + clamp(z); + for (var i = 254; i >= 0; --i) { + r = (z[i >>> 3] >>> (i & 7)) & 1; + cswap(a, b, r); + cswap(c, d, r); + add(e, a, c); + subtract(a, a, c); + add(c, b, d); + subtract(b, b, d); + multmod(d, e, e); + multmod(f, a, a); + multmod(a, c, a); + multmod(c, b, e); + add(e, a, c); + subtract(a, a, c); + multmod(b, a, a); + subtract(c, d, f); + multmod(a, c, _121665); + add(a, a, d); + multmod(c, c, a); + multmod(a, d, f); + multmod(d, b, _9); + multmod(b, e, e); + cswap(a, b, r); + cswap(c, d, r); + } + invert(c, c); + multmod(a, a, c); + pack(z, a); + return z; + } + + function generatePresharedKey() { + var privateKey = new Uint8Array(32); + window.crypto.getRandomValues(privateKey); + return privateKey; + } + + function generatePrivateKey() { + var privateKey = generatePresharedKey(); + clamp(privateKey); + return privateKey; + } + + function encodeBase64(dest, src) { + var input = Uint8Array.from([(src[0] >> 2) & 63, ((src[0] << 4) | (src[1] >> 4)) & 63, ((src[1] << 2) | (src[2] >> 6)) & 63, src[2] & 63]); + for (var i = 0; i < 4; ++i) + dest[i] = input[i] + 65 + + (((25 - input[i]) >> 8) & 6) - + (((51 - input[i]) >> 8) & 75) - + (((61 - input[i]) >> 8) & 15) + + (((62 - input[i]) >> 8) & 3); + } + + function keyToBase64(key) { + var i, base64 = new Uint8Array(44); + for (i = 0; i < 32 / 3; ++i) + encodeBase64(base64.subarray(i * 4), key.subarray(i * 3)); + encodeBase64(base64.subarray(i * 4), Uint8Array.from([key[i * 3 + 0], key[i * 3 + 1], 0])); + base64[43] = 61; + return String.fromCharCode.apply(null, base64); + } + + function base64ToKey(base64) { + let binary_string = window.atob(base64); + let len = binary_string.length; + let bytes = new Uint8Array(len); + for (let i = 0; i < len; i++) { + bytes[i] = binary_string.charCodeAt(i); + } + let uint8 = new Uint8Array(bytes.buffer); + return uint8; + } + + function putU32(b, n) + { + b.push(n & 0xff, (n >>> 8) & 0xff, (n >>> 16) & 0xff, (n >>> 24) & 0xff); + } + + function putU16(b, n) + { + b.push(n & 0xff, (n >>> 8) & 0xff); + } + + function putBytes(b, a) + { + for (var i = 0; i < a.length; ++i) + b.push(a[i] & 0xff); + } + + function encodeString(s) + { + var utf8 = unescape(encodeURIComponent(s)); + var b = new Uint8Array(utf8.length); + for (var i = 0; i < utf8.length; ++i) + b[i] = utf8.charCodeAt(i); + return b; + } + + function crc32(b) + { + if (!crc32.table) { + crc32.table = []; + for (var c = 0, n = 0; n < 256; c = ++n) { + for (var k = 0; k < 8; ++k) + c = ((c & 1) ? (0xedb88320 ^ (c >>> 1)) : (c >>> 1)); + crc32.table[n] = c; + } + } + var crc = -1; + for (var i = 0; i < b.length; ++i) + crc = (crc >>> 8) ^ crc32.table[(crc ^ b[i]) & 0xff]; + return (crc ^ (-1)) >>> 0; + } + + function createZipFile(files) + { + var b = []; + var cd = []; + var offset = 0; + + for (var i = 0; i < files.length; ++i) { + var name = encodeString(files[i].fileName); + var contents = encodeString(files[i].file); + var crc = crc32(contents); + + putU32(b, 0x04034b50); /* signature */ + putU16(b, 20); /* version needed */ + putU16(b, 0); /* flags */ + putU16(b, 0); /* compression method */ + putU16(b, 0); /* mtime */ + putU16(b, 0); /* mdate */ + putU32(b, crc); /* crc32 */ + putU32(b, contents.length); /* compressed size */ + putU32(b, contents.length); /* uncompressed size */ + putU16(b, name.length); /* file name length */ + putU16(b, 0); /* extra field length */ + putBytes(b, name); + putBytes(b, contents); + + putU32(cd, 0x02014b50); /* signature */ + putU16(cd, 0); /* version made */ + putU16(cd, 20); /* version needed */ + putU16(cd, 0); /* flags */ + putU16(cd, 0); /* compression method */ + putU16(cd, 0); /* mtime */ + putU16(cd, 0); /* mdate */ + putU32(cd, crc); /* crc32 */ + putU32(cd, contents.length); /* compressed size */ + putU32(cd, contents.length); /* uncompressed size */ + putU16(cd, name.length); /* file name length */ + putU16(cd, 0); /* extra field length */ + putU16(cd, 0); /* file comment length */ + putU16(cd, 0); /* disk number start */ + putU16(cd, 0); /* internal file attributes */ + putU32(cd, 32); /* external file attributes - 'archive' bit set (32) */ + putU32(cd, offset); /* relative offset of local header */ + putBytes(cd, name); /* file name */ + + offset += 30 + contents.length + name.length + } + putBytes(b, cd); /* central directory */ + putU32(b, 0x06054b50); /* end of central directory signature */ + putU16(b, 0); /* number of this disk */ + putU16(b, 0); /* number of disk with central directory start */ + putU16(b, files.length); /* number of entries on disk */ + putU16(b, files.length); /* number of entries */ + putU32(b, cd.length); /* length of central directory */ + putU32(b, offset); /* offset to start of central directory */ + putU16(b, 0); /* zip comment size */ + return Uint8Array.from(b); + } + + window.wireguard = { + generateKeypair: function() { + var privateKey = generatePrivateKey(); + var publicKey = generatePublicKey(privateKey); + var presharedKey = generatePresharedKey(); + return { + publicKey: keyToBase64(publicKey), + privateKey: keyToBase64(privateKey), + presharedKey: keyToBase64(presharedKey) + }; + }, + generatePublicKey: function (privateKey){ + privateKey = base64ToKey(privateKey); + return keyToBase64(generatePublicKey(privateKey)); + }, + + generateZipFiles: function(res, zipFileName){ + var files = res.data; + var zipFile = createZipFile(files); + var blob = new Blob([zipFile], { type: "application/zip" }); + var a = document.createElement("a"); + a.download = zipFileName; + a.href = URL.createObjectURL(blob); + a.style.display = "none"; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + } + }; +})(); diff --git a/src/static/app/src/views/clients.vue b/src/static/app/src/views/clients.vue new file mode 100644 index 0000000..6c15289 --- /dev/null +++ b/src/static/app/src/views/clients.vue @@ -0,0 +1,100 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/views/configuration.vue b/src/static/app/src/views/configuration.vue new file mode 100644 index 0000000..3b5764b --- /dev/null +++ b/src/static/app/src/views/configuration.vue @@ -0,0 +1,21 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/views/index.vue b/src/static/app/src/views/index.vue new file mode 100644 index 0000000..8bff1b7 --- /dev/null +++ b/src/static/app/src/views/index.vue @@ -0,0 +1,56 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/views/newConfiguration.vue b/src/static/app/src/views/newConfiguration.vue new file mode 100644 index 0000000..59ad796 --- /dev/null +++ b/src/static/app/src/views/newConfiguration.vue @@ -0,0 +1,427 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/views/ping.vue b/src/static/app/src/views/ping.vue new file mode 100644 index 0000000..bdecbf7 --- /dev/null +++ b/src/static/app/src/views/ping.vue @@ -0,0 +1,264 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/views/restoreConfiguration.vue b/src/static/app/src/views/restoreConfiguration.vue new file mode 100644 index 0000000..760aba2 --- /dev/null +++ b/src/static/app/src/views/restoreConfiguration.vue @@ -0,0 +1,147 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/views/settings.vue b/src/static/app/src/views/settings.vue new file mode 100644 index 0000000..b8f2711 --- /dev/null +++ b/src/static/app/src/views/settings.vue @@ -0,0 +1,85 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/views/setup.vue b/src/static/app/src/views/setup.vue new file mode 100644 index 0000000..0556d31 --- /dev/null +++ b/src/static/app/src/views/setup.vue @@ -0,0 +1,145 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/views/share.vue b/src/static/app/src/views/share.vue new file mode 100644 index 0000000..b0087f3 --- /dev/null +++ b/src/static/app/src/views/share.vue @@ -0,0 +1,118 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/views/signin.vue b/src/static/app/src/views/signin.vue new file mode 100644 index 0000000..30b7b1d --- /dev/null +++ b/src/static/app/src/views/signin.vue @@ -0,0 +1,226 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/views/systemStatus.vue b/src/static/app/src/views/systemStatus.vue new file mode 100644 index 0000000..4972782 --- /dev/null +++ b/src/static/app/src/views/systemStatus.vue @@ -0,0 +1,405 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/src/views/traceroute.vue b/src/static/app/src/views/traceroute.vue new file mode 100644 index 0000000..66ec2d3 --- /dev/null +++ b/src/static/app/src/views/traceroute.vue @@ -0,0 +1,194 @@ + + + + + \ No newline at end of file diff --git a/src/static/app/vite.config.js b/src/static/app/vite.config.js new file mode 100644 index 0000000..c5a8e88 --- /dev/null +++ b/src/static/app/vite.config.js @@ -0,0 +1,63 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import {proxy} from "./proxy.js"; +import vue from '@vitejs/plugin-vue' + +export default defineConfig(({mode}) => { + if (mode === 'electron'){ + return { + emptyOutDir: false, + base: './', + plugins: [ + vue(), + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + } + }, + build: { + target: "es2022", + outDir: '../../../../WGDashboard-Desktop', + rollupOptions: { + output: { + entryFileNames: `assets/[name]-[hash].js`, + chunkFileNames: `assets/[name]-[hash].js`, + assetFileNames: `assets/[name]-[hash].[ext]` + } + } + } + } + } + + return { + base: "./", + plugins: [ + vue(), + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + } + }, + server:{ + proxy: { + '/api': proxy, + '/fileDownload':proxy + }, + host: '0.0.0.0' + }, + build: { + target: "es2022", + outDir: '../dist/WGDashboardAdmin', + rollupOptions: { + output: { + entryFileNames: `assets/[name]-[hash].js`, + chunkFileNames: `assets/[name]-[hash].js`, + assetFileNames: `assets/[name]-[hash].[ext]` + } + } + } + } +}) diff --git a/src/static/client/.gitignore b/src/static/client/.gitignore new file mode 100644 index 0000000..0e571ec --- /dev/null +++ b/src/static/client/.gitignore @@ -0,0 +1,31 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo + +proxy.js \ No newline at end of file diff --git a/src/static/client/README.md b/src/static/client/README.md new file mode 100644 index 0000000..cfc7895 --- /dev/null +++ b/src/static/client/README.md @@ -0,0 +1,29 @@ +# client + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur). + +## Customize configuration + +See [Vite Configuration Reference](https://vite.dev/config/). + +## Project Setup + +```sh +npm install +``` + +### Compile and Hot-Reload for Development + +```sh +npm run dev +``` + +### Compile and Minify for Production + +```sh +npm run build +``` diff --git a/src/static/client/index.html b/src/static/client/index.html new file mode 100644 index 0000000..b5946ee --- /dev/null +++ b/src/static/client/index.html @@ -0,0 +1,50 @@ + + + + + + + WGDashboard Client + + + + + +
+
+
+ WGDashboard Client +
+
+
+ + + diff --git a/src/static/client/jsconfig.json b/src/static/client/jsconfig.json new file mode 100644 index 0000000..5a1f2d2 --- /dev/null +++ b/src/static/client/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + }, + "exclude": ["node_modules", "dist"] +} diff --git a/src/static/client/package-lock.json b/src/static/client/package-lock.json new file mode 100644 index 0000000..6465055 --- /dev/null +++ b/src/static/client/package-lock.json @@ -0,0 +1,3518 @@ +{ + "name": "client", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "client", + "version": "0.0.0", + "dependencies": { + "axios": "^1.9.0", + "bootstrap": "^5.3.6", + "bootstrap-icons": "^1.13.1", + "dayjs": "^1.11.13", + "oidc-client-ts": "^3.2.1", + "pinia": "^3.0.2", + "qrcode": "^1.5.4", + "uuid": "^11.1.0", + "vue": "^3.5.13", + "vue-router": "^4.5.1" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.2.3", + "vite": "^6.2.4", + "vite-plugin-vue-devtools": "^7.7.2" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@antfu/utils": { + "version": "0.7.10", + "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.10.tgz", + "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.27.3", + "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.27.3.tgz", + "integrity": "sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.27.4", + "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.27.4.tgz", + "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.4", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.27.4", + "@babel/types": "^7.27.3", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.3", + "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.27.3.tgz", + "integrity": "sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.3", + "@babel/types": "^7.27.3", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", + "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.27.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.3", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.4", + "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.27.4.tgz", + "integrity": "sha512-Y+bO6U+I7ZKaM5G5rDUZiYfUvQPUibYmAFe7EnKdnKBbVXDZxvp+MWOH5gYciY0EPk4EScsuFMQBbEfpdRKSCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.4", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.27.4.tgz", + "integrity": "sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.27.1.tgz", + "integrity": "sha512-DTxe4LBPrtFdsWzgpmbBKevg3e9PBy+dXRt19kSbucbZvL2uqtdqwwpluL1jfxYE0wIDTFp1nTy/q6gNLsxXrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-decorators": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz", + "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.1.tgz", + "integrity": "sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.4", + "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.27.4.tgz", + "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.27.3", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.27.3.tgz", + "integrity": "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, + "license": "MIT" + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmmirror.com/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.41.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz", + "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz", + "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz", + "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.41.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz", + "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz", + "integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.41.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz", + "integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.41.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz", + "integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.41.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz", + "integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz", + "integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.41.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz", + "integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz", + "integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz", + "integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz", + "integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.41.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz", + "integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz", + "integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz", + "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.41.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz", + "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.41.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz", + "integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.41.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz", + "integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.41.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz", + "integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.4.0.tgz", + "integrity": "sha512-mCokbouEQ/ocRce/FpKCRItGo+013tHg7tixg3DUNS+6bmIchPt66012kBMm476vyEIJPafrvOf4E5OYj3shSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.4.0.tgz", + "integrity": "sha512-9zAHmwgMWlaN6qRKdrg1uKsBKHvnUU+Py+MOCTuYZBoZsopa90Di10QRjB+YPnVss0BZbG/H5XFwJY1fTxJWhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.9", + "@babel/types": "^7.26.9", + "@vue/babel-helper-vue-transform-on": "1.4.0", + "@vue/babel-plugin-resolve-type": "1.4.0", + "@vue/shared": "^3.5.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + } + } + }, + "node_modules/@vue/babel-plugin-resolve-type": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.4.0.tgz", + "integrity": "sha512-4xqDRRbQQEWHQyjlYSgZsWj44KfiF6D+ktCuXyZ8EnVDYV3pztmXJDf1HveAjUAXxAnR8daCQT51RneWWxtTyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/parser": "^7.26.9", + "@vue/compiler-sfc": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.16", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.16.tgz", + "integrity": "sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.2", + "@vue/shared": "3.5.16", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.16", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.16.tgz", + "integrity": "sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.16", + "@vue/shared": "3.5.16" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.16", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.16.tgz", + "integrity": "sha512-rQR6VSFNpiinDy/DVUE0vHoIDUF++6p910cgcZoaAUm3POxgNOOdS/xgoll3rNdKYTYPnnbARDCZOyZ+QSe6Pw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.2", + "@vue/compiler-core": "3.5.16", + "@vue/compiler-dom": "3.5.16", + "@vue/compiler-ssr": "3.5.16", + "@vue/shared": "3.5.16", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.17", + "postcss": "^8.5.3", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.16", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.16.tgz", + "integrity": "sha512-d2V7kfxbdsjrDSGlJE7my1ZzCXViEcqN6w14DOsDrUCHEA6vbnVCpRFfrc4ryCP/lCKzX2eS1YtnLE/BuC9f/A==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.16", + "@vue/shared": "3.5.16" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.6", + "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-7.7.6.tgz", + "integrity": "sha512-b2Xx0KvXZObePpXPYHvBRRJLDQn5nhKjXh7vUhMEtWxz1AYNFOVIsh5+HLP8xDGL7sy+Q7hXeUxPHB/KgbtsPw==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.6" + } + }, + "node_modules/@vue/devtools-core": { + "version": "7.7.6", + "resolved": "https://registry.npmmirror.com/@vue/devtools-core/-/devtools-core-7.7.6.tgz", + "integrity": "sha512-ghVX3zjKPtSHu94Xs03giRIeIWlb9M+gvDRVpIZ/cRIxKHdW6HE/sm1PT3rUYS3aV92CazirT93ne+7IOvGUWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.6", + "@vue/devtools-shared": "^7.7.6", + "mitt": "^3.0.1", + "nanoid": "^5.1.0", + "pathe": "^2.0.3", + "vite-hot-client": "^2.0.4" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@vue/devtools-core/node_modules/nanoid": { + "version": "5.1.5", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-5.1.5.tgz", + "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.6", + "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-7.7.6.tgz", + "integrity": "sha512-geu7ds7tem2Y7Wz+WgbnbZ6T5eadOvozHZ23Atk/8tksHMFOFylKi1xgGlQlVn0wlkEf4hu+vd5ctj1G4kFtwA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.6", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.6", + "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-7.7.6.tgz", + "integrity": "sha512-yFEgJZ/WblEsojQQceuyK6FzpFDx4kqrz2ohInxNj5/DnhoX023upTv4OD6lNPLAA5LLkbwPVb10o/7b+Y4FVA==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.16", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.16.tgz", + "integrity": "sha512-FG5Q5ee/kxhIm1p2bykPpPwqiUBV3kFySsHEQha5BJvjXdZTUfmya7wP7zC39dFuZAcf/PD5S4Lni55vGLMhvA==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.16" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.16", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.16.tgz", + "integrity": "sha512-bw5Ykq6+JFHYxrQa7Tjr+VSzw7Dj4ldR/udyBZbq73fCdJmyy5MPIFR9IX/M5Qs+TtTjuyUTCnmK3lWWwpAcFQ==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.16", + "@vue/shared": "3.5.16" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.16", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.16.tgz", + "integrity": "sha512-T1qqYJsG2xMGhImRUV9y/RseB9d0eCYZQ4CWca9ztCuiPj/XWNNN+lkNBuzVbia5z4/cgxdL28NoQCvC0Xcfww==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.16", + "@vue/runtime-core": "3.5.16", + "@vue/shared": "3.5.16", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.16", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.16.tgz", + "integrity": "sha512-BrX0qLiv/WugguGsnQUJiYOE0Fe5mZTwi6b7X/ybGB0vfrPH9z0gD/Y6WOR1sGCgX4gc25L1RYS5eYQKDMoNIg==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.16", + "@vue/shared": "3.5.16" + }, + "peerDependencies": { + "vue": "3.5.16" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.16", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.16.tgz", + "integrity": "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==", + "license": "MIT" + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.9.0.tgz", + "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/birpc": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/birpc/-/birpc-2.3.0.tgz", + "integrity": "sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/bootstrap": { + "version": "5.3.6", + "resolved": "https://registry.npmmirror.com/bootstrap/-/bootstrap-5.3.6.tgz", + "integrity": "sha512-jX0GAcRzvdwISuvArXn3m7KZscWWFAf1MKBcnzaN02qWMb3jpMoUX4/qgeiGzqyIb4ojulRzs89UCUmGcFSzTA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT", + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, + "node_modules/bootstrap-icons": { + "version": "1.13.1", + "resolved": "https://registry.npmmirror.com/bootstrap-icons/-/bootstrap-icons-1.13.1.tgz", + "integrity": "sha512-ijombt4v6bv5CLeXvRWKy7CuM3TRTuPEuGaGKvTV5cz65rQSY8RQ2JcHt6b90cBBAC7s8fsf2EkQDldzCoXUjw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT" + }, + "node_modules/browserslist": { + "version": "4.25.0", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.25.0.tgz", + "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001718", + "electron-to-chromium": "^1.5.160", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001720", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001720.tgz", + "integrity": "sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dijkstrajs": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz", + "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==", + "license": "MIT" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.161", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.161.tgz", + "integrity": "sha512-hwtetwfKNZo/UlwHIVBlKZVdy7o8bIZxxKs0Mv/ROPiQQQmDgdm5a+KvKtBsxM8ZjFzTaCeLoodZ8jiBE3o9rA==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-stack-parser-es": { + "version": "0.1.5", + "resolved": "https://registry.npmmirror.com/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz", + "integrity": "sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.5", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/execa": { + "version": "9.6.0", + "resolved": "https://registry.npmmirror.com/execa/-/execa-9.6.0.tgz", + "integrity": "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fdir": { + "version": "6.4.5", + "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.4.5.tgz", + "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmmirror.com/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/oidc-client-ts": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/oidc-client-ts/-/oidc-client-ts-3.2.1.tgz", + "integrity": "sha512-hS5AJ5s/x4bXhHvNJT1v+GGvzHUwdRWqNQQbSrp10L1IRmzfRGKQ3VWN3dstJb+oF3WtAyKezwD2+dTEIyBiAA==", + "license": "Apache-2.0", + "dependencies": { + "jwt-decode": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/open": { + "version": "10.1.2", + "resolved": "https://registry.npmmirror.com/open/-/open-10.1.2.tgz", + "integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/pinia/-/pinia-3.0.2.tgz", + "integrity": "sha512-sH2JK3wNY809JOeiiURUR0wehJ9/gd9qFN2Y828jCbxEzKEmEt0pzCXwqiSTfuRsK9vQsOflSdnbdBOGrhtn+g==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^7.7.2" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss": { + "version": "8.5.4", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.4.tgz", + "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/pretty-ms": { + "version": "9.2.0", + "resolved": "https://registry.npmmirror.com/pretty-ms/-/pretty-ms-9.2.0.tgz", + "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/qrcode": { + "version": "1.5.4", + "resolved": "https://registry.npmmirror.com/qrcode/-/qrcode-1.5.4.tgz", + "integrity": "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==", + "license": "MIT", + "dependencies": { + "dijkstrajs": "^1.0.1", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "license": "ISC" + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.41.1", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.41.1.tgz", + "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.7" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.41.1", + "@rollup/rollup-android-arm64": "4.41.1", + "@rollup/rollup-darwin-arm64": "4.41.1", + "@rollup/rollup-darwin-x64": "4.41.1", + "@rollup/rollup-freebsd-arm64": "4.41.1", + "@rollup/rollup-freebsd-x64": "4.41.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.41.1", + "@rollup/rollup-linux-arm-musleabihf": "4.41.1", + "@rollup/rollup-linux-arm64-gnu": "4.41.1", + "@rollup/rollup-linux-arm64-musl": "4.41.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.41.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1", + "@rollup/rollup-linux-riscv64-gnu": "4.41.1", + "@rollup/rollup-linux-riscv64-musl": "4.41.1", + "@rollup/rollup-linux-s390x-gnu": "4.41.1", + "@rollup/rollup-linux-x64-gnu": "4.41.1", + "@rollup/rollup-linux-x64-musl": "4.41.1", + "@rollup/rollup-win32-arm64-msvc": "4.41.1", + "@rollup/rollup-win32-ia32-msvc": "4.41.1", + "@rollup/rollup-win32-x64-msvc": "4.41.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sirv": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/sirv/-/sirv-3.0.1.tgz", + "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/vite": { + "version": "6.3.5", + "resolved": "https://registry.npmmirror.com/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-hot-client": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/vite-hot-client/-/vite-hot-client-2.0.4.tgz", + "integrity": "sha512-W9LOGAyGMrbGArYJN4LBCdOC5+Zwh7dHvOHC0KmGKkJhsOzaKbpo/jEjpPKVHIW0/jBWj8RZG0NUxfgA8BxgAg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0" + } + }, + "node_modules/vite-plugin-inspect": { + "version": "0.8.9", + "resolved": "https://registry.npmmirror.com/vite-plugin-inspect/-/vite-plugin-inspect-0.8.9.tgz", + "integrity": "sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@antfu/utils": "^0.7.10", + "@rollup/pluginutils": "^5.1.3", + "debug": "^4.3.7", + "error-stack-parser-es": "^0.1.5", + "fs-extra": "^11.2.0", + "open": "^10.1.0", + "perfect-debounce": "^1.0.0", + "picocolors": "^1.1.1", + "sirv": "^3.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.1" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/vite-plugin-vue-devtools": { + "version": "7.7.6", + "resolved": "https://registry.npmmirror.com/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.7.6.tgz", + "integrity": "sha512-L7nPVM5a7lgit/Z+36iwoqHOaP3wxqVi1UvaDJwGCfblS9Y6vNqf32ILlzJVH9c47aHu90BhDXeZc+rgzHRHcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-core": "^7.7.6", + "@vue/devtools-kit": "^7.7.6", + "@vue/devtools-shared": "^7.7.6", + "execa": "^9.5.2", + "sirv": "^3.0.1", + "vite-plugin-inspect": "0.8.9", + "vite-plugin-vue-inspector": "^5.3.1" + }, + "engines": { + "node": ">=v14.21.3" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0" + } + }, + "node_modules/vite-plugin-vue-inspector": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.3.1.tgz", + "integrity": "sha512-cBk172kZKTdvGpJuzCCLg8lJ909wopwsu3Ve9FsL1XsnLBiRT9U3MePcqrgGHgCX2ZgkqZmAGR8taxw+TV6s7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.23.0", + "@babel/plugin-proposal-decorators": "^7.23.0", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.22.15", + "@vue/babel-plugin-jsx": "^1.1.5", + "@vue/compiler-dom": "^3.3.4", + "kolorist": "^1.8.0", + "magic-string": "^0.30.4" + }, + "peerDependencies": { + "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0" + } + }, + "node_modules/vue": { + "version": "3.5.16", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.16.tgz", + "integrity": "sha512-rjOV2ecxMd5SiAmof2xzh2WxntRcigkX/He4YFJ6WdRvVUrbt6DxC1Iujh10XLl8xCDRDtGKMeO3D+pRQ1PP9w==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.16", + "@vue/compiler-sfc": "3.5.16", + "@vue/runtime-dom": "3.5.16", + "@vue/server-renderer": "3.5.16", + "@vue/shared": "3.5.16" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-router": { + "version": "4.5.1", + "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.1.tgz", + "integrity": "sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-router/node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "license": "ISC" + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "license": "ISC" + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/yoctocolors/-/yoctocolors-2.1.1.tgz", + "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/src/static/client/package.json b/src/static/client/package.json new file mode 100644 index 0000000..0ab1959 --- /dev/null +++ b/src/static/client/package.json @@ -0,0 +1,28 @@ +{ + "name": "client", + "version": "v1.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build --emptyOutDir", + "preview": "vite preview" + }, + "dependencies": { + "axios": "^1.9.0", + "bootstrap": "^5.3.6", + "bootstrap-icons": "^1.13.1", + "dayjs": "^1.11.13", + "oidc-client-ts": "^3.2.1", + "pinia": "^3.0.2", + "qrcode": "^1.5.4", + "uuid": "^11.1.0", + "vue": "^3.5.13", + "vue-router": "^4.5.1" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.2.3", + "vite": "^6.2.4", + "vite-plugin-vue-devtools": "^7.7.2" + } +} diff --git a/src/static/client/public/img/Logo-1-128x128.png b/src/static/client/public/img/Logo-1-128x128.png new file mode 100644 index 0000000..b128f59 Binary files /dev/null and b/src/static/client/public/img/Logo-1-128x128.png differ diff --git a/src/static/client/public/img/Logo-1-256x256.png b/src/static/client/public/img/Logo-1-256x256.png new file mode 100644 index 0000000..df1da30 Binary files /dev/null and b/src/static/client/public/img/Logo-1-256x256.png differ diff --git a/src/static/client/public/img/Logo-1-384x384.png b/src/static/client/public/img/Logo-1-384x384.png new file mode 100644 index 0000000..498cb3f Binary files /dev/null and b/src/static/client/public/img/Logo-1-384x384.png differ diff --git a/src/static/client/public/img/Logo-1-512x512.png b/src/static/client/public/img/Logo-1-512x512.png new file mode 100644 index 0000000..33b27ce Binary files /dev/null and b/src/static/client/public/img/Logo-1-512x512.png differ diff --git a/src/static/client/public/img/Logo-1-Maskable-512x512.png b/src/static/client/public/img/Logo-1-Maskable-512x512.png new file mode 100644 index 0000000..c2add0f Binary files /dev/null and b/src/static/client/public/img/Logo-1-Maskable-512x512.png differ diff --git a/src/static/client/public/img/Logo-1-Rounded-128x128.png b/src/static/client/public/img/Logo-1-Rounded-128x128.png new file mode 100644 index 0000000..90e5bf0 Binary files /dev/null and b/src/static/client/public/img/Logo-1-Rounded-128x128.png differ diff --git a/src/static/client/public/img/Logo-1-Rounded-256x256.png b/src/static/client/public/img/Logo-1-Rounded-256x256.png new file mode 100644 index 0000000..6bf016b Binary files /dev/null and b/src/static/client/public/img/Logo-1-Rounded-256x256.png differ diff --git a/src/static/client/public/img/Logo-1-Rounded-384x384.png b/src/static/client/public/img/Logo-1-Rounded-384x384.png new file mode 100644 index 0000000..dae6f60 Binary files /dev/null and b/src/static/client/public/img/Logo-1-Rounded-384x384.png differ diff --git a/src/static/client/public/img/Logo-1-Rounded-512x512.png b/src/static/client/public/img/Logo-1-Rounded-512x512.png new file mode 100644 index 0000000..d7edf8e Binary files /dev/null and b/src/static/client/public/img/Logo-1-Rounded-512x512.png differ diff --git a/src/static/client/public/img/Logo-2-128x128.png b/src/static/client/public/img/Logo-2-128x128.png new file mode 100644 index 0000000..24594c4 Binary files /dev/null and b/src/static/client/public/img/Logo-2-128x128.png differ diff --git a/src/static/client/public/img/Logo-2-256x256.png b/src/static/client/public/img/Logo-2-256x256.png new file mode 100644 index 0000000..5ccabf8 Binary files /dev/null and b/src/static/client/public/img/Logo-2-256x256.png differ diff --git a/src/static/client/public/img/Logo-2-384x384.png b/src/static/client/public/img/Logo-2-384x384.png new file mode 100644 index 0000000..15df097 Binary files /dev/null and b/src/static/client/public/img/Logo-2-384x384.png differ diff --git a/src/static/client/public/img/Logo-2-512x512.png b/src/static/client/public/img/Logo-2-512x512.png new file mode 100644 index 0000000..e5a8418 Binary files /dev/null and b/src/static/client/public/img/Logo-2-512x512.png differ diff --git a/src/static/client/public/img/Logo-2-Rounded-128x128.png b/src/static/client/public/img/Logo-2-Rounded-128x128.png new file mode 100644 index 0000000..962251a Binary files /dev/null and b/src/static/client/public/img/Logo-2-Rounded-128x128.png differ diff --git a/src/static/client/public/img/Logo-2-Rounded-256x256.png b/src/static/client/public/img/Logo-2-Rounded-256x256.png new file mode 100644 index 0000000..927e5bb Binary files /dev/null and b/src/static/client/public/img/Logo-2-Rounded-256x256.png differ diff --git a/src/static/client/public/img/Logo-2-Rounded-384x384.png b/src/static/client/public/img/Logo-2-Rounded-384x384.png new file mode 100644 index 0000000..a455115 Binary files /dev/null and b/src/static/client/public/img/Logo-2-Rounded-384x384.png differ diff --git a/src/static/client/public/img/Logo-2-Rounded-512x512.png b/src/static/client/public/img/Logo-2-Rounded-512x512.png new file mode 100644 index 0000000..f1e703d Binary files /dev/null and b/src/static/client/public/img/Logo-2-Rounded-512x512.png differ diff --git a/src/static/client/public/img/fabrizio-conti-aExT3y92x5o-unsplash.jpg b/src/static/client/public/img/fabrizio-conti-aExT3y92x5o-unsplash.jpg new file mode 100644 index 0000000..1bfbf6e Binary files /dev/null and b/src/static/client/public/img/fabrizio-conti-aExT3y92x5o-unsplash.jpg differ diff --git a/src/static/client/public/img/lachlan-gowen-0s0WCiys0ZI-unsplash.jpg b/src/static/client/public/img/lachlan-gowen-0s0WCiys0ZI-unsplash.jpg new file mode 100644 index 0000000..e573d2c Binary files /dev/null and b/src/static/client/public/img/lachlan-gowen-0s0WCiys0ZI-unsplash.jpg differ diff --git a/src/static/client/src/App.vue b/src/static/client/src/App.vue new file mode 100644 index 0000000..aa9a772 --- /dev/null +++ b/src/static/client/src/App.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/OFL.txt b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/OFL.txt new file mode 100644 index 0000000..76770dd --- /dev/null +++ b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The Plus Jakarta Sans Project Authors (https://github.com/tokotype/PlusJakartaSans) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/PlusJakartaSans-Italic-VariableFont_wght.ttf b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/PlusJakartaSans-Italic-VariableFont_wght.ttf new file mode 100644 index 0000000..7de3b5b Binary files /dev/null and b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/PlusJakartaSans-Italic-VariableFont_wght.ttf differ diff --git a/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/PlusJakartaSans-VariableFont_wght.ttf b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/PlusJakartaSans-VariableFont_wght.ttf new file mode 100644 index 0000000..bdd4985 Binary files /dev/null and b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/PlusJakartaSans-VariableFont_wght.ttf differ diff --git a/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/README.txt b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/README.txt new file mode 100644 index 0000000..6ac7707 --- /dev/null +++ b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/README.txt @@ -0,0 +1,77 @@ +Plus Jakarta Sans Variable Font +=============================== + +This download contains Plus Jakarta Sans as both variable fonts and static fonts. + +Plus Jakarta Sans is a variable font with this axis: + wght + +This means all the styles are contained in these files: + PlusJakartaSans-VariableFont_wght.ttf + PlusJakartaSans-Italic-VariableFont_wght.ttf + +If your app fully supports variable fonts, you can now pick intermediate styles +that aren’t available as static fonts. Not all apps support variable fonts, and +in those cases you can use the static font files for Plus Jakarta Sans: + static/PlusJakartaSans-ExtraLight.ttf + static/PlusJakartaSans-Light.ttf + static/PlusJakartaSans-Regular.ttf + static/PlusJakartaSans-Medium.ttf + static/PlusJakartaSans-SemiBold.ttf + static/PlusJakartaSans-Bold.ttf + static/PlusJakartaSans-ExtraBold.ttf + static/PlusJakartaSans-ExtraLightItalic.ttf + static/PlusJakartaSans-LightItalic.ttf + static/PlusJakartaSans-Italic.ttf + static/PlusJakartaSans-MediumItalic.ttf + static/PlusJakartaSans-SemiBoldItalic.ttf + static/PlusJakartaSans-BoldItalic.ttf + static/PlusJakartaSans-ExtraBoldItalic.ttf + +Get started +----------- + +1. Install the font files you want to use + +2. Use your app's font picker to view the font family and all the +available styles + +Learn more about variable fonts +------------------------------- + + https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts + https://variablefonts.typenetwork.com + https://medium.com/variable-fonts + +In desktop apps + + https://theblog.adobe.com/can-variable-fonts-illustrator-cc + https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts + +Online + + https://developers.google.com/fonts/docs/getting_started + https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide + https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts + +Installing fonts + + MacOS: https://support.apple.com/en-us/HT201749 + Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux + Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows + +Android Apps + + https://developers.google.com/fonts/docs/android + https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts + +License +------- +Please read the full license text (OFL.txt) to understand the permissions, +restrictions and requirements for usage, redistribution, and modification. + +You can use them in your products & projects – print or digital, +commercial or otherwise. + +This isn't legal advice, please consider consulting a lawyer and see the full +license for all details. diff --git a/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Bold.ttf b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Bold.ttf new file mode 100644 index 0000000..386d3a6 Binary files /dev/null and b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Bold.ttf differ diff --git a/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-BoldItalic.ttf b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-BoldItalic.ttf new file mode 100644 index 0000000..20540d3 Binary files /dev/null and b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-BoldItalic.ttf differ diff --git a/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-ExtraBold.ttf b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-ExtraBold.ttf new file mode 100644 index 0000000..a67cafd Binary files /dev/null and b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-ExtraBold.ttf differ diff --git a/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-ExtraBoldItalic.ttf b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-ExtraBoldItalic.ttf new file mode 100644 index 0000000..c38f755 Binary files /dev/null and b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-ExtraBoldItalic.ttf differ diff --git a/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-ExtraLight.ttf b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-ExtraLight.ttf new file mode 100644 index 0000000..bb43929 Binary files /dev/null and b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-ExtraLight.ttf differ diff --git a/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-ExtraLightItalic.ttf b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-ExtraLightItalic.ttf new file mode 100644 index 0000000..15abe5d Binary files /dev/null and b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-ExtraLightItalic.ttf differ diff --git a/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Italic.ttf b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Italic.ttf new file mode 100644 index 0000000..dc955cf Binary files /dev/null and b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Italic.ttf differ diff --git a/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Light.ttf b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Light.ttf new file mode 100644 index 0000000..215db16 Binary files /dev/null and b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Light.ttf differ diff --git a/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-LightItalic.ttf b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-LightItalic.ttf new file mode 100644 index 0000000..ee12a1d Binary files /dev/null and b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-LightItalic.ttf differ diff --git a/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Medium.ttf b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Medium.ttf new file mode 100644 index 0000000..1e58066 Binary files /dev/null and b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Medium.ttf differ diff --git a/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-MediumItalic.ttf b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-MediumItalic.ttf new file mode 100644 index 0000000..d6d28b3 Binary files /dev/null and b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-MediumItalic.ttf differ diff --git a/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Regular.ttf b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Regular.ttf new file mode 100644 index 0000000..1e77059 Binary files /dev/null and b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Regular.ttf differ diff --git a/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-SemiBold.ttf b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-SemiBold.ttf new file mode 100644 index 0000000..49817ef Binary files /dev/null and b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-SemiBold.ttf differ diff --git a/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-SemiBoldItalic.ttf b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-SemiBoldItalic.ttf new file mode 100644 index 0000000..8399e98 Binary files /dev/null and b/src/static/client/src/assets/fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-SemiBoldItalic.ttf differ diff --git a/src/static/client/src/assets/images/bg1.jpg b/src/static/client/src/assets/images/bg1.jpg new file mode 100644 index 0000000..93b18c2 Binary files /dev/null and b/src/static/client/src/assets/images/bg1.jpg differ diff --git a/src/static/client/src/assets/main.css b/src/static/client/src/assets/main.css new file mode 100644 index 0000000..b9f596c --- /dev/null +++ b/src/static/client/src/assets/main.css @@ -0,0 +1,148 @@ +@import "bootstrap/dist/css/bootstrap.css"; +@import "bootstrap-icons/font/bootstrap-icons.css"; + +@font-face { + font-family: 'Plus Jakarta Sans'; + font-style: normal; + font-weight: 200 800; + src: url(./fonts/Plus_Jakarta_Sans/PlusJakartaSans-VariableFont_wght.ttf) format('ttf'); +} +@font-face { + font-family: 'Plus Jakarta Sans'; + font-style: italic; + font-weight: 200 800; + src: url(./fonts/Plus_Jakarta_Sans/PlusJakartaSans-Italic-VariableFont_wght.ttf) format('ttf'); +} + +*{ + font-family: 'Plus Jakarta Sans', -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !important; +} + +@property --brandColor1 { + syntax: ''; + initial-value: #009dff; + inherits: false; +} + +@property --brandColor2 { + syntax: ''; + initial-value: #F94647; + inherits: false; +} + +@property --distance1{ + syntax: ''; + initial-value: 0%; + inherits: false; +} + +@property --degree{ + syntax: ''; + initial-value: 234deg; + inherits: false; +} + +.btn-brand{ + /*background: rgb(23,139,255);*/ + background: linear-gradient(var(--degree), var(--brandColor1) var(--distance1), var(--brandColor2) 100%); + border: 0 !important; + transition: --brandColor1 0.3s, --brandColor2 0.3s !important; +} + +.btn-brand:hover{ + --brandColor1: rgb(0, 142, 216); + --brandColor2: rgba(249, 70, 71) +} + +::-webkit-scrollbar { + display: none; +} + +.slide-right-enter-active, +.slide-right-leave-active { + transition: all 0.3s cubic-bezier(0.82, 0.58, 0.17, 1); +} +.slide-right-enter-from, +.slide-right-leave-to{ + opacity: 0; +} + +.slide-right-enter-from{ + transform: translateX(-20px); +} +.slide-right-leave-to{ + transform: translateX(20px); +} + +.app-enter-active, +.app-leave-active { + transition: all 0.4s cubic-bezier(0.82, 0.58, 0.17, 1); +} +.app-enter-from, +.app-leave-to{ + opacity: 0; + filter: blur(8px); +} + +.app-enter-from{ + transform: translateY(20px); +} + +.app-leave-to{ + transform: translateY(-20px) +} + +.btn-outline-body{ + color: #000000; + border-color: #000000 !important; + background-color: transparent; +} + +[data-bs-theme=dark] .btn-outline-body{ + color: #ffffff; + border-color: #ffffff !important; + background-color: transparent; +} + +.btn-body{ + border-color: #000000 !important; + color: #ffffff !important; + background-color: #000000; +} + +.btn-body:hover{ + border-color: #373737 !important; + color: #ffffff !important; + background-color: #373737 !important; +} + +[data-bs-theme=dark] .btn-body{ + border-color: #ffffff !important; + color: #000000 !important; + background-color: #ffffff; +} + +[data-bs-theme=dark] .btn-body:hover{ + border-color: #e8e8e8 !important; + color: #000000 !important; + background-color: #e8e8e8 !important; +} + +.form-control{ + border-width: 0; +} + +.amneziawgBg{ + background: rgb(145,199,193); + background: linear-gradient(90deg, rgba(145,199,193,1) 0%, rgba(107,95,161,1) 50%, rgba(227,142,65,1) 100%); +} + +.wireguardBg{ + background: rgb(125,32,32); + background: linear-gradient(90deg, rgba(125,32,32,1) 0%, rgba(255,56,56,1) 100%); +} + +.form-control{ + background-color: rgba(0, 0, 0, 0.25) !important; + backdrop-filter: blur(8px) !important; +} \ No newline at end of file diff --git a/src/static/client/src/components/Configuration/configuration.vue b/src/static/client/src/components/Configuration/configuration.vue new file mode 100644 index 0000000..f146a5d --- /dev/null +++ b/src/static/client/src/components/Configuration/configuration.vue @@ -0,0 +1,116 @@ + + + + + \ No newline at end of file diff --git a/src/static/client/src/components/Configuration/configurationQRCode.vue b/src/static/client/src/components/Configuration/configurationQRCode.vue new file mode 100644 index 0000000..90b8ae9 --- /dev/null +++ b/src/static/client/src/components/Configuration/configurationQRCode.vue @@ -0,0 +1,70 @@ + + + + + \ No newline at end of file diff --git a/src/static/client/src/components/Notification/notification.vue b/src/static/client/src/components/Notification/notification.vue new file mode 100644 index 0000000..54a5d5d --- /dev/null +++ b/src/static/client/src/components/Notification/notification.vue @@ -0,0 +1,68 @@ + + + + + \ No newline at end of file diff --git a/src/static/client/src/components/Notification/notificationList.vue b/src/static/client/src/components/Notification/notificationList.vue new file mode 100644 index 0000000..a5af030 --- /dev/null +++ b/src/static/client/src/components/Notification/notificationList.vue @@ -0,0 +1,53 @@ + + + + + \ No newline at end of file diff --git a/src/static/client/src/components/Settings/profile.vue b/src/static/client/src/components/Settings/profile.vue new file mode 100644 index 0000000..bcae8db --- /dev/null +++ b/src/static/client/src/components/Settings/profile.vue @@ -0,0 +1,26 @@ + + + + + \ No newline at end of file diff --git a/src/static/client/src/components/Settings/updatePassword.vue b/src/static/client/src/components/Settings/updatePassword.vue new file mode 100644 index 0000000..ebeadcf --- /dev/null +++ b/src/static/client/src/components/Settings/updatePassword.vue @@ -0,0 +1,102 @@ + + + + + \ No newline at end of file diff --git a/src/static/client/src/components/SignIn/oidc/oidc.vue b/src/static/client/src/components/SignIn/oidc/oidc.vue new file mode 100644 index 0000000..38879d5 --- /dev/null +++ b/src/static/client/src/components/SignIn/oidc/oidc.vue @@ -0,0 +1,40 @@ + + + + + \ No newline at end of file diff --git a/src/static/client/src/components/SignIn/oidc/oidcBtn.vue b/src/static/client/src/components/SignIn/oidc/oidcBtn.vue new file mode 100644 index 0000000..626bd91 --- /dev/null +++ b/src/static/client/src/components/SignIn/oidc/oidcBtn.vue @@ -0,0 +1,41 @@ + + + + + \ No newline at end of file diff --git a/src/static/client/src/components/SignIn/qrcode.vue b/src/static/client/src/components/SignIn/qrcode.vue new file mode 100644 index 0000000..e0b599b --- /dev/null +++ b/src/static/client/src/components/SignIn/qrcode.vue @@ -0,0 +1,27 @@ + + + + + \ No newline at end of file diff --git a/src/static/client/src/components/SignIn/signInForm.vue b/src/static/client/src/components/SignIn/signInForm.vue new file mode 100644 index 0000000..ae2ad6a --- /dev/null +++ b/src/static/client/src/components/SignIn/signInForm.vue @@ -0,0 +1,116 @@ + + + + + \ No newline at end of file diff --git a/src/static/client/src/components/SignIn/totpForm.vue b/src/static/client/src/components/SignIn/totpForm.vue new file mode 100644 index 0000000..5b9b06a --- /dev/null +++ b/src/static/client/src/components/SignIn/totpForm.vue @@ -0,0 +1,139 @@ + + + + + \ No newline at end of file diff --git a/src/static/client/src/main.js b/src/static/client/src/main.js new file mode 100644 index 0000000..7e46056 --- /dev/null +++ b/src/static/client/src/main.js @@ -0,0 +1,51 @@ +import './assets/main.css' + +import { createApp } from 'vue' +import App from './App.vue' +import router from "@/router/router.js"; +import {createPinia} from "pinia"; + +import 'bootstrap/dist/js/bootstrap.bundle.js' +import {axiosGet, axiosPost} from "@/utilities/request.js"; +import {clientStore} from "@/stores/clientStore.js"; + +const params = new URLSearchParams(window.location.search) +const state = params.get('state') +const code = params.get('code') + +const initApp = async () => { + const app = createApp(App) + const serverInformation = await axiosGet("/api/serverInformation", {}) + app.use(createPinia()) + if (serverInformation){ + const store = clientStore() + store.serverInformation = serverInformation.data; + } + app.use(router) + app.mount("#app") +} + +if (state && code){ + await axiosPost("/api/signin/oidc", { + provider: state, + code: code, + redirect_uri: window.location.protocol + '//' + window.location.host + window.location.pathname + }).then(async (data) => { + let url = new URL(window.location.href); + url.search = ''; + history.replaceState({}, document.title, url.toString()); + + await initApp() + if (!data.status){ + const store = clientStore() + store.newNotification(data.message, 'danger') + } + }) +}else{ + await initApp() +} + + + + + diff --git a/src/static/client/src/router/router.js b/src/static/client/src/router/router.js new file mode 100644 index 0000000..7cbf078 --- /dev/null +++ b/src/static/client/src/router/router.js @@ -0,0 +1,84 @@ +import {createWebHashHistory, createRouter} from "vue-router"; +import Index from "@/views/index.vue"; +import SignIn from "@/views/signin.vue"; +import SignUp from "@/views/signup.vue"; +import axios from "axios"; +import {axiosGet, requestURl} from "@/utilities/request.js"; +import {clientStore} from "@/stores/clientStore.js"; +import Settings from "@/views/settings.vue"; +import ForgotPassword from "@/views/forgotPassword.vue"; + +const router = createRouter({ + history: createWebHashHistory(), + routes: [ + { + path: '/', + component: Index, + meta: { + auth: true + }, + name: "Home" + }, + { + path: '/settings', + component: Settings, + meta: { + auth: true + }, + name: "Settings" + }, + { + path: '/signin', + component: SignIn, + name: "Sign In" + }, + { + path: '/signup', + component: SignUp, + name: "Sign Up" + }, + { + path: '/signout', + name: "Sign Out" + }, + { + path: '/forgotPassword', + name: "Forgot Password", + component: ForgotPassword + } + ] +}) +router.beforeEach(async (to, from, next) => { + const store = clientStore() + if (to.path === "/signup" && !store.serverInformation.SignUp.enable){ + next('/signin') + store.newNotification("Sign up is disabled. Please contact administrator for more information", "warning") + } + + if (to.path === '/signout'){ + await axios.get(requestURl('/api/signout')).then(() => { + next('/signin') + }).catch(() => { + next('/signin') + }); + store.newNotification("Sign in session ended, please sign in again", "warning") + }else{ + if (to.meta.auth){ + const status = await axiosGet('/api/validateAuthentication') + if (status){ + next() + }else{ + store.newNotification("Sign in session ended, please sign in again", "warning") + next('/signin') + } + }else{ + next() + } + } +}) + +router.afterEach((to, from, next) => { + document.title = to.name + ' | WGDashboard Client' +}) + +export default router \ No newline at end of file diff --git a/src/static/client/src/stores/clientStore.js b/src/static/client/src/stores/clientStore.js new file mode 100644 index 0000000..f9390a2 --- /dev/null +++ b/src/static/client/src/stores/clientStore.js @@ -0,0 +1,46 @@ +import {defineStore} from "pinia"; +import {onMounted, reactive, ref} from "vue"; +import {v4} from "uuid" +import dayjs from "dayjs"; +import {axiosGet} from "@/utilities/request.js"; + + +export const clientStore = defineStore('clientStore', { + state: () => ({ + serverInformation: {}, + notifications: [], + configurations: [], + clientProfile: { + Email: "", + SignInMethod: "", + Profile: {} + } + }), + actions: { + newNotification(content, status){ + this.notifications.push({ + id: v4().toString(), + status: status, + content: content, + time: dayjs(), + show: true + }) + }, + async getClientProfile(){ + const data = await axiosGet('/api/settings/getClientProfile') + if (data){ + this.clientProfile = data.data + }else{ + this.newNotification("Failed to fetch client profile", "danger") + } + }, + async getConfigurations(){ + const data = await axiosGet("/api/configurations") + if (data){ + this.configurations = data.data + }else{ + this.newNotification("Failed to fetch configurations", "danger") + } + } + } +}) \ No newline at end of file diff --git a/src/static/client/src/utilities/request.js b/src/static/client/src/utilities/request.js new file mode 100644 index 0000000..dd84da6 --- /dev/null +++ b/src/static/client/src/utilities/request.js @@ -0,0 +1,28 @@ +import axios from "axios"; + +export const requestURl = (url) => { + if (import.meta.env.MODE === 'development') { + return '/client' + url; + } + return `./.${url}`; +} + +export const axiosPost = async (URL, body = {}) => { + try{ + const res = await axios.post(requestURl(URL), body) + return res.data + } catch (error){ + console.log(error) + return undefined + } +} + +export const axiosGet = async (URL, query = {}) => { + try{ + const res = await axios.get(requestURl(URL), query) + return res.data + } catch (error){ + console.log(error) + return undefined + } +} \ No newline at end of file diff --git a/src/static/client/src/views/forgotPassword.vue b/src/static/client/src/views/forgotPassword.vue new file mode 100644 index 0000000..cef7689 --- /dev/null +++ b/src/static/client/src/views/forgotPassword.vue @@ -0,0 +1,231 @@ + + + + + \ No newline at end of file diff --git a/src/static/client/src/views/index.vue b/src/static/client/src/views/index.vue new file mode 100644 index 0000000..5f50de2 --- /dev/null +++ b/src/static/client/src/views/index.vue @@ -0,0 +1,118 @@ + + + + + \ No newline at end of file diff --git a/src/static/client/src/views/settings.vue b/src/static/client/src/views/settings.vue new file mode 100644 index 0000000..d5b89ce --- /dev/null +++ b/src/static/client/src/views/settings.vue @@ -0,0 +1,24 @@ + + + + + \ No newline at end of file diff --git a/src/static/client/src/views/signin.vue b/src/static/client/src/views/signin.vue new file mode 100644 index 0000000..32fc127 --- /dev/null +++ b/src/static/client/src/views/signin.vue @@ -0,0 +1,26 @@ + + + + + \ No newline at end of file diff --git a/src/static/client/src/views/signup.vue b/src/static/client/src/views/signup.vue new file mode 100644 index 0000000..9d766b2 --- /dev/null +++ b/src/static/client/src/views/signup.vue @@ -0,0 +1,158 @@ + + + + + \ No newline at end of file diff --git a/src/static/client/vite.config.js b/src/static/client/vite.config.js new file mode 100644 index 0000000..091ca78 --- /dev/null +++ b/src/static/client/vite.config.js @@ -0,0 +1,44 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import vueDevTools from 'vite-plugin-vue-devtools' +import {proxy} from "./proxy.js"; + + +export default defineConfig({ + plugins: [ + vue(), + vueDevTools(), + { + name: 'rename', + enforce: 'post', + generateBundle(options, bundle) { + bundle['index.html'].fileName = "client.html" + } + } + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + }, + }, + server:{ + proxy: { + '/client': proxy, + }, + host: '0.0.0.0' + }, + build: { + target: "es2022", + outDir: '../dist/WGDashboardClient', + rollupOptions: { + output: { + entryFileNames: `assets/[name]-[hash].js`, + chunkFileNames: `assets/[name]-[hash].js`, + assetFileNames: `assets/[name]-[hash].[ext]` + } + } + }, + base: './' +}) diff --git a/src/static/locales/ar-SA.json b/src/static/locales/ar-SA.json new file mode 100644 index 0000000..ef62c7f --- /dev/null +++ b/src/static/locales/ar-SA.json @@ -0,0 +1,369 @@ +{ + " file": " الملف", + "(.*) Available IP Address": "عنوان IP متاح $1", + "(.*) Minutes": "$1 دقيقة", + "(.*) Seconds": "$1 ثانية", + "(.*) Used": "", + "(.*) is off": "(.*) متوقف", + "(.*) is on": "(.*) قيد التشغيل", + "([0-9].*) Backups?": "$1 نسخة احتياطية؟", + "([0-9].*) Peers?": "$1 قرين؟", + "([0-9]{1,}) Interfaces": "", + "([0-9]{1,}) Partitions": "", + "(v[0-9.]{1,}) is now available for update!": "$1 متاح الآن للتحديث!", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1\\. يرجى مسح رمز الاستجابة السريعة التالي لإنشاء كلمة مرور لمرة واحدة (TOTP) باستخدام تطبيق المصادقة الذي تختاره", + "2\\. Enter the TOTP generated by your authenticator to verify": "2\\. أدخل كلمة المرور لمرة واحدة (TOTP) التي تم إنشاؤها بواسطة تطبيق المصادقة للتحقق", + "API Key": "مفتاح API", + "API Key created": "تم إنشاء مفتاح API", + "API Key deleted": "تم حذف مفتاح API", + "API Keys": "مفاتيح API", + "API Keys function is failed to disable": "فشل تعطيل وظيفة مفاتيح API", + "API Keys function is failed to enable": "فشل تفعيل وظيفة مفاتيح API", + "API Keys function is successfully disabled": "تم تعطيل وظيفة مفاتيح API بنجاح", + "API Keys function is successfully enabled": "تم تفعيل وظيفة مفاتيح API بنجاح", + "Access Remote Server": "الوصول الي الخادم البعيد", + "Access Restricted": "الوصول مقيد", + "Account Settings": "إعدادات الحساب", + "Active Jobs": "الوظائف النشطة", + "Add": "إضافة", + "Add Peers": "إضافة نظراء", + "Adding\\.\\.\\.": "جاري الاضافة", + "Address": "العنوان", + "Advanced Options": "", + "All Active Jobs": "جميع الوظائف النشطة", + "All connected peers will get disconnected": "سيتم فصل جميع الأقران المتصلين", + "Allow Access": "السماح بالوصول", + "Allow access successfully": "تم السماح بالوصول بنجاح", + "Allowed IP already taken by another peer": "عنوان IP المسموح به مستخدم بالفعل بواسطة قرين آخر", + "Allowed IPs": "عناوين IP المسموح بها", + "Allowed IPs Validation": "", + "Allowed IPs already taken by another peer": "عناوين IP المسموح بها مستخدمة بالفعل بواسطة قرين آخر", + "Allowed IPs is invalid": "عناوين IP المسموح بها غير صالحة", + "Allowing Access\\.\\.\\.": "جاري السماح بالوصول ...", + "AmneziaWG Peer Setting": "", + "Appearance": "المظهر", + "Are you sure to delete": "هل أنت متأكد من الحذف", + "Are you sure to delete this API key\\?": "هل انت متاكد ان تحذف هذا المفتاح للـAPI ", + "Are you sure to delete this backup\\?": "هل أنت متأكد من حذف هذه النسخة الاحتياطية؟", + "Are you sure to delete this configuration\\?": "هل أنت متأكد من حذف هذا الإعداد؟", + "Are you sure to delete this peer\\?": "هل أنت متأكد من حذف هذا القرين؟", + "Are you sure to restore this backup\\?": "", + "Average / Min / Max Round Trip Time": "متوسط / أدنى / أقصى وقت للرحلة الكاملة", + "Average RTT \\(ms\\)": "", + "Backup": "نسخة احتياطية", + "Backup & Restore": "النسخ الاحتياطي والاستعادة", + "Backup Date": "تاريخ النسخة الاحتياطية", + "Backup not selected": "لم يتم تحديد النسخة الاحتياطية", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "سيتم حذف كل من ملف التكوين (.conf) وجدول قاعدة البيانات المرتبط بهذا التكوين", + "Bulk Add": "إضافة بالجملة", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "عند إضافة الأقران بشكل جماعي، سيتم إنشاء اسم كل قرين تلقائيًا، وسيتم تخصيص عنوان IP المسموح به إلى عنوان IP التالي المتاح", + "CPU": "", + "CPU Usage": "", + "Cancel": "إلغاء", + "Checking backups...": "جارٍ التحقق من النسخ الاحتياطية...", + "Checking for update...": "جاري تسجيل الخروج", + "Clear Selection": "مسح التحديد", + "Click": "انقر", + "Click to change a backup": "انقر لتغيير النسخة الاحتياطية", + "Complete": "اكتمل", + "Configuration": "التكوين", + "Configuration File": "", + "Configuration Name": "اسم الإعداد", + "Configuration Settings": "إعدادات التكوين", + "Configuration deleted": "تم حذف الإعداد", + "Configuration does not exist": "الإعداد غير موجود", + "Configuration name already exist\\.": "اسم الإعداد موجود بالفعل", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "يمكن أن يحتوي اسم الإعداد على 15 حرفًا فقط، بما في ذلك الحروف الكبيرة/الصغيرة، الأرقام، الشرطة السفلية، علامة التساوي، علامة الزائد، النقطة والشرطة", + "Configuration name is invalid. Possible reasons:": "اسم الإعداد غير صالح. الأسباب المحتملة:", + "Configuration restored": "تم استعادة الإعداد", + "Configuration saved": "تم حفظ الإعداد", + "Configurations": "التكوينات", + "Configurations Directory": "مسار التكوينات", + "Confirm \\& edit restore information": "تأكيد وتحرير معلومات الاستعادة", + "Confirm password": "تأكيد كلمة المرور", + "Connected Peers": "النظراء المتصلون", + "Contain": "يحتوي على", + "Count": "العدد", + "Create": "إنشاء", + "Create API Key": "إنشاء مفتاح API", + "Create Backup": "إنشاء نسخة احتياطية", + "Create an account": "إنشاء حساب", + "Creating\\.\\.\\.": "جاري الانشاء", + "Current Password": "كلمة المرور الحالية", + "Current Version:": "الإصدار الحالي:", + "Currently the peer is not sharing": "النظير لا يشارك حاليًا", + "DNS": "DNS", + "DNS format is incorrect": "تنسيق DNS غير صحيح", + "Danger Zone": "", + "Dark": "داكن", + "Dashboard IP Address \\& Listen Port": "عنوان IP لوحة التحكم ومنفذ الاستماع", + "Dashboard Language": "لغة لوحة التحكم", + "Dashboard Theme": "سمة لوحة التحكم", + "Dashboard language update failed": "فشل تحديث لغة لوحة التحكم", + "Database File": "ملف قاعدة البيانات", + "Date": "التاريخ", + "Delete": "حذف", + "Delete Configuration": "حذف الإعداد", + "Delete Peer": "حذف النظير", + "Delete current configuration's database table and \\.conf file": "", + "Deleted ([0-9]{1,}) peer\\(s\\)": "تم حذف $1 قرين(قرين)", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "تم حذف $1 قرين(قرين) بنجاح. فشل في حذف $2 قرين(قرين)", + "Deleting...": "جارٍ الحذف...", + "Disabled": "معطل", + "Discord Server": "", + "Display": "عرض", + "Display As": "", + "Don't think that's a good idea": "لا أعتقد أن هذه فكرة جيدة", + "Done": "تم", + "Download": "", + "Download All": "تنزيل الكل", + "Download Finished": "اكتمل التنزيل", + "Download \\& QR Code is not available due to no private key set for this peer": "التنزيل ورمز الاستجابة السريعة غير متاحين نظرًا لعدم تعيين مفتاح خاص لهذا القرين", + "Downloading": "جاري التنزيل", + "Duplicate current configuration's database table and \\.conf file with the new name": "", + "Edit": "تعديل", + "Edit Raw Configuration File": "", + "Email Account": "", + "Email Body Template": "", + "Email sent successfully!": "", + "Enabled": "مفعل", + "Encryption": "", + "Endpoint Allowed IPs": "عناوين IP المسموح بها لنقطة النهاية", + "Endpoint Allowed IPs format is incorrect": "تنسيق عناوين IP المسموح بها للنقطة النهائية غير صحيح", + "Enter IP Address / Hostname": "أدخل عنوان IP / اسم المضيف", + "Enter IP Address/CIDR": "أدخل عنوان IP/CIDR", + "Enter a password": "أدخل كلمة مرور", + "Enter an username you like": "أدخل اسم مستخدم يعجبك", + "Expire At": "ينتهي في", + "FROM ": "من ", + "Failed": "فشل", + "Failed to add peers in bulk": "فشل في إضافة الأقران بشكل جماعي.", + "Failed to allow access of peer (.*)": "فشل السماح بوصول القرين $1", + "Failed to check available update": "فشل في التحقق من التحديث المتاح", + "Failed to save configuration through WireGuard": "فشل حفظ الإعداد من خلال WireGuard", + "File": "الملف", + "Filter": "تصفية", + "Generating key pairs by bulk failed": "فشل إنشاء أزواج المفاتيح بشكل جماعي.", + "Geolocation": "الموقع الجغرافي", + "Grid": "", + "Help": "مساعدة", + "Home": "الصفحة الرئيسية", + "Hop": "", + "How many peers you want to add\\?": "كم عدد النظراء التي تريد اضافتها", + "I don't need MFA": "لا أحتاج إلى المصادقة متعددة العوامل (MFA).", + "IP Address": "عنوان IP", + "IP Address / Hostname": "عنوان IP / اسم المضيف", + "IP Address/CIDR": "عنوان IP/CIDR", + "IP Address/CIDR is invalid": "عنوان IP/CIDR غير صالح", + "If you're sure, please type in the configuration name below and click Delete": "إذا كنت متأكدًا، يرجى كتابة اسم الإعداد أدناه والنقر على حذف", + "Include configuration file as an attachment": "", + "Invalid Port": "المنفذ غير صالح", + "Is Alive": "نشط", + "Job": "وظيفة", + "Job ID": "معرف الوظيفة", + "Jobs Logs": "سجلات الوظائف", + "Key": "مفتاح", + "Language": "اللغة", + "Light": "فاتح", + "Link expire date failed to update. Reason: (.*)": "فشل تحديث تاريخ انتهاء صلاحية الرابط. السبب: $1", + "Link expire date updated": "تم تحديث تاريخ انتهاء صلاحية الرابط.", + "List": "", + "Listen Port": "منفذ الاستماع", + "Live Preview": "", + "Log ID": "معرف السجل", + "Logs": "السجلات", + "MTU": "MTU", + "MTU format is not correct": "تنسيق MTU غير صحيح", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "يتطلب إعادة تشغيل يدوي للوحة WGDashboard لتطبيق التغييرات على عنوان IP ومنفذ الاستماع", + "Max RTT \\(ms\\)": "", + "Memory": "", + "Memory Usage": "", + "Message": "رسالة", + "Min RTT \\(ms\\)": "", + "Multi-Factor Authentication \\(MFA\\)": "المصادقة متعددة العوامل (MFA)", + "Name": "الاسم", + "Network": "", + "Never Expire": "لا ينتهي أبدًا", + "New Configuration": "إعداد جديد", + "New Password": "كلمة المرور الجديدة", + "Next": "التالي", + "Nice to meet you!": "تشرفت بلقائك!", + "No": "لا", + "No Encryption": "", + "No WGDashboard API Key": "لا يوجد مفتاح API لـ WGDashboard", + "No active job at the moment\\.": "لايوجد وظائف نشطة في الوقت الحالي", + "No available IP containing": "لا يوجد عنوان IP متاح يحتوي على", + "No backup yet, click the button above to create backup\\.": "لا توجد نسخة احتياطية حتى الآن، انقر على الزر أعلاه لإنشاء نسخة احتياطية", + "No more available IP can assign": "لا توجد عناوين IP متاحة للتخصيص.", + "OTP from your authenticator": "كلمة المرور لمرة واحدة من المصادق الخاص بك", + "Off": "متوقف", + "Official Documentation": "", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "عذرًا... هذا الرابط إما منتهي الصلاحية أو غير صالح", + "On": "مشغل", + "Once you deleted this configuration\\:": "بمجرد حذف هذا الإعداد:", + "Open File": "", + "Optional Settings": "إعدادات اختيارية", + "Or you can click the link below:": "أو يمكنك النقر على الرابط أدناه:", + "Other Settings": "إعدادات أخرى", + "Password": "كلمة المرور", + "Peer": "نظير", + "Peer Configuration File": "", + "Peer Default Settings": "الإعدادات الافتراضية للأقران", + "Peer Jobs": "وظائف النظير", + "Peer Remote Endpoint": "النقطة الطرفية البعيدة للقرين", + "Peer Settings": "إعدادات النظير", + "Peer created successfully": "تم إنشاء القرين بنجاح", + "Peer data usage reset successfully": "تمت إعادة تعيين استخدام بيانات القرين بنجاح", + "Peer does not exist": "القرين غير موجود", + "Peer download started": "بدأ تنزيل القرين", + "Peer job deleted": "تم حذف وظيفة القرين", + "Peer job saved": "تم حفظ وظيفة القرين", + "Peer saved": "تم حفظ القرين.", + "Peers": "النظراء", + "Peers Data Usage": "استهلاك بيانات النظراء", + "Peers Default Settings": "إعدادات النظراء الافتراضية", + "Peers Settings": "إعدادات الأقران", + "Persistent Keepalive": "الاستمرار في الإبقاء على الاتصال", + "Persistent Keepalive format is not correct": "تنسيق الإبقاء النشط (Keepalive) غير صحيح", + "Pick Available IP": "اختر عنوان IP متاحًا", + "Pinging...": " .جاري فحص الاتصال ...", + "Please fill in all required box": "يرجى ملء جميع الحقول المطلوبة", + "Please fill in the following fields to finish setup": "يرجى ملء الحقول التالية لإكمال الإعداد", + "Please provide a valid configuration name": "يرجى تقديم اسم إعداد صالح", + "Please provide ipAddress": "يرجى تقديم عنوان IP", + "Please provide ipAddress and count": "يرجى تقديم عنوان IP والعدد", + "Please specify amount of peers you want to add": "يرجى تحديد عدد الأقران الذين ترغب في إضافتهم", + "Please specify an IP Address (v4/v6)": "يرجى تحديد عنوان IP (v4/v6)", + "Please specify job": "يرجى تحديد الوظيفة.", + "Please specify one or more peers": "يرجى تحديد قرين واحد أو أكثر", + "Please specify peer and configuration": "يرجى تحديد القرين والإعداد", + "Port": "", + "Pre-Shared Key": "المفتاح المشترك مسبقًا", + "Private Key": "المفتاح الخاص", + "Private key does not match with the public key": "المفتاح الخاص لا يتطابق مع المفتاح العام", + "Processes": "", + "Protocol": "", + "Public Key": "المفتاح العام", + "QR Code": "رمز الاستجابة السريع", + "Ready": "", + "Real Time Received Data Usage": "استهلاك البيانات المستلمة في الوقت الفعلي", + "Real Time Sent Data Usage": "استهلاك البيانات المرسلة في الوقت الفعلي", + "Received": "تم الاستلام", + "Refresh": "تحديث", + "Refresh Interval": "فترة التحديث", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "تذكر إزالة / في نهاية المسار الخاص بك. مثال: /etc/wireguard", + "Repeat New Password": "كرر كلمة المرور الجديدة", + "Reset": "إعادة ضبط", + "Reset Data Usage": "إعادة ضبط استهلاك البيانات", + "Restore": "استعادة", + "Restore Configuration": "استعادة الإعداد", + "Restoring": "جاري الاستعادة", + "Restrict Access": "تقيد الوصول", + "Restrict Peer": "تقييد النظير", + "Restricted": "مقيد", + "Restricted ([0-9]{1,}) peer\\(s\\)": "تم تقييد $1 قرين(قرين).", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "تم تقييد $1 قرين(قرين) بنجاح. فشل في تقييد $2 قرين(قرين).", + "Restricted Peers?": "الأقران المقيدون؟", + "Restricting\\.\\.\\.": "جاري التقيد ...", + "Revert": "إعادة", + "Save": "حفظ", + "Save Configuration": "حفظ الإعداد", + "Save Peer": "حفظ النظير", + "Saving\\.\\.\\.": "جارٍ الحفظ...", + "Scan QR Code with the WireGuard App to add peer": "قم بمسح رمز الاستجابة السريعة باستخدام تطبيق WireGuard لإضافة قرين", + "Schedule Jobs": "جدولة الوظائف", + "Search": "", + "Search Peers\\.\\.\\.": "بحث في النظراء", + "Select All": "تحديد الكل", + "Select Peers": "اختر الأقران", + "Select a backup you want to restore": "حدد النسخة الاحتياطية التي تريد استعادتها", + "Selected Backup": "النسخة الاحتياطية المحددة", + "Send": "", + "Send From": "", + "Send Test Email": "", + "Sending\\.\\.\\.": "", + "Sent": "تم الإرسال", + "Sent / Received / Lost Package": "الحزم المرسلة / المستلمة / المفقودة", + "Server": "الخادم", + "Server List": "قائمة الخوادم", + "Settings": "الإعدادات", + "Setup": "إعداد", + "Share Peer": "مشاركة النظير", + "Share link failed to create. Reason: (.*)": "فشل إنشاء رابط المشاركة. السبب: $1", + "Share with Email": "", + "Sharing\\.\\.\\.": "جاري المشاركة", + "Sign In": "تسجيل الدخول", + "Sign Out": "تسجيل الخروج", + "Sign in session ended, please sign in again": "انتهت جلسة تسجيل الدخول، يرجى تسجيل الدخول مرة أخرى", + "Signing In\\.\\.\\.": "جاري تسجيل الدخول ...", + "Sorry, your username or password is incorrect.": "عذرا ، اسم المستخدم او كلمة المرور غير صحيحة", + "Sort By": "فرز حسب", + "Start Sharing": "بدء المشاركة", + "Status": "الحالة", + "Step (.*)": "الخطوة $1", + "Stop Sharing": "إيقاف المشاركة", + "Stop Sharing\\.\\.\\.": "جاري ايقاف المشاركة", + "Storage": "", + "Success": "نجاح", + "Swap Memory": "", + "Swap Memory Usage": "", + "System Status": "", + "TOTP verified!": "تم التحقق من كلمة المرور لمرة واحدة (TOTP) بنجاح!", + "Table": "", + "The maximum number of peers can add is (.*)": "الحد الأقصى لعدد الأقران الذين يمكن إضافتهم هو $1", + "Theme": "السمة", + "This IP is not available: (.*)": "عنوان IP هذا غير متاح: $1", + "This configuration have ([0-9].*) backups": "يحتوي هذا التكوين على $1 نسخة احتياطية", + "This configuration have no backup": "لا يحتوي هذا التكوين على نسخ احتياطية", + "This peer already exist": "هذا القرين موجود بالفعل.", + "This peer does not have any job yet\\.": "هذا النظير ليس لدية وظيفة نشطة بعد", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "سيتم تغيير هذا في كل الاعدادات وسيطبق على جميع رموز الاستجابة السريعة الخاصة بالنظراء وملفات التكوين.", + "To update this configuration's name, WGDashboard will execute the following operations:": "", + "Toggle When Start Up": "التبديل عند بدء التشغيل", + "Tools": "الادوات", + "Total": "الإجمالي", + "Total Received": "الإجمالي المستلم", + "Total Sent": "الإجمالي المرسل", + "Total Usage": "الاستخدام الكلي", + "Turning Off\\.\\.\\.": "إيقاف", + "Turning On\\.\\.\\.": "تشغيل", + "Unsaved Job": "وظيفة غير محفوظة", + "Untitled Peer": "", + "Update Name": "", + "Update Password": "تحديث كلمة المرور", + "Update peer failed when saving the configuration": "فشل تحديث القرين عند حفظ الإعداد", + "Update peer failed when updating Allowed IPs": "فشل تحديث القرين عند تحديث عناوين IP المسموح بها", + "Update peer failed when updating Pre-Shared Key": "فشل تحديث القرين عند تحديث المفتاح المشترك مسبقًا", + "Updated at": "تم التحديث في", + "Use your own Private and Public Key": "استخدم المفتاح الخاص والعام الخاص بك", + "Username": "اسم المستخدم", + "WGDashboard API Keys function is disabled": "تم تعطيل وظيفة مفاتيح API في لوحة WGDashboard", + "WGDashboard Account Settings": "إعدادات حساب WGDashboard", + "WGDashboard Settings": "إعدادات WGDashboard", + "WGDashboard language update failed": "فشل تحديث لغة لوحة WGDashboard", + "Welcome to": "مرحبا بك في ", + "What\\'s the body\\?": "", + "What\\'s the subject\\?": "", + "When should this API Key expire\\?": "متي يجب ان ينتهي هذا المفتاح للـ API", + "Who are you sending to\\?": "", + "WireGuard Configuration Settings": "إعدادات تكوين WireGuard", + "WireGuard Configurations": "تكوينات WireGuard", + "WireGuard Configurations Settings": "إعدادات تكوينات WireGuard", + "WireGuard configuration path saved": "تم حفظ مسار إعداد WireGuard", + "Yes": "نعم", + "You can add up to (.*) peers": "يمكنك إضافة ما يصل إلى $1 نظير", + "You can visit our: ": "", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "ليس لديك أي تكوينات WireGuard بعد. يرجى التحقق من مجلد التكوين أو تغييره في الإعدادات. المجلد الافتراضي هو /etc/wireguard.", + "You don't have any configuration to restore": "ليس لديك أي إعداد لاستعادته", + "You're on the latest version": "انت تستخدم احدث اصدار", + "\\(At least 8 characters and make sure is strong enough!\\)": "(يجب أن تكون 8 أحرف على الأقل وتأكد من قوتها!)", + "\\(Required for QR Code and Download\\)": " الزامي لرمز الاستجابة السريعة والتحميل", + "\\(Required\\)": "الزامي", + "if": "إذا", + "is": "هو", + "larger than": "أكبر من", + "or": "أو", + "or click the button below to download the ": "أو انقر على الزر أدناه لتحميل ", + "then": "ثم", + "to add your server": "لاضافة خادمك" +} \ No newline at end of file diff --git a/src/static/locales/be-BY.json b/src/static/locales/be-BY.json new file mode 100644 index 0000000..51e0136 --- /dev/null +++ b/src/static/locales/be-BY.json @@ -0,0 +1,369 @@ +{ + " file": " файл", + "(.*) Available IP Address": "$1 даступных IP-адрасоў", + "(.*) Minutes": "$1 хвілін", + "(.*) Seconds": "$1 секунд", + "(.*) Used": "", + "(.*) is off": "$1 адключана", + "(.*) is on": "$1 уключана", + "([0-9].*) Backups?": "$1 рэзервовых копій", + "([0-9].*) Peers?": "$1 кліентаў", + "([0-9]{1,}) Interfaces": "", + "([0-9]{1,}) Partitions": "", + "(v[0-9.]{1,}) is now available for update!": "$1 цяпер даступна для абнаўлення!", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Калі ласка, адсканіруйце наступны QR-код, каб згенераваць TOTP з дапамогай вашага аўтэнтыфікатара", + "2\\. Enter the TOTP generated by your authenticator to verify": "2. Увядзіце TOTP, згенераваны вашым аўтэнтыфікатарам, для праверкі", + "API Key": "API-ключ", + "API Key created": "API-ключ створаны", + "API Key deleted": "API-ключ выдалены", + "API Keys": "API-ключы", + "API Keys function is failed to disable": "Не ўдалося адключыць функцыю API-ключаў", + "API Keys function is failed to enable": "Не ўдалося ўключыць функцыю API-ключаў", + "API Keys function is successfully disabled": "Функцыя API-ключаў паспяхова адключана", + "API Keys function is successfully enabled": "Функцыя API-ключаў паспяхова ўключана", + "Access Remote Server": "Доступ да аддаленага сервера", + "Access Restricted": "Доступ абмежаваны", + "Account Settings": "Налады акаўнта", + "Active Jobs": "Актыўныя заданні", + "Add": "Дадаць", + "Add Peers": "Дадаць піры", + "Adding\\.\\.\\.": "Даданне...", + "Address": "Адрас", + "Advanced Options": "", + "All Active Jobs": "Усе актыўныя заданні", + "All connected peers will get disconnected": "Усе злучаныя профілі будуць адключаны", + "Allow Access": "Дазволіць доступ", + "Allow access successfully": "Доступ паспяхова дазволены", + "Allowed IP already taken by another peer": "Дазволены IP ужо заняты іншым кліентам", + "Allowed IPs": "Дазволеныя IP", + "Allowed IPs Validation": "", + "Allowed IPs already taken by another peer": "Дазволеныя IP ужо занятыя іншым профілем", + "Allowed IPs is invalid": "Дазволеныя IP несапраўдныя", + "Allowing Access\\.\\.\\.": "Дазвол доступу...", + "AmneziaWG Peer Setting": "", + "Appearance": "Знешні выгляд", + "Are you sure to delete": "Вы ўпэўнены, што хочаце выдаліць", + "Are you sure to delete this API key\\?": "Вы ўпэўнены, што хочаце выдаліць гэты API-ключ?", + "Are you sure to delete this backup\\?": "Вы ўпэўнены, што хочаце выдаліць гэтую рэзервовую копію?", + "Are you sure to delete this configuration\\?": "Вы ўпэўнены, што хочаце выдаліць гэтую канфігурацыю?", + "Are you sure to delete this peer\\?": "Вы ўпэўнены, што хочаце выдаліць гэтага кліента?", + "Are you sure to restore this backup\\?": "", + "Average / Min / Max Round Trip Time": "Сярэдні / Мін / Макс час кругавога шляху", + "Average RTT \\(ms\\)": "", + "Backup": "Рэзервовая копія", + "Backup & Restore": "Рэзервовая копія і аднаўленне", + "Backup Date": "Дата рэзервовай копіі", + "Backup not selected": "Рэзервовая копія не абрана", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Файл канфігурацыі (\\.conf) і табліца базы дадзеных, звязаная з гэтай канфігурацыяй, будуць выдалены", + "Bulk Add": "Масавае даданне", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Пры масавым даданні кліентаў імя кожнага будзе аўтаматычна згенеравана, а дазволены IP будзе прызначаны як наступны даступны IP.", + "CPU": "", + "CPU Usage": "", + "Cancel": "Адмяніць", + "Checking backups...": "Праверка рэзервовых копій...", + "Checking for update...": "Праверка абнаўленняў...", + "Clear Selection": "Ачысціць выбар", + "Click": "Націсніце", + "Click to change a backup": "Націсніце, каб змяніць рэзервовую копію", + "Complete": "Завяршыць", + "Configuration": "Канфігурацыя", + "Configuration File": "", + "Configuration Name": "Імя канфігурацыі", + "Configuration Settings": "Налады канфігурацыі", + "Configuration deleted": "Канфігурацыя выдалена", + "Configuration does not exist": "Канфігурацыя не існуе", + "Configuration name already exist\\.": "Імя канфігурацыі ўжо існуе.", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "Імя канфігурацыі можа ўтрымліваць толькі 15 сімвалаў (верхні/ніжні рэгістр), лічбы, падкрэсленне, знак роўнасці, знак плюса, кропку і злучок.", + "Configuration name is invalid. Possible reasons:": "Імя канфігурацыі несапраўднае. Магчымыя прычыны:", + "Configuration restored": "Канфігурацыя адноўлена", + "Configuration saved": "Канфігурацыя захавана", + "Configurations": "Канфігурацыі", + "Configurations Directory": "Каталог канфігурацый", + "Confirm \\& edit restore information": "Пацвердзіць і рэдагаваць інфармацыю для аднаўлення", + "Confirm password": "Пацвердзіце пароль", + "Connected Peers": "Злучаныя піры", + "Contain": "Утрымлівае", + "Count": "Колькасць", + "Create": "Стварыць", + "Create API Key": "Стварыць API-ключ", + "Create Backup": "Стварыць рэзервовую копію", + "Create an account": "Стварыць акаўнт", + "Creating\\.\\.\\.": "Стварэнне...", + "Current Password": "Цяперашні пароль", + "Current Version:": "Цяперашняя версія:", + "Currently the peer is not sharing": "Агульны доступ да профілю канфігурацыі выключаны", + "DNS": "DNS", + "DNS format is incorrect": "Фармат DNS няправільны", + "Danger Zone": "", + "Dark": "Цёмная", + "Dashboard IP Address \\& Listen Port": "IP-адрас і порт праслухоўвання панэлі кіравання", + "Dashboard Language": "Мова панэлі кіравання", + "Dashboard Theme": "Тэма панэлі кіравання", + "Dashboard language update failed": "Не ўдалося абнавіць мову панэлі кіравання", + "Database File": "Файл базы дадзеных", + "Date": "Дата", + "Delete": "Выдаліць", + "Delete Configuration": "Выдаліць канфігурацыю", + "Delete Peer": "Выдаліць пір", + "Delete current configuration's database table and \\.conf file": "", + "Deleted ([0-9]{1,}) peer\\(s\\)": "Выдалена $1 кліент(аў)", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Выдалена $1 кліент(аў) паспяхова. Не ўдалося выдаліць $2 кліент(аў)", + "Deleting...": "Выдаленне...", + "Disabled": "Адключана", + "Discord Server": "", + "Display": "Адлюстраванне", + "Display As": "", + "Don't think that's a good idea": "Не думаю, што гэта добрая ідэя", + "Done": "Гатова", + "Download": "", + "Download All": "Спампаваць усе", + "Download Finished": "Спампоўка завершана", + "Download \\& QR Code is not available due to no private key set for this peer": "Спампоўка і QR-код недаступныя, бо не зададзены прыватны ключ для гэтага кліента", + "Downloading": "Спампоўка", + "Duplicate current configuration's database table and \\.conf file with the new name": "", + "Edit": "Рэдагаваць", + "Edit Raw Configuration File": "", + "Email Account": "", + "Email Body Template": "", + "Email sent successfully!": "", + "Enabled": "Уключана", + "Encryption": "", + "Endpoint Allowed IPs": "Дазволеныя IP для канчатковага пункта", + "Endpoint Allowed IPs format is incorrect": "Фармат дазволеных IP для канчатковага пункта няправільны", + "Enter IP Address / Hostname": "Увядзіце IP-адрас / Імя хоста", + "Enter IP Address/CIDR": "Увядзіце IP-адрас/CIDR", + "Enter a password": "Увядзіце пароль", + "Enter an username you like": "Увядзіце імя карыстальніка, якое вам падабаецца", + "Expire At": "Састарэе", + "FROM ": "З ", + "Failed": "Няўдача", + "Failed to add peers in bulk": "Не ўдалося дадаць профілі масава", + "Failed to allow access of peer (.*)": "Не ўдалося дазволіць доступ кліента $1", + "Failed to check available update": "Не ўдалося праверыць даступнае абнаўленне", + "Failed to save configuration through WireGuard": "Не ўдалося захаваць канфігурацыю праз WireGuard", + "File": "Файл", + "Filter": "Фільтр", + "Generating key pairs by bulk failed": "Не ўдалося згенераваць ключавыя пары масава", + "Geolocation": "Геалагічнае становішча", + "Grid": "", + "Help": "Дапамога", + "Home": "Галоўная", + "Hop": "", + "How many peers you want to add\\?": "Колькі кліентаў вы хочаце дадаць?", + "I don't need MFA": "Мне не патрэбна MFA", + "IP Address": "IP-адрас", + "IP Address / Hostname": "IP-адрас / Імя хоста", + "IP Address/CIDR": "IP-адрас/CIDR", + "IP Address/CIDR is invalid": "IP-адрас/CIDR несапраўдны", + "If you're sure, please type in the configuration name below and click Delete": "Калі вы ўпэўнены, увядзіце ніжэй імя канфігурацыі і націсніце Выдаліць", + "Include configuration file as an attachment": "", + "Invalid Port": "Няправільны порт", + "Is Alive": "Актыўны", + "Job": "Заданне", + "Job ID": "ID задання", + "Jobs Logs": "Логі заданняў", + "Key": "Ключ", + "Language": "Мова", + "Light": "Светлая", + "Link expire date failed to update. Reason: (.*)": "Не ўдалося абнавіць дату састарэння спасылкі. Прычына: $1", + "Link expire date updated": "Дата састарэння спасылкі абноўлена", + "List": "", + "Listen Port": "Порт праслухоўвання", + "Live Preview": "", + "Log ID": "ID лага", + "Logs": "Логі", + "MTU": "MTU", + "MTU format is not correct": "Фармат MTU няправільны", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "Для ўжывання зменаў IP-адраса і порта праслухоўвання неабходны ручны перазапуск WGDashboard", + "Max RTT \\(ms\\)": "", + "Memory": "", + "Memory Usage": "", + "Message": "Паведамленне", + "Min RTT \\(ms\\)": "", + "Multi-Factor Authentication \\(MFA\\)": "Шматфактарная аўтэнтыфікацыя (MFA)", + "Name": "Імя", + "Network": "", + "Never Expire": "Ніколі не састарэе", + "New Configuration": "Новая канфігурацыя", + "New Password": "Новы пароль", + "Next": "Далей", + "Nice to meet you!": "Прыемна пазнаёміцца!", + "No": "Не", + "No Encryption": "", + "No WGDashboard API Key": "Няма API-ключа WGDashboard", + "No active job at the moment\\.": "На дадзены момант няма актыўных заданняў.", + "No available IP containing": "Няма даступных IP, якія ўтрымліваюць", + "No backup yet, click the button above to create backup\\.": "Рэзервовых копій яшчэ няма, націсніце кнопку вышэй, каб стварыць рэзервовую копію.", + "No more available IP can assign": "Больш няма даступных IP для прызначэння", + "OTP from your authenticator": "OTP з вашага аўтэнтыфікатара", + "Off": "Адключана", + "Official Documentation": "", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "Ой не... Гэтая спасылка альбо састарэла, альбо несапраўдная.", + "On": "Уключана", + "Once you deleted this configuration\\:": "Пасля выдалення гэтай канфігурацыі:", + "Open File": "", + "Optional Settings": "Дадатковыя налады", + "Or you can click the link below:": "Або вы можаце націснуць на спасылку ніжэй:", + "Other Settings": "Іншыя налады", + "Password": "Пароль", + "Peer": "Пір", + "Peer Configuration File": "", + "Peer Default Settings": "Стандартныя налады піра", + "Peer Jobs": "Заданні піра", + "Peer Remote Endpoint": "Аддалены канчатковы пункт піра", + "Peer Settings": "Налады піра", + "Peer created successfully": "Пір паспяхова створаны", + "Peer data usage reset successfully": "Выкарыстанне дадзеных піра паспяхова скінута", + "Peer does not exist": "Пір не існуе", + "Peer download started": "Пачата спампоўка піра", + "Peer job deleted": "Заданне піра выдалена", + "Peer job saved": "Заданне піра захавана", + "Peer saved": "Пір захаваны", + "Peers": "Піры", + "Peers Data Usage": "Выкарыстанне дадзеных піраў", + "Peers Default Settings": "Стандартныя налады профіля", + "Peers Settings": "Налады піраў", + "Persistent Keepalive": "Пастаянны Keepalive", + "Persistent Keepalive format is not correct": "Фармат Persistent Keepalive няправільны", + "Pick Available IP": "Выбраць даступны IP", + "Pinging...": "Пінг...", + "Please fill in all required box": "Калі ласка, запоўніце ўсе абавязковыя палі", + "Please fill in the following fields to finish setup": "Калі ласка, запоўніце наступныя палі, каб скончыць наладку", + "Please provide a valid configuration name": "Калі ласка, увядзіце сапраўднае імя канфігурацыі", + "Please provide ipAddress": "Калі ласка, укажыце ipAddress", + "Please provide ipAddress and count": "Калі ласка, укажыце ipAddress і колькасць", + "Please specify amount of peers you want to add": "Калі ласка, пазначце колькасць кліентаў, якія вы хочаце дадаць", + "Please specify an IP Address (v4/v6)": "Калі ласка, пазначце IP-адрас (v4/v6)", + "Please specify job": "Калі ласка, пазначце заданне", + "Please specify one or more peers": "Калі ласка, пазначце аднаго ці больш кліентаў", + "Please specify peer and configuration": "Калі ласка, пазначце профіль і канфігурацыю", + "Port": "", + "Pre-Shared Key": "Папярэдне агучаны ключ", + "Private Key": "Прыватны ключ", + "Private key does not match with the public key": "Прыватны ключ не адпавядае публічнаму ключу", + "Processes": "", + "Protocol": "", + "Public Key": "Публічны ключ", + "QR Code": "QR-код", + "Ready": "", + "Real Time Received Data Usage": "Выкарыстанне дадзеных у рэжыме рэальнага часу (атрымана)", + "Real Time Sent Data Usage": "Выкарыстанне дадзеных у рэжыме рэальнага часу (адпраўлена)", + "Received": "Атрымана", + "Refresh": "Абнавіць", + "Refresh Interval": "Інтэрвал абнаўлення", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "Памятайце выдаліць / у канцы шляху. Напрыклад, /etc/wireguard", + "Repeat New Password": "Паўтарыце новы пароль", + "Reset": "Скінуць", + "Reset Data Usage": "Скінуць выкарыстанне дадзеных", + "Restore": "Аднавіць", + "Restore Configuration": "Аднавіць канфігурацыю", + "Restoring": "Аднаўленне...", + "Restrict Access": "Абмежаваць доступ", + "Restrict Peer": "Абмежаваць пір", + "Restricted": "Абмежаваны", + "Restricted ([0-9]{1,}) peer\\(s\\)": "Абмежавана $1 кліент(аў)", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Абмежавана $1 кліент(аў) паспяхова. Не ўдалося абмежаваць $2 кліент(аў)", + "Restricted Peers?": "Абмежаваныя піры?", + "Restricting\\.\\.\\.": "Абмежаванне...", + "Revert": "Адрабіць", + "Save": "Захаваць", + "Save Configuration": "Захаваць канфігурацыю", + "Save Peer": "Захаваць пір", + "Saving\\.\\.\\.": "Захаванне...", + "Scan QR Code with the WireGuard App to add peer": "Адсканіруйце QR-код з дапамогай праграмы WireGuard, каб дадаць профіль", + "Schedule Jobs": "Запланаваць заданні", + "Search": "", + "Search Peers\\.\\.\\.": "Пошук піраў...", + "Select All": "Выбраць усё", + "Select Peers": "Выбраць піры", + "Select a backup you want to restore": "Выберыце рэзервовую копію, якую хочаце аднавіць", + "Selected Backup": "Абраная рэзервовая копія", + "Send": "", + "Send From": "", + "Send Test Email": "", + "Sending\\.\\.\\.": "", + "Sent": "Адпраўлена", + "Sent / Received / Lost Package": "Адпраўлена / Атрымана / Страчана пакетаў", + "Server": "Сервер", + "Server List": "Спіс сервераў", + "Settings": "Налады", + "Setup": "Наладзіць", + "Share Peer": "Падзяліцца профілем", + "Share link failed to create. Reason: (.*)": "Не ўдалося стварыць спасылку для дзялення. Прычына: $1", + "Share with Email": "", + "Sharing\\.\\.\\.": "Дзяленне...", + "Sign In": "Увайсці", + "Sign Out": "Выйсці", + "Sign in session ended, please sign in again": "Сесія ўваходу скончана, калі ласка, увайдзіце зноў", + "Signing In\\.\\.\\.": "Уваход...", + "Sorry, your username or password is incorrect.": "Прабачце, ваша імя карыстальніка або пароль няправільныя.", + "Sort By": "Сартаваць па", + "Start Sharing": "Пачаць дзяленне", + "Status": "Статус", + "Step (.*)": "Крок $1", + "Stop Sharing": "Спыніць дзяленне", + "Stop Sharing\\.\\.\\.": "Спыненне дзялення...", + "Storage": "", + "Success": "Паспяхова", + "Swap Memory": "", + "Swap Memory Usage": "", + "System Status": "", + "TOTP verified!": "TOTP праверана!", + "Table": "", + "The maximum number of peers can add is (.*)": "Максімальная колькасць кліентаў, якія можна дадаць, - $1", + "Theme": "Тэма", + "This IP is not available: (.*)": "Гэты IP недаступны: $1", + "This configuration have ([0-9].*) backups": "Гэтая канфігурацыя мае $1 рэзервовых копій", + "This configuration have no backup": "Гэтая канфігурацыя не мае рэзервовых копій", + "This peer already exist": "Гэты профіль ужо існуе", + "This peer does not have any job yet\\.": "Гэты кліент яшчэ не мае заданняў.", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Гэта будзе зменена глабальна і будзе ўжывацца да QR-кодаў і файлаў канфігурацыі ўсіх кліентаў.", + "To update this configuration's name, WGDashboard will execute the following operations:": "", + "Toggle When Start Up": "Пераключэнне пры запуску", + "Tools": "Інструменты", + "Total": "Агулам", + "Total Received": "Агулам атрымана", + "Total Sent": "Агулам адпраўлена", + "Total Usage": "Агульнае выкарыстанне", + "Turning Off\\.\\.\\.": "Адключэнне...", + "Turning On\\.\\.\\.": "Уключэнне...", + "Unsaved Job": "Незахаванае заданне", + "Untitled Peer": "", + "Update Name": "", + "Update Password": "Абнавіць пароль", + "Update peer failed when saving the configuration": "Не ўдалося абнавіць профіль пры захаванні канфігурацыі", + "Update peer failed when updating Allowed IPs": "Не ўдалося абнавіць профіль пры абнаўленні дазволеных IP", + "Update peer failed when updating Pre-Shared Key": "Не ўдалося абнавіць профіль пры абнаўленні Pre-Shared Key", + "Updated at": "Абноўлена", + "Use your own Private and Public Key": "Выкарыстоўвайце свой прыватны і публічны ключ", + "Username": "Імя карыстальніка", + "WGDashboard API Keys function is disabled": "Функцыя API-ключаў WGDashboard адключана", + "WGDashboard Account Settings": "Налады акаўнта WGDashboard", + "WGDashboard Settings": "Налады WGDashboard", + "WGDashboard language update failed": "Не ўдалося абнавіць мову WGDashboard", + "Welcome to": "Сардэчна запрашаем у", + "What\\'s the body\\?": "", + "What\\'s the subject\\?": "", + "When should this API Key expire\\?": "Калі павінен састарэць гэты API-ключ?", + "Who are you sending to\\?": "", + "WireGuard Configuration Settings": "Налады канфігурацыі WireGuard", + "WireGuard Configurations": "Канфігурацыі WireGuard", + "WireGuard Configurations Settings": "Налады канфігурацый WireGuard", + "WireGuard configuration path saved": "Шлях канфігурацыі WireGuard захаваны", + "Yes": "Так", + "You can add up to (.*) peers": "Вы можаце дадаць да $1 кліентаў", + "You can visit our: ": "", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "У вас яшчэ няма канфігурацый WireGuard. Калі ласка, праверце папку з канфігурацыямі або змяніце яе ў Наладах. Па змаўчанні папка - /etc/wireguard.", + "You don't have any configuration to restore": "У вас няма канфігурацый для аднаўлення", + "You're on the latest version": "У вас апошняя версія", + "\\(At least 8 characters and make sure is strong enough!\\)": "(Не менш за 8 сімвалаў і пераканайцеся, што ён дастаткова надзейны!)", + "\\(Required for QR Code and Download\\)": "(Абавязкова для QR-кода і спампоўкі)", + "\\(Required\\)": "(Абавязкова)", + "if": "калі", + "is": "з'яўляецца", + "larger than": "больш чым", + "or": "або", + "or click the button below to download the ": "або націсніце кнопку ніжэй, каб спампаваць ", + "then": "тады", + "to add your server": "каб дадаць ваш сервер" +} \ No newline at end of file diff --git a/src/static/locales/bg-BG.json b/src/static/locales/bg-BG.json new file mode 100644 index 0000000..c8c3053 --- /dev/null +++ b/src/static/locales/bg-BG.json @@ -0,0 +1,442 @@ +{ + " file": " файла", + "(.*) Available IP Address": "$1 налични IP адреса", + "(.*) Minutes": "$1 минути", + "(.*) Seconds": "$1 секунди", + "(.*) Used": "$1 използвани", + "(.*) in group (.*)\\?": "$1 в група $2?", + "(.*) is off": "$1 е изключен", + "(.*) is on": "$1 е включен", + "([0-9].*) Backups?": "$1 архива", + "([0-9].*) Clients*": "$1 клиента", + "([0-9].*) Peers?": "$1 пиъра", + "([0-9]{1,}) Interfaces": "$1 интерфейса", + "([0-9]{1,}) Partitions": "$1 дяла", + "(v[0-9.]{1,}) is now available for update!": "$1 е налична за актуализация!", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Моля, сканирайте следния QR код, за да генерирате TOTP с избрания от вас удостоверител", + "2\\. Enter the TOTP generated by your authenticator to verify": "2. Въведете генерирания от удостоверителя TOTP за потвърждение", + "API Key": "API ключ", + "API Key created": "API ключът е създаден", + "API Key deleted": "API ключът е изтрит", + "API Keys": "API ключове", + "API Keys function is failed to disable": "Неуспешно деактивиране на функцията за API ключове", + "API Keys function is failed to enable": "Неуспешно активиране на функцията за API ключове", + "API Keys function is successfully disabled": "Функцията за API ключове е успешно деактивирана", + "API Keys function is successfully enabled": "Функцията за API ключове е успешно активирана", + "Access Remote Server": "Достъп до отдалечен сървър", + "Access Restricted": "Достъпът е ограничен", + "Account Settings": "Настройки на акаунта", + "Active Jobs": "Активни задачи", + "Add": "Добави", + "Add Peers": "Добави пиъри", + "Add Template": "Добави шаблон", + "Add Webhook": "Добави Webhook", + "Adding\\.\\.\\.": "Добавяне...", + "Address": "Адрес", + "Advanced Options": "Разширени настройки", + "All": "Всички", + "All Active Jobs": "Всички активни задачи", + "All connected peers will get disconnected": "Всички свързани пиъри ще бъдат прекъснати", + "Allow Access": "Разреши достъп", + "Allow access successfully": "Достъпът е разрешен успешно", + "Allowed IP already taken by another peer": "Разрешеният IP вече се използва от друг пиър", + "Allowed IPs": "Разрешени IP адреси", + "Allowed IPs Validation": "Валидация на разрешени IP адреси", + "Allowed IPs already taken by another peer": "Разрешените IP адреси вече се използват от друг пиър", + "Allowed IPs is invalid": "Разрешените IP адреси са невалидни", + "Allowing Access\\.\\.\\.": "Разрешаване на достъпа...", + "AmneziaWG Peer Setting": "Настройка на AmneziaWG пиър", + "Appearance": "Външен вид", + "Are you sure to delete": "Сигурни ли сте, че искате да изтриете", + "Are you sure to delete assignment for": "Сигурни ли сте, че искате да изтриете присвояването за", + "Are you sure to delete this API key\\?": "Сигурни ли сте, че искате да изтриете този API ключ?", + "Are you sure to delete this backup\\?": "Сигурни ли сте, че искате да изтриете този архив?", + "Are you sure to delete this client\\?": "Сигурни ли сте, че искате да изтриете този клиент?", + "Are you sure to delete this configuration\\?": "Сигурни ли сте, че искате да изтриете тази конфигурация?", + "Are you sure to delete this peer\\?": "Сигурни ли сте, че искате да изтриете този пиър?", + "Are you sure to restore this backup\\?": "Сигурни ли сте, че искате да възстановите този архив?", + "Assign Peer": "Присвои пиър", + "Assign Peer to Client": "Присвои пиър на клиент", + "Assign successfully!": "Успешно присвояване!", + "Assign to Clients": "Присвои на клиенти", + "Assigned Clients": "Присвоени клиенти", + "Assigned Peers": "Присвоени пиъри", + "Available Peers": "Налични пиъри", + "Average / Min / Max Round Trip Time": "Средно / Мин. / Макс. време за обратен път", + "Average RTT \\(ms\\)": "Средно RTT (мс)", + "Back": "Назад", + "Backup": "Архив", + "Backup & Restore": "Архив и възстановяване", + "Backup Date": "Дата на архива", + "Backup not selected": "Не е избран архив", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Както конфигурационният файл (.conf), така и таблицата в базата данни, свързана с тази конфигурация, ще бъдат изтрити", + "Bulk Add": "Масово добавяне", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "При масово добавяне името на всеки пиър ще бъде генерирано автоматично, а разрешеният IP ще бъде следващият свободен.", + "CPU": "Процесор", + "CPU Usage": "Използване на процесора", + "Cancel": "Отказ", + "Checking backups...": "Проверка на архивите...", + "Checking for update...": "Проверка за актуализация...", + "Clear Selection": "Изчисти избора", + "Click": "Щракнете", + "Click to change a backup": "Щракнете за смяна на архива", + "Client ID": "ID на клиент", + "Client Name": "Име на клиент", + "Client Side App": "Клиентско приложение", + "Clients": "Клиенти", + "Clients Settings": "Настройки на клиенти", + "Close": "Затвори", + "Complete": "Завърши", + "Configuration": "Конфигурация", + "Configuration File": "Конфигурационен файл", + "Configuration Name": "Име на конфигурацията", + "Configuration Settings": "Настройки на конфигурацията", + "Configuration deleted": "Конфигурацията е изтрита", + "Configuration does not exist": "Конфигурацията не съществува", + "Configuration name already exist\\.": "Името на конфигурацията вече съществува.", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "Името на конфигурацията може да съдържа само 15 малки/големи букви, цифри, долна черта, знак за равенство, знак плюс, точка и тире.", + "Configuration name is invalid. Possible reasons:": "Името на конфигурацията е невалидно. Възможни причини:", + "Configuration restored": "Конфигурацията е възстановена", + "Configuration saved": "Конфигурацията е запазена", + "Configurations": "Конфигурации", + "Configurations Directory": "Директория с конфигурации", + "Confirm \\& edit restore information": "Потвърдете и редактирайте информацията за възстановяване", + "Confirm password": "Потвърдете паролата", + "Connected": "Свързан", + "Connected Peers": "Свързани пиъри", + "Contain": "Съдържа", + "Content Type": "Тип съдържание", + "Count": "Брой", + "Create": "Създай", + "Create API Key": "Създай API ключ", + "Create Backup": "Създай архив", + "Create an account": "Създай акаунт", + "Create templates to keep track a list of available Subnets \\& Listen Ports\n": "Създайте шаблони за списък с налични подмрежи и портове", + "Creating\\.\\.\\.": "Създаване...", + "Current Password": "Текуща парола", + "Current Version:": "Текуща версия:", + "Currently the peer is not sharing": "В момента пиърът не се споделя", + "Custom Headers": "Персонализирани хедъри", + "DNS": "DNS", + "DNS format is incorrect": "Форматът на DNS е грешен", + "Danger Zone": "Опасна зона", + "Dark": "Тъмна", + "Dashboard IP Address \\& Listen Port": "IP адрес и порт на таблото", + "Dashboard Language": "Език на таблото", + "Dashboard Theme": "Тема на таблото", + "Dashboard language update failed": "Неуспешна промяна на езика на таблото", + "Data": "Данни", + "Database File": "Файл на базата данни", + "Date": "Дата", + "Datetime": "Дата и час", + "Delete": "Изтрий", + "Delete Client": "Изтрий клиент", + "Delete Configuration": "Изтрий конфигурацията", + "Delete Peer": "Изтрий пиъра", + "Delete current configuration's database table and \\.conf file": "Изтриване на таблицата в базата данни и .conf файла на текущата конфигурация", + "Deleted ([0-9]{1,}) peer\\(s\\)": "Изтрити $1 пиъра", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Успешно изтрити $1 пиъра. Неуспешно изтриване на $2 пиъра", + "Deleting...": "Изтриване...", + "Details": "Детайли", + "Disabled": "Деактивирано", + "Disconnected": "Прекъснат", + "Discord Server": "Discord сървър", + "Display": "Изглед", + "Display As": "Покажи като", + "Don't think that's a good idea": "Не мисля, че това е добра идея", + "Done": "Готово", + "Download": "Изтегли", + "Download All": "Изтегли всички", + "Download Finished": "Изтеглянето завърши", + "Download \\& QR Code is not available due to no private key set for this peer": "Изтеглянето и QR кодът не са достъпни, тъй като няма зададен частен ключ за този пиър", + "Downloading": "Изтегляне", + "Duplicate current configuration's database table and \\.conf file with the new name": "Дублиране на таблицата в базата данни и .conf файла на текущата конфигурация с новото име", + "Duration:": "Продължителност:", + "Edit": "Редактирай", + "Edit Raw Configuration File": "Редактирай суров конфигурационен файл", + "Email": "Имейл", + "Email Account": "Имейл акаунт", + "Email Body Template": "Шаблон на тялото на имейла", + "Email sent successfully!": "Имейлът е изпратен успешно!", + "Enable Webhook": "Активирай Webhook", + "Enabled": "Активирано", + "Encryption": "Криптиране", + "Ended At": "Завършена на", + "Endpoint Allowed IPs": "Разрешени IP адреси на крайна точка", + "Endpoint Allowed IPs format is incorrect": "Форматът на разрешените IP адреси на крайна точка е грешен", + "Enter Email or Name to Search": "Въведете имейл или име за търсене", + "Enter IP Address / Hostname": "Въведете IP адрес / Име на хост", + "Enter IP Address/CIDR": "Въведете IP адрес/CIDR", + "Enter a password": "Въведете парола", + "Enter an username you like": "Въведете желаното потребителско име", + "Expire At": "Изтича на", + "FROM ": "ОТ ", + "Failed": "Неуспешни", + "Failed to add peers in bulk": "Неуспешно масово добавяне на пиъри", + "Failed to allow access of peer (.*)": "Неуспешно разрешаване на достъпа на пиър $1", + "Failed to check available update": "Неуспешна проверка за актуализация", + "Failed to save configuration through WireGuard": "Неуспешно запазване на конфигурацията чрез WireGuard", + "File": "Файл", + "Filter": "Филтър", + "Generating key pairs by bulk failed": "Неуспешно масово генериране на двойки ключове", + "Geolocation": "Геолокация", + "Grid": "Мрежа", + "Groups": "Групи", + "Header": "Хедър", + "Help": "Помощ", + "Home": "Начало", + "Hop": "Скок", + "How many peers you want to add\\?": "Колко пиъра искате да добавите?", + "I don't need MFA": "Не ми трябва MFA", + "IP Address": "IP адрес", + "IP Address / Hostname": "IP адрес / Име на хост", + "IP Address/CIDR": "IP адрес/CIDR", + "IP Address/CIDR is invalid": "IP адресът/CIDR е невалиден", + "If you're sure, please type in the configuration name below and click Delete": "Ако сте сигурни, моля въведете името на конфигурацията по-долу и щракнете Изтрий", + "Include configuration file as an attachment": "Включи конфигурационния файл като прикачен", + "Invalid Port": "Невалиден порт", + "Is Alive": "Активен", + "Job": "Задача", + "Job ID": "ID на задача", + "Jobs Logs": "Логове на задачи", + "Key": "Ключ", + "Language": "Език", + "Latest Handshake Time": "Последно ръкостискане", + "Latest Session": "Последна сесия", + "Light": "Светла", + "Link expire date failed to update. Reason: (.*)": "Неуспешно актуализиране на датата на изтичане на връзката. Причина: $1", + "Link expire date updated": "Датата на изтичане на връзката е актуализирана", + "List": "Списък", + "Listen Port": "Порт за слушане", + "Live Preview": "Преглед на живо", + "Local": "Локален", + "Log ID": "ID на лог", + "Logs": "Логове", + "MTU": "MTU", + "MTU format is not correct": "Форматът на MTU е грешен", + "Manage": "Управление", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "Необходим е ръчен рестарт на WGDashboard за прилагане на промените в IP адреса и порта", + "Max RTT \\(ms\\)": "Макс. RTT (мс)", + "Memory": "Памет", + "Memory Usage": "Използване на паметта", + "Message": "Съобщение", + "Min RTT \\(ms\\)": "Мин. RTT (мс)", + "Multi-Factor Authentication \\(MFA\\)": "Многофакторно удостоверяване (MFA)", + "Name": "Име", + "Network": "Мрежа", + "Never Expire": "Без изтичане", + "New Configuration": "Нова конфигурация", + "New Password": "Нова парола", + "Next": "Напред", + "Nice to meet you!": "Приятно ми е да се запознаем!", + "No": "Не", + "No Encryption": "Без криптиране", + "No Templates": "Няма шаблони", + "No WGDashboard API Key": "Няма WGDashboard API ключ", + "No active job at the moment\\.": "В момента няма активни задачи.", + "No available IP containing": "Няма свободен IP съдържащ", + "No backup yet, click the button above to create backup\\.": "Все още няма архив, щракнете бутона по-горе за създаване.", + "No more available IP can assign": "Няма повече свободни IP адреси за задаване", + "No peer assigned to this client": "Няма пиър присвоен на този клиент", + "No result": "Няма резултат", + "Notes": "Бележки", + "OTP from your authenticator": "OTP код от удостоверителя", + "Off": "Изкл.", + "Official Documentation": "Официална документация", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "О, не... Тази връзка е изтекла или невалидна.", + "On": "Вкл.", + "Once you deleted this configuration\\:": "След като изтриете тази конфигурация:", + "Only apply to peers in this configuration": "Прилага се само за пиъри в тази конфигурация", + "Open File": "Отвори файл", + "Optional Settings": "Допълнителни настройки", + "Or you can click the link below:": "Или можете да щракнете върху връзката по-долу:", + "Other Settings": "Други настройки", + "Override Peer Settings": "Презаписване на настройките за пиър", + "Password": "Парола", + "Path": "Път", + "Payload URL": "URL за данни", + "Peer": "Пиър", + "Peer Configuration File": "Конфигурационен файл на пиър", + "Peer Created": "Пиър създаден", + "Peer Default Settings": "Настройки по подразбиране за пиър", + "Peer Deleted": "Пиър изтрит", + "Peer Details": "Детайли за пиъра", + "Peer Historical Endpoints": "Исторически крайни точки на пиъра", + "Peer Historical Sessions": "Исторически сесии на пиъра", + "Peer Jobs": "Задачи за пиъри", + "Peer Remote Endpoint": "Отдалечена крайна точка на пиъра", + "Peer Settings": "Настройки на пиъра", + "Peer Updated": "Пиър обновен", + "Peer created successfully": "Пиърът е създаден успешно", + "Peer data usage reset successfully": "Използваните данни на пиъра са нулирани успешно", + "Peer does not exist": "Пиърът не съществува", + "Peer download started": "Изтеглянето на пиъра започна", + "Peer job deleted": "Задачата за пиъра е изтрита", + "Peer job saved": "Задачата за пиъра е запазена", + "Peer saved": "Пиърът е запазен", + "Peers": "Пиъри", + "Peers Data Usage": "Използване на данни от пиъри", + "Peers Default Settings": "Настройки по подразбиране за пиъри", + "Peers Settings": "Настройки на пиъри", + "Persistent Keepalive": "Постоянен Keepalive", + "Persistent Keepalive format is not correct": "Форматът на Persistent Keepalive е грешен", + "Pick Available IP": "Избери свободен IP", + "Pinging...": "Пингване...", + "Please fill in all required box": "Моля, попълнете всички задължителни полета", + "Please fill in the following fields to finish setup": "Моля, попълнете следните полета за завършване на настройката", + "Please provide a valid configuration name": "Моля, въведете валидно име на конфигурация", + "Please provide ipAddress": "Моля, въведете IP адрес", + "Please provide ipAddress and count": "Моля, въведете IP адрес и брой", + "Please specify amount of peers you want to add": "Моля, посочете броя на пиърите, които искате да добавите", + "Please specify an IP Address (v4/v6)": "Моля, посочете IP адрес (v4/v6)", + "Please specify job": "Моля, посочете задача", + "Please specify one or more peers": "Моля, посочете един или повече пиъри", + "Please specify peer and configuration": "Моля, посочете пиър и конфигурация", + "Port": "Порт", + "Pre-Shared Key": "Предварително споделен ключ", + "Previous Sessions": "Предишни сесии", + "Private Key": "Частен ключ", + "Private key does not match with the public key": "Частният ключ не съответства на публичния", + "Processes": "Процеси", + "Protocol": "Протокол", + "Public Key": "Публичен ключ", + "QR Code": "QR код", + "Ready": "Готово", + "Real Time Received Data Usage": "Получени данни в реално време", + "Real Time Sent Data Usage": "Изпратени данни в реално време", + "Received": "Получени", + "Refresh": "Обнови", + "Refresh Interval": "Интервал на обновяване", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "Не забравяйте да премахнете / в края на пътя. Пример: /etc/wireguard", + "Remove Icon": "Премахни икона", + "Repeat New Password": "Повторете новата парола", + "Reset": "Нулиране", + "Reset Data Usage": "Нулиране на използваните данни", + "Restore": "Възстанови", + "Restore Configuration": "Възстанови конфигурация", + "Restoring": "Възстановяване", + "Restrict Access": "Ограничи достъпа", + "Restrict Peer": "Ограничи пиъра", + "Restricted": "Ограничен", + "Restricted ([0-9]{1,}) peer\\(s\\)": "Ограничени $1 пиъра", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Успешно ограничени $1 пиъра. Неуспешно ограничаване на $2 пиъра", + "Restricted Peers?": "Ограничени пиъри", + "Restricting\\.\\.\\.": "Ограничаване...", + "Revert": "Отмени", + "Save": "Запази", + "Save Configuration": "Запази конфигурацията", + "Save Peer": "Запази пиъра", + "Saving\\.\\.\\.": "Запазване...", + "Scan QR Code with the WireGuard App to add peer": "Сканирайте QR кода с приложението WireGuard, за да добавите пиъра", + "Schedule Jobs": "Планирани задачи", + "Search": "Търсене", + "Search Clients\\.\\.\\.": "Търсене на клиенти...", + "Search Icon": "Икона за търсене", + "Search Peers\\.\\.\\.": "Търсене на пиъри...", + "Select All": "Избери всички", + "Select Peers": "Избери пиъри", + "Select a backup you want to restore": "Изберете архив за възстановяване", + "Selected Backup": "Избран архив", + "Send": "Изпрати", + "Send From": "Изпрати от", + "Send Test Email": "Изпрати тестов имейл", + "Sending\\.\\.\\.": "Изпращане...", + "Sent": "Изпратени", + "Sent / Received / Lost Package": "Изпратени / Получени / Загубени пакети", + "Server": "Сървър", + "Server List": "Списък със сървъри", + "Sessions": "Сесии", + "Settings": "Настройки", + "Setup": "Настройка", + "Share Peer": "Сподели пиъра", + "Share link failed to create. Reason: (.*)": "Неуспешно създаване на връзка за споделяне. Причина: $1", + "Share with Email": "Сподели по имейл", + "Sharing\\.\\.\\.": "Споделяне...", + "Show All Peers": "Покажи всички пиъри", + "Sign In": "Вход", + "Sign Out": "Изход", + "Sign in session ended, please sign in again": "Сесията е изтекла, моля влезте отново", + "Signing In\\.\\.\\.": "Влизане...", + "Sorry, your username or password is incorrect.": "За съжаление потребителското име или паролата са грешни.", + "Sort By": "Сортирай по", + "Start Sharing": "Започни споделяне", + "Started At": "Започната на", + "Status": "Статус", + "Step (.*)": "Стъпка $1", + "Stop Sharing": "Спри споделянето", + "Stop Sharing\\.\\.\\.": "Спиране на споделянето...", + "Storage": "Съхранение", + "Subnets \\& Listen Ports Templates": "Шаблони за подмрежи и портове", + "Subscribed Actions": "Абонирани действия", + "Success": "Успех", + "Swap Memory": "Swap памет", + "Swap Memory Usage": "Използване на Swap паметта", + "System Status": "Състояние на системата", + "TOTP verified!": "TOTP е потвърден!", + "Table": "Таблица", + "Tag": "Етикет", + "Tag Peer": "Етикетирай пиър", + "Tags": "Етикети", + "The maximum number of peers can add is (.*)": "Максималният брой пиъри за добавяне е $1", + "Theme": "Тема", + "This IP is not available: (.*)": "Този IP не е наличен: $1", + "This configuration have ([0-9].*) backups": "Тази конфигурация има $1 архива", + "This configuration have no backup": "Тази конфигурация няма архив", + "This peer already exist": "Този пиър вече съществува", + "This peer does not have any job yet\\.": "Този пиър все още няма задачи.", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Това ще бъде променено глобално и ще се приложи към всички QR кодове и конфигурационни файлове на пиърите.", + "To update this configuration's name, WGDashboard will execute the following operations:": "За да промените името на тази конфигурация, WGDashboard ще изпълни следните операции:", + "Toggle When Start Up": "Превключване при стартиране", + "Tools": "Инструменти", + "Total": "Общо", + "Total Received": "Общо получени", + "Total Sent": "Общо изпратени", + "Total Usage": "Общо използване", + "Turning Off\\.\\.\\.": "Изключване...", + "Turning On\\.\\.\\.": "Включване...", + "Unsaved Job": "Незапазена задача", + "Untitled Peer": "Пиър без име", + "Update Name": "Промени името", + "Update Password": "Актуализирай паролата", + "Update peer failed when saving the configuration": "Неуспешно обновяване на пиъра при запазване на конфигурацията", + "Update peer failed when updating Allowed IPs": "Неуспешно обновяване на пиъра при актуализиране на разрешените IP адреси", + "Update peer failed when updating Pre-Shared Key": "Неуспешно обновяване на пиъра при актуализиране на предварително споделения ключ", + "Updated at": "Актуализирано на", + "Use your own Private and Public Key": "Използвайте собствен частен и публичен ключ", + "Username": "Потребител", + "Value": "Стойност", + "Verify SSL": "Верификация на SSL", + "WGDashboard API Keys function is disabled": "Функцията за WGDashboard API ключове е деактивирана", + "WGDashboard Account Settings": "Настройки на WGDashboard акаунта", + "WGDashboard Settings": "Настройки на WGDashboard", + "WGDashboard language update failed": "Неуспешна промяна на езика на WGDashboard", + "WGDashboard will sent a POST Request to the URL below with details of any subscribed events\\.": "WGDashboard ще изпрати POST заявка към URL адреса по-долу с детайли за всички абонирани събития.", + "We highly suggest to enable SSL verification": "Силно препоръчваме да активирате SSL верификацията", + "Webhooks*": "Webhook-ове", + "Welcome to": "Добре дошли в", + "What\\'s the body\\?": "Какво е съдържанието?", + "What\\'s the subject\\?": "Каква е темата?", + "When should this API Key expire\\?": "Кога трябва да изтече този API ключ?", + "Who are you sending to\\?": "До кого изпращате?", + "WireGuard Configuration Settings": "Настройки на WireGuard конфигурация", + "WireGuard Configurations": "WireGuard конфигурации", + "WireGuard Configurations Settings": "Настройки на WireGuard конфигурациите", + "WireGuard configuration path saved": "Пътят до WireGuard конфигурацията е запазен", + "Yes": "Да", + "You can add up to (.*) peers": "Можете да добавите до $1 пиъра", + "You can visit our: ": "Можете да посетите нашите: ", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Все още нямате WireGuard конфигурации. Моля, проверете конфигурационната папка или я променете в Настройки. По подразбиране папката е /etc/wireguard.", + "You don't have any configuration to restore": "Нямате конфигурация за възстановяване", + "You're on the latest version": "Използвате последната версия", + "\\(At least 8 characters and make sure is strong enough!\\)": "(Поне 8 символа и се уверете, че е достатъчно силна!)", + "\\(Required for QR Code and Download\\)": "(Изисква се за QR код и изтегляне)", + "\\(Required\\)": "(Задължително)", + "^([0-9].*) Sessions*$": "$1 сесии", + "if": "ако", + "is": "е", + "larger than": "по-голямо от", + "or": "или", + "or click the button below to download the ": "или щракнете бутона по-долу, за да изтеглите ", + "then": "тогава", + "to add your server": "за да добавите сървъра си" +} \ No newline at end of file diff --git a/src/static/locales/ca-ES.json b/src/static/locales/ca-ES.json new file mode 100644 index 0000000..6592092 --- /dev/null +++ b/src/static/locales/ca-ES.json @@ -0,0 +1,369 @@ +{ + " file": " fitxer", + "(.*) Available IP Address": "(.*) Adreces IP Disponibles", + "(.*) Minutes": "(.*) Minuts", + "(.*) Seconds": "(.*) Segons", + "(.*) Used": "(.*) Utilitzat", + "(.*) is off": "(.*) està parat", + "(.*) is on": "(.*) està encès", + "([0-9].*) Backups?": "([0-9].*) Còpia de Seguretat?", + "([0-9].*) Peers?": "([0-9].*) Peers?", + "([0-9]{1,}) Interfaces": "([0-9]{1,}) Interfícies", + "([0-9]{1,}) Partitions": "([0-9]{1,}) Particions", + "(v[0-9.]{1,}) is now available for update!": "(v[0-9.]{1,}) ara està disponible per actualitzar!", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1\\. Si us plau, escanegi el següent codi QR per generar TOTP amb l'autenticador que triï", + "2\\. Enter the TOTP generated by your authenticator to verify": "2\\. Introdueixi el TOTP generat pel seu autentitador per feriricar", + "API Key": "Clau API", + "API Key created": "Clau API creada", + "API Key deleted": "Clau API eliminada", + "API Keys": "Claus API", + "API Keys function is failed to disable": "No s'ha pogut desactivar la funció de claus API", + "API Keys function is failed to enable": "No s'ha pogut habilitar la funció de claus API", + "API Keys function is successfully disabled": "La funció de claus API s'ha descativat correctament", + "API Keys function is successfully enabled": "La funció de claus API s'ha activat correctament", + "Access Remote Server": "Accedir al servidor remot", + "Access Restricted": "Accés Restringit", + "Account Settings": "Paràmetres del Compte", + "Active Jobs": "Feines Actives", + "Add": "Afegir", + "Add Peers": "Afegir Peers", + "Adding\\.\\.\\.": "Afegint\\.\\.\\.", + "Address": "Adreça", + "Advanced Options": "Opcions Avançades", + "All Active Jobs": "Totes les Feines Actives", + "All connected peers will get disconnected": "Tots els Peers connectats es desconnectaran", + "Allow Access": "Permetre Accés", + "Allow access successfully": "Accés permès correctament", + "Allowed IP already taken by another peer": "IP permesa ja ocupada per un altre peer", + "Allowed IPs": "IPs Permeses", + "Allowed IPs Validation": "Validació d'IPs permeses", + "Allowed IPs already taken by another peer": "Les IPs permeses ja estan ocupades per un altre peer", + "Allowed IPs is invalid": "Les IPs Permeses no són vàlides", + "Allowing Access\\.\\.\\.": "Permetent Accés\\.\\.\\.", + "AmneziaWG Peer Setting": "Paràmetre del Peer d'AmneziaQG", + "Appearance": "Aparença", + "Are you sure to delete": "Està segur que vol eliminar", + "Are you sure to delete this API key\\?": "Està segur que vol eliminar aquesta clau API\\?", + "Are you sure to delete this backup\\?": "Està segur que vol suprimir aquesta còpia de seguretat\\?", + "Are you sure to delete this configuration\\?": "Segur que vol suprimir aquesta configuració?", + "Are you sure to delete this peer\\?": "Està segur que vol eliminar aquest peer\\?", + "Are you sure to restore this backup\\?": "", + "Average / Min / Max Round Trip Time": "Temps mitjà / Min / Max d'anada i tornada", + "Average RTT \\(ms\\)": "", + "Backup": "Còpia de Seguretat", + "Backup & Restore": "Còpia de seguretat & Restaurar", + "Backup Date": "Data de la Còpia de Seguretat", + "Backup not selected": "Còpia de seguretat no seleccionada", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Tant el fitxer de configuració \\(\\.conf\\) com la taula de la base de dades relacionada amb aquesta configuració s'eliminarà", + "Bulk Add": "Afegir en Massa", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "En afegir peers en massa, el nom de cada peer es generarà automàticament i la IP permesa s'assignarà a la següent IP disponible\\.", + "CPU": "CPU", + "CPU Usage": "Ús de CPU", + "Cancel": "Cancel·lar", + "Checking backups...": "Comprovant còpies de seguretat", + "Checking for update...": "Comprovant actualitzacions...", + "Clear Selection": "Netejar Selecció", + "Click": "Clic", + "Click to change a backup": "Faci clic per canviar una còpia de seguretat", + "Complete": "Completat", + "Configuration": "Configuració", + "Configuration File": "Fitxer de Configuració", + "Configuration Name": "Nom de Configuració", + "Configuration Settings": "Paràmetres de Configuracio", + "Configuration deleted": "Configuració eliminada", + "Configuration does not exist": "La configuració no existeix", + "Configuration name already exist\\.": "El nom de configuració ja existeix\\.", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "El nom de configuració només pot contenir 15 caràcters en majúsucules/minúscules, números, subratllat, signe igual, signe més, punt i guionet\\.", + "Configuration name is invalid. Possible reasons:": "Nom de configuració no vàlid. Possibles raons:", + "Configuration restored": "Configuració restaurada", + "Configuration saved": "Configuració desada", + "Configurations": "Configuracions", + "Configurations Directory": "Carpeta de configuracions", + "Confirm \\& edit restore information": "Confirmar \\& editar restaurar informació?", + "Confirm password": "Confirmar contrasenya", + "Connected Peers": "Peers Connectats", + "Contain": "Conté", + "Count": "Comptar", + "Create": "Crear", + "Create API Key": "Crear clau d'API", + "Create Backup": "Crear Còpia de Seguretat", + "Create an account": "Crear un compte", + "Creating\\.\\.\\.": "Creant\\.\\.\\.", + "Current Password": "Contrasenya Actual", + "Current Version:": "Versió Actual", + "Currently the peer is not sharing": "Actualment el peer no s'està compartint", + "DNS": "DNS", + "DNS format is incorrect": "El DNS és incorrecte", + "Danger Zone": "Zona de Perill", + "Dark": "Fosc", + "Dashboard IP Address \\& Listen Port": "L'adreça IP del tauler de control\\& Port d'Escolta", + "Dashboard Language": "Idioma del tauler de control", + "Dashboard Theme": "Tema del tauler", + "Dashboard language update failed": "Error d'actualització de l'idioma del tauler de control", + "Database File": "Fitxer de Base de Dades", + "Date": "Data", + "Delete": "Eliminar", + "Delete Configuration": "Eliminar Configuració", + "Delete Peer": "Eliminar Peer", + "Delete current configuration's database table and \\.conf file": "Eliminarla taula de base de dades i el fitxer \\.conf de la configuració actual", + "Deleted ([0-9]{1,}) peer\\(s\\)": "Els ([0-9]{1,}) peer\\(s\\) s'han suprimit", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Els ([0-9]{1,}) peer\\(s\\) s'han suprimit correctament. No s'ha pgout suprimir els ([0-9]{1,}) peer\\(s\\)", + "Deleting...": "Eliminant...", + "Disabled": "Deshabilitat", + "Discord Server": "", + "Display": "Mostrar", + "Display As": "Mostrar com a", + "Don't think that's a good idea": "No crec que sigui una bona idea", + "Done": "Fet", + "Download": "Descarregar", + "Download All": "Descarregar Tot", + "Download Finished": "Descàrrega Finalitzada", + "Download \\& QR Code is not available due to no private key set for this peer": "La descàrrega del codi QR \\& no està disponible perquè no s'ha establert cap clau privada per a aquest peer", + "Downloading": "Descarregant", + "Duplicate current configuration's database table and \\.conf file with the new name": "Duplicar la taula de base de dades i el fitxer \\.conf amb el nou nom", + "Edit": "Editar", + "Edit Raw Configuration File": "Editar el fitxer de configuració en brut", + "Email Account": "Compte de correu electrònic", + "Email Body Template": "Plantilla del cos del correu electrònic", + "Email sent successfully!": "Correu elctrònic enviat correctament!", + "Enabled": "Habilitat", + "Encryption": "Encriptació", + "Endpoint Allowed IPs": "IPs Permeses del Punt Final", + "Endpoint Allowed IPs format is incorrect": "El format de les IPs permeses del punt final és incorrecte", + "Enter IP Address / Hostname": "Introdueixi l'adreça IP / nom de l'amfitrió", + "Enter IP Address/CIDR": "Introdueixi l'adreça IP/CIDR", + "Enter a password": "Introduir una contrasenya", + "Enter an username you like": "Introdueixi un nom d'usuari que li agradi", + "Expire At": "Caduca al", + "FROM ": "DE", + "Failed": "Fallat", + "Failed to add peers in bulk": "No s'ha pogut afegir peers de manera massiva", + "Failed to allow access of peer (.*)": "No s'ha pogut permetre l'accés al peer (.*)", + "Failed to check available update": "No s'ha pogut comprovar l'actualització disponible", + "Failed to save configuration through WireGuard": "No s'ha pogut desar la configuració mitjançant WireGuard", + "File": "Fitxer", + "Filter": "Filtrar", + "Generating key pairs by bulk failed": "No s'ha pogut generar parells de claus de manera massiva", + "Geolocation": "Geolocalització", + "Grid": "Graella", + "Help": "Ajuda", + "Home": "Inici", + "Hop": "", + "How many peers you want to add\\?": "Quants peers voleu afegir\\?", + "I don't need MFA": "No necessito MFA", + "IP Address": "Adreça IP", + "IP Address / Hostname": "Adreça IP / Hostname", + "IP Address/CIDR": "Adreça IP/CDIR", + "IP Address/CIDR is invalid": "L'adreça IP/CIDR no és vàlida", + "If you're sure, please type in the configuration name below and click Delete": "Si està segur, escrigui el nom de la configuració qa continuació i faci clic a Eliminar", + "Include configuration file as an attachment": "Inclogui el fitxer de configuració com a fitxer adjunt", + "Invalid Port": "Port Invàlid", + "Is Alive": "Estpa Viu", + "Job": "Feina", + "Job ID": "Feina ID", + "Jobs Logs": "Registres de Feines", + "Key": "Clau", + "Language": "Idioma", + "Light": "Clar", + "Link expire date failed to update. Reason: (.*)": "No s'ha pogut actualitzar la data de caducitat de l'enllaç. Mtoiu: (.*)", + "Link expire date updated": "La data de caducitat de l'enllaç s'ha actualitzat", + "List": "Llista", + "Listen Port": "Port d'escolta", + "Live Preview": "Vista prèvia en directe", + "Log ID": "ID Registre", + "Logs": "Registres", + "MTU": "MTU", + "MTU format is not correct": "El format MTU no és correcte", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "Cal reiniciar manualment WGDashboard per aplicar els canvis a l'adreça IP i al Port d'Escolta", + "Max RTT \\(ms\\)": "", + "Memory": "Memòria", + "Memory Usage": "Memòria Utilitzada", + "Message": "Missatge", + "Min RTT \\(ms\\)": "", + "Multi-Factor Authentication \\(MFA\\)": "Autenticació Multifactor \\(MFA\\)", + "Name": "Nom", + "Network": "Xarxa", + "Never Expire": "Mai Expira", + "New Configuration": "Nova Configuració", + "New Password": "Nova Contrasenya", + "Next": "Seguent", + "Nice to meet you!": "Encantat de conèixer-lo", + "No": "No", + "No Encryption": "No encriptació", + "No WGDashboard API Key": "No hi ha clau API de WGDashboard", + "No active job at the moment\\.": "No hi ha cap feina activa ara mateix\\.", + "No available IP containing": "No conté cap IP disponible", + "No backup yet, click the button above to create backup\\.": "Encara no hi ha cap còpia de seguretat, faci clic al botó de dalt per crear una còpia de seguretat\\.", + "No more available IP can assign": "No hi ha cap més IP disponible per assignar", + "OTP from your authenticator": "OTP del seu autenticador", + "Off": "Parar", + "Official Documentation": "", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "Oh no\\.\\.\\. Aquest enllaç ha caducat o no és vàlid", + "On": "Iniciar", + "Once you deleted this configuration\\:": "Un cop hagi suprimit aquesta configuració\\:", + "Open File": "Obrir Fitxer", + "Optional Settings": "Paràmetres Opcionals", + "Or you can click the link below:": "O bé pot clicar l'enllaç següent:", + "Other Settings": "Altres Paràmetres", + "Password": "Contrasenya", + "Peer": "Peer", + "Peer Configuration File": "Fitxer de Configuració del Peer", + "Peer Default Settings": "Paràmetres per Defecte del Peer", + "Peer Jobs": "Feines Peer", + "Peer Remote Endpoint": "Punt Final Remot del Peer", + "Peer Settings": "Paràmetres del Peer", + "Peer created successfully": "Pere creat satisfactoriament", + "Peer data usage reset successfully": "L'ús de dades del peer s'ha reiniciat correctament", + "Peer does not exist": "El Pere no existeix", + "Peer download started": "La descàrrega del peer s'ha iniciat", + "Peer job deleted": "Feina del peer suprimida", + "Peer job saved": "Feina del peer desat", + "Peer saved": "Peter desat", + "Peers": "Peers", + "Peers Data Usage": "Ús de dades dels Peers", + "Peers Default Settings": "Paràmetres per defecte de Peers", + "Peers Settings": "Paràmetres de Peers", + "Persistent Keepalive": "Keepalive Persistent", + "Persistent Keepalive format is not correct": "El format de Keepalive persistent no és correcte", + "Pick Available IP": "Seleccioni una IP disponible", + "Pinging...": "S'està fent ping...", + "Please fill in all required box": "Si us plau, empleni tots els espais necessaris", + "Please fill in the following fields to finish setup": "Si us plau, ompli els següets camps per finalitzar la configuració", + "Please provide a valid configuration name": "Si us plau, proporcioneu un nom de configuració vàlid", + "Please provide ipAddress": "Si us plau, proporcioni l'adreça IP", + "Please provide ipAddress and count": "Si us plau, proporcioni l'adreça IP i el recompte", + "Please specify amount of peers you want to add": "Si us plau, especifiqueu la quantitat de persones del mateix nivell que vol afegir", + "Please specify an IP Address (v4/v6)": "Si us plau, espqcifiqui una adreça IP (v4/v6)", + "Please specify job": "Si us plau, especifiqui la tasca", + "Please specify one or more peers": "Si us plau, especifiqueu un o més peers", + "Please specify peer and configuration": "Si us plau, esficiqui el peer i la configuració", + "Port": "Port", + "Pre-Shared Key": "Clau Precompartida", + "Private Key": "Clau Privada", + "Private key does not match with the public key": "La clau privada no coincideix amb la clau pública", + "Processes": "Processos", + "Protocol": "Protocol", + "Public Key": "Clau Pública", + "QR Code": "Codi QR", + "Ready": "Preparat", + "Real Time Received Data Usage": "Ús de Dades Rebudes en Temps Real", + "Real Time Sent Data Usage": "Úsde Dades Eviades en Temps Real", + "Received": "Rebut", + "Refresh": "Refrescar", + "Refresh Interval": "Interval de Refresc", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "Recordi eliminar / al final de la vostra ruta. p. ex. /etc/wireguard", + "Repeat New Password": "Repeteixi la Nova Contrasenya", + "Reset": "Restablir", + "Reset Data Usage": "Restablir l'Ús de Dades", + "Restore": "Restaurar", + "Restore Configuration": "Restaurar Configuració", + "Restoring": "Restaurant", + "Restrict Access": "Àrea Restringida", + "Restrict Peer": "Restringir Peer", + "Restricted": "Restringit", + "Restricted ([0-9]{1,}) peer\\(s\\)": "Els ([0-9]{1,}) peer\\(s\\) s'han restringit", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Els ([0-9]{1,}) peer\\(s\\) s'han restringit correctament. No s'ha pogut restringuir els ([0-9]{1,}) peer\\(s\\)", + "Restricted Peers?": "Peers restringuits?", + "Restricting\\.\\.\\.": "Restringint\\.\\.\\.", + "Revert": "Desfer", + "Save": "Desar", + "Save Configuration": "Desar Configuració", + "Save Peer": "Desar Peer", + "Saving\\.\\.\\.": "Desant\\.\\.\\.", + "Scan QR Code with the WireGuard App to add peer": "Escanegi el codi QR amb l'aplicació WireGuard per afegir el peer", + "Schedule Jobs": "Feines Programades", + "Search": "Cercar", + "Search Peers\\.\\.\\.": "Cercar Peers\\.\\.\\.", + "Select All": "Seleccionar Tot", + "Select Peers": "Seleccioni Peers", + "Select a backup you want to restore": "Seleccioni una còpia de seguretat que vulgui restaurar", + "Selected Backup": "Còpia de seguretat seleccionada", + "Send": "Enviar", + "Send From": "Enviar des de", + "Send Test Email": "Enviar correu electrònic de prova", + "Sending\\.\\.\\.": "Enviant\\.\\.\\.", + "Sent": "Enviat", + "Sent / Received / Lost Package": "Enviat / Rebut / Paquets Perduts", + "Server": "Servidor", + "Server List": "Llista de servidors:", + "Settings": "Paràmetres", + "Setup": "Configuració", + "Share Peer": "Compartir Peer", + "Share link failed to create. Reason: (.*)": "No s'ha pogut crear l'enllaç de compartició. Motiu: (.*)", + "Share with Email": "Compartir per correu electrònic", + "Sharing\\.\\.\\.": "Compartint\\.\\.\\.", + "Sign In": "Iniciar sessió", + "Sign Out": "Tancar sessió", + "Sign in session ended, please sign in again": "La sessió d'inici ha finalitzat. Si us plau, torni a iniciar", + "Signing In\\.\\.\\.": "Iniciant sessió\\.\\.\\.", + "Sorry, your username or password is incorrect.": "Ho sentim, el seu nom d'usuari o contrasenya són incorrectes", + "Sort By": "Ordenar Per", + "Start Sharing": "Començar a Compartir", + "Status": "Estatus", + "Step (.*)": "Pas (.*)", + "Stop Sharing": "Para de Compartir", + "Stop Sharing\\.\\.\\.": "Parar de Compartir\\.\\.\\.", + "Storage": "Emmagatzematge", + "Success": "Èxit", + "Swap Memory": "Memòria Swap", + "Swap Memory Usage": "Ús de Memoria Swap", + "System Status": "Estat del sistema", + "TOTP verified!": "TOTP verificat!", + "Table": "", + "The maximum number of peers can add is (.*)": "El màxim nombre de peers que es poden afegir és (.*)", + "Theme": "Tema", + "This IP is not available: (.*)": "Aquesta IP no està disponible: (.*)", + "This configuration have ([0-9].*) backups": "Aquesta configuració té ([0-9].*) còpies de seguretat", + "This configuration have no backup": "Aquesta configuració no té cap còpia de seguretat", + "This peer already exist": "Aquest peer ja existeix", + "This peer does not have any job yet\\.": "Aquest peer encara no te cap feina\\.", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Això es canviarà globalment i s'aplicarà a tots els codis QR i fitxers de configuració dels peer.", + "To update this configuration's name, WGDashboard will execute the following operations:": "Per actualitzar el nom d'aquesta configuració, WGDashboard executarà les operacions següents:", + "Toggle When Start Up": "Canviar Quan s'Iniciï", + "Tools": "Eines", + "Total": "Total", + "Total Received": "Total Rebut", + "Total Sent": "Total Enviat", + "Total Usage": "Total usat", + "Turning Off\\.\\.\\.": "S'estat apagant\\.\\.\\.", + "Turning On\\.\\.\\.": "S'està encenent\\.\\.\\.", + "Unsaved Job": "Feina no desada", + "Untitled Peer": "Peer sense títol", + "Update Name": "Actualitzar Nom", + "Update Password": "Actualitzar Contrasenya", + "Update peer failed when saving the configuration": "L'actualització del peer ha fallat en desar la configuració", + "Update peer failed when updating Allowed IPs": "L'actualització del peer ha fallat en actualitzar les IP permeses", + "Update peer failed when updating Pre-Shared Key": "L'actualització del peer ha fallat en actualitzar la clau precompartida", + "Updated at": "Actualitzat a", + "Use your own Private and Public Key": "Utilitzi la seva pròpia Clau Privada i Pública", + "Username": "Usuari", + "WGDashboard API Keys function is disabled": "La funció de claus API de WGDashboard està desactivada", + "WGDashboard Account Settings": "Paràmetres el Compte WGDashboard", + "WGDashboard Settings": "Paràmetres del WGDashboard", + "WGDashboard language update failed": "L'actualització de l'idioma de WGDashboard ha fallat", + "Welcome to": "Benvingut", + "What\\'s the body\\?": "", + "What\\'s the subject\\?": "", + "When should this API Key expire\\?": "Quan hauria de caducar aquesta clau API\\?", + "Who are you sending to\\?": "", + "WireGuard Configuration Settings": "Paràmetres de Configuració de WireGuard", + "WireGuard Configurations": "Configuració de WireGuard", + "WireGuard Configurations Settings": "Paràmetres de Configuració del WireGuard", + "WireGuard configuration path saved": "Ruta de configuracio del WireGuard desada", + "Yes": "Sí", + "You can add up to (.*) peers": "Pot afegir fins a (.*) peers", + "You can visit our: ": "", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Encara no teniu cap configuració de WireGuard. Si us plau, comproveu la carpeta de configuració o canvieu-la a Configuració. Per defecte, la carpeta és /etc/wireguard.", + "You don't have any configuration to restore": "No té cap configuració per restaurar", + "You're on the latest version": "Està a l'última versió", + "\\(At least 8 characters and make sure is strong enough!\\)": "\\(Com a mínim 8 caràcters i asseguri's que és suficietment forta!\\)", + "\\(Required for QR Code and Download\\)": "\\(Obligatori pel Codi QR i la Descàrrega\\)", + "\\(Required\\)": "\\(Obligatori\\)", + "if": "si", + "is": "és", + "larger than": "més llarg que", + "or": "o", + "or click the button below to download the ": "o faci clic al botó següent per descarrer el ", + "then": "aleshores", + "to add your server": "per afegir el vostre servidor" +} \ No newline at end of file diff --git a/src/static/locales/cs-CZ.json b/src/static/locales/cs-CZ.json new file mode 100644 index 0000000..1a5cf3d --- /dev/null +++ b/src/static/locales/cs-CZ.json @@ -0,0 +1,369 @@ +{ + " file": " souboru", + "(.*) Available IP Address": "$1 dostupná adresa", + "(.*) Minutes": "$1 minut", + "(.*) Seconds": "$1 sekund", + "(.*) Used": "", + "(.*) is off": "$1 je vypnuto", + "(.*) is on": "$1 je zapnuto", + "([0-9].*) Backups?": "$1 záloh?", + "([0-9].*) Peers?": "$1 peerů?", + "([0-9]{1,}) Interfaces": "", + "([0-9]{1,}) Partitions": "", + "(v[0-9.]{1,}) is now available for update!": "Aktualizace na verzi $1 je nyní k dispozici!", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Pro nastavení TOTP naskenujte následující QR kód ve vašem oblíbeném autentizátoru", + "2\\. Enter the TOTP generated by your authenticator to verify": "2. Vložte TOTP vygenerovaný vaším autentizátorem pro ověření správnosti", + "API Key": "API klíč", + "API Key created": "API klíč vytvořen", + "API Key deleted": "API klíč smazán", + "API Keys": "API klíče", + "API Keys function is failed to disable": "Funkci API klíčů se nepodařilo vypnout", + "API Keys function is failed to enable": "Funkci API klíčů se nepodařilo povolit", + "API Keys function is successfully disabled": "Funke API klíčů je vypnuta", + "API Keys function is successfully enabled": "Funkce API klíčů je povolena", + "Access Remote Server": "Připojit k vzdálenému serveru", + "Access Restricted": "Přístup omezen", + "Account Settings": "Nastavení účtu", + "Active Jobs": "Aktivní úkoly", + "Add": "Přidat", + "Add Peers": "Přidat peery", + "Adding\\.\\.\\.": "Přidávám...", + "Address": "Adresa", + "Advanced Options": "", + "All Active Jobs": "Všechny aktivní úkoly", + "All connected peers will get disconnected": "Všichni připojení peers budou odpojeni", + "Allow Access": "Povolit přístup", + "Allow access successfully": "Přístup úspěšně povolen", + "Allowed IP already taken by another peer": "Povolená IP je již zabraná jiným peerem", + "Allowed IPs": "Povolené IP adresy", + "Allowed IPs Validation": "", + "Allowed IPs already taken by another peer": "Povolené IP jsou již obsazeny jiným peerem", + "Allowed IPs is invalid": "Povolené IP jsou neplatné", + "Allowing Access\\.\\.\\.": "Povoluji přístup...", + "AmneziaWG Peer Setting": "", + "Appearance": "Vzhled", + "Are you sure to delete": "Určitě chcete smazat", + "Are you sure to delete this API key\\?": "Určitě chcete smazat tento API klíč?", + "Are you sure to delete this backup\\?": "Určitě chcete smazat tuto zálohu?", + "Are you sure to delete this configuration\\?": "Určitě chcete smazat tuto konfiguraci?", + "Are you sure to delete this peer\\?": "Určitě chcete smazat tohoto peera?", + "Are you sure to restore this backup\\?": "", + "Average / Min / Max Round Trip Time": "Průměr / Min / Max / Max okružní cesta", + "Average RTT \\(ms\\)": "", + "Backup": "Záloha", + "Backup & Restore": "Zálohy a obnovení", + "Backup Date": "Datum zálohy", + "Backup not selected": "Záloha není zvolena", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Konfigurační soubor (.conf) i příslušná databázová tabulka budou smazané", + "Bulk Add": "Hromadný import", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Při hromadném importu bude jméno každého peera vygenerované automaticky, a povolená IP adresa bude nastavena na další v pořadí", + "CPU": "", + "CPU Usage": "", + "Cancel": "Zrušit", + "Checking backups...": "Konntrola záloh...", + "Checking for update...": "Ověření aktualizací...", + "Clear Selection": "Zrušit výběr", + "Click": "Klikněte", + "Click to change a backup": "Klikněte pro změnu zálohy", + "Complete": "Hotovo", + "Configuration": "Konfigurace", + "Configuration File": "", + "Configuration Name": "Název konfigurace", + "Configuration Settings": "Nastavení konfigurací", + "Configuration deleted": "Konfigurace smazána", + "Configuration does not exist": "Konfigurace neexistuje", + "Configuration name already exist\\.": "Název konfigurace již existuje", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "Název konfigurace smí obsahovat pouze 15 alfanumerických znaků, podtržítko, rovnítko, plus, tečku a pomlčku.", + "Configuration name is invalid. Possible reasons:": "Název konfigurace je neplatný. Možné důvody:", + "Configuration restored": "Konfigurace obnovena", + "Configuration saved": "Konfigurace uložena", + "Configurations": "Konfigurace", + "Configurations Directory": "Adresář konfigurací", + "Confirm \\& edit restore information": "Potvrdit a upravit údaje obnovení", + "Confirm password": "Potvrdit heslo", + "Connected Peers": "Připojení peers", + "Contain": "Obsahuje", + "Count": "Počet", + "Create": "Vytvořit", + "Create API Key": "Vytvořit API klíč", + "Create Backup": "Vytvořit zálohu", + "Create an account": "Vytvořit účet", + "Creating\\.\\.\\.": "Tvořím...", + "Current Password": "Současné heslo", + "Current Version:": "Aktuální verze:", + "Currently the peer is not sharing": "Peer momentálně nesdílí", + "DNS": "DNS", + "DNS format is incorrect": "DNS formát je neplatný", + "Danger Zone": "", + "Dark": "Tmavá", + "Dashboard IP Address \\& Listen Port": "Dashboard IP adresa a otevřený port", + "Dashboard Language": "Jazyk dashboardu", + "Dashboard Theme": "Téma Dashboardu", + "Dashboard language update failed": "Aktualizace jazyka dashboardu selhalo", + "Database File": "Databázový soubor", + "Date": "Datum", + "Delete": "Smazat", + "Delete Configuration": "Smazat konfiguraci", + "Delete Peer": "Smazat peera", + "Delete current configuration's database table and \\.conf file": "", + "Deleted ([0-9]{1,}) peer\\(s\\)": "Smazáno $1 peer/-ů", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Smazáno $1 peer/-ů. Nezdařilo se smazat $2 peer/-ů", + "Deleting...": "Mažu...", + "Disabled": "Zakázáno", + "Discord Server": "", + "Display": "Zobrazit", + "Display As": "", + "Don't think that's a good idea": "To není dobrý nápad", + "Done": "Dokončeno", + "Download": "", + "Download All": "Stáhnout vše", + "Download Finished": "Stahování dokončeno", + "Download \\& QR Code is not available due to no private key set for this peer": "Stažení a QR kód nejsou k dispozici, peer nemá nastavený soukromý klíč.", + "Downloading": "Stahování", + "Duplicate current configuration's database table and \\.conf file with the new name": "", + "Edit": "Upravit", + "Edit Raw Configuration File": "", + "Email Account": "", + "Email Body Template": "", + "Email sent successfully!": "", + "Enabled": "Povoleno", + "Encryption": "", + "Endpoint Allowed IPs": "Povolené IP adresy koncového bodu", + "Endpoint Allowed IPs format is incorrect": "Neplatný formát povolených IP koncového bodu", + "Enter IP Address / Hostname": "Zadejte IP adresu / hostname", + "Enter IP Address/CIDR": "Zadejte IP adresu/CIDR", + "Enter a password": "Zadejte heslo", + "Enter an username you like": "Zadejte uživatelské jméno", + "Expire At": "Vyprší", + "FROM ": "OD", + "Failed": "Neúspěch", + "Failed to add peers in bulk": "Selhal hromadný import peerů", + "Failed to allow access of peer (.*)": "Nezdařilo se povolit přístup peera $1", + "Failed to check available update": "Nepodařilo se zkontrolovat dostupnost aktualizací", + "Failed to save configuration through WireGuard": "Selhalo uložení konfigurace skrz WireGuard", + "File": "Soubor", + "Filter": "Filtrovat", + "Generating key pairs by bulk failed": "Hromadné generování párových klíčů selhalo", + "Geolocation": "Geolokace", + "Grid": "", + "Help": "Nápověda", + "Home": "Domů", + "Hop": "", + "How many peers you want to add\\?": "Kolik peerů chcete přidat?", + "I don't need MFA": "Nepotřebuji MFA", + "IP Address": "IP adresa", + "IP Address / Hostname": "IP adresa / hostname", + "IP Address/CIDR": "IP adresa/CIDR", + "IP Address/CIDR is invalid": "IP adresa/CIDR je neplatná", + "If you're sure, please type in the configuration name below and click Delete": "Pokud jste si jisti, vypište níže název konfigurace a klikněte Smazat", + "Include configuration file as an attachment": "", + "Invalid Port": "Neplatný port", + "Is Alive": "Je naživu", + "Job": "Úkol", + "Job ID": "ID úkolu", + "Jobs Logs": "Logy úkolů", + "Key": "Klíč", + "Language": "Jazyk", + "Light": "Světlá", + "Link expire date failed to update. Reason: (.*)": "Datum vypršení odkazu se nepodařilo aktualizovat. Důvod: $1", + "Link expire date updated": "Datum vypršení odkazu aktualizováno", + "List": "", + "Listen Port": "Otevřený port", + "Live Preview": "", + "Log ID": "ID logu", + "Logs": "Logy", + "MTU": "MTU", + "MTU format is not correct": "MTU formát je neplatný", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "Manuální restart WGDashboardu je nutný pro aplikaci změn IP adres a portů", + "Max RTT \\(ms\\)": "", + "Memory": "", + "Memory Usage": "", + "Message": "Zpráva", + "Min RTT \\(ms\\)": "", + "Multi-Factor Authentication \\(MFA\\)": "Vícefaktorové ověření (MFA)", + "Name": "Jméno", + "Network": "", + "Never Expire": "Bez expirace", + "New Configuration": "Nová konfigurace", + "New Password": "Nové heslo", + "Next": "Další", + "Nice to meet you!": "Rádi vás poznáváme!", + "No": "Ne", + "No Encryption": "", + "No WGDashboard API Key": "Žádný WGDashboard API klíč", + "No active job at the moment\\.": "Žádný úkol v současnosti neprobíhá.", + "No available IP containing": "Žádná dostupná IP obsahující", + "No backup yet, click the button above to create backup\\.": "Žádná dostupná záloha, klikněte na tlačítko výše pro vytvoření", + "No more available IP can assign": "Žádné zbylé IP adresy k přiřazení", + "OTP from your authenticator": "Jednorázové heslo (OTP) z vašeho autentizátoru", + "Off": "Vypnuto", + "Official Documentation": "", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "Bohužel, tento odkaz již buď vypršel, nebo je neplatný.", + "On": "Zapnuto", + "Once you deleted this configuration\\:": "Jakmile smažete tuto konfiguraci:", + "Open File": "", + "Optional Settings": "Volitelná nastavení", + "Or you can click the link below:": "Nebo klikněte na odkaz níže:", + "Other Settings": "Jiná nastavení", + "Password": "Heslo", + "Peer": "Peer", + "Peer Configuration File": "", + "Peer Default Settings": "Úvodní nastavení peerů", + "Peer Jobs": "Peer úkoly", + "Peer Remote Endpoint": "Koncový bod peera", + "Peer Settings": "Nastavení peers", + "Peer created successfully": "Peer úspěšně vytvořen", + "Peer data usage reset successfully": "Datová spotřeba peera úspěšně resetována", + "Peer does not exist": "Peer neexistuje", + "Peer download started": "Download peera zahájen", + "Peer job deleted": "Peer úkol smazán", + "Peer job saved": "Peer úkol uložen", + "Peer saved": "Peer uložen", + "Peers": "Peers", + "Peers Data Usage": "Datová spotřeba peerů", + "Peers Default Settings": "Standardní nastavení peerů", + "Peers Settings": "Nastavení peerů", + "Persistent Keepalive": "Persistentní keepalive", + "Persistent Keepalive format is not correct": "Neplatný formát persistentních keepalives", + "Pick Available IP": "Vyberte dostupnou IP", + "Pinging...": "Posílám ping...", + "Please fill in all required box": "Prosím, vyplňte všechna pole", + "Please fill in the following fields to finish setup": "Prosím, vyplňte následující pole pro dokončení nastavení", + "Please provide a valid configuration name": "Prosím, uveďte platný název konfigurace", + "Please provide ipAddress": "Prosím, uveďte IP adresu", + "Please provide ipAddress and count": "Prosím, uveďte IP adresu a počet", + "Please specify amount of peers you want to add": "Uveďte počet peerů, které chcete přidat", + "Please specify an IP Address (v4/v6)": "Prosím, uveďte IP adresu (v4/v6)", + "Please specify job": "Prosím, uveďte úkol", + "Please specify one or more peers": "Specifikujte jednoho či více peerů", + "Please specify peer and configuration": "Prosím, uveďte peera a konfiguraci", + "Port": "", + "Pre-Shared Key": "Před-sdílený klíč", + "Private Key": "Soukromý klíč", + "Private key does not match with the public key": "Soukromý klíč neodpovídá veřejnému klíči", + "Processes": "", + "Protocol": "", + "Public Key": "Veřejný klíč", + "QR Code": "QR kód", + "Ready": "", + "Real Time Received Data Usage": "Aktuální rychlost příchozích dat", + "Real Time Sent Data Usage": "Aktuální rychlost odchozích dat", + "Received": "Přijato", + "Refresh": "Aktualizovat", + "Refresh Interval": "Aktualizační interval", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "Nezapomeňte odstranit lomítko na konci cesty, např. /etc/wireguard", + "Repeat New Password": "Zopakujte nové heslo", + "Reset": "Resetovat", + "Reset Data Usage": "Resetovat objemy", + "Restore": "Obnovit", + "Restore Configuration": "Obnovit konfiguraci", + "Restoring": "Obnovuji", + "Restrict Access": "Omezit přístup", + "Restrict Peer": "Omezit peera", + "Restricted": "Omezeno", + "Restricted ([0-9]{1,}) peer\\(s\\)": "Omezeno $1 peer/-ů", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Omezeno $1 peer/-ů. Nezdařilo se omezit $2 peer/-ů", + "Restricted Peers?": "Omezený peer?", + "Restricting\\.\\.\\.": "Omezuji...", + "Revert": "Revertovat", + "Save": "Uložit", + "Save Configuration": "Uložit konfiguraci", + "Save Peer": "Uložit peera", + "Saving\\.\\.\\.": "Ukládám...", + "Scan QR Code with the WireGuard App to add peer": "Naskenujte QR kód ve WireGuard aplikaci pro přidání peera", + "Schedule Jobs": "Naplánovat úkol", + "Search": "", + "Search Peers\\.\\.\\.": "Hledat peers...", + "Select All": "Vybrat vše", + "Select Peers": "Zvolit peery", + "Select a backup you want to restore": "Zvolte zálohu k obnovení", + "Selected Backup": "Zvolená záloha", + "Send": "", + "Send From": "", + "Send Test Email": "", + "Sending\\.\\.\\.": "", + "Sent": "Odesláno", + "Sent / Received / Lost Package": "Posláno / přijato / ztraceno paketů", + "Server": "Server", + "Server List": "Seznam serverů", + "Settings": "Nastavení", + "Setup": "Nastavení", + "Share Peer": "Sdílet peera", + "Share link failed to create. Reason: (.*)": "Sdílecí odkaz se nepodařilo vytvořit. Důvod: $1", + "Share with Email": "", + "Sharing\\.\\.\\.": "Sdílím...", + "Sign In": "Přihlásit", + "Sign Out": "Odhlásit", + "Sign in session ended, please sign in again": "Přihlášení vypršelo, přihlašte se znovu, prosím", + "Signing In\\.\\.\\.": "Přihlašování...", + "Sorry, your username or password is incorrect.": "Bohužel, vaše uživatelské jméno či heslo je neplatné.", + "Sort By": "Seřadit dle", + "Start Sharing": "Zahájit sdílení", + "Status": "Stav", + "Step (.*)": "Krok $1", + "Stop Sharing": "Ukončit sdílení", + "Stop Sharing\\.\\.\\.": "Ukončit sdílení...", + "Storage": "", + "Success": "Úspěch", + "Swap Memory": "", + "Swap Memory Usage": "", + "System Status": "", + "TOTP verified!": "TOTP ověřeno!", + "Table": "", + "The maximum number of peers can add is (.*)": "Maximální počet peerů, které lze přidat, je $1", + "Theme": "Téma", + "This IP is not available: (.*)": "Tato IP není dostupná: $1", + "This configuration have ([0-9].*) backups": "Tato konfigurace má $1 záloh", + "This configuration have no backup": "Tato konfigurace nemá žádnou zálou", + "This peer already exist": "Tento peer již existuje", + "This peer does not have any job yet\\.": "Tento peer ještě nemá žádný úkol.", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Toto bude změněno globálně, a bude platit pro QR kódy a konfigurační soubory všech peerů", + "To update this configuration's name, WGDashboard will execute the following operations:": "", + "Toggle When Start Up": "Přepnout při startu", + "Tools": "Nástroje", + "Total": "Celkem", + "Total Received": "Celkem přijato", + "Total Sent": "Celkem odesláno", + "Total Usage": "Celkem přeneseno", + "Turning Off\\.\\.\\.": "Vypínám...", + "Turning On\\.\\.\\.": "Zapínám...", + "Unsaved Job": "Neuložený úkol", + "Untitled Peer": "", + "Update Name": "", + "Update Password": "Aktualizace hesla", + "Update peer failed when saving the configuration": "Aktualizace peera selhala při ukládání konfigurace", + "Update peer failed when updating Allowed IPs": "Aktualizace peera selhala při aktualizování povolených IP", + "Update peer failed when updating Pre-Shared Key": "Aktualizace peera selhala při aktualizování před-sdíleného klíče", + "Updated at": "Aktualizováno", + "Use your own Private and Public Key": "Použít vlastní soukromý a veřejný klíč", + "Username": "Uživatelské jméno", + "WGDashboard API Keys function is disabled": "Funkce WGDashboard API klíčů je vypnuta", + "WGDashboard Account Settings": "Nastavení účtu WGDashboard", + "WGDashboard Settings": "Nastavení WGDashboard", + "WGDashboard language update failed": "Aktualizace WGDashboard jazyka selhala", + "Welcome to": "Vítejte v", + "What\\'s the body\\?": "", + "What\\'s the subject\\?": "", + "When should this API Key expire\\?": "Kdy má tento API klíč vypršet?", + "Who are you sending to\\?": "", + "WireGuard Configuration Settings": "Nastavení WireGuard konfigurace", + "WireGuard Configurations": "WireGuard konfigurace", + "WireGuard Configurations Settings": "Nastavení WireGuard konfigurací", + "WireGuard configuration path saved": "Cesta k WireGuard konfiguracím je uložena", + "Yes": "Ano", + "You can add up to (.*) peers": "Můžete přidat nanejvýš $1 peerů", + "You can visit our: ": "", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Ještě nemáte žádné WireGuard konfigurace. Zkontrolujte adresář konfigurací nebo si jej změňte v Nastaveních. Tento adresář je zvyčejně /etc/wireguard.", + "You don't have any configuration to restore": "Nemáte žádnou konfiguraci k obnovení", + "You're on the latest version": "Používáte nejnovější verzi", + "\\(At least 8 characters and make sure is strong enough!\\)": "(Alespoň 8 znaků s dostatečnou složitostí)", + "\\(Required for QR Code and Download\\)": "(Nutné pro QR kód a stažení)", + "\\(Required\\)": "(Povinné)", + "if": "pokud", + "is": "je", + "larger than": "více než", + "or": "nebo", + "or click the button below to download the ": "nebo klikněte na tlačítko níže pro stažení ", + "then": "pak", + "to add your server": "pro přidání vašeho serveru" +} \ No newline at end of file diff --git a/src/static/locales/de-DE.json b/src/static/locales/de-DE.json new file mode 100644 index 0000000..7b1925b --- /dev/null +++ b/src/static/locales/de-DE.json @@ -0,0 +1,369 @@ +{ + " file": " Datei herunterzuladen", + "(.*) Available IP Address": "$1 verfügbare IP-Adresse", + "(.*) Minutes": "$1 Minuten", + "(.*) Seconds": "$1 Sekunden", + "(.*) Used": "", + "(.*) is off": "$1 ist ausgeschaltet", + "(.*) is on": "$1 ist eingeschaltet", + "([0-9].*) Backups?": "$1 Backups", + "([0-9].*) Peers?": "$1 Peers?", + "([0-9]{1,}) Interfaces": "", + "([0-9]{1,}) Partitions": "", + "(v[0-9.]{1,}) is now available for update!": "Version $1 ist jetzt zum Update verfügbar!", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Bitte scanne den folgenden QR-Code, um ein TOTP mit deinem Authentifikator zu erstellen", + "2\\. Enter the TOTP generated by your authenticator to verify": "2. Gib das von deinem Authentifikator generierte TOTP ein, um es zu verifizieren", + "API Key": "API-Schlüssel", + "API Key created": "API-Schlüssel erstellt", + "API Key deleted": "API-Schlüssel gelöscht", + "API Keys": "API-Schlüssel", + "API Keys function is failed to disable": "API-Schlüsselfunktion konnte nicht deaktiviert werden", + "API Keys function is failed to enable": "API-Schlüsselfunktion konnte nicht aktiviert werden", + "API Keys function is successfully disabled": "API-Schlüsselfunktion wurde erfolgreich deaktiviert", + "API Keys function is successfully enabled": "API-Schlüsselfunktion wurde erfolgreich aktiviert", + "Access Remote Server": "Zugriff auf Remote-Server", + "Access Restricted": "Zugriff eingeschränkt", + "Account Settings": "Kontoeinstellungen", + "Active Jobs": "Aktive Aufgaben", + "Add": "Hinzufügen", + "Add Peers": "Peers hinzufügen", + "Adding\\.\\.\\.": "Füge hinzu...", + "Address": "Adresse", + "Advanced Options": "", + "All Active Jobs": "Alle aktiven Aufgaben", + "All connected peers will get disconnected": "Alle verbundenen Peers werden getrennt", + "Allow Access": "Zugriff erlauben", + "Allow access successfully": "Zugriff erfolgreich erlaubt", + "Allowed IP already taken by another peer": "Zugelassene IP bereits von einem anderen Peer belegt", + "Allowed IPs": "Erlaubte IPs", + "Allowed IPs Validation": "", + "Allowed IPs already taken by another peer": "Erlaubte IPs sind bereits von einem anderen Peer belegt", + "Allowed IPs is invalid": "Erlaubte IPs sind ungültig", + "Allowing Access\\.\\.\\.": "Erlaube Zugriff...", + "AmneziaWG Peer Setting": "", + "Appearance": "Aussehen", + "Are you sure to delete": "Sind Sie sicher, dass Sie löschen möchten", + "Are you sure to delete this API key\\?": "Bist du sicher, dass du diesen API-Schlüssel löschen möchtest?", + "Are you sure to delete this backup\\?": "Sind Sie sicher, dass Sie dieses Backup löschen möchten?", + "Are you sure to delete this configuration\\?": "Sind Sie sicher, dass Sie diese Konfiguration löschen möchten?", + "Are you sure to delete this peer\\?": "Sind Sie sicher, dass Sie diesen Peer löschen möchten?", + "Are you sure to restore this backup\\?": "", + "Average / Min / Max Round Trip Time": "Durchschnittliche / Minimale / Maximale Antwortzeit", + "Average RTT \\(ms\\)": "", + "Backup": "Backup", + "Backup & Restore": "Backup & Wiederherstellung", + "Backup Date": "Backup-Datum", + "Backup not selected": "Kein Backup ausgewählt", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Sowohl die Konfigurationsdatei (.conf) als auch die zugehörige Datenbanktabelle werden gelöscht", + "Bulk Add": "Massenerstellung", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Bei der Massenerstellung wird der Name jedes Peers automatisch generiert, und die erlaubte IP wird der nächsten verfügbaren IP zugewiesen.", + "CPU": "", + "CPU Usage": "", + "Cancel": "Abbrechen", + "Checking backups...": "Backups werden überprüft...", + "Checking for update...": "Suche nach Updates...", + "Clear Selection": "Auswahl löschen", + "Click": "Klicken", + "Click to change a backup": "Klicken, um ein Backup zu ändern", + "Complete": "Abschließen", + "Configuration": "Konfiguration", + "Configuration File": "", + "Configuration Name": "Konfigurationsname", + "Configuration Settings": "Konfigurationseinstellungen", + "Configuration deleted": "Konfiguration gelöscht", + "Configuration does not exist": "Konfiguration existiert nicht", + "Configuration name already exist\\.": "Konfigurationsname existiert bereits.", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "Der Konfigurationsname darf nur 15 Zeichen enthalten, bestehend aus Groß-/Kleinbuchstaben, Zahlen, Unterstrich, Gleichheitszeichen, Pluszeichen, Punkt und Bindestrich.", + "Configuration name is invalid. Possible reasons:": "Der Konfigurationsname ist ungültig. Mögliche Gründe:", + "Configuration restored": "Konfiguration wiederhergestellt", + "Configuration saved": "Konfiguration gespeichert", + "Configurations": "Konfigurationen", + "Configurations Directory": "Konfigurationsverzeichnis", + "Confirm \\& edit restore information": "Wiederherstellungsinformationen bestätigen & bearbeiten", + "Confirm password": "Passwort bestätigen", + "Connected Peers": "Verbundene Peers", + "Contain": "Enthält", + "Count": "Zählen", + "Create": "Erstellen", + "Create API Key": "API-Schlüssel erstellen", + "Create Backup": "Backup erstellen", + "Create an account": "Ein Konto erstellen", + "Creating\\.\\.\\.": "Erstelle...", + "Current Password": "Aktuelles Passwort", + "Current Version:": "Aktuelle Version:", + "Currently the peer is not sharing": "Der Peer wird derzeit nicht freigegeben", + "DNS": "DNS", + "DNS format is incorrect": "DNS-Format ist ungültig", + "Danger Zone": "", + "Dark": "Dunkel", + "Dashboard IP Address \\& Listen Port": "", + "Dashboard Language": "Dashboard-Sprache", + "Dashboard Theme": "Dashboard-Design", + "Dashboard language update failed": "Aktualisierung der Dashboard-Sprache fehlgeschlagen", + "Database File": "Datenbankdatei", + "Date": "Datum", + "Delete": "Löschen", + "Delete Configuration": "Konfiguration löschen", + "Delete Peer": "Peer löschen", + "Delete current configuration's database table and \\.conf file": "", + "Deleted ([0-9]{1,}) peer\\(s\\)": "$1 Peer(s) gelöscht", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "$1 Peer(s) erfolgreich gelöscht. Fehler beim Löschen von $2 Peer(s)", + "Deleting...": "Lösche...", + "Disabled": "Deaktiviert", + "Discord Server": "", + "Display": "Anzeigen", + "Display As": "", + "Don't think that's a good idea": "Das ist wohl keine gute Idee", + "Done": "Fertig", + "Download": "", + "Download All": "Alle herunterladen", + "Download Finished": "Download abgeschlossen", + "Download \\& QR Code is not available due to no private key set for this peer": " \"Download & QR Code is not available due to no private key set for this peer\": \"Download & QR-Code sind nicht verfügbar, da kein privater Schlüssel für diesen Peer festgelegt wurde", + "Downloading": "Herunterladen", + "Duplicate current configuration's database table and \\.conf file with the new name": "", + "Edit": "Bearbeiten", + "Edit Raw Configuration File": "", + "Email Account": "", + "Email Body Template": "", + "Email sent successfully!": "", + "Enabled": "Aktiviert", + "Encryption": "", + "Endpoint Allowed IPs": "Erlaubte IPs für Endpunkt", + "Endpoint Allowed IPs format is incorrect": "Das Format der erlaubten Endpunkt-IPs ist ungültig", + "Enter IP Address / Hostname": "IP-Adresse/Hostnamen eingeben", + "Enter IP Address/CIDR": "Gib IP-Adresse/CIDR ein", + "Enter a password": "Gib ein Passwort ein", + "Enter an username you like": "Gib einen Benutzernamen deiner Wahl ein", + "Expire At": "Ablaufdatum", + "FROM ": "VON", + "Failed": "Fehlgeschlagen", + "Failed to add peers in bulk": "Massenerstellung von Peers fehlgeschlagen", + "Failed to allow access of peer (.*)": "Fehler beim Zulassen des Zugriffs für Peer $1", + "Failed to check available update": "Überprüfung auf verfügbares Update fehlgeschlagen", + "Failed to save configuration through WireGuard": "Fehler beim Speichern der Konfiguration über WireGuard", + "File": "Datei", + "Filter": "Filtern", + "Generating key pairs by bulk failed": "Massenerstellung von Schlüsselpaaren fehlgeschlagen", + "Geolocation": "Geostandort", + "Grid": "", + "Help": "Hilfe", + "Home": "Startseite", + "Hop": "", + "How many peers you want to add\\?": "Wie viele Peers möchtest du hinzufügen?", + "I don't need MFA": "Ich brauche keine MFA", + "IP Address": "IP-Adresse", + "IP Address / Hostname": "IP-Adresse/Hostnamen", + "IP Address/CIDR": "IP-Adresse/CIDR", + "IP Address/CIDR is invalid": "IP-Adresse/CIDR ist ungültig", + "If you're sure, please type in the configuration name below and click Delete": "Wenn Sie sicher sind, geben Sie unten den Namen der Konfiguration ein und klicken Sie auf Löschen", + "Include configuration file as an attachment": "", + "Invalid Port": "Ungültiger Port", + "Is Alive": "Ist erreichbar", + "Job": "Aufgabe", + "Job ID": "Aufgaben-ID", + "Jobs Logs": "Aufgabenprotokolle", + "Key": "Schlüssel", + "Language": "Sprache", + "Light": "Hell", + "Link expire date failed to update. Reason: (.*)": "Ablaufdatum des Links konnte nicht aktualisiert werden. Grund: $1", + "Link expire date updated": "Ablaufdatum des Links aktualisiert", + "List": "", + "Listen Port": "Empfangsport", + "Live Preview": "", + "Log ID": "Protokoll-ID", + "Logs": "Protokolle", + "MTU": "MTU", + "MTU format is not correct": "MTU-Format ist ungültig", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "Manueller Neustart des WGDashboards erforderlich, um Änderungen an der IP-Adresse und dem Listen-Port anzuwenden", + "Max RTT \\(ms\\)": "", + "Memory": "", + "Memory Usage": "", + "Message": "Nachricht", + "Min RTT \\(ms\\)": "", + "Multi-Factor Authentication \\(MFA\\)": "Multi-Faktor-Authentifizierung (MFA)", + "Name": "Name", + "Network": "", + "Never Expire": "Kein Ablaufdatum", + "New Configuration": "Neue Konfiguration", + "New Password": "Neues Passwort", + "Next": "Weiter", + "Nice to meet you!": "Schön, dich kennenzulernen!", + "No": "Nein", + "No Encryption": "", + "No WGDashboard API Key": "Kein WGDashboard API-Schlüssel", + "No active job at the moment\\.": "Zurzeit keine aktive Aufgabe.", + "No available IP containing": "Keine verfügbare IP enthält", + "No backup yet, click the button above to create backup\\.": "Noch kein Backup vorhanden. Klicken Sie oben auf die Schaltfläche, um ein Backup zu erstellen.", + "No more available IP can assign": "Es können keine weiteren verfügbaren IPs zugewiesen werden", + "OTP from your authenticator": "OTP von deinem Authentifikator", + "Off": "Aus", + "Official Documentation": "", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "Oh nein... Dieser Link ist entweder abgelaufen oder ungültig.", + "On": "An", + "Once you deleted this configuration\\:": "Wenn Sie diese Konfiguration löschen:", + "Open File": "", + "Optional Settings": "Optionale Einstellungen", + "Or you can click the link below:": "Oder du kannst auf den Link unten klicken:", + "Other Settings": "Weitere Einstellungen", + "Password": "Passwort", + "Peer": "Peer", + "Peer Configuration File": "", + "Peer Default Settings": "Standard-Peer-Einstellungen", + "Peer Jobs": "Peer-Aufgaben", + "Peer Remote Endpoint": "Remote-Endpunkt des Peers", + "Peer Settings": "Peers Einstellungen", + "Peer created successfully": "Peer erfolgreich erstellt", + "Peer data usage reset successfully": "Peer-Datenverbrauch erfolgreich zurückgesetzt", + "Peer does not exist": "Peer existiert nicht", + "Peer download started": "Peer-Download gestartet", + "Peer job deleted": "Peer-Aufgabe gelöscht", + "Peer job saved": "Peer-Aufgabe gespeichert", + "Peer saved": "Peer gespeichert", + "Peers": "Peers", + "Peers Data Usage": "Datenverbrauch der Peers", + "Peers Default Settings": "Peers Standardeinstellungen", + "Peers Settings": "Peer-Einstellungen", + "Persistent Keepalive": "Ständiges Keepalive", + "Persistent Keepalive format is not correct": "Das Format für Persistent Keepalive ist ungültig", + "Pick Available IP": "Verfügbare IP auswählen", + "Pinging...": "Pinge...", + "Please fill in all required box": "Bitte fülle alle erforderlichen Felder aus", + "Please fill in the following fields to finish setup": "Bitte fülle die folgenden Felder aus, um die Einrichtung abzuschließen", + "Please provide a valid configuration name": "Bitte gib einen gültigen Konfigurationsnamen an", + "Please provide ipAddress": "Bitte gib eine IP-Adresse an", + "Please provide ipAddress and count": "Bitte gib die IP-Adresse und die Anzahl an", + "Please specify amount of peers you want to add": "Bitte gib die Anzahl der Peers an, die du hinzufügen möchtest", + "Please specify an IP Address (v4/v6)": "Bitte gib eine IP-Adresse (v4/v6) an", + "Please specify job": "Bitte gib eine Aufgabe an", + "Please specify one or more peers": "Bitte gib einen oder mehrere Peers an", + "Please specify peer and configuration": "Bitte gib Peer und Konfiguration an", + "Port": "", + "Pre-Shared Key": "Vorab geteilter Schlüssel", + "Private Key": "Privater Schlüssel", + "Private key does not match with the public key": "Privater Schlüssel stimmt nicht mit dem öffentlichen Schlüssel überein", + "Processes": "", + "Protocol": "", + "Public Key": "Öffentlicher Schlüssel", + "QR Code": "QR-Code", + "Ready": "", + "Real Time Received Data Usage": "Datenempfang in Echtzeit", + "Real Time Sent Data Usage": "Datensendung in Echtzeit", + "Received": "Empfangen", + "Refresh": "Aktualisieren", + "Refresh Interval": "Aktualisierungsintervall", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "Vergiss nicht, das \"/\" am Ende deines Pfads zu entfernen. z.B. /etc/wireguard", + "Repeat New Password": "Neues Passwort wiederholen", + "Reset": "Zurücksetzen", + "Reset Data Usage": "Datenverbrauch zurücksetzen", + "Restore": "Wiederherstellen", + "Restore Configuration": "Konfiguration wiederherstellen", + "Restoring": "Wiederherstellung läuft", + "Restrict Access": "Zugriff einschränken", + "Restrict Peer": "Peer einschränken", + "Restricted": "Eingeschränkt", + "Restricted ([0-9]{1,}) peer\\(s\\)": "$1 Peer(s) eingeschränkt", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "$1 Peer(s) erfolgreich eingeschränkt. Fehler beim Einschränken von $2 Peer(s)", + "Restricted Peers?": "Eingeschränkte Peers?", + "Restricting\\.\\.\\.": "Einschränken...", + "Revert": "Zurücksetzen", + "Save": "Speichern", + "Save Configuration": "Konfiguration speichern", + "Save Peer": "Peer speichern", + "Saving\\.\\.\\.": "Speichern...", + "Scan QR Code with the WireGuard App to add peer": "Scanne den QR-Code mit der WireGuard App, um deinen Peer hinzuzufügen", + "Schedule Jobs": "Aufgaben planen", + "Search": "", + "Search Peers\\.\\.\\.": "Suche Peers...", + "Select All": "Alle auswählen", + "Select Peers": "Peers auswählen", + "Select a backup you want to restore": "Wählen Sie ein Backup aus, das Sie wiederherstellen möchten", + "Selected Backup": "Ausgewähltes Backup", + "Send": "", + "Send From": "", + "Send Test Email": "", + "Sending\\.\\.\\.": "", + "Sent": "Gesendet", + "Sent / Received / Lost Package": "Gesendete / Empfangene / Verlorene Pakete", + "Server": "Server", + "Server List": "Serverliste", + "Settings": "Einstellungen", + "Setup": "Einrichten", + "Share Peer": "Peer teilen", + "Share link failed to create. Reason: (.*)": "Freigabelink konnte nicht erstellt werden. Grund: $1", + "Share with Email": "", + "Sharing\\.\\.\\.": "Teile...", + "Sign In": "Anmelden", + "Sign Out": "Abmelden", + "Sign in session ended, please sign in again": "Anmeldesitzung beendet, bitte melde dich erneut an", + "Signing In\\.\\.\\.": "Anmeldung...", + "Sorry, your username or password is incorrect.": "Entschuldige, dein Benutzername oder Passwort ist falsch.", + "Sort By": "Sortieren nach", + "Start Sharing": "Teilen starten", + "Status": "Status", + "Step (.*)": "Schritt $1", + "Stop Sharing": "Teilen beenden", + "Stop Sharing\\.\\.\\.": "Teilen beenden...", + "Storage": "", + "Success": "Erfolgreich", + "Swap Memory": "", + "Swap Memory Usage": "", + "System Status": "", + "TOTP verified!": "TOTP erfolgreich verifiziert!", + "Table": "", + "The maximum number of peers can add is (.*)": "$1 ist die maximale Anzahl an Peers, die hinzugefügt werden können", + "Theme": "Design", + "This IP is not available: (.*)": "Diese IP ist nicht verfügbar: $1", + "This configuration have ([0-9].*) backups": "Diese Konfiguration hat $1 Backups", + "This configuration have no backup": "Diese Konfiguration hat kein Backup", + "This peer already exist": "Dieser Peer existiert bereits", + "This peer does not have any job yet\\.": "Dieser Peer hat noch keine Aufgabe.", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Dies wird global geändert und gilt für alle Peer-QR-Codes und Konfigurationsdateien.", + "To update this configuration's name, WGDashboard will execute the following operations:": "", + "Toggle When Start Up": "Beim Start umschalten", + "Tools": "Werkzeuge", + "Total": "Gesamt", + "Total Received": "Gesamt empfangen", + "Total Sent": "Gesamt gesendet", + "Total Usage": "Gesamtnutzung", + "Turning Off\\.\\.\\.": "Schalte aus...", + "Turning On\\.\\.\\.": "Schalte ein...", + "Unsaved Job": "Nicht gespeicherte Aufgabe", + "Untitled Peer": "", + "Update Name": "", + "Update Password": "Passwort aktualisieren", + "Update peer failed when saving the configuration": "Fehler beim Speichern der Peer-Konfiguration", + "Update peer failed when updating Allowed IPs": "Fehler beim Aktualisieren des Peers während der Aktualisierung der erlaubten IP-Adressen", + "Update peer failed when updating Pre-Shared Key": "Fehler beim Aktualisieren des Peers während der Aktualisierung des Pre-Shared-Keys", + "Updated at": "Aktualisiert am", + "Use your own Private and Public Key": "Verwende deinen eigenen privaten und öffentlichen Schlüssel", + "Username": "Benutzername", + "WGDashboard API Keys function is disabled": "Die API-Schlüsselfunktion im WGDashboard ist deaktiviert", + "WGDashboard Account Settings": "WGDashboard Kontoeinstellungen", + "WGDashboard Settings": "WGDashboard-Einstellungen", + "WGDashboard language update failed": "WGDashboard-Sprachaktualisierung fehlgeschlagen", + "Welcome to": "Willkommen bei", + "What\\'s the body\\?": "", + "What\\'s the subject\\?": "", + "When should this API Key expire\\?": "Wann soll dieser API-Schlüssel ablaufen?", + "Who are you sending to\\?": "", + "WireGuard Configuration Settings": "WireGuard-Konfigurationseinstellungen", + "WireGuard Configurations": "WireGuard Konfigurationen", + "WireGuard Configurations Settings": "WireGuard Konfigurationseinstellungen", + "WireGuard configuration path saved": "WireGuard-Konfigurationspfad gespeichert", + "Yes": "Ja", + "You can add up to (.*) peers": "Du kannst bis zu $1 Peers hinzufügen", + "You can visit our: ": "", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Du hast noch keine WireGuard-Konfigurationen. Bitte überprüfe den Konfigurationsordner oder ändere ihn in den Einstellungen. Standardmäßig ist der Ordner /etc/wireguard.", + "You don't have any configuration to restore": "Es gibt keine Konfiguration, die wiederhergestellt werden kann", + "You're on the latest version": "Du verwendest die aktuellste Version", + "\\(At least 8 characters and make sure is strong enough!\\)": "(Mindestens 8 Zeichen und stelle sicher, dass es stark genug ist!)", + "\\(Required for QR Code and Download\\)": "(Erforderlich für QR-Code und Download)", + "\\(Required\\)": "(Erforderlich)", + "if": "wenn", + "is": "ist", + "larger than": "größer als", + "or": "oder", + "or click the button below to download the ": "oder klicke auf den Button unten, um die", + "then": "dann", + "to add your server": "um deinen Server hinzuzufügen" +} \ No newline at end of file diff --git a/src/static/locales/es-ES.json b/src/static/locales/es-ES.json new file mode 100644 index 0000000..0e28c60 --- /dev/null +++ b/src/static/locales/es-ES.json @@ -0,0 +1,369 @@ +{ + " file": " archivo", + "(.*) Available IP Address": "$1 Dirección IP disponible", + "(.*) Minutes": "$1 Minutos/i", + "(.*) Seconds": "$1 Segundos/i", + "(.*) Used": "", + "(.*) is off": "$1 está desactivado", + "(.*) is on": "$1 está activo", + "([0-9].*) Backups?": "$1 Backups?", + "([0-9].*) Peers?": "¿$1 Peers?", + "([0-9]{1,}) Interfaces": "", + "([0-9]{1,}) Partitions": "", + "(v[0-9.]{1,}) is now available for update!": "$1 está disponible para actualizar!", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Por favor escanea el siguiente código QR para generar un código TOTP con el autentificador que prefieras", + "2\\. Enter the TOTP generated by your authenticator to verify": "2. Inserta el código TOTP generado por tu autentificador para verificar", + "API Key": "Clave API", + "API Key created": "Clave API creada", + "API Key deleted": "Clave API eliminada", + "API Keys": "Clave API", + "API Keys function is failed to disable": "La funcionalidad de clave API no se ha habilitado", + "API Keys function is failed to enable": "La funcionalidad de clave API no se ha habilitado", + "API Keys function is successfully disabled": "La funcionalidad de clave API se ha deshabilitado con éxito", + "API Keys function is successfully enabled": "La funcionalidad de clave API se ha habilitado con éxito", + "Access Remote Server": "Acceder a servidor remoto", + "Access Restricted": "Accesso Restringido", + "Account Settings": "Ajustes de la cuenta", + "Active Jobs": "Jobs Activos", + "Add": "añadir", + "Add Peers": "Agregar un Peer", + "Adding\\.\\.\\.": "Añadiendo...", + "Address": "Dirección", + "Advanced Options": "", + "All Active Jobs": "Todos los Jobs Activos", + "All connected peers will get disconnected": "Todos los peers conectados se desconectarán", + "Allow Access": "Habilitar Acceso", + "Allow access successfully": "Acceso permitido con éxito", + "Allowed IP already taken by another peer": "IP Permitida ya ha sido seleccionada por otro peer", + "Allowed IPs": "IPs permitidas", + "Allowed IPs Validation": "", + "Allowed IPs already taken by another peer": "IPs disponibles ya han sido seleccionadas por otro peer", + "Allowed IPs is invalid": "Las IPs Permitidas son inválidas", + "Allowing Access\\.\\.\\.": "Habilitando el acceso...", + "AmneziaWG Peer Setting": "", + "Appearance": "apariencia", + "Are you sure to delete": "¿Estás seguro de eliminar?", + "Are you sure to delete this API key\\?": "¿Estás seguro de eliminar esta clave API?", + "Are you sure to delete this backup\\?": "¿Estás seguro de que quieres borrar este backup?", + "Are you sure to delete this configuration\\?": "¿Estás seguro de eliminar esta configuración?", + "Are you sure to delete this peer\\?": "¿Estás seguro de eliminar este peer?", + "Are you sure to restore this backup\\?": "", + "Average / Min / Max Round Trip Time": "Media / Min / Max Redondeo Viaje Tiempo", + "Average RTT \\(ms\\)": "", + "Backup": "Backup", + "Backup & Restore": "Backups y Restaurar", + "Backup Date": "Fecha del backup", + "Backup not selected": "Backup no seleccionado", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Ambos ficheros de configuración (.conf) y de la tabla de la base de datos relacionados con esta configuración serán eliminados", + "Bulk Add": "Agregar múltiple", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Agregando Peers de forma múltiple, los nombres de los peers se generarán de forma automática, y la IP permitida se asignará en función de la siguiente IP disponible.", + "CPU": "", + "CPU Usage": "", + "Cancel": "Cancelar", + "Checking backups...": "Comprobando backups...", + "Checking for update...": "Buscando actualizaciones...", + "Clear Selection": "Deseleccionar", + "Click": "Click", + "Click to change a backup": "click para cambiar el backup", + "Complete": "Completado", + "Configuration": "Configuración", + "Configuration File": "", + "Configuration Name": "Nombre de la configuración", + "Configuration Settings": "Configuración", + "Configuration deleted": "Configuración eliminada", + "Configuration does not exist": "La configuración no existe", + "Configuration name already exist\\.": "El nombre de la configuración ya existe.", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "El nombre de la configuración solo puede contener 15 letras mayúsculas o minúsculas, números, barrabaja, símbolos de igual, suma, puntos y guiones.", + "Configuration name is invalid. Possible reasons:": "El nombre de la configuración es inválido. Motivo:", + "Configuration restored": "Configuración restaurada", + "Configuration saved": "Configuración guardada", + "Configurations": "Configuraciones", + "Configurations Directory": "Carpeta de configuraciones", + "Confirm \\& edit restore information": "Confirmar y editar la información de restauración", + "Confirm password": "Confirma la contraseña", + "Connected Peers": "Peer conectado", + "Contain": "Contiene", + "Count": "Cuenta", + "Create": "Crear", + "Create API Key": "Crear una nueva clave API", + "Create Backup": "Crear Backup", + "Create an account": "Crea una cuenta", + "Creating\\.\\.\\.": "Creando...", + "Current Password": "Contraseña actual", + "Current Version:": "Versión actual:", + "Currently the peer is not sharing": "Actualmente el Peer no está compartiendo", + "DNS": "DNS", + "DNS format is incorrect": "El formato del DNS no es correcto", + "Danger Zone": "", + "Dark": "Oscuro", + "Dashboard IP Address \\& Listen Port": "Dirección IP del dashboard y puerto", + "Dashboard Language": "Idioma del Dashboard", + "Dashboard Theme": "Tema del dashboard", + "Dashboard language update failed": "Imposible actualizar el idioma del Dashboard", + "Database File": "Fichero de base de datos", + "Date": "Fecha", + "Delete": "Eliminar", + "Delete Configuration": "Eliminar Configuración", + "Delete Peer": "Eliminar el Peer", + "Delete current configuration's database table and \\.conf file": "", + "Deleted ([0-9]{1,}) peer\\(s\\)": "Eliminados $1 peer(s)", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Eliminados $1 peer(s) con éxito. Fallo al eliminar $2 peer(s)", + "Deleting...": "Eliminando...", + "Disabled": "Deshabilitado", + "Discord Server": "", + "Display": "Mostrar", + "Display As": "", + "Don't think that's a good idea": "No creo que esta sea una buena idea", + "Done": "Hecho", + "Download": "", + "Download All": "Descargar todo", + "Download Finished": "Descarga finalizada", + "Download \\& QR Code is not available due to no private key set for this peer": "La descarga y el código QR no están disponibles porque no se ha configurado una clave privada para este peer", + "Downloading": "Descargando", + "Duplicate current configuration's database table and \\.conf file with the new name": "", + "Edit": "Modificar", + "Edit Raw Configuration File": "", + "Email Account": "", + "Email Body Template": "", + "Email sent successfully!": "", + "Enabled": "Habilitado", + "Encryption": "", + "Endpoint Allowed IPs": "Direcciones IP del endpoint permitidas", + "Endpoint Allowed IPs format is incorrect": "El formato de las IPs disponibles no es correcto", + "Enter IP Address / Hostname": "Introduce una dirección IP / Hostname", + "Enter IP Address/CIDR": "ntroduce la dirección IP/CIDR", + "Enter a password": "Introduce una contraseña", + "Enter an username you like": "Introduce un nombre de usuario", + "Expire At": "Expira en", + "FROM ": "DE ", + "Failed": "Fallido", + "Failed to add peers in bulk": "Error al añadir múltiples peers", + "Failed to allow access of peer (.*)": "Fallo de habilitar acceso del peer $1", + "Failed to check available update": "Error al buscar actualizaciones disponibles", + "Failed to save configuration through WireGuard": "Fallo de salvar configuración a través de WireGuard", + "File": "Archivo", + "Filter": "Filtrar", + "Generating key pairs by bulk failed": "Generación de key pairs por Añadir Múltiples falló", + "Geolocation": "Geolocalización", + "Grid": "", + "Help": "Ayuda", + "Home": "Home", + "Hop": "", + "How many peers you want to add\\?": "¿Cuántos peers quieres añadir?", + "I don't need MFA": "No necesito MFA", + "IP Address": "Dirección IP", + "IP Address / Hostname": "Dirección IP / Hostname", + "IP Address/CIDR": "Dirección IP/CIDR", + "IP Address/CIDR is invalid": "La IP/CIDR no es válida", + "If you're sure, please type in the configuration name below and click Delete": "Si estás seguro, introduce el nombre de la configuración y presiona eliminar", + "Include configuration file as an attachment": "", + "Invalid Port": "Puerto inválido", + "Is Alive": "Está Activo", + "Job": "Job", + "Job ID": "ID del Job", + "Jobs Logs": "Logs del Job", + "Key": "Clave", + "Language": "Idioma", + "Light": "Claro", + "Link expire date failed to update. Reason: (.*)": "Actualización de la fecha de expiración fallida. Motivo: $1", + "Link expire date updated": "Actualizada la fecha de expiración del link", + "List": "", + "Listen Port": "Puerto de escucha", + "Live Preview": "", + "Log ID": "ID del log", + "Logs": "Logs", + "MTU": "MTU", + "MTU format is not correct": "El formato del MTU no es correcto", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "Un reset manual de WGDashboard es necesario para aplicar los cambios en la dirección IP y el puerto", + "Max RTT \\(ms\\)": "", + "Memory": "", + "Memory Usage": "", + "Message": "Mensaje", + "Min RTT \\(ms\\)": "", + "Multi-Factor Authentication \\(MFA\\)": "Autentificación de doble factor (MFA)", + "Name": "Nombre", + "Network": "", + "Never Expire": "Nunca expira", + "New Configuration": "Nueva configuración", + "New Password": "Nueva contraseña", + "Next": "Siguiente", + "Nice to meet you!": "Encantado de conocerte", + "No": "No", + "No Encryption": "", + "No WGDashboard API Key": "Ninguna clave API WGDashboard", + "No active job at the moment\\.": "No hay jobs activos en este momento.", + "No available IP containing": "Ninguna IP disponible que contenga", + "No backup yet, click the button above to create backup\\.": "No hay backups todavía, presiona el botón de arriba para crear un backup.", + "No more available IP can assign": "No hay más IPs disponibles que asignar", + "OTP from your authenticator": "OTP de tu autentificador", + "Off": "Inactivo", + "Official Documentation": "", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "Oh no... Este link ha expirado o es inválido.", + "On": "Activo", + "Once you deleted this configuration\\:": "Una vez eliminada esta configuración:", + "Open File": "", + "Optional Settings": "Ajustes opcionales", + "Or you can click the link below:": "O puedes hacer click en el siguiente enlace:", + "Other Settings": "Otros ajustes", + "Password": "Contraseña", + "Peer": "Peer", + "Peer Configuration File": "", + "Peer Default Settings": "Ajustes por defecto del peer", + "Peer Jobs": "Jobs del Peer", + "Peer Remote Endpoint": "Endpoint remoto del Peer", + "Peer Settings": "Ajustes de Peers", + "Peer created successfully": "Peer creado con éxito", + "Peer data usage reset successfully": "Los datos del uso del peer se restablecieron con éxito", + "Peer does not exist": "El peer no existe", + "Peer download started": "Descarga del peer comenzada", + "Peer job deleted": "Job del Peer eliminado", + "Peer job saved": "Job del Peer guardado", + "Peer saved": "Peer guardado", + "Peers": "Peers", + "Peers Data Usage": "Uso de datos de Peers", + "Peers Default Settings": "Ajustes por defecto de Peers", + "Peers Settings": "Ajustes de Peers", + "Persistent Keepalive": "Keepalive persistente", + "Persistent Keepalive format is not correct": "El formato de Keepalive persistente no es correcto", + "Pick Available IP": "Selecciona una IP disponible", + "Pinging...": "Ping...", + "Please fill in all required box": "Por favor, rellena las casillas requeridas", + "Please fill in the following fields to finish setup": "Por favor rellena los siguientes campos para finalizar el setup", + "Please provide a valid configuration name": "Por favor, introduce un nombre de configuración válido", + "Please provide ipAddress": "Por favor, especifica dirección IP", + "Please provide ipAddress and count": "Por favor, especifica dirección IP y cuenta", + "Please specify amount of peers you want to add": "Por favor, especifica la cantidad de peers que quieres añadir", + "Please specify an IP Address (v4/v6)": "Por favor, especificado dirección IP (v4/v6)", + "Please specify job": "Por favor, especifica un job", + "Please specify one or more peers": "Por favor, especifica uno o más peers", + "Please specify peer and configuration": "Por favor, especifica peer y configuración", + "Port": "", + "Pre-Shared Key": "Clave pre-compartida", + "Private Key": "Clave privada", + "Private key does not match with the public key": "La clave privada no corresponde con la clave pública", + "Processes": "", + "Protocol": "", + "Public Key": "Clave pública", + "QR Code": "Código QR", + "Ready": "", + "Real Time Received Data Usage": "Datos recibidos en tiempo real", + "Real Time Sent Data Usage": "Datos enviados en tiempo real", + "Received": "Recibido", + "Refresh": "Refrescar", + "Refresh Interval": "Intervalo de refresco", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "Recuerda eliminar '/' al final de tu directorio. Por ejemplo, '/etc/wireguard'", + "Repeat New Password": "Repite la nueva contraseña", + "Reset": "Reset", + "Reset Data Usage": "Resetear los datos de uso", + "Restore": "Restaurar", + "Restore Configuration": "Restablecer configuración", + "Restoring": "Restaurando", + "Restrict Access": "Restringir Acceso", + "Restrict Peer": "Limitar el Peer", + "Restricted": "Restringido", + "Restricted ([0-9]{1,}) peer\\(s\\)": "Restringidos $1 peer(s)", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Restringidos $1 peer(s) con éxito. Fallo al restringir $2 peer(s)", + "Restricted Peers?": "¿Peers restringidos?", + "Restricting\\.\\.\\.": "Restringiendo...", + "Revert": "Revertir", + "Save": "Guardar", + "Save Configuration": "Guardar la configuración", + "Save Peer": "Guardar el Peer", + "Saving\\.\\.\\.": "Guardando...", + "Scan QR Code with the WireGuard App to add peer": "Escanea el código QR con la App Wireguard para añadir el peer", + "Schedule Jobs": "Planificar Job", + "Search": "", + "Search Peers\\.\\.\\.": "Buscar Peers...", + "Select All": "Seleccionar todo", + "Select Peers": "Seleccionar peers", + "Select a backup you want to restore": "Selecciona el backup que quieres restaurar", + "Selected Backup": "Backup seleccionado", + "Send": "", + "Send From": "", + "Send Test Email": "", + "Sending\\.\\.\\.": "", + "Sent": "Enviado", + "Sent / Received / Lost Package": "Enviado / Recibido / Paquetes perdidos", + "Server": "Servidor", + "Server List": "Lista de Servidores", + "Settings": "Ajustes", + "Setup": "Setup", + "Share Peer": "Compartir Peer", + "Share link failed to create. Reason: (.*)": "Creación del link para compartir fallida. Motivo: $1", + "Share with Email": "", + "Sharing\\.\\.\\.": "Compartiendo...", + "Sign In": "Iniciar sesión", + "Sign Out": "Salir", + "Sign in session ended, please sign in again": "La sesión actual ha caducado, por favor, accede de nuevo", + "Signing In\\.\\.\\.": "Iniciando sesión...", + "Sorry, your username or password is incorrect.": "Lo siento, tu usuario o contraseña no son correctos.", + "Sort By": "Ordenar por", + "Start Sharing": "Empezar intercambio", + "Status": "Estado", + "Step (.*)": "Paso $1", + "Stop Sharing": "Interrumpir intercambio", + "Stop Sharing\\.\\.\\.": "Interrumpir intercambio...", + "Storage": "", + "Success": "Éxito", + "Swap Memory": "", + "Swap Memory Usage": "", + "System Status": "", + "TOTP verified!": "¡TOTP Verificado!", + "Table": "", + "The maximum number of peers can add is (.*)": "El número máximo de peers que se pueden añadir es $1", + "Theme": "Tema", + "This IP is not available: (.*)": "Esta IP no está disponible: $1", + "This configuration have ([0-9].*) backups": "Esta configuración tiene $1 backups", + "This configuration have no backup": "Esta configuración no tiene backups", + "This peer already exist": "Este peer ya existe", + "This peer does not have any job yet\\.": "Este Peer no tiene jobs todavía.", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Esto se va a cambiar de forma global, y se aplicará a todos los QRs y archivos de configuración de todos los Peers.", + "To update this configuration's name, WGDashboard will execute the following operations:": "", + "Toggle When Start Up": "Activar en Start Up", + "Tools": "Herramientas", + "Total": "Total", + "Total Received": "Total Recibido", + "Total Sent": "Total Enviado", + "Total Usage": "Uso Total", + "Turning Off\\.\\.\\.": "Desactivando...", + "Turning On\\.\\.\\.": "Activando...", + "Unsaved Job": "Job sin guardar", + "Untitled Peer": "", + "Update Name": "", + "Update Password": "Actualizar contraseña", + "Update peer failed when saving the configuration": "Actualización del peer falló cuando se guardaba la configuración", + "Update peer failed when updating Allowed IPs": "Actualización del peer falló cuando se actualizó las IPs Permitidas", + "Update peer failed when updating Pre-Shared Key": "Actualización del peer falló cuando se actualizó la clave pre-compartida", + "Updated at": "Actualizado el", + "Use your own Private and Public Key": "Usa tu propia clave pública y privada", + "Username": "Usuario", + "WGDashboard API Keys function is disabled": "La funcionalidad de clave API de WGDashboard está deshabilitada", + "WGDashboard Account Settings": "Ajustes de la cuenta de WGDashboard", + "WGDashboard Settings": "Ajustes de WGDashboard", + "WGDashboard language update failed": "La actualización de idioma de WGDashboard falló", + "Welcome to": "Bienvenido", + "What\\'s the body\\?": "", + "What\\'s the subject\\?": "", + "When should this API Key expire\\?": "¿Cuándo debería expirar esta clave API?", + "Who are you sending to\\?": "", + "WireGuard Configuration Settings": "Ajustes de Configuraciones de Wireguard", + "WireGuard Configurations": "Configuraciones de Wireguard", + "WireGuard Configurations Settings": "Ajustes de Configuración de Wireguard", + "WireGuard configuration path saved": "Guardado el destino de la configuración de Wireguard", + "Yes": "Sí", + "You can add up to (.*) peers": "Puedes añadir hasta $1 peers", + "You can visit our: ": "", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Todavía no tienes configuraciones de WireGuard. Por favor, comprueba la carpeta de configuraciones o cámbiala en Ajustes. Por defecto, la carpeta es /etc/wireguard.", + "You don't have any configuration to restore": "No tienes ninguna configuración que restaurar", + "You're on the latest version": "Estás utilizando la última versión", + "\\(At least 8 characters and make sure is strong enough!\\)": "(Al menos 8 caracteres y asegúrate de que sea suficientemente fuerte)", + "\\(Required for QR Code and Download\\)": "(Requerido para el código QR y Descarga)", + "\\(Required\\)": "(Requerido)", + "if": "si", + "is": "es", + "larger than": "mayor que", + "or": "o", + "or click the button below to download the ": "o haz click en el botón de abajo para descargar el ", + "then": "entonces", + "to add your server": "para agregar tu servidor" +} \ No newline at end of file diff --git a/src/static/locales/fa-IR.json b/src/static/locales/fa-IR.json new file mode 100644 index 0000000..5014b5f --- /dev/null +++ b/src/static/locales/fa-IR.json @@ -0,0 +1,369 @@ +{ + " file": " فایل", + "(.*) Available IP Address": "$1 آدرس IP در دسترس", + "(.*) Minutes": "$1 دقیقه", + "(.*) Seconds": "1$ ثانیه", + "(.*) Used": "", + "(.*) is off": "$1 غیرفعال است", + "(.*) is on": "$1 فعال است", + "([0-9].*) Backups?": "$1 نسخه پشتیبان", + "([0-9].*) Peers?": "$1 peer", + "([0-9]{1,}) Interfaces": "", + "([0-9]{1,}) Partitions": "", + "(v[0-9.]{1,}) is now available for update!": "نسخه$1 اکنون برای به‌روزرسانی در دسترس است!", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "۱. لطفاً کد QR زیر را اسکن کنید تا کد یک‌بار مصرف زمان‌دار (TOTP) را با برنامه احراز هویت دلخواه خود تولید کنید.", + "2\\. Enter the TOTP generated by your authenticator to verify": "۲. کد یک‌بار مصرف زمان‌دار (TOTP) تولیدشده توسط برنامه احراز هویت خود را وارد کنید تا تأیید انجام شود.", + "API Key": "API Key", + "API Key created": "کلید API ایجاد شد.", + "API Key deleted": "کلید API حذف شد.", + "API Keys": "API Keys", + "API Keys function is failed to disable": "غیرفعال‌سازی قابلیت کلیدهای API با شکست مواجه شد.", + "API Keys function is failed to enable": "فعال‌سازی قابلیت کلیدهای API با شکست مواجه شد.", + "API Keys function is successfully disabled": "قابلیت کلیدهای API با موفقیت غیرفعال شد.", + "API Keys function is successfully enabled": "قابلیت کلیدهای API با موفقیت فعال شد.", + "Access Remote Server": "دسترسی به سرور از راه دور", + "Access Restricted": "دسترسی محدود شده", + "Account Settings": "تنظیمات حساب کاربری", + "Active Jobs": "جاب های فعال", + "Add": "اضافه کردن", + "Add Peers": "اضافه کردن peers", + "Adding\\.\\.\\.": "درحال اضافه کردن...", + "Address": "آدرس", + "Advanced Options": "", + "All Active Jobs": "همه جاب های فعال", + "All connected peers will get disconnected": "تمام peerهای متصل قطع خواهند شد.", + "Allow Access": "اجازه دسترسی", + "Allow access successfully": "دسترسی با موفقیت فعال شد.", + "Allowed IP already taken by another peer": "IP مجاز قبلاً توسط peerی دیگری استفاده شده است.", + "Allowed IPs": "IP های مجاز", + "Allowed IPs Validation": "", + "Allowed IPs already taken by another peer": "این IPها قبلاً به peer دیگری اختصاص داده شده‌اند.", + "Allowed IPs is invalid": "مقدار Allowed IPs نامعتبر است", + "Allowing Access\\.\\.\\.": "اجازه دسترسی...", + "AmneziaWG Peer Setting": "", + "Appearance": "ظاهر", + "Are you sure to delete": "آیا از حذف مطمئن هستید؟", + "Are you sure to delete this API key\\?": "آیا مطمئن هستید که این کلید API را حذف می کنید؟", + "Are you sure to delete this backup\\?": "", + "Are you sure to delete this configuration\\?": "", + "Are you sure to delete this peer\\?": "", + "Are you sure to restore this backup\\?": "", + "Average / Min / Max Round Trip Time": "میانگین / کمترین / بیشترین زمان رفت‌وبرگشت", + "Average RTT \\(ms\\)": "", + "Backup": "پشتیبان‌گیری", + "Backup & Restore": "پشتیبان‌گیری و بازیابی", + "Backup Date": "تاریخ پشتیبان‌گیری", + "Backup not selected": "نسخه پشتیبان انتخاب نشده است.", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "", + "Bulk Add": "افزودن انبوه", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "با افزودن گروهی Peers، نام هر peer به‌صورت خودکار تولید می‌شود و IP مجاز (Allowed IP) به اولین IP آزاد بعدی اختصاص داده خواهد شد.", + "CPU": "", + "CPU Usage": "", + "Cancel": "لغو", + "Checking backups...": "در حال بررسی نسخه‌های پشتیبان...", + "Checking for update...": "در حال بررسی به‌روزرسانی...", + "Clear Selection": "پاک کردن انتخاب", + "Click": "کلیک", + "Click to change a backup": "برای تغییر نسخه پشتیبان کلیک کنید.", + "Complete": "تکمیل شد", + "Configuration": "پیکربندی", + "Configuration File": "", + "Configuration Name": "نام پیکربندی", + "Configuration Settings": "تنظیمات پیکربندی", + "Configuration deleted": "پیکربندی حذف شد.", + "Configuration does not exist": "پیکربندی وجود ندارد.", + "Configuration name already exist\\.": "", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "", + "Configuration name is invalid. Possible reasons:": "نام پیکربندی نامعتبر است. دلایل احتمالی:", + "Configuration restored": "پیکربندی بازیابی شد.", + "Configuration saved": "پیکربندی ذخیره شد.", + "Configurations": "تنظیمات", + "Configurations Directory": "پوشه پیکربندی‌ها", + "Confirm \\& edit restore information": "", + "Confirm password": "تأیید رمز عبور", + "Connected Peers": "Peer`s متصل", + "Contain": "شامل", + "Count": "تعداد", + "Create": "ایجاد", + "Create API Key": "ایجاد کلید API", + "Create Backup": "ایجاد نسخه پشتیبان", + "Create an account": "ایجاد حساب کاربری", + "Creating\\.\\.\\.": "در ساختن...", + "Current Password": "", + "Current Version:": "ورژن فعلی :", + "Currently the peer is not sharing": "این peer را نمی توان به اشتراک گذاشت", + "DNS": "DNS", + "DNS format is incorrect": "فرمت DNS نادرست است.", + "Danger Zone": "", + "Dark": "تاریک", + "Dashboard IP Address \\& Listen Port": "", + "Dashboard Language": "زبان داشبورد", + "Dashboard Theme": "تم داشبورد", + "Dashboard language update failed": "به‌روزرسانی زبان داشبورد با شکست مواجه شد.", + "Database File": "فایل پایگاه داده", + "Date": "تاریخ", + "Delete": "حذف", + "Delete Configuration": "حذف پیکربندی", + "Delete Peer": "حذف peer", + "Delete current configuration's database table and \\.conf file": "", + "Deleted ([0-9]{1,}) peer\\(s\\)": "", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "", + "Deleting...": "درحال حذف ...", + "Disabled": "غیرفعال شد", + "Discord Server": "", + "Display": "نمایش", + "Display As": "", + "Don't think that's a good idea": "پیشنهاد نمی شود", + "Done": "انجام شد", + "Download": "", + "Download All": "دانلود همه", + "Download Finished": "دانلود به پایان رسید", + "Download \\& QR Code is not available due to no private key set for this peer": "دانلود و کد QR در دسترس نیست چون کلید خصوصی برای این peer تنظیم نشده است.", + "Downloading": "در حال دانلود", + "Duplicate current configuration's database table and \\.conf file with the new name": "", + "Edit": "ویرایش", + "Edit Raw Configuration File": "", + "Email Account": "", + "Email Body Template": "", + "Email sent successfully!": "", + "Enabled": "فعال شد", + "Encryption": "", + "Endpoint Allowed IPs": "IP های مجاز نقطه پایانی", + "Endpoint Allowed IPs format is incorrect": "فرمت IPهای مجاز در Endpoint نادرست است.", + "Enter IP Address / Hostname": "آدرس IP یا نام میزبان را وارد کنید", + "Enter IP Address/CIDR": "نشانی IP یا محدوده CIDR را وارد کنید.", + "Enter a password": "رمز عبور وارد کنید", + "Enter an username you like": "یک نام کاربری دلخواه وارد کنید", + "Expire At": "انقضا در", + "FROM ": "از ", + "Failed": "ناموفق", + "Failed to add peers in bulk": "افزودن گروهی Peers با شکست مواجه شد.", + "Failed to allow access of peer (.*)": "اجازه دسترسی به peer ($1) با شکست مواجه شد.", + "Failed to check available update": "عدم موفقیت در بررسی آپدیت‌های در دسترس.", + "Failed to save configuration through WireGuard": "ذخیره پیکربندی از طریق WireGuard با شکست مواجه شد.", + "File": "فایل", + "Filter": "فیلتر", + "Generating key pairs by bulk failed": "تولید گروهی کلیدهای جفتی (Key Pairs) با شکست مواجه شد.", + "Geolocation": "موقعیت جغرافیایی", + "Grid": "", + "Help": "راهنما", + "Home": "خانه", + "Hop": "", + "How many peers you want to add\\?": "چند peer می خواهید اضافه کنید؟", + "I don't need MFA": "من به احراز هویت چندمرحله‌ای (MFA) نیاز ندارم.", + "IP Address": "آدرس IP", + "IP Address / Hostname": "آدرس IP / نام میزبان", + "IP Address/CIDR": "IP Address/CIDR", + "IP Address/CIDR is invalid": "آدرس IP یا CIDR نامعتبر است.", + "If you're sure, please type in the configuration name below and click Delete": "اگر مطمئن هستید، نام پیکربندی را در کادر زیر وارد کرده و روی حذف کلیک کنید.", + "Include configuration file as an attachment": "", + "Invalid Port": "پورت نامعتبر است.", + "Is Alive": "در دسترس است", + "Job": "جاب", + "Job ID": "شناسه جاب", + "Jobs Logs": "گزارش جاب ها", + "Key": "کلید", + "Language": "زبان", + "Light": "روشن", + "Link expire date failed to update. Reason: (.*)": "به‌روزرسانی تاریخ انقضای لینک با شکست مواجه شد. دلیل: $1", + "Link expire date updated": "تاریخ انقضای لینک با موفقیت به‌روزرسانی شد.", + "List": "", + "Listen Port": "پورت گوش‌دادن", + "Live Preview": "", + "Log ID": "شناسه گزارش", + "Logs": "گزارش ها", + "MTU": "MTU", + "MTU format is not correct": "فرمت MTU نادرست است.", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "برای اعمال تغییرات آدرس IP و پورت شنود، باید WGDashboard را دستی راه‌اندازی مجدد کنید.", + "Max RTT \\(ms\\)": "", + "Memory": "", + "Memory Usage": "", + "Message": "پیام", + "Min RTT \\(ms\\)": "", + "Multi-Factor Authentication \\(MFA\\)": "احراز هویت چند عاملی (MFA)", + "Name": "نام", + "Network": "", + "Never Expire": "نامحدود", + "New Configuration": "پیکربندی جدید", + "New Password": "", + "Next": "بعدی", + "Nice to meet you!": "!از آشنایی با شما خوشوقتم 😊", + "No": "خیر", + "No Encryption": "", + "No WGDashboard API Key": "کلید API WGDashboard وجود ندارد", + "No active job at the moment\\.": " در حال حاضر هیچ جابی فعال نیست .", + "No available IP containing": "هیچ IP قابل استفاده‌ای شامل این مقدار یافت نشد.", + "No backup yet, click the button above to create backup\\.": "", + "No more available IP can assign": "IP آزادی برای اختصاص دادن باقی نمانده است.", + "OTP from your authenticator": "رمز یک‌بارمصرف از برنامه احراز هویت شما", + "Off": "خاموش", + "Official Documentation": "", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "اوه نه... این لینک یا منقضی شده یا نامعتبر است.", + "On": "روشن", + "Once you deleted this configuration\\:": "", + "Open File": "", + "Optional Settings": "تنظیمات اختیاری", + "Or you can click the link below:": "یا می‌توانید روی لینک زیر کلیک کنید:", + "Other Settings": "تنظیمات دیگر", + "Password": "رمز عبور", + "Peer": "Peer", + "Peer Configuration File": "", + "Peer Default Settings": "تنظیمات پیش‌فرض peer", + "Peer Jobs": "جاب peer", + "Peer Remote Endpoint": "نقطه پایانی راه دور peer", + "Peer Settings": "تنظیمات Peer", + "Peer created successfully": "peer با موفقیت ساخته شد", + "Peer data usage reset successfully": "میزان مصرف داده peer با موفقیت بازنشانی شد.", + "Peer does not exist": "peer وجود ندارد", + "Peer download started": "دانلود peer آغاز شد.", + "Peer job deleted": "جاب peer حذف شد.", + "Peer job saved": "جاب peer با موفقیت ذخیره شد.", + "Peer saved": "peer ذخیره شد", + "Peers": "Peers", + "Peers Data Usage": "داده های مصرفی Peer`s", + "Peers Default Settings": "تنظیمات پیش فرض Peers", + "Peers Settings": "تنظیمات peerها", + "Persistent Keepalive": " نگه‌داری پایدار اتصال", + "Persistent Keepalive format is not correct": "فرمت Persistent Keepalive نادرست است.", + "Pick Available IP": "انتخاب IP موجود", + "Pinging...": "در حال پینگ کردن...", + "Please fill in all required box": "لطفاً تمام فیلدهای الزامی را پر کنید.", + "Please fill in the following fields to finish setup": "لطفاً فیلدهای زیر را برای تکمیل تنظیمات پر کنید.", + "Please provide a valid configuration name": "لطفاً یک نام پیکربندی معتبر وارد کنید.", + "Please provide ipAddress": "لطفاً آدرس IP را وارد کنید.", + "Please provide ipAddress and count": "لطفاً آدرس IP و تعداد را وارد کنید.", + "Please specify amount of peers you want to add": "لطفاً تعداد Peers که می‌خواهید اضافه کنید را مشخص کنید.", + "Please specify an IP Address (v4/v6)": "لطفاً یک آدرس IP نسخه ۴ یا ۶ مشخص کنید.", + "Please specify job": "لطفاً یک جاب مشخص کنید.", + "Please specify one or more peers": "لطفاً یک یا چند peer را مشخص کنید.", + "Please specify peer and configuration": "لطفاً peer و پیکربندی را مشخص کنید.", + "Port": "", + "Pre-Shared Key": "کلید از قبل به اشتراک گذاشته شده", + "Private Key": "کلید خصوصی", + "Private key does not match with the public key": "کلید خصوصی با کلید عمومی مطابقت ندارد.", + "Processes": "", + "Protocol": "", + "Public Key": "کلید عمومی", + "QR Code": "QR Code", + "Ready": "", + "Real Time Received Data Usage": "داده های مصرفی دریافت شده در زمان واقعی", + "Real Time Sent Data Usage": "داده های مصرفی ارسال شده در زمان واقعی", + "Received": "دریافت", + "Refresh": "تازه کردن", + "Refresh Interval": "فاصله بازخوانی", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "به یاد داشته باشید که / را در انتهای مسیر خود حذف کنید. به عنوان مثال: /etc/wireguard", + "Repeat New Password": "", + "Reset": "بازنشانی", + "Reset Data Usage": "بازنشانی مصرف داده", + "Restore": "بازیابی", + "Restore Configuration": "بازیابی پیکربندی", + "Restoring": "در حال بازیابی", + "Restrict Access": "محدود کردن دسترسی", + "Restrict Peer": "محدود کردن peer", + "Restricted": "محدود شده", + "Restricted ([0-9]{1,}) peer\\(s\\)": "", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "", + "Restricted Peers?": "peerهای محدودشده؟", + "Restricting\\.\\.\\.": "محدود کردن...", + "Revert": "برگرداندن تغییرات", + "Save": "ذخیره", + "Save Configuration": "ذخیره پیکربندی", + "Save Peer": "ذخیره peer", + "Saving\\.\\.\\.": "درحال ذخیره کردن...", + "Scan QR Code with the WireGuard App to add peer": "کد QR را با اپلیکیشن WireGuard اسکن کنید تا Peer اضافه شود.", + "Schedule Jobs": "برنامه ریزی جاب ها", + "Search": "", + "Search Peers\\.\\.\\.": "جستجو Peer", + "Select All": "انتخاب همه", + "Select Peers": "انتخاب peerها", + "Select a backup you want to restore": "یک نسخه پشتیبان برای بازیابی انتخاب کنید.", + "Selected Backup": "نسخه پشتیبان انتخاب‌ شده", + "Send": "", + "Send From": "", + "Send Test Email": "", + "Sending\\.\\.\\.": "", + "Sent": "ارسال", + "Sent / Received / Lost Package": "بسته‌های ارسال‌شده / دریافت‌شده / گم‌شده", + "Server": "سرور", + "Server List": "لیست سرور ها", + "Settings": "تنظیمات", + "Setup": "نصب", + "Share Peer": "به اشتراک گذاشتن peer", + "Share link failed to create. Reason: (.*)": "ایجاد لینک اشتراک‌گذاری با شکست مواجه شد. دلیل: $1", + "Share with Email": "", + "Sharing\\.\\.\\.": "اشتراک گذاری...", + "Sign In": "ورود", + "Sign Out": "خروج", + "Sign in session ended, please sign in again": "نشست ورود به پایان رسیده است، لطفاً دوباره وارد شوید.", + "Signing In\\.\\.\\.": "ورود به سیستم...", + "Sorry, your username or password is incorrect.": "متأسفیم، نام کاربری یا رمز عبور شما نادرست است.", + "Sort By": "مرتب سازی براساس", + "Start Sharing": "شروع اشتراک گذاری", + "Status": "وضعیت", + "Step (.*)": "مرحله $1", + "Stop Sharing": "توقف اشتراک گذاری", + "Stop Sharing\\.\\.\\.": "توقف اشتراک گذاری...", + "Storage": "", + "Success": "موفق", + "Swap Memory": "", + "Swap Memory Usage": "", + "System Status": "", + "TOTP verified!": "کد TOTP با موفقیت تأیید شد!", + "Table": "", + "The maximum number of peers can add is (.*)": "حداکثر تعداد peer که می‌توان اضافه کرد عبارت است از: $1", + "Theme": "قالب", + "This IP is not available: (.*)": " IP $1 در دسترس نیست:", + "This configuration have ([0-9].*) backups": "این پیکربندی $1 نسخه پشتیبان دارد.", + "This configuration have no backup": "این پیکربندی هیچ نسخه پشتیبانی ندارد.", + "This peer already exist": "این Peer از قبل وجود دارد.", + "This peer does not have any job yet\\.": "این peer هیچ جاب فعالی ندارد", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "این تغییر به‌صورت سراسری اعمال خواهد شد و برای کد QR و فایل پیکربندی همه Peer`s اعمال می‌شود.", + "To update this configuration's name, WGDashboard will execute the following operations:": "", + "Toggle When Start Up": "فعال‌سازی هنگام راه‌اندازی", + "Tools": "ابزار ها", + "Total": "مجموع", + "Total Received": "مجموع دریافت شده", + "Total Sent": "مجموع ارسال شده", + "Total Usage": "مصرف کل", + "Turning Off\\.\\.\\.": "در حال خاموش شدن ...", + "Turning On\\.\\.\\.": "در حال روشن شدن...", + "Unsaved Job": "جاب ذخیره نشده", + "Untitled Peer": "", + "Update Name": "", + "Update Password": "", + "Update peer failed when saving the configuration": "ذخیره پیکربندی پس از به‌روزرسانی peer با شکست مواجه شد.", + "Update peer failed when updating Allowed IPs": "به‌روزرسانی IPهای مجاز برای peer با شکست مواجه شد.", + "Update peer failed when updating Pre-Shared Key": "به‌روزرسانی کلید مشترک (Pre-Shared Key) برای peer با شکست مواجه شد.", + "Updated at": "بروزرسانی شده در", + "Use your own Private and Public Key": "از کلید خصوصی و عمومی خود استفاده کنید", + "Username": "نام کاربری", + "WGDashboard API Keys function is disabled": "قابلیت کلیدهای API در WGDashboard غیرفعال است.", + "WGDashboard Account Settings": "تنظیمات حساب WGDashboard", + "WGDashboard Settings": "تنظیمات WGDashboard", + "WGDashboard language update failed": "به‌روزرسانی زبان WGDashboard با شکست مواجه شد.", + "Welcome to": "خوش آمدید", + "What\\'s the body\\?": "", + "What\\'s the subject\\?": "", + "When should this API Key expire\\?": "چه زمانی باید این کلید API منقضی شود؟", + "Who are you sending to\\?": "", + "WireGuard Configuration Settings": "تنظیمات پیکربندی WireGuard", + "WireGuard Configurations": "پیکربندی‌های وایرگارد", + "WireGuard Configurations Settings": "تنظیمات پیکربندی‌های وایرگارد", + "WireGuard configuration path saved": "مسیر پیکربندی WireGuard ذخیره شد.", + "Yes": "بله", + "You can add up to (.*) peers": "شما می‌توانید تا حداکثر $1 Peer اضافه کنید.", + "You can visit our: ": "", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "شما هنوز هیچ پیکربندی وایرگاردی ندارید. لطفاً پوشه پیکربندی را بررسی کنید یا آن را در تنظیمات تغییر دهید. به‌طور پیش‌فرض، پوشه /etc/wireguard است.", + "You don't have any configuration to restore": "هیچ پیکربندی برای بازیابی وجود ندارد.", + "You're on the latest version": "شما از آخرین نسخه استفاده می‌کنید", + "\\(At least 8 characters and make sure is strong enough!\\)": "(حداقل ۸ کاراکتر و مطمئن شوید که رمز عبور به‌اندازه کافی قوی باشد!)", + "\\(Required for QR Code and Download\\)": "(برای کد QR و دانلود لازم است)", + "\\(Required\\)": "(الزامی)", + "if": "اگر", + "is": "هست", + "larger than": "بزرگتر از", + "or": "یا", + "or click the button below to download the ": "یا روی دکمه زیر کلیک کنید تا فایل را دانلود کنید", + "then": "سپس", + "to add your server": "برای افزودن سرور شما" +} \ No newline at end of file diff --git a/src/static/locales/fr-CA.json b/src/static/locales/fr-CA.json new file mode 100644 index 0000000..cad0796 --- /dev/null +++ b/src/static/locales/fr-CA.json @@ -0,0 +1,369 @@ +{ + " file": " fichier", + "(.*) Available IP Address": "$1 adresses IP disponible", + "(.*) Minutes": "$1 minutes", + "(.*) Seconds": "$1 secondes", + "(.*) Used": "", + "(.*) is off": "$1 est désactivé", + "(.*) is on": "$1 est activé", + "([0-9].*) Backups?": "$1 sauvegardes?", + "([0-9].*) Peers?": "$1 pairs?", + "([0-9]{1,}) Interfaces": "", + "([0-9]{1,}) Partitions": "", + "(v[0-9.]{1,}) is now available for update!": "$1 est disponible pour mise à jour", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Veuillez balayer le code QR pour générer un TOTP avec l'authenticateur de votre choix", + "2\\. Enter the TOTP generated by your authenticator to verify": "2. Entrez le code TOTP généré par votre authenticateur", + "API Key": "Clé d'API", + "API Key created": "Clé d'API créée", + "API Key deleted": "Clé d'API supprimée", + "API Keys": "Clés d'API", + "API Keys function is failed to disable": "Échec de la désactivation de la clé", + "API Keys function is failed to enable": "Échec de l'activation de la clé", + "API Keys function is successfully disabled": "La clé d'API est désactivé", + "API Keys function is successfully enabled": "La clé d'API est activée", + "Access Remote Server": "Accéder à distance au serveur", + "Access Restricted": "Accès limité", + "Account Settings": "Paramètres du compte", + "Active Jobs": "Tâches actives", + "Add": "Ajouter", + "Add Peers": "Ajouter des pairs", + "Adding\\.\\.\\.": "Ajout...", + "Address": "adresse", + "Advanced Options": "", + "All Active Jobs": "Toutes les tâches actives", + "All connected peers will get disconnected": "Tout les pairs seront déconnectés", + "Allow Access": "Autoriser l'accès", + "Allow access successfully": "Accès autorisé avec succès", + "Allowed IP already taken by another peer": "L'IP autorisée est déja prise par un autre pair", + "Allowed IPs": "IPs autorisées", + "Allowed IPs Validation": "", + "Allowed IPs already taken by another peer": "Les IP autorisées sont déja prises par un autre pair", + "Allowed IPs is invalid": "Les IPs autorisées sont invalides", + "Allowing Access\\.\\.\\.": "Autorisation de l'accès", + "AmneziaWG Peer Setting": "", + "Appearance": "Apparence", + "Are you sure to delete": "Êtes-vous certains de supprimer", + "Are you sure to delete this API key\\?": "Êtes-vous sur de supprimer cette clé d'API", + "Are you sure to delete this backup\\?": "Êtes-vous certains de supprimer cette sauvegarde?", + "Are you sure to delete this configuration\\?": "Êtes-vous certains de supprimer cette configuration", + "Are you sure to delete this peer\\?": "Êtes-vous certains de supprimer ce pair", + "Are you sure to restore this backup\\?": "", + "Average / Min / Max Round Trip Time": "Moyen / Min / Max latence allez-retour", + "Average RTT \\(ms\\)": "", + "Backup": "Sauvegarde", + "Backup & Restore": "Sauvegarde et rétablissement", + "Backup Date": "Date de la sauvegarde", + "Backup not selected": "Aucune sauvegarde sélectionnée", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Tous les fichiers de configurations ainsi que le tableau de la base de donnée relié à cette configuration seront supprimés", + "Bulk Add": "Ajout en groupe", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "En ajoutant des pairs en groups, le nom de chaque pair sera généré, et l'adresse autorisée sera attribuée selon la prochaine adresse disponible", + "CPU": "", + "CPU Usage": "", + "Cancel": "Annuler", + "Checking backups...": "Vérification des sauvegardes...", + "Checking for update...": "Recherche des mises à jour", + "Clear Selection": "Vider la sélection", + "Click": "Clique", + "Click to change a backup": "Cliquez pour changer la sauvegarde", + "Complete": "Complet", + "Configuration": "Configuration", + "Configuration File": "", + "Configuration Name": "Nom de la configuration", + "Configuration Settings": "Paramètres des configurations", + "Configuration deleted": "Configuration supprimée", + "Configuration does not exist": "La configuration n'existe pas", + "Configuration name already exist\\.": "Le nom est déja utilisé", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "Le nom ne peut contenir que 15 charactère. Lettres minuscules/majuscules, nombres,tirer, tiret bas, égal, plus et point", + "Configuration name is invalid. Possible reasons:": "Le nom est invalide, raisons possuibles:", + "Configuration restored": "Configuration rétablie", + "Configuration saved": "Configuration enregistrée", + "Configurations": "Configurations", + "Configurations Directory": "Dossier des configurations", + "Confirm \\& edit restore information": "Valider et modifier les information à Rétablir", + "Confirm password": "Confirmer le mot de passe", + "Connected Peers": "Pairs connectés", + "Contain": "Contiens", + "Count": "Compte:", + "Create": "Créer", + "Create API Key": "Créer une clé d'API", + "Create Backup": "Créer une sauvegarde", + "Create an account": "Créer un compte", + "Creating\\.\\.\\.": "Création en cours...", + "Current Password": "Mot de passe actuel", + "Current Version:": "Version actuelle", + "Currently the peer is not sharing": "Le pair ne partage pas présentement", + "DNS": "DNS", + "DNS format is incorrect": "Le format du DNS est incorrect", + "Danger Zone": "", + "Dark": "Sombre", + "Dashboard IP Address \\& Listen Port": "IP et port du tableau de bord", + "Dashboard Language": "Langage du tableau de bord", + "Dashboard Theme": "Thème du tableau de bord", + "Dashboard language update failed": "Échec du changement de langage", + "Database File": "Fichier de base de donnée", + "Date": "Date", + "Delete": "Supprimer", + "Delete Configuration": "Supprimer la configuration", + "Delete Peer": "Supprimer le pair", + "Delete current configuration's database table and \\.conf file": "", + "Deleted ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 supprimé(s)", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 supprimé(s). Échec de la suppression du(des) pair(s) $2", + "Deleting...": "Suppression...", + "Disabled": "Désactivé", + "Discord Server": "", + "Display": "Affichage", + "Display As": "", + "Don't think that's a good idea": "Ce n'est probablement pas une bonne idée", + "Done": "Terminé", + "Download": "", + "Download All": "Télécharger tout", + "Download Finished": "Téléchargement complété", + "Download \\& QR Code is not available due to no private key set for this peer": "Le téléchargement et le code QR ne sont pas disponible car il n'y a pas de clé privée associée à ce pair", + "Downloading": "Téléchargement", + "Duplicate current configuration's database table and \\.conf file with the new name": "", + "Edit": "Modifier", + "Edit Raw Configuration File": "", + "Email Account": "", + "Email Body Template": "", + "Email sent successfully!": "", + "Enabled": "Activé", + "Encryption": "", + "Endpoint Allowed IPs": "adresses autorisées au Endpoint", + "Endpoint Allowed IPs format is incorrect": "Le format des IPs autorisées est incorrect", + "Enter IP Address / Hostname": "Entrez l'adresse", + "Enter IP Address/CIDR": "Entrer l'IP en format /CIDR", + "Enter a password": "Entrez un mot de passe", + "Enter an username you like": "Entrez le nom d'utilisateur voulu", + "Expire At": "Expire à", + "FROM ": "DE", + "Failed": "Échec", + "Failed to add peers in bulk": "L'ajout de pairs en groupe a échoué", + "Failed to allow access of peer (.*)": "Échec de l'autorisation d'accès au pair", + "Failed to check available update": "Échec de la vérification des mises à jour", + "Failed to save configuration through WireGuard": "Échec de l'enregistrement de la configuration sur WireGuard", + "File": "Fichier", + "Filter": "Filtrer", + "Generating key pairs by bulk failed": "La génération des clés en groupe a échouée", + "Geolocation": "Géolocalisation", + "Grid": "", + "Help": "Assistance", + "Home": "Accueil", + "Hop": "", + "How many peers you want to add\\?": "Combien de pairs voulez-vous ajouter?", + "I don't need MFA": "Je n'ai pas besoin de l'authentification à double facteurs", + "IP Address": "adresse IP", + "IP Address / Hostname": "Adresse IP / Nom d'hôte", + "IP Address/CIDR": "adresse IP/CIDR", + "IP Address/CIDR is invalid": "L'adresse IP/CIDR est incorrecte", + "If you're sure, please type in the configuration name below and click Delete": "Si vous êtez certains, veuillez entrer le nom de la configuration, puis appuyez sur Supprimer", + "Include configuration file as an attachment": "", + "Invalid Port": "Port invalide", + "Is Alive": "est actif", + "Job": "Tâche", + "Job ID": "ID de la tâche", + "Jobs Logs": "Journaux des tâches", + "Key": "Clé", + "Language": "Langage", + "Light": "Clair", + "Link expire date failed to update. Reason: (.*)": "Échec de la modification de la date d'expiration: $1", + "Link expire date updated": "Date d'expiration du lien changée", + "List": "", + "Listen Port": "Port d'écoute", + "Live Preview": "", + "Log ID": "ID du journal", + "Logs": "Logs", + "MTU": "MTU", + "MTU format is not correct": "Le format du MTU est incorrect", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "Un redémarrage de WGDashboard est nécessaire pour appliquer le changement d'IP/port", + "Max RTT \\(ms\\)": "", + "Memory": "", + "Memory Usage": "", + "Message": "Message", + "Min RTT \\(ms\\)": "", + "Multi-Factor Authentication \\(MFA\\)": "Authentification à deux facteurs", + "Name": "Nom", + "Network": "", + "Never Expire": "N'expire jamais", + "New Configuration": "Nouvelle configuration", + "New Password": "Nouveau mot de passe", + "Next": "Suivant", + "Nice to meet you!": "Content de vous rencontrer", + "No": "Non", + "No Encryption": "", + "No WGDashboard API Key": "Pas de clé d'API WGDashboard", + "No active job at the moment\\.": "Pas de tâche active", + "No available IP containing": "Aucune IP disponible contient", + "No backup yet, click the button above to create backup\\.": "Aucune sauvegarde, appuyez sur le bouton ci-dessus pour en créer une.", + "No more available IP can assign": "Il n'y a plus d'adresses disponible", + "OTP from your authenticator": "OTP de l'authenticateur", + "Off": "Arrêt", + "Official Documentation": "", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "Oh oh, il semble que ce lien est expiré ou invalide", + "On": "Marche", + "Once you deleted this configuration\\:": "Quand vous aurez supprimer cette configuration:", + "Open File": "", + "Optional Settings": "Paramètres optionnels", + "Or you can click the link below:": "Ou vous pouvez cliquer sur le lien ci-dessous", + "Other Settings": "Autre paramètres", + "Password": "Mot de passe", + "Peer": "Pair", + "Peer Configuration File": "", + "Peer Default Settings": "Paramètres par défaut des pairs", + "Peer Jobs": "Tâches des pairs", + "Peer Remote Endpoint": "Endpoint externe du pair", + "Peer Settings": "Paramètres des pairs", + "Peer created successfully": "Pair créé avec succès", + "Peer data usage reset successfully": "L'utilisation des données du pairs a été réinitialisée", + "Peer does not exist": "Le pair n'existe pas", + "Peer download started": "Téléchargement du pair en cours", + "Peer job deleted": "Tâche du pair supprimée", + "Peer job saved": "Tâche du pair enregistré", + "Peer saved": "Pair enregistré", + "Peers": "Pairs", + "Peers Data Usage": "Utilisation de données des pairs", + "Peers Default Settings": "Paramètres par défaut des pairs", + "Peers Settings": "Paramètres des pairs", + "Persistent Keepalive": "Keepalive permanent", + "Persistent Keepalive format is not correct": "Le format du Keepalive permanent est incorrect", + "Pick Available IP": "Choisir l'IP disponible", + "Pinging...": "Pinging...", + "Please fill in all required box": "Veuillez remplir toutes les cases", + "Please fill in the following fields to finish setup": "Veuillez remplir les cases suivants pour terminer la configuration", + "Please provide a valid configuration name": "Veuillez entrer un nom de configuration valide", + "Please provide ipAddress": "Veuillez fournir l'adresse IP", + "Please provide ipAddress and count": "Veuillez fournir l'adresse IP et le compte", + "Please specify amount of peers you want to add": "Veuillez préciser le nombre de pair à ajouter", + "Please specify an IP Address (v4/v6)": "Veuillez préciser une adresse (IPv4/IPv6)", + "Please specify job": "Veuillez spécifier une tâche", + "Please specify one or more peers": "Veuillez spécifier un ou plusieurs pairs", + "Please specify peer and configuration": "Veuillez spécifier un pair et une configuration", + "Port": "", + "Pre-Shared Key": "Clé prépartagée", + "Private Key": "Clé privée", + "Private key does not match with the public key": "La clé privée ne correspond pas à la clé publique", + "Processes": "", + "Protocol": "", + "Public Key": "Clé publique", + "QR Code": "Code QR", + "Ready": "", + "Real Time Received Data Usage": "Réception de données en temps réel", + "Real Time Sent Data Usage": "Envoie de données en temps réel", + "Received": "Reçu", + "Refresh": "Rafraîchir", + "Refresh Interval": "Intervalle d'actualisation", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "N'oubliez pas de retirer la / à la fin du chemin vers le dossier. ex: /etc/wireguard", + "Repeat New Password": "Répétez le nouveau mot de passe", + "Reset": "Réinitialiser", + "Reset Data Usage": "Réinitialiser l'utilisation des données", + "Restore": "Rétablir", + "Restore Configuration": "Rétablir la configuration", + "Restoring": "Rétablissement", + "Restrict Access": "Limiter l'accès", + "Restrict Peer": "Limiter le pair", + "Restricted": "Limité", + "Restricted ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 limités", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 limité(s). Échec de la limitation du(des) pair(s) $2", + "Restricted Peers?": "Pairs limités?", + "Restricting\\.\\.\\.": "Restriction en cours...", + "Revert": "Revenir", + "Save": "Enregistrer", + "Save Configuration": "Enregistrer la configuration", + "Save Peer": "Enregistrer le pair", + "Saving\\.\\.\\.": "Enregistrement...", + "Scan QR Code with the WireGuard App to add peer": "Balayez le code QR avec l'application WireGuard pour ajouter le pair", + "Schedule Jobs": "Panifier les tâches", + "Search": "", + "Search Peers\\.\\.\\.": "Rechercher les pairs...", + "Select All": "Tout sélectionner", + "Select Peers": "Sélectionnez les pairs", + "Select a backup you want to restore": "Sélectionnez la sauvegarde à Rétablir", + "Selected Backup": "Sauvegarde sélectionnée", + "Send": "", + "Send From": "", + "Send Test Email": "", + "Sending\\.\\.\\.": "", + "Sent": "Envoyé", + "Sent / Received / Lost Package": "Paquets Envoyés / Reçus / Perdus", + "Server": "Serveur", + "Server List": "Liste des serveurs", + "Settings": "Paramètres", + "Setup": "Configurer", + "Share Peer": "Partager le pair", + "Share link failed to create. Reason: (.*)": "Échec de la création du lien: $1", + "Share with Email": "", + "Sharing\\.\\.\\.": "Partage en cours...", + "Sign In": "Se connecter", + "Sign Out": "Se déconnecter", + "Sign in session ended, please sign in again": "La session est terminée, veuillez vous reconnecter", + "Signing In\\.\\.\\.": "Connexion en cours...", + "Sorry, your username or password is incorrect.": "Désolé, l'utilisateur ou le mot de passe est incorrect", + "Sort By": "Trier par", + "Start Sharing": "Commencer le partage", + "Status": "Statut", + "Step (.*)": "Étape $1", + "Stop Sharing": "Le partage est arrêté", + "Stop Sharing\\.\\.\\.": "Arrêt du partage...", + "Storage": "", + "Success": "Succès", + "Swap Memory": "", + "Swap Memory Usage": "", + "System Status": "", + "TOTP verified!": "TOTP vérifié", + "Table": "", + "The maximum number of peers can add is (.*)": "Le maximum de pair qu'il est possible d'ajouter est $1", + "Theme": "Thème", + "This IP is not available: (.*)": "Cette IP n'est pas disponible: $1", + "This configuration have ([0-9].*) backups": "Cette configuration a $1 sauvegardes", + "This configuration have no backup": "Cette configuration n'a pas de sauvegarde", + "This peer already exist": "Ce pair existe déja", + "This peer does not have any job yet\\.": "Ce pair n'a pas encore de tâche", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "C'est un changement global, qui s'appliquera sur tout les codes QR des pairs ainsi que leur fichier de configuration", + "To update this configuration's name, WGDashboard will execute the following operations:": "", + "Toggle When Start Up": "Activer au démarrage", + "Tools": "Outils", + "Total": "Total", + "Total Received": "Total reçu", + "Total Sent": "Total envoyé", + "Total Usage": "Utilisation totale", + "Turning Off\\.\\.\\.": "Désactivation", + "Turning On\\.\\.\\.": "Activation", + "Unsaved Job": "Tâche non-enregistrée", + "Untitled Peer": "", + "Update Name": "", + "Update Password": "Mettre à jour le mot de passe", + "Update peer failed when saving the configuration": "La modification du pair a échouée en enregistrant la configuration", + "Update peer failed when updating Allowed IPs": "La modification du pair a échouée en changeant les IPs autorisées", + "Update peer failed when updating Pre-Shared Key": "La modification du pair a échouée en changeant la clé prépartagée", + "Updated at": "Mis à jour le", + "Use your own Private and Public Key": "Utiliser vos proprés clés privée/publique", + "Username": "Utilisateur", + "WGDashboard API Keys function is disabled": "Les clés d'API WGDashboard sont désactivées", + "WGDashboard Account Settings": "Paramètres du compte WGDashboard", + "WGDashboard Settings": "Paramètres de WGDashboard", + "WGDashboard language update failed": "Échec de la modification de la langue de WGDashboard", + "Welcome to": "Bienvenue", + "What\\'s the body\\?": "", + "What\\'s the subject\\?": "", + "When should this API Key expire\\?": "Quand est-ce que cette clé devrait expirer?", + "Who are you sending to\\?": "", + "WireGuard Configuration Settings": "Paramètre des configurations WireGuard", + "WireGuard Configurations": "Configurations WireGuard", + "WireGuard Configurations Settings": "Paramètre des configurations WireGuard", + "WireGuard configuration path saved": "Chemin de la configuration WireGuard enregistré", + "Yes": "Oui", + "You can add up to (.*) peers": "Vous pouvez ajouter jusqu'à $1 pairs", + "You can visit our: ": "", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Vous n'avez pas encore de configurations WireGuard. Veuillez vérifier le dossier de configuration ou faire un changement dans les paramètres. Par défaut, le dossier est /etc/wireguard.", + "You don't have any configuration to restore": "Vous n'avez pas de configruations à Rétablir", + "You're on the latest version": "Vous êtes sur la dernière version", + "\\(At least 8 characters and make sure is strong enough!\\)": "(assurez vous d'avoir un mot de passe fort, d'au moins 8 charactères", + "\\(Required for QR Code and Download\\)": "(Nécessaire pour code QR et téléchargement", + "\\(Required\\)": "Nécessaire", + "if": "si", + "is": "est", + "larger than": "plus grand que", + "or": "ou", + "or click the button below to download the ": "ou cliquez sur le boutton ci-dessous pour télécharger le", + "then": "alors", + "to add your server": "pour ajouter votre serveur" +} \ No newline at end of file diff --git a/src/static/locales/fr-FR.json b/src/static/locales/fr-FR.json new file mode 100644 index 0000000..a962005 --- /dev/null +++ b/src/static/locales/fr-FR.json @@ -0,0 +1,369 @@ +{ + " file": " fichier", + "(.*) Available IP Address": "$1 adresses IP disponible", + "(.*) Minutes": "$1min", + "(.*) Seconds": "$1s", + "(.*) Used": "", + "(.*) is off": "$1 est à l'arrêt", + "(.*) is on": "$1 est en marche", + "([0-9].*) Backups?": "$1 sauvegardes ?", + "([0-9].*) Peers?": "$1 pairs ?", + "([0-9]{1,}) Interfaces": "", + "([0-9]{1,}) Partitions": "", + "(v[0-9.]{1,}) is now available for update!": "Mise à jour $1 disponible !", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Veuillez scanner le code QR pour générer un code à usage unique chronométré avec l'application d'authentification de votre choix", + "2\\. Enter the TOTP generated by your authenticator to verify": "2. Entrez le code code à usage unique chronométré généré par votre l'application d'authentification", + "API Key": "Clé d'API", + "API Key created": "Clé d'API créée", + "API Key deleted": "Clé d'API supprimée", + "API Keys": "Clés d'API", + "API Keys function is failed to disable": "Échec de la désactivation de la clé", + "API Keys function is failed to enable": "Échec de l'activation de la clé", + "API Keys function is successfully disabled": "La clé d'API est désactivé", + "API Keys function is successfully enabled": "La clé d'API est activée", + "Access Remote Server": "Accéder à distance au serveur", + "Access Restricted": "Accès limité", + "Account Settings": "Paramètres du compte", + "Active Jobs": "Tâches actives", + "Add": "Ajouter", + "Add Peers": "Ajouter des pairs", + "Adding\\.\\.\\.": "Ajout...", + "Address": "Adresse", + "Advanced Options": "", + "All Active Jobs": "Toutes les tâches actives", + "All connected peers will get disconnected": "Tout les pairs seront déconnectés", + "Allow Access": "Autoriser l'accès", + "Allow access successfully": "Accès autorisé avec succès", + "Allowed IP already taken by another peer": "L'IP autorisée est déja prise par un autre pair", + "Allowed IPs": "IPs autorisées", + "Allowed IPs Validation": "", + "Allowed IPs already taken by another peer": "Les adresse autorisées sont déja prises par un autre pair", + "Allowed IPs is invalid": "Les adresses autorisées sont invalides", + "Allowing Access\\.\\.\\.": "Autorisation de l'accès", + "AmneziaWG Peer Setting": "", + "Appearance": "Apparence", + "Are you sure to delete": "Êtes-vous certains de supprimer", + "Are you sure to delete this API key\\?": "Êtes-vous sur de supprimer cette clé d'API", + "Are you sure to delete this backup\\?": "Êtes-vous certains de supprimer cette sauvegarde ?", + "Are you sure to delete this configuration\\?": "Êtes-vous certains de supprimer cette configuration ?", + "Are you sure to delete this peer\\?": "Êtes-vous certains de supprimer ce pair ?", + "Are you sure to restore this backup\\?": "", + "Average / Min / Max Round Trip Time": "Moyenne / Min / Max latence allez-retour", + "Average RTT \\(ms\\)": "", + "Backup": "Sauvegarde", + "Backup & Restore": "Sauvegarde & Rétablissement", + "Backup Date": "Date de la sauvegarde", + "Backup not selected": "Aucune sauvegarde sélectionnée", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Tous les fichiers de configurations ainsi que le tableau de la base de donnée relié à cette configuration seront supprimés", + "Bulk Add": "Ajout groupé", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "En ajoutant des pairs de manière groupé, le nom de chaque pair sera généré automatiquement, et l'adresse autorisée sera attribuée selon la prochaine adresse disponible.", + "CPU": "", + "CPU Usage": "", + "Cancel": "Annuler", + "Checking backups...": "Vérification des sauvegardes...", + "Checking for update...": "Recherche des mises à jour", + "Clear Selection": "Vider la sélection", + "Click": "Clique", + "Click to change a backup": "Cliquez pour changer la sauvegarde", + "Complete": "Complet", + "Configuration": "Configuration", + "Configuration File": "", + "Configuration Name": "Nom de la configuration", + "Configuration Settings": "Paramètres des configurations", + "Configuration deleted": "Configuration supprimée", + "Configuration does not exist": "La configuration n'existe pas", + "Configuration name already exist\\.": "Le nom est déja utilisé", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "Le nom ne peut contenir que 15 charactère. Lettres minuscules/majuscules, nombres,tirer, tiret bas, égal, plus et point", + "Configuration name is invalid. Possible reasons:": "Le nom est invalide, raisons possuibles:", + "Configuration restored": "Configuration rétablie", + "Configuration saved": "Configuration enregistrée", + "Configurations": "Configurations", + "Configurations Directory": "Dossier des configurations", + "Confirm \\& edit restore information": "Valider et modifier les information à Rétablir", + "Confirm password": "Confirmer le mot de passe", + "Connected Peers": "Pairs connectés", + "Contain": "Contiens", + "Count": "Compte:", + "Create": "Créer", + "Create API Key": "Créer une clé d'API", + "Create Backup": "Créer une sauvegarde", + "Create an account": "Créer un compte", + "Creating\\.\\.\\.": "En cours de création...", + "Current Password": "Mot de passe actuel", + "Current Version:": "Version actuelle", + "Currently the peer is not sharing": "Le pair ne partage pas présentement", + "DNS": "DNS", + "DNS format is incorrect": "Le format du DNS est incorrect", + "Danger Zone": "", + "Dark": "Sombre", + "Dashboard IP Address \\& Listen Port": "IP et port du tableau de bord", + "Dashboard Language": "Langage du tableau de bord", + "Dashboard Theme": "Thème du tableau de bord", + "Dashboard language update failed": "Échec du changement de langage", + "Database File": "Fichier de base de donnée", + "Date": "Date", + "Delete": "Supprimer", + "Delete Configuration": "Supprimer la configuration", + "Delete Peer": "Supprimer le pair", + "Delete current configuration's database table and \\.conf file": "", + "Deleted ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 supprimé(s)", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 supprimé(s). Échec de la suppression du(des) pair(s) $2", + "Deleting...": "Suppression...", + "Disabled": "Désactivé", + "Discord Server": "", + "Display": "Affichage", + "Display As": "", + "Don't think that's a good idea": "Ceci n'est probablement pas une bonne idée", + "Done": "Terminé", + "Download": "", + "Download All": "Télécharger tout", + "Download Finished": "Téléchargement complété", + "Download \\& QR Code is not available due to no private key set for this peer": "Le téléchargement et le code QR ne sont pas disponible car il n'y a pas de clé privée associée à ce pair", + "Downloading": "Téléchargement", + "Duplicate current configuration's database table and \\.conf file with the new name": "", + "Edit": "Modifier", + "Edit Raw Configuration File": "", + "Email Account": "", + "Email Body Template": "", + "Email sent successfully!": "", + "Enabled": "Activé", + "Encryption": "", + "Endpoint Allowed IPs": "adresses autorisées au Endpoint", + "Endpoint Allowed IPs format is incorrect": "Le format des IPs autorisées est incorrect", + "Enter IP Address / Hostname": "Entrez l'adresse", + "Enter IP Address/CIDR": "Entrer l'adresse avec le format IP/CIDR", + "Enter a password": "Entrez un mot de passe", + "Enter an username you like": "Entrez le nom d'utilisateur souhaité", + "Expire At": "Expire le", + "FROM ": "DE", + "Failed": "Échec", + "Failed to add peers in bulk": "L'ajout de pairs groupé a échoué", + "Failed to allow access of peer (.*)": "Échec de l'autorisation d'accès au pair", + "Failed to check available update": "Échec de la vérification des mises à jour", + "Failed to save configuration through WireGuard": "Échec de l'enregistrement de la configuration sur WireGuard", + "File": "Fichier", + "Filter": "Filtrer", + "Generating key pairs by bulk failed": "La génération des clés groupé a échouée", + "Geolocation": "Géolocalisation", + "Grid": "", + "Help": "Assistance", + "Home": "Accueil", + "Hop": "", + "How many peers you want to add\\?": "Combien de pairs voulez-vous ajouter ?", + "I don't need MFA": "Je n'ai pas besoin de l'authentification à plusieurs facteurs", + "IP Address": "adresse IP", + "IP Address / Hostname": "Adresse IP / Nom d'hôte", + "IP Address/CIDR": "adresse IP/CIDR", + "IP Address/CIDR is invalid": "L'adresse IP/CIDR est invalide", + "If you're sure, please type in the configuration name below and click Delete": "Si vous êtez certains, veuillez entrer le nom de la configuration, puis appuyez sur Supprimer", + "Include configuration file as an attachment": "", + "Invalid Port": "Port invalide", + "Is Alive": "est actif", + "Job": "Tâche", + "Job ID": "ID de la tâche", + "Jobs Logs": "Journaux des tâches", + "Key": "Clé", + "Language": "Langue", + "Light": "Clair", + "Link expire date failed to update. Reason: (.*)": "Échec de la modification de la date d'expiration: $1", + "Link expire date updated": "Date d'expiration du lien changée", + "List": "", + "Listen Port": "Port d'écoute", + "Live Preview": "", + "Log ID": "ID du journal", + "Logs": "Journaux", + "MTU": "MTU", + "MTU format is not correct": "Le format du MTU est incorrect", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "Un redémarrage de WGDashboard est nécessaire pour appliquer le changement d'IP/port", + "Max RTT \\(ms\\)": "", + "Memory": "", + "Memory Usage": "", + "Message": "Message", + "Min RTT \\(ms\\)": "", + "Multi-Factor Authentication \\(MFA\\)": "Authentification à plusieurs facteurs", + "Name": "Nom", + "Network": "", + "Never Expire": "N'expire jamais", + "New Configuration": "Nouvelle configuration", + "New Password": "Nouveau mot de passe", + "Next": "Suivant", + "Nice to meet you!": "Content de faire votre connaissance !", + "No": "Non", + "No Encryption": "", + "No WGDashboard API Key": "Aucune Clé d'API pour WGDashboard", + "No active job at the moment\\.": "Pas de tâche active", + "No available IP containing": "Aucune IP disponible contenant", + "No backup yet, click the button above to create backup\\.": "Aucune sauvegarde, appuyez sur le bouton ci-dessus pour en créer une.", + "No more available IP can assign": "Il n'y a plus d'adresses disponible", + "OTP from your authenticator": "Code à usage unique de votre application d'authentification", + "Off": "Arrêt", + "Official Documentation": "", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "Oh non, il semble que ce lien est expiré ou invalide.", + "On": "Marche", + "Once you deleted this configuration\\:": "Quand vous aurez supprimer cette configuration:", + "Open File": "", + "Optional Settings": "Paramètres optionnels", + "Or you can click the link below:": "Ou vous pouvez cliquer sur le lien ci-dessous", + "Other Settings": "Autre paramètres", + "Password": "Mot de passe", + "Peer": "Pair", + "Peer Configuration File": "", + "Peer Default Settings": "Paramètres par défaut des pairs", + "Peer Jobs": "Tâches des pairs", + "Peer Remote Endpoint": "Endpoint externe du pair", + "Peer Settings": "Paramètres des pairs", + "Peer created successfully": "Pair créé avec succès", + "Peer data usage reset successfully": "L'utilisation des données du pairs a été réinitialisée", + "Peer does not exist": "Le pair n'existe pas", + "Peer download started": "Téléchargement du pair en cours", + "Peer job deleted": "Tâche du pair supprimée", + "Peer job saved": "Tâche du pair enregistré", + "Peer saved": "Pair enregistré", + "Peers": "Pairs", + "Peers Data Usage": "Utilisation de données des pairs", + "Peers Default Settings": "Paramètres par défaut des pairs", + "Peers Settings": "Paramètres des pairs", + "Persistent Keepalive": "Keepalive permanent", + "Persistent Keepalive format is not correct": "Le format du Keepalive permanent est incorrect", + "Pick Available IP": "Choisir une IP disponible", + "Pinging...": "Pinging...", + "Please fill in all required box": "Veuillez remplir toutes les cases", + "Please fill in the following fields to finish setup": "Veuillez remplir les champs suivants pour terminer la configuration", + "Please provide a valid configuration name": "Veuillez entrer un nom de configuration valide", + "Please provide ipAddress": "Veuillez fournir l'adresse IP", + "Please provide ipAddress and count": "Veuillez fournir l'adresse IP et le compte", + "Please specify amount of peers you want to add": "Veuillez préciser le nombre de pair à ajouter", + "Please specify an IP Address (v4/v6)": "Veuillez préciser une adresse (IPv4/IPv6)", + "Please specify job": "Veuillez spécifier une tâche", + "Please specify one or more peers": "Veuillez spécifier un ou plusieurs pairs", + "Please specify peer and configuration": "Veuillez spécifier un pair et une configuration", + "Port": "", + "Pre-Shared Key": "Clé prépartagée", + "Private Key": "Clé privée", + "Private key does not match with the public key": "La clé privée ne correspond pas à la clé publique", + "Processes": "", + "Protocol": "", + "Public Key": "Clé publique", + "QR Code": "Code QR", + "Ready": "", + "Real Time Received Data Usage": "Réception de données en temps réel", + "Real Time Sent Data Usage": "Envoie de données en temps réel", + "Received": "Reçu", + "Refresh": "Rafraîchir", + "Refresh Interval": "Intervalle d'actualisation", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "N'oubliez pas de retirer le dernier / à la fin du chemin vers le dossier. ex: /etc/wireguard", + "Repeat New Password": "Répétez le nouveau mot de passe", + "Reset": "Réinitialiser", + "Reset Data Usage": "Réinitialiser l'utilisation des données", + "Restore": "Rétablir", + "Restore Configuration": "Rétablir la configuration", + "Restoring": "Rétablissement", + "Restrict Access": "Limiter l'accès", + "Restrict Peer": "Limiter le pair", + "Restricted": "Limité", + "Restricted ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 limités", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 limité(s). Échec de la limitation du(des) pair(s) $2", + "Restricted Peers?": "Pairs limités ?", + "Restricting\\.\\.\\.": "Restriction en cours...", + "Revert": "Revenir", + "Save": "Enregistrer", + "Save Configuration": "Enregistrer la configuration", + "Save Peer": "Enregistrer le pair", + "Saving\\.\\.\\.": "Enregistrement...", + "Scan QR Code with the WireGuard App to add peer": "Balayez le code QR avec l'application WireGuard pour ajouter le pair", + "Schedule Jobs": "Panifier les tâches", + "Search": "", + "Search Peers\\.\\.\\.": "Rechercher les pairs...", + "Select All": "Tout sélectionner", + "Select Peers": "Sélectionnez les pairs", + "Select a backup you want to restore": "Sélectionnez la sauvegarde à Rétablir", + "Selected Backup": "Sauvegarde sélectionnée", + "Send": "", + "Send From": "", + "Send Test Email": "", + "Sending\\.\\.\\.": "", + "Sent": "Envoyé", + "Sent / Received / Lost Package": "Paquets Envoyés / Reçus / Perdus", + "Server": "Serveur", + "Server List": "Liste des serveurs", + "Settings": "Paramètres", + "Setup": "Installer", + "Share Peer": "Partager le pair", + "Share link failed to create. Reason: (.*)": "Échec de la création du lien: $1", + "Share with Email": "", + "Sharing\\.\\.\\.": "Partage en cours...", + "Sign In": "Se connecter", + "Sign Out": "Se déconnecter", + "Sign in session ended, please sign in again": "La session est terminée, veuillez vous reconnecter", + "Signing In\\.\\.\\.": "Connexion en cours...", + "Sorry, your username or password is incorrect.": "Désolé, le nom d'utilisateur ou le mot de passe est incorrect.", + "Sort By": "Trier par", + "Start Sharing": "Commencer le partage", + "Status": "Statut", + "Step (.*)": "Étape N°$1", + "Stop Sharing": "Le partage est arrêté", + "Stop Sharing\\.\\.\\.": "Arrêt du partage...", + "Storage": "", + "Success": "Succès", + "Swap Memory": "", + "Swap Memory Usage": "", + "System Status": "", + "TOTP verified!": "Code à usage unique chronométré vérifié !", + "Table": "", + "The maximum number of peers can add is (.*)": "On peut ajouter au maximum $1 pairs", + "Theme": "Thème", + "This IP is not available: (.*)": "Cette adresse n'est pas disponible: $1", + "This configuration have ([0-9].*) backups": "Cette configuration a $1 sauvegardes", + "This configuration have no backup": "Cette configuration n'a pas de sauvegarde", + "This peer already exist": "Ce pair existe déja", + "This peer does not have any job yet\\.": "Ce pair n'a pas encore de tâche", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "C'est un changement global, qui s'appliquera sur tout les codes QR des pairs ainsi que leur fichier de configuration", + "To update this configuration's name, WGDashboard will execute the following operations:": "", + "Toggle When Start Up": "Activer au démarrage", + "Tools": "Outils", + "Total": "Total", + "Total Received": "Total reçu", + "Total Sent": "Total envoyé", + "Total Usage": "Utilisation totale", + "Turning Off\\.\\.\\.": "Mise à l'Arrêt...", + "Turning On\\.\\.\\.": "Mise en Marche..", + "Unsaved Job": "Tâche non-enregistrée", + "Untitled Peer": "", + "Update Name": "", + "Update Password": "Mettre à jour le mot de passe", + "Update peer failed when saving the configuration": "La modification du pair a échouée en enregistrant la configuration", + "Update peer failed when updating Allowed IPs": "La modification du pair a échouée en changeant les adresses autorisées", + "Update peer failed when updating Pre-Shared Key": "La modification du pair a échouée en changeant la clé prépartagée", + "Updated at": "Mis à jour le", + "Use your own Private and Public Key": "Utiliser vos proprés clés privée & publique", + "Username": "Nom d'Utilisateur", + "WGDashboard API Keys function is disabled": "Les clés d'API WGDashboard sont désactivées", + "WGDashboard Account Settings": "Paramètres du compte WGDashboard", + "WGDashboard Settings": "Paramètres de WGDashboard", + "WGDashboard language update failed": "Échec de la modification de la langue de WGDashboard", + "Welcome to": "Bienvenue à", + "What\\'s the body\\?": "", + "What\\'s the subject\\?": "", + "When should this API Key expire\\?": "Quand est-ce que cette clé devrait expirer ?", + "Who are you sending to\\?": "", + "WireGuard Configuration Settings": "Paramètre des configurations WireGuard", + "WireGuard Configurations": "Configurations de WireGuard", + "WireGuard Configurations Settings": "Paramètre des configurations de WireGuard", + "WireGuard configuration path saved": "Chemin de la configuration WireGuard enregistré", + "Yes": "Oui", + "You can add up to (.*) peers": "Vous pouvez ajouter jusqu'à $1 pairs", + "You can visit our: ": "", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Vous n'avez pas encore de configurations de WireGuard. Veuillez vérifier le dossier de configuration ou les « Paramètres ». Par défaut, le dossier est /etc/wireguard.", + "You don't have any configuration to restore": "Vous n'avez pas de configruations à Rétablir", + "You're on the latest version": "Vous êtes à jour", + "\\(At least 8 characters and make sure is strong enough!\\)": "(Assurez vous d'avoir un mot de passe fort, d'au moins 8 charactères !)", + "\\(Required for QR Code and Download\\)": "(Nécessaire pour code QR et téléchargement", + "\\(Required\\)": "(Nécessaire)", + "if": "si", + "is": "est", + "larger than": "plus grand que", + "or": "ou", + "or click the button below to download the ": "ou cliquez sur le boutton ci-dessous pour télécharger le ", + "then": "alors", + "to add your server": "pour ajouter votre serveur" +} \ No newline at end of file diff --git a/src/static/locales/hu-HU.json b/src/static/locales/hu-HU.json new file mode 100644 index 0000000..915f644 --- /dev/null +++ b/src/static/locales/hu-HU.json @@ -0,0 +1,369 @@ +{ + " file": " fájl", + "(.*) Available IP Address": "$1 elérhető IP-cím", + "(.*) Minutes": "$1 perc", + "(.*) Seconds": "$1 másodperc", + "(.*) Used": "$1 használva", + "(.*) is off": "$1 ki van kapcsolva", + "(.*) is on": "$1 be van kapcsolva", + "([0-9].*) Backups?": "", + "([0-9].*) Peers?": "", + "([0-9]{1,}) Interfaces": "$1 interfész", + "([0-9]{1,}) Partitions": "$1 partíció", + "(v[0-9.]{1,}) is now available for update!": "$1 frissíthető!", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Kérjük, olvassa be az alábbi QR-kódot, hogy TOTP-t generáljon az Ön által választott autentikátorral", + "2\\. Enter the TOTP generated by your authenticator to verify": "2. Adja meg az autentikátor által generált TOTP-t a megerősítéshez", + "API Key": "API-kulcs", + "API Key created": "API-kulcs létrehozva", + "API Key deleted": "API-kulcs törölve", + "API Keys": "API-kulcsok", + "API Keys function is failed to disable": "Az API-kulcs funkció letiltása sikertelen", + "API Keys function is failed to enable": "Az API-kulcs funkció engedélyezése sikertelen", + "API Keys function is successfully disabled": "Az API-kulcs funkció sikeresen letiltva", + "API Keys function is successfully enabled": "Az API-kulcs funkció sikeresen engedélyezve", + "Access Remote Server": "Távoli szerver elérése", + "Access Restricted": "Hozzáférés korlátozva", + "Account Settings": "Fiókbeállítások", + "Active Jobs": "Aktív feladatok", + "Add": "Hozzáadás", + "Add Peers": "Társ hozzáadása", + "Adding\\.\\.\\.": "Hozzáadás...", + "Address": "Cím", + "Advanced Options": "Haladó beállítások", + "All Active Jobs": "Összes aktív feladat", + "All connected peers will get disconnected": "Minden kapcsolódott társ le lesz választva", + "Allow Access": "Hozzáférés engedélyezése", + "Allow access successfully": "Hozzáférés sikeresen engedélyezve", + "Allowed IP already taken by another peer": "Az engedélyezett IP-t már egy másik társ használja", + "Allowed IPs": "Engedélyezett IP-k", + "Allowed IPs Validation": "Engedélyezett IP-k érvényesítése", + "Allowed IPs already taken by another peer": "Az engedélyezett IP-ket már egy másik társ foglalta le", + "Allowed IPs is invalid": "Az engedélyezett IP-k érvénytelenek", + "Allowing Access\\.\\.\\.": "Engedélyezés...", + "AmneziaWG Peer Setting": "AmneziaWG társ beállítás", + "Appearance": "Megjelenés", + "Are you sure to delete": "Biztosan törölni szeretné", + "Are you sure to delete this API key\\?": "Biztosan törölni szeretné ezt az API-kulcsot?", + "Are you sure to delete this backup\\?": "Biztosan törölni szeretné ezt a mentést?", + "Are you sure to delete this configuration\\?": "Biztosan törölni szeretné ezt a konfigurációt?", + "Are you sure to delete this peer\\?": "Biztosan törölni szeretné ezt a társat?", + "Are you sure to restore this backup\\?": "Biztosan visszaállítja ezt a mentést?", + "Average / Min / Max Round Trip Time": "Átlagos / min / max oda-vissza idő", + "Average RTT \\(ms\\)": "Átlagos RTT (ms)", + "Backup": "Biztonsági mentés", + "Backup & Restore": "Mentés és visszaállítás", + "Backup Date": "Mentés dátuma", + "Backup not selected": "Nincs kiválasztva mentés", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "", + "Bulk Add": "Tömeges hozzáadás", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Társak tömeges hozzáadásakor minden társ neve automatikusan generálódik, és az engedélyezett IP a következő elérhető IP lesz.", + "CPU": "CPU", + "CPU Usage": "CPU használat", + "Cancel": "Mégse", + "Checking backups...": "Mentések ellenőrzése...", + "Checking for update...": "Frissítések ellenőrzése...", + "Clear Selection": "Kiválasztás törlése", + "Click": "Kattintson", + "Click to change a backup": "Kattintson a biztonsági mentés megváltoztatásához", + "Complete": "Befejezés", + "Configuration": "Konfiguráció", + "Configuration File": "Konfigurációs fájl", + "Configuration Name": "Konfiguráció neve", + "Configuration Settings": "Konfiguráció beállítások", + "Configuration deleted": "Konfiguráció törölve", + "Configuration does not exist": "A konfiguráció nem létezik", + "Configuration name already exist\\.": "A konfiguráció neve már létezik.", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "A konfiguráció neve csak 15 kis- vagy nagybetűt, számokat, alulvonást, egyenlőségjelet, pluszjelet, pontot és kötőjelet tartalmazhat.", + "Configuration name is invalid. Possible reasons:": "A konfiguráció neve érvénytelen. Lehetséges okok:", + "Configuration restored": "Konfiguráció visszaállítva", + "Configuration saved": "Konfiguráció mentve", + "Configurations": "Konfigurációk", + "Configurations Directory": "Konfigurációs könyvtár", + "Confirm \\& edit restore information": "Visszaállítási információk megerősítése és szerkesztése", + "Confirm password": "Jelszó megerősítése", + "Connected Peers": "Csatlakozott társak", + "Contain": "Tartalmaz", + "Count": "Darabszám", + "Create": "Létrehozás", + "Create API Key": "API-kulcs létrehozása", + "Create Backup": "Biztonsági mentés létrehozása", + "Create an account": "Fiók létrehozása", + "Creating\\.\\.\\.": "Létrehozás...", + "Current Password": "Jelenlegi jelszó", + "Current Version:": "Jelenlegi verzió:", + "Currently the peer is not sharing": "A társ jelenleg nincs megosztva", + "DNS": "DNS", + "DNS format is incorrect": "A DNS formátum helytelen", + "Danger Zone": "Veszélyes zóna", + "Dark": "Sötét", + "Dashboard IP Address \\& Listen Port": "Vezérlőpanel IP-cím és hallgató port", + "Dashboard Language": "Vezérlőpanel nyelv", + "Dashboard Theme": "Vezérlőpanel téma", + "Dashboard language update failed": "A vezérlőpanel nyelvének frissítése sikertelen", + "Database File": "Adatbázis fájl", + "Date": "Dátum", + "Delete": "Törlés", + "Delete Configuration": "Konfiguráció törlése", + "Delete Peer": "Társ törlése", + "Delete current configuration's database table and \\.conf file": "", + "Deleted ([0-9]{1,}) peer\\(s\\)": "Törölve $1 társ", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Sikeresen törölve $1 társ. $2 társ törlése sikertelen", + "Deleting...": "Törlés...", + "Disabled": "Letiltva", + "Discord Server": "Discord szerver", + "Display": "Megjelenítés", + "Display As": "Megjelenítés", + "Don't think that's a good idea": "Szerintem ez nem jó ötlet", + "Done": "Kész", + "Download": "Letöltés", + "Download All": "Összes letöltése", + "Download Finished": "Letöltés befejezve", + "Download \\& QR Code is not available due to no private key set for this peer": "Letöltés és QR-kód nem érhető el, mert nincs beállított privát kulcs ehhez a társhoz", + "Downloading": "Letöltés...", + "Duplicate current configuration's database table and \\.conf file with the new name": "", + "Edit": "Szerkesztés", + "Edit Raw Configuration File": "Nyers konfigurációs fájl szerkesztése", + "Email Account": "E-mail fiók", + "Email Body Template": "E-mail törzs sablon", + "Email sent successfully!": "Az e-mail sikeresen elküldve!", + "Enabled": "Engedélyezve", + "Encryption": "Titkosítás", + "Endpoint Allowed IPs": "Végpont engedélyezett IP-k", + "Endpoint Allowed IPs format is incorrect": "A végpont engedélyezett IP-k formátuma helytelen", + "Enter IP Address / Hostname": "Adja meg az IP-címet / hosztnevet", + "Enter IP Address/CIDR": "Adja meg az IP-címet/CIDR-t", + "Enter a password": "Adja meg a jelszót", + "Enter an username you like": "Adja meg a kívánt felhasználónevet", + "Expire At": "Lejár:", + "FROM ": "FORRÁS: ", + "Failed": "Sikertelen", + "Failed to add peers in bulk": "Nem sikerült tömegesen hozzáadni a társakat", + "Failed to allow access of peer (.*)": "Nem sikerült engedélyezni a hozzáférést a társ számára: $1", + "Failed to check available update": "Nem sikerült ellenőrizni a frissítéseket", + "Failed to save configuration through WireGuard": "Nem sikerült menteni a konfigurációt WireGuardon keresztül", + "File": "Fájl", + "Filter": "Szűrés", + "Generating key pairs by bulk failed": "Nem sikerült tömegesen kulcspárokat generálni", + "Geolocation": "Földrajzi hely", + "Grid": "Rács", + "Help": "Súgó", + "Home": "Főoldal", + "Hop": "Ugrás", + "How many peers you want to add\\?": "Hány társat szeretne hozzáadni?", + "I don't need MFA": "Nincs szükségem MFA-ra", + "IP Address": "IP-cím", + "IP Address / Hostname": "IP-cím / hosztnév", + "IP Address/CIDR": "IP-cím/CIDR", + "IP Address/CIDR is invalid": "Az IP-cím/CIDR érvénytelen", + "If you're sure, please type in the configuration name below and click Delete": "Ha biztos, írja be a konfiguráció nevét alább, és kattintson a Törlésre", + "Include configuration file as an attachment": "Konfigurációs fájl mellékletként csatolása", + "Invalid Port": "Érvénytelen port", + "Is Alive": "Élő?", + "Job": "Feladat", + "Job ID": "Feladat azonosító", + "Jobs Logs": "Feladatnaplók", + "Key": "Kulcs", + "Language": "Nyelv", + "Light": "Világos", + "Link expire date failed to update. Reason: (.*)": "A hivatkozás lejárati dátumának frissítése sikertelen. Ok: $1", + "Link expire date updated": "A hivatkozás lejárati dátuma frissítve", + "List": "Lista", + "Listen Port": "Port hallgatása", + "Live Preview": "Élő előnézet", + "Log ID": "Napló azonosító", + "Logs": "Naplók", + "MTU": "MTU", + "MTU format is not correct": "Az MTU formátuma helytelen", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "A WGDashboard kézi újraindítása szükséges az IP-cím és a portváltoztatások alkalmazásához", + "Max RTT \\(ms\\)": "Maximum RTT (ms)", + "Memory": "Memória", + "Memory Usage": "Memória használat", + "Message": "Üzenet", + "Min RTT \\(ms\\)": "Minimum RTT (ms)", + "Multi-Factor Authentication \\(MFA\\)": "Többfaktoros hitelesítés (MFA)", + "Name": "Név", + "Network": "Hálózat", + "Never Expire": "Soha ne járjon le", + "New Configuration": "Új konfiguráció", + "New Password": "Új jelszó", + "Next": "Tovább", + "Nice to meet you!": "Örülök, hogy megismerhetlek!", + "No": "Nem", + "No Encryption": "Nincs titkosítás", + "No WGDashboard API Key": "Nincs WGDashboard API-kulcs", + "No active job at the moment\\.": "Jelenleg nincs aktív feladat.", + "No available IP containing": "Nincs elérhető IP, amely tartalmazza", + "No backup yet, click the button above to create backup\\.": "Még nincs mentés, kattintson a fenti gombra a mentés létrehozásához.", + "No more available IP can assign": "Nincs több elérhető IP kiosztható", + "OTP from your authenticator": "Egyszer használatos kód (OTP) az autentikátorodból", + "Off": "Kikapcsolva", + "Official Documentation": "Hivatalos dokumentáció", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "Hoppá... Ez a hivatkozás lejárt vagy érvénytelen.", + "On": "Bekapcsolva", + "Once you deleted this configuration\\:": "Ha törli ezt a konfigurációt:", + "Open File": "Fájl megnyitása", + "Optional Settings": "Opcionális beállítások", + "Or you can click the link below:": "Vagy kattintson az alábbi hivatkozásra:", + "Other Settings": "Egyéb beállítások", + "Password": "Jelszó", + "Peer": "Társ", + "Peer Configuration File": "Társ konfigurációs fájl", + "Peer Default Settings": "Társ alapértelmezett beállítások", + "Peer Jobs": "Társ feladatok", + "Peer Remote Endpoint": "Társ távoli végpontja", + "Peer Settings": "Társ beállítások", + "Peer created successfully": "A társ sikeresen létrejött", + "Peer data usage reset successfully": "A társ adatforgalma sikeresen visszaállítva", + "Peer does not exist": "A társ nem létezik", + "Peer download started": "A társ letöltése elindult", + "Peer job deleted": "A társ feladata törölve", + "Peer job saved": "A társ feladata mentve", + "Peer saved": "A társ mentve", + "Peers": "Társak", + "Peers Data Usage": "Társak adatforgalma", + "Peers Default Settings": "Alapértelmezett társ beállítások", + "Peers Settings": "Társ beállítások", + "Persistent Keepalive": "Folyamatos keepalive", + "Persistent Keepalive format is not correct": "A folyamatos keepalive formátuma helytelen", + "Pick Available IP": "Elérhető IP kiválasztása", + "Pinging...": "Pingelés...", + "Please fill in all required box": "Töltse ki az összes kötelező mezőt", + "Please fill in the following fields to finish setup": "Töltse ki az alábbi mezőket a beállítás befejezéséhez", + "Please provide a valid configuration name": "Adjon meg érvényes konfigurációs nevet", + "Please provide ipAddress": "Adja meg az IP-címet", + "Please provide ipAddress and count": "Adja meg az IP-címet és a darabszámot", + "Please specify amount of peers you want to add": "Adja meg, hány társat szeretne hozzáadni", + "Please specify an IP Address (v4/v6)": "Adjon meg egy IP-címet (v4/v6)", + "Please specify job": "Adja meg a feladatot", + "Please specify one or more peers": "Jelöljön ki egy vagy több társat", + "Please specify peer and configuration": "Jelölje ki a társat és a konfigurációt", + "Port": "Port", + "Pre-Shared Key": "Előre megosztott kulcs", + "Private Key": "Privát kulcs", + "Private key does not match with the public key": "A privát kulcs nem egyeztethető a nyilvános kulccsal", + "Processes": "Folyamatok", + "Protocol": "Protokoll", + "Public Key": "Nyilvános kulcs", + "QR Code": "QR-kód", + "Ready": "Kész", + "Real Time Received Data Usage": "Valós idejű fogadott forgalom", + "Real Time Sent Data Usage": "Valós idejű elküldött forgalom", + "Received": "Fogadott", + "Refresh": "Frissítés", + "Refresh Interval": "Frissítési időköz", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "Ne felejtse el eltávolítani a '/' karaktert az útvonal végéről. (pl. /etc/wireguard)", + "Repeat New Password": "Új jelszó ismétlése", + "Reset": "Visszaállítás", + "Reset Data Usage": "Adatforgalom visszaállítása", + "Restore": "Visszaállítás", + "Restore Configuration": "Konfiguráció visszaállítása", + "Restoring": "Visszaállítás folyamatban", + "Restrict Access": "Hozzáférés korlátozása", + "Restrict Peer": "Társ korlátozása", + "Restricted": "Korlátozott", + "Restricted ([0-9]{1,}) peer\\(s\\)": "Korlátozva $1 társ", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Sikeresen korlátozva $1 társ. $2 társ korlátozása sikertelen", + "Restricted Peers?": "", + "Restricting\\.\\.\\.": "Korlátozás...", + "Revert": "Visszaállítás", + "Save": "Mentés", + "Save Configuration": "Konfiguráció mentése", + "Save Peer": "Társ mentése", + "Saving\\.\\.\\.": "Mentés...", + "Scan QR Code with the WireGuard App to add peer": "Olvassa be a QR-kódot a WireGuard alkalmazással a társ hozzáadásához", + "Schedule Jobs": "Feladatok ütemezése", + "Search": "Keresés", + "Search Peers\\.\\.\\.": "Társak keresése...", + "Select All": "Összes kiválasztása", + "Select Peers": "Társak kiválasztása", + "Select a backup you want to restore": "Válasszon egy visszaállítandó biztonsági másolatot", + "Selected Backup": "Kiválasztott mentés", + "Send": "Küldés", + "Send From": "Feladó", + "Send Test Email": "Teszt e-mail küldése", + "Sending\\.\\.\\.": "Küldés...", + "Sent": "Elküldött", + "Sent / Received / Lost Package": "Elküldött / fogadott / elveszett csomag", + "Server": "Szerver", + "Server List": "Szerverlista", + "Settings": "Beállítások", + "Setup": "Beállítás", + "Share Peer": "Társ megosztása", + "Share link failed to create. Reason: (.*)": "Nem sikerült létrehozni a megosztási hivatkozást. Ok: $1", + "Share with Email": "Megosztás e-mailben", + "Sharing\\.\\.\\.": "Megosztás...", + "Sign In": "Bejelentkezés", + "Sign Out": "Kijelentkezés", + "Sign in session ended, please sign in again": "A bejelentkezés lejárt, kérjük jelentkezzen be újra", + "Signing In\\.\\.\\.": "Bejelentkezés folyamatban...", + "Sorry, your username or password is incorrect.": "Sajnáljuk, a felhasználónév vagy a jelszó hibás.", + "Sort By": "Rendezés", + "Start Sharing": "Megosztás indítása", + "Status": "Állapot", + "Step (.*)": "Lépés $1", + "Stop Sharing": "Megosztás leállítása", + "Stop Sharing\\.\\.\\.": "Megosztás leállítása...", + "Storage": "Tároló", + "Success": "Sikeres", + "Swap Memory": "Swap memória", + "Swap Memory Usage": "Swap memória használat", + "System Status": "Rendszerállapot", + "TOTP verified!": "TOTP sikeresen ellenőrizve!", + "Table": "Táblázat", + "The maximum number of peers can add is (.*)": "A hozzáadható társak maximális száma: $1", + "Theme": "Téma", + "This IP is not available: (.*)": "Ez az IP nem elérhető: $1", + "This configuration have ([0-9].*) backups": "Ennél a konfigurációnál $1 mentés van", + "This configuration have no backup": "Ennél a konfigurációnál nincs mentés", + "This peer already exist": "Ez a társ már létezik", + "This peer does not have any job yet\\.": "Ennek a társnak még nincs feladata.", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Ez globálisan változik, és minden társ QR-kódjára és konfigurációs fájljára alkalmazva lesz.", + "To update this configuration's name, WGDashboard will execute the following operations:": "A konfiguráció nevének frissítéséhez a WGDashboard a következő műveleteket hajtja végre:", + "Toggle When Start Up": "Indításkor törlése", + "Tools": "Eszközök", + "Total": "Összesen", + "Total Received": "Összes fogadott", + "Total Sent": "Összes elküldött", + "Total Usage": "Teljes használat", + "Turning Off\\.\\.\\.": "Kikapcsolás...", + "Turning On\\.\\.\\.": "Bekapcsolás...", + "Unsaved Job": "Mentetlen feladat", + "Untitled Peer": "Névtelen társ", + "Update Name": "Név frissítése", + "Update Password": "Jelszó frissítése", + "Update peer failed when saving the configuration": "A társ frissítése sikertelen volt a konfiguráció mentésekor", + "Update peer failed when updating Allowed IPs": "A társ frissítése sikertelen volt az engedélyezett IP-k frissítésekor", + "Update peer failed when updating Pre-Shared Key": "A társ frissítése sikertelen volt az előre megosztott kulcs frissítésekor", + "Updated at": "Frissítve:", + "Use your own Private and Public Key": "Használja saját privát és nyilvános kulcsát", + "Username": "Felhasználónév", + "WGDashboard API Keys function is disabled": "A WGDashboard API-kulcs funkció letiltva", + "WGDashboard Account Settings": "WGDashboard fiókbeállítások", + "WGDashboard Settings": "WGDashboard beállítások", + "WGDashboard language update failed": "A WGDashboard nyelvének frissítése sikertelen", + "Welcome to": "Üdvözlünk a(z) ", + "What\\'s the body\\?": "Mi a szövegtörzs?", + "What\\'s the subject\\?": "Mi a tárgy?", + "When should this API Key expire\\?": "Mikor járjon le ez az API-kulcs?", + "Who are you sending to\\?": "Kinek küldi?", + "WireGuard Configuration Settings": "WireGuard konfiguráció beállítások", + "WireGuard Configurations": "WireGuard konfigurációk", + "WireGuard Configurations Settings": "WireGuard konfiguráció beállításai", + "WireGuard configuration path saved": "A WireGuard konfigurációs útvonal mentve", + "Yes": "Igen", + "You can add up to (.*) peers": "Legfeljebb $1 társat adhat hozzá", + "You can visit our: ": "Látogasson el ide:", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Még nincsenek WireGuard konfigurációi. Kérjük, ellenőrizze a konfigurációs mappát, vagy módosítsa a beállításoknál. Alapértelmezés szerint a mappa a /etc/wireguard.", + "You don't have any configuration to restore": "Nincs visszaállítandó konfigurációja", + "You're on the latest version": "Már a legfrissebb verziót használja", + "\\(At least 8 characters and make sure is strong enough!\\)": "(Legalább 8 karakter, és legyen elég erős!)", + "\\(Required for QR Code and Download\\)": "(Szükséges a QR-kódhoz és letöltéshez)", + "\\(Required\\)": "(Szükséges)", + "if": "ha", + "is": "van", + "larger than": "nagyobb mint", + "or": "vagy", + "or click the button below to download the ": "vagy kattintson az alábbi gombra a letöltéshez: ", + "then": "akkor", + "to add your server": "a szerver hozzáadásához" +} \ No newline at end of file diff --git a/src/static/locales/id-ID.json b/src/static/locales/id-ID.json new file mode 100644 index 0000000..5848d9f --- /dev/null +++ b/src/static/locales/id-ID.json @@ -0,0 +1,369 @@ +{ + " file": " file", + "(.*) Available IP Address": "$1 Alamat IP Tersedia", + "(.*) Minutes": "$1 Menit", + "(.*) Seconds": "$1 Detik", + "(.*) Used": "$1 terpakai", + "(.*) is off": "$1 mati", + "(.*) is on": "$1 aktif", + "([0-9].*) Backups?": "$1 Cadangan?", + "([0-9].*) Peers?": "$1 Peers?", + "([0-9]{1,}) Interfaces": "$1 Antarmuka", + "([0-9]{1,}) Partitions": "$1 Partisi", + "(v[0-9.]{1,}) is now available for update!": "v$1 telah tersedia untuk pembaruan!", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Silakan pindai Kode QR berikut untuk menghasilkan TOTP dengan pilihan autentikator Anda", + "2\\. Enter the TOTP generated by your authenticator to verify": "2. Masukkan TOTP yang dihasilkan oleh autentikator anda untuk verifikasi", + "API Key": "Kunci API", + "API Key created": "Kunci API terbuat", + "API Key deleted": "Kunci API terhapus", + "API Keys": "Kunci API", + "API Keys function is failed to disable": "Fungsi Kunci API gagal dimatikan", + "API Keys function is failed to enable": "Fungsi Kunci API gagal diaktifkan", + "API Keys function is successfully disabled": "Fungsi Kunci API berhasil dimatikan", + "API Keys function is successfully enabled": "Fungsi Kunci API berhasil diaktifkan", + "Access Remote Server": "Akses Server Remot", + "Access Restricted": "Akses Terbatas", + "Account Settings": "Pengaturan Akun", + "Active Jobs": "Pekerjaan Aktif", + "Add": "Tambah", + "Add Peers": "Tambah Peers", + "Adding\\.\\.\\.": "Menambahkan...", + "Address": "Alamat", + "Advanced Options": "Opsi Lanjutan", + "All Active Jobs": "Semua Pekerjaan Aktif", + "All connected peers will get disconnected": "Semua peers yang terhubung akan terputus", + "Allow Access": "Izinkan Akses", + "Allow access successfully": "Berhasil mengizinkan akses", + "Allowed IP already taken by another peer": "Allowed IP telah digunakan oleh peer lain", + "Allowed IPs": "Allowed IPs", + "Allowed IPs Validation": "Validasi Allowed IPs", + "Allowed IPs already taken by another peer": "Allowed IPs sudah diambil oleh peer lain", + "Allowed IPs is invalid": "Allowed IPs salah", + "Allowing Access\\.\\.\\.": "Mengizinkan Akses...", + "AmneziaWG Peer Setting": "Pengaturan Peer AmneziaWG", + "Appearance": "Penampilan", + "Are you sure to delete": "Apakah Anda yakin untuk menghapus", + "Are you sure to delete this API key\\?": "Apa Anda yakin ingin menghapus kunci API berikut?", + "Are you sure to delete this backup\\?": "Apakah Anda yakin untuk menghaus cadangan ini?", + "Are you sure to delete this configuration\\?": "Apakah Anda yakin untuk menghapus konfigurasi ini?", + "Are you sure to delete this peer\\?": "Apakah Anda yakin untuk menghapus peer ini?", + "Are you sure to restore this backup\\?": "", + "Average / Min / Max Round Trip Time": "Rata - rata / Min / Maks Round Trip Time", + "Average RTT \\(ms\\)": "", + "Backup": "Cadangan", + "Backup & Restore": "Cadangan & Pemulihan", + "Backup Date": "Tanggal Cadangan", + "Backup not selected": "Cadangan belum dipilih", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "File Konfigurasi (.conf) dan tabel basis data yang terkait dengan konfigurasi ini akan terhapus", + "Bulk Add": "Tambah Massal", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Dengan menambahkan peers secara massal, setiap nama peer akan dibuat secara otomatis, dan Allowed IP akan ditetapkan ke IP berikutnya yang tersedia.", + "CPU": "CPU", + "CPU Usage": "Penggunaan CPU", + "Cancel": "Batal", + "Checking backups...": "Memeriksa cadangan...", + "Checking for update...": "Memeriksa Pembaruan...", + "Clear Selection": "Hapus Pilihan", + "Click": "Klik", + "Click to change a backup": "Klik untuk mengganti cadangan", + "Complete": "Selesai", + "Configuration": "Konfigurasi", + "Configuration File": "File Konfigurasi", + "Configuration Name": "Nama Konfigurasi", + "Configuration Settings": "Pengaturan Konfigurasi", + "Configuration deleted": "Konfigurasi terhapus", + "Configuration does not exist": "Konfigurasi tidak ada", + "Configuration name already exist\\.": "Nama konfigurasi sudah ada.", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "Nama konfigurasi hanya bisa memiliki 15 huruf kecil/ huruf besar alfabet, angka, underscore, simbol sama dengan, simbol tambah, titik dan tanda penghubung.", + "Configuration name is invalid. Possible reasons:": "Nama konfigurasi salah. Kemungkinan alasan:", + "Configuration restored": "Konfigurasi terpulihkan", + "Configuration saved": "Konfigurasi tersimpan", + "Configurations": "Konfigurasi", + "Configurations Directory": "Direktori Konfigurasi", + "Confirm \\& edit restore information": "Konfirmasi & ubah informasi pemulihan", + "Confirm password": "Konfirmasi kata sandi", + "Connected Peers": "Peers Terhubung", + "Contain": "Memiliki", + "Count": "Count", + "Create": "Buat", + "Create API Key": "Buat Kunci API", + "Create Backup": "Buat Cadangan", + "Create an account": "Buat akun baru", + "Creating\\.\\.\\.": "Membuat...", + "Current Password": "Kata Sandi Saat Ini", + "Current Version:": "Versi Saat Ini:", + "Currently the peer is not sharing": "Saat ini peer tidak berbagi", + "DNS": "DNS", + "DNS format is incorrect": "Bentuk DNS tidak tepat", + "Danger Zone": "Zona Berbahaya", + "Dark": "Gelap", + "Dashboard IP Address \\& Listen Port": "Alamat IP & Mendengarkan Port Dasbor", + "Dashboard Language": "Bahasa Dasbor", + "Dashboard Theme": "Tema Dasbor", + "Dashboard language update failed": "Pembaruan bahasa dasbor gagal", + "Database File": "File Basis Data", + "Date": "Tanggal", + "Delete": "Hapus", + "Delete Configuration": "Hapus Konfigurasi", + "Delete Peer": "Hapus Peer", + "Delete current configuration's database table and \\.conf file": "Hapus konfigurasi tabel basis data saat ini dan file .conf", + "Deleted ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) terhapus", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) berhasil terhapus. Gagal untuk menghapus $2 peer(s)", + "Deleting...": "Menghapus...", + "Disabled": "Dimatikan", + "Discord Server": "", + "Display": "Tampilan", + "Display As": "Tampilkan Sebagai", + "Don't think that's a good idea": "Sepertinya itu bukan ide yang bagus", + "Done": "Selesai", + "Download": "Unduh", + "Download All": "Unduh Semua", + "Download Finished": "Unduh Selesai", + "Download \\& QR Code is not available due to no private key set for this peer": "Unduh & Kode QR tidak tersedia karena kunci pribadi tidak di atur untuk peer ini", + "Downloading": "Mengunduh", + "Duplicate current configuration's database table and \\.conf file with the new name": "Duplikat konfigurasi tabel basis data saat ini dan file .conf dengan nama baru", + "Edit": "Ubah", + "Edit Raw Configuration File": "Edit File Konfigurasi Mentah", + "Email Account": "Akun Email", + "Email Body Template": "Template Isi Email", + "Email sent successfully!": "Email berhasil terkirim!", + "Enabled": "Diaktifkan", + "Encryption": "Enkripsi", + "Endpoint Allowed IPs": "Endpoint IP Allowed IPs", + "Endpoint Allowed IPs format is incorrect": "Bentuk Endpoint Allowed IPs tidak tepat", + "Enter IP Address / Hostname": "Masukkan Alamat IP / Nama Host", + "Enter IP Address/CIDR": "Masukkan Alamat IP/CIDR", + "Enter a password": "Masukkan kata sandi", + "Enter an username you like": "Masukkan nama pengguna yang Anda sukai", + "Expire At": "Kedaluwarsa pada", + "FROM ": "DARI", + "Failed": "Gagal", + "Failed to add peers in bulk": "Gagal untuk menambahkan peers secara massal", + "Failed to allow access of peer (.*)": "Gagal untuk mengizinkan akses ke peer $1", + "Failed to check available update": "Gagal untuk memeriksa pembaruan yang tersedia", + "Failed to save configuration through WireGuard": "Gagal untuk menyimpan konfigurasi melalui WireGuard", + "File": "File", + "Filter": "Penyaring", + "Generating key pairs by bulk failed": "Gagal menghasilkan pasangan kunci secara massal", + "Geolocation": "Lokasi Geografis", + "Grid": "Kisi", + "Help": "Tolong", + "Home": "Beranda", + "Hop": "", + "How many peers you want to add\\?": "Berapa banyak peers yang ingin Anda tambah?", + "I don't need MFA": "Saya tidak membutuhkan MFA", + "IP Address": "Alamat IP", + "IP Address / Hostname": "Alamat IP / Nama Host", + "IP Address/CIDR": "Alamat IP/CIDR", + "IP Address/CIDR is invalid": "Alamat IP/CIDR salah", + "If you're sure, please type in the configuration name below and click Delete": "Jika Anda yakin, silakan ketik nama konfigurasi dibawah dan klik Hapus", + "Include configuration file as an attachment": "Sertakan file konfigurasi sebagai lampiran", + "Invalid Port": "Port Salah", + "Is Alive": "Masih Hidup", + "Job": "Pekerjaan", + "Job ID": "ID Pekerjaan", + "Jobs Logs": "Log Pekerjaan", + "Key": "Kunci", + "Language": "Bahasa", + "Light": "Terang", + "Link expire date failed to update. Reason: (.*)": "Tanggal kedaluwarsa tautan gagal diperbarui. Alasan: $1", + "Link expire date updated": "Tanggal kedaluwarsa tautan diperbarui", + "List": "Daftar", + "Listen Port": "Mendengarkan Port", + "Live Preview": "Pratinjau Langsung", + "Log ID": "ID Log", + "Logs": "Log", + "MTU": "MTU", + "MTU format is not correct": "Bentuk MTU tidak tepat", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "Memulai ulang WGDashboard dibutuhkan untuk menerapkan perubahan pada Alamat IP dan Mendengarkan Port", + "Max RTT \\(ms\\)": "", + "Memory": "Memori", + "Memory Usage": "Penggunaan Memori", + "Message": "Pesan", + "Min RTT \\(ms\\)": "", + "Multi-Factor Authentication \\(MFA\\)": "Autentikasi Multi-Faktor (MFA)", + "Name": "Nama", + "Network": "Jaringan", + "Never Expire": "Tidak Pernah Kedaluwarsa", + "New Configuration": "Konfigurasi Baru", + "New Password": "Kata Sandi Baru", + "Next": "Lanjut", + "Nice to meet you!": "Senang bertemu dengan Anda!", + "No": "Tidak", + "No Encryption": "Tidak Ada Enkripsi", + "No WGDashboard API Key": "Tidak Ada Kunci API WGDashboard", + "No active job at the moment\\.": "Tidak ada pekerjaan aktif untuk saat ini.", + "No available IP containing": "Tidak ada IP yang Tersedia yang memiliki", + "No backup yet, click the button above to create backup\\.": "Belum ada cadangan, klik tombol di atas untuk membuat cadangan.", + "No more available IP can assign": "Tidak ada lagi IP yang tersedia yang dapat ditetapkan", + "OTP from your authenticator": "OTP dari autentikator Anda", + "Off": "Mati", + "Official Documentation": "", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "Oh tidak... Tautan ini sudah kedaluwarsa atau salah.", + "On": "Aktif", + "Once you deleted this configuration\\:": "Setelah Anda menghapus konfigurasi ini:", + "Open File": "Buka File", + "Optional Settings": "Pengaturan Opsional", + "Or you can click the link below:": "Atau Anda bisa klik tautan di bawah", + "Other Settings": "Pengaturan Lainnya", + "Password": "Kata Sandi", + "Peer": "Peer", + "Peer Configuration File": "File Konfigurasi Peer", + "Peer Default Settings": "Pengaturan Bawaan Peer", + "Peer Jobs": "Pekerjaan Peer", + "Peer Remote Endpoint": "Endpoint Remot Peer", + "Peer Settings": "Pengaturan Peer", + "Peer created successfully": "Peer berhasil terbuat", + "Peer data usage reset successfully": "Penggunaan data peer berhasi di atur ulang", + "Peer does not exist": "Peer tidak ada", + "Peer download started": "Unduh peer dimulai", + "Peer job deleted": "Pekerjaan peer terhapus", + "Peer job saved": "Pekerjaan peer tersimpan", + "Peer saved": "Peer tersimpan", + "Peers": "Peers", + "Peers Data Usage": "Penggunaan Data Peers", + "Peers Default Settings": "Pengaturan Bawaan Peers", + "Peers Settings": "Pengaturan Peers", + "Persistent Keepalive": "Persistent Keepalive", + "Persistent Keepalive format is not correct": "Bentuk Persistent Keepalive tidak tepat", + "Pick Available IP": "Pilih IP yang Tersedia", + "Pinging...": "Pinging...", + "Please fill in all required box": "Silakan isi semua kolom diperlukan", + "Please fill in the following fields to finish setup": "Silakan isi kolom berikut untuk menyelesaikan pengaturan", + "Please provide a valid configuration name": "Harap berikan nama konfigurasi yang benar", + "Please provide ipAddress": "Harap berikan Alamat IP", + "Please provide ipAddress and count": "Harap berikan Alamat IP dan count", + "Please specify amount of peers you want to add": "Silakan tentukan jumlah peers yang ingin Anda tambahkan", + "Please specify an IP Address (v4/v6)": "Silakan tentukan alamat IP (v4/v6)", + "Please specify job": "Silakan tentukan pekerjaan", + "Please specify one or more peers": "Silakan tentukan satu atau lebih peer", + "Please specify peer and configuration": "Silakan tentukan peer dan konfigurasi", + "Port": "Port", + "Pre-Shared Key": "Kunci Pra-Berbagi", + "Private Key": "Kunci Pribadi", + "Private key does not match with the public key": "Kunci pribadi tidak cocok dengan kunci publik", + "Processes": "Proses", + "Protocol": "Protokol", + "Public Key": "Kunci Publik", + "QR Code": "Kode QR", + "Ready": "Siap", + "Real Time Received Data Usage": "Waktu Nyata Menerima Penggunaan Data", + "Real Time Sent Data Usage": "Waktu Nyata Mengirim Penggunaan Data", + "Received": "Diterima", + "Refresh": "Perbarui", + "Refresh Interval": "Memperbarui Interval", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "Jangan lupa untuk menghapus / di akhir path Anda. Contoh /etc/wireguard", + "Repeat New Password": "Ulangi Kata Sandi Baru", + "Reset": "Atur Ulang", + "Reset Data Usage": "Atur Ulang Penggunaan Data", + "Restore": "Pemulihan", + "Restore Configuration": "Pulihkan Konfigurasi", + "Restoring": "Memulihkan", + "Restrict Access": "Batasi Akses", + "Restrict Peer": "Batasi Peer", + "Restricted": "Terbatas", + "Restricted ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) terbatas", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) berhasil terbatas. Gagal untuk membatasi $2 peer(s)", + "Restricted Peers?": "Peers Terbatas?", + "Restricting\\.\\.\\.": "Membatasi...", + "Revert": "Kembalikan", + "Save": "Simpan", + "Save Configuration": "Simpan Konfigurasi", + "Save Peer": "Simpan Peer", + "Saving\\.\\.\\.": "Menyimpan...", + "Scan QR Code with the WireGuard App to add peer": "Pindai Kode QR menggunakan Aplikasi WireGuard untuk menambahkan peer", + "Schedule Jobs": "Jadwalkan Pekerjaan", + "Search": "Cari", + "Search Peers\\.\\.\\.": "Cari Peer...", + "Select All": "Pilih Semua", + "Select Peers": "Pilih Peers", + "Select a backup you want to restore": "Pilih cadangan yang ingin dipulihkan", + "Selected Backup": "Cadangan yang dipilih", + "Send": "Kirim", + "Send From": "Kirim Dari", + "Send Test Email": "Kirim Email Tes", + "Sending\\.\\.\\.": "Mengirim...", + "Sent": "Dikirim", + "Sent / Received / Lost Package": "Terkirim / Diterima / Paket Hilang", + "Server": "server", + "Server List": "Daftar Server", + "Settings": "Pengaturan", + "Setup": "Pengaturan", + "Share Peer": "Membagikan Peer", + "Share link failed to create. Reason: (.*)": "Tautan berbagi gagal dibuat. Alasan: $1", + "Share with Email": "Berbagi dengan Email", + "Sharing\\.\\.\\.": "Membagikan...", + "Sign In": "Masuk", + "Sign Out": "Keluar", + "Sign in session ended, please sign in again": "Sesi masuk berakhir, silakan masuk kembali", + "Signing In\\.\\.\\.": "Masuk...", + "Sorry, your username or password is incorrect.": "Maaf, nama pengguna atau kata sandi Anda salah", + "Sort By": "Urutkan", + "Start Sharing": "Mulai Membagikan", + "Status": "Keadaan", + "Step (.*)": "Step $1", + "Stop Sharing": "Berhenti Membagikan", + "Stop Sharing\\.\\.\\.": "Berhenti Membagikan...", + "Storage": "Penyimpanan", + "Success": "Sukses", + "Swap Memory": "Memori Swap", + "Swap Memory Usage": "Penggunaan Memori Swap", + "System Status": "Keadaan Sistem", + "TOTP verified!": "TOTP terverifikasi!", + "Table": "", + "The maximum number of peers can add is (.*)": "Jumlah maksimal peers yang dapat ditambahkan adalah $1", + "Theme": "Tema", + "This IP is not available: (.*)": "IP ini sudah tidak tersedia: $1", + "This configuration have ([0-9].*) backups": "Konfigurasi ini memiliki $1 cadangan", + "This configuration have no backup": "Konfigurasi ini tidak memiliki cadangan", + "This peer already exist": "Peer ini sudah ada", + "This peer does not have any job yet\\.": "Peer ini belum memiliki pekerjaan", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Perubahan ini akan di ubah secara global, dan akan berlaku ke semua kode QR peer dan file konfigurasi.", + "To update this configuration's name, WGDashboard will execute the following operations:": "Untuk memperbarui konfigurasi nama berikut, WGDashboard akan mengeksekusi operasi berikut:", + "Toggle When Start Up": "Beralih Kapan Memulai", + "Tools": "Peralatan", + "Total": "Total", + "Total Received": "Total Diterima", + "Total Sent": "Total Dikirim", + "Total Usage": "Penggunaan Total", + "Turning Off\\.\\.\\.": "Mematikan...", + "Turning On\\.\\.\\.": "Mengaktifkan...", + "Unsaved Job": "Pekerjaan yang belum Tersimpan", + "Untitled Peer": "Peer Tanpa Judul", + "Update Name": "Pembaruan Nama", + "Update Password": "Perbarui Kata Sandi", + "Update peer failed when saving the configuration": "Pembaruan peer gagal saat menyimpan konfigurasi", + "Update peer failed when updating Allowed IPs": "Pembaruan peer gagal saat memperbarui Allowed IPs", + "Update peer failed when updating Pre-Shared Key": "Pembaruan peer gagal saat memperbarui Kunci Pra-Berbagi", + "Updated at": "Diperbarui pada", + "Use your own Private and Public Key": "Gunakan kunci pribadi dan kunci publik milik Anda", + "Username": "Nama Pengguna", + "WGDashboard API Keys function is disabled": "Fungsi Kunci API WGDashboard dimatikan", + "WGDashboard Account Settings": "Pengaturan Akun WGDashboard", + "WGDashboard Settings": "Pengaturan WGDashboard", + "WGDashboard language update failed": "Pembaruan bahasa WGDashboard gagal", + "Welcome to": "Selamat Datang di", + "What\\'s the body\\?": "", + "What\\'s the subject\\?": "", + "When should this API Key expire\\?": "Kapan kunci API berikut kedaluwarsa?", + "Who are you sending to\\?": "", + "WireGuard Configuration Settings": "Pengaturan Konfigurasi WireGuard", + "WireGuard Configurations": "Konfigurasi WireGuard", + "WireGuard Configurations Settings": "Pengaturan Konfigurasi WireGuard", + "WireGuard configuration path saved": "path konfigurasi WireGuard tersimpan", + "Yes": "Ya", + "You can add up to (.*) peers": "Anda dapat menambahkan sebanyak $1 peers", + "You can visit our: ": "", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Anda belum memiliki konfigurasi WireGuard. Mohon periksa folder konfigurasi atau ubah di Pengaturan. Secara bawaan folder nya adalah /etc/wireguard.", + "You don't have any configuration to restore": "Anda tidak memiliki konfigurasi untuk dipulihkan", + "You're on the latest version": "Anda berada pada versi paling baru", + "\\(At least 8 characters and make sure is strong enough!\\)": "(Setidaknya 8 karakter dan pastikan cukup kuat!)", + "\\(Required for QR Code and Download\\)": "(Diperlukan untuk Kode QR dan Unduh)", + "\\(Required\\)": "Diperlukan", + "if": "jika", + "is": "adalah", + "larger than": "lebih besar dari", + "or": "atau", + "or click the button below to download the ": "atau klik tomboh di bawah untuk mengunduh", + "then": "maka", + "to add your server": "untuk menambahkan server Anda" +} \ No newline at end of file diff --git a/src/static/locales/it-IT.json b/src/static/locales/it-IT.json new file mode 100644 index 0000000..afe82fd --- /dev/null +++ b/src/static/locales/it-IT.json @@ -0,0 +1,369 @@ +{ + " file": " file", + "(.*) Available IP Address": "", + "(.*) Minutes": "$1 Minuto/i", + "(.*) Seconds": "$1 Secondo/i", + "(.*) Used": "", + "(.*) is off": "$1 è disattivo", + "(.*) is on": "$1 è attivo", + "([0-9].*) Backups?": "", + "([0-9].*) Peers?": "", + "([0-9]{1,}) Interfaces": "", + "([0-9]{1,}) Partitions": "", + "(v[0-9.]{1,}) is now available for update!": "$1 è dispobile per l'aggiornamento!", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Scansiona il seguente codice QR per generare un TOTP con l'autenticatore che preferisci", + "2\\. Enter the TOTP generated by your authenticator to verify": "2. Inserisci il codice TOTP generato dal tuo autenticatore per la verifica", + "API Key": "Chiave API", + "API Key created": "Chiave API creata", + "API Key deleted": "Chiave API eliminata", + "API Keys": "Chiavi API", + "API Keys function is failed to disable": "Impossibile disabilitare la funzionalità delle chiavi API", + "API Keys function is failed to enable": "Impossibile abilitare la funzionalità delle chiavi API", + "API Keys function is successfully disabled": "La funzionalità delle chivi API è stata disattivata con successo", + "API Keys function is successfully enabled": "La funzionalità delle chiavi API è stata attiviata con successo", + "Access Remote Server": "Accedi ad un server remoto", + "Access Restricted": "Accesso limitato", + "Account Settings": "", + "Active Jobs": "Job attivi", + "Add": "Aggiungi", + "Add Peers": "Aggiungi un Peer", + "Adding\\.\\.\\.": "Aggiunta...", + "Address": "Indirizzo", + "Advanced Options": "", + "All Active Jobs": "Tutti i job attivi", + "All connected peers will get disconnected": "", + "Allow Access": "Abilità l'accesso", + "Allow access successfully": "", + "Allowed IP already taken by another peer": "", + "Allowed IPs": "IP consentiti", + "Allowed IPs Validation": "", + "Allowed IPs already taken by another peer": "Gli indirizzi IP consentiti sono già stati assegnati ad un'altro Peer", + "Allowed IPs is invalid": "Gli indirizzi IP consentiti non sono validi", + "Allowing Access\\.\\.\\.": "Abilitazione dell'accesso...", + "AmneziaWG Peer Setting": "", + "Appearance": "", + "Are you sure to delete": "", + "Are you sure to delete this API key\\?": "Sei sicuro di elimineare questa chiave API?", + "Are you sure to delete this backup\\?": "", + "Are you sure to delete this configuration\\?": "", + "Are you sure to delete this peer\\?": "", + "Are you sure to restore this backup\\?": "", + "Average / Min / Max Round Trip Time": "", + "Average RTT \\(ms\\)": "", + "Backup": "", + "Backup & Restore": "", + "Backup Date": "", + "Backup not selected": "", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "", + "Bulk Add": "Inserimento multiplo", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Aggiungendo Peer multipli, il nome di ciascun Peer verrà generato automaticamente e l'IP consentito verrà assegnato al prossimo IP disponibile.", + "CPU": "", + "CPU Usage": "", + "Cancel": "Annulla", + "Checking backups...": "", + "Checking for update...": "Verifica aggiornamenti...", + "Clear Selection": "", + "Click": "Clicca", + "Click to change a backup": "", + "Complete": "Completato", + "Configuration": "Configurazione", + "Configuration File": "", + "Configuration Name": "Nome della configurazione", + "Configuration Settings": "Configurazioni", + "Configuration deleted": "", + "Configuration does not exist": "La configurazione non esiste", + "Configuration name already exist\\.": "Il nome della configurazione esiste già.", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "Il nome della configurazione può contenere solo 15 lettere tra minuscole/maiuscole, numeri, segno '_', segno '=', segno '>', punto e virgola.", + "Configuration name is invalid. Possible reasons:": "Il nome della configurazione non è valido. Motivi:", + "Configuration restored": "", + "Configuration saved": "", + "Configurations": "Configurazioni", + "Configurations Directory": "Cartella delle configurazioni", + "Confirm \\& edit restore information": "", + "Confirm password": "Conferma la password", + "Connected Peers": "Peer connessi", + "Contain": "", + "Count": "", + "Create": "Crea", + "Create API Key": "Crea una nuova chaive API", + "Create Backup": "", + "Create an account": "Crea un nuovo account", + "Creating\\.\\.\\.": "Creazione...", + "Current Password": "Password attuale", + "Current Version:": "Versione corrente: ", + "Currently the peer is not sharing": "Attualmente il peer non sta condividendo", + "DNS": "DNS", + "DNS format is incorrect": "Il formato dell'indirizzo DNS non è corretto", + "Danger Zone": "", + "Dark": "Scuro", + "Dashboard IP Address \\& Listen Port": "", + "Dashboard Language": "Lingua della Dashboard", + "Dashboard Theme": "Tema della dashboard", + "Dashboard language update failed": "Impossibile aggiornare la lingua della Dashboard", + "Database File": "", + "Date": "Data", + "Delete": "Elimina", + "Delete Configuration": "", + "Delete Peer": "Elimina il Peer", + "Delete current configuration's database table and \\.conf file": "", + "Deleted ([0-9]{1,}) peer\\(s\\)": "", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "", + "Deleting...": "Eliminazione...", + "Disabled": "Disabilitato", + "Discord Server": "", + "Display": "Mostra", + "Display As": "", + "Don't think that's a good idea": "Non pensare che questa sia una buona idea", + "Done": "", + "Download": "", + "Download All": "Scarica tutto", + "Download Finished": "", + "Download \\& QR Code is not available due to no private key set for this peer": "Il download ed il codice QR non sono disponibili fino a quando non imposti una chiave privata per questo Peer", + "Downloading": "", + "Duplicate current configuration's database table and \\.conf file with the new name": "", + "Edit": "Modifica", + "Edit Raw Configuration File": "", + "Email Account": "", + "Email Body Template": "", + "Email sent successfully!": "", + "Enabled": "Abilitato", + "Encryption": "", + "Endpoint Allowed IPs": "Indirizzi IP degli endpoint consentiti", + "Endpoint Allowed IPs format is incorrect": "L'indirizzi di destinazione consentiti non sono nel formato corretto", + "Enter IP Address / Hostname": "Inserisici l'indirizzo IP/CIDR", + "Enter IP Address/CIDR": "Inserisici l'indirizzo IP/CIDR", + "Enter a password": "Inserisci una password", + "Enter an username you like": "Inserisci l'username che preferisci", + "Expire At": "Scade il", + "FROM ": "DA ", + "Failed": "Fallito", + "Failed to add peers in bulk": "Impossibile inserire i Peer in blocco", + "Failed to allow access of peer (.*)": "", + "Failed to check available update": "Non è stato possibile verificare la disponibilità di nuovi aggiornamenti", + "Failed to save configuration through WireGuard": "", + "File": "", + "Filter": "Filtra", + "Generating key pairs by bulk failed": "Generazione delle coppie di chiavi in blocco fallita", + "Geolocation": "", + "Grid": "", + "Help": "", + "Home": "Home", + "Hop": "", + "How many peers you want to add\\?": "Quanti Peer vuoi aggiungere?", + "I don't need MFA": "Non ho bisogno di MFA", + "IP Address": "Indirizzo IP", + "IP Address / Hostname": "", + "IP Address/CIDR": "Indirizzo IP/CIDR", + "IP Address/CIDR is invalid": "L'indirizzo IP/CIDR non è valido", + "If you're sure, please type in the configuration name below and click Delete": "", + "Include configuration file as an attachment": "", + "Invalid Port": "Porta non valida", + "Is Alive": "", + "Job": "Job", + "Job ID": "ID del Job", + "Jobs Logs": "Log dei Job", + "Key": "Chiave", + "Language": "", + "Light": "Chiaro", + "Link expire date failed to update. Reason: (.*)": "Aggiornamento della data di scadenza del link fallito. Motivo: $1", + "Link expire date updated": "Data di scadenza del link aggioranta", + "List": "", + "Listen Port": "Porta in ascolto", + "Live Preview": "", + "Log ID": "ID del log", + "Logs": "Log", + "MTU": "MTU", + "MTU format is not correct": "Il formato dell'MTU non è corretto", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "", + "Max RTT \\(ms\\)": "", + "Memory": "", + "Memory Usage": "", + "Message": "Messaggio", + "Min RTT \\(ms\\)": "", + "Multi-Factor Authentication \\(MFA\\)": "Autenticazione a più fattori (MFA)", + "Name": "Nome", + "Network": "", + "Never Expire": "Nessuna scadenza", + "New Configuration": "Nuova configurazione", + "New Password": "Nuova password", + "Next": "Avanti", + "Nice to meet you!": "Piacere di conoscerti!", + "No": "", + "No Encryption": "", + "No WGDashboard API Key": "Nessuna chiave API WGDashboard", + "No active job at the moment\\.": "Nessuna Job attivo al momento.", + "No available IP containing": "Nessun IP disponibile corrispondente", + "No backup yet, click the button above to create backup\\.": "", + "No more available IP can assign": "Non ci sono più IP disponibili che possono essere assegnati", + "OTP from your authenticator": "OTP del tuo autenticatore", + "Off": "Spento", + "Official Documentation": "", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "Oh no... Questo link è scaduto oppure non è invalido.", + "On": "Acceso", + "Once you deleted this configuration\\:": "", + "Open File": "", + "Optional Settings": "Impostazioni opzionali", + "Or you can click the link below:": "Oppure clicca il seguente link: ", + "Other Settings": "", + "Password": "Password", + "Peer": "Peer", + "Peer Configuration File": "", + "Peer Default Settings": "", + "Peer Jobs": "Job dei Peer", + "Peer Remote Endpoint": "Destinazione remota del Peer", + "Peer Settings": "Impostazioni Peers", + "Peer created successfully": "Peer creato con successo", + "Peer data usage reset successfully": "Uso dei dati del Peer ripristinati correttamente", + "Peer does not exist": "Il Peer non esiste.", + "Peer download started": "Scaricamento del Peer avviato", + "Peer job deleted": "Job del Peer eliminato", + "Peer job saved": "Job del Peer salvato", + "Peer saved": "Peer salvato", + "Peers": "Peers", + "Peers Data Usage": "Uso dei dati dei Peers", + "Peers Default Settings": "Impostazioni predefinite per i Peer", + "Peers Settings": "", + "Persistent Keepalive": "Keepalive persistente", + "Persistent Keepalive format is not correct": "Il Keepalive persistente non è nel formato corretto", + "Pick Available IP": "Seleziona un IP disponibile", + "Pinging...": "Ping...", + "Please fill in all required box": "Perfavore inserisci tutti i cambi richiesti", + "Please fill in the following fields to finish setup": "Per favore completa i seguenti campi per terminare la configurazione", + "Please provide a valid configuration name": "Perfavore fornisci un nome per la configurazione valido", + "Please provide ipAddress": "Perfavore fornisci un indirizzo IP", + "Please provide ipAddress and count": "Per favore fornisci un indirizzo IP ed un conteggio", + "Please specify amount of peers you want to add": "Perfavore inserisci il numero di Peer che vuoi inserire", + "Please specify an IP Address (v4/v6)": "Perfavore specifica un indirizzo IP (v4/v6)", + "Please specify job": "Perfavore specifica un Job", + "Please specify one or more peers": "Perfavore specifica uno o più Peer", + "Please specify peer and configuration": "Perfavore specifica un Peer oppure una configurazione", + "Port": "", + "Pre-Shared Key": "Chiave pre-condivisa", + "Private Key": "Chiave privata", + "Private key does not match with the public key": "La chiave privata non è cooerente con la chiave pubblica", + "Processes": "", + "Protocol": "", + "Public Key": "Chiave pubblica", + "QR Code": "Codice QR", + "Ready": "", + "Real Time Received Data Usage": "Dati ricevuti in tempo reale", + "Real Time Sent Data Usage": "Dati inviati in tempo reale", + "Received": "Ricevuto", + "Refresh": "Aggiorna", + "Refresh Interval": "Intervallo di aggiornamento", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "Ricorda di rimuovere '/' alla fine del tuo percorso. Ad esempio, '/etc/wireguard'", + "Repeat New Password": "Ripeti la nuova password", + "Reset": "Ripristina", + "Reset Data Usage": "Resetta l'utilizzo dei dati", + "Restore": "", + "Restore Configuration": "", + "Restoring": "", + "Restrict Access": "Limita l'accesso", + "Restrict Peer": "Limita il Peer", + "Restricted": "Limitato", + "Restricted ([0-9]{1,}) peer\\(s\\)": "", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "", + "Restricted Peers?": "", + "Restricting\\.\\.\\.": "Limitazione...", + "Revert": "Ripristina", + "Save": "Salva", + "Save Configuration": "Salva la configurazione", + "Save Peer": "Salva il Peer", + "Saving\\.\\.\\.": "Salvataggio...", + "Scan QR Code with the WireGuard App to add peer": "Scansiona il codice QR con la applicazione WireGuard per aggiungere il Peer", + "Schedule Jobs": "Job pianificati", + "Search": "", + "Search Peers\\.\\.\\.": "Cerca Peers...", + "Select All": "", + "Select Peers": "", + "Select a backup you want to restore": "", + "Selected Backup": "", + "Send": "", + "Send From": "", + "Send Test Email": "", + "Sending\\.\\.\\.": "", + "Sent": "Inviato", + "Sent / Received / Lost Package": "", + "Server": "Server", + "Server List": "Elenco dei server", + "Settings": "Impostazioni", + "Setup": "Imposta", + "Share Peer": "Condividi Peer", + "Share link failed to create. Reason: (.*)": "Creazione del link di condivisione fallito. Motivo: $1", + "Share with Email": "", + "Sharing\\.\\.\\.": "Condivisione...", + "Sign In": "Accedi", + "Sign Out": "Esci", + "Sign in session ended, please sign in again": "La sessione corrente è scaduta, pervafore accedi di nuovo", + "Signing In\\.\\.\\.": "Accesso...", + "Sorry, your username or password is incorrect.": "Spiacente, il nome utente o la password sono errati.", + "Sort By": "Ordina per", + "Start Sharing": "Avvia condivisione", + "Status": "Stato", + "Step (.*)": "", + "Stop Sharing": "Interrompi condivisione", + "Stop Sharing\\.\\.\\.": "Interruzione condivisione...", + "Storage": "", + "Success": "Successo", + "Swap Memory": "", + "Swap Memory Usage": "", + "System Status": "", + "TOTP verified!": "TOTP Verificato!", + "Table": "", + "The maximum number of peers can add is (.*)": "Il numero massimo di peer che puoi aggiungere è/sono $1", + "Theme": "", + "This IP is not available: (.*)": "Questo indirizzo IP non è disponibile: $1", + "This configuration have ([0-9].*) backups": "", + "This configuration have no backup": "", + "This peer already exist": "Questo Peer esiste già", + "This peer does not have any job yet\\.": "Questo Peer non ha ancora nessun Job", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Questo verrà modificato a livello globale, e applicato a tutti i codici QR e ai file di configurazione dei Peer.", + "To update this configuration's name, WGDashboard will execute the following operations:": "", + "Toggle When Start Up": "", + "Tools": "Strumenti", + "Total": "Totale", + "Total Received": "Dati totali ricevuti", + "Total Sent": "Dati totali inviati", + "Total Usage": "Uso dei dati totale", + "Turning Off\\.\\.\\.": "Spegnimento...", + "Turning On\\.\\.\\.": "Accensione...", + "Unsaved Job": "Job non salvato", + "Untitled Peer": "", + "Update Name": "", + "Update Password": "Aggiorna la password", + "Update peer failed when saving the configuration": "Aggiornamento del Peer fallito durante l'aggiornamento della configurazione", + "Update peer failed when updating Allowed IPs": "Aggioranmento del Peer fallito durante l'aggiornamento degli IP consentiti.", + "Update peer failed when updating Pre-Shared Key": "Aggiornamento del Peer fallito durante l'aggiornamento della chiave condivisa", + "Updated at": "Aggiornato al", + "Use your own Private and Public Key": "Usa la tua chiave privata e la tua chiave pubblica", + "Username": "Nome utente", + "WGDashboard API Keys function is disabled": "La funzionalità delle chiavi API WGDashboard è stata disabilitata", + "WGDashboard Account Settings": "Impostazioni account WGDashboard", + "WGDashboard Settings": "", + "WGDashboard language update failed": "", + "Welcome to": "Benvenuto su", + "What\\'s the body\\?": "", + "What\\'s the subject\\?": "", + "When should this API Key expire\\?": "Quando dovrebbe scadere questa chiave API?", + "Who are you sending to\\?": "", + "WireGuard Configuration Settings": "", + "WireGuard Configurations": "Configurazioni di WireGuard", + "WireGuard Configurations Settings": "Impostazioni delle configurazioni di WireGuard", + "WireGuard configuration path saved": "Percorso di configurazione WireGuard salvato", + "Yes": "", + "You can add up to (.*) peers": "Puoi aggiungere fino a $1 peer", + "You can visit our: ": "", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Non hai ancora configurazioni WireGuard. Controlla la cartella di configurazione o cambiala nelle impostazioni. Per impostazione predefinita, la cartella è /etc/wireguard.", + "You don't have any configuration to restore": "", + "You're on the latest version": "Stai utilizzando l'ultima versione", + "\\(At least 8 characters and make sure is strong enough!\\)": "(Almeno 8 caratteri e assicurati che sia sufficentemente forte)", + "\\(Required for QR Code and Download\\)": "(Richiesto per il codice QR ed il Download)", + "\\(Required\\)": "(Richiesto)", + "if": "se", + "is": "è", + "larger than": "più grande di", + "or": "o", + "or click the button below to download the ": "oppure clicca il bottone qui sotto per scaricare il ", + "then": "allora", + "to add your server": "per aggiungere il tuo server" +} \ No newline at end of file diff --git a/src/static/locales/ja-JP.json b/src/static/locales/ja-JP.json new file mode 100644 index 0000000..844d2c0 --- /dev/null +++ b/src/static/locales/ja-JP.json @@ -0,0 +1,369 @@ +{ + " file": " ファイル", + "(.*) Available IP Address": "$1 有効なIPアドレス", + "(.*) Minutes": "$1 分", + "(.*) Seconds": "$1 秒", + "(.*) Used": "$1 使用中", + "(.*) is off": "$1 がOFFになりました", + "(.*) is on": "$1 がONになりました", + "([0-9].*) Backups?": "$1 バックアップ?", + "([0-9].*) Peers?": "$1 ピア?", + "([0-9]{1,}) Interfaces": "$1 個のインターフェース", + "([0-9]{1,}) Partitions": "$1 個のパーティション", + "(v[0-9.]{1,}) is now available for update!": "$1 が利用可能です!", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1.QRコードを認証アプリでスキャンして、ワンタイムパスワードを生成してください", + "2\\. Enter the TOTP generated by your authenticator to verify": "2.認証アプリで生成されたワンタイムパスワードを入力してください", + "API Key": "APIキー", + "API Key created": "APIキーを作成しました", + "API Key deleted": "APIキーを削除しました", + "API Keys": "APIキー", + "API Keys function is failed to disable": "APIキー機能の無効化に失敗しました", + "API Keys function is failed to enable": "APIキー機能の有効化に失敗しました", + "API Keys function is successfully disabled": "APIキー機能を無効にしました", + "API Keys function is successfully enabled": "APIキー機能を有効にしました", + "Access Remote Server": "リモートサーバーにアクセス", + "Access Restricted": "アクセスを制限しました", + "Account Settings": "アカウント設定", + "Active Jobs": "有効なジョブ", + "Add": "追加", + "Add Peers": "ピアを追加", + "Adding\\.\\.\\.": "追加中...", + "Address": "アドレス", + "Advanced Options": "追加設定", + "All Active Jobs": "全ての有効なジョブ", + "All connected peers will get disconnected": "全てのピアとの接続を失います", + "Allow Access": "アクセス許可", + "Allow access successfully": "アクセス許可に成功しました", + "Allowed IP already taken by another peer": "このAllowed IPは他のピアで使用されています", + "Allowed IPs": "Allowed IPs", + "Allowed IPs Validation": "Allowed IPs 検証", + "Allowed IPs already taken by another peer": "このAllowed IPsは他のピアで使用されています", + "Allowed IPs is invalid": "無効なAllowed IPsです", + "Allowing Access\\.\\.\\.": "アクセスを許可しています...", + "AmneziaWG Peer Setting": "AmneziaWGピア設定", + "Appearance": "外観", + "Are you sure to delete": "本当に削除しますか", + "Are you sure to delete this API key\\?": "このAPIキーを削除してもよろしいですか?", + "Are you sure to delete this backup\\?": "バックアップを削除しますか?", + "Are you sure to delete this configuration\\?": "この構成を本当に削除しますか?", + "Are you sure to delete this peer\\?": "このピアを本当に削除してもよろしいですか?", + "Are you sure to restore this backup\\?": "バックアップから復元しますか?", + "Average / Min / Max Round Trip Time": "平均 / 最小 / 最大 往復時間", + "Average RTT \\(ms\\)": "平均RTT (ms)", + "Backup": "バックアップ", + "Backup & Restore": "バックアップ & 復元", + "Backup Date": "バックアップ日時", + "Backup not selected": "バックアップが選択されていません", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "この構成に関連する構成ファイル(.conf)とデータベーステーブルが削除されます", + "Bulk Add": "複数追加", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "一括でピアを追加すると、各ピアの名前は自動生成され、Allowed IPは利用可能なIPが割り当てられます", + "CPU": "CPU", + "CPU Usage": "CPU使用率", + "Cancel": "キャンセル", + "Checking backups...": "バックアップを確認中...", + "Checking for update...": "アップデートを確認中...", + "Clear Selection": "選択を解除", + "Click": "クリック", + "Click to change a backup": "クリックしてバックアップを変更する", + "Complete": "完了", + "Configuration": "構成", + "Configuration File": "構成ファイル", + "Configuration Name": "構成名", + "Configuration Settings": "構成設定", + "Configuration deleted": "構成を削除しました", + "Configuration does not exist": "構成が存在しません", + "Configuration name already exist\\.": "構成名が既に存在します", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "構成名には、小文字/大文字のアルファベット15文字、数字、アンダースコア、イコール、プラス、ピリオド、ハイフンのみを使用できます", + "Configuration name is invalid. Possible reasons:": "構成名が無効です 考えられる原因:", + "Configuration restored": "構成を復元しました", + "Configuration saved": "構成を保存しました", + "Configurations": "構成", + "Configurations Directory": "コンフィグ保存場所", + "Confirm \\& edit restore information": "確定 & 復元情報を編集", + "Confirm password": "再度パスワードを入力してください", + "Connected Peers": "接続しているピア", + "Contain": "含まれる", + "Count": "回数", + "Create": "作成", + "Create API Key": "APIキーを作成", + "Create Backup": "バックアップを作成", + "Create an account": "アカウントの作成", + "Creating\\.\\.\\.": "作成中...", + "Current Password": "現在のパスワード", + "Current Version:": "現在のバージョン:", + "Currently the peer is not sharing": "このピアは現在共有されていません", + "DNS": "DNS", + "DNS format is incorrect": "DNSの形式が正しくありません", + "Danger Zone": "危険な設定", + "Dark": "ダークモード", + "Dashboard IP Address \\& Listen Port": "ダッシュボードIPアドレス & 待ち受けポート", + "Dashboard Language": "ダッシュボードの言語", + "Dashboard Theme": "ダッシュボードテーマ", + "Dashboard language update failed": "ダッシュボードの言語の更新に失敗しました", + "Database File": "データベースファイル", + "Date": "日付", + "Delete": "削除", + "Delete Configuration": "構成を削除", + "Delete Peer": "ピアを削除", + "Delete current configuration's database table and \\.conf file": "現在の構成のデータベーステーブルと.confファイルを削除する", + "Deleted ([0-9]{1,}) peer\\(s\\)": "$1 個のピアを削除しました ", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "$1 個のピアの削除に成功し、 $2 個のピアの削除に失敗しました", + "Deleting...": "削除中...", + "Disabled": "無効", + "Discord Server": "Discordサーバー", + "Display": "表示設定", + "Display As": "表示方法", + "Don't think that's a good idea": "あまりおすすめはしません...", + "Done": "完了", + "Download": "ダウンロード", + "Download All": "全てダウンロード", + "Download Finished": "ダウンロード完了", + "Download \\& QR Code is not available due to no private key set for this peer": "このピアは秘密鍵が設定されていないため、ダウンロード・QRコードの利用が出来ません", + "Downloading": "ダウンロード中...", + "Duplicate current configuration's database table and \\.conf file with the new name": "現在の構成のデータベーステーブルと.confファイルを変更された名前で複製する", + "Edit": "編集", + "Edit Raw Configuration File": "構成ファイルを直接編集", + "Email Account": "Eメールアカウント", + "Email Body Template": "Eメール本文テンプレート", + "Email sent successfully!": "Eメールの送信に成功しました!", + "Enabled": "有効", + "Encryption": "暗号化方式", + "Endpoint Allowed IPs": "Endpoint Allowed IPs", + "Endpoint Allowed IPs format is incorrect": "Endpoint Allowed IPsの形式が正しくありません", + "Enter IP Address / Hostname": "IPアドレス / ホスト名 を入力してください", + "Enter IP Address/CIDR": "IPアドレス/CIDRを入力してください", + "Enter a password": "パスワードを入力してください", + "Enter an username you like": "ユーザー名を入力してください", + "Expire At": "有効期限", + "FROM ": "FROM", + "Failed": "失敗", + "Failed to add peers in bulk": "ピアの一括作成に失敗しました", + "Failed to allow access of peer (.*)": "ピアのアクセス許可に失敗しました $1", + "Failed to check available update": "アップデートの確認に失敗しました", + "Failed to save configuration through WireGuard": "WireGuardによる設定の保存に失敗しました。", + "File": "ファイル", + "Filter": "フィルター", + "Generating key pairs by bulk failed": "キーペアの一括生成に失敗しました", + "Geolocation": "場所", + "Grid": "グリッド", + "Help": "ヘルプ", + "Home": "ホーム", + "Hop": "ホップ数", + "How many peers you want to add\\?": "いくつピアを追加しますか?", + "I don't need MFA": "多要素認証は不要です", + "IP Address": "IPアドレス", + "IP Address / Hostname": "IPアドレス / ホスト名", + "IP Address/CIDR": "IPアドレス/CIDR", + "IP Address/CIDR is invalid": "無効なIPアドレス/CIDR", + "If you're sure, please type in the configuration name below and click Delete": "本当に削除して良いのであれば、以下に構成名を入力し、「削除」をクリックしてください", + "Include configuration file as an attachment": "コンフィグファイルを添付する", + "Invalid Port": "無効なポート", + "Is Alive": "ステータス", + "Job": "ジョブ", + "Job ID": "ジョブID", + "Jobs Logs": "ジョブログ", + "Key": "Key", + "Language": "言語", + "Light": "ライトモード", + "Link expire date failed to update. Reason: (.*)": "リンクの有効期限の更新に失敗しました 理由: $1", + "Link expire date updated": "リンクの有効期限を更新しました", + "List": "リスト", + "Listen Port": "待ち受けポート", + "Live Preview": "ライブプレビュー", + "Log ID": "ログID", + "Logs": "ログ", + "MTU": "MTU", + "MTU format is not correct": "MTUの形式が正しくありません", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "IPアドレスと待ち受けポートの変更を反映するにはWGDashboardを手動で再起動する必要があります", + "Max RTT \\(ms\\)": "最高RTT (ms)", + "Memory": "メモリ", + "Memory Usage": "メモリ使用量", + "Message": "メッセージ", + "Min RTT \\(ms\\)": "最低RTT (ms)", + "Multi-Factor Authentication \\(MFA\\)": "多要素認証", + "Name": "名前", + "Network": "ネットワーク", + "Never Expire": "無期限", + "New Configuration": "新規構成", + "New Password": "新しいパスワード", + "Next": "次へ", + "Nice to meet you!": "はじめまして!", + "No": "いいえ", + "No Encryption": "暗号化しない", + "No WGDashboard API Key": "APIキーがありません", + "No active job at the moment\\.": "有効なジョブがありません", + "No available IP containing": "利用可能なIPアドレスがありません", + "No backup yet, click the button above to create backup\\.": "バックアップがありません ボタンをクリックしてバックアップを作成", + "No more available IP can assign": "割り当て可能なIPがありません", + "OTP from your authenticator": "認証アプリで生成されたワンタイムパスワード", + "Off": "OFF", + "Official Documentation": "公式ドキュメント", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "おっと...このリンクは有効期限が切れているか無効です", + "On": "ON", + "Once you deleted this configuration\\:": "この構成を削除すると:", + "Open File": "ファイルを開く", + "Optional Settings": "追加設定", + "Or you can click the link below:": "または、以下のリンクをクリックしてください", + "Other Settings": "その他の設定", + "Password": "パスワード", + "Peer": "ピア", + "Peer Configuration File": "ピア構成ファイル", + "Peer Default Settings": "ピアデフォルト設定", + "Peer Jobs": "ピアジョブ", + "Peer Remote Endpoint": "Endpoint", + "Peer Settings": "ピア設定", + "Peer created successfully": "ピアの作成に成功しました", + "Peer data usage reset successfully": "ピアのデータ使用量をリセットしました", + "Peer does not exist": "ピアが存在しません", + "Peer download started": "ピアのダウンロードを開始しました", + "Peer job deleted": "ピアジョブを削除しました", + "Peer job saved": "ピアジョブを保存しました", + "Peer saved": "ピアを保存しました", + "Peers": "ピア", + "Peers Data Usage": "ピア別データ使用量", + "Peers Default Settings": "デフォルトピア設定", + "Peers Settings": "ピア設定", + "Persistent Keepalive": "Persistent Keepalive", + "Persistent Keepalive format is not correct": "Persistent Keepaliveの形式が正しくありません", + "Pick Available IP": "利用可能なIPアドレスを選択する", + "Pinging...": "応答待機中...", + "Please fill in all required box": "必須項目を全て入力してください", + "Please fill in the following fields to finish setup": "以下のフィールドを入力して、セットアップを完了してください", + "Please provide a valid configuration name": "有効な構成名を入力してください", + "Please provide ipAddress": "IPアドレスを入力してください", + "Please provide ipAddress and count": "IPアドレスと回数を入力してください", + "Please specify amount of peers you want to add": "追加したいピアの数を入力してください", + "Please specify an IP Address (v4/v6)": "IPアドレスを指定してください (v4/v6)", + "Please specify job": "ジョブを指定してください", + "Please specify one or more peers": "1つまたは複数のピアを指定してください", + "Please specify peer and configuration": "ピアまたは構成を指定してください", + "Port": "ポート", + "Pre-Shared Key": "事前共有鍵", + "Private Key": "秘密鍵", + "Private key does not match with the public key": "秘密鍵が公開鍵と合致しません", + "Processes": "プロセス", + "Protocol": "プロトコル", + "Public Key": "公開鍵", + "QR Code": "QRコード", + "Ready": "利用可能", + "Real Time Received Data Usage": "リアルタイム受信量", + "Real Time Sent Data Usage": "リアルタイム送信量", + "Received": "受信", + "Refresh": "更新", + "Refresh Interval": "更新間隔", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "パスの最後の\"/\"は不要です。 例:/etc/wireguard", + "Repeat New Password": "再度、新しいパスワードを入力してください", + "Reset": "リセット", + "Reset Data Usage": "データ使用量をリセット", + "Restore": "復元", + "Restore Configuration": "構成を復元", + "Restoring": "復元中", + "Restrict Access": "アクセスを制限", + "Restrict Peer": "ピアを制限", + "Restricted": "制限", + "Restricted ([0-9]{1,}) peer\\(s\\)": "$1 個のピアを制限しました", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "$1 個のピアの制限に成功し、 $2 個のピアの制限に失敗しました", + "Restricted Peers?": "ピアを制限しますか?", + "Restricting\\.\\.\\.": "制限中...", + "Revert": "反転", + "Save": "保存", + "Save Configuration": "構成を保存", + "Save Peer": "ピアを保存", + "Saving\\.\\.\\.": "保存中...", + "Scan QR Code with the WireGuard App to add peer": "WireGuardアプリでQRコードをスキャンしてピアを追加", + "Schedule Jobs": "スケジュールジョブ", + "Search": "検索", + "Search Peers\\.\\.\\.": "ピアを検索", + "Select All": "全て選択", + "Select Peers": "ピアを選択", + "Select a backup you want to restore": "復元したいバックアップを選択してください", + "Selected Backup": "選択したバックアップ", + "Send": "送信", + "Send From": "送信元", + "Send Test Email": "テストメールを送信", + "Sending\\.\\.\\.": "送信中...", + "Sent": "送信", + "Sent / Received / Lost Package": "送信 / 受信 / 損失 パッケージ", + "Server": "サーバー", + "Server List": "サーバーリスト", + "Settings": "設定", + "Setup": "設定", + "Share Peer": "ピアを共有", + "Share link failed to create. Reason: (.*)": "共有リンクの作成に失敗しました 理由: $1", + "Share with Email": "Eメールで共有", + "Sharing\\.\\.\\.": "共有中...", + "Sign In": "サインイン", + "Sign Out": "サインアウト", + "Sign in session ended, please sign in again": "セッションが終了しました 再度サインインしてください", + "Signing In\\.\\.\\.": "サインイン...", + "Sorry, your username or password is incorrect.": "ユーザー名またはパスワードが間違っています", + "Sort By": "並び替え", + "Start Sharing": "共有を開始", + "Status": "ステータス", + "Step (.*)": "ステップ $1", + "Stop Sharing": "共有を停止", + "Stop Sharing\\.\\.\\.": "共有を停止中...", + "Storage": "ストレージ", + "Success": "成功", + "Swap Memory": "Swapメモリ", + "Swap Memory Usage": "Swapメモリ使用量", + "System Status": "システムステータス", + "TOTP verified!": "ワンタイムパスワードが認証出来ました!", + "Table": "", + "The maximum number of peers can add is (.*)": "最大で $1 個のピアを追加出来ます", + "Theme": "テーマ", + "This IP is not available: (.*)": "このIPは利用できません: $1", + "This configuration have ([0-9].*) backups": "この構成には $1 のバックアップがあります", + "This configuration have no backup": "この構成にはバックアップがありません", + "This peer already exist": "このピアは既に存在します", + "This peer does not have any job yet\\.": "このピアにはジョブがありません", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "これは全てのピアやQRコード、コンフィグファイルに変更が適用されます", + "To update this configuration's name, WGDashboard will execute the following operations:": "この構成の名称を変更するために、WGDashboardは以下の操作を実行します:", + "Toggle When Start Up": "起動時に有効化", + "Tools": "ツール", + "Total": "合計", + "Total Received": "総受信量", + "Total Sent": "総送信量", + "Total Usage": "総通信量", + "Turning Off\\.\\.\\.": "OFFにしています...", + "Turning On\\.\\.\\.": "ONにしています...", + "Unsaved Job": "保存されていないジョブ", + "Untitled Peer": "無名のピア", + "Update Name": "名前を変更", + "Update Password": "パスワードを更新", + "Update peer failed when saving the configuration": "ピアの更新が構成の保存中に失敗しました", + "Update peer failed when updating Allowed IPs": "ピアの更新がAllowed IPsの更新中に失敗しました", + "Update peer failed when updating Pre-Shared Key": "ピアの更新が事前共有鍵の更新中に失敗しました", + "Updated at": "更新日", + "Use your own Private and Public Key": "既存の秘密鍵・公開鍵を利用する", + "Username": "ユーザー名", + "WGDashboard API Keys function is disabled": "WGDashboard APIキー機能は無効になっています", + "WGDashboard Account Settings": "WGDashboardアカウント設定", + "WGDashboard Settings": "WGDashboard設定", + "WGDashboard language update failed": "WGDashboardの言語の更新に失敗しました", + "Welcome to": "ようこそ", + "What\\'s the body\\?": "本文", + "What\\'s the subject\\?": "件名", + "When should this API Key expire\\?": "APIキーの有効期限を設定してください", + "Who are you sending to\\?": "送信先", + "WireGuard Configuration Settings": "WireGuard構成設定", + "WireGuard Configurations": "WireGuard 構成", + "WireGuard Configurations Settings": "WireGuard構成設定", + "WireGuard configuration path saved": "WireGuard構成の場所を保存しました", + "Yes": "はい", + "You can add up to (.*) peers": "最大で $1 個追加できます", + "You can visit our: ": "次の場所でサポートや様々な情報を入手出来ます:", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "WireGuardの構成が見つかりません 構成ファイルの保存場所を確認するか、設定タブから構成ファイルの保存場所を変更してください デフォルトの構成ファイルの保存場所は /etc/wireguard です", + "You don't have any configuration to restore": "復元可能な構成がありません", + "You're on the latest version": "最新版利用しています", + "\\(At least 8 characters and make sure is strong enough!\\)": "(最低8文字以上の強力なものになってることを確認してください!)", + "\\(Required for QR Code and Download\\)": "(QRコードかダウンロードが必要です)", + "\\(Required\\)": "(必須)", + "if": "もし", + "is": "が", + "larger than": "右記以降", + "or": "または", + "or click the button below to download the ": "または、ボタンをクリックしてファイルをダウンロード", + "then": "だったら", + "to add your server": "してサーバーを追加" +} \ No newline at end of file diff --git a/src/static/locales/ko-KR.json b/src/static/locales/ko-KR.json new file mode 100644 index 0000000..477754f --- /dev/null +++ b/src/static/locales/ko-KR.json @@ -0,0 +1,369 @@ +{ + "Welcome to": "환영합니다", + "Username": "사용자 이름", + "Password": "비밀번호", + "OTP from your authenticator": "인증기에서 생성된 OTP", + "Sign In": "로그인", + "Signing In\\.\\.\\.": "로그인하는 중...", + "Access Remote Server": "원격 서버 접속", + "Server": "서버", + "Click": "클릭", + "Pinging...": "핑 테스트 중...", + "to add your server": "서버를 추가하려면", + "Server List": "서버 목록", + "Sorry, your username or password is incorrect.": "죄송합니다. 사용자 이름 또는 비밀번호가 올바르지 않습니다.", + "Home": "홈", + "Settings": "설정", + "Tools": "도구", + "Sign Out": "로그아웃", + "Checking for update...": "업데이트 확인 중...", + "You're on the latest version": "최신 버전을 사용 중입니다", + "WireGuard Configurations": "WireGuard 구성", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "아직 WireGuard 구성이 없습니다. 구성 폴더를 확인하거나 설정에서 변경하세요. 기본 폴더는 /etc/wireguard 입니다.", + "Configuration": "구성", + "Configurations": "구성들", + "Peers Default Settings": "기본 피어 설정", + "Dashboard Theme": "대시보드 테마", + "Light": "밝은 테마", + "Dark": "어두운 테마", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "이 설정은 전역적으로 변경되며, 모든 피어의 QR 코드 및 구성 파일에 적용됩니다.", + "WireGuard Configurations Settings": "WireGuard 구성 설정", + "Configurations Directory": "구성 디렉토리", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "경로 끝의 '/'를 제거하세요. 예: /etc/wireguard", + "WGDashboard Account Settings": "WGDashboard 계정 설정", + "Current Password": "현재 비밀번호", + "New Password": "새 비밀번호", + "Repeat New Password": "새 비밀번호 확인", + "Update Password": "비밀번호 변경", + "Multi-Factor Authentication \\(MFA\\)": "다중 인증 (MFA)", + "Reset": "재설정", + "Setup": "설정", + "API Keys": "API 키", + "API Key": "API 키", + "Key": "키", + "Enabled": "활성화됨", + "Disabled": "비활성화됨", + "No WGDashboard API Key": "WGDashboard API 키가 없습니다", + "Expire At": "만료일", + "Are you sure to delete this API key\\?": "이 API 키를 삭제하시겠습니까?", + "Create API Key": "API 키 생성", + "When should this API Key expire\\?": "이 API 키는 언제 만료되나요?", + "Never Expire": "만료 없음", + "Don't think that's a good idea": "별로 좋은 생각이 아닌 것 같습니다", + "Creating\\.\\.\\.": "생성 중...", + "Create": "생성", + "Status": "상태", + "On": "켜짐", + "Off": "꺼짐", + "Turning On\\.\\.\\.": "켜는 중...", + "Turning Off\\.\\.\\.": "끄는 중...", + "Address": "주소", + "Listen Port": "수신 포트", + "Public Key": "공개 키", + "Connected Peers": "연결된 피어", + "Total Usage": "총 사용량", + "Total Received": "총 수신량", + "Total Sent": "총 송신량", + "Peers Data Usage": "피어 데이터 사용량", + "Real Time Received Data Usage": "실시간 수신 데이터 사용량", + "Real Time Sent Data Usage": "실시간 송신 데이터 사용량", + "Peer": "피어", + "Peers": "피어들", + "Peer Settings": "피어 설정", + "Download All": "전체 다운로드", + "Search Peers\\.\\.\\.": "피어 검색...", + "Display": "표시", + "Sort By": "정렬 기준", + "Refresh Interval": "새로고침 간격", + "Name": "이름", + "Allowed IPs": "허용된 IP", + "Restricted": "제한됨", + "(.*) Seconds": "$1 초", + "(.*) Minutes": "$1 분", + "Configuration Settings": "구성 설정", + "Peer Jobs": "피어 작업", + "Active Jobs": "활성 작업", + "All Active Jobs": "모든 활성 작업", + "Logs": "로그", + "Private Key": "개인 키", + "\\(Required for QR Code and Download\\)": "(QR 코드 및 다운로드에 필요)", + "\\(Required\\)": "(필수)", + "Endpoint Allowed IPs": "엔드포인트 허용된 IP", + "DNS": "DNS", + "Optional Settings": "선택적 설정", + "Pre-Shared Key": "사전 공유 키", + "MTU": "MTU", + "Persistent Keepalive": "Keepalive 지속 유지", + "Reset Data Usage": "데이터 사용량 초기화", + "Total": "총합", + "Sent": "전송됨", + "Received": "수신됨", + "Revert": "되돌리기", + "Save Peer": "피어 저장", + "QR Code": "QR 코드", + "Schedule Jobs": "작업 예약", + "Job": "작업", + "Job ID": "작업 ID", + "Unsaved Job": "저장되지 않은 작업", + "This peer does not have any job yet\\.": "이 피어에는 아직 작업이 없습니다.", + "if": "만약", + "is": "이다", + "then": "그러면", + "larger than": "보다 큼", + "Date": "날짜", + "Restrict Peer": "피어 제한", + "Delete Peer": "피어 삭제", + "Edit": "수정", + "Delete": "삭제", + "Deleting...": "삭제 중...", + "Cancel": "취소", + "Save": "저장", + "No active job at the moment\\.": "현재 활성 작업이 없습니다.", + "Jobs Logs": "작업 로그", + "Updated at": "업데이트된 날짜", + "Refresh": "새로고침", + "Filter": "필터", + "Success": "성공", + "Failed": "실패", + "Log ID": "로그 ID", + "Message": "메시지", + "Share Peer": "피어 공유", + "Currently the peer is not sharing": "현재 이 피어는 공유 중이 아닙니다", + "Sharing\\.\\.\\.": "공유 중...", + "Stop Sharing\\.\\.\\.": "공유 중지 중...", + "Start Sharing": "공유 시작", + "Stop Sharing": "공유 중지", + "Access Restricted": "접근 제한됨", + "Restrict Access": "접근 제한", + "Restricting\\.\\.\\.": "제한 중...", + "Allow Access": "접근 허용", + "Allowing Access\\.\\.\\.": "접근 허용 중...", + "Download \\& QR Code is not available due to no private key set for this peer": "이 피어에 대해 설정된 개인 키가 없기 때문에 다운로드 & QR 코드를 사용할 수 없습니다.", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "피어를 일괄로 추가하면 각 피어의 이름이 자동으로 생성되고 허용된 IP는 사용 가능한 다음 IP에 할당됩니다.", + "Add Peers": "피어 추가", + "Bulk Add": "일괄 추가", + "How many peers you want to add\\?": "몇 개의 피어를 추가하시겠습니까?", + "You can add up to (.*) peers": "$1 개의 피어까지 추가할 수 있습니다", + "Use your own Private and Public Key": "자체 개인 및 공개 키 사용", + "Enter IP Address/CIDR": "IP 주소/CIDR 입력", + "IP Address/CIDR": "IP 주소/CIDR", + "or": "또는", + "Pick Available IP": "사용 가능한 IP 선택", + "No available IP containing": "포함된 사용 가능한 IP가 없습니다", + "Add": "추가", + "Adding\\.\\.\\.": "추가 중...", + "Failed to check available update": "사용 가능한 업데이트 확인 실패", + "Nice to meet you!": "만나서 반가워요!", + "Please fill in the following fields to finish setup": "설정을 완료하려면 아래 필드를 작성하세요", + "Create an account": "계정 생성", + "Enter an username you like": "원하는 사용자 이름 입력", + "Enter a password": "비밀번호 입력", + "\\(At least 8 characters and make sure is strong enough!\\)": "(최소 8자 이상이고 강력한 비밀번호여야 합니다!)", + "Confirm password": "비밀번호 확인", + "Next": "다음", + "Saving\\.\\.\\.": "저장 중...", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. 다음 QR 코드를 스캔하여 선택한 인증기로 TOTP를 생성하세요", + "Or you can click the link below:": "또는 아래 링크를 클릭하세요", + "2\\. Enter the TOTP generated by your authenticator to verify": "2. 인증기에서 생성된 TOTP를 입력하여 확인하세요", + "TOTP verified!": "TOTP가 확인되었습니다!", + "I don't need MFA": "MFA가 필요 없습니다", + "Complete": "완료", + "(v[0-9.]{1,}) is now available for update!": "$1 업데이트가 가능합니다!", + "Current Version:": "현재 버전:", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "앗... 이 링크는 만료되었거나 잘못되었습니다.", + "Scan QR Code with the WireGuard App to add peer": "WireGuard 앱으로 QR 코드를 스캔하여 피어를 추가하세요", + "or click the button below to download the ": "또는 아래 버튼을 클릭하여 다운로드하세요 ", + " file": " 파일", + "FROM ": "FROM ", + "(.*) is on": "$1 켜짐", + "(.*) is off": "$1 꺼짐", + "Allowed IPs is invalid": "허용된 IP가 올바르지 않습니다", + "Peer created successfully": "피어가 성공적으로 생성되었습니다", + "Please fill in all required box": "모든 필수 항목을 입력하세요", + "Please specify amount of peers you want to add": "추가할 피어의 수를 지정하세요", + "No more available IP can assign": "더 이상 할당 가능한 IP가 없습니다", + "The maximum number of peers can add is (.*)": "추가할 수 있는 피어의 최대 수는 $1 개입니다", + "Generating key pairs by bulk failed": "일괄 키 쌍 생성 실패", + "Failed to add peers in bulk": "일괄 피어 추가 실패", + "This peer already exist": "이 피어는 이미 존재합니다", + "This IP is not available: (.*)": "이 IP는 사용할 수 없습니다: $1", + "Configuration does not exist": "구성이 존재하지 않습니다", + "Peer does not exist": "피어가 존재하지 않습니다", + "Please provide a valid configuration name": "유효한 구성 이름을 입력하세요", + "Peer saved": "피어가 저장되었습니다", + "Allowed IPs already taken by another peer": "허용된 IP가 다른 피어에 의해 이미 사용 중입니다", + "Endpoint Allowed IPs format is incorrect": "엔드포인트 허용된 IP 형식이 올바르지 않습니다", + "DNS format is incorrect": "DNS 형식이 올바르지 않습니다", + "MTU format is not correct": "MTU 형식이 올바르지 않습니다", + "Persistent Keepalive format is not correct": "지속적 Keepalive 형식이 올바르지 않습니다", + "Private key does not match with the public key": "개인 키가 공개 키와 일치하지 않습니다", + "Update peer failed when updating Pre-Shared Key": "사전 공유 키 업데이트 중 피어 업데이트 실패", + "Update peer failed when updating Allowed IPs": "허용된 IP 업데이트 중 피어 업데이트 실패", + "Update peer failed when saving the configuration": "구성 저장 중 피어 업데이트 실패", + "Peer data usage reset successfully": "피어 데이터 사용량이 성공적으로 초기화되었습니다", + "Peer download started": "피어 다운로드가 시작되었습니다", + "Please specify one or more peers": "하나 이상의 피어를 지정하세요", + "Share link failed to create. Reason: (.*)": "공유 링크 생성에 실패했습니다. 이유: $1", + "Link expire date updated": "링크 만료 날짜가 업데이트되었습니다", + "Link expire date failed to update. Reason: (.*)": "링크 만료 날짜 업데이트에 실패했습니다. 이유: $1", + "Peer job saved": "피어 작업이 저장되었습니다", + "Please specify job": "작업을 지정하세요", + "Please specify peer and configuration": "피어와 구성을 지정하세요", + "Peer job deleted": "피어 작업이 삭제되었습니다", + "API Keys function is successfully enabled": "API 키 기능이 성공적으로 활성화되었습니다", + "API Keys function is successfully disabled": "API 키 기능이 성공적으로 비활성화되었습니다", + "API Keys function is failed to enable": "API 키 기능 활성화에 실패했습니다", + "API Keys function is failed to disable": "API 키 기능 비활성화에 실패했습니다", + "WGDashboard API Keys function is disabled": "WGDashboard API 키 기능이 비활성화되었습니다", + "WireGuard configuration path saved": "WireGuard 구성 경로가 저장되었습니다", + "API Key deleted": "API 키가 삭제되었습니다", + "API Key created": "API 키가 생성되었습니다", + "Sign in session ended, please sign in again": "로그인 세션이 종료되었습니다. 다시 로그인해주세요", + "Please specify an IP Address (v4/v6)": "IP 주소 (v4/v6)를 지정하세요", + "Please provide ipAddress and count": "ipAddress와 개수를 제공하세요", + "Please provide ipAddress": "ipAddress를 제공하세요", + "Dashboard Language": "대시보드 언어", + "Dashboard language update failed": "대시보드 언어 업데이트 실패", + "Peer Remote Endpoint": "피어 원격 엔드포인트", + "New Configuration": "새 구성", + "Configuration Name": "구성 이름", + "Configuration name is invalid. Possible reasons:": "구성 이름이 올바르지 않습니다. 가능한 원인:", + "Configuration name already exist\\.": "구성 이름이 이미 존재합니다.", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "구성 이름은 15자 이하의 소문자/대문자 알파벳, 숫자, 밑줄, 등호, 더하기 기호, 마침표 및 하이픈만 포함할 수 있습니다.", + "Invalid Port": "유효하지 않은 포트", + "Save Configuration": "구성 저장", + "IP Address/CIDR is invalid": "IP 주소/CIDR이 올바르지 않습니다", + "IP Address": "IP 주소", + "Enter IP Address / Hostname": "IP 주소 / 호스트명 입력", + "IP Address / Hostname": "IP 주소 / 호스트명", + "Dashboard IP Address \\& Listen Port": "대시보드 IP 주소 & 수신 포트", + "Count": "개수", + "Geolocation": "위치", + "Is Alive": "활성 상태", + "Average / Min / Max Round Trip Time": "평균 / 최소 / 최대 왕복 시간", + "Sent / Received / Lost Package": "전송 / 수신 / 손실 패킷", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "IP 주소 및 수신 포트 변경 사항을 적용하려면 WGDashboard를 수동으로 재시작해야 합니다", + "Restore Configuration": "구성 복원", + "Step (.*)": "단계 $1", + "Select a backup you want to restore": "복원할 백업을 선택하세요", + "Click to change a backup": "백업을 변경하려면 클릭하세요", + "Selected Backup": "선택된 백업", + "You don't have any configuration to restore": "복원할 구성이 없습니다", + "Help": "도움말", + "Backup": "백업", + "([0-9].*) Backups?": "$1 백업", + "Yes": "예", + "No": "아니오", + "Backup not selected": "백업이 선택되지 않았습니다", + "Confirm \\& edit restore information": "복원 정보 확인 & 편집", + "(.*) Available IP Address": "$1 사용 가능한 IP 주소", + "Database File": "데이터베이스 파일", + "Contain": "포함", + "Restricted Peers?": "제한된 피어?", + "Restore": "복원", + "Restoring": "복원 중...", + "WGDashboard Settings": "WGDashboard 설정", + "Peers Settings": "피어 설정", + "WireGuard Configuration Settings": "WireGuard 구성 설정", + "Appearance": "외관", + "Theme": "테마", + "Language": "언어", + "Account Settings": "계정 설정", + "Peer Default Settings": "피어 기본 설정", + "Toggle When Start Up": "시작 시 실행", + "Other Settings": "기타 설정", + "Select Peers": "피어 선택", + "Backup & Restore": "백업 & 복원", + "Delete Configuration": "구성 삭제", + "Create Backup": "백업 생성", + "No backup yet, click the button above to create backup\\.": "아직 백업이 없습니다. 위의 버튼을 클릭하여 백업을 생성하세요.", + "Are you sure to delete this backup\\?": "이 백업을 삭제하시겠습니까?", + "Backup Date": "백업 날짜", + "File": "파일", + "Are you sure to delete this configuration\\?": "이 구성을 삭제하시겠습니까?", + "Once you deleted this configuration\\:": "이 구성을 삭제하면:", + "All connected peers will get disconnected": "연결된 모든 피어의 연결이 끊깁니다", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "이 구성과 관련된 구성 파일 (.conf) 및 데이터베이스 테이블이 삭제됩니다", + "Checking backups...": "백업 확인 중...", + "This configuration have ([0-9].*) backups": "이 구성에는 $1 개의 백업이 있습니다", + "This configuration have no backup": "이 구성에는 백업이 없습니다", + "If you're sure, please type in the configuration name below and click Delete": "확실하다면, 아래에 구성 이름을 입력하고 삭제를 클릭하세요", + "Select All": "전체 선택", + "Clear Selection": "선택 해제", + "([0-9].*) Peers?": "$1 피어", + "Downloading": "다운로드 중", + "Download Finished": "다운로드 완료", + "Done": "완료", + "Are you sure to delete": "정말로 삭제하시겠습니까", + "Are you sure to delete this peer\\?": "정말로 이 피어를 삭제하시겠습니까", + "Configuration deleted": "구성이 삭제되었습니다", + "Configuration saved": "구성이 저장되었습니다", + "WGDashboard language update failed": "WGDashboard 언어 업데이트 실패", + "Configuration restored": "구성이 복원되었습니다", + "Allowed IP already taken by another peer": "허용된 IP가 다른 피어에 의해 이미 사용 중입니다", + "Failed to allow access of peer (.*)": "피어 (.*)의 접근 허용에 실패했습니다", + "Failed to save configuration through WireGuard": "WireGuard를 통한 구성 저장에 실패했습니다", + "Allow access successfully": "접근 허용에 성공했습니다", + "Deleted ([0-9]{1,}) peer\\(s\\)": "$1 피어가 삭제되었습니다", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "$1 피어가 성공적으로 삭제되었습니다. $2 피어 삭제에 실패했습니다", + "Restricted ([0-9]{1,}) peer\\(s\\)": "$1 피어가 제한되었습니다", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "$1 피어가 성공적으로 제한되었습니다. $2 피어 제한에 실패했습니다", + "Table": "라우팅 테이블", + "Search": "검색", + "Hop": "홉", + "Average RTT \\(ms\\)": "평균 RTT (ms)", + "Min RTT \\(ms\\)": "최소 RTT (ms)", + "Max RTT \\(ms\\)": "최대 RTT (ms)", + "You can visit our: ": "다음 링크를 방문할 수 있습니다: ", + "Official Documentation": "공식 문서", + "Discord Server": "디스코드 서버", + "Are you sure to restore this backup\\?": "이 백업을 복원하시겠습니까?", + "Download": "다운로드", + "Display As": "표시 방식", + "List": "목록", + "Grid": "그리드", + "Protocol": "프로토콜", + "Open File": "파일 열기", + "Advanced Options": "고급 옵션", + "Allowed IPs Validation": "허용된 IP 유효성 검사", + "Update Name": "이름 변경", + "To update this configuration's name, WGDashboard will execute the following operations:": "이 구성의 이름을 변경하기 위해, WGDashboard는 다음 작업을 수행합니다.", + "Duplicate current configuration's database table and \\.conf file with the new name": "현재 구성의 데이터베이스 테이블과 .conf 파일을 새 이름으로 복제합니다.", + "Delete current configuration's database table and \\.conf file": "현재 구성의 데이터베이스 테이블과 .conf 파일을 삭제합니다.", + "Danger Zone": "위험 구역", + "Configuration File": "구성 파일", + "Edit Raw Configuration File": "원시 구성 파일 편집", + "Peer Configuration File": "피어 구성 파일", + "Share with Email": "이메일로 공유", + "Email Account": "이메일 계정", + "Ready": "준비됨", + "Port": "포트", + "Encryption": "암호화", + "No Encryption": "암호화 안 함", + "Send From": "보내는 사람", + "Send Test Email": "테스트 이메일 보내기", + "Email Body Template": "이메일 본문 템플릿", + "Live Preview": "실시간 미리보기", + "Include configuration file as an attachment": "구성 파일을 첨부파일로 포함", + "Send": "보내기", + "Sending\\.\\.\\.": "전송 중...", + "Email sent successfully!": "이메일이 성공적으로 전송되었습니다!", + "AmneziaWG Peer Setting": "AmneziaWG 피어 설정", + "System Status": "시스템 상태", + "CPU": "CPU", + "Memory": "메모리", + "Swap Memory": "스왑 메모리", + "Processes": "프로세스", + "CPU Usage": "CPU 사용량", + "Memory Usage": "메모리 사용량", + "Swap Memory Usage": "스왑 메모리 사용량", + "Network": "네트워크", + "([0-9]{1,}) Interfaces": "$1 인터페이스", + "Storage": "스토리지", + "([0-9]{1,}) Partitions": "$1 파티션", + "(.*) Used": "$1 사용됨", + "Untitled Peer": "제목 없는 피어", + "Who are you sending to\\?": "누구에게 보내시겠습니까?", + "What\\'s the subject\\?": "제목이 무엇입니까?", + "What\\'s the body\\?": "본문이 무엇입니까?" +} \ No newline at end of file diff --git a/src/static/locales/locale_manager.py b/src/static/locales/locale_manager.py new file mode 100644 index 0000000..c7c4fed --- /dev/null +++ b/src/static/locales/locale_manager.py @@ -0,0 +1,301 @@ +#!/usr/bin/env python3 +import json +import sys +from pathlib import Path +from typing import Dict, List, Tuple +from dataclasses import dataclass + + +@dataclass +class Language: + """Represents a language configuration.""" + lang_id: str + lang_name: str + + @classmethod + def from_dict(cls, data: Dict) -> 'Language': + """Create Language instance from dictionary.""" + return cls( + lang_id=data.get('lang_id', ''), + lang_name=data.get('lang_name', '') + ) + + +@dataclass +class TranslationStats: + """Statistics about translation verification.""" + missing_count: int + deprecated_count: int + total_keys: int + + @property + def completion_percentage(self) -> float: + """Calculate completion percentage.""" + if self.total_keys == 0: + return 0.0 + + completed = self.total_keys - self.missing_count + + return (completed / self.total_keys) * 100 + + +class LocaleManager: + """Manages locale files and translation verification.""" + + SUPPORTED_LOCALES_FILE = "supported_locales.json" + LOCALE_TEMPLATE_FILE = "locale_template.json" + + def __init__(self): + self.supported_locales: List[Language] = [] + self.locale_template: Dict[str, str] = {} + self._load_configuration() + + def _load_configuration(self) -> None: + """Load active languages and template configuration.""" + try: + + self.supported_locales = self._load_supported_locales() + self.locale_template = self._load_locale_template() + + except FileNotFoundError as e: + print(f"[✗] Configuration file not found: {e}") + sys.exit(1) + + except json.JSONDecodeError as e: + print(f"[✗] Invalid JSON in configuration file: {e}") + sys.exit(1) + + def _load_supported_locales(self) -> List[Language]: + """Load active languages from JSON file.""" + config_path = Path(self.SUPPORTED_LOCALES_FILE) + + if not config_path.exists(): + raise FileNotFoundError( + f"Active languages file not found: {config_path}" + ) + + with open(config_path, 'r', encoding='utf-8') as file: + data = json.load(file) + + return [Language.from_dict(lang_data) for lang_data in data] + + def _load_locale_template(self) -> Dict[str, str]: + """Load language template from JSON file.""" + template_path = Path(self.LOCALE_TEMPLATE_FILE) + + if not template_path.exists(): + raise FileNotFoundError( + f"Language template file not found: {template_path}" + ) + + with open(template_path, 'r', encoding='utf-8') as file: + return json.load(file) + + def _load_language_file(self, lang_id: str) -> Dict[str, str]: + """Load specific language file.""" + lang_path = Path(f"{lang_id}.json") + + if not lang_path.exists(): + raise FileNotFoundError(f"Language file not found: {lang_path}") + + with open(lang_path, 'r', encoding='utf-8') as file: + return json.load(file) + + def _save_language_file(self, lang_id: str, lang_data: Dict[str, str]) -> None: + """Save language file with proper formatting.""" + lang_path = Path(f"{lang_id}.json") + + with open(lang_path, 'w', encoding='utf-8') as file: + json.dump( + lang_data, + file, + ensure_ascii=False, + indent='\t', + sort_keys=True + ) + + def get_language_ids(self) -> List[str]: + """Get list of all available language IDs.""" + return [lang.lang_id for lang in self.supported_locales] + + def validate_language_id(self, lang_id: str) -> Tuple[bool, str]: + """ + Validate language ID. + + Returns: + Tuple of (is_valid, error_message) + """ + available_ids = self.get_language_ids() + + if lang_id not in available_ids: + return False, f"'{lang_id}' is not a valid language ID" + + return True, "" + + def analyze_translations(self, lang_id: str) -> Tuple[List[str], List[str], TranslationStats]: + """ + Analyze translation file for missing and deprecated keys. + + Returns: + Tuple of (missing_keys, deprecated_keys, stats) + """ + try: + lang_file = self._load_language_file(lang_id) + + except FileNotFoundError: + print( + f"[!] Language file {lang_id}.json not found. Creating new file..." + ) + lang_file = {} + + # Find missing translations + missing_translations = [ + key for key in self.locale_template + if key not in lang_file or not lang_file[key].strip() + ] + + # Find deprecated translations + deprecated_translations = [ + key for key in lang_file + if key not in self.locale_template + ] + + # Calculate statistics + stats = TranslationStats( + missing_count=len(missing_translations), + deprecated_count=len(deprecated_translations), + total_keys=len(self.locale_template) + ) + + return missing_translations, deprecated_translations, stats + + def fix_translation_file(self, lang_id: str) -> TranslationStats: + """ + Fix translation file by adding missing keys and removing deprecated ones. + + Returns: + TranslationStats with the changes made + """ + try: + lang_file = self._load_language_file(lang_id) + + except FileNotFoundError: + lang_file = {} + + missing_translations, deprecated_translations, stats = self.analyze_translations( + lang_id + ) + + # Create new language file + new_lang_file = dict(lang_file) + + # Add missing translations with empty values + for key in missing_translations: + new_lang_file[key] = "" + + # Remove deprecated translations + for key in deprecated_translations: + new_lang_file.pop(key, None) + + # Save updated file + self._save_language_file(lang_id, new_lang_file) + + return stats + + def display_header(self) -> None: + """Display application header.""" + title = "WGDashboard Locale File Manager [by @donaldzou]" + border = "=" * (len(title) + 4) + + print(border) + print(f"| {title} |") + print(border) + print() + + def display_available_languages(self) -> None: + """Display available languages in a formatted table.""" + print("[i] Available languages") + print("-" * 50) + + for lang in self.supported_locales: + print(f"{lang.lang_id} | {lang.lang_name}") + + print() + + def display_translation_results(self, lang_id: str, stats: TranslationStats) -> None: + """Display translation verification results.""" + print(f"[#] Translation analysis for '{lang_id}'") + print("-" * 50) + + print(f" [-] Total keys: {stats.total_keys}") + print(f" [✗] Missing translations: {stats.missing_count}") + print(f" [*] Deprecated translations: {stats.deprecated_count}") + print(f" [✓] Completion: {stats.completion_percentage:.1f}%") + + if stats.missing_count > 0 or stats.deprecated_count > 0: + print(f"\n [i] File {lang_id}.json has been updated:") + print(f" • Missing translations added (empty values)") + print(f" • Deprecated translations removed") + else: + print(f"\n Perfect! No issues found in {lang_id}.json") + + print() + + def get_user_language_choice(self) -> str: + """Get language choice from user with validation.""" + while True: + try: + lang_id = input("[ENTER] Language ID to verify: ").strip() + + if not lang_id: + print(" [!] Please enter a valid language ID") + continue + + is_valid, error_msg = self.validate_language_id(lang_id) + + if not is_valid: + print(f" [✗] {error_msg}") + continue + + return lang_id + + except KeyboardInterrupt: + print("\n\n[EXIT] Operation cancelled by user") + sys.exit(0) + + except EOFError: + print("\n\n[EXIT] Goodbye!") + sys.exit(0) + + def run(self) -> None: + """Main application loop.""" + try: + self.display_header() + self.display_available_languages() + + while True: + lang_id = self.get_user_language_choice() + + print(f"\n[>] Verifying language file: {lang_id}.json") + print("=" * 50) + + stats = self.fix_translation_file(lang_id) + self.display_translation_results(lang_id, stats) + + except KeyboardInterrupt: + print("\n\n[EXIT] Operation cancelled by user") + sys.exit(0) + + except Exception as e: + print(f"\n[✗] Unexpected error: {e}") + sys.exit(1) + + +def main() -> None: + """Entry point of the application.""" + locale_manager = LocaleManager() + locale_manager.run() + + +if __name__ == "__main__": + main() diff --git a/src/static/locales/locale_template.json b/src/static/locales/locale_template.json new file mode 100644 index 0000000..af259d7 --- /dev/null +++ b/src/static/locales/locale_template.json @@ -0,0 +1,442 @@ +{ + "Welcome to": "", + "Username": "", + "Password": "", + "OTP from your authenticator": "", + "Sign In": "", + "Signing In\\.\\.\\.": "", + "Access Remote Server": "", + "Server": "", + "Click": "", + "Pinging...": "", + "to add your server": "", + "Server List": "", + "Sorry, your username or password is incorrect.": "", + "Home": "", + "Settings": "", + "Tools": "", + "Sign Out": "", + "Checking for update...": "", + "You're on the latest version": "", + "WireGuard Configurations": "", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "", + "Configuration": "", + "Configurations": "", + "Peers Default Settings": "", + "Dashboard Theme": "", + "Light": "", + "Dark": "", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "", + "WireGuard Configurations Settings": "", + "Configurations Directory": "", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "", + "WGDashboard Account Settings": "", + "Current Password": "", + "New Password": "", + "Repeat New Password": "", + "Update Password": "", + "Multi-Factor Authentication \\(MFA\\)": "", + "Reset": "", + "Setup": "", + "API Keys": "", + "API Key": "", + "Key": "", + "Enabled": "", + "Disabled": "", + "No WGDashboard API Key": "", + "Expire At": "", + "Are you sure to delete this API key\\?": "", + "Create API Key": "", + "When should this API Key expire\\?": "", + "Never Expire": "", + "Don't think that's a good idea": "", + "Creating\\.\\.\\.": "", + "Create": "", + "Status": "", + "On": "", + "Off": "", + "Turning On\\.\\.\\.": "", + "Turning Off\\.\\.\\.": "", + "Address": "", + "Listen Port": "", + "Table": "", + "Public Key": "", + "Connected Peers": "", + "Total Usage": "", + "Total Received": "", + "Total Sent": "", + "Peers Data Usage": "", + "Real Time Received Data Usage": "", + "Real Time Sent Data Usage": "", + "Peer": "", + "Peers": "", + "Peer Settings": "", + "Download All": "", + "Search": "", + "Search Peers\\.\\.\\.": "", + "Display": "", + "Sort By": "", + "Refresh Interval": "", + "Name": "", + "Allowed IPs": "", + "Restricted": "", + "(.*) Seconds": "", + "(.*) Minutes": "", + "Configuration Settings": "", + "Peer Jobs": "", + "Active Jobs": "", + "All Active Jobs": "", + "Logs": "", + "Private Key": "", + "\\(Required for QR Code and Download\\)": "", + "\\(Required\\)": "", + "Endpoint Allowed IPs": "", + "DNS": "", + "Optional Settings": "", + "Pre-Shared Key": "", + "MTU": "", + "Persistent Keepalive": "", + "Reset Data Usage": "", + "Total": "", + "Sent": "", + "Received": "", + "Revert": "", + "Save Peer": "", + "QR Code": "", + "Schedule Jobs": "", + "Job": "", + "Job ID": "", + "Unsaved Job": "", + "This peer does not have any job yet\\.": "", + "if": "", + "is": "", + "then": "", + "larger than": "", + "Date": "", + "Restrict Peer": "", + "Delete Peer": "", + "Edit": "", + "Delete": "", + "Deleting...": "", + "Cancel": "", + "Save": "", + "No active job at the moment\\.": "", + "Jobs Logs": "", + "Updated at": "", + "Refresh": "", + "Filter": "", + "Success": "", + "Failed": "", + "Log ID": "", + "Message": "", + "Share Peer": "", + "Currently the peer is not sharing": "", + "Sharing\\.\\.\\.": "", + "Start Sharing": "", + "Stop Sharing\\.\\.\\.": "", + "Stop Sharing": "", + "Access Restricted": "", + "Restrict Access": "", + "Restricting\\.\\.\\.": "", + "Allow Access": "", + "Allowing Access\\.\\.\\.": "", + "Download \\& QR Code is not available due to no private key set for this peer": "", + "Add Peers": "", + "Bulk Add": "", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "", + "How many peers you want to add\\?": "", + "You can add up to (.*) peers": "", + "Use your own Private and Public Key": "", + "Enter IP Address/CIDR": "", + "IP Address/CIDR": "", + "or": "", + "Pick Available IP": "", + "No available IP containing": "", + "Add": "", + "Adding\\.\\.\\.": "", + "Failed to check available update": "", + "Nice to meet you!": "", + "Please fill in the following fields to finish setup": "", + "Create an account": "", + "Enter an username you like": "", + "Enter a password": "", + "\\(At least 8 characters and make sure is strong enough!\\)": "", + "Confirm password": "", + "Next": "", + "Saving\\.\\.\\.": "", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "", + "Or you can click the link below:": "", + "2\\. Enter the TOTP generated by your authenticator to verify": "", + "TOTP verified!": "", + "I don't need MFA": "", + "Complete": "", + "(v[0-9.]{1,}) is now available for update!": "", + "Current Version:": "", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "", + "Scan QR Code with the WireGuard App to add peer": "", + "or click the button below to download the ": "", + " file": "", + "FROM ": "", + "(.*) is on": "", + "(.*) is off": "", + "Allowed IPs is invalid": "", + "Peer created successfully": "", + "Please fill in all required box": "", + "Please specify amount of peers you want to add": "", + "No more available IP can assign": "", + "The maximum number of peers can add is (.*)": "", + "Generating key pairs by bulk failed": "", + "Failed to add peers in bulk": "", + "This peer already exist": "", + "This IP is not available: (.*)": "", + "Configuration does not exist": "", + "Peer does not exist": "", + "Please provide a valid configuration name": "", + "Peer saved": "", + "Allowed IPs already taken by another peer": "", + "Endpoint Allowed IPs format is incorrect": "", + "DNS format is incorrect": "", + "MTU format is not correct": "", + "Persistent Keepalive format is not correct": "", + "Private key does not match with the public key": "", + "Update peer failed when updating Pre-Shared Key": "", + "Update peer failed when updating Allowed IPs": "", + "Update peer failed when saving the configuration": "", + "Peer data usage reset successfully": "", + "Peer download started": "", + "Please specify one or more peers": "", + "Share link failed to create. Reason: (.*)": "", + "Link expire date updated": "", + "Link expire date failed to update. Reason: (.*)": "", + "Peer job saved": "", + "Please specify job": "", + "Please specify peer and configuration": "", + "Peer job deleted": "", + "API Keys function is successfully enabled": "", + "API Keys function is successfully disabled": "", + "API Keys function is failed to enable": "", + "API Keys function is failed to disable": "", + "WGDashboard API Keys function is disabled": "", + "WireGuard configuration path saved": "", + "API Key deleted": "", + "API Key created": "", + "Sign in session ended, please sign in again": "", + "Please specify an IP Address (v4/v6)": "", + "Please provide ipAddress and count": "", + "Please provide ipAddress": "", + "Dashboard Language": "", + "Dashboard language update failed": "", + "Peer Remote Endpoint": "", + "New Configuration": "", + "Configuration Name": "", + "Configuration name is invalid. Possible reasons:": "", + "Configuration name already exist\\.": "", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "", + "Invalid Port": "", + "Save Configuration": "", + "IP Address/CIDR is invalid": "", + "IP Address": "", + "Enter IP Address / Hostname": "", + "IP Address / Hostname": "", + "Dashboard IP Address \\& Listen Port": "", + "Count": "", + "Hop": "", + "Average RTT \\(ms\\)": "", + "Min RTT \\(ms\\)": "", + "Max RTT \\(ms\\)": "", + "Geolocation": "", + "Is Alive": "", + "Average / Min / Max Round Trip Time": "", + "Sent / Received / Lost Package": "", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "", + "Restore Configuration": "", + "Step (.*)": "", + "Select a backup you want to restore": "", + "Click to change a backup": "", + "Selected Backup": "", + "You don't have any configuration to restore": "", + "Help": "", + "You can visit our: ": "", + "Official Documentation": "", + "Discord Server": "", + "Backup": "", + "([0-9].*) Backups?": "", + "Yes": "", + "No": "", + "Backup not selected": "", + "Confirm \\& edit restore information": "", + "(.*) Available IP Address": "", + "Database File": "", + "Contain": "", + "Restricted Peers?": "", + "Restore": "", + "Restoring": "", + "WGDashboard Settings": "", + "Peers Settings": "", + "WireGuard Configuration Settings": "", + "Appearance": "", + "Theme": "", + "Language": "", + "Account Settings": "", + "Peer Default Settings": "", + "Toggle When Start Up": "", + "Other Settings": "", + "Select Peers": "", + "Backup & Restore": "", + "Delete Configuration": "", + "Create Backup": "", + "No backup yet, click the button above to create backup\\.": "", + "Are you sure to delete this backup\\?": "", + "Are you sure to restore this backup\\?": "", + "Backup Date": "", + "File": "", + "Are you sure to delete this configuration\\?": "", + "Once you deleted this configuration\\:": "", + "All connected peers will get disconnected": "", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "", + "Checking backups...": "", + "This configuration have ([0-9].*) backups": "", + "This configuration have no backup": "", + "If you're sure, please type in the configuration name below and click Delete": "", + "Select All": "", + "Clear Selection": "", + "([0-9].*) Peers?": "", + "Download": "", + "Downloading": "", + "Download Finished": "", + "Done": "", + "Are you sure to delete": "", + "Are you sure to delete this peer\\?": "", + "Configuration deleted": "", + "Configuration saved": "", + "WGDashboard language update failed": "", + "Configuration restored": "", + "Allowed IP already taken by another peer": "", + "Failed to allow access of peer (.*)": "", + "Failed to save configuration through WireGuard": "", + "Allow access successfully": "", + "Deleted ([0-9]{1,}) peer\\(s\\)": "", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "", + "Restricted ([0-9]{1,}) peer\\(s\\)": "", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "", + "Display As": "", + "List": "", + "Grid": "", + "Protocol": "", + "Open File": "", + "Advanced Options": "", + "Allowed IPs Validation": "", + "Update Name": "", + "To update this configuration's name, WGDashboard will execute the following operations:": "", + "Duplicate current configuration's database table and \\.conf file with the new name": "", + "Delete current configuration's database table and \\.conf file": "", + "Danger Zone": "", + "Configuration File": "", + "Edit Raw Configuration File": "", + "Peer Configuration File": "", + "Share with Email": "", + "Email Account": "", + "Ready": "", + "Port": "", + "Encryption": "", + "No Encryption": "", + "Send From": "", + "Send Test Email": "", + "Email Body Template": "", + "Live Preview": "", + "Include configuration file as an attachment": "", + "Send": "", + "Sending\\.\\.\\.": "", + "Email sent successfully!": "", + "AmneziaWG Peer Setting": "", + "System Status": "", + "CPU": "", + "Memory": "", + "Swap Memory": "", + "Processes": "", + "CPU Usage": "", + "Memory Usage": "", + "Swap Memory Usage": "", + "Network": "", + "([0-9]{1,}) Interfaces": "", + "Storage": "", + "([0-9]{1,}) Partitions": "", + "(.*) Used": "", + "Untitled Peer": "", + "Who are you sending to\\?": "", + "What\\'s the subject\\?": "", + "What\\'s the body\\?": "", + "Path": "", + "Subnets \\& Listen Ports Templates": "", + "Create templates to keep track a list of available Subnets \\& Listen Ports\n": "", + "Add Template": "", + "No Templates": "", + "Override Peer Settings": "", + "Only apply to peers in this configuration": "", + "Tags": "", + "Tag": "", + "Show All Peers": "", + "Close": "", + "Search Icon": "", + "Remove Icon": "", + "Tag Peer": "", + "Assign Peer": "", + "Assign Peer to Client": "", + "Assigned Clients": "", + "Local": "", + "Assign to Clients": "", + "Enter Email or Name to Search": "", + "Groups": "", + "No result": "", + "Are you sure to delete assignment for": "", + "(.*) in group (.*)\\?": "", + "All": "", + "Details": "", + "Peer Details": "", + "Disconnected": "", + "Connected": "", + "Latest Handshake Time": "", + "Peer Historical Sessions": "", + "^([0-9].*) Sessions*$": "", + "Duration:": "", + "Peer Historical Endpoints": "", + "Search Clients\\.\\.\\.": "", + "Clients": "", + "([0-9].*) Clients*": "", + "Email": "", + "Client ID": "", + "Client Name": "", + "Assigned Peers": "", + "Manage": "", + "No peer assigned to this client": "", + "Delete Client": "", + "Are you sure to delete this client\\?": "", + "Available Peers": "", + "Clients Settings": "", + "Client Side App": "", + "Webhooks*": "", + "Add Webhook": "", + "WGDashboard will sent a POST Request to the URL below with details of any subscribed events\\.": "", + "Payload URL": "", + "Content Type": "", + "Verify SSL": "", + "We highly suggest to enable SSL verification": "", + "Custom Headers": "", + "Header": "", + "Value": "", + "Subscribed Actions": "", + "Peer Created": "", + "Peer Deleted": "", + "Peer Updated": "", + "Enable Webhook": "", + "Latest Session": "", + "Started At": "", + "Ended At": "", + "Datetime": "", + "Previous Sessions": "", + "Notes": "", + "Assign successfully!": "", + "Sessions": "", + "Data": "", + "Back": "" +} \ No newline at end of file diff --git a/src/static/locales/nl-NL.json b/src/static/locales/nl-NL.json new file mode 100644 index 0000000..5ce4f9b --- /dev/null +++ b/src/static/locales/nl-NL.json @@ -0,0 +1,369 @@ +{ + " file": " bestand te downloaden", + "(.*) Available IP Address": "$1 Beschikbaar IP-adres", + "(.*) Minutes": "$1 Minuten", + "(.*) Seconds": "$1 Seconden", + "(.*) Used": "", + "(.*) is off": "$1 is uitgeschakeld", + "(.*) is on": "$1 is ingeschakeld", + "([0-9].*) Backups?": "$1 Back-ups?", + "([0-9].*) Peers?": "$1 Peers?", + "([0-9]{1,}) Interfaces": "", + "([0-9]{1,}) Partitions": "", + "(v[0-9.]{1,}) is now available for update!": "Versie $1 is nu beschikbaar voor update!", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Scan de volgende QR-code om TOTP te genereren met je keuze van authenticator", + "2\\. Enter the TOTP generated by your authenticator to verify": "2. Voer de door je authenticator gegenereerde TOTP in om te verifiëren", + "API Key": "API-sleutel", + "API Key created": "API-sleutel aangemaakt", + "API Key deleted": "API-sleutel verwijderd", + "API Keys": "API-sleutels", + "API Keys function is failed to disable": "API-sleutelfunctie kon niet worden uitgeschakeld", + "API Keys function is failed to enable": "API-sleutelfunctie kon niet worden ingeschakeld", + "API Keys function is successfully disabled": "API-sleutelfunctie is succesvol uitgeschakeld", + "API Keys function is successfully enabled": "API-sleutelfunctie is succesvol ingeschakeld", + "Access Remote Server": "Toegang tot Remote Server", + "Access Restricted": "Toegang Beperkt", + "Account Settings": "Account Instellingen", + "Active Jobs": "Actieve Taken", + "Add": "Toevoegen", + "Add Peers": "Peers toevoegen", + "Adding\\.\\.\\.": "Toevoegen...", + "Address": "Adres", + "Advanced Options": "", + "All Active Jobs": "Alle Actieve Taken", + "All connected peers will get disconnected": "Alle verbonden peers worden losgekoppeld", + "Allow Access": "Toegang toestaan", + "Allow access successfully": "Toegang succesvol toegestaan", + "Allowed IP already taken by another peer": "Toegestane IP is al in gebruik door een andere peer", + "Allowed IPs": "Allowed IPs", + "Allowed IPs Validation": "", + "Allowed IPs already taken by another peer": "Toegestane IP's zijn al in gebruik door een andere peer", + "Allowed IPs is invalid": "Toegestane IP's zijn ongeldig", + "Allowing Access\\.\\.\\.": "Toegang toe aan het staan...", + "AmneziaWG Peer Setting": "", + "Appearance": "Weergave", + "Are you sure to delete": "Weet je zeker dat je wilt verwijderen?", + "Are you sure to delete this API key\\?": "Weet u zeker dat u deze API-sleutel wilt verwijderen?", + "Are you sure to delete this backup\\?": "Weet je zeker dat je deze back-up wilt verwijderen?", + "Are you sure to delete this configuration\\?": "Weet je zeker dat je deze configuratie wilt verwijderen?", + "Are you sure to delete this peer\\?": "Weet je zeker dat je deze peer wilt verwijderen?", + "Are you sure to restore this backup\\?": "", + "Average / Min / Max Round Trip Time": "Gemiddelde / Min / Max Round Trip Time", + "Average RTT \\(ms\\)": "", + "Backup": "Back-up", + "Backup & Restore": "Back-up & Herstellen", + "Backup Date": "Back-up Datum", + "Backup not selected": "Geen back-up geselecteerd", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Zowel het configuratiebestand (.conf) als de databasetabel die aan deze configuratie is gekoppeld, worden verwijderd", + "Bulk Add": "Bulk toevoegen", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": " \"By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP.\": \"Bij het bulk toevoegen wordt de naam van elke peer automatisch gegenereerd en wordt de Allowed-IPs aan het volgende beschikbare IP toegewezen.", + "CPU": "", + "CPU Usage": "", + "Cancel": "Annuleren", + "Checking backups...": "Back-ups worden gecontroleerd...", + "Checking for update...": "Zoeken naar updates...", + "Clear Selection": "Selectie wissen", + "Click": "Klik", + "Click to change a backup": "Klik om een back-up te wijzigen", + "Complete": "Voltooien", + "Configuration": "Configuratie", + "Configuration File": "", + "Configuration Name": "Configuratienaam", + "Configuration Settings": "Configuratie-instellingen", + "Configuration deleted": "Configuratie verwijderd", + "Configuration does not exist": "Configuratie bestaat niet", + "Configuration name already exist\\.": "Configuratienaam bestaat al.", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "De configuratienaam mag alleen uit 15 tekens bestaan, inclusief hoofd-/kleine letters, cijfers, onderstrepingsteken, gelijkteken, plusteken, punt en koppelteken.", + "Configuration name is invalid. Possible reasons:": "Configuratienaam is ongeldig. Mogelijke redenen:", + "Configuration restored": "Configuratie hersteld", + "Configuration saved": "Configuratie opgeslagen", + "Configurations": "Configuraties", + "Configurations Directory": "Configuratiemap", + "Confirm \\& edit restore information": "Bevestigen & herstelinformatie bewerken", + "Confirm password": "Bevestig wachtwoord", + "Connected Peers": "Verbonden Peers", + "Contain": "Bevat", + "Count": "Aantal", + "Create": "Maken", + "Create API Key": "API-sleutel maken", + "Create Backup": "Maak een Back-up", + "Create an account": "Maak een account aan", + "Creating\\.\\.\\.": "Maken", + "Current Password": "Huidig Wachtwoord", + "Current Version:": "Huidige versie:", + "Currently the peer is not sharing": "De peer deelt momenteel niet", + "DNS": "DNS", + "DNS format is incorrect": "Het DNS-formaat is onjuist", + "Danger Zone": "", + "Dark": "Donker", + "Dashboard IP Address \\& Listen Port": "", + "Dashboard Language": "Dashboard-taal", + "Dashboard Theme": "Dashboard Thema", + "Dashboard language update failed": "Bijwerken van dashboard-taal mislukt", + "Database File": "Databestand", + "Date": "Datum", + "Delete": "Verwijderen", + "Delete Configuration": "Configuratie Verwijderen", + "Delete Peer": "Peer Verwijderen", + "Delete current configuration's database table and \\.conf file": "", + "Deleted ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) verwijderd", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) succesvol verwijderd. Het verwijderen van $2 peer(s) is mislukt", + "Deleting...": "Aan het verwijderen", + "Disabled": "Uitgeschakeld", + "Discord Server": "", + "Display": "Weergave", + "Display As": "", + "Don't think that's a good idea": "Dit is geen goed idee, denk ik", + "Done": "Klaar", + "Download": "", + "Download All": "Alles Downloaden", + "Download Finished": "Download voltooid", + "Download \\& QR Code is not available due to no private key set for this peer": "Download & QR-code zijn niet beschikbaar omdat er geen privésleutel voor deze peer is ingesteld", + "Downloading": "Bezig met downloaden", + "Duplicate current configuration's database table and \\.conf file with the new name": "", + "Edit": "Bewerken", + "Edit Raw Configuration File": "", + "Email Account": "", + "Email Body Template": "", + "Email sent successfully!": "", + "Enabled": "Ingeschakeld", + "Encryption": "", + "Endpoint Allowed IPs": "Allowed-IPs voor Eindpunt", + "Endpoint Allowed IPs format is incorrect": "Het formaat van toegestane IP's van het eindpunt is onjuist", + "Enter IP Address / Hostname": "Voer IP-adres / Hostnaam in", + "Enter IP Address/CIDR": "Voer IP-adres/CIDR in", + "Enter a password": "Voer een wachtwoord in", + "Enter an username you like": "Voer een gebruikersnaam in die je leuk vindt", + "Expire At": "Vervalt Op", + "FROM ": "VAN", + "Failed": "Mislukt", + "Failed to add peers in bulk": "Massaal toevoegen van peers mislukt", + "Failed to allow access of peer (.*)": "Toegang voor peer $1 niet toegestaan", + "Failed to check available update": "Controlen van beschikbare updates mislukt", + "Failed to save configuration through WireGuard": "Configuratie opslaan via WireGuard mislukt", + "File": "Bestand", + "Filter": "Filteren", + "Generating key pairs by bulk failed": "Het massaal genereren van sleutelpaar is mislukt", + "Geolocation": "Geolocatie", + "Grid": "", + "Help": "Help", + "Home": "Startpagina", + "Hop": "", + "How many peers you want to add\\?": "Hoeveel peers wil je toevoegen?", + "I don't need MFA": "Ik heb geen MFA nodig", + "IP Address": "IP-adres", + "IP Address / Hostname": "IP-adres / Hostnaam", + "IP Address/CIDR": "IP-adres/CIDR", + "IP Address/CIDR is invalid": "IP-adres/CIDR is ongeldig", + "If you're sure, please type in the configuration name below and click Delete": "Als je zeker bent, typ dan de configuratienaam hieronder in en klik op Verwijderen", + "Include configuration file as an attachment": "", + "Invalid Port": "Ongeldige poort", + "Is Alive": "Is actief", + "Job": "Taak", + "Job ID": "Taak ID", + "Jobs Logs": "Taaklogboeken", + "Key": "Sleutel", + "Language": "Taal", + "Light": "Licht", + "Link expire date failed to update. Reason: (.*)": "Vervaldatum van de link kon niet worden bijgewerkt. Reden: $1", + "Link expire date updated": "Vervaldatum van de link bijgewerkt", + "List": "", + "Listen Port": "Luisterpoort", + "Live Preview": "", + "Log ID": "Log-ID", + "Logs": "Logboeken", + "MTU": "MTU", + "MTU format is not correct": "Het MTU-formaat is onjuist", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "Handmatig opnieuw opstarten van WGDashboard is nodig om wijzigingen in IP-adres en luisterpoort toe te passen", + "Max RTT \\(ms\\)": "", + "Memory": "", + "Memory Usage": "", + "Message": "Bericht", + "Min RTT \\(ms\\)": "", + "Multi-Factor Authentication \\(MFA\\)": "Multi-Factor Authenticatie (MFA)", + "Name": "Naam", + "Network": "", + "Never Expire": "Nooit vervallen", + "New Configuration": "Nieuwe configuratie", + "New Password": "Nieuw Wachtwoord", + "Next": "Volgende", + "Nice to meet you!": "Leuk je te ontmoeten!", + "No": "Nee", + "No Encryption": "", + "No WGDashboard API Key": "Geen WGDashboard API-sleutel", + "No active job at the moment\\.": "Momenteel geen actieve taak.", + "No available IP containing": "Geen beschikbare IP bevat", + "No backup yet, click the button above to create backup\\.": "Nog geen back-up, klik op de knop hierboven om een back-up te maken.", + "No more available IP can assign": "Er kunnen geen extra beschikbare IP's worden toegewezen", + "OTP from your authenticator": "OTP van uw authenticator", + "Off": "Uit", + "Official Documentation": "", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "Oh nee... Deze link is ofwel verlopen of ongeldig.", + "On": "Aan", + "Once you deleted this configuration\\:": "Zodra je deze configuratie hebt verwijderd:", + "Open File": "", + "Optional Settings": "Optionele Instellingen", + "Or you can click the link below:": "Of je kunt de onderstaande link klikken:", + "Other Settings": "Andere Instellingen", + "Password": "Wachtwoord", + "Peer": "Peer", + "Peer Configuration File": "", + "Peer Default Settings": "Standaard Peer Instellingen", + "Peer Jobs": "Peer Taken", + "Peer Remote Endpoint": "Peer Remote Endpunt", + "Peer Settings": "Peer Instellingen", + "Peer created successfully": "Peer succesvol aangemaakt", + "Peer data usage reset successfully": "Peer-gegevensverbruik succesvol gereset", + "Peer does not exist": "Peer bestaat niet", + "Peer download started": "Peer-download gestart", + "Peer job deleted": "Peer-taak verwijderd", + "Peer job saved": "Peer-taak opgeslagen", + "Peer saved": "Peer opgeslagen", + "Peers": "Peers", + "Peers Data Usage": "Data Gebruik van Peers", + "Peers Default Settings": "Standaardinstellingen voor Peers", + "Peers Settings": "Peers Instellingen", + "Persistent Keepalive": "Persistente Keepalive", + "Persistent Keepalive format is not correct": "Het formaat van Persistent Keepalive is onjuist", + "Pick Available IP": "Kies beschikbare IP", + "Pinging...": "Pingen...", + "Please fill in all required box": "Vul alle vereiste velden in", + "Please fill in the following fields to finish setup": "Vul de volgende velden in om de installatie te voltooien", + "Please provide a valid configuration name": "Geef een geldige configuratienaam op", + "Please provide ipAddress": "Geef een IP-adres op", + "Please provide ipAddress and count": "Geef het IP-adres en het aantal op", + "Please specify amount of peers you want to add": "Geef het aantal peers op dat je wilt toevoegen", + "Please specify an IP Address (v4/v6)": "Geef een IP-adres op (v4/v6)", + "Please specify job": "Geef een taak op", + "Please specify one or more peers": "Geef een of meer peers op", + "Please specify peer and configuration": "Geef peer en configuratie op", + "Port": "", + "Pre-Shared Key": "Pre-Shared Key", + "Private Key": "Privé Sleutel", + "Private key does not match with the public key": "Het privésleutel komt niet overeen met de publieke sleutel", + "Processes": "", + "Protocol": "", + "Public Key": "Publieke Sleutel", + "QR Code": "QR-code", + "Ready": "", + "Real Time Received Data Usage": "Realtime Ontvangen Data Gebruik", + "Real Time Sent Data Usage": "Realtime Verzonden Data Gebruik", + "Received": "Ontvangen", + "Refresh": "Vernieuwen", + "Refresh Interval": "Vernieuwingsinterval", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "Vergeet niet de / aan het einde van uw pad te verwijderen. Bijv. /etc/wireguard", + "Repeat New Password": "Herhaal Nieuw Wachtwoord", + "Reset": "Resetten", + "Reset Data Usage": "Reset Datagebruik", + "Restore": "Herstellen", + "Restore Configuration": "Herstel configuratie", + "Restoring": "Herstellen...", + "Restrict Access": "Beperk toegang", + "Restrict Peer": "Peer Beperken", + "Restricted": "Beperkt", + "Restricted ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) beperkt", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) succesvol beperkt. Het beperken van $2 peer(s) is mislukt", + "Restricted Peers?": "Beperkte Peers?", + "Restricting\\.\\.\\.": "Aan het beperken...", + "Revert": "Herstellen", + "Save": "Opslaan", + "Save Configuration": "Configuratie opslaan", + "Save Peer": "Peer Opslaan", + "Saving\\.\\.\\.": "Opslaan...", + "Scan QR Code with the WireGuard App to add peer": "Scan de QR-code met de WireGuard-app om peer toe te voegen", + "Schedule Jobs": "Taken Inplannen", + "Search": "", + "Search Peers\\.\\.\\.": "Zoek Peers...", + "Select All": "Selecteer alles", + "Select Peers": "Selecteer Peers", + "Select a backup you want to restore": "Selecteer een back-up die je wilt herstellen", + "Selected Backup": "Geselecteerde back-up", + "Send": "", + "Send From": "", + "Send Test Email": "", + "Sending\\.\\.\\.": "", + "Sent": "Verzonden", + "Sent / Received / Lost Package": "Verzonden / Ontvangen / Verloren pakket", + "Server": "Server", + "Server List": "Serverlijst", + "Settings": "Instellingen", + "Setup": "Instellen", + "Share Peer": "Deel Peer", + "Share link failed to create. Reason: (.*)": "De gedeelde link kon niet worden aangemaakt. Reden: $1", + "Share with Email": "", + "Sharing\\.\\.\\.": "Delen aan het starten...", + "Sign In": "Inloggen", + "Sign Out": "Uitloggen", + "Sign in session ended, please sign in again": "Aanmeldsessie beëindigd, meld je opnieuw aan", + "Signing In\\.\\.\\.": "Inloggen...", + "Sorry, your username or password is incorrect.": "Sorry, uw gebruikersnaam of wachtwoord is onjuist.", + "Sort By": "Sorteren op", + "Start Sharing": "Start delen", + "Status": "Status", + "Step (.*)": "Stap $1", + "Stop Sharing": "Stop met delen", + "Stop Sharing\\.\\.\\.": "Delen aan het stoppen...", + "Storage": "", + "Success": "Succesvol", + "Swap Memory": "", + "Swap Memory Usage": "", + "System Status": "", + "TOTP verified!": "TOTP succesvol geverifieerd!", + "Table": "", + "The maximum number of peers can add is (.*)": "Het maximale aantal peers dat kan worden toegevoegd is $1", + "Theme": "Thema", + "This IP is not available: (.*)": "Deze IP is niet beschikbaar: $1", + "This configuration have ([0-9].*) backups": "Deze configuratie heeft $1 back-ups", + "This configuration have no backup": "Deze configuratie heeft geen back-up", + "This peer already exist": "Deze peer bestaat al", + "This peer does not have any job yet\\.": "Deze peer heeft nog geen taak.", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Dit wordt globaal gewijzigd en is van toepassing op alle QR-codes van peers en configuratiebestanden.", + "To update this configuration's name, WGDashboard will execute the following operations:": "", + "Toggle When Start Up": "Wisselen bij opstarten", + "Tools": "Hulpmiddelen", + "Total": "Totaal", + "Total Received": "Totaal Ontvangen", + "Total Sent": "Totaal Verzonden", + "Total Usage": "Totaal Gebruik", + "Turning Off\\.\\.\\.": "Uitzetten...", + "Turning On\\.\\.\\.": "Aanzetten...", + "Unsaved Job": "Niet Opgeslagen Taak", + "Untitled Peer": "", + "Update Name": "", + "Update Password": "Wachtwoord bijwerken", + "Update peer failed when saving the configuration": "Fout bij het opslaan van de peer-configuratie", + "Update peer failed when updating Allowed IPs": "Fout bij het bijwerken van de peer tijdens het bijwerken van toegestane IP's", + "Update peer failed when updating Pre-Shared Key": "Fout bij het bijwerken van de peer tijdens het bijwerken van de Pre-Shared Key", + "Updated at": "Bijgewerkt op", + "Use your own Private and Public Key": "Gebruik je eigen Privé- en Publieke Sleutel", + "Username": "Gebruikersnaam", + "WGDashboard API Keys function is disabled": "De API-sleutelfunctie in WGDashboard is uitgeschakeld", + "WGDashboard Account Settings": "WGDashboard Accountinstellingen", + "WGDashboard Settings": "WGDashboard Instellingen", + "WGDashboard language update failed": "Bijwerken van de WGDashboard-taal mislukt", + "Welcome to": "Welkom bij", + "What\\'s the body\\?": "", + "What\\'s the subject\\?": "", + "When should this API Key expire\\?": "Wanneer moet deze API-sleutel vervallen?", + "Who are you sending to\\?": "", + "WireGuard Configuration Settings": "WireGuard Configuratie Instellingen", + "WireGuard Configurations": "WireGuard Configuraties", + "WireGuard Configurations Settings": "WireGuard Configuratie-instellingen", + "WireGuard configuration path saved": "WireGuard-configuratiepad opgeslagen", + "Yes": "Ja", + "You can add up to (.*) peers": "Je kunt tot $1 peers toevoegen", + "You can visit our: ": "", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "U heeft nog geen WireGuard configuraties. Controleer de configuratiemap of wijzig deze in de instellingen. Standaard is de map /etc/wireguard.", + "You don't have any configuration to restore": "Je hebt geen configuratie om te herstellen", + "You're on the latest version": "U gebruikt de laatste versie", + "\\(At least 8 characters and make sure is strong enough!\\)": "(Minimaal 8 tekens en zorg ervoor dat het sterk genoeg is!)", + "\\(Required for QR Code and Download\\)": "(Vereist voor QR-code en Download)", + "\\(Required\\)": "(Vereist)", + "if": "als", + "is": "is", + "larger than": "groter dan", + "or": "of", + "or click the button below to download the ": "of klik op de knop hieronder om de", + "then": "dan", + "to add your server": "om uw server toe te voegen" +} \ No newline at end of file diff --git a/src/static/locales/pl-PL.json b/src/static/locales/pl-PL.json new file mode 100644 index 0000000..c03de58 --- /dev/null +++ b/src/static/locales/pl-PL.json @@ -0,0 +1,369 @@ +{ + " file": " plik", + "(.*) Available IP Address": "$1 Dostępne Adresy IP", + "(.*) Minutes": "$1 min.", + "(.*) Seconds": "$1 sek.", + "(.*) Used": "", + "(.*) is off": "$1 jest wył.", + "(.*) is on": "$1 jest wł.", + "([0-9].*) Backups?": "$1 Kopii Zapasowych?", + "([0-9].*) Peers?": "$1 Klientów?", + "([0-9]{1,}) Interfaces": "", + "([0-9]{1,}) Partitions": "", + "(v[0-9.]{1,}) is now available for update!": "Aktualizacja do wersji $1 jest dostępna do pobrania!", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Zeskanuj ten kod QR aby utworzyć jednorazowe hasło (TOTP) za pomocą Twojego Autentykatora", + "2\\. Enter the TOTP generated by your authenticator to verify": "2. Podaj swoje jednorazowe hasło (TOTP), utworzone za pomocą Twojego Autentykatora", + "API Key": "Klucz API", + "API Key created": "Klucz API stworzony pomyślnie", + "API Key deleted": "Klucz API usunięty pomyślnie", + "API Keys": "Klucze API", + "API Keys function is failed to disable": "Nie udało się wyłączyć funkcjonalności kluczy API", + "API Keys function is failed to enable": "Nie udało się włączyć funkcjonalności kluczy API", + "API Keys function is successfully disabled": "Funkcjonalność kluczy API pomyślnie wyłączona", + "API Keys function is successfully enabled": "Funkcjonalność kluczy API pomyślnie włączona", + "Access Remote Server": "Połącz się ze zdalnym serwerem", + "Access Restricted": "Dostęp Ograniczony", + "Account Settings": "Ustawienia Konta", + "Active Jobs": "Aktywne Automatyzacje", + "Add": "Dodaj", + "Add Peers": "Dodaj Klientów", + "Adding\\.\\.\\.": "Dodawanie...", + "Address": "Adres", + "Advanced Options": "", + "All Active Jobs": "Wszystkie Aktywne Automatyzacje", + "All connected peers will get disconnected": "Wszyscy klienci zostaną odłączeni", + "Allow Access": "Udostępnij Dostęp", + "Allow access successfully": "Pomyślnie udostępniono dostęp", + "Allowed IP already taken by another peer": "Dozwolony Adres IP jest już wykorzystywany przez innego klienta", + "Allowed IPs": "Dozwolone IP", + "Allowed IPs Validation": "", + "Allowed IPs already taken by another peer": "Adres IP jest już wykorzystywany przez innego klienta", + "Allowed IPs is invalid": "Dozwolone Adresy IP są niepoprawne", + "Allowing Access\\.\\.\\.": "Udostępnianie Dostępu...", + "AmneziaWG Peer Setting": "", + "Appearance": "Wygląd", + "Are you sure to delete": "Czy na pewno chcesz usunąć", + "Are you sure to delete this API key\\?": "Czy na pewno chcesz usunąć ten klucz API?", + "Are you sure to delete this backup\\?": "Czy na pewno chcesz usunąć tą kopię zapasową?", + "Are you sure to delete this configuration\\?": "Czy na pewno chcesz usunąć tą konfigurację?", + "Are you sure to delete this peer\\?": "Czy na pewno chcesz usunąć tego klienta?", + "Are you sure to restore this backup\\?": "", + "Average / Min / Max Round Trip Time": "Średnia / Min. / Maks. czas podróży pakietu", + "Average RTT \\(ms\\)": "", + "Backup": "Kopia Zapasowa", + "Backup & Restore": "Tworzenie i Przywracanie Kopii Zapasowej", + "Backup Date": "Data Utworzenia", + "Backup not selected": "Nie wybrano kopii zapasowej", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Zarówno plik konfiguracji (.conf) jak i tabela w bazie danych dotycząca tej konfiguracji zostaną usunięte", + "Bulk Add": "Masowe Dodawanie", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Dodając klientów masowo, nazwa każdego klienta zostanie wygenerowana automatycznie i przydzielone zostanie następny dostępny adres IP.", + "CPU": "", + "CPU Usage": "", + "Cancel": "Anuluj", + "Checking backups...": "Sprawdzanie kopii zapasowych...", + "Checking for update...": "Sprawdzanie aktualizacji...", + "Clear Selection": "Wyczyść Zaznaczenie", + "Click": "Kliknij", + "Click to change a backup": "Wybierz kopię zapasową", + "Complete": "Zakończ", + "Configuration": "Konfiguracja", + "Configuration File": "", + "Configuration Name": "Nazwa Konfiguracji", + "Configuration Settings": "Ustawienia Konfiguracji", + "Configuration deleted": "Konfiguracja usunięta pomyślnie", + "Configuration does not exist": "Konfiguracja nie istnieje", + "Configuration name already exist\\.": "Konfiguracja o tej nazwie już istnieje. ", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "Nazwa konfiguracji może zawierać tylko 15 znaków składających się z małych i dużych liter alfabetu, liczb, oraz tych znaków: _=+.- ", + "Configuration name is invalid. Possible reasons:": "Nazwa Konfiguracji jest nieprawidłowa. Możliwy powód:", + "Configuration restored": "Konfiguracja przywrócona pomyślnie", + "Configuration saved": "Konfiguracja zapisana pomyślnie", + "Configurations": "Konfiguracje", + "Configurations Directory": "Folder Konfiguracji", + "Confirm \\& edit restore information": "Potwierdź i edytuj informacje o przywróceniu kopii zapasowej", + "Confirm password": "Potwierdź Hasło", + "Connected Peers": "Połączeni Klienci", + "Contain": "Zawiera", + "Count": "Ilość", + "Create": "Stwórz", + "Create API Key": "Stwórz klucz API", + "Create Backup": "Stwórz Kopię Zapasową", + "Create an account": "Stwórz konto", + "Creating\\.\\.\\.": "Tworzenie...", + "Current Password": "Aktualne Hasło", + "Current Version:": "Aktualna wersja: ", + "Currently the peer is not sharing": "Aktualnie klient nie jest udostępniony", + "DNS": "DNS", + "DNS format is incorrect": "Niepoprawny format adresu serwera DNS", + "Danger Zone": "", + "Dark": "Ciemny", + "Dashboard IP Address \\& Listen Port": "Adres IP Portalu WGDashboard oraz Port Nasłuchiwania", + "Dashboard Language": "Język Portalu WGDashboard", + "Dashboard Theme": "Styl Panelu", + "Dashboard language update failed": "Nie udało się zmienić języka portalu WGDashboard", + "Database File": "Plik Bazy Danych", + "Date": "Data", + "Delete": "Usuń", + "Delete Configuration": "Usuń Konfiguracje", + "Delete Peer": "Usuń Klienta", + "Delete current configuration's database table and \\.conf file": "", + "Deleted ([0-9]{1,}) peer\\(s\\)": "Usunięto $1 klienta/ów", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Usunięto $1 klienta/ów pomyślnie. Nie udało się usunąć $2 klienta/ów", + "Deleting...": "Usuwam...", + "Disabled": "Wyłączone", + "Discord Server": "", + "Display": "Wyświetlanie", + "Display As": "", + "Don't think that's a good idea": "To nie jest dobry pomysł...", + "Done": "Zakończono", + "Download": "", + "Download All": "Pobierz Wszystkie", + "Download Finished": "Pobieranie Zakończone", + "Download \\& QR Code is not available due to no private key set for this peer": "Kod QR lub pobieranie nie jest dostępne ze względu na brak ustawionego prywatnego klucza dla tego klienta", + "Downloading": "Pobieranie", + "Duplicate current configuration's database table and \\.conf file with the new name": "", + "Edit": "Edytuj", + "Edit Raw Configuration File": "", + "Email Account": "", + "Email Body Template": "", + "Email sent successfully!": "", + "Enabled": "Włączone", + "Encryption": "", + "Endpoint Allowed IPs": "Dozwolone IP Punktu Końcowego", + "Endpoint Allowed IPs format is incorrect": "Format Dozwolonych adresów IP jest niepoprawny", + "Enter IP Address / Hostname": "Wpisz Adres IP / Nazwę Hosta", + "Enter IP Address/CIDR": "Podaj adres IP/CIDR", + "Enter a password": "Utwórz Hasło", + "Enter an username you like": "Wpisz nazwę użytkownika", + "Expire At": "Termin Ważności", + "FROM ": "z ", + "Failed": "Porażka", + "Failed to add peers in bulk": "Nie udało się dodać klientów masowo", + "Failed to allow access of peer (.*)": "Nie udało się pozwolić na dostęp klientowi:$1", + "Failed to check available update": "Nie udało się sprawdzić dostępnych aktualizacji", + "Failed to save configuration through WireGuard": "Nie udało się zapisać konfiguracji poprzez WireGuard", + "File": "Plik", + "Filter": "Filtruj", + "Generating key pairs by bulk failed": "Tworzenie par kluczy nie udało się", + "Geolocation": "Geolokalizacja", + "Grid": "", + "Help": "Pomoc", + "Home": "Strona Główna", + "Hop": "", + "How many peers you want to add\\?": "Ilu klientów chcesz dodać?", + "I don't need MFA": "Nie potrzebuję Weryfikacji Wieloskładnikowej (MFA)", + "IP Address": "Adres IP", + "IP Address / Hostname": "Adres IP / Nazwa Hosta", + "IP Address/CIDR": "Adres IP/CIDR", + "IP Address/CIDR is invalid": "Adres IP/CIDR jest niepoprawny", + "If you're sure, please type in the configuration name below and click Delete": "Jeśli jesteś pewny/a wpisz nazwę konfiguracji poniżej i kliknij Usuń", + "Include configuration file as an attachment": "", + "Invalid Port": "Niepoprawny Port", + "Is Alive": "Jest Online", + "Job": "Automatyzacja", + "Job ID": "ID Automatyzacji", + "Jobs Logs": "Logi Automatyzacji", + "Key": "Klucz", + "Language": "Język", + "Light": "Jasny", + "Link expire date failed to update. Reason: (.*)": "Nie udało się zapisać daty linku do udostępniania. Powód: $1", + "Link expire date updated": "Data ważności linku zapisana", + "List": "", + "Listen Port": "Port Nasłuchu", + "Live Preview": "", + "Log ID": "ID Logów", + "Logs": "Logi", + "MTU": "MTU", + "MTU format is not correct": "Niepoprawny format wartości MTU", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "Aby zapisać zmiany adresów IP lub portu nasłuchiwania wymagany będzie manualny restart WGDashboard.", + "Max RTT \\(ms\\)": "", + "Memory": "", + "Memory Usage": "", + "Message": "Wiadomość", + "Min RTT \\(ms\\)": "", + "Multi-Factor Authentication \\(MFA\\)": "Weryfikacja Wieloskładnikowa (MFA)", + "Name": "Nazwa", + "Network": "", + "Never Expire": "Nigdy", + "New Configuration": "Nowa Konfiguracja", + "New Password": "Nowe Hasło", + "Next": "Dalej", + "Nice to meet you!": "Miło Cię poznać!", + "No": "Nie", + "No Encryption": "", + "No WGDashboard API Key": "Brak Klucza API WGDashboard", + "No active job at the moment\\.": "Brak aktywnych automatyzacji.", + "No available IP containing": "Brak dostępnych adresów IP zawierających", + "No backup yet, click the button above to create backup\\.": "Brak kopii Zapasowych, kliknij przycisk powyżej aby utworzyć nową kopię", + "No more available IP can assign": "Brak dostępnych adresów IP do dopisania", + "OTP from your authenticator": "OTP z Twojego Autentykatora", + "Off": "Wył.", + "Official Documentation": "", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "Ups. Ten link nie jest poprawny bądź utracił swoją ważność.", + "On": "Wł.", + "Once you deleted this configuration\\:": "Jak tylko usuniesz tą konfigurację: ", + "Open File": "", + "Optional Settings": "Opcjonalne Ustawienia", + "Or you can click the link below:": "Lub kliknij w poniższy link:", + "Other Settings": "Inne Ustawienia", + "Password": "Hasło", + "Peer": "Klient", + "Peer Configuration File": "", + "Peer Default Settings": "Domyślne Ustawienia Klientów", + "Peer Jobs": "Automatyzacje Klienta", + "Peer Remote Endpoint": "Zdalny Punkt Końcowy Klienta", + "Peer Settings": "Ustawienia Klientów", + "Peer created successfully": "Klient utworzony pomyślnie", + "Peer data usage reset successfully": "Użycie danych klienta zresetowane pomyślnie", + "Peer does not exist": "Klient nie istnieje", + "Peer download started": "Pobieranie klienta rozpoczęte", + "Peer job deleted": "Automatyzacja klienta usunięta pomyślnie", + "Peer job saved": "Automatyzacja klienta zapisana", + "Peer saved": "Klient zapisany pomyślnie", + "Peers": "Klienci", + "Peers Data Usage": "Użycie danych przez Klientów", + "Peers Default Settings": "Domyślne ustawienia Klientów", + "Peers Settings": "Ustawienia Klientów", + "Persistent Keepalive": "Stałe Utrzymywanie Online", + "Persistent Keepalive format is not correct": "Niepoprawny format wartości Stałego Utrzymywania Online", + "Pick Available IP": "Wybierz Dostępny Adres IP", + "Pinging...": "Pinguje...", + "Please fill in all required box": "Wypełnij wszystkie wymagane pola", + "Please fill in the following fields to finish setup": "Wypełnij następujące pola aby ukończyć instalacje", + "Please provide a valid configuration name": "Podaj poprawną nazwę konfiguracji", + "Please provide ipAddress": "Podaj adres IP", + "Please provide ipAddress and count": "Podaj adres IP i ilość", + "Please specify amount of peers you want to add": "Podaj liczbę klientów do dodania", + "Please specify an IP Address (v4/v6)": "Podaj adres IP (v4/v6)", + "Please specify job": "Wybierz poprawną automatyzacje", + "Please specify one or more peers": "Wybierz co najmniej jednego klienta", + "Please specify peer and configuration": "Wybierz klienta i konfiguracje", + "Port": "", + "Pre-Shared Key": "Klucz PSK", + "Private Key": "Prywatny Klucz", + "Private key does not match with the public key": "Prywatny klucz nie pasuje do publicznego klucza", + "Processes": "", + "Protocol": "", + "Public Key": "Klucz publiczny", + "QR Code": "Kod QR", + "Ready": "", + "Real Time Received Data Usage": "Aktualnie Odbierane Dane", + "Real Time Sent Data Usage": "Aktualnie Wysyłane Dane", + "Received": "Otrzymano", + "Refresh": "Odśwież", + "Refresh Interval": "Interwał Odświeżania", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "Pamiętaj aby usunąć / na końcu ścieżki, na przykład /etc/wireguard", + "Repeat New Password": "Powtórz Nowe Hasło", + "Reset": "Reset", + "Reset Data Usage": "Zresetuje Użycie Danych", + "Restore": "Przywróć", + "Restore Configuration": "Przywróc Konfiguracje", + "Restoring": "Trwa przywracanie...", + "Restrict Access": "Ogranicz Dostęp", + "Restrict Peer": "Ogranicz Klienta", + "Restricted": "Ograniczone", + "Restricted ([0-9]{1,}) peer\\(s\\)": "Ograniczono $1 klienta/ów ", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Ograniczono $1 klienta/ów pomyślnie. Nie udało się ograniczyć $2 klienta/ów", + "Restricted Peers?": "Ograniczeni Klienci", + "Restricting\\.\\.\\.": "Ograniczanie...", + "Revert": "Cofnij", + "Save": "Zapisz", + "Save Configuration": "Zapisz Konfiguracje", + "Save Peer": "Zapisz Klienta", + "Saving\\.\\.\\.": "Zapisywanie...", + "Scan QR Code with the WireGuard App to add peer": "Zeskanuj kod QR za pomocą aplikacji WireGuard aby dodać klienta", + "Schedule Jobs": "Automatyzacje", + "Search": "", + "Search Peers\\.\\.\\.": "Szukaj Klientów...", + "Select All": "Zaznacz Wszystkie", + "Select Peers": "Wybierz Klientów", + "Select a backup you want to restore": "Wybierz kopię zapasową którą chcesz przywrócić", + "Selected Backup": "Wybrana kopia zapasowa", + "Send": "", + "Send From": "", + "Send Test Email": "", + "Sending\\.\\.\\.": "", + "Sent": "Wysłano", + "Sent / Received / Lost Package": "Wysłane / Otrzymane / Utracone Pakiety", + "Server": "Serwer", + "Server List": "Lista Serwerów", + "Settings": "Ustawnienia", + "Setup": "Ustawienia", + "Share Peer": "Udostępnij Klienta", + "Share link failed to create. Reason: (.*)": "Nie udało się stworzyć linku do udostępniania. Powód: $1", + "Share with Email": "", + "Sharing\\.\\.\\.": "Udostępniam...", + "Sign In": "Zaloguj", + "Sign Out": "Wyloguj się", + "Sign in session ended, please sign in again": "Sesja logowania została zakończona. Zaloguj się ponownie", + "Signing In\\.\\.\\.": "Trwa Logowanie...", + "Sorry, your username or password is incorrect.": "Nazwa użytkownika bądź hasło jest niepoprawne.", + "Sort By": "Sortuj po", + "Start Sharing": "Rozpocznij Udostępnianie", + "Status": "Status", + "Step (.*)": "Krok $1", + "Stop Sharing": "Zakończ", + "Stop Sharing\\.\\.\\.": "Zakańczanie Udostępniania...", + "Storage": "", + "Success": "Sukces", + "Swap Memory": "", + "Swap Memory Usage": "", + "System Status": "", + "TOTP verified!": "Jednorazowe hasło (TOTP) potwierdzone!", + "Table": "", + "The maximum number of peers can add is (.*)": "Maksymalnie można dodać $1 klientów", + "Theme": "Styl", + "This IP is not available: (.*)": "Ten adres IP nie jest dostępny: $1", + "This configuration have ([0-9].*) backups": "Ta konfiguracja ma utworzone $1 kopii zapasowych", + "This configuration have no backup": "Ta konfiguracja nie posiada żadnych kopii zapasowych", + "This peer already exist": "Ten klient już istnieje", + "This peer does not have any job yet\\.": "Ten klient nie posiada żadnych automatyzacji.", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Te zmiany zostaną wprowadzone globalnie i nadpiszą kody QR i konfiguracje wszystkich Klientów.", + "To update this configuration's name, WGDashboard will execute the following operations:": "", + "Toggle When Start Up": "Włącz przy starcie serwera", + "Tools": "Narzędzia", + "Total": "Łącznie", + "Total Received": "Łącznie Odebrano", + "Total Sent": "Łącznie Wysłano", + "Total Usage": "Łączne Użycie", + "Turning Off\\.\\.\\.": "Wyłączam...", + "Turning On\\.\\.\\.": "Włączam...", + "Unsaved Job": "Niezapisana Automatyzacja", + "Untitled Peer": "", + "Update Name": "", + "Update Password": "Aktualizuj Hasło", + "Update peer failed when saving the configuration": "Aktualizacja klientów nie powiodła się przy zapisywaniu Konfiguracji", + "Update peer failed when updating Allowed IPs": "Aktualizacja klientów nie powiodła się przy zapisywaniu dozwolonych adresów IP", + "Update peer failed when updating Pre-Shared Key": "Aktualizacja klientów nie powiodła się przy zapisywaniu Klucza PSK", + "Updated at": "Ostatnia zmiana", + "Use your own Private and Public Key": "Użyj własnych publicznych i prywatnych kluczy", + "Username": "Nazwa Użytkownika", + "WGDashboard API Keys function is disabled": "Funkcjonalność kluczy API jest wyłączona", + "WGDashboard Account Settings": "Ustawienia Konta WGDashboard", + "WGDashboard Settings": "Ustawienia WGDashboard", + "WGDashboard language update failed": "Nie udało się zmienić języka WGDashboard", + "Welcome to": "Witamy w", + "What\\'s the body\\?": "", + "What\\'s the subject\\?": "", + "When should this API Key expire\\?": "Kiedy ten klucz API powinien utracić swoją ważność?", + "Who are you sending to\\?": "", + "WireGuard Configuration Settings": "Ustawienia Konfiguracji WireGuard", + "WireGuard Configurations": "Konfiguracja", + "WireGuard Configurations Settings": "Ustawienia Konfiguracji WireGuard", + "WireGuard configuration path saved": "Zapisano ścieżkę konfiguracji WireGuard pomyślnie", + "Yes": "Tak", + "You can add up to (.*) peers": "Możesz dodać do $1 Klientów", + "You can visit our: ": "", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Nie posiadasz żadnych konfiguarcji WireGuard. Sprawdź folder konfiguarcji lub zmień go w Ustawieniach. Domyślnie konfiguracje są zapisywane w /etc/wireguard.", + "You don't have any configuration to restore": "Nie posiadasz żadnej konfiguracji do przywrócenia", + "You're on the latest version": "Korzystasz z najnowszej wersji", + "\\(At least 8 characters and make sure is strong enough!\\)": "(Wybierz silne hasło zawierające co najmniej 8 znaków!)", + "\\(Required for QR Code and Download\\)": "(Wymagane aby otrzymać kod QR lub Pobrać)", + "\\(Required\\)": "(Wymagane)", + "if": "Jeśli", + "is": "jest", + "larger than": "większy/a niż", + "or": "lub", + "or click the button below to download the ": "lub kliknij przycisk poniżej aby pobrać ", + "then": "to wtedy", + "to add your server": "aby dodać do Twojego serwera" +} \ No newline at end of file diff --git a/src/static/locales/pt-BR.json b/src/static/locales/pt-BR.json new file mode 100644 index 0000000..00ba1bb --- /dev/null +++ b/src/static/locales/pt-BR.json @@ -0,0 +1,369 @@ +{ + " file": " arquivo", + "(.*) Available IP Address": "$1 endereço IP disponível", + "(.*) Minutes": "$1 Minutos", + "(.*) Seconds": "$1 Segundos", + "(.*) Used": "$1 Usado", + "(.*) is off": "$1 está desligado", + "(.*) is on": "$1 está ligado", + "([0-9].*) Backups?": "([0-9].*) Backups?", + "([0-9].*) Peers?": "$1 Peers?", + "([0-9]{1,}) Interfaces": "$1 Interfaces", + "([0-9]{1,}) Partitions": "$1 Repartições", + "(v[0-9.]{1,}) is now available for update!": "$1 está disponível para atualização!", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Escaneie o seguinte QR Code para gerar um código de uso único com um autenticador de sua escolha", + "2\\. Enter the TOTP generated by your authenticator to verify": "2. Digite o código de uso único gerado pelo seu autenticador para verificar", + "API Key": "Chave de API", + "API Key created": "Chave de API criada", + "API Key deleted": "Chave de API removida", + "API Keys": "Chaves de API", + "API Keys function is failed to disable": "Falha ao desabilitar recurso de Chaves API", + "API Keys function is failed to enable": "Falha ao habilitar recurso de Chaves API", + "API Keys function is successfully disabled": "Recurso de Chaves API está desabilitado", + "API Keys function is successfully enabled": "Recurso de Chaves API está habilitado", + "Access Remote Server": "Acessar Servidor Remoto", + "Access Restricted": "Acesso Restrito", + "Account Settings": "Definições de Conta", + "Active Jobs": "Jobs Ativos", + "Add": "Adicionar", + "Add Peers": "Adicionar Peers", + "Adding\\.\\.\\.": "Adcionando...", + "Address": "Endereço", + "Advanced Options": "Opções Avançadas", + "All Active Jobs": "Todos os Jobs Ativos", + "All connected peers will get disconnected": "Todos peers conectados serão desconectados", + "Allow Access": "Permitir Acesso", + "Allow access successfully": "Acesso permitido com sucesso", + "Allowed IP already taken by another peer": "Endereço IP já está em uso por outro peer", + "Allowed IPs": "IPs Permitidos", + "Allowed IPs Validation": "Validação de IPs Permitidos", + "Allowed IPs already taken by another peer": "IPs Permitidos já estão sendo usados por outro peer", + "Allowed IPs is invalid": "IPs Permitidos inválido", + "Allowing Access\\.\\.\\.": "Permitindo Acesso...", + "AmneziaWG Peer Setting": "Definições de Peer do AmneziaWG", + "Appearance": "Aparência", + "Are you sure to delete": "Tem certeza de que deseja remover", + "Are you sure to delete this API key\\?": "Tem certeza que deseja remover esta chave de API?", + "Are you sure to delete this backup\\?": "Tem certeza de que deseja remover este backup?", + "Are you sure to delete this configuration\\?": "Tem certeza de que deseja remover esta configuração?", + "Are you sure to delete this peer\\?": "Tem certeza de que deseja remover este peer?", + "Are you sure to restore this backup\\?": "Tem certeza de que deseja restaurar este backup?", + "Average / Min / Max Round Trip Time": "Média / Mínimo / Máximo do Tempo de Ida e Volta (Round Trip)", + "Average RTT \\(ms\\)": "RTT médio (ms)", + "Backup": "Backup", + "Backup & Restore": "Backup e Restauração", + "Backup Date": "Data do Backup", + "Backup not selected": "Backup não selecionado", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Ambos tabela do banco de dados e arquivo de configuração (.conf) desta configuração serão removidos", + "Bulk Add": "Adicionar Vários", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Ao gerar vários Peers, o nome de cada peer será gerado automaticamente, e o IP será atribuído ao próximo IP disponível.", + "CPU": "CPU", + "CPU Usage": "Uso de CPU", + "Cancel": "Cancelar", + "Checking backups...": "Verificando backups...", + "Checking for update...": "Verificando atualizações...", + "Clear Selection": "Limpar Seleção", + "Click": "Clique", + "Click to change a backup": "Clique para alterar um backup", + "Complete": "Completar", + "Configuration": "Configuração", + "Configuration File": "Arquivo de Configuração", + "Configuration Name": "Nome de Configuração", + "Configuration Settings": "Definição de Configuração", + "Configuration deleted": "Configuração removida", + "Configuration does not exist": "Configuração não existe", + "Configuration name already exist\\.": "Nome de configuração já existe\\.", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "Nome de configuração pode conter apenas 15 caracteres alfanuméricos, sublinhado, igual, mais, ponto e hífen.", + "Configuration name is invalid. Possible reasons:": "Nome de configuração é inválido. Possíveis razões:", + "Configuration restored": "Configuração restaurada", + "Configuration saved": "Configuração salva", + "Configurations": "Configurações", + "Configurations Directory": "Diretório de Configurações", + "Confirm \\& edit restore information": "Confirmar \\& editar informações de restauração", + "Confirm password": "Confirme a senha", + "Connected Peers": "Peers Conectados", + "Contain": "Contém", + "Count": "Quantidade", + "Create": "Criar", + "Create API Key": "Criar Chave de API", + "Create Backup": "Criar Backup", + "Create an account": "Crie uma conta", + "Creating\\.\\.\\.": "Criando...", + "Current Password": "Senha Atual", + "Current Version:": "Versão Atual:", + "Currently the peer is not sharing": "No momento o peer não está compartilhando", + "DNS": "DNS", + "DNS format is incorrect": "Formato do DNS está incorreto", + "Danger Zone": "Zona de Perigo", + "Dark": "Escuro", + "Dashboard IP Address \\& Listen Port": "Endereço IP do Painel e Porta", + "Dashboard Language": "Idioma do Painel", + "Dashboard Theme": "Tema do Painel", + "Dashboard language update failed": "Atualização do idioma do painel falhou", + "Database File": "Arquivo de Banco de Dados", + "Date": "Data", + "Delete": "Remover", + "Delete Configuration": "Remover Configuração", + "Delete Peer": "Remover Peer", + "Delete current configuration's database table and \\.conf file": "Remover tabela do banco de dados e arquivo .conf da configuração atual", + "Deleted ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) removido(s)", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) removido(s) com sucesso. Falha ao remover $2 peer(s)", + "Deleting...": "Removendo...", + "Disabled": "Desabilitado", + "Discord Server": "Servidor do Discord", + "Display": "Mostrar", + "Display As": "Mostrar Como", + "Don't think that's a good idea": "Não acho que seja uma boa ideia", + "Done": "Pronto", + "Download": "Baixar", + "Download All": "Baixar Todos", + "Download Finished": "Download Concluído", + "Download \\& QR Code is not available due to no private key set for this peer": "Download & QR Code não estão disponíveis devido à ausência de chave privada definida para este peer", + "Downloading": "Baixando", + "Duplicate current configuration's database table and \\.conf file with the new name": "Duplicar tabela do banco de dados e arquivo .conf da configuração atual com novo nome", + "Edit": "Editar", + "Edit Raw Configuration File": "Editar Conteúdo do Arquivo de Configuração", + "Email Account": "Conta de Email", + "Email Body Template": "Modelo de Corpo de Email", + "Email sent successfully!": "Email enviado com sucesso!", + "Enabled": "Habilitado", + "Encryption": "Criptografia", + "Endpoint Allowed IPs": "Endeços IP Permitidos do Endpoint", + "Endpoint Allowed IPs format is incorrect": "Formato dos IPs Permitidos do Endpoint está incorreta", + "Enter IP Address / Hostname": "Digite Endereço IP / Nome do Host", + "Enter IP Address/CIDR": "Digite Endereço IP/CIDR", + "Enter a password": "Digite uma senha", + "Enter an username you like": "Digite um nome de usuário", + "Expire At": "Expira Em", + "FROM ": "DE ", + "Failed": "Falhou", + "Failed to add peers in bulk": "Erro ao adicionar múltiplos peers", + "Failed to allow access of peer (.*)": "Falha ao permitir acesso ao peer $1", + "Failed to check available update": "Erro ao verificar atualização disponível", + "Failed to save configuration through WireGuard": "Falha ao salvar configuração pelo WGDashboard", + "File": "Arquivo", + "Filter": "Filtrar", + "Generating key pairs by bulk failed": "Gerar vários pares de chaves falhou", + "Geolocation": "Geolocalização", + "Grid": "Grid", + "Help": "Ajuda", + "Home": "Página principal", + "Hop": "Salto", + "How many peers you want to add\\?": "Quantos peers você quer adicionar?", + "I don't need MFA": "Não preciso de autenticação em duas etapas (MFA)", + "IP Address": "Endereço IP", + "IP Address / Hostname": "Endereço IP / Nome do Host", + "IP Address/CIDR": "Endereço IP/CIDR", + "IP Address/CIDR is invalid": "Endereço IP/CIDR inválido", + "If you're sure, please type in the configuration name below and click Delete": "Se você tem certeza, confirme o nome da configuração abaixo e clique em Remover", + "Include configuration file as an attachment": "Incluir arquivo de configuração como anexo", + "Invalid Port": "Porta Inválida", + "Is Alive": "Está Ativo", + "Job": "Job", + "Job ID": "ID do Job", + "Jobs Logs": "Logs de Jobs", + "Key": "Chave", + "Language": "Idioma", + "Light": "Claro", + "Link expire date failed to update. Reason: (.*)": "Erro ao atualizar a data de expiração do link. Motivo: $1", + "Link expire date updated": "Data de expiração do link atualizada", + "List": "Lista", + "Listen Port": "Porta", + "Live Preview": "Prévia ao vivo", + "Log ID": "ID do Log", + "Logs": "Logs", + "MTU": "MTU", + "MTU format is not correct": "Formato do MTU está incorreto", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "É necessário reiniciar o WGDashboard para aplicar as mudanças de Endereço IP e Porta", + "Max RTT \\(ms\\)": "RTT máximo (ms)", + "Memory": "Memória", + "Memory Usage": "Uso de Memória", + "Message": "Mensagem", + "Min RTT \\(ms\\)": "RTT mínimo (ms)", + "Multi-Factor Authentication \\(MFA\\)": "Autenticação em duas etapas (MFA)", + "Name": "Nome", + "Network": "Rede", + "Never Expire": "Nunca Expira", + "New Configuration": "Nova Configuração", + "New Password": "Nova Senha", + "Next": "Próximo", + "Nice to meet you!": "Bom te conhecer!", + "No": "Não", + "No Encryption": "Sem Criptografia", + "No WGDashboard API Key": "Nenhuma Chave de API do WGDashboard", + "No active job at the moment\\.": "Nenhum job ativo no momento.", + "No available IP containing": "Nenhum IP disponível contendo", + "No backup yet, click the button above to create backup\\.": "Nenhum backup, clique no botão acima para criar um backup.", + "No more available IP can assign": "Não há mais IPs disponíveis para atribuir", + "OTP from your authenticator": "Senha de uso único do seu autenticador", + "Off": "Desligado", + "Official Documentation": "Documentação Oficial", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "Ops... Este link é inválido ou expirou.", + "On": "Ligado", + "Once you deleted this configuration\\:": "Uma vez que remover esta configuração:", + "Open File": "Abrir Arquivo", + "Optional Settings": "Definições Opcionais", + "Or you can click the link below:": "Ou clique no link abaixo:", + "Other Settings": "Outras Definições", + "Password": "Senha", + "Peer": "Peer", + "Peer Configuration File": "Arquivo de Configuração do Peer", + "Peer Default Settings": "Definições Padrão do Peer", + "Peer Jobs": "Jobs do Peer", + "Peer Remote Endpoint": "Endpoint Remoto do Peer", + "Peer Settings": "Definições do Peer", + "Peer created successfully": "Peer criado com sucesso", + "Peer data usage reset successfully": "Uso de dados do peer redefinido com sucesso", + "Peer does not exist": "Peer não existe", + "Peer download started": "Download do peer iniciado", + "Peer job deleted": "Job do peer removido", + "Peer job saved": "Job do peer salvo", + "Peer saved": "Peer salvo", + "Peers": "Peers", + "Peers Data Usage": "Uso de Dados dos Peers", + "Peers Default Settings": "Definições Padrão dos Peers", + "Peers Settings": "Configurações dos Peers", + "Persistent Keepalive": "Keepalive Persistente", + "Persistent Keepalive format is not correct": "Formato do Keepalive Persistente está incorreto", + "Pick Available IP": "Selecione um IP Disponível", + "Pinging...": "Ping em andamento...", + "Please fill in all required box": "Preencha todas as caixas obrigatórias", + "Please fill in the following fields to finish setup": "Preencha os seguintes campos para finalizar a configuração", + "Please provide a valid configuration name": "Informe um nome de configuração válido", + "Please provide ipAddress": "Especifique endereço IP", + "Please provide ipAddress and count": "Especifique endereço IP e quantidade", + "Please specify amount of peers you want to add": "Especifique a quantidade de peers que você deseja adicionar", + "Please specify an IP Address (v4/v6)": "Especifique um endereço IP (v4/v6)", + "Please specify job": "Especifique o job", + "Please specify one or more peers": "Especifique um ou mais peers", + "Please specify peer and configuration": "Especifique o peer e a configuração", + "Port": "Porta", + "Pre-Shared Key": "Chave Pré-Compartilhada", + "Private Key": "Chave Privada", + "Private key does not match with the public key": "Chave privada não corresponde com a chave pública", + "Processes": "Processos", + "Protocol": "Protocolo", + "Public Key": "Chave Pública", + "QR Code": "QR Code", + "Ready": "Pronto", + "Real Time Received Data Usage": "Uso de Dados Recebidos em Tempo Real", + "Real Time Sent Data Usage": "Uso de Dados Enviados em Tempo Real", + "Received": "Recebido", + "Refresh": "Atualizar", + "Refresh Interval": "Intervalo de Atualização", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "Certifique-se de remover / no final do caminho. Exemplo: /etc/wireguard", + "Repeat New Password": "Repetir Nova Senha", + "Reset": "Redefinir", + "Reset Data Usage": "Redefinir Uso de Dados", + "Restore": "Restaurar", + "Restore Configuration": "Restaurar Configuração", + "Restoring": "Restaurando", + "Restrict Access": "Restringir Acesso", + "Restrict Peer": "Peer Restrito", + "Restricted": "Restrito", + "Restricted ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) restringido(s)", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) restringido(s) com sucesso. Falha ao restringir $2 peer(s)", + "Restricted Peers?": "Peers Restritos?", + "Restricting\\.\\.\\.": "Restringindo...", + "Revert": "Reverter", + "Save": "Salvar", + "Save Configuration": "Salvar Configuração", + "Save Peer": "Salvar Peer", + "Saving\\.\\.\\.": "Salvando...", + "Scan QR Code with the WireGuard App to add peer": "Escaneie o QR Code com o App WireGuard para adicionar o peer", + "Schedule Jobs": "Agendar Jobs", + "Search": "Buscar", + "Search Peers\\.\\.\\.": "Buscando em Peers...", + "Select All": "Selecionar Todos", + "Select Peers": "Selecione Peers", + "Select a backup you want to restore": "Selecione o backup que deseja restaurar", + "Selected Backup": "Backup Selecionado", + "Send": "Enviar", + "Send From": "Enviar de", + "Send Test Email": "Enviar Email de Teste", + "Sending\\.\\.\\.": "Enviando...", + "Sent": "Enviado", + "Sent / Received / Lost Package": "Enviado / Recebido / Pacotes Perdidos", + "Server": "Servidor", + "Server List": "Lista de Servidores", + "Settings": "Definições", + "Setup": "Definir", + "Share Peer": "Compartilhar Peer", + "Share link failed to create. Reason: (.*)": "Erro ao criar link de compartilhamento. Motivo: $1", + "Share with Email": "Compartilhar com Email", + "Sharing\\.\\.\\.": "Compartilhando...", + "Sign In": "Entrar", + "Sign Out": "Sair", + "Sign in session ended, please sign in again": "Sessão encerrada. Por favor, entre novamente", + "Signing In\\.\\.\\.": "Entrando...", + "Sorry, your username or password is incorrect.": "Desculpe, seu usuário ou senha está incorreto.", + "Sort By": "Ordenar Por", + "Start Sharing": "Iniciar Compartilhamento", + "Status": "Status", + "Step (.*)": "Passo (.*)", + "Stop Sharing": "Parar Compartilhamento", + "Stop Sharing\\.\\.\\.": "Parar Compartilhamento...", + "Storage": "Armazenamento", + "Success": "Sucesso", + "Swap Memory": "Memória Swap", + "Swap Memory Usage": "Uso de Memória Swap", + "System Status": "Status do Sistema", + "TOTP verified!": "Código de uso único verificado!", + "Table": "Tabela", + "The maximum number of peers can add is (.*)": "O número máximo de peers que podem ser adicionados é $1", + "Theme": "Tema", + "This IP is not available: (.*)": "Este IP não está disponível: $1", + "This configuration have ([0-9].*) backups": "Esta configuração tem $1 backups", + "This configuration have no backup": "Esta configuração não tem backups", + "This peer already exist": "Este peer já existe", + "This peer does not have any job yet\\.": "Este peer ainda não tem nenhum job.", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Estes itens serão alterados globalmente, e serão aplicados a todos os QR codes e arquivos de configuração dos peers.", + "To update this configuration's name, WGDashboard will execute the following operations:": "Para atualizar este nome de configuração, o WGDashboard vaoi executar as seguintes operações:", + "Toggle When Start Up": "Ativar Quanto Iniciar", + "Tools": "Ferramentas", + "Total": "Total", + "Total Received": "Total Recebido", + "Total Sent": "Total Enviado", + "Total Usage": "Uso Total", + "Turning Off\\.\\.\\.": "Desligando...", + "Turning On\\.\\.\\.": "Ligando...", + "Unsaved Job": "Job não salvo", + "Untitled Peer": "Peer Sem Nome", + "Update Name": "Atualizar Nome", + "Update Password": "Atualizar Senha", + "Update peer failed when saving the configuration": "Atualização do peer falhou ao salvar a configuração", + "Update peer failed when updating Allowed IPs": "Atualização do peer falhou ao atualizar os IPs Permitidos", + "Update peer failed when updating Pre-Shared Key": "Atualização do peer falhou ao atualizar a Chave Pré-Compartilhada", + "Updated at": "Atualizado em", + "Use your own Private and Public Key": "Use sua própria Chave Privada e Pública", + "Username": "Usuário", + "WGDashboard API Keys function is disabled": "Recurso de Chaves de API do WGDashboard está desabilitada", + "WGDashboard Account Settings": "Definições da Conta do WGDashboard", + "WGDashboard Settings": "Configurações do WGDashboard", + "WGDashboard language update failed": "Falha ao atualizar idioma do WGDashboard", + "Welcome to": "Bem vindo ao", + "What\\'s the body\\?": "Qual a mensagem?", + "What\\'s the subject\\?": "Qual o título?", + "When should this API Key expire\\?": "Quando esta Chave de API deve expirar?", + "Who are you sending to\\?": "Para quem você está enviando?", + "WireGuard Configuration Settings": "Definições de Configuração WireGuard", + "WireGuard Configurations": "Cofigurações do WireGuard", + "WireGuard Configurations Settings": "Definições de Configurações do WireGuard", + "WireGuard configuration path saved": "Caminho do arquivo de configuração WireGuard salvo", + "Yes": "Sim", + "You can add up to (.*) peers": "Você pode adicionar até $1 peers", + "You can visit our: ": "Você pode visitar nosso: ", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Você ainda não tem nenhuma configuração do WireGuard. Verifique a pasta de configurações ou altere-a nas Definições. Por padrão, a pasta é /etc/wireguard.", + "You don't have any configuration to restore": "Você não tem configurações para restaurar", + "You're on the latest version": "Você está na versão mais recente", + "\\(At least 8 characters and make sure is strong enough!\\)": "(Pelo menos 8 caracteres e certifique-se de que seja forte o suficiente!)", + "\\(Required for QR Code and Download\\)": "(Obrigatório para QR Code e Download)", + "\\(Required\\)": "(Obrigatório)", + "if": "se", + "is": "é", + "larger than": "maior que", + "or": "ou", + "or click the button below to download the ": "ou clique no botão abaixo para baixar o ", + "then": "então", + "to add your server": "para adicionar seu servidor" +} \ No newline at end of file diff --git a/src/static/locales/ru-RU.json b/src/static/locales/ru-RU.json new file mode 100644 index 0000000..cab481a --- /dev/null +++ b/src/static/locales/ru-RU.json @@ -0,0 +1,369 @@ +{ + " file": " файл", + "(.*) Available IP Address": "$1 Доступный IP-адрес", + "(.*) Minutes": "$1 мин.", + "(.*) Seconds": "$1 сек.", + "(.*) Used": "", + "(.*) is off": "$1 выключен", + "(.*) is on": "$1 включен", + "([0-9].*) Backups?": "$1 Архивы?", + "([0-9].*) Peers?": "$1 Клиенты?", + "([0-9]{1,}) Interfaces": "", + "([0-9]{1,}) Partitions": "", + "(v[0-9.]{1,}) is now available for update!": "$1 доступна для обновления!", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1.Пожалуйста, отсканируйте следующий QR-код, чтобы сгенерировать TOTP с выбранным вами средством аутентификации", + "2\\. Enter the TOTP generated by your authenticator to verify": "2. Для подтверждения Введите TOTP, сгенерированный вашим аутентификатором", + "API Key": "Ключ API", + "API Key created": "Ключ API создан", + "API Key deleted": "Ключ API удален", + "API Keys": "Ключи API", + "API Keys function is failed to disable": "Не удалось отключить функцию API-ключей", + "API Keys function is failed to enable": "Не удалось включить функцию API-ключей", + "API Keys function is successfully disabled": "Функция API-ключей успешно отключена", + "API Keys function is successfully enabled": "Функция API-ключей успешно включена", + "Access Remote Server": "Доступ к удаленному серверу", + "Access Restricted": "Заблокирован", + "Account Settings": "Настройки учетной записи", + "Active Jobs": "Активные задачи", + "Add": "Добавить", + "Add Peers": "Добавить клиентов", + "Adding\\.\\.\\.": "Добавление...", + "Address": "Адрес", + "Advanced Options": "", + "All Active Jobs": "Все активные задачи", + "All connected peers will get disconnected": "Все подключенные клиенты будут отключены", + "Allow Access": "Разблокировать", + "Allow access successfully": "Доступ разрешён", + "Allowed IP already taken by another peer": "IP-адрес, уже занятый другим узлом", + "Allowed IPs": "Внутренний IP-адрес", + "Allowed IPs Validation": "", + "Allowed IPs already taken by another peer": "Разрешенные IP-адреса, уже занятые клиентом", + "Allowed IPs is invalid": "Разрешенные IP-адреса недопустимы", + "Allowing Access\\.\\.\\.": "Разрешаем доступ...", + "AmneziaWG Peer Setting": "", + "Appearance": "Интерфейс", + "Are you sure to delete": "Вы уверены, что нужно удалить", + "Are you sure to delete this API key\\?": "Вы уверены, что хотите удалить этот API-ключ?", + "Are you sure to delete this backup\\?": "Вы уверены, что нужно удалить этот архив?", + "Are you sure to delete this configuration\\?": "Вы уверены, что нужно удалить эту конфигурацию?", + "Are you sure to delete this peer\\?": "Вы уверены, что нужно удалить?", + "Are you sure to restore this backup\\?": "", + "Average / Min / Max Round Trip Time": "Среднее / Мин. / Макс. Время в пути", + "Average RTT \\(ms\\)": "", + "Backup": "Архив", + "Backup & Restore": "Архивировать / Восстановить", + "Backup Date": "Дата архива", + "Backup not selected": "Архив не выбран", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Оба файла конфигурации (.conf) и таблица базы данных этой конфигурации, будут удалены", + "Bulk Add": "Массовое добавление", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "При массовом добавлении, имя каждого клиента будет сгенерировано автоматически, а разрешенный IP-адрес будет присвоен по порядку следования", + "CPU": "", + "CPU Usage": "", + "Cancel": "Закрыть", + "Checking backups...": "Проверка архивов...", + "Checking for update...": "Проверка наличия обновлений...", + "Clear Selection": "Очистит выбор", + "Click": "Клик", + "Click to change a backup": "Нажмите, чтобы изменить архив", + "Complete": "Завершить", + "Configuration": "Конфигурация", + "Configuration File": "", + "Configuration Name": "Имя конфигурации", + "Configuration Settings": "Параметры конфигурации", + "Configuration deleted": "Конфигурация удалена", + "Configuration does not exist": "Конфигурация не существует", + "Configuration name already exist\\.": "Имя конфигурации уже существует. ", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "Название конфигурации может содержать только 15 строчных/прописных букв, цифры, подчеркивание, знак равенства, знак плюс, точку и дефис ", + "Configuration name is invalid. Possible reasons:": "Неверное имя конфигурации. Возможные причины:", + "Configuration restored": "Конфигурация восстановлена", + "Configuration saved": "Конфигурация сохранена", + "Configurations": "Конфигурации", + "Configurations Directory": "Каталог конфигураций", + "Confirm \\& edit restore information": "Подтвердите и отредактируйте информацию о восстановлении", + "Confirm password": "Подтвердите пароль", + "Connected Peers": "Онлайн", + "Contain": "Содержит", + "Count": "Число прыжков", + "Create": "Создать", + "Create API Key": "Создать ключ API", + "Create Backup": "Содать архив", + "Create an account": "Создать учетную запись", + "Creating\\.\\.\\.": "Создание...", + "Current Password": "Текущий пароль", + "Current Version:": "Текущая версия: ", + "Currently the peer is not sharing": "Общий доступ к профилю конфигурации выключен", + "DNS": "Сервер DNS", + "DNS format is incorrect": "Неправильный формат DNS", + "Danger Zone": "", + "Dark": "Тёмная", + "Dashboard IP Address \\& Listen Port": "IP-адрес и порт панели мониторинга", + "Dashboard Language": "Язык панели мониторинга", + "Dashboard Theme": "Тема интерфейса", + "Dashboard language update failed": "Не удалось обновить язык панели мониторинга", + "Database File": "Файл базы данных", + "Date": "дата", + "Delete": "Удалить", + "Delete Configuration": "Удалить конфигурацию", + "Delete Peer": "Удалить", + "Delete current configuration's database table and \\.conf file": "", + "Deleted ([0-9]{1,}) peer\\(s\\)": "Удалено $1 клиентов ", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Успешно удалено $1 клиентов. Не удалось удалить $2 ", + "Deleting...": "Удаление...", + "Disabled": "Выключен", + "Discord Server": "", + "Display": "Вид", + "Display As": "", + "Don't think that's a good idea": "Не думаю, что это хорошая идея", + "Done": "Выполнено", + "Download": "", + "Download All": "Загрузить все", + "Download Finished": "Загрузка завершена", + "Download \\& QR Code is not available due to no private key set for this peer": "Загрузка и QR-код недоступны из-за отсутствия закрытого ключа", + "Downloading": "Загрузка", + "Duplicate current configuration's database table and \\.conf file with the new name": "", + "Edit": "Правка", + "Edit Raw Configuration File": "", + "Email Account": "", + "Email Body Template": "", + "Email sent successfully!": "", + "Enabled": "Включен", + "Encryption": "", + "Endpoint Allowed IPs": "Разрешенные IP-адреса", + "Endpoint Allowed IPs format is incorrect": "Неверный формат IP-адреса для конечной точки", + "Enter IP Address / Hostname": "Введите IP-адрес / Имя хоста", + "Enter IP Address/CIDR": "Введите IP-адрес/CIDR", + "Enter a password": "Введите пароль", + "Enter an username you like": "Введите имя пользователя", + "Expire At": "Истекает в", + "FROM ": "ОТ ", + "Failed": "Отказано", + "Failed to add peers in bulk": "Не удалось массово добавить клиентов", + "Failed to allow access of peer (.*)": "Не удалось разрешить доступ этому клиенту:$1", + "Failed to check available update": "Не удалось проверить обновление", + "Failed to save configuration through WireGuard": "Не удалось сохранить конфигурацию с помощью WireGuard", + "File": "Файл", + "Filter": "Фильтр", + "Generating key pairs by bulk failed": "Не удалось сгенерировать пары ключей массовым способом", + "Geolocation": "Геолокация", + "Grid": "", + "Help": "Помощь", + "Home": "Главная", + "Hop": "", + "How many peers you want to add\\?": "Сколько клиентов вы хотите добавить?", + "I don't need MFA": "Мне не нужен MFA", + "IP Address": "IP-адрес", + "IP Address / Hostname": "IP-адрес / Имя хоста", + "IP Address/CIDR": "IP-адреса/CIDR", + "IP Address/CIDR is invalid": "IP-адрес/CIDR недействителен", + "If you're sure, please type in the configuration name below and click Delete": "Если вы уверены, пожалуйста, введите название конфигурации ниже и нажмите Удалить", + "Include configuration file as an attachment": "", + "Invalid Port": "Неверный порт", + "Is Alive": "Живой", + "Job": "Задача", + "Job ID": "ID задачи", + "Jobs Logs": "Журнал задач", + "Key": "Ключ", + "Language": "Язык", + "Light": "Светлая", + "Link expire date failed to update. Reason: (.*)": "Не удалось обновить дату действия ссылки. Причина: $1", + "Link expire date updated": "Обновлена дата действия ссылки", + "List": "", + "Listen Port": "Порт", + "Live Preview": "", + "Log ID": "ID журнала", + "Logs": "Журнал", + "MTU": "MTU", + "MTU format is not correct": "Неправильный формат MTU", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "Для внесения изменений в IP-адрес и порт прослушивания необходим ручной перезапуск WGDashboard", + "Max RTT \\(ms\\)": "", + "Memory": "", + "Memory Usage": "", + "Message": "Сообщение", + "Min RTT \\(ms\\)": "", + "Multi-Factor Authentication \\(MFA\\)": "Многофакторная аутентификация (MFA)", + "Name": "Имя", + "Network": "", + "Never Expire": "Бессрочный", + "New Configuration": "Новая конфигурация", + "New Password": "Новый пароль", + "Next": "Далее", + "Nice to meet you!": "Приятно познакомиться с вами!", + "No": "Нет", + "No Encryption": "", + "No WGDashboard API Key": "Нет ключа API для WGDashboard", + "No active job at the moment\\.": "На данный момент нет активных задач.", + "No available IP containing": "Нет доступного IP-адреса", + "No backup yet, click the button above to create backup\\.": "Архивов не обнаружено, нажмите на кнопку выше, чтобы создать", + "No more available IP can assign": "Нет доступных IP-адресов", + "OTP from your authenticator": "OTP вашего аутентификатора", + "Off": "Выкл", + "Official Documentation": "", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "Срок действия этой ссылки истек или она недействительна.", + "On": "Вкл", + "Once you deleted this configuration\\:": "Как только вы удалите эту конфигурацию: ", + "Open File": "", + "Optional Settings": "Дополнительно", + "Or you can click the link below:": "Или вы можете перейти по ссылке ниже:", + "Other Settings": "Другие настройки", + "Password": "Пароль", + "Peer": "Клиент", + "Peer Configuration File": "", + "Peer Default Settings": "Настройки клиента по умолчанию", + "Peer Jobs": "Задачи клиента", + "Peer Remote Endpoint": "Адрес для подключения клиента", + "Peer Settings": "Настройки", + "Peer created successfully": "Клиент успешно создан", + "Peer data usage reset successfully": "Успешный сброс статистики клиента", + "Peer does not exist": "Клиент не существует", + "Peer download started": "Старт загрузки клиента", + "Peer job deleted": "Задача для клиента удалена", + "Peer job saved": "Задача для клиента сохранена", + "Peer saved": "Клиент сохранен", + "Peers": "Клиентов", + "Peers Data Usage": "Использовано клиентами", + "Peers Default Settings": "Настройки клиента по умолчанию", + "Peers Settings": "Настройки клиента", + "Persistent Keepalive": "Поддержание активности", + "Persistent Keepalive format is not correct": "Неправильный формат значения поддержания активности", + "Pick Available IP": "Выберите доступный IP-адрес", + "Pinging...": "Пинг...", + "Please fill in all required box": "Пожалуйста, заполните все обязательные поля", + "Please fill in the following fields to finish setup": "Пожалуйста, заполните следующие поля, чтобы завершить настройку", + "Please provide a valid configuration name": "Пожалуйста, укажите действительное имя конфигурации", + "Please provide ipAddress": "Пожалуйста, укажите IP-адреса", + "Please provide ipAddress and count": "Пожалуйста, укажите IP-адреса и количество", + "Please specify amount of peers you want to add": "Пожалуйста, укажите количество клиентов, которых вы хотите добавить", + "Please specify an IP Address (v4/v6)": "Пожалуйста, укажите IP-адрес (v4/v6) ", + "Please specify job": "Пожалуйста, укажите задачу", + "Please specify one or more peers": "Пожалуйста, укажите одного или несколькихх клиентов", + "Please specify peer and configuration": "Пожалуйста, укажите клиента и конфигурацию", + "Port": "", + "Pre-Shared Key": "Предварительный общий ключ", + "Private Key": "Приватный ключ", + "Private key does not match with the public key": "Закрытый ключ не совпадает с открытым ключом", + "Processes": "", + "Protocol": "", + "Public Key": "Публичный ключ", + "QR Code": "QR код", + "Ready": "", + "Real Time Received Data Usage": "Входящий трафик", + "Real Time Sent Data Usage": "Исходящий трафик", + "Received": "Получено", + "Refresh": "Обновить", + "Refresh Interval": "Интервал обновления", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "Не забудьте удалить символ / в конце вашего пути - например /etc/wireguard", + "Repeat New Password": "Повторите новый пароль", + "Reset": "Сброс", + "Reset Data Usage": "Сброс статистики", + "Restore": "Восстановить", + "Restore Configuration": "Восстановить конфигурацию", + "Restoring": "Восстановление...", + "Restrict Access": "Заблокировать", + "Restrict Peer": "заблокировать", + "Restricted": "Прекращен", + "Restricted ([0-9]{1,}) peer\\(s\\)": "Заблокировано $1 клиентов ", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Успешно аблокировано $1 клиентов. Не удалось заблокировать $2 ", + "Restricted Peers?": "Блокированные клиенты", + "Restricting\\.\\.\\.": "Блокируем...", + "Revert": "Возврат", + "Save": "Сохранить", + "Save Configuration": "Сохранить конфигурацию", + "Save Peer": "Сохранить клиента", + "Saving\\.\\.\\.": "Сохранение...", + "Scan QR Code with the WireGuard App to add peer": "Чтобы добавить профиль, отсканируйте QR-код с помощью приложения WireGuard", + "Schedule Jobs": "Планировщик", + "Search": "", + "Search Peers\\.\\.\\.": "Поиск клиентов...", + "Select All": "Выбрать всё", + "Select Peers": "Выбрать клиентов", + "Select a backup you want to restore": "Выберите резервную копию для восстановления", + "Selected Backup": "Выбранный архив", + "Send": "", + "Send From": "", + "Send Test Email": "", + "Sending\\.\\.\\.": "", + "Sent": "Отправлено", + "Sent / Received / Lost Package": "Отправлено / Получено / Потеряно", + "Server": "Сервер", + "Server List": "Список серверов", + "Settings": "Настройки", + "Setup": "Установка", + "Share Peer": "Поделиться профилем", + "Share link failed to create. Reason: (.*)": "Не удалось создать ссылку для общего доступа. Причина: $1", + "Share with Email": "", + "Sharing\\.\\.\\.": "Делимся...", + "Sign In": "Войти", + "Sign Out": "Выйти", + "Sign in session ended, please sign in again": "Сеанс входа в систему завершен, пожалуйста, войдите в систему еще раз", + "Signing In\\.\\.\\.": "Вход в систему...", + "Sorry, your username or password is incorrect.": "К сожалению, ваше имя пользователя или пароль неверны.", + "Sort By": "Сортировать по", + "Start Sharing": "Поделиться", + "Status": "Статус", + "Step (.*)": "Шаг $1", + "Stop Sharing": "Прекратить", + "Stop Sharing\\.\\.\\.": "Прекращаем делиться...", + "Storage": "", + "Success": "Успешно", + "Swap Memory": "", + "Swap Memory Usage": "", + "System Status": "", + "TOTP verified!": "TOTP подтвержден!", + "Table": "", + "The maximum number of peers can add is (.*)": "Максимальное количество клиентов, которые можно добавить, составляет $1", + "Theme": "Тема", + "This IP is not available: (.*)": "Этот IP-адрес недоступен: $1", + "This configuration have ([0-9].*) backups": "Эта конфигурация имеет $1", + "This configuration have no backup": "Эта конфигурация не имеет архивов", + "This peer already exist": "Этот клиент уже существует", + "This peer does not have any job yet\\.": "У этого клиента нет заданий", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Это будет изменено глобально и будет применяться ко всем QR-кодам и конфигурационным файлам клиентов.", + "To update this configuration's name, WGDashboard will execute the following operations:": "", + "Toggle When Start Up": "Автостарт", + "Tools": "Инструменты", + "Total": "Общий", + "Total Received": "Получено", + "Total Sent": "Отправлено", + "Total Usage": "Общий", + "Turning Off\\.\\.\\.": "Выключение...", + "Turning On\\.\\.\\.": "Включение...", + "Unsaved Job": "Несохраненная задача", + "Untitled Peer": "", + "Update Name": "", + "Update Password": "Обновить пароль", + "Update peer failed when saving the configuration": "Ошибка обновления клиента при сохранении конфигурации", + "Update peer failed when updating Allowed IPs": "Не удалось обновить клиента при обновлении разрешенных IP-адресов", + "Update peer failed when updating Pre-Shared Key": "Не удалось обновить клиента при обновлении Pre-Shared ключа", + "Updated at": "Обновлено в", + "Use your own Private and Public Key": "Используйте свой закрытый и открытый ключ", + "Username": "Имя", + "WGDashboard API Keys function is disabled": "Функция API-ключей WGDashboard отключена", + "WGDashboard Account Settings": "Настройки учетной записи WGDashboard", + "WGDashboard Settings": "Настройки панели", + "WGDashboard language update failed": "Не удалось обновить язык WGDashboard", + "Welcome to": "Добро пожаловать", + "What\\'s the body\\?": "", + "What\\'s the subject\\?": "", + "When should this API Key expire\\?": "Когда должен истечь срок действия этого API-ключа?", + "Who are you sending to\\?": "", + "WireGuard Configuration Settings": "Параметры WireGuard", + "WireGuard Configurations": "Конфигурации", + "WireGuard Configurations Settings": "Параметры конфигурации WireGuard", + "WireGuard configuration path saved": "Путь к конфигурации WireGuard сохранен", + "Yes": "Да", + "You can add up to (.*) peers": "Вы можете добавить до $1 клиентов", + "You can visit our: ": "", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "У вас еще нет настроек WireGuard. Пожалуйста, проверьте папку конфигурации или измените ее в настройках. По умолчанию используется папка /etc/wireguard.", + "You don't have any configuration to restore": "У вас нет настроек для восстановления", + "You're on the latest version": "Вы используете последнюю версию", + "\\(At least 8 characters and make sure is strong enough!\\)": "(Убедитесь что ваш пароль достаточно сложный, для этого наберите минимум 8 символов!)", + "\\(Required for QR Code and Download\\)": "(Требуется для получения QR-кода и загрузки)", + "\\(Required\\)": "(Обязательный)", + "if": "Если", + "is": "является", + "larger than": "больше", + "or": "или", + "or click the button below to download the ": "Так же, вы можете скачать ", + "then": "тогда", + "to add your server": "чтобы добавить свой сервер" +} \ No newline at end of file diff --git a/src/static/locales/supported_locales.json b/src/static/locales/supported_locales.json new file mode 100644 index 0000000..59cd9a9 --- /dev/null +++ b/src/static/locales/supported_locales.json @@ -0,0 +1,133 @@ +[ + { + "lang_id": "en-US", + "lang_name": "English (United States)", + "lang_name_localized": "English (United States)" + }, + { + "lang_id": "ar-SA", + "lang_name": "Arabic (Saudi Arabia)", + "lang_name_localized": "العربية (السعودية)" + }, + { + "lang_id": "be-BY", + "lang_name": "Belarusian (Belarus)", + "lang_name_localized": "Беларуская (Беларусь)" + }, + { + "lang_id": "bg-BG", + "lang_name": "Bulgarian (Bulgaria)", + "lang_name_localized": "Български (България)" + }, + { + "lang_id": "ca-ES", + "lang_name": "Catalan (Spain)", + "lang_name_localized": "Català (Espanya)" + }, + { + "lang_id": "cs-CZ", + "lang_name": "Czech (Czech Republic)", + "lang_name_localized": "Česky (Česká republika)" + }, + { + "lang_id": "de-DE", + "lang_name": "German (Germany)", + "lang_name_localized": "Deutsch (Deutschland)" + }, + { + "lang_id": "es-ES", + "lang_name": "Spanish (Spain)", + "lang_name_localized": "Español (España)" + }, + { + "lang_id": "fa-IR", + "lang_name": "Persian (Iran)", + "lang_name_localized": "فارسی (ایران)" + }, + { + "lang_id": "fr-CA", + "lang_name": "French (Canada)", + "lang_name_localized": "Français (Canada)" + }, + { + "flag": "🇫🇷", + "lang_id": "fr-FR", + "lang_name": "French (France)", + "lang_name_localized": "Français (France)" + }, + { + "lang_id": "hu-HU", + "lang_name": "Hungarian (Hungary)", + "lang_name_localized": "Magyar (Magyarország)" + }, + { + "lang_id": "id-ID", + "lang_name": "Indonesian (Indonesia)", + "lang_name_localized": "Bahasa Indonesia (Indonesia)" + }, + { + "lang_id": "it-IT", + "lang_name": "Italian (Italy)", + "lang_name_localized": "Italiano (Italia)" + }, + { + "lang_id": "ja-JP", + "lang_name": "Japanese (Japan)", + "lang_name_localized": "日本語 (日本)" + }, + { + "lang_id": "ko-KR", + "lang_name": "Korean (South Korea)", + "lang_name_localized": "한국어 (대한민국)" + }, + { + "lang_id": "nl-NL", + "lang_name": "Dutch (Netherlands)", + "lang_name_localized": "Nederlands (Nederland)" + }, + { + "lang_id": "pl-PL", + "lang_name": "Polish (Poland)", + "lang_name_localized": "Polski (Polska)" + }, + { + "lang_id": "pt-BR", + "lang_name": "Portuguese (Brazil)", + "lang_name_localized": "Português (Brasil)" + }, + { + "lang_id": "ru-RU", + "lang_name": "Russian (Russia)", + "lang_name_localized": "Русский (Россия)" + }, + { + "lang_id": "sv-SE", + "lang_name": "Swedish (Sweden)", + "lang_name_localized": "Svenska (Sverige)" + }, + { + "lang_id": "th-TH", + "lang_name": "Thai (Thailand)", + "lang_name_localized": "ภาษาไทย (ประเทศไทย)" + }, + { + "lang_id": "tr-TR", + "lang_name": "Turkish (Turkey)", + "lang_name_localized": "Türkçe (Türkiye)" + }, + { + "lang_id": "uk-UA", + "lang_name": "Ukrainian (Ukraine)", + "lang_name_localized": "Українська (Україна)" + }, + { + "lang_id": "zh-CN", + "lang_name": "Chinese (Simplified, China)", + "lang_name_localized": "中文(简体,中国)" + }, + { + "lang_id": "zh-HK", + "lang_name": "Chinese (Traditional, Hong Kong)", + "lang_name_localized": "中文(繁體,香港)" + } +] \ No newline at end of file diff --git a/src/static/locales/sv-SE.json b/src/static/locales/sv-SE.json new file mode 100644 index 0000000..df90cff --- /dev/null +++ b/src/static/locales/sv-SE.json @@ -0,0 +1,369 @@ +{ + " file": " fil", + "(.*) Available IP Address": "$1 tillgängliga IP-adresser", + "(.*) Minutes": "$1 minuter", + "(.*) Seconds": "$1 sekunder", + "(.*) Used": "", + "(.*) is off": "$1 är avstängd", + "(.*) is on": "$1 är aktiverad", + "([0-9].*) Backups?": "$1 säkerhetskopior?", + "([0-9].*) Peers?": "$1 Peers?", + "([0-9]{1,}) Interfaces": "", + "([0-9]{1,}) Partitions": "", + "(v[0-9.]{1,}) is now available for update!": "Version $1 är nu tillgänglig för uppdatering!", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Vänligen skanna följande QR-kod för att generera TOTP med din valda autentiserare", + "2\\. Enter the TOTP generated by your authenticator to verify": "2. Ange den TOTP som din autentiserare genererade för att verifiera", + "API Key": "API-nyckel", + "API Key created": "API-nyckel skapad", + "API Key deleted": "API-nyckel raderad", + "API Keys": "API-nycklar", + "API Keys function is failed to disable": "API-nyckelfunktion misslyckades med att inaktiveras", + "API Keys function is failed to enable": "API-nyckelfunktion misslyckades med att aktiveras", + "API Keys function is successfully disabled": "API-nyckelfunktion har inaktiverats", + "API Keys function is successfully enabled": "API-nyckelfunktion har aktiverats", + "Access Remote Server": "Åtkomst till fjärrserver", + "Access Restricted": "Begränsad åtkomst", + "Account Settings": "Kontoinställningar", + "Active Jobs": "Aktiva jobb", + "Add": "Lägg till", + "Add Peers": "Lägg till Peers", + "Adding\\.\\.\\.": "Lägger till...", + "Address": "Adress", + "Advanced Options": "", + "All Active Jobs": "Alla aktiva jobb", + "All connected peers will get disconnected": "Alla anslutna peers kommer att kopplas bort", + "Allow Access": "Tillåt åtkomst", + "Allow access successfully": "Åtkomst beviljad framgångsrikt", + "Allowed IP already taken by another peer": "Tillåten IP-adress är redan upptagen av en annan peer", + "Allowed IPs": "Tillåtna IP-adresser", + "Allowed IPs Validation": "", + "Allowed IPs already taken by another peer": "Tillåtna IP-adresser är redan upptagna av en annan peer", + "Allowed IPs is invalid": "Tillåtna IP-adresser är ogiltiga", + "Allowing Access\\.\\.\\.": "Tillåter åtkomst...", + "AmneziaWG Peer Setting": "", + "Appearance": "Utseende", + "Are you sure to delete": "Är du säker på att du vill radera", + "Are you sure to delete this API key\\?": "Är du säker på att du vill radera denna API-nyckel?", + "Are you sure to delete this backup\\?": "Är du säker på att du vill radera denna säkerhetskopia?", + "Are you sure to delete this configuration\\?": "Är du säker på att du vill radera denna konfiguration?", + "Are you sure to delete this peer\\?": "Är du säker på att du vill radera denna peer?", + "Are you sure to restore this backup\\?": "", + "Average / Min / Max Round Trip Time": "Genomsnitt / Min / Max rundturstid", + "Average RTT \\(ms\\)": "", + "Backup": "Säkerhetskopiering", + "Backup & Restore": "Säkerhetskopiering & Återställning", + "Backup Date": "Säkerhetskopieringsdatum", + "Backup not selected": "Ingen säkerhetskopia vald", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Både konfigurationsfilen (.conf) och databastabellen relaterad till denna konfiguration kommer att raderas", + "Bulk Add": "Lägg till i bulk", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Vid bulk-läggning genereras varje Peer's namn automatiskt och tillåtet IP tilldelas nästa tillgängliga IP.", + "CPU": "", + "CPU Usage": "", + "Cancel": "Avbryt", + "Checking backups...": "Kontrollerar säkerhetskopior...", + "Checking for update...": "Kontrollerar efter uppdateringar...", + "Clear Selection": "Rensa urval", + "Click": "Klicka", + "Click to change a backup": "Klicka för att ändra säkerhetskopia", + "Complete": "Komplett", + "Configuration": "Konfiguration", + "Configuration File": "", + "Configuration Name": "Konfigurationsnamn", + "Configuration Settings": "Konfigurationsinställningar", + "Configuration deleted": "Konfiguration raderad", + "Configuration does not exist": "Konfigurationen finns inte", + "Configuration name already exist\\.": "Konfigurationsnamnet finns redan.", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "Konfigurationsnamnet får endast innehålla 15 små/stora bokstäver, siffror, understreck, likhetstecken, plustecken, punkt och bindestreck.", + "Configuration name is invalid. Possible reasons:": "Konfigurationsnamn är ogiltigt. Möjliga orsaker:", + "Configuration restored": "Konfiguration återställd", + "Configuration saved": "Konfiguration sparad", + "Configurations": "Konfigurationer", + "Configurations Directory": "Konfigurationskatalog", + "Confirm \\& edit restore information": "Bekräfta och redigera återställningsinformation", + "Confirm password": "Bekräfta lösenord", + "Connected Peers": "Anslutna Peers", + "Contain": "Innehåller", + "Count": "Antal", + "Create": "Skapa", + "Create API Key": "Skapa API-nyckel", + "Create Backup": "Skapa säkerhetskopia", + "Create an account": "Skapa ett konto", + "Creating\\.\\.\\.": "Skapar...", + "Current Password": "Nuvarande lösenord", + "Current Version:": "Nuvarande version:", + "Currently the peer is not sharing": "Peer delar inte för tillfället", + "DNS": "DNS", + "DNS format is incorrect": "DNS-formatet är felaktigt", + "Danger Zone": "", + "Dark": "Mörkt", + "Dashboard IP Address \\& Listen Port": "Panelens IP-adress & Lyssningsport", + "Dashboard Language": "Panelens språk", + "Dashboard Theme": "Paneltema", + "Dashboard language update failed": "Uppdatering av panelens språk misslyckades", + "Database File": "Databasfil", + "Date": "Datum", + "Delete": "Radera", + "Delete Configuration": "Radera konfiguration", + "Delete Peer": "Radera Peer", + "Delete current configuration's database table and \\.conf file": "", + "Deleted ([0-9]{1,}) peer\\(s\\)": "Raderade $1 peer(s)", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Raderade framgångsrikt $1 peer(s), misslyckades att radera $2 peer(s)", + "Deleting...": "Raderar...", + "Disabled": "Inaktiverad", + "Discord Server": "", + "Display": "Visa", + "Display As": "", + "Don't think that's a good idea": "Det är nog inte en bra idé", + "Done": "Klar", + "Download": "", + "Download All": "Ladda ner alla", + "Download Finished": "Nedladdning slutförd", + "Download \\& QR Code is not available due to no private key set for this peer": "Nedladdning & QR-kod är inte tillgängligt eftersom ingen privat nyckel är inställd för denna Peer", + "Downloading": "Hämtar", + "Duplicate current configuration's database table and \\.conf file with the new name": "", + "Edit": "Redigera", + "Edit Raw Configuration File": "", + "Email Account": "", + "Email Body Template": "", + "Email sent successfully!": "", + "Enabled": "Aktiverad", + "Encryption": "", + "Endpoint Allowed IPs": "Tillåtna IP-adresser för slutpunkt", + "Endpoint Allowed IPs format is incorrect": "Endpoint tillåtna IP-adresser är i fel format", + "Enter IP Address / Hostname": "Ange IP-adress / Värdnamn", + "Enter IP Address/CIDR": "Ange IP-adress/CIDR", + "Enter a password": "Ange ett lösenord", + "Enter an username you like": "Skriv in ett användarnamn du gillar", + "Expire At": "Utgår", + "FROM ": "FRÅN ", + "Failed": "Misslyckades", + "Failed to add peers in bulk": "Misslyckades med att lägga till peers i bulk", + "Failed to allow access of peer (.*)": "Misslyckades att ge access till peer (.*)", + "Failed to check available update": "Misslyckades med att kontrollera tillgänglig uppdatering", + "Failed to save configuration through WireGuard": "Misslyckades att spara konfiguration genom WireGuard", + "File": "Fil", + "Filter": "Filter", + "Generating key pairs by bulk failed": "Generering av nyckelpar i bulk misslyckades", + "Geolocation": "Geolokalisering", + "Grid": "", + "Help": "Hjälp", + "Home": "Hem", + "Hop": "", + "How many peers you want to add\\?": "Hur många Peers vill du lägga till?", + "I don't need MFA": "Jag behöver inte MFA", + "IP Address": "IP-adress", + "IP Address / Hostname": "IP-adress / Värdnamn", + "IP Address/CIDR": "IP-adress/CIDR", + "IP Address/CIDR is invalid": "IP-adress/CIDR är ogiltig", + "If you're sure, please type in the configuration name below and click Delete": "Om du är säker, skriv in konfigurationsnamnet nedan och klicka på Radera", + "Include configuration file as an attachment": "", + "Invalid Port": "Ogiltig port", + "Is Alive": "Är aktiv", + "Job": "Jobb", + "Job ID": "Jobb-ID", + "Jobs Logs": "Jobbloggar", + "Key": "Nyckel", + "Language": "Språk", + "Light": "Ljust", + "Link expire date failed to update. Reason: (.*)": "Länkens utgångsdatum misslyckades med att uppdateras. Orsak: $1", + "Link expire date updated": "Länkens utgångsdatum uppdaterat", + "List": "", + "Listen Port": "Lyssnarport", + "Live Preview": "", + "Log ID": "Logg-ID", + "Logs": "Loggar", + "MTU": "MTU", + "MTU format is not correct": "MTU-formatet är inte korrekt", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "Manuell omstart av WGDashboard krävs för att tillämpa ändringar på IP-adress och lyssningsport", + "Max RTT \\(ms\\)": "", + "Memory": "", + "Memory Usage": "", + "Message": "Meddelande", + "Min RTT \\(ms\\)": "", + "Multi-Factor Authentication \\(MFA\\)": "Flerfaktorsautentisering (MFA)", + "Name": "Namn", + "Network": "", + "Never Expire": "Löper aldrig ut", + "New Configuration": "Ny konfiguration", + "New Password": "Nytt lösenord", + "Next": "Nästa", + "Nice to meet you!": "Trevligt att träffas!", + "No": "Nej", + "No Encryption": "", + "No WGDashboard API Key": "Ingen WGDashboard API-nyckel", + "No active job at the moment\\.": "Inga aktiva jobb just nu.", + "No available IP containing": "Ingen tillgänglig IP som innehåller ", + "No backup yet, click the button above to create backup\\.": "Ingen säkerhetskopia än, klicka på knappen ovan för att skapa en.", + "No more available IP can assign": "Det finns inga fler tillgängliga IP-adresser att tilldela", + "OTP from your authenticator": "Engångslösenord från din autentiserare", + "Off": "Av", + "Official Documentation": "", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "Åh nej... Den här länken är antingen utgången eller ogiltig.", + "On": "På", + "Once you deleted this configuration\\:": "När du raderat denna konfiguration:", + "Open File": "", + "Optional Settings": "Valfria inställningar", + "Or you can click the link below:": "Eller så kan du klicka på länken nedan:", + "Other Settings": "Övriga inställningar", + "Password": "Lösenord", + "Peer": "Peer", + "Peer Configuration File": "", + "Peer Default Settings": "Peer-standardinställningar", + "Peer Jobs": "Peer-jobb", + "Peer Remote Endpoint": "Peer fjärrslutpunkt", + "Peer Settings": "Peer-inställningar", + "Peer created successfully": "Peer skapad framgångsrikt", + "Peer data usage reset successfully": "Peer dataanvändning återställd framgångsrikt", + "Peer does not exist": "Peer finns inte", + "Peer download started": "Peer nedladdning påbörjad", + "Peer job deleted": "Peer-jobb raderad", + "Peer job saved": "Peer-jobb sparad", + "Peer saved": "Peer sparad", + "Peers": "Peers", + "Peers Data Usage": "Dataanvändning för Peers", + "Peers Default Settings": "Standardinställningar för Peers", + "Peers Settings": "Peer-inställningar", + "Persistent Keepalive": "Persistent Keepalive", + "Persistent Keepalive format is not correct": "Formatet för Persistent Keepalive är inte korrekt", + "Pick Available IP": "Välj tillgänglig IP", + "Pinging...": "Pingar...", + "Please fill in all required box": "Vänligen fyll i alla obligatoriska fält", + "Please fill in the following fields to finish setup": "Fyll i följande fält för att slutföra installationen", + "Please provide a valid configuration name": "Vänligen ange ett giltigt konfigurationsnamn", + "Please provide ipAddress": "Vänligen ange ipAddress", + "Please provide ipAddress and count": "Vänligen ange ipAddress och count", + "Please specify amount of peers you want to add": "Ange antalet peers du vill lägga till", + "Please specify an IP Address (v4/v6)": "Vänligen ange en IP-adress (v4/v6)", + "Please specify job": "Vänligen ange jobb", + "Please specify one or more peers": "Vänligen ange en eller flera peers", + "Please specify peer and configuration": "Vänligen ange peer och konfiguration", + "Port": "", + "Pre-Shared Key": "Fördelad nyckel", + "Private Key": "Privat nyckel", + "Private key does not match with the public key": "Privat nyckel matchar inte med den offentliga nyckeln", + "Processes": "", + "Protocol": "", + "Public Key": "Publik nyckel", + "QR Code": "QR-kod", + "Ready": "", + "Real Time Received Data Usage": "Realtidsanvändning mottagen data", + "Real Time Sent Data Usage": "Realtidsanvändning skickad data", + "Received": "Mottaget", + "Refresh": "Uppdatera", + "Refresh Interval": "Uppdateringsintervall", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "Kom ihåg att ta bort / i slutet av sökvägen, t.ex. /etc/wireguard", + "Repeat New Password": "Upprepa nytt lösenord", + "Reset": "Återställ", + "Reset Data Usage": "Återställ dataanvändning", + "Restore": "Återställ", + "Restore Configuration": "Återställ konfiguration", + "Restoring": "Återställer...", + "Restrict Access": "Begränsa åtkomst", + "Restrict Peer": "Begränsa Peer", + "Restricted": "Begränsad", + "Restricted ([0-9]{1,}) peer\\(s\\)": "Begränsade $1 peer(s)", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Begränsade framgångsrikt $1 peer(s), misslyckades att begränsa $2 peer(s)", + "Restricted Peers?": "Begränsade peers?", + "Restricting\\.\\.\\.": "Begränsar åtkomst...", + "Revert": "Återställ", + "Save": "Spara", + "Save Configuration": "Spara konfiguration", + "Save Peer": "Spara Peer", + "Saving\\.\\.\\.": "Sparar...", + "Scan QR Code with the WireGuard App to add peer": "Skanna QR-koden med WireGuard-appen för att lägga till peer", + "Schedule Jobs": "Schemalägg jobb", + "Search": "", + "Search Peers\\.\\.\\.": "Sök Peers...", + "Select All": "Välj alla", + "Select Peers": "Välj peers", + "Select a backup you want to restore": "Välj en säkerhetskopia du vill återställa", + "Selected Backup": "Vald säkerhetskopia", + "Send": "", + "Send From": "", + "Send Test Email": "", + "Sending\\.\\.\\.": "", + "Sent": "Skickat", + "Sent / Received / Lost Package": "Skickade / Mottagna / Förlorade paket", + "Server": "Server", + "Server List": "Serverlista", + "Settings": "Inställningar", + "Setup": "Installera", + "Share Peer": "Dela Peer", + "Share link failed to create. Reason: (.*)": "Delningslänk skapades inte. Orsak: $1", + "Share with Email": "", + "Sharing\\.\\.\\.": "Delar...", + "Sign In": "Logga in", + "Sign Out": "Logga ut", + "Sign in session ended, please sign in again": "Inloggningen har gått ut, vänligen logga in igen", + "Signing In\\.\\.\\.": "Loggar in...", + "Sorry, your username or password is incorrect.": "Tyvärr, ditt användarnamn eller lösenord är fel.", + "Sort By": "Sortera efter", + "Start Sharing": "Starta delning", + "Status": "Status", + "Step (.*)": "Steg $1", + "Stop Sharing": "Stoppa delning", + "Stop Sharing\\.\\.\\.": "Stoppar delning...", + "Storage": "", + "Success": "Lyckades", + "Swap Memory": "", + "Swap Memory Usage": "", + "System Status": "", + "TOTP verified!": "TOTP verifierad!", + "Table": "", + "The maximum number of peers can add is (.*)": "Det maximala antalet peers som kan läggas till är $1", + "Theme": "Tema", + "This IP is not available: (.*)": "Den här IP-adressen är inte tillgänglig: $1", + "This configuration have ([0-9].*) backups": "Denna konfiguration har $1 säkerhetskopior", + "This configuration have no backup": "Denna konfiguration har ingen säkerhetskopia", + "This peer already exist": "Den här peeren finns redan", + "This peer does not have any job yet\\.": "Denna Peer har inga jobb ännu.", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Detta kommer att ändras globalt och tillämpas på alla Peers QR-koder och konfigurationsfiler.", + "To update this configuration's name, WGDashboard will execute the following operations:": "", + "Toggle When Start Up": "Växla vid start", + "Tools": "Verktyg", + "Total": "Totalt", + "Total Received": "Totalt mottaget", + "Total Sent": "Totalt skickat", + "Total Usage": "Total användning", + "Turning Off\\.\\.\\.": "Inaktiverar...", + "Turning On\\.\\.\\.": "Aktiverar...", + "Unsaved Job": "Osparat jobb", + "Untitled Peer": "", + "Update Name": "", + "Update Password": "Uppdatera lösenord", + "Update peer failed when saving the configuration": "Uppdatering av peer misslyckades vid sparande av konfigurationen", + "Update peer failed when updating Allowed IPs": "Uppdatering av peer misslyckades vid uppdatering av tillåtna IP-adresser", + "Update peer failed when updating Pre-Shared Key": "Uppdatering av peer misslyckades vid uppdatering av Pre-Shared Key", + "Updated at": "Uppdaterad", + "Use your own Private and Public Key": "Använd din egen privata och publika nyckel", + "Username": "Användarnamn", + "WGDashboard API Keys function is disabled": "WGDashboard API-nyckelfunktion är inaktiverad", + "WGDashboard Account Settings": "WGDashboard-kontoinställningar", + "WGDashboard Settings": "WGDashboard inställningar", + "WGDashboard language update failed": "Uppdatering av WGDashboard språk misslyckades", + "Welcome to": "Välkommen till", + "What\\'s the body\\?": "", + "What\\'s the subject\\?": "", + "When should this API Key expire\\?": "När ska denna API-nyckel löpa ut?", + "Who are you sending to\\?": "", + "WireGuard Configuration Settings": "WireGuard konfigurationsinställningar", + "WireGuard Configurations": "WireGuard-konfigurationer", + "WireGuard Configurations Settings": "Inställningar för WireGuard-konfigurationer", + "WireGuard configuration path saved": "WireGuard-konfigurationsväg sparad", + "Yes": "Ja", + "You can add up to (.*) peers": "Du kan lägga till upp till $1 Peers", + "You can visit our: ": "", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Du har inga WireGuard-konfigurationer ännu. Kontrollera konfigurationsmappen eller ändra den i Inställningar. Som standard är mappen /etc/wireguard.", + "You don't have any configuration to restore": "Du har ingen konfiguration att återställa", + "You're on the latest version": "Du använder den senaste versionen", + "\\(At least 8 characters and make sure is strong enough!\\)": "(Minst 8 tecken och se till att det är tillräckligt starkt!)", + "\\(Required for QR Code and Download\\)": "(Krävs för QR-kod och nedladdning)", + "\\(Required\\)": "(Krävs)", + "if": "om", + "is": "är", + "larger than": "större än", + "or": "eller", + "or click the button below to download the ": "eller klicka på knappen nedan för att ladda ner ", + "then": "då", + "to add your server": "för att lägga till din server" +} \ No newline at end of file diff --git a/src/static/locales/th-TH.json b/src/static/locales/th-TH.json new file mode 100644 index 0000000..87dd679 --- /dev/null +++ b/src/static/locales/th-TH.json @@ -0,0 +1,369 @@ +{ + " file": "ไฟล์", + "(.*) Available IP Address": "(.*) ที่อยู่ IP ที่ใช้ได้", + "(.*) Minutes": "(.*) นาที", + "(.*) Seconds": "(.*) วินาที", + "(.*) Used": "", + "(.*) is off": "(.*) ปิดอยู่", + "(.*) is on": "(.*) เปิดอยู่", + "([0-9].*) Backups?": "การสำรองข้อมูล ([0-9].*)", + "([0-9].*) Peers?": " Peer ([0-9].*)", + "([0-9]{1,}) Interfaces": "", + "([0-9]{1,}) Partitions": "", + "(v[0-9.]{1,}) is now available for update!": "(v[0-9.]{1,}) พร้อมสำหรับการอัปเดต!", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1\\. โปรดสแกน QR Code ต่อไปนี้เพื่อสร้าง TOTP ด้วยแอปยืนยันตัวตนที่คุณเลือก", + "2\\. Enter the TOTP generated by your authenticator to verify": "2\\. ใส่ TOTP ที่สร้างโดยแอปยืนยันตัวตนของคุณเพื่อยืนยัน", + "API Key": "คีย์ API", + "API Key created": "สร้างคีย์ API เรียบร้อยแล้ว", + "API Key deleted": "ลบคีย์ API เรียบร้อยแล้ว", + "API Keys": "คีย์ API", + "API Keys function is failed to disable": "ล้มเหลวในการปิดใช้งานฟังก์ชั่นคีย์ API", + "API Keys function is failed to enable": "ล้มเหลวในการเปิดใช้งานฟังก์ชั่นคีย์ API", + "API Keys function is successfully disabled": "ปิดใช้งานฟังก์ชั่นคีย์ API เรียบร้อยแล้ว", + "API Keys function is successfully enabled": "เปิดใช้งานฟังก์ชั่นคีย์ API เรียบร้อยแล้ว", + "Access Remote Server": "เข้าถึงเซิร์ฟเวอร์ระยะไกล", + "Access Restricted": "เข้าถึงถูกจำกัด", + "Account Settings": "การตั้งค่าบัญชี", + "Active Jobs": "งานที่กำลังทำ", + "Add": "เพิ่ม", + "Add Peers": "เพิ่ม Peer", + "Adding\\.\\.\\.": "กำลังเพิ่ม\\.\\.\\.", + "Address": "ที่อยู่", + "Advanced Options": "", + "All Active Jobs": "งานที่กำลังทำทั้งหมด", + "All connected peers will get disconnected": " Peer ทั้งหมดที่เชื่อมต่อจะถูกตัดการเชื่อมต่อ", + "Allow Access": "อนุญาตการเข้าถึง", + "Allow access successfully": "อนุญาตการเข้าถึงสำเร็จ", + "Allowed IP already taken by another peer": "การอนุญาต IP ถูกใช้งานโดย Peer คนอื่นแล้ว", + "Allowed IPs": "อนุญาต IP", + "Allowed IPs Validation": "", + "Allowed IPs already taken by another peer": "การอนุญาต IP ถูกใช้งานโดย Peer คนอื่นแล้ว", + "Allowed IPs is invalid": "การอนุญาต IP ไม่ถูกต้อง", + "Allowing Access\\.\\.\\.": "กำลังอนุญาตการเข้าถึง\\.\\.\\.", + "AmneziaWG Peer Setting": "", + "Appearance": "ลักษณะที่ปรากฏ", + "Are you sure to delete": "คุณแน่ใจหรือไม่ที่จะลบ", + "Are you sure to delete this API key\\?": "คุณแน่ใจหรือไม่ที่จะลบคีย์ API นี้\\?", + "Are you sure to delete this backup\\?": "คุณแน่ใจหรือไม่ที่จะลบการสำรองข้อมูลนี้\\?", + "Are you sure to delete this configuration\\?": "คุณแน่ใจหรือไม่ที่จะลบการกำหนดค่านี้\\?", + "Are you sure to delete this peer\\?": "คุณแน่ใจหรือไม่ที่จะลบ Peer นี้\\?", + "Are you sure to restore this backup\\?": "", + "Average / Min / Max Round Trip Time": "เวลาไปกลับเฉลี่ย / ต่ำสุด / สูงสุด", + "Average RTT \\(ms\\)": "", + "Backup": "สำรองข้อมูล", + "Backup & Restore": "สำรองข้อมูล & คืนค่า", + "Backup Date": "วันที่สำรองข้อมูล", + "Backup not selected": "ไม่ได้เลือกการสำรองข้อมูล", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "ทั้งไฟล์การกำหนดค่า \\(\\.conf\\) และตารางฐานข้อมูลที่เกี่ยวข้องกับการกำหนดค่านี้จะถูกลบ", + "Bulk Add": "เพิ่มเป็นกลุ่ม", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "โดยการเพิ่ม Peer เป็นกลุ่ม ชื่อของ Peer แต่ละคนจะถูกสร้างอัตโนมัติ และการอนุญาต IP จะถูกกำหนดให้กับ IP ที่ว่างอยู่ถัดไป", + "CPU": "", + "CPU Usage": "", + "Cancel": "ยกเลิก", + "Checking backups...": "กำลังตรวจสอบการสำรองข้อมูล...", + "Checking for update...": "กำลังตรวจสอบการอัปเดต...", + "Clear Selection": "ล้างการเลือก", + "Click": "คลิก", + "Click to change a backup": "คลิกเพื่อเปลี่ยนการสำรองข้อมูล", + "Complete": "เสร็จสมบูรณ์", + "Configuration": "การกำหนดค่า", + "Configuration File": "", + "Configuration Name": "ชื่อการกำหนดค่า", + "Configuration Settings": "การตั้งค่าการกำหนดค่า", + "Configuration deleted": "การกำหนดค่าถูกลบ", + "Configuration does not exist": "การกำหนดค่าไม่มีอยู่", + "Configuration name already exist\\.": "ชื่อการกำหนดค่ามีอยู่แล้ว", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "ชื่อการกำหนดค่าประกอบด้วยได้เพียง 15 ตัวอักษรตัวพิมพ์เล็ก/ใหญ่ ตัวเลข ขีดล่าง ไม่เท่ากับ บวก จุด และ ขีดกลาง", + "Configuration name is invalid. Possible reasons:": "ชื่อการกำหนดค่าไม่ถูกต้อง เหตุผลที่เป็นไปได้:", + "Configuration restored": "การกำหนดค่าถูกคืนค่า", + "Configuration saved": "การกำหนดค่าถูกบันทึก", + "Configurations": "การกำหนดค่า", + "Configurations Directory": "ไดเร็กทอรีของการกำหนดค่า", + "Confirm \\& edit restore information": "ยืนยัน \\& แก้ไขข้อมูลการคืนค่า", + "Confirm password": "ยืนยันรหัสผ่าน", + "Connected Peers": "Peer ที่เชื่อมต่อ", + "Contain": "มี", + "Count": "นับ", + "Create": "สร้าง", + "Create API Key": "สร้างคีย์ API", + "Create Backup": "สร้างการสำรองข้อมูล", + "Create an account": "สร้างบัญชี", + "Creating\\.\\.\\.": "กำลังสร้าง\\.\\.\\.", + "Current Password": "รหัสผ่านปัจจุบัน", + "Current Version:": "เวอร์ชั่นปัจจุบัน:", + "Currently the peer is not sharing": "ปัจจุบัน Peer ยังไม่ได้แชร์", + "DNS": "DNS", + "DNS format is incorrect": "รูปแบบ DNS ไม่ถูกต้อง", + "Danger Zone": "", + "Dark": "โหมดมืด", + "Dashboard IP Address \\& Listen Port": "ที่อยู่ IP ของแดชบอร์ด & พอร์ตการฟัง", + "Dashboard Language": "ภาษาของแดชบอร์ด", + "Dashboard Theme": "ธีมของแดชบอร์ด", + "Dashboard language update failed": "ล้มเหลวในการอัปเดตภาษาของแดชบอร์ด", + "Database File": "ไฟล์ฐานข้อมูล", + "Date": "วันที่", + "Delete": "ลบ", + "Delete Configuration": "ลบการกำหนดค่า", + "Delete Peer": "ลบ Peer ", + "Delete current configuration's database table and \\.conf file": "", + "Deleted ([0-9]{1,}) peer\\(s\\)": "ลบ Peer ([0-9]{1,}) คน", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "ลบ Peer ([0-9]{1,}) คนสำเร็จ ล้มเหลวในการลบ Peer ([0-9]{1,}) คน", + "Deleting...": "กำลังลบ...", + "Disabled": "ปิดใช้งาน", + "Discord Server": "", + "Display": "แสดง", + "Display As": "", + "Don't think that's a good idea": "ไม่น่าจะเป็นความคิดที่ดี", + "Done": "เสร็จสิ้น", + "Download": "", + "Download All": "ดาวน์โหลดทั้งหมด", + "Download Finished": "ดาวน์โหลดเสร็จสิ้น", + "Download \\& QR Code is not available due to no private key set for this peer": "ดาวน์โหลด & QR Code ไม่สามารถใช้งานได้ เนื่องจากไม่มีการตั้งค่าคีย์ส่วนตัวสำหรับ Peer นี้", + "Downloading": "กำลังดาวน์โหลด", + "Duplicate current configuration's database table and \\.conf file with the new name": "", + "Edit": "แก้ไข", + "Edit Raw Configuration File": "", + "Email Account": "", + "Email Body Template": "", + "Email sent successfully!": "", + "Enabled": "เปิดใช้งาน", + "Encryption": "", + "Endpoint Allowed IPs": "จุดสิ้นสุดที่อนุญาต IP", + "Endpoint Allowed IPs format is incorrect": "รูปแบบการอนุญาต IP ของจุดสิ้นสุดไม่ถูกต้อง", + "Enter IP Address / Hostname": "ใส่ที่อยู่ IP / ชื่อโฮสต์", + "Enter IP Address/CIDR": "ใส่ที่อยู่ IP/CIDR", + "Enter a password": "ใส่รหัสผ่าน", + "Enter an username you like": "ใส่ชื่อผู้ใช้ที่คุณชอบ", + "Expire At": "หมดอายุที่", + "FROM ": "จาก", + "Failed": "ล้มเหลว", + "Failed to add peers in bulk": "ล้มเหลวในการเพิ่ม Peer เป็นกลุ่ม", + "Failed to allow access of peer (.*)": "ล้มเหลวในการอนุญาตการเข้าถึงของ Peer (.*)", + "Failed to check available update": "ล้มเหลวในการตรวจสอบการอัปเดตที่ว่างอยู่", + "Failed to save configuration through WireGuard": "ล้มเหลวในการบันทึกการกำหนดค่าผ่าน WireGuard", + "File": "ไฟล์", + "Filter": "กรอง", + "Generating key pairs by bulk failed": "สร้างคู่คีย์เป็นกลุ่มล้มเหลว", + "Geolocation": "ตำแหน่งทางภูมิศาสตร์", + "Grid": "", + "Help": "ช่วยเหลือ", + "Home": "หน้าหลัก", + "Hop": "", + "How many peers you want to add\\?": "คุณต้องการเพิ่ม Peer กี่คน?", + "I don't need MFA": "ไม่ต้องการ MFA", + "IP Address": "ที่อยู่ IP", + "IP Address / Hostname": "ที่อยู่ IP / ชื่อโฮสต์", + "IP Address/CIDR": "ที่อยู่ IP/CIDR", + "IP Address/CIDR is invalid": "ที่อยู่ IP/CIDR ไม่ถูกต้อง", + "If you're sure, please type in the configuration name below and click Delete": "หากคุณแน่ใจ โปรดพิมพ์ชื่อการกำหนดค่าด้านล่างแล้วคลิก ลบ", + "Include configuration file as an attachment": "", + "Invalid Port": "พอร์ตไม่ถูกต้อง", + "Is Alive": "ยังคงทำงาน", + "Job": "งาน", + "Job ID": "รหัสงาน", + "Jobs Logs": "บันทึกงาน", + "Key": "คีย์", + "Language": "ภาษา", + "Light": "โหมดสว่าง", + "Link expire date failed to update. Reason: (.*)": "ล้มเหลวในการอัปเดตวันที่หมดอายุของลิงค์ เหตุผล: (.*)", + "Link expire date updated": "อัปเดตวันที่หมดอายุของลิงค์แล้ว", + "List": "", + "Listen Port": "พอร์ตการฟัง", + "Live Preview": "", + "Log ID": "รหัสบันทึก", + "Logs": "บันทึก", + "MTU": "MTU", + "MTU format is not correct": "รูปแบบ MTU ไม่ถูกต้อง", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "ต้องมีการเริ่มต้นใหม่ของแดชบอร์ด WG ด้วยตนเองเพื่อใช้การเปลี่ยนแปลงกับที่อยู่ IP และพอร์ตการฟัง", + "Max RTT \\(ms\\)": "", + "Memory": "", + "Memory Usage": "", + "Message": "ข้อความ", + "Min RTT \\(ms\\)": "", + "Multi-Factor Authentication \\(MFA\\)": "การยืนยันตัวตนแบบหลายชั้น \\(MFA\\)", + "Name": "ชื่อ", + "Network": "", + "Never Expire": "ไม่เคยหมดอายุ", + "New Configuration": "การกำหนดค่าใหม่", + "New Password": "รหัสผ่านใหม่", + "Next": "ถัดไป", + "Nice to meet you!": "ยินดีที่ได้รู้จัก!", + "No": "ไม่", + "No Encryption": "", + "No WGDashboard API Key": "ไม่มีคีย์ API ของ WGDashboard", + "No active job at the moment\\.": "ไม่มีงานที่กำลังทำอยู่ในขณะนี้", + "No available IP containing": "ไม่มี IP ที่ว่างอยู่ซึ่งมี", + "No backup yet, click the button above to create backup\\.": "ยังไม่มีการสำรองข้อมูล คลิกปุ่มด้านบนเพื่อสร้างการสำรองข้อมูล", + "No more available IP can assign": "ไม่มี IP ว่างที่จะสามารถกำหนดได้", + "OTP from your authenticator": "OTP จากแอปยืนยันตัวตนของคุณ", + "Off": "ปิด", + "Official Documentation": "", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "โอ้ไม่\\.\\.\\. ลิงค์นี้หมดอายุหรือไม่ถูกต้อง", + "On": "เปิด", + "Once you deleted this configuration\\:": "เมื่อคุณลบการกำหนดค่านี้:", + "Open File": "", + "Optional Settings": "การตั้งค่าเพิ่มเติม", + "Or you can click the link below:": "หรือคุณสามารถคลิกที่ลิงค์ด้านล่าง:", + "Other Settings": "การตั้งค่าอื่น", + "Password": "รหัสผ่าน", + "Peer": " Peer", + "Peer Configuration File": "", + "Peer Default Settings": "การตั้งค่าเริ่มต้นของ Peer", + "Peer Jobs": "งานของ Peer ", + "Peer Remote Endpoint": "จุดสิ้นสุดระยะไกลของ Peer ", + "Peer Settings": "การตั้งค่า Peer", + "Peer created successfully": "สร้าง Peer เรียบร้อยแล้ว", + "Peer data usage reset successfully": "รีเซ็ตการใช้งานข้อมูลของ Peer เรียบร้อยแล้ว", + "Peer does not exist": " Peer ไม่มีอยู่", + "Peer download started": "เริ่มการดาวน์โหลด Peer แล้ว", + "Peer job deleted": "ลบงานของ Peer เรียบร้อยแล้ว", + "Peer job saved": "บันทึกงานของ Peer เรียบร้อยแล้ว", + "Peer saved": "บันทึก Peer เรียบร้อยแล้ว", + "Peers": " Peers", + "Peers Data Usage": "การใช้ข้อมูลของ Peer", + "Peers Default Settings": "การตั้งค่าเริ่มต้นของ Peer", + "Peers Settings": "การตั้งค่า Peer", + "Persistent Keepalive": "การคงอยู่ของการเชื่อมต่อ", + "Persistent Keepalive format is not correct": "รูปแบบการคงอยู่ของการเชื่อมต่อไม่ถูกต้อง", + "Pick Available IP": "เลือก IP ที่ว่างอยู่", + "Pinging...": "กำลังปิง...", + "Please fill in all required box": "โปรดกรอกข้อมูลในทุกช่องที่จำเป็น", + "Please fill in the following fields to finish setup": "โปรดกรอกข้อมูลในช่องต่อไปนี้เพื่อจบการตั้งค่า", + "Please provide a valid configuration name": "โปรดระบุชื่อการกำหนดค่าที่ถูกต้อง", + "Please provide ipAddress": "โปรดระบุ ipAddress", + "Please provide ipAddress and count": "โปรดระบุที่อยู่ ipAddress และจำนวน", + "Please specify amount of peers you want to add": "โปรดระบุจำนวน Peer ที่คุณต้องการเพิ่ม", + "Please specify an IP Address (v4/v6)": "โปรดระบุที่อยู่ IP (v4/v6)", + "Please specify job": "โปรดระบุงาน", + "Please specify one or more peers": "โปรดระบุ Peer อย่างน้อยหนึ่งคน", + "Please specify peer and configuration": "โปรดระบุ Peer และการกำหนดค่า", + "Port": "", + "Pre-Shared Key": "คีย์ที่ใช้ร่วมกันล่วงหน้า", + "Private Key": "คีย์ส่วนตัว", + "Private key does not match with the public key": "คีย์ส่วนตัวไม่ตรงกับคีย์สาธารณะ", + "Processes": "", + "Protocol": "", + "Public Key": "คีย์สาธารณะ", + "QR Code": "QR Code", + "Ready": "", + "Real Time Received Data Usage": "การใช้งานข้อมูลที่ได้รับแบบเรียลไทม์", + "Real Time Sent Data Usage": "การใช้งานข้อมูลที่ส่งแบบเรียลไทม์", + "Received": "รับ", + "Refresh": "รีเฟรช", + "Refresh Interval": "ช่วงเวลารีเฟรช", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "โปรดจำว่าให้นำ / ที่ท้ายเส้นทางออก เช่น /etc/wireguard", + "Repeat New Password": "ใส่รหัสผ่านใหม่อีกครั้ง", + "Reset": "รีเซ็ต", + "Reset Data Usage": "รีเซ็ตการใช้งานข้อมูล", + "Restore": "คืนค่า", + "Restore Configuration": "คืนค่าการกำหนดค่า", + "Restoring": "กำลังคืนค่า", + "Restrict Access": "จำกัดการเข้าถึง", + "Restrict Peer": "จำกัด Peer ", + "Restricted": "ถูกจำกัด", + "Restricted ([0-9]{1,}) peer\\(s\\)": " Peer ที่ถูกจำกัด ([0-9]{1,}) คน", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "จำกัด Peer ([0-9]{1,}) คน สำเร็จ ล้มเหลวในการจำกัด Peer ([0-9]{1,}) คน", + "Restricted Peers?": "Peer ที่ถูกจำกัด?", + "Restricting\\.\\.\\.": "กำลังจำกัด\\.\\.\\.", + "Revert": "ย้อนกลับ", + "Save": "บันทึก", + "Save Configuration": "บันทึกการกำหนดค่า", + "Save Peer": "บันทึก Peer ", + "Saving\\.\\.\\.": "กำลังบันทึก\\.\\.\\.", + "Scan QR Code with the WireGuard App to add peer": "สแกน QR Code ด้วยแอป WireGuard เพื่อเพิ่ม Peer ", + "Schedule Jobs": "จัดตารางงาน", + "Search": "", + "Search Peers\\.\\.\\.": "ค้นหา Peer\\.\\.\\.", + "Select All": "เลือกทั้งหมด", + "Select Peers": "เลือก Peer ", + "Select a backup you want to restore": "เลือกการสำรองข้อมูลที่คุณต้องการคืนค่า", + "Selected Backup": "การสำรองข้อมูลที่เลือก", + "Send": "", + "Send From": "", + "Send Test Email": "", + "Sending\\.\\.\\.": "", + "Sent": "ส่ง", + "Sent / Received / Lost Package": "ส่ง / รับ / แพ็คเกจที่หายไป", + "Server": "เซิร์ฟเวอร์", + "Server List": "รายการเซิร์ฟเวอร์", + "Settings": "การตั้งค่า", + "Setup": "การตั้งค่า", + "Share Peer": "แชร์ Peer ", + "Share link failed to create. Reason: (.*)": "ล้มเหลวในการสร้างลิงค์แชร์ เหตุผล: (.*)", + "Share with Email": "", + "Sharing\\.\\.\\.": "กำลังแชร์\\.\\.\\.", + "Sign In": "เข้าสู่ระบบ", + "Sign Out": "ออกจากระบบ", + "Sign in session ended, please sign in again": "สิ้นสุดเซสชันการลงชื่อเข้าใช้ โปรดลงชื่อเข้าใช้อีกครั้ง", + "Signing In\\.\\.\\.": "กำลังเข้าสู่ระบบ\\.\\.\\.", + "Sorry, your username or password is incorrect.": "ขออภัย ชื่อผู้ใช้หรือรหัสผ่านของคุณไม่ถูกต้อง", + "Sort By": "จัดเรียงตาม", + "Start Sharing": "เริ่มแชร์", + "Status": "สถานะ", + "Step (.*)": "ขั้นตอน (.*)", + "Stop Sharing": "หยุดแชร์", + "Stop Sharing\\.\\.\\.": "หยุดแชร์\\.\\.\\.", + "Storage": "", + "Success": "สำเร็จ", + "Swap Memory": "", + "Swap Memory Usage": "", + "System Status": "", + "TOTP verified!": "ยืนยัน TOTP เรียบร้อยแล้ว!", + "Table": "", + "The maximum number of peers can add is (.*)": "จำนวนสูงสุดของ Peer ที่สามารถเพิ่มได้คือ (.*)", + "Theme": "ธีม", + "This IP is not available: (.*)": "IP นี้ไม่ว่าง: (.*)", + "This configuration have ([0-9].*) backups": "การกำหนดค่านี้มีการสำรองข้อมูล ([0-9].*)", + "This configuration have no backup": "การกำหนดค่านี้ไม่มีการสำรองข้อมูล", + "This peer already exist": " Peer นี้มีอยู่แล้ว", + "This peer does not have any job yet\\.": " Peer คนนี้ยังไม่มีงานใดๆ", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "นี่จะถูกเปลี่ยนแปลงทั่วโลก และจะถูกนำมาใช้กับ QR code และไฟล์การกำหนดค่าของทุก Peer", + "To update this configuration's name, WGDashboard will execute the following operations:": "", + "Toggle When Start Up": "สลับเมื่อเริ่มต้น", + "Tools": "เครื่องมือ", + "Total": "ทั้งหมด", + "Total Received": "รับทั้งหมด", + "Total Sent": "ส่งทั้งหมด", + "Total Usage": "การใช้งานทั้งหมด", + "Turning Off\\.\\.\\.": "กำลังปิด\\.\\.\\.", + "Turning On\\.\\.\\.": "กำลังเปิด\\.\\.\\.", + "Unsaved Job": "งานที่ยังไม่ได้บันทึก", + "Untitled Peer": "", + "Update Name": "", + "Update Password": "อัปเดตรหัสผ่าน", + "Update peer failed when saving the configuration": "อัปเดต Peer ล้มเหลวเมื่อบันทึกการกำหนดค่า", + "Update peer failed when updating Allowed IPs": "อัปเดต Peer ล้มเหลวเมื่ออัปเดตการอนุญาต IP", + "Update peer failed when updating Pre-Shared Key": "อัปเดต Peer ล้มเหลวเมื่ออัปเดตคีย์ที่ใช้ร่วมกันล่วงหน้า", + "Updated at": "อัปเดตเมื่อ", + "Use your own Private and Public Key": "ใช้คีย์ส่วนตัวและสาธารณะของคุณเอง", + "Username": "ชื่อผู้ใช้", + "WGDashboard API Keys function is disabled": "ฟังก์ชั่นคีย์ API ของ WGDashboard ถูกปิดใช้งาน", + "WGDashboard Account Settings": "ตั้งค่าบัญชี WGDashboard", + "WGDashboard Settings": "การตั้งค่า WGDashboard", + "WGDashboard language update failed": "การอัปเดตภาษาของ WGDashboard ล้มเหลว", + "Welcome to": "ยินดีต้อนรับสู่", + "What\\'s the body\\?": "", + "What\\'s the subject\\?": "", + "When should this API Key expire\\?": "คีย์ API นี้ควรหมดอายุเมื่อไหร่\\?", + "Who are you sending to\\?": "", + "WireGuard Configuration Settings": "การตั้งค่าการกำหนดค่า WireGuard", + "WireGuard Configurations": "การกำหนดค่า WireGuard", + "WireGuard Configurations Settings": "ตั้งค่าการกำหนดค่า WireGuard", + "WireGuard configuration path saved": "บันทึกเส้นทางการกำหนดค่า WireGuard แล้ว", + "Yes": "ใช่", + "You can add up to (.*) peers": "คุณสามารถเพิ่มได้สูงสุด (.*) Peers", + "You can visit our: ": "", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "คุณยังไม่มีการกำหนดค่า WireGuard โปรดตรวจสอบโฟลเดอร์การกำหนดค่าหรือเปลี่ยนในการตั้งค่า โดยค่าเริ่มต้นโฟลเดอร์คือ /etc/wireguard", + "You don't have any configuration to restore": "คุณไม่มีการกำหนดค่าใด ๆ ที่จะคืนค่า", + "You're on the latest version": "คุณกำลังใช้งานเวอร์ชั่นใหม่ล่าสุด", + "\\(At least 8 characters and make sure is strong enough!\\)": "\\(อย่างน้อย 8 ตัวอักษร และตรวจสอบให้แน่ใจว่าแข็งแรงพอ!\\)", + "\\(Required for QR Code and Download\\)": "\\(จำเป็นสำหรับ QR Code และดาวน์โหลด\\)", + "\\(Required\\)": "\\(จำเป็น\\)", + "if": "ถ้า", + "is": "เป็น", + "larger than": "มากกว่า", + "or": "หรือ", + "or click the button below to download the ": "หรือคลิกปุ่มด้านล่างเพื่อดาวน์โหลด", + "then": "แล้ว", + "to add your server": "เพื่อเพิ่มเซิร์ฟเวอร์ของคุณ" +} \ No newline at end of file diff --git a/src/static/locales/tr-TR.json b/src/static/locales/tr-TR.json new file mode 100644 index 0000000..23a7141 --- /dev/null +++ b/src/static/locales/tr-TR.json @@ -0,0 +1,369 @@ +{ + " file": " dosyası", + "(.*) Available IP Address": "$1 adet mevcut IP Adresi", + "(.*) Minutes": "$1 Dakika", + "(.*) Seconds": "$1 Saniye", + "(.*) Used": "", + "(.*) is off": "$1 kapalı", + "(.*) is on": "$1 açık", + "([0-9].*) Backups?": "$1 Yedek?", + "([0-9].*) Peers?": "$1 Eş?", + "([0-9]{1,}) Interfaces": "", + "([0-9]{1,}) Partitions": "", + "(v[0-9.]{1,}) is now available for update!": "Sürüm $1 güncelleme için hazır!", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Lütfen zaman tabanlı parola oluşturmak için aşağıdaki QR kodunu kimlik doğrulama uygulamanız ile tarayın", + "2\\. Enter the TOTP generated by your authenticator to verify": "2. Doğrulamak için kimlik doğrulama uygulaması tarafından üretilen zaman tabanlı parolayı girin", + "API Key": "API Anahtarı", + "API Key created": "API Anahtarı oluşturuldu", + "API Key deleted": "API Anahtarı silindi", + "API Keys": "API Anahtarları", + "API Keys function is failed to disable": "API Anahtar işlevi devre dışı bırakılamadı", + "API Keys function is failed to enable": "API Anahtar işlevi aktifleştirilemedi", + "API Keys function is successfully disabled": "API Anahtar işlevi başarıyle devre dışı bırakıldı", + "API Keys function is successfully enabled": "API Anahtar işlevi başarıyla aktifleştirildi", + "Access Remote Server": "Uzak Sunuculara Eriş", + "Access Restricted": "Erişim Kısıtlandı", + "Account Settings": "Hesap Ayarları", + "Active Jobs": "Aktif Eşler", + "Add": "Ekle", + "Add Peers": "Eş Ekle", + "Adding\\.\\.\\.": "Ekleniyor...", + "Address": "Adres", + "Advanced Options": "", + "All Active Jobs": "Aktif Tüm Görevler", + "All connected peers will get disconnected": "Bağlı tüm eşlerin bağlantısı kopacak", + "Allow Access": "Erişim Ver", + "Allow access successfully": "Erişim izni başarıyla verildi", + "Allowed IP already taken by another peer": "İzin verilen IP başka bir eş tarafından kullanılıyor", + "Allowed IPs": "İzin Verilen IP Adresleri", + "Allowed IPs Validation": "", + "Allowed IPs already taken by another peer": "İzin Verilen IP Adresleri başka bir eş tarafından zaten kullanılıyor", + "Allowed IPs is invalid": "İzin Verilen IP Adresleri geçersiz", + "Allowing Access\\.\\.\\.": "Erişim Veriliyor...", + "AmneziaWG Peer Setting": "", + "Appearance": "Görünüm", + "Are you sure to delete": "Silmek istediğinize emin misiniz?", + "Are you sure to delete this API key\\?": "Bu API anahtarını silmek istediğine emin misiniz?", + "Are you sure to delete this backup\\?": "Bu yedeği silmek istediğinize emin misiniz?", + "Are you sure to delete this configuration\\?": "Bu yapılandırmayı silmek istediğinize emin misiniz?", + "Are you sure to delete this peer\\?": "Bu eşi silmek istediğinize emin misiniz?", + "Are you sure to restore this backup\\?": "", + "Average / Min / Max Round Trip Time": "Ortalama / Min / Maks RTT", + "Average RTT \\(ms\\)": "", + "Backup": "Yedek", + "Backup & Restore": "Yedekleme ve Geri Yükleme", + "Backup Date": "Yedek Tarihi", + "Backup not selected": "Yedek seçilmedi", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Hem yapılandırma dosyası (.conf) hem de bu yapılandırmanın veritabanı tablosu silinecek", + "Bulk Add": "Toplu Ekle", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Toplu ekleme yaparsanız eşlerin isimleri otomatik olarak oluşturulacak ve İzin Verilen IP adresi mevcut olan bir sonraki IP olarak tanımlanacak.", + "CPU": "", + "CPU Usage": "", + "Cancel": "İptal Et", + "Checking backups...": "Yedekler kontrol ediliyor...", + "Checking for update...": "Yeni sürüm için kontrol sağlanıyor...", + "Clear Selection": "Seçimi Kaldır", + "Click": "Tıkla", + "Click to change a backup": "Yedek seçmek için tıklayın", + "Complete": "Tamamla", + "Configuration": "Ayar", + "Configuration File": "", + "Configuration Name": "Yapılandırma Adı", + "Configuration Settings": "Yapılandırma Ayarları", + "Configuration deleted": "Yapılandırma silindi", + "Configuration does not exist": "Yapılandırma mevcut değil", + "Configuration name already exist\\.": "Yapılandırma ismi zaten mevcut.", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "Yapılandırma ismi 15 karakterden oluşur; büyük/küçük harf, sayı, alt çizgi, eşittir, artı, nokta ve tire içerebilir.", + "Configuration name is invalid. Possible reasons:": "Yapılandırma ismi geçersiz. Muhtemel sebepler:", + "Configuration restored": "Yapılandırma geri yüklendi", + "Configuration saved": "Yapılandırma kaydedildi", + "Configurations": "Ayarlar", + "Configurations Directory": "Yapılandırma Dizini", + "Confirm \\& edit restore information": "Geri yükleme bilgisini doğrula ve düzelt", + "Confirm password": "Parolayı doğrula", + "Connected Peers": "Bağlı Eşler", + "Contain": "İçeriyor", + "Count": "Sayı", + "Create": "Oluştur", + "Create API Key": "Yeni API anahtarı oluştur", + "Create Backup": "Yedek Oluştur", + "Create an account": "Hesap oluştur", + "Creating\\.\\.\\.": "Oluşturuluyor...", + "Current Password": "Geçerli Parola", + "Current Version:": "Geçerli Sürüm:", + "Currently the peer is not sharing": "Eş şu an paylaşım yapmıyor", + "DNS": "DNS", + "DNS format is incorrect": "DNS formatı yanlış", + "Danger Zone": "", + "Dark": "Karanlık", + "Dashboard IP Address \\& Listen Port": "", + "Dashboard Language": "Arayüz Dili", + "Dashboard Theme": "Arayüz Teması", + "Dashboard language update failed": "Arayüz dil değişikliği başarısız oldu", + "Database File": "Veritabanı Dosyası", + "Date": "Tarih", + "Delete": "Sil", + "Delete Configuration": "Yapılandırmayı Sil", + "Delete Peer": "Eşi Sil", + "Delete current configuration's database table and \\.conf file": "", + "Deleted ([0-9]{1,}) peer\\(s\\)": "$1 eş silindi", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "$1 eş başarıyla silindi. $2 eş silinemedi", + "Deleting...": "Siliniyor...", + "Disabled": "Devre Dışı", + "Discord Server": "", + "Display": "Göster", + "Display As": "", + "Don't think that's a good idea": "Bunun iyi bir fikir oldugunu düşünmüyorum", + "Done": "Bitti", + "Download": "", + "Download All": "Hepsini İndir", + "Download Finished": "İndirme Tamamlandı", + "Download \\& QR Code is not available due to no private key set for this peer": "Bu eş için özel anahtar tanımlandığı için İndirme ve QR Kod mevcut değil", + "Downloading": "İndiriliyor", + "Duplicate current configuration's database table and \\.conf file with the new name": "", + "Edit": "Düzenle", + "Edit Raw Configuration File": "", + "Email Account": "", + "Email Body Template": "", + "Email sent successfully!": "", + "Enabled": "Aktif", + "Encryption": "", + "Endpoint Allowed IPs": "Endpointe Erişim İçin İzin Verilen IP Adresleri", + "Endpoint Allowed IPs format is incorrect": "Endpoint için İzin Verilen IP Adreslerinin formatı yanlış", + "Enter IP Address / Hostname": "IP Adresi/Hostname girin", + "Enter IP Address/CIDR": "IP Adresi/CIDR girin", + "Enter a password": "Parola girin", + "Enter an username you like": "Bir kullanıcı adı girin", + "Expire At": "Geçerliliğini yitirme tarihi", + "FROM ": "Kimden ", + "Failed": "Başarısız", + "Failed to add peers in bulk": "Toplu eş ekleme işlemi başarısız oldu", + "Failed to allow access of peer (.*)": "$1 eşe erişim izni verilemedi", + "Failed to check available update": "Mevcut güncelleştirme kontrol edilemedi", + "Failed to save configuration through WireGuard": "WireGuard üzerinden yapılandırma kaydedilemedi", + "File": "Dosya", + "Filter": "Filtre", + "Generating key pairs by bulk failed": "Toplu anahtar oluşturma işlemi başarısız oldu", + "Geolocation": "Coğrafi Konum", + "Grid": "", + "Help": "Yardım", + "Home": "Ana sayfa", + "Hop": "", + "How many peers you want to add\\?": "Kaç adet eş eklemek istiyorsunuz?", + "I don't need MFA": "Çok adımlı doğrulamaya ihtiyacım yok", + "IP Address": "IP Adresi", + "IP Address / Hostname": "IP Adresi/Hostname", + "IP Address/CIDR": "IP Adresi/CIDR", + "IP Address/CIDR is invalid": "IP Adresi/CIDR geçersiz", + "If you're sure, please type in the configuration name below and click Delete": "Eğer eminseniz aşağıya yapılandırma ismini girin ve Sil'e tıklayın", + "Include configuration file as an attachment": "", + "Invalid Port": "Geçersiz Port", + "Is Alive": "Erişilebilir mi", + "Job": "Görev", + "Job ID": "Görev ID", + "Jobs Logs": "Görev Logları", + "Key": "Anahtar", + "Language": "Dil", + "Light": "Aydınlık", + "Link expire date failed to update. Reason: (.*)": "Link gerçerliliği güncellenemedi. Sebebi: $1", + "Link expire date updated": "Link geçerlilik tarihi güncellendi", + "List": "", + "Listen Port": "Port", + "Live Preview": "", + "Log ID": "Log ID", + "Logs": "Loglar", + "MTU": "MTU", + "MTU format is not correct": "MTU formatı yanlış", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "IP Adresi ve Port değişikliklerinin uygulanması için WGDashboard'un elle yeniden başlatılması gerekiyor", + "Max RTT \\(ms\\)": "", + "Memory": "", + "Memory Usage": "", + "Message": "Mesaj", + "Min RTT \\(ms\\)": "", + "Multi-Factor Authentication \\(MFA\\)": "Çok Adımlı Dogrulama (MFA)", + "Name": "Ad", + "Network": "", + "Never Expire": "Geçerliligi asla yitirme", + "New Configuration": "Yeni Yapılandırma", + "New Password": "Yeni Parola", + "Next": "Sonraki", + "Nice to meet you!": "Tanıştığıma memnun oldum!", + "No": "Hayır", + "No Encryption": "", + "No WGDashboard API Key": "WGDashboard API Anahtarı Yok", + "No active job at the moment\\.": "Şu an herhangi bir aktif görev yok.", + "No available IP containing": "Mevcut IP Adresi bulunmuyor", + "No backup yet, click the button above to create backup\\.": "Henüz herhangi bir yedek bulunmuyor, oluşturmak için üstteki butona tıklayın.", + "No more available IP can assign": "Atanabilecek daha fazla mevcut IP adresi yok", + "OTP from your authenticator": "Kimlik doğrulama uygulamanızdan tek kullanımlık parola", + "Off": "Kapalı", + "Official Documentation": "", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "Tüh... Link geçerliliğini yitirmiş veya geçersiz link.", + "On": "Açık", + "Once you deleted this configuration\\:": "Bu yapılandırmayı sildiğiniz an:", + "Open File": "", + "Optional Settings": "İsteğe Bağlı Ayarlar", + "Or you can click the link below:": "Veya aşağıdaki linkte tıklayabilirsiniz:", + "Other Settings": "Diğer Ayarlar", + "Password": "Parola", + "Peer": "Eş", + "Peer Configuration File": "", + "Peer Default Settings": "Ön Tanımlı Eş Ayarları", + "Peer Jobs": "Eş Görevleri", + "Peer Remote Endpoint": "Uzak eş endpointi", + "Peer Settings": "Eş Ayarları", + "Peer created successfully": "Eş başarıyla oluşturuldu", + "Peer data usage reset successfully": "Eşin veri kullanım istatistiği başarıyla sıfırlandı", + "Peer does not exist": "Eş mevcut değil", + "Peer download started": "Eş indirmesi başladı", + "Peer job deleted": "Eş görevi silindi", + "Peer job saved": "Eş görevi kaydedildi", + "Peer saved": "Eş kaydedildi", + "Peers": "Eşler", + "Peers Data Usage": "Eşlerin Veri Kullanımı", + "Peers Default Settings": "Ön Tanımlı Eş Ayarları", + "Peers Settings": "Eş Ayarları", + "Persistent Keepalive": "Sürekli Oturum süresi", + "Persistent Keepalive format is not correct": "Sürekli Oturum formatı yanlış", + "Pick Available IP": "Mevcut IP Adresi Seç", + "Pinging...": "Ping atılıyor...", + "Please fill in all required box": "Lütfen zorunlu tüm alanları doldurun", + "Please fill in the following fields to finish setup": "Lütfen kurulumu bitirmek için şu alanları doldurun", + "Please provide a valid configuration name": "Lütfen geçerli bir yapılandırma ismi girin", + "Please provide ipAddress": "Lütfen IP Adresi belirtin", + "Please provide ipAddress and count": "Lütfen IP Adresı ve sayısını belirtin", + "Please specify amount of peers you want to add": "Lütfen eklemek istediğiniz eş adetini belirtin", + "Please specify an IP Address (v4/v6)": "Lütfen IP Adresi belirtin (v4/v6)", + "Please specify job": "Lütfen görev belirtin", + "Please specify one or more peers": "Lütfen bir veya daha fazla eş belirtin", + "Please specify peer and configuration": "Lütfen eş ve yapılandırma belirtin", + "Port": "", + "Pre-Shared Key": "Ön Paylaşımlı Anahtar", + "Private Key": "Özel Anahtar", + "Private key does not match with the public key": "Özel anahtar genel anahtar ile eşleşmiyor", + "Processes": "", + "Protocol": "", + "Public Key": "Genel Anahtar", + "QR Code": "QR Kod", + "Ready": "", + "Real Time Received Data Usage": "Gerçek Zamanlı Gelen Veri Kullanımı", + "Real Time Sent Data Usage": "Gerçek Zamanlı Gönderilen Veri Kullanımı", + "Received": "Gelen", + "Refresh": "Yenile", + "Refresh Interval": "Yenileme Sıklığı", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "Dizin adresinin sonundaki /'ı kaldırmayı unutmayın. Örnek; /etc/wireguard", + "Repeat New Password": "Yeni Parolayı Tekrarla", + "Reset": "Sıfırla", + "Reset Data Usage": "Veri Kullanımını Sıfırla", + "Restore": "Geri Yükle", + "Restore Configuration": "Yapılandırmayı Geri Yükle", + "Restoring": "Geri Yükleniyor...", + "Restrict Access": "Erişimi Kısıtla", + "Restrict Peer": "Eşi Kısıtla", + "Restricted": "Kısıtla", + "Restricted ([0-9]{1,}) peer\\(s\\)": "$1 eşin erişimi kısıtlandı", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "$1 eşin erişimi kısıtlandı. $2 eşin erişimi kısıtlanamadı", + "Restricted Peers?": "Kısıtlanmış Eşler?", + "Restricting\\.\\.\\.": "Erişim Kısıtlanıyor...", + "Revert": "Geri al", + "Save": "Kaydet", + "Save Configuration": "Yapılandırmayı Kaydet", + "Save Peer": "Eşi Kaydet", + "Saving\\.\\.\\.": "Kaydediliyor...", + "Scan QR Code with the WireGuard App to add peer": "Eşi eklemek için WireGuard uygulaması ile QR kodu okutun", + "Schedule Jobs": "Zamanlanmış Görevler", + "Search": "", + "Search Peers\\.\\.\\.": "Eşleri Ara...", + "Select All": "Hepsini Seç", + "Select Peers": "Eş Seç", + "Select a backup you want to restore": "Geri yüklemek istediğiniz yedeği seçin", + "Selected Backup": "Seçilen Yedek", + "Send": "", + "Send From": "", + "Send Test Email": "", + "Sending\\.\\.\\.": "", + "Sent": "Gönderilen", + "Sent / Received / Lost Package": "Gönderilen / Alınan / Kayıp Paket", + "Server": "Sunucu", + "Server List": "Sunucu Listesi", + "Settings": "Ayarlar", + "Setup": "Kurulum", + "Share Peer": "Eşi Paylaş", + "Share link failed to create. Reason: (.*)": "Link paylaşımı oluşturulamadı. Sebebi: $1", + "Share with Email": "", + "Sharing\\.\\.\\.": "Paylaşılıyor...", + "Sign In": "Giriş Yap", + "Sign Out": "Çıkış yap", + "Sign in session ended, please sign in again": "Oturum süresi doldu, lütfen tekrar giriş yapın", + "Signing In\\.\\.\\.": "Giriş Yapılıyor...", + "Sorry, your username or password is incorrect.": "Üzgünüm, kullanıcı adı veya parola yanlış.", + "Sort By": "Sırala", + "Start Sharing": "Paylaşımı Başlat", + "Status": "Durum", + "Step (.*)": "$1. Adım", + "Stop Sharing": "Paylaşımı Durdur", + "Stop Sharing\\.\\.\\.": "Paylaşım Durduruluyor...", + "Storage": "", + "Success": "Başarılı", + "Swap Memory": "", + "Swap Memory Usage": "", + "System Status": "", + "TOTP verified!": "Zaman tabanlı parola doğrulandı!", + "Table": "", + "The maximum number of peers can add is (.*)": "En fazla $1 adet eş ekleyebilirsiniz", + "Theme": "Tema", + "This IP is not available: (.*)": "$1 adresi mevcut değil", + "This configuration have ([0-9].*) backups": "Bu yapılandırmanın $1 adet yedeği bulunuyor", + "This configuration have no backup": "Bu yapılandırmanın hiç yedeği bulunmuyor", + "This peer already exist": "Bu eş zaten mevcut", + "This peer does not have any job yet\\.": "Bu eşe ait henüz herhangi bir görev yok.", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Bu değişiklik global olarak, tüm eşlerin QR kod ve yapılandırma dosyalarına uygulanacak.", + "To update this configuration's name, WGDashboard will execute the following operations:": "", + "Toggle When Start Up": "Açılışta Ayarla", + "Tools": "Araçlar", + "Total": "Toplam", + "Total Received": "Toplam Gelen", + "Total Sent": "Toplam Gönderilen", + "Total Usage": "Toplam Kullanım", + "Turning Off\\.\\.\\.": "Kapatılıyor...", + "Turning On\\.\\.\\.": "Açılıyor...", + "Unsaved Job": "Kaydedilmemiş Görev", + "Untitled Peer": "", + "Update Name": "", + "Update Password": "Parolayı Guncelle", + "Update peer failed when saving the configuration": "Eş güncellemesi yapılandırma kaydedilirken başarısız oldu", + "Update peer failed when updating Allowed IPs": "Eş güncellemesi İzin Verilen IP Adresleri güncellenirken başarısız oldu", + "Update peer failed when updating Pre-Shared Key": "Eş güncellemesi Ön Tanımlı Anahtar güncellenirken başarısız oldu", + "Updated at": "tarihinde güncellenmiş", + "Use your own Private and Public Key": "Kendi özel ve genel anahtarınızı kullanın", + "Username": "Kullanıcı adı", + "WGDashboard API Keys function is disabled": "WGDashboard API Anahtar işlevi devre dışı bırakılamadı", + "WGDashboard Account Settings": "WGDashboard Hesap Ayarları", + "WGDashboard Settings": "WGDashboard Ayarları", + "WGDashboard language update failed": "WGDashboard ismi güncellenemedi", + "Welcome to": "Hoş geldiniz", + "What\\'s the body\\?": "", + "What\\'s the subject\\?": "", + "When should this API Key expire\\?": "Bu API anahtarı ne zamana kadar geçerli olmalı?", + "Who are you sending to\\?": "", + "WireGuard Configuration Settings": "WireGuard Yapılandırma Ayarları", + "WireGuard Configurations": "WireGuard Ayarları", + "WireGuard Configurations Settings": "WireGuard Yapılandırma Ayarları", + "WireGuard configuration path saved": "WireGuard yapılandırma yolu kaydedildi", + "Yes": "Evet", + "You can add up to (.*) peers": "$1 adete kadar eş ekleyebilirsiniz", + "You can visit our: ": "", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Henüz herhangi bir WireGuard ayarınız bulunmuyor. Lütfen yapılandırma dizinini kontrol edin veya Ayarlar kısmından değiştirin. Ön tanımlı ayar dizini /etc/wireguard.", + "You don't have any configuration to restore": "Geri yüklemek için herhangi bir yapılandırmanız yok", + "You're on the latest version": "En güncel sürümü kullanıyorsunuz", + "\\(At least 8 characters and make sure is strong enough!\\)": "(En az 8 karakter girin ve güçlü bir parola seçtiğinizden emin olun!)", + "\\(Required for QR Code and Download\\)": "(QR Kodu ve İndirme için zorunlu)", + "\\(Required\\)": "(Zorunlu)", + "if": "eğer", + "is": "", + "larger than": "daha büyük", + "or": "veya", + "or click the button below to download the ": "veya indirmek için aşağıdaki butona tıklayın", + "then": "öyleyse", + "to add your server": "sunucunu eklemek için" +} \ No newline at end of file diff --git a/src/static/locales/uk-UA.json b/src/static/locales/uk-UA.json new file mode 100644 index 0000000..470d8ff --- /dev/null +++ b/src/static/locales/uk-UA.json @@ -0,0 +1,369 @@ +{ + " file": " файл", + "(.*) Available IP Address": "", + "(.*) Minutes": "$1 хв.", + "(.*) Seconds": "$1 сек.", + "(.*) Used": "", + "(.*) is off": "$1 вимкнений", + "(.*) is on": "$1 працює", + "([0-9].*) Backups?": "", + "([0-9].*) Peers?": "", + "([0-9]{1,}) Interfaces": "", + "([0-9]{1,}) Partitions": "", + "(v[0-9.]{1,}) is now available for update!": "$1 тепер доступний для оновлення!", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Будь ласка, відскануйте наведений нижче QR-код, щоб створити TOTP із вибраним вами автентифікатором", + "2\\. Enter the TOTP generated by your authenticator to verify": "2. Для підтвердження введіть TOTP, згенерований вашим автентифікатором", + "API Key": "Ключ API", + "API Key created": "Ключ API створено", + "API Key deleted": "Ключ API видалено", + "API Keys": "Ключі API", + "API Keys function is failed to disable": "API Keys функцію не вдалося вимкнути", + "API Keys function is failed to enable": "API Keys функцію не вдалося активувати", + "API Keys function is successfully disabled": "API Keys функцію успішно вимкнено", + "API Keys function is successfully enabled": "API Keys функцію успішно активовано", + "Access Remote Server": "Доступ до віддаленого сервера", + "Access Restricted": "Доступ обмежений", + "Account Settings": "", + "Active Jobs": "Активний задачі", + "Add": "Додати", + "Add Peers": "Додати Peers", + "Adding\\.\\.\\.": "Додаю...", + "Address": "Адреса", + "Advanced Options": "", + "All Active Jobs": "Усі активний задачі", + "All connected peers will get disconnected": "", + "Allow Access": "Дозволити доступ", + "Allow access successfully": "", + "Allowed IP already taken by another peer": "", + "Allowed IPs": "Дозволені IP", + "Allowed IPs Validation": "", + "Allowed IPs already taken by another peer": "Дозволені IP, уже зайняті іншим peer", + "Allowed IPs is invalid": "Дозволені IP невірні", + "Allowing Access\\.\\.\\.": "Надаю доступ...", + "AmneziaWG Peer Setting": "", + "Appearance": "", + "Are you sure to delete": "", + "Are you sure to delete this API key\\?": "Ви впевнені, що хочете видалити цей ключ API?", + "Are you sure to delete this backup\\?": "", + "Are you sure to delete this configuration\\?": "", + "Are you sure to delete this peer\\?": "", + "Are you sure to restore this backup\\?": "", + "Average / Min / Max Round Trip Time": "", + "Average RTT \\(ms\\)": "", + "Backup": "", + "Backup & Restore": "", + "Backup Date": "", + "Backup not selected": "", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "", + "Bulk Add": "Масове додавання", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "При масовому додаванні Peers, ім’я кожного Peer буде автоматично згенеровано, а дозволену IP буде призначено як наступний доступний IP", + "CPU": "", + "CPU Usage": "", + "Cancel": "Відмінити", + "Checking backups...": "", + "Checking for update...": "Перевірка наявності оновлень...", + "Clear Selection": "", + "Click": "Натисніть", + "Click to change a backup": "", + "Complete": "Завершити", + "Configuration": "Конфігурація", + "Configuration File": "", + "Configuration Name": "Назва конфігурації", + "Configuration Settings": "Параметри конфігурації", + "Configuration deleted": "", + "Configuration does not exist": "Конфігурація не існує", + "Configuration name already exist\\.": "Назва конфігурації вже існує. ", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "Назва конфігурації може містити лише 15 літер нижнього/верхнього регістру, цифри, підкреслення, знак рівності, плюс, крапку та дефіс. ", + "Configuration name is invalid. Possible reasons:": "Назва конфігурації невірна. Можливі причини:", + "Configuration restored": "", + "Configuration saved": "", + "Configurations": "Конфігурація", + "Configurations Directory": "Тека з конфігураціями", + "Confirm \\& edit restore information": "", + "Confirm password": "Підтвердьте пароль", + "Connected Peers": "Підключені Peers", + "Contain": "", + "Count": "Граф", + "Create": "Створити", + "Create API Key": "Створити ключ API", + "Create Backup": "", + "Create an account": "Створити обліковий запис", + "Creating\\.\\.\\.": "Створення...", + "Current Password": "Поточний пароль", + "Current Version:": "Поточна версія: ", + "Currently the peer is not sharing": "Наразі Peer ні з ким не розділений", + "DNS": "Сервер DNS", + "DNS format is incorrect": "Неправильний формат DNS", + "Danger Zone": "", + "Dark": "Темна", + "Dashboard IP Address \\& Listen Port": "", + "Dashboard Language": "Мова Dashboard", + "Dashboard Theme": "Тема інтерфейсу", + "Dashboard language update failed": "Не вдалося оновити мову Dashboard", + "Database File": "", + "Date": "Дата", + "Delete": "Видалити", + "Delete Configuration": "", + "Delete Peer": "Видалити Peer", + "Delete current configuration's database table and \\.conf file": "", + "Deleted ([0-9]{1,}) peer\\(s\\)": "", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "", + "Deleting...": "Видалення...", + "Disabled": "Вимкнено", + "Discord Server": "", + "Display": "Відображення", + "Display As": "", + "Don't think that's a good idea": "Не думаю, що це гарна ідея", + "Done": "", + "Download": "", + "Download All": "Завантажити все", + "Download Finished": "", + "Download \\& QR Code is not available due to no private key set for this peer": "Завантажити QR-код неможливо, бо відсутній приватний ключ для цього Peer", + "Downloading": "", + "Duplicate current configuration's database table and \\.conf file with the new name": "", + "Edit": "Редагувати", + "Edit Raw Configuration File": "", + "Email Account": "", + "Email Body Template": "", + "Email sent successfully!": "", + "Enabled": "Увімкнено", + "Encryption": "", + "Endpoint Allowed IPs": "Дозволені IP для кінцевого кліента", + "Endpoint Allowed IPs format is incorrect": "Формат дозволених IP для кліента неправильний", + "Enter IP Address / Hostname": "Введіть IP-адресу / ім’я хоста", + "Enter IP Address/CIDR": "Введіть IP-адресу/CIDR", + "Enter a password": "Введіть пароль", + "Enter an username you like": "Введіть ім'я користувача, яке вам подобається", + "Expire At": "Термін дії закінчується", + "FROM ": "ВІД ", + "Failed": "Не вдалося", + "Failed to add peers in bulk": "Не вдалося масово створити peers", + "Failed to allow access of peer (.*)": "", + "Failed to check available update": "Не вдалося перевірити доступне оновлення", + "Failed to save configuration through WireGuard": "", + "File": "", + "Filter": "Фільтрування", + "Generating key pairs by bulk failed": "Помилка масового генерування пар ключів", + "Geolocation": "", + "Grid": "", + "Help": "", + "Home": "Головна", + "Hop": "", + "How many peers you want to add\\?": "Скільки Peers ви хочете додати?", + "I don't need MFA": "Мені не потрібен MFA", + "IP Address": "IP-адреса", + "IP Address / Hostname": "IP-адресу / ім’я хоста", + "IP Address/CIDR": "IP-адреса/CIDR", + "IP Address/CIDR is invalid": "IP-адреса/CIDR невірна", + "If you're sure, please type in the configuration name below and click Delete": "", + "Include configuration file as an attachment": "", + "Invalid Port": "Невірний порт", + "Is Alive": "", + "Job": "Задача", + "Job ID": "ID Задачі", + "Jobs Logs": "Журнал задач", + "Key": "Ключ", + "Language": "", + "Light": "Світла", + "Link expire date failed to update. Reason: (.*)": "Не вдалося оновити термін дії посилання. Причина: $1", + "Link expire date updated": "Термін дії посилання оновлено", + "List": "", + "Listen Port": "Порт підключення", + "Live Preview": "", + "Log ID": "ID журнала", + "Logs": "Журнал подій", + "MTU": "MTU", + "MTU format is not correct": "Формат MTU неправильний", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "", + "Max RTT \\(ms\\)": "", + "Memory": "", + "Memory Usage": "", + "Message": "Повідомлення", + "Min RTT \\(ms\\)": "", + "Multi-Factor Authentication \\(MFA\\)": "Багатофакторна автентифікація (MFA)", + "Name": "Ім'я", + "Network": "", + "Never Expire": "Ніколи не закінчується", + "New Configuration": "Нова конфігурація", + "New Password": "Новий пароль", + "Next": "Далі", + "Nice to meet you!": "Приємно познайомитися!", + "No": "", + "No Encryption": "", + "No WGDashboard API Key": "Немає API WGDashboard ключа", + "No active job at the moment\\.": "На даний момент немає активних задач.", + "No available IP containing": "Немає доступних IP-адрес", + "No backup yet, click the button above to create backup\\.": "", + "No more available IP can assign": "Більше доступних IP не можна призначити", + "OTP from your authenticator": "OTP від ​​вашого автентифікатора", + "Off": "Вимкнено", + "Official Documentation": "", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "О ні... Це посилання прострочене або недійсне. ", + "On": "Працює", + "Once you deleted this configuration\\:": "", + "Open File": "", + "Optional Settings": "Додаткові налаштування", + "Or you can click the link below:": "Або ви можете натиснути посилання нижче:", + "Other Settings": "", + "Password": "Пароль", + "Peer": "Peer", + "Peer Configuration File": "", + "Peer Default Settings": "", + "Peer Jobs": "Peer задачі", + "Peer Remote Endpoint": "Адреса для підключення Peer", + "Peer Settings": "Налаштування Peers", + "Peer created successfully": "Peer успішно створено", + "Peer data usage reset successfully": "Peer статистика успішно скинуто", + "Peer does not exist": "Peer не існує", + "Peer download started": "Розпочато завантаження Peer", + "Peer job deleted": "Peer задачу видалено", + "Peer job saved": "Задачу для Peer збережено", + "Peer saved": "Peer збережений", + "Peers": "Peers", + "Peers Data Usage": "Використання даних Peers", + "Peers Default Settings": "Налаштування за замовчуванням Peers", + "Peers Settings": "", + "Persistent Keepalive": "Persistent Keepalive", + "Persistent Keepalive format is not correct": "Persistent Keepalive формат неправильний", + "Pick Available IP": "Використати доступну IP", + "Pinging...": "Пінг...", + "Please fill in all required box": "Будь ласка, заповніть усі необхідні поля", + "Please fill in the following fields to finish setup": "Будь ласка, заповніть наступні поля, щоб завершити налаштування", + "Please provide a valid configuration name": "Укажіть вірну назву конфігурації", + "Please provide ipAddress": "Укажіть ipAddress", + "Please provide ipAddress and count": "Укажіть ipAddress та count", + "Please specify amount of peers you want to add": "Будь ласка, вкажіть кількість peers, яких ви хочете додати", + "Please specify an IP Address (v4/v6)": "Будь ласка, вкажіть IP-адресу (v4/v6) ", + "Please specify job": "Будь ласка, вкажіть задачу", + "Please specify one or more peers": "Будь ласка, вкажіть одного або кількох peers", + "Please specify peer and configuration": "Будь ласка, вкажіть peer і конфігурацію", + "Port": "", + "Pre-Shared Key": "Pre-Shared Key", + "Private Key": "Приватний ключ", + "Private key does not match with the public key": "Приватний ключ не збігається з відкритим ключем", + "Processes": "", + "Protocol": "", + "Public Key": "Відкритий ключ", + "QR Code": "QR код", + "Ready": "", + "Real Time Received Data Usage": "Вхідний трафік в реальному часі", + "Real Time Sent Data Usage": "Вихідний трафік в реальному часі", + "Received": "Отримано", + "Refresh": "Оновити", + "Refresh Interval": "Інтервал оновлення", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "Не забудьте видалити / в кінці вашого шляху. Наприклад, /etc/wireguard", + "Repeat New Password": "Повторіть новий пароль", + "Reset": "Скинути", + "Reset Data Usage": "Скинути статистику використання", + "Restore": "", + "Restore Configuration": "", + "Restoring": "", + "Restrict Access": "Обмежити доступ", + "Restrict Peer": "Заблокувати Peer", + "Restricted": "Заблокований", + "Restricted ([0-9]{1,}) peer\\(s\\)": "", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "", + "Restricted Peers?": "", + "Restricting\\.\\.\\.": "Обмежую...", + "Revert": "Скинути", + "Save": "Зберігти", + "Save Configuration": "Зберегти конфігурацію", + "Save Peer": "Зберігти Peer", + "Saving\\.\\.\\.": "Зберігаю...", + "Scan QR Code with the WireGuard App to add peer": "Відскануйте QR-код за допомогою програми WireGuard, щоб додати peer", + "Schedule Jobs": "Розклад задач", + "Search": "", + "Search Peers\\.\\.\\.": "Шукаю Peers...", + "Select All": "", + "Select Peers": "", + "Select a backup you want to restore": "", + "Selected Backup": "", + "Send": "", + "Send From": "", + "Send Test Email": "", + "Sending\\.\\.\\.": "", + "Sent": "Надіслано", + "Sent / Received / Lost Package": "", + "Server": "Сервер", + "Server List": "Список серверів", + "Settings": "Налаштування", + "Setup": "Встановити", + "Share Peer": "Поділитися Peer", + "Share link failed to create. Reason: (.*)": "Не вдалося створити посилання для спільного доступу. Причина: $1", + "Share with Email": "", + "Sharing\\.\\.\\.": "Ділюся...", + "Sign In": "Увійти", + "Sign Out": "Вийти", + "Sign in session ended, please sign in again": "Сеанс входу закінчився, увійдіть знову", + "Signing In\\.\\.\\.": "Вхід...", + "Sorry, your username or password is incorrect.": "Вибачте, ваше ім'я користувача або пароль неправильні.", + "Sort By": "Сортувати за", + "Start Sharing": "Почати ділитися", + "Status": "Статус", + "Step (.*)": "", + "Stop Sharing": "Припинити ділитися", + "Stop Sharing\\.\\.\\.": "Припиняю ділитися...", + "Storage": "", + "Success": "Успішно", + "Swap Memory": "", + "Swap Memory Usage": "", + "System Status": "", + "TOTP verified!": "TOTP підтверджено!", + "Table": "", + "The maximum number of peers can add is (.*)": "$1 це максимальна кількість peers, які можна додати", + "Theme": "", + "This IP is not available: (.*)": "Цей IP недоступний:$1", + "This configuration have ([0-9].*) backups": "", + "This configuration have no backup": "", + "This peer already exist": "Цей peer уже існує", + "This peer does not have any job yet\\.": "Цей peer ще не має задач", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Це буде змінено глобально та застосовуватиметься до всіх Peer QR-кодів та файлу конфігурації.", + "To update this configuration's name, WGDashboard will execute the following operations:": "", + "Toggle When Start Up": "", + "Tools": "Інструменти", + "Total": "Всього", + "Total Received": "Всього отримано", + "Total Sent": "Всього надіслано", + "Total Usage": "Загальний трафік", + "Turning Off\\.\\.\\.": "Вимкнення...", + "Turning On\\.\\.\\.": "Увімкнення...", + "Unsaved Job": "Незбережена задача", + "Untitled Peer": "", + "Update Name": "", + "Update Password": "Оновити пароль", + "Update peer failed when saving the configuration": "Помилка оновлення peer під час збереження конфігурації", + "Update peer failed when updating Allowed IPs": "Не вдалося оновити peer під час оновлення дозволених IP-адрес", + "Update peer failed when updating Pre-Shared Key": "Помилка оновлення Peer під час оновлення Pre-Shared ключа", + "Updated at": "Оновлено о", + "Use your own Private and Public Key": "Використовуйте свій приватний і відкритий ключ", + "Username": "Ім'я користувача", + "WGDashboard API Keys function is disabled": "API WGDashboard функцію вимкнено", + "WGDashboard Account Settings": "Параметри облікового запису WGDashboard", + "WGDashboard Settings": "", + "WGDashboard language update failed": "", + "Welcome to": "Ласкаво просимо до", + "What\\'s the body\\?": "", + "What\\'s the subject\\?": "", + "When should this API Key expire\\?": "Коли має закінчитися термін дії ключа API?", + "Who are you sending to\\?": "", + "WireGuard Configuration Settings": "", + "WireGuard Configurations": "Конфігурація WireGuard", + "WireGuard Configurations Settings": "Параметри конфігурації WireGuard", + "WireGuard configuration path saved": "Шлях до конфігурації WireGuard збережено", + "Yes": "", + "You can add up to (.*) peers": "Ви можете додати до $1 peers", + "You can visit our: ": "", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "У вас ще немає конфігурацій WireGuard. Перевірте теку конфігурації або змініть її в Налаштуваннях. За замовчуванням тека: /etc/wireguard.", + "You don't have any configuration to restore": "", + "You're on the latest version": "Ви використовуєте останню версію", + "\\(At least 8 characters and make sure is strong enough!\\)": "(Принаймні 8 символів і переконайтеся, що він достатньо сильний!)", + "\\(Required for QR Code and Download\\)": "(Необхідно для QR-коду та завантаження)", + "\\(Required\\)": "(Обов'язково)", + "if": "Якщо", + "is": "є", + "larger than": "більше ніж", + "or": "або", + "or click the button below to download the ": "або натисніть кнопку нижче, щоб завантажити ", + "then": "тоді", + "to add your server": "щоб додати свій сервер" +} \ No newline at end of file diff --git a/src/static/locales/zh-CN.json b/src/static/locales/zh-CN.json new file mode 100644 index 0000000..4cf634c --- /dev/null +++ b/src/static/locales/zh-CN.json @@ -0,0 +1,442 @@ +{ + " file": " 文件", + "(.*) Available IP Address": "$1个可用的 IP 地址", + "(.*) Minutes": "$1 分钟", + "(.*) Seconds": "$1 秒", + "(.*) Used": "已使用 $1", + "(.*) in group (.*)\\?": "在 $2 用户组的 $1", + "(.*) is off": "$1 已停用", + "(.*) is on": "$1 已启用", + "([0-9].*) Backups?": "$1个备份", + "([0-9].*) Clients*": "$1位用户", + "([0-9].*) Peers?": "$1 个端点", + "([0-9]{1,}) Interfaces": "$1 个网络接口", + "([0-9]{1,}) Partitions": "$1 个分区", + "(v[0-9.]{1,}) is now available for update!": "有新版本 $1 可更新!", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. 请使用您选择的验证器扫描以下二维码来生成一次性验证码", + "2\\. Enter the TOTP generated by your authenticator to verify": "2. 请输入验证器生成的一次性验证码进行验证", + "API Key": "API 秘钥", + "API Key created": "API 秘钥创建成功", + "API Key deleted": "API 秘钥删除成功", + "API Keys": "API 秘钥", + "API Keys function is failed to disable": "API 秘钥功能停用失败", + "API Keys function is failed to enable": "API 秘钥功能开启失败", + "API Keys function is successfully disabled": "API 秘钥功能停用成功", + "API Keys function is successfully enabled": "API 秘钥功能开启成功", + "Access Remote Server": "访问远程服务器", + "Access Restricted": "已限制访问", + "Account Settings": "账户设定", + "Active Jobs": "未运行任务", + "Add": "创建", + "Add Peers": "创建端点", + "Add Template": "添加模板", + "Add Webhook": "添加网络钩子", + "Adding\\.\\.\\.": "创建中...", + "Address": "网络地址", + "Advanced Options": "高级选项", + "All": "全部", + "All Active Jobs": "所有未运行任务", + "All connected peers will get disconnected": "所有已连接的端点会断开", + "Allow Access": "解除限制访问", + "Allow access successfully": "解除限制访问成功", + "Allowed IP already taken by another peer": "允许的 IP 地址已经被别的端点占用", + "Allowed IPs": "允许的 IP 地址", + "Allowed IPs Validation": "验证允许的 IP 地址", + "Allowed IPs already taken by another peer": "允许的 IP 地址已被其他端点使用", + "Allowed IPs is invalid": "允许的 IP 地址错误", + "Allowing Access\\.\\.\\.": "解除限制访问中...", + "AmneziaWG Peer Setting": "AmneziaWG 端点设置", + "Appearance": "外观", + "Are you sure to delete": "您确定要删除", + "Are you sure to delete assignment for": "您确定要移除以下用户的分配吗?", + "Are you sure to delete this API key\\?": "确定删除此 API 秘钥?", + "Are you sure to delete this backup\\?": "您确定要删除此备份吗?", + "Are you sure to delete this client\\?": "您确定要删除此用户吗?", + "Are you sure to delete this configuration\\?": "您确定要删除此配置吗?", + "Are you sure to delete this peer\\?": "您确定要删除此端点吗?", + "Are you sure to restore this backup\\?": "您确定要恢复此备份吗?", + "Assign Peer": "分配端点", + "Assign Peer to Client": "给用户分配端点", + "Assign successfully!": "分配成功!", + "Assign to Clients": "分配给用户", + "Assigned Clients": "已分配用户", + "Assigned Peers": "已分配端点", + "Available Peers": "可分配端点", + "Average / Min / Max Round Trip Time": "平均 / 最低 / 最高来回通讯延迟", + "Average RTT \\(ms\\)": "平均来回时间(微秒)", + "Back": "返回", + "Backup": "备份", + "Backup & Restore": "备份及恢复", + "Backup Date": "备份日期", + "Backup not selected": "没有选择备份", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "配置文件 (.conf) 以及相关的数据库文件会被删除", + "Bulk Add": "批量添加", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "如果选择批量添加端点,系统会自动生成每一个端点的名称,并且会自动安排可用的 IP 地址。", + "CPU": "中央处理器", + "CPU Usage": "中央处理器用量", + "Cancel": "取消", + "Checking backups...": "检查备份中...", + "Checking for update...": "正在检查是否有新版本...", + "Clear Selection": "清除选择", + "Click": "点击", + "Click to change a backup": "点击更换备份", + "Client ID": "用户ID", + "Client Name": "用户名字", + "Client Side App": "用户平台", + "Clients": "用户", + "Clients Settings": "用户设定", + "Close": "关闭", + "Complete": "完成", + "Configuration": "配置", + "Configuration File": "配置文件", + "Configuration Name": "配置名称", + "Configuration Settings": "配置设定", + "Configuration deleted": "配置删除成功", + "Configuration does not exist": "此配置不存在", + "Configuration name already exist\\.": "配置名称已存在。", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "配置名称只能含有15个小/大写英文字母,数字,下划线,等于号,加号,小数点或短横线。", + "Configuration name is invalid. Possible reasons:": "配置名称不正确。可能的原因:", + "Configuration restored": "配置恢复成功", + "Configuration saved": "配置保存成功", + "Configurations": "配置", + "Configurations Directory": "配置文件路径", + "Confirm \\& edit restore information": "确认和编辑备份信息", + "Confirm password": "确认密码", + "Connected": "已连接", + "Connected Peers": "已连接端点", + "Contain": "含有", + "Content Type": "内容格式", + "Count": "数量", + "Create": "创建", + "Create API Key": "创建 API 秘钥", + "Create Backup": "创建备份", + "Create an account": "创建账户", + "Create templates to keep track a list of available Subnets \\& Listen Ports\n": "创建模板以计算出可用的子网地址以及监听端口", + "Creating\\.\\.\\.": "创建中...", + "Current Password": "当前密码", + "Current Version:": "当前版本: ", + "Currently the peer is not sharing": "此端点未被共享", + "Custom Headers": "自定义请求标头", + "DNS": "域名系统(DNS)", + "DNS format is incorrect": "域名系统(DNS)格式不正确", + "Danger Zone": "危险区域", + "Dark": "简约黑", + "Dashboard IP Address \\& Listen Port": "面板 IP地址 & 监听端口", + "Dashboard Language": "面板语言", + "Dashboard Theme": "面板主题", + "Dashboard language update failed": "面板语言更新失败", + "Data": "数据", + "Database File": "数据库文件", + "Date": "日期", + "Datetime": "日期时间", + "Delete": "删除", + "Delete Client": "删除用户", + "Delete Configuration": "删除配置", + "Delete Peer": "删除端点", + "Delete current configuration's database table and \\.conf file": "删除当前配置的数据库表以及.conf文件", + "Deleted ([0-9]{1,}) peer\\(s\\)": "删除了$1个端点", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "成功删除了$1个端点,失败删除了$2个端点", + "Deleting...": "删除中...", + "Details": "详情", + "Disabled": "已停用", + "Disconnected": "已断开", + "Discord Server": "Discord 服务器", + "Display": "显示设置", + "Display As": "显示为", + "Don't think that's a good idea": "我不觉得这是一个好主意", + "Done": "完成", + "Download": "下载", + "Download All": "全部下载", + "Download Finished": "下载完成", + "Download \\& QR Code is not available due to no private key set for this peer": "下载以及二维码功能不可用,需要填写此端点的秘钥", + "Downloading": "正在下载", + "Duplicate current configuration's database table and \\.conf file with the new name": "使用新名称克隆当前配置的数据库表以及.conf文件", + "Duration:": "时长", + "Edit": "编辑", + "Edit Raw Configuration File": "编辑配置源文件", + "Email": "邮箱", + "Email Account": "邮箱账号", + "Email Body Template": "邮件正文模板", + "Email sent successfully!": "邮件发送成功!", + "Enable Webhook": "启用网络钩子", + "Enabled": "已启用", + "Encryption": "加密方式", + "Ended At": "结束于", + "Endpoint Allowed IPs": "终结点允许的 IP 地址", + "Endpoint Allowed IPs format is incorrect": "终结点允许的 IP 地址格式不正确", + "Enter Email or Name to Search": "输入邮箱地址或用户名字来搜索", + "Enter IP Address / Hostname": "输入 IP 地址 / 域名", + "Enter IP Address/CIDR": "输入 IP 地址/前缀长度", + "Enter a password": "输入密码", + "Enter an username you like": "输入一个您喜欢的用户名", + "Expire At": "过期于", + "FROM ": "来自 ", + "Failed": "失败", + "Failed to add peers in bulk": "批量创建端点失败", + "Failed to allow access of peer (.*)": "此端点解除限制访问失败:$1", + "Failed to check available update": "获取更新失败", + "Failed to save configuration through WireGuard": "使用 WireGuard 保存配置失败", + "File": "文件", + "Filter": "筛选", + "Generating key pairs by bulk failed": "生成公钥秘钥失败了", + "Geolocation": "地理位置", + "Grid": "网格", + "Groups": "用户组", + "Header": "请求标头", + "Help": "帮助", + "Home": "主页", + "Hop": "跳数", + "How many peers you want to add\\?": "您想添加多少个端点?", + "I don't need MFA": "我不需要多重身份验证 (MFA)", + "IP Address": "IP 地址", + "IP Address / Hostname": "IP 地址 / 域名", + "IP Address/CIDR": "IP 地址/前缀长度", + "IP Address/CIDR is invalid": "IP 地址/前缀长度格式错误", + "If you're sure, please type in the configuration name below and click Delete": "如果您确定,请在下方输入此配置的名称并点击删除", + "Include configuration file as an attachment": "添加配置文件为附件", + "Invalid Port": "错误的端口", + "Is Alive": "在线", + "Job": "任务", + "Job ID": "任务 ID", + "Jobs Logs": "任务日志", + "Key": "秘钥", + "Language": "语言", + "Latest Handshake Time": "最新握手时间", + "Latest Session": "最新活动", + "Light": "简约白", + "Link expire date failed to update. Reason: (.*)": "分享链接过期时间更新失败。原因:$1", + "Link expire date updated": "分享链接过期时间更新成功", + "List": "列表", + "Listen Port": "监听端口", + "Live Preview": "实时预览", + "Local": "本地", + "Log ID": "任务 ID", + "Logs": "日志", + "MTU": "最大传输单元", + "MTU format is not correct": "最大传输单元格式不正确", + "Manage": "管理", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "更改 IP 地址或监听端口后需要手动重启 WGDashboard 以使用最新的设置", + "Max RTT \\(ms\\)": "最高来回时间(微秒)", + "Memory": "内存", + "Memory Usage": "内存用量", + "Message": "消息", + "Min RTT \\(ms\\)": "最低来回时间(微秒)", + "Multi-Factor Authentication \\(MFA\\)": "多重身份验证 (MFA)", + "Name": "名称", + "Network": "网络", + "Never Expire": "从不过期", + "New Configuration": "新配置", + "New Password": "新密码", + "Next": "下一步", + "Nice to meet you!": "很高兴见到您!", + "No": "否", + "No Encryption": "无加密", + "No Templates": "没有模板", + "No WGDashboard API Key": "没有 WGDashboard API 秘钥", + "No active job at the moment\\.": "没有未运行的任务", + "No available IP containing": "没有可用的 IP 地址含有 ", + "No backup yet, click the button above to create backup\\.": "还没有任何备份,点击上方按钮创建", + "No more available IP can assign": "没有更多可用的 IP 可以分配了", + "No peer assigned to this client": "此用户没有分配端点", + "No result": "没有结果", + "Notes": "笔记", + "OTP from your authenticator": "您多重身份验证器的一次性验证码", + "Off": "已停用", + "Official Documentation": "官方文档", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "噢不!此链接已过期或不正确。", + "On": "已启用", + "Once you deleted this configuration\\:": "当您删除了此配置后:", + "Only apply to peers in this configuration": "只应用到此配置的端点", + "Open File": "打开文件", + "Optional Settings": "可选设定", + "Or you can click the link below:": "或者您可以点击以下链接:", + "Other Settings": "其它设定", + "Override Peer Settings": "覆盖端点默认设定", + "Password": "密码", + "Path": "路径", + "Payload URL": "链接", + "Peer": "端点", + "Peer Configuration File": "端点配置文件", + "Peer Created": "创建端点", + "Peer Default Settings": "端点默认设定", + "Peer Deleted": "删除端点", + "Peer Details": "端点详情", + "Peer Historical Endpoints": "端点历史末端地址", + "Peer Historical Sessions": "端点历史活动", + "Peer Jobs": "端点任务", + "Peer Remote Endpoint": "端点末端地址", + "Peer Settings": "端点设定", + "Peer Updated": "更新端点", + "Peer created successfully": "成功创建端点", + "Peer data usage reset successfully": "端点数据重置成功", + "Peer does not exist": "此端点不存在", + "Peer download started": "端点文件下载开始", + "Peer job deleted": "端点任务删除成功", + "Peer job saved": "端点任务保存成功", + "Peer saved": "端点保存成功", + "Peers": "端点", + "Peers Data Usage": "端点的数据用量", + "Peers Default Settings": "端点默认设置", + "Peers Settings": "端点设定", + "Persistent Keepalive": "持久保持活动", + "Persistent Keepalive format is not correct": "持久保持活动格式不正确", + "Pick Available IP": "选择可用的 IP 地址", + "Pinging...": "尝试连接中...", + "Please fill in all required box": "请填写所有必填项", + "Please fill in the following fields to finish setup": "请填入以下信息来完成初始化设置", + "Please provide a valid configuration name": "请提供一个正确的配置名称", + "Please provide ipAddress": "请提供 ipAddress", + "Please provide ipAddress and count": "请提供 ipAddress 和 count", + "Please specify amount of peers you want to add": "请提供批量添加端点的数量", + "Please specify an IP Address (v4/v6)": "请提供一个 IP 地址 (v4或v6)", + "Please specify job": "请提供任务", + "Please specify one or more peers": "请提供一个或更多端点", + "Please specify peer and configuration": "请提供配置名称以及端点", + "Port": "端口", + "Pre-Shared Key": "共享秘钥", + "Previous Sessions": "以往活动", + "Private Key": "秘钥", + "Private key does not match with the public key": "秘钥与公钥不匹配", + "Processes": "进程", + "Protocol": "协议", + "Public Key": "公钥", + "QR Code": "二维码", + "Ready": "准备就绪", + "Real Time Received Data Usage": "实时接收数据量", + "Real Time Sent Data Usage": "实时发送数据量", + "Received": "接收数据", + "Refresh": "刷新", + "Refresh Interval": "刷新间隔", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "请把路径最后的 /(左斜杠)移除,例如:/etc/wireguard", + "Remove Icon": "移除图标", + "Repeat New Password": "重复新密码", + "Reset": "重置", + "Reset Data Usage": "重置数据用量", + "Restore": "恢复", + "Restore Configuration": "恢复配置", + "Restoring": "恢复中...", + "Restrict Access": "限制访问", + "Restrict Peer": "限制端点", + "Restricted": "已限制端点", + "Restricted ([0-9]{1,}) peer\\(s\\)": "限制访问了$1个端点", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "成功限制访问了$1个端点,失败限制访问了$2个端点", + "Restricted Peers?": "已限制访问端点", + "Restricting\\.\\.\\.": "限制访问中...", + "Revert": "撤销更改", + "Save": "保存", + "Save Configuration": "保存配置", + "Save Peer": "保存端点", + "Saving\\.\\.\\.": "保存中...", + "Scan QR Code with the WireGuard App to add peer": "使用 WireGuard APP 扫描以下二维码来添加端点", + "Schedule Jobs": "计划任务", + "Search": "搜索", + "Search Clients\\.\\.\\.": "搜索用户...", + "Search Icon": "搜索图标", + "Search Peers\\.\\.\\.": "搜索端点...", + "Select All": "选择所有", + "Select Peers": "选择端点", + "Select a backup you want to restore": "选择一个您想恢复的配置", + "Selected Backup": "已选择备份", + "Send": "发送", + "Send From": "发送自", + "Send Test Email": "发送测试邮件", + "Sending\\.\\.\\.": "发送中...", + "Sent": "发送数据", + "Sent / Received / Lost Package": "发送 / 接收 / 丢失数据包", + "Server": "服务器", + "Server List": "服务器列表", + "Sessions": "活动", + "Settings": "设定", + "Setup": "设置", + "Share Peer": "分享端点", + "Share link failed to create. Reason: (.*)": "端点分享链接生成失败。原因:$1", + "Share with Email": "使用邮件分享", + "Sharing\\.\\.\\.": "分享中...", + "Show All Peers": "显示所有端点", + "Sign In": "登录", + "Sign Out": "退出登录", + "Sign in session ended, please sign in again": "登录已过期,请重新登录", + "Signing In\\.\\.\\.": "正在登录...", + "Sorry, your username or password is incorrect.": "对不起,您的用户名或密码不正确", + "Sort By": "排列方式", + "Start Sharing": "开始分享", + "Started At": "开始于", + "Status": "状态", + "Step (.*)": "第$1步", + "Stop Sharing": "停止分享", + "Stop Sharing\\.\\.\\.": "停止分享中...", + "Storage": "储存", + "Subnets \\& Listen Ports Templates": "子网 & 监听端口模板", + "Subscribed Actions": "已订阅的动作", + "Success": "成功", + "Swap Memory": "交换区内存", + "Swap Memory Usage": "交换区内存用量", + "System Status": "系统状态", + "TOTP verified!": "一次性验证码验证成功!", + "Table": "路由表", + "Tag": "标签", + "Tag Peer": "标签端点", + "Tags": "标签", + "The maximum number of peers can add is (.*)": "最多只能添加$1个端点", + "Theme": "主题", + "This IP is not available: (.*)": "此 IP 地址不可用:$1", + "This configuration have ([0-9].*) backups": "此配置有$1个备份", + "This configuration have no backup": "此配置没有备份", + "This peer already exist": "此端点已存在", + "This peer does not have any job yet\\.": "此端点还没有任何任务", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "更改这个设定会应用到所有端点的配置文件和配置二维码", + "To update this configuration's name, WGDashboard will execute the following operations:": "如果更新这个配置名称,WGDashboard会执行以下操作:", + "Toggle When Start Up": "运行后启动配置", + "Tools": "工具箱", + "Total": "总数据", + "Total Received": "总接收数据用量", + "Total Sent": "总发送数据用量", + "Total Usage": "总数据用量", + "Turning Off\\.\\.\\.": "停用中...", + "Turning On\\.\\.\\.": "启用中...", + "Unsaved Job": "未保存任务", + "Untitled Peer": "未命名端点", + "Update Name": "更新名称", + "Update Password": "更新密码", + "Update peer failed when saving the configuration": "配置保存端点失败", + "Update peer failed when updating Allowed IPs": "更新允许的 IP 地址失败", + "Update peer failed when updating Pre-Shared Key": "更新共享密钥失败", + "Updated at": "更新于", + "Use your own Private and Public Key": "使用您自己的秘钥和公钥", + "Username": "用户名", + "Value": "值", + "Verify SSL": "验证SSL", + "WGDashboard API Keys function is disabled": "WGDashboard 的 API 秘钥功能并未开启", + "WGDashboard Account Settings": "WGDashboard 账户设定", + "WGDashboard Settings": "WGDashboard 设定", + "WGDashboard language update failed": "WGDashboard 语言更新失败", + "WGDashboard will sent a POST Request to the URL below with details of any subscribed events\\.": "WGDashboard会发送一个包含订阅内容的POST请求到以下指定的URL", + "We highly suggest to enable SSL verification": "我们墙裂推荐您开启SSL验证", + "Webhooks*": "网络钩子", + "Welcome to": "欢迎来到", + "What\\'s the body\\?": "正文是什么?", + "What\\'s the subject\\?": "主题是什么?", + "When should this API Key expire\\?": "这个 API 秘钥什么时候过期呢?", + "Who are you sending to\\?": "您想发送给谁?", + "WireGuard Configuration Settings": "WireGuard 配置设定", + "WireGuard Configurations": "WireGuard 配置", + "WireGuard Configurations Settings": "WireGuard 配置设定", + "WireGuard configuration path saved": "WireGuard 配置路径保存成功", + "Yes": "是", + "You can add up to (.*) peers": "您最多可以添加 $1 个端点", + "You can visit our: ": "您可以访问我们的:", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "您还没有任何WireGuard配置。请检查您的配置文件夹或前往设置更改路径。默认文件夹是 /etc/wireguard", + "You don't have any configuration to restore": "您没有任何配置备份可以恢复", + "You're on the latest version": "已经是最新版本", + "\\(At least 8 characters and make sure is strong enough!\\)": "(至少8个字符或以上并且确保它足够复杂哟!)", + "\\(Required for QR Code and Download\\)": "(二维码以及下载功能需要填写秘钥)", + "\\(Required\\)": "(必填项)", + "^([0-9].*) Sessions*$": "$1个活动", + "if": "如果", + "is": "是", + "larger than": "大于", + "or": "或", + "or click the button below to download the ": "或点击下面的按钮下载 ", + "then": "那就", + "to add your server": "添加您的服务器" +} \ No newline at end of file diff --git a/src/static/locales/zh-HK.json b/src/static/locales/zh-HK.json new file mode 100644 index 0000000..0701cdf --- /dev/null +++ b/src/static/locales/zh-HK.json @@ -0,0 +1,442 @@ +{ + " file": " 文件", + "(.*) Available IP Address": "$1个可用的 IP 地址", + "(.*) Minutes": "$1 分钟", + "(.*) Seconds": "$1 秒", + "(.*) Used": "已使用 $1", + "(.*) in group (.*)\\?": "在 $2 用戶組的 $1", + "(.*) is off": "$1 已停用", + "(.*) is on": "$1 已啟用", + "([0-9].*) Backups?": "$1个備份", + "([0-9].*) Clients*": "$1位用戶", + "([0-9].*) Peers?": "$1 个端点", + "([0-9]{1,}) Interfaces": "$1 个網络接口", + "([0-9]{1,}) Partitions": "$1 个分区", + "(v[0-9.]{1,}) is now available for update!": "有新版本 $1 可更新!", + "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. 请使用您选择的驗证器扫描以下二维码来生成一次性驗证码", + "2\\. Enter the TOTP generated by your authenticator to verify": "2. 请輸入驗证器生成的一次性驗证码进行驗证", + "API Key": "API 秘钥", + "API Key created": "API 秘钥创建成功", + "API Key deleted": "API 秘钥刪除成功", + "API Keys": "API 秘钥", + "API Keys function is failed to disable": "API 秘钥功能停用失败", + "API Keys function is failed to enable": "API 秘钥功能開啟失败", + "API Keys function is successfully disabled": "API 秘钥功能停用成功", + "API Keys function is successfully enabled": "API 秘钥功能開啟成功", + "Access Remote Server": "访问远程服務器", + "Access Restricted": "已限制访问", + "Account Settings": "账戶設定", + "Active Jobs": "未运行任務", + "Add": "创建", + "Add Peers": "创建端点", + "Add Template": "添加模板", + "Add Webhook": "添加網络钩子", + "Adding\\.\\.\\.": "创建中...", + "Address": "網络地址", + "Advanced Options": "高级选项", + "All": "全部", + "All Active Jobs": "所有未运行任務", + "All connected peers will get disconnected": "所有已連接的端点会斷開", + "Allow Access": "解除限制访问", + "Allow access successfully": "解除限制访问成功", + "Allowed IP already taken by another peer": "允许的 IP 地址已经被别的端点占用", + "Allowed IPs": "允许的 IP 地址", + "Allowed IPs Validation": "驗证允许的 IP 地址", + "Allowed IPs already taken by another peer": "允许的 IP 地址已被其他端点使用", + "Allowed IPs is invalid": "允许的 IP 地址错误", + "Allowing Access\\.\\.\\.": "解除限制访问中...", + "AmneziaWG Peer Setting": "AmneziaWG 端点設置", + "Appearance": "外观", + "Are you sure to delete": "您确定要刪除", + "Are you sure to delete assignment for": "您确定要移除以下用戶的分配吗?", + "Are you sure to delete this API key\\?": "确定刪除此 API 秘钥?", + "Are you sure to delete this backup\\?": "您确定要刪除此備份吗?", + "Are you sure to delete this client\\?": "您确定要刪除此用戶吗?", + "Are you sure to delete this configuration\\?": "您确定要刪除此配置吗?", + "Are you sure to delete this peer\\?": "您确定要刪除此端点吗?", + "Are you sure to restore this backup\\?": "您确定要恢復此備份吗?", + "Assign Peer": "分配端点", + "Assign Peer to Client": "给用戶分配端点", + "Assign successfully!": "分配成功!", + "Assign to Clients": "分配给用戶", + "Assigned Clients": "已分配用戶", + "Assigned Peers": "已分配端点", + "Available Peers": "可分配端点", + "Average / Min / Max Round Trip Time": "平均 / 最低 / 最高来回通讯延迟", + "Average RTT \\(ms\\)": "平均来回时间(微秒)", + "Back": "返回", + "Backup": "備份", + "Backup & Restore": "備份及恢復", + "Backup Date": "備份日期", + "Backup not selected": "没有选择備份", + "Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "配置文件 (.conf) 以及相關的数据庫文件会被刪除", + "Bulk Add": "批量添加", + "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "如果选择批量添加端点,系统会自動生成每一个端点的名称,并且会自動安排可用的 IP 地址。", + "CPU": "中央处理器", + "CPU Usage": "中央处理器用量", + "Cancel": "取消", + "Checking backups...": "检查備份中...", + "Checking for update...": "正在检查是否有新版本...", + "Clear Selection": "清除选择", + "Click": "点击", + "Click to change a backup": "点击更换備份", + "Client ID": "用戶ID", + "Client Name": "用戶名字", + "Client Side App": "用戶平臺", + "Clients": "用戶", + "Clients Settings": "用戶設定", + "Close": "關闭", + "Complete": "完成", + "Configuration": "配置", + "Configuration File": "配置文件", + "Configuration Name": "配置名称", + "Configuration Settings": "配置設定", + "Configuration deleted": "配置刪除成功", + "Configuration does not exist": "此配置不存在", + "Configuration name already exist\\.": "配置名称已存在。", + "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "配置名称只能含有15个小/大寫英文字母,数字,下划线,等于號,加號,小数点或短横线。", + "Configuration name is invalid. Possible reasons:": "配置名称不正确。可能的原因:", + "Configuration restored": "配置恢復成功", + "Configuration saved": "配置保存成功", + "Configurations": "配置", + "Configurations Directory": "配置文件路径", + "Confirm \\& edit restore information": "确认和编辑備份信息", + "Confirm password": "确认密码", + "Connected": "已連接", + "Connected Peers": "已連接端点", + "Contain": "含有", + "Content Type": "内容格式", + "Count": "数量", + "Create": "创建", + "Create API Key": "创建 API 秘钥", + "Create Backup": "创建備份", + "Create an account": "创建账戶", + "Create templates to keep track a list of available Subnets \\& Listen Ports\n": "创建模板以计算出可用的子網地址以及监听端口", + "Creating\\.\\.\\.": "创建中...", + "Current Password": "當前密码", + "Current Version:": "當前版本: ", + "Currently the peer is not sharing": "此端点未被共享", + "Custom Headers": "自定义请求标头", + "DNS": "域名系统(DNS)", + "DNS format is incorrect": "域名系统(DNS)格式不正确", + "Danger Zone": "危险区域", + "Dark": "简约黑", + "Dashboard IP Address \\& Listen Port": "面板 IP地址 & 监听端口", + "Dashboard Language": "面板语言", + "Dashboard Theme": "面板主题", + "Dashboard language update failed": "面板语言更新失败", + "Data": "数据", + "Database File": "数据庫文件", + "Date": "日期", + "Datetime": "日期时间", + "Delete": "刪除", + "Delete Client": "刪除用戶", + "Delete Configuration": "刪除配置", + "Delete Peer": "刪除端点", + "Delete current configuration's database table and \\.conf file": "刪除當前配置的数据庫表以及.conf文件", + "Deleted ([0-9]{1,}) peer\\(s\\)": "刪除了$1个端点", + "Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "成功刪除了$1个端点,失败刪除了$2个端点", + "Deleting...": "刪除中...", + "Details": "详情", + "Disabled": "已停用", + "Disconnected": "已斷開", + "Discord Server": "Discord 服務器", + "Display": "顯示設置", + "Display As": "顯示为", + "Don't think that's a good idea": "我不觉得这是一个好主意", + "Done": "完成", + "Download": "下载", + "Download All": "全部下载", + "Download Finished": "下载完成", + "Download \\& QR Code is not available due to no private key set for this peer": "下载以及二维码功能不可用,需要填寫此端点的秘钥", + "Downloading": "正在下载", + "Duplicate current configuration's database table and \\.conf file with the new name": "使用新名称克隆當前配置的数据庫表以及.conf文件", + "Duration:": "时长", + "Edit": "编辑", + "Edit Raw Configuration File": "编辑配置源文件", + "Email": "邮箱", + "Email Account": "邮箱账號", + "Email Body Template": "邮件正文模板", + "Email sent successfully!": "邮件发送成功!", + "Enable Webhook": "啟用網络钩子", + "Enabled": "已啟用", + "Encryption": "加密方式", + "Ended At": "结束于", + "Endpoint Allowed IPs": "終结点允许的 IP 地址", + "Endpoint Allowed IPs format is incorrect": "終结点允许的 IP 地址格式不正确", + "Enter Email or Name to Search": "輸入邮箱地址或用戶名字来搜索", + "Enter IP Address / Hostname": "輸入 IP 地址 / 域名", + "Enter IP Address/CIDR": "輸入 IP 地址/前缀长度", + "Enter a password": "輸入密码", + "Enter an username you like": "輸入一个您喜欢的用戶名", + "Expire At": "过期于", + "FROM ": "来自 ", + "Failed": "失败", + "Failed to add peers in bulk": "批量创建端点失败", + "Failed to allow access of peer (.*)": "此端点解除限制访问失败:$1", + "Failed to check available update": "获取更新失败", + "Failed to save configuration through WireGuard": "使用 WireGuard 保存配置失败", + "File": "文件", + "Filter": "筛选", + "Generating key pairs by bulk failed": "生成公钥秘钥失败了", + "Geolocation": "地理位置", + "Grid": "網格", + "Groups": "用戶組", + "Header": "请求标头", + "Help": "帮助", + "Home": "主頁", + "Hop": "跳数", + "How many peers you want to add\\?": "您想添加多少个端点?", + "I don't need MFA": "我不需要多重身份驗证 (MFA)", + "IP Address": "IP 地址", + "IP Address / Hostname": "IP 地址 / 域名", + "IP Address/CIDR": "IP 地址/前缀长度", + "IP Address/CIDR is invalid": "IP 地址/前缀长度格式错误", + "If you're sure, please type in the configuration name below and click Delete": "如果您确定,请在下方輸入此配置的名称并点击刪除", + "Include configuration file as an attachment": "添加配置文件为附件", + "Invalid Port": "错误的端口", + "Is Alive": "在线", + "Job": "任務", + "Job ID": "任務 ID", + "Jobs Logs": "任務日志", + "Key": "秘钥", + "Language": "语言", + "Latest Handshake Time": "最新握手时间", + "Latest Session": "最新活動", + "Light": "简约白", + "Link expire date failed to update. Reason: (.*)": "分享鏈接过期时间更新失败。原因:$1", + "Link expire date updated": "分享鏈接过期时间更新成功", + "List": "列表", + "Listen Port": "监听端口", + "Live Preview": "实时预覽", + "Local": "本地", + "Log ID": "任務 ID", + "Logs": "日志", + "MTU": "最大传輸单元", + "MTU format is not correct": "最大传輸单元格式不正确", + "Manage": "管理", + "Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "更改 IP 地址或监听端口后需要手動重啟 WGDashboard 以使用最新的設置", + "Max RTT \\(ms\\)": "最高来回时间(微秒)", + "Memory": "内存", + "Memory Usage": "内存用量", + "Message": "消息", + "Min RTT \\(ms\\)": "最低来回时间(微秒)", + "Multi-Factor Authentication \\(MFA\\)": "多重身份驗证 (MFA)", + "Name": "名称", + "Network": "網络", + "Never Expire": "从不过期", + "New Configuration": "新配置", + "New Password": "新密码", + "Next": "下一步", + "Nice to meet you!": "很高兴见到您!", + "No": "否", + "No Encryption": "无加密", + "No Templates": "没有模板", + "No WGDashboard API Key": "没有 WGDashboard API 秘钥", + "No active job at the moment\\.": "没有未运行的任務", + "No available IP containing": "没有可用的 IP 地址含有 ", + "No backup yet, click the button above to create backup\\.": "还没有任何備份,点击上方按钮创建", + "No more available IP can assign": "没有更多可用的 IP 可以分配了", + "No peer assigned to this client": "此用戶没有分配端点", + "No result": "没有结果", + "Notes": "笔记", + "OTP from your authenticator": "您多重身份驗证器的一次性驗证码", + "Off": "已停用", + "Official Documentation": "官方文档", + "Oh no\\.\\.\\. This link is either expired or invalid\\.": "噢不!此鏈接已过期或不正确。", + "On": "已啟用", + "Once you deleted this configuration\\:": "當您刪除了此配置后:", + "Only apply to peers in this configuration": "只应用到此配置的端点", + "Open File": "打開文件", + "Optional Settings": "可选設定", + "Or you can click the link below:": "或者您可以点击以下鏈接:", + "Other Settings": "其它設定", + "Override Peer Settings": "覆盖端点默认設定", + "Password": "密码", + "Path": "路径", + "Payload URL": "鏈接", + "Peer": "端点", + "Peer Configuration File": "端点配置文件", + "Peer Created": "创建端点", + "Peer Default Settings": "端点默认設定", + "Peer Deleted": "刪除端点", + "Peer Details": "端点详情", + "Peer Historical Endpoints": "端点曆史末端地址", + "Peer Historical Sessions": "端点曆史活動", + "Peer Jobs": "端点任務", + "Peer Remote Endpoint": "端点末端地址", + "Peer Settings": "端点設定", + "Peer Updated": "更新端点", + "Peer created successfully": "成功创建端点", + "Peer data usage reset successfully": "端点数据重置成功", + "Peer does not exist": "此端点不存在", + "Peer download started": "端点文件下载開始", + "Peer job deleted": "端点任務刪除成功", + "Peer job saved": "端点任務保存成功", + "Peer saved": "端点保存成功", + "Peers": "端点", + "Peers Data Usage": "端点的数据用量", + "Peers Default Settings": "端点默认設置", + "Peers Settings": "端点設定", + "Persistent Keepalive": "持久保持活動", + "Persistent Keepalive format is not correct": "持久保持活動格式不正确", + "Pick Available IP": "选择可用的 IP 地址", + "Pinging...": "尝試連接中...", + "Please fill in all required box": "请填寫所有必填项", + "Please fill in the following fields to finish setup": "请填入以下信息来完成初始化設置", + "Please provide a valid configuration name": "请提供一个正确的配置名称", + "Please provide ipAddress": "请提供 ipAddress", + "Please provide ipAddress and count": "请提供 ipAddress 和 count", + "Please specify amount of peers you want to add": "请提供批量添加端点的数量", + "Please specify an IP Address (v4/v6)": "请提供一个 IP 地址 (v4或v6)", + "Please specify job": "请提供任務", + "Please specify one or more peers": "请提供一个或更多端点", + "Please specify peer and configuration": "请提供配置名称以及端点", + "Port": "端口", + "Pre-Shared Key": "共享秘钥", + "Previous Sessions": "以往活動", + "Private Key": "秘钥", + "Private key does not match with the public key": "秘钥與公钥不匹配", + "Processes": "进程", + "Protocol": "协议", + "Public Key": "公钥", + "QR Code": "二维码", + "Ready": "准備就绪", + "Real Time Received Data Usage": "实时接收数据量", + "Real Time Sent Data Usage": "实时发送数据量", + "Received": "接收数据", + "Refresh": "刷新", + "Refresh Interval": "刷新间隔", + "Remember to remove / at the end of your path. e.g /etc/wireguard": "请把路径最后的 /(左斜杠)移除,例如:/etc/wireguard", + "Remove Icon": "移除圖标", + "Repeat New Password": "重復新密码", + "Reset": "重置", + "Reset Data Usage": "重置数据用量", + "Restore": "恢復", + "Restore Configuration": "恢復配置", + "Restoring": "恢復中...", + "Restrict Access": "限制访问", + "Restrict Peer": "限制端点", + "Restricted": "已限制端点", + "Restricted ([0-9]{1,}) peer\\(s\\)": "限制访问了$1个端点", + "Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "成功限制访问了$1个端点,失败限制访问了$2个端点", + "Restricted Peers?": "已限制访问端点", + "Restricting\\.\\.\\.": "限制访问中...", + "Revert": "撤销更改", + "Save": "保存", + "Save Configuration": "保存配置", + "Save Peer": "保存端点", + "Saving\\.\\.\\.": "保存中...", + "Scan QR Code with the WireGuard App to add peer": "使用 WireGuard APP 扫描以下二维码来添加端点", + "Schedule Jobs": "计划任務", + "Search": "搜索", + "Search Clients\\.\\.\\.": "搜索用戶...", + "Search Icon": "搜索圖标", + "Search Peers\\.\\.\\.": "搜索端点...", + "Select All": "选择所有", + "Select Peers": "选择端点", + "Select a backup you want to restore": "选择一个您想恢復的配置", + "Selected Backup": "已选择備份", + "Send": "发送", + "Send From": "发送自", + "Send Test Email": "发送測試邮件", + "Sending\\.\\.\\.": "发送中...", + "Sent": "发送数据", + "Sent / Received / Lost Package": "发送 / 接收 / 丢失数据包", + "Server": "服務器", + "Server List": "服務器列表", + "Sessions": "活動", + "Settings": "設定", + "Setup": "設置", + "Share Peer": "分享端点", + "Share link failed to create. Reason: (.*)": "端点分享鏈接生成失败。原因:$1", + "Share with Email": "使用邮件分享", + "Sharing\\.\\.\\.": "分享中...", + "Show All Peers": "顯示所有端点", + "Sign In": "登录", + "Sign Out": "退出登录", + "Sign in session ended, please sign in again": "登录已过期,请重新登录", + "Signing In\\.\\.\\.": "正在登录...", + "Sorry, your username or password is incorrect.": "对不起,您的用戶名或密码不正确", + "Sort By": "排列方式", + "Start Sharing": "開始分享", + "Started At": "開始于", + "Status": "状態", + "Step (.*)": "第$1步", + "Stop Sharing": "停止分享", + "Stop Sharing\\.\\.\\.": "停止分享中...", + "Storage": "儲存", + "Subnets \\& Listen Ports Templates": "子網 & 监听端口模板", + "Subscribed Actions": "已訂阅的動作", + "Success": "成功", + "Swap Memory": "交换区内存", + "Swap Memory Usage": "交换区内存用量", + "System Status": "系统状態", + "TOTP verified!": "一次性驗证码驗证成功!", + "Table": "路由表", + "Tag": "标签", + "Tag Peer": "标签端点", + "Tags": "标签", + "The maximum number of peers can add is (.*)": "最多只能添加$1个端点", + "Theme": "主题", + "This IP is not available: (.*)": "此 IP 地址不可用:$1", + "This configuration have ([0-9].*) backups": "此配置有$1个備份", + "This configuration have no backup": "此配置没有備份", + "This peer already exist": "此端点已存在", + "This peer does not have any job yet\\.": "此端点还没有任何任務", + "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "更改这个設定会应用到所有端点的配置文件和配置二维码", + "To update this configuration's name, WGDashboard will execute the following operations:": "如果更新这个配置名称,WGDashboard会執行以下操作:", + "Toggle When Start Up": "运行后啟動配置", + "Tools": "工具箱", + "Total": "總数据", + "Total Received": "總接收数据用量", + "Total Sent": "總发送数据用量", + "Total Usage": "總数据用量", + "Turning Off\\.\\.\\.": "停用中...", + "Turning On\\.\\.\\.": "啟用中...", + "Unsaved Job": "未保存任務", + "Untitled Peer": "未命名端点", + "Update Name": "更新名称", + "Update Password": "更新密码", + "Update peer failed when saving the configuration": "配置保存端点失败", + "Update peer failed when updating Allowed IPs": "更新允许的 IP 地址失败", + "Update peer failed when updating Pre-Shared Key": "更新共享密钥失败", + "Updated at": "更新于", + "Use your own Private and Public Key": "使用您自己的秘钥和公钥", + "Username": "用戶名", + "Value": "值", + "Verify SSL": "驗证SSL", + "WGDashboard API Keys function is disabled": "WGDashboard 的 API 秘钥功能并未開啟", + "WGDashboard Account Settings": "WGDashboard 账戶設定", + "WGDashboard Settings": "WGDashboard 設定", + "WGDashboard language update failed": "WGDashboard 语言更新失败", + "WGDashboard will sent a POST Request to the URL below with details of any subscribed events\\.": "WGDashboard会发送一个包含訂阅内容的POST请求到以下指定的URL", + "We highly suggest to enable SSL verification": "我们墙裂推薦您開啟SSL驗证", + "Webhooks*": "網络钩子", + "Welcome to": "欢迎来到", + "What\\'s the body\\?": "正文是什么?", + "What\\'s the subject\\?": "主题是什么?", + "When should this API Key expire\\?": "这个 API 秘钥什么时候过期呢?", + "Who are you sending to\\?": "您想发送给谁?", + "WireGuard Configuration Settings": "WireGuard 配置設定", + "WireGuard Configurations": "WireGuard 配置", + "WireGuard Configurations Settings": "WireGuard 配置設定", + "WireGuard configuration path saved": "WireGuard 配置路径保存成功", + "Yes": "是", + "You can add up to (.*) peers": "您最多可以添加 $1 个端点", + "You can visit our: ": "您可以访问我们的:", + "You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "您还没有任何WireGuard配置。请检查您的配置文件夹或前往設置更改路径。默认文件夹是 /etc/wireguard", + "You don't have any configuration to restore": "您没有任何配置備份可以恢復", + "You're on the latest version": "已经是最新版本", + "\\(At least 8 characters and make sure is strong enough!\\)": "(至少8个字符或以上并且确保它足够復雜哟!)", + "\\(Required for QR Code and Download\\)": "(二维码以及下载功能需要填寫秘钥)", + "\\(Required\\)": "(必填项)", + "^([0-9].*) Sessions*$": "$1个活動", + "if": "如果", + "is": "是", + "larger than": "大于", + "or": "或", + "or click the button below to download the ": "或点击下面的按钮下载 ", + "then": "那就", + "to add your server": "添加您的服務器" +} \ No newline at end of file