diff --git a/backend/.gitignore b/.dockerignore
similarity index 97%
rename from backend/.gitignore
rename to .dockerignore
index d9c57cc..7b13414 100644
--- a/backend/.gitignore
+++ b/.dockerignore
@@ -3,6 +3,7 @@ dist/
release/
backup/
bin/
+db/
sui
web/html
main
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index f25e629..5445036 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -1,9 +1,5 @@
version: 2
updates:
- - package-ecosystem: "npm"
- directory: "/"
- schedule:
- interval: "daily"
- package-ecosystem: "gomod"
directory: "/"
schedule:
diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index 95bdda1..f907950 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -10,7 +10,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v4
+ - name: Checkout repository
+ uses: actions/checkout@v4.1.1
+ with:
+ submodules: recursive
- name: Docker meta
id: meta
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index a992777..d639dd1 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -22,6 +22,8 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v4.1.1
+ with:
+ submodules: recursive
- name: Setup Go
uses: actions/setup-go@v5
@@ -58,7 +60,8 @@ jobs:
npm install
npm run build
cd ..
- mv frontend/dist backend/web/html
+ mv frontend/dist web/html
+ rm -fr frontend
- name: Build s-ui
run: |
@@ -89,9 +92,7 @@ jobs:
fi
### Build s-ui
- cd backend
- go build -ldflags="-w -s" -tags "with_quic,with_grpc,with_ech,with_utls,with_reality_server,with_acme,with_gvisor" -o ../sui main.go
- cd ..
+ go build -ldflags="-w -s" -tags "with_quic,with_grpc,with_ech,with_utls,with_reality_server,with_acme,with_gvisor" -o sui main.go
mkdir s-ui
cp sui s-ui/
diff --git a/.gitignore b/.gitignore
index ff60407..35e1c36 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,10 +5,12 @@ backup/
bin/
db/
sui
+web/html
main
tmp
.sync*
*.tar.gz
+frontend/
# local env files
.env.local
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..89c4063
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,4 @@
+[submodule "frontend"]
+ path = frontend
+ url = https://github.com/alireza0/s-ui-frontend
+ branch = main
diff --git a/Dockerfile b/Dockerfile
index eb54353..3ddad7a 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -10,7 +10,7 @@ ENV CGO_CFLAGS="-D_LARGEFILE64_SOURCE"
ENV CGO_ENABLED=1
ENV GOARCH=$TARGETARCH
RUN apk update && apk --no-cache --update add build-base gcc wget unzip
-COPY backend/ ./
+COPY --exclude=frontend . .
COPY --from=front-builder /app/dist/ /app/web/html/
RUN go build -ldflags="-w -s" -tags "with_quic,with_grpc,with_ech,with_utls,with_reality_server,with_acme,with_gvisor" -o sui main.go
diff --git a/README.md b/README.md
index b86a63d..444e6b0 100644
--- a/README.md
+++ b/README.md
@@ -4,6 +4,7 @@



+[](https://goreportcard.com/report/github.com/alireza0/s-ui)
[](https://img.shields.io/github/downloads/alireza0/s-ui/total.svg)
[](https://www.gnu.org/licenses/gpl-3.0.en.html)
@@ -63,16 +64,13 @@ VERSION=1.0.0 && bash <(curl -Ls https://raw.githubusercontent.com/alireza0/s-ui
```sh
sudo -i
-systemctl disable sing-box --now
systemctl disable s-ui --now
-rm -f /etc/systemd/system/s-ui.service
rm -f /etc/systemd/system/sing-box.service
systemctl daemon-reload
rm -fr /usr/local/s-ui
rm /usr/bin/s-ui
-
```
## Install using Docker
@@ -98,7 +96,7 @@ wget -q https://raw.githubusercontent.com/alireza0/s-ui/master/docker-compose.ym
docker compose up -d
```
-> Use docker for s-ui only
+> Use docker
```shell
mkdir s-ui && cd s-ui
@@ -113,6 +111,8 @@ docker run -itd \
> Build your own image
```shell
+git clone https://github.com/alireza0/s-ui
+git submodule update --init --recursive
docker build -t s-ui .
```
@@ -128,37 +128,30 @@ docker build -t s-ui .
./runSUI.sh
```
+### Clone the repository
+```shell
+# clone repository
+git clone https://github.com/alireza0/s-ui
+# clone submodules
+git submodule update --init --recursive
+```
+
+
### - Frontend
-Frontend codes are in `frontend` folder in the root of repository.
-
-To run it locally for instant development you can use (apply automatic changes on file save):
-```shell
-cd frontend
-npm run dev
-```
-> By this command it will run a `vite` web server on separate port `3000`, with backend proxy to `http://localhost:2095`. You can change it in `frontend/vite.config.mts`.
-
-To build frontend:
-```shell
-cd frontend
-npm run build
-```
+Visit [s-ui-frontend](https://github.com/alireza0/s-ui-frontend) for frontend code
### - Backend
-Backend codes are in `backend` folder in the root of repository.
> Please build frontend once before!
To build backend:
```shell
-cd backend
-
# remove old frontend compiled files
rm -fr web/html/*
# apply new frontend compiled files
-cp -R ../frontend/dist/ web/html/
+cp -R frontend/dist/ web/html/
# build
-go build -o ../sui main.go
+go build -o sui main.go
```
To run backend (from root folder of repository):
@@ -182,7 +175,7 @@ To run backend (from root folder of repository):
- Supported protocols:
- General: Mixed, SOCKS, HTTP, HTTPS, Direct, Redirect, TProxy
- V2Ray based: VLESS, VMess, Trojan, Shadowsocks
- - Other protocols: ShadowTLS, Hysteria, Hysteri2, Naive, TUIC
+ - Other protocols: ShadowTLS, Hysteria, Hysteria2, Naive, TUIC
- Supports XTLS protocols
- An advanced interface for routing traffic, incorporating PROXY Protocol, External, and Transparent Proxy, SSL Certificate, and Port
- An advanced interface for inbound and outbound configuration
diff --git a/backend/api/api.go b/api/api.go
similarity index 100%
rename from backend/api/api.go
rename to api/api.go
diff --git a/backend/api/session.go b/api/session.go
similarity index 100%
rename from backend/api/session.go
rename to api/session.go
diff --git a/backend/api/utils.go b/api/utils.go
similarity index 100%
rename from backend/api/utils.go
rename to api/utils.go
diff --git a/backend/app/app.go b/app/app.go
similarity index 100%
rename from backend/app/app.go
rename to app/app.go
diff --git a/build.sh b/build.sh
index e18494a..d36b167 100755
--- a/build.sh
+++ b/build.sh
@@ -5,11 +5,10 @@ npm i
npm run build
cd ..
-cd backend
echo "Backend"
mkdir -p web/html
rm -fr web/html/*
-cp -R ../frontend/dist/* web/html/
+cp -R frontend/dist/* web/html/
-go build -tags "with_quic,with_grpc,with_ech,with_utls,with_reality_server,with_acme,with_gvisor" -o ../sui main.go
+go build -ldflags "-w -s" -tags "with_quic,with_grpc,with_ech,with_utls,with_reality_server,with_acme,with_gvisor" -o sui main.go
diff --git a/backend/cmd/admin.go b/cmd/admin.go
similarity index 100%
rename from backend/cmd/admin.go
rename to cmd/admin.go
diff --git a/backend/cmd/cmd.go b/cmd/cmd.go
similarity index 100%
rename from backend/cmd/cmd.go
rename to cmd/cmd.go
diff --git a/backend/cmd/migration/1_1.go b/cmd/migration/1_1.go
similarity index 100%
rename from backend/cmd/migration/1_1.go
rename to cmd/migration/1_1.go
diff --git a/backend/cmd/migration/1_2.go b/cmd/migration/1_2.go
similarity index 100%
rename from backend/cmd/migration/1_2.go
rename to cmd/migration/1_2.go
diff --git a/backend/cmd/migration/main.go b/cmd/migration/main.go
similarity index 100%
rename from backend/cmd/migration/main.go
rename to cmd/migration/main.go
diff --git a/backend/cmd/setting.go b/cmd/setting.go
similarity index 100%
rename from backend/cmd/setting.go
rename to cmd/setting.go
diff --git a/backend/config/config.go b/config/config.go
similarity index 100%
rename from backend/config/config.go
rename to config/config.go
diff --git a/backend/config/name b/config/name
similarity index 100%
rename from backend/config/name
rename to config/name
diff --git a/backend/config/version b/config/version
similarity index 100%
rename from backend/config/version
rename to config/version
diff --git a/backend/core/box.go b/core/box.go
similarity index 100%
rename from backend/core/box.go
rename to core/box.go
diff --git a/backend/core/conntracker.go b/core/conntracker.go
similarity index 100%
rename from backend/core/conntracker.go
rename to core/conntracker.go
diff --git a/backend/core/endpoint.go b/core/endpoint.go
similarity index 100%
rename from backend/core/endpoint.go
rename to core/endpoint.go
diff --git a/backend/core/log.go b/core/log.go
similarity index 100%
rename from backend/core/log.go
rename to core/log.go
diff --git a/backend/core/main.go b/core/main.go
similarity index 100%
rename from backend/core/main.go
rename to core/main.go
diff --git a/backend/core/register.go b/core/register.go
similarity index 100%
rename from backend/core/register.go
rename to core/register.go
diff --git a/backend/cronjob/checkCoreJob.go b/cronjob/checkCoreJob.go
similarity index 100%
rename from backend/cronjob/checkCoreJob.go
rename to cronjob/checkCoreJob.go
diff --git a/backend/cronjob/cronJob.go b/cronjob/cronJob.go
similarity index 100%
rename from backend/cronjob/cronJob.go
rename to cronjob/cronJob.go
diff --git a/backend/cronjob/delStatsJob.go b/cronjob/delStatsJob.go
similarity index 100%
rename from backend/cronjob/delStatsJob.go
rename to cronjob/delStatsJob.go
diff --git a/backend/cronjob/depleteJob.go b/cronjob/depleteJob.go
similarity index 100%
rename from backend/cronjob/depleteJob.go
rename to cronjob/depleteJob.go
diff --git a/backend/cronjob/statsJob.go b/cronjob/statsJob.go
similarity index 100%
rename from backend/cronjob/statsJob.go
rename to cronjob/statsJob.go
diff --git a/backend/database/backup.go b/database/backup.go
similarity index 100%
rename from backend/database/backup.go
rename to database/backup.go
diff --git a/backend/database/db.go b/database/db.go
similarity index 100%
rename from backend/database/db.go
rename to database/db.go
diff --git a/backend/database/model/endpoints.go b/database/model/endpoints.go
similarity index 100%
rename from backend/database/model/endpoints.go
rename to database/model/endpoints.go
diff --git a/backend/database/model/inbounds.go b/database/model/inbounds.go
similarity index 100%
rename from backend/database/model/inbounds.go
rename to database/model/inbounds.go
diff --git a/backend/database/model/model.go b/database/model/model.go
similarity index 100%
rename from backend/database/model/model.go
rename to database/model/model.go
diff --git a/backend/database/model/outbounds.go b/database/model/outbounds.go
similarity index 100%
rename from backend/database/model/outbounds.go
rename to database/model/outbounds.go
diff --git a/frontend b/frontend
new file mode 160000
index 0000000..0cb2994
--- /dev/null
+++ b/frontend
@@ -0,0 +1 @@
+Subproject commit 0cb2994dee3817ee89e5d25d4bd447658d1140ca
diff --git a/frontend/.browserslistrc b/frontend/.browserslistrc
deleted file mode 100644
index dc3bc09..0000000
--- a/frontend/.browserslistrc
+++ /dev/null
@@ -1,4 +0,0 @@
-> 1%
-last 2 versions
-not dead
-not ie 11
diff --git a/frontend/.editorconfig b/frontend/.editorconfig
deleted file mode 100644
index 7053c49..0000000
--- a/frontend/.editorconfig
+++ /dev/null
@@ -1,5 +0,0 @@
-[*.{js,jsx,ts,tsx,vue}]
-indent_style = space
-indent_size = 2
-trim_trailing_whitespace = true
-insert_final_newline = true
diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js
deleted file mode 100644
index 5f3949b..0000000
--- a/frontend/.eslintrc.js
+++ /dev/null
@@ -1,14 +0,0 @@
-module.exports = {
- root: true,
- env: {
- node: true,
- },
- extends: [
- 'plugin:vue/vue3-essential',
- 'eslint:recommended',
- '@vue/eslint-config-typescript',
- ],
- rules: {
- 'vue/multi-word-component-names': 'off',
- },
-}
diff --git a/frontend/.gitignore b/frontend/.gitignore
deleted file mode 100644
index 1b57351..0000000
--- a/frontend/.gitignore
+++ /dev/null
@@ -1,23 +0,0 @@
-.DS_Store
-node_modules
-/dist
-/bin
-
-# local env files
-.env.local
-.env.*.local
-
-# Log files
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-
-# Editor directories and files
-.idea
-.vscode
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw?
diff --git a/frontend/README.md b/frontend/README.md
deleted file mode 100644
index cea000b..0000000
--- a/frontend/README.md
+++ /dev/null
@@ -1,69 +0,0 @@
-# base
-
-## Project setup
-
-```
-# yarn
-yarn
-
-# npm
-npm install
-
-# pnpm
-pnpm install
-
-# bun
-bun install
-```
-
-### Compiles and hot-reloads for development
-
-```
-# yarn
-yarn dev
-
-# npm
-npm run dev
-
-# pnpm
-pnpm dev
-
-# bun
-pnpm run dev
-```
-
-### Compiles and minifies for production
-
-```
-# yarn
-yarn build
-
-# npm
-npm run build
-
-# pnpm
-pnpm build
-
-# bun
-pnpm run build
-```
-
-### Lints and fixes files
-
-```
-# yarn
-yarn lint
-
-# npm
-npm run lint
-
-# pnpm
-pnpm lint
-
-# bun
-pnpm run lint
-```
-
-### Customize configuration
-
-See [Configuration Reference](https://vitejs.dev/config/).
diff --git a/frontend/index.html b/frontend/index.html
deleted file mode 100644
index cafa407..0000000
--- a/frontend/index.html
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
- S-UI
-
-
-
-
-
-
-
-
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
deleted file mode 100644
index a13b82b..0000000
--- a/frontend/package-lock.json
+++ /dev/null
@@ -1,3852 +0,0 @@
-{
- "name": "frontend",
- "version": "1.2.0-beta.3",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "frontend",
- "version": "1.2.0-beta.3",
- "dependencies": {
- "@mdi/font": "7.4.47",
- "axios": "^1.7.9",
- "chart.js": "^4.4.7",
- "clipboard": "^2.0.11",
- "core-js": "^3.40.0",
- "moment": "^2.30.1",
- "notivue": "^2.4.5",
- "pinia": "^2.3.0",
- "qrcode.vue": "^3.6.0",
- "roboto-fontface": "^0.10.0",
- "vue": "^3.5.13",
- "vue-chartjs": "^5.3.2",
- "vue-i18n": "^11.0.1",
- "vue-router": "^4.5.0",
- "vue3-persian-datetime-picker": "^1.2.2",
- "vuetify": "^3.7.6"
- },
- "devDependencies": {
- "@babel/types": "^7.26.5",
- "@types/node": "^22.10.7",
- "@vitejs/plugin-vue": "^5.2.1",
- "eslint-plugin-vue": "^9.32.0",
- "material-design-icons-iconfont": "^6.7.0",
- "sass": "1.83.4",
- "typescript": "^5.7.3",
- "unplugin-fonts": "^1.3.1",
- "vite": "^6.0.7",
- "vite-plugin-vuetify": "^2.0.4",
- "vue-tsc": "^2.2.0"
- }
- },
- "node_modules/@babel/helper-string-parser": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
- "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
- "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/parser": {
- "version": "7.26.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.5.tgz",
- "integrity": "sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==",
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.26.5"
- },
- "bin": {
- "parser": "bin/babel-parser.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/types": {
- "version": "7.26.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.5.tgz",
- "integrity": "sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-string-parser": "^7.25.9",
- "@babel/helper-validator-identifier": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz",
- "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==",
- "cpu": [
- "ppc64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz",
- "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==",
- "cpu": [
- "arm"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz",
- "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz",
- "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz",
- "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz",
- "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz",
- "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz",
- "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz",
- "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==",
- "cpu": [
- "arm"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz",
- "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz",
- "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==",
- "cpu": [
- "ia32"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz",
- "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==",
- "cpu": [
- "loong64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz",
- "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==",
- "cpu": [
- "mips64el"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz",
- "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==",
- "cpu": [
- "ppc64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz",
- "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==",
- "cpu": [
- "riscv64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz",
- "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==",
- "cpu": [
- "s390x"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz",
- "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz",
- "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz",
- "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz",
- "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz",
- "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz",
- "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz",
- "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz",
- "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==",
- "cpu": [
- "ia32"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz",
- "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@eslint-community/eslint-utils": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz",
- "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eslint-visitor-keys": "^3.4.3"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
- }
- },
- "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint-community/regexpp": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
- "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
- }
- },
- "node_modules/@eslint/config-array": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz",
- "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "dependencies": {
- "@eslint/object-schema": "^2.1.5",
- "debug": "^4.3.1",
- "minimatch": "^3.1.2"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/core": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz",
- "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "dependencies": {
- "@types/json-schema": "^7.0.15"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/eslintrc": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz",
- "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^10.0.1",
- "globals": "^14.0.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint/js": {
- "version": "9.18.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.18.0.tgz",
- "integrity": "sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/object-schema": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz",
- "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/plugin-kit": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz",
- "integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "dependencies": {
- "@eslint/core": "^0.10.0",
- "levn": "^0.4.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@humanfs/core": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
- "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "engines": {
- "node": ">=18.18.0"
- }
- },
- "node_modules/@humanfs/node": {
- "version": "0.16.6",
- "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
- "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "dependencies": {
- "@humanfs/core": "^0.19.1",
- "@humanwhocodes/retry": "^0.3.0"
- },
- "engines": {
- "node": ">=18.18.0"
- }
- },
- "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
- "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "engines": {
- "node": ">=18.18"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
- "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "engines": {
- "node": ">=12.22"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@humanwhocodes/retry": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz",
- "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "engines": {
- "node": ">=18.18"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@intlify/core-base": {
- "version": "11.0.1",
- "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-11.0.1.tgz",
- "integrity": "sha512-NAmhw1l/llM0HZRpagR/ChJTNymW4ll6/4EDSJML5c8L5Hl/+k6UyF8EIgE6DeHpfheQujkSRngauViHqq6jJQ==",
- "license": "MIT",
- "dependencies": {
- "@intlify/message-compiler": "11.0.1",
- "@intlify/shared": "11.0.1"
- },
- "engines": {
- "node": ">= 16"
- },
- "funding": {
- "url": "https://github.com/sponsors/kazupon"
- }
- },
- "node_modules/@intlify/message-compiler": {
- "version": "11.0.1",
- "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-11.0.1.tgz",
- "integrity": "sha512-5RFH8x+Mn3mbjcHXnb6KCXGiczBdiQkWkv99iiA0JpKrNuTAQeW59Pjq/uObMB0eR0shnKYGTkIJxum+DbL3sw==",
- "license": "MIT",
- "dependencies": {
- "@intlify/shared": "11.0.1",
- "source-map-js": "^1.0.2"
- },
- "engines": {
- "node": ">= 16"
- },
- "funding": {
- "url": "https://github.com/sponsors/kazupon"
- }
- },
- "node_modules/@intlify/shared": {
- "version": "11.0.1",
- "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-11.0.1.tgz",
- "integrity": "sha512-lH164+aDDptHZ3dBDbIhRa1dOPQUp+83iugpc+1upTOWCnwyC1PVis6rSWNMMJ8VQxvtHQB9JMib48K55y0PvQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 16"
- },
- "funding": {
- "url": "https://github.com/sponsors/kazupon"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
- "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
- "license": "MIT"
- },
- "node_modules/@kurkle/color": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz",
- "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==",
- "license": "MIT"
- },
- "node_modules/@mdi/font": {
- "version": "7.4.47",
- "resolved": "https://registry.npmjs.org/@mdi/font/-/font-7.4.47.tgz",
- "integrity": "sha512-43MtGpd585SNzHZPcYowu/84Vz2a2g31TvPMTm9uTiCSWzaheQySUcSyUH/46fPnuPQWof2yd0pGBtzee/IQWw==",
- "license": "Apache-2.0"
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@parcel/watcher": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.0.tgz",
- "integrity": "sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==",
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "detect-libc": "^1.0.3",
- "is-glob": "^4.0.3",
- "micromatch": "^4.0.5",
- "node-addon-api": "^7.0.0"
- },
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- },
- "optionalDependencies": {
- "@parcel/watcher-android-arm64": "2.5.0",
- "@parcel/watcher-darwin-arm64": "2.5.0",
- "@parcel/watcher-darwin-x64": "2.5.0",
- "@parcel/watcher-freebsd-x64": "2.5.0",
- "@parcel/watcher-linux-arm-glibc": "2.5.0",
- "@parcel/watcher-linux-arm-musl": "2.5.0",
- "@parcel/watcher-linux-arm64-glibc": "2.5.0",
- "@parcel/watcher-linux-arm64-musl": "2.5.0",
- "@parcel/watcher-linux-x64-glibc": "2.5.0",
- "@parcel/watcher-linux-x64-musl": "2.5.0",
- "@parcel/watcher-win32-arm64": "2.5.0",
- "@parcel/watcher-win32-ia32": "2.5.0",
- "@parcel/watcher-win32-x64": "2.5.0"
- }
- },
- "node_modules/@parcel/watcher-android-arm64": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz",
- "integrity": "sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-darwin-arm64": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz",
- "integrity": "sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-darwin-x64": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz",
- "integrity": "sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-freebsd-x64": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz",
- "integrity": "sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm-glibc": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz",
- "integrity": "sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==",
- "cpu": [
- "arm"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm-musl": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz",
- "integrity": "sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==",
- "cpu": [
- "arm"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm64-glibc": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz",
- "integrity": "sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm64-musl": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz",
- "integrity": "sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-x64-glibc": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz",
- "integrity": "sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-x64-musl": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz",
- "integrity": "sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-win32-arm64": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz",
- "integrity": "sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-win32-ia32": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz",
- "integrity": "sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==",
- "cpu": [
- "ia32"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-win32-x64": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz",
- "integrity": "sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.31.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.31.0.tgz",
- "integrity": "sha512-9NrR4033uCbUBRgvLcBrJofa2KY9DzxL2UKZ1/4xA/mnTNyhZCWBuD8X3tPm1n4KxcgaraOYgrFKSgwjASfmlA==",
- "cpu": [
- "arm"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-android-arm64": {
- "version": "4.31.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.31.0.tgz",
- "integrity": "sha512-iBbODqT86YBFHajxxF8ebj2hwKm1k8PTBQSojSt3d1FFt1gN+xf4CowE47iN0vOSdnd+5ierMHBbu/rHc7nq5g==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.31.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.31.0.tgz",
- "integrity": "sha512-WHIZfXgVBX30SWuTMhlHPXTyN20AXrLH4TEeH/D0Bolvx9PjgZnn4H677PlSGvU6MKNsjCQJYczkpvBbrBnG6g==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.31.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.31.0.tgz",
- "integrity": "sha512-hrWL7uQacTEF8gdrQAqcDy9xllQ0w0zuL1wk1HV8wKGSGbKPVjVUv/DEwT2+Asabf8Dh/As+IvfdU+H8hhzrQQ==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.31.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.31.0.tgz",
- "integrity": "sha512-S2oCsZ4hJviG1QjPY1h6sVJLBI6ekBeAEssYKad1soRFv3SocsQCzX6cwnk6fID6UQQACTjeIMB+hyYrFacRew==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.31.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.31.0.tgz",
- "integrity": "sha512-pCANqpynRS4Jirn4IKZH4tnm2+2CqCNLKD7gAdEjzdLGbH1iO0zouHz4mxqg0uEMpO030ejJ0aA6e1PJo2xrPA==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.31.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.31.0.tgz",
- "integrity": "sha512-0O8ViX+QcBd3ZmGlcFTnYXZKGbFu09EhgD27tgTdGnkcYXLat4KIsBBQeKLR2xZDCXdIBAlWLkiXE1+rJpCxFw==",
- "cpu": [
- "arm"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.31.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.31.0.tgz",
- "integrity": "sha512-w5IzG0wTVv7B0/SwDnMYmbr2uERQp999q8FMkKG1I+j8hpPX2BYFjWe69xbhbP6J9h2gId/7ogesl9hwblFwwg==",
- "cpu": [
- "arm"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.31.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.31.0.tgz",
- "integrity": "sha512-JyFFshbN5xwy6fulZ8B/8qOqENRmDdEkcIMF0Zz+RsfamEW+Zabl5jAb0IozP/8UKnJ7g2FtZZPEUIAlUSX8cA==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.31.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.31.0.tgz",
- "integrity": "sha512-kpQXQ0UPFeMPmPYksiBL9WS/BDiQEjRGMfklVIsA0Sng347H8W2iexch+IEwaR7OVSKtr2ZFxggt11zVIlZ25g==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.31.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.31.0.tgz",
- "integrity": "sha512-pMlxLjt60iQTzt9iBb3jZphFIl55a70wexvo8p+vVFK+7ifTRookdoXX3bOsRdmfD+OKnMozKO6XM4zR0sHRrQ==",
- "cpu": [
- "loong64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.31.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.31.0.tgz",
- "integrity": "sha512-D7TXT7I/uKEuWiRkEFbed1UUYZwcJDU4vZQdPTcepK7ecPhzKOYk4Er2YR4uHKme4qDeIh6N3XrLfpuM7vzRWQ==",
- "cpu": [
- "ppc64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.31.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.31.0.tgz",
- "integrity": "sha512-wal2Tc8O5lMBtoePLBYRKj2CImUCJ4UNGJlLwspx7QApYny7K1cUYlzQ/4IGQBLmm+y0RS7dwc3TDO/pmcneTw==",
- "cpu": [
- "riscv64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.31.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.31.0.tgz",
- "integrity": "sha512-O1o5EUI0+RRMkK9wiTVpk2tyzXdXefHtRTIjBbmFREmNMy7pFeYXCFGbhKFwISA3UOExlo5GGUuuj3oMKdK6JQ==",
- "cpu": [
- "s390x"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.31.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.31.0.tgz",
- "integrity": "sha512-zSoHl356vKnNxwOWnLd60ixHNPRBglxpv2g7q0Cd3Pmr561gf0HiAcUBRL3S1vPqRC17Zo2CX/9cPkqTIiai1g==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.31.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.31.0.tgz",
- "integrity": "sha512-ypB/HMtcSGhKUQNiFwqgdclWNRrAYDH8iMYH4etw/ZlGwiTVxBz2tDrGRrPlfZu6QjXwtd+C3Zib5pFqID97ZA==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.31.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.31.0.tgz",
- "integrity": "sha512-JuhN2xdI/m8Hr+aVO3vspO7OQfUFO6bKLIRTAy0U15vmWjnZDLrEgCZ2s6+scAYaQVpYSh9tZtRijApw9IXyMw==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.31.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.31.0.tgz",
- "integrity": "sha512-U1xZZXYkvdf5MIWmftU8wrM5PPXzyaY1nGCI4KI4BFfoZxHamsIe+BtnPLIvvPykvQWlVbqUXdLa4aJUuilwLQ==",
- "cpu": [
- "ia32"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.31.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.31.0.tgz",
- "integrity": "sha512-ul8rnCsUumNln5YWwz0ted2ZHFhzhRRnkpBZ+YRuHoRAlUji9KChpOUOndY7uykrPEPXVbHLlsdo6v5yXo/TXw==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@types/estree": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
- "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
- "devOptional": true,
- "license": "MIT"
- },
- "node_modules/@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/@types/node": {
- "version": "22.10.7",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.7.tgz",
- "integrity": "sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "undici-types": "~6.20.0"
- }
- },
- "node_modules/@vitejs/plugin-vue": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz",
- "integrity": "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==",
- "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/@volar/language-core": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.11.tgz",
- "integrity": "sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@volar/source-map": "2.4.11"
- }
- },
- "node_modules/@volar/source-map": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.11.tgz",
- "integrity": "sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@volar/typescript": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.11.tgz",
- "integrity": "sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@volar/language-core": "2.4.11",
- "path-browserify": "^1.0.1",
- "vscode-uri": "^3.0.8"
- }
- },
- "node_modules/@vue/compiler-core": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz",
- "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==",
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.25.3",
- "@vue/shared": "3.5.13",
- "entities": "^4.5.0",
- "estree-walker": "^2.0.2",
- "source-map-js": "^1.2.0"
- }
- },
- "node_modules/@vue/compiler-dom": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz",
- "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==",
- "license": "MIT",
- "dependencies": {
- "@vue/compiler-core": "3.5.13",
- "@vue/shared": "3.5.13"
- }
- },
- "node_modules/@vue/compiler-sfc": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz",
- "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==",
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.25.3",
- "@vue/compiler-core": "3.5.13",
- "@vue/compiler-dom": "3.5.13",
- "@vue/compiler-ssr": "3.5.13",
- "@vue/shared": "3.5.13",
- "estree-walker": "^2.0.2",
- "magic-string": "^0.30.11",
- "postcss": "^8.4.48",
- "source-map-js": "^1.2.0"
- }
- },
- "node_modules/@vue/compiler-ssr": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz",
- "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==",
- "license": "MIT",
- "dependencies": {
- "@vue/compiler-dom": "3.5.13",
- "@vue/shared": "3.5.13"
- }
- },
- "node_modules/@vue/compiler-vue2": {
- "version": "2.7.16",
- "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz",
- "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "de-indent": "^1.0.2",
- "he": "^1.2.0"
- }
- },
- "node_modules/@vue/devtools-api": {
- "version": "6.6.4",
- "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
- "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
- "license": "MIT"
- },
- "node_modules/@vue/language-core": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.0.tgz",
- "integrity": "sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@volar/language-core": "~2.4.11",
- "@vue/compiler-dom": "^3.5.0",
- "@vue/compiler-vue2": "^2.7.16",
- "@vue/shared": "^3.5.0",
- "alien-signals": "^0.4.9",
- "minimatch": "^9.0.3",
- "muggle-string": "^0.4.1",
- "path-browserify": "^1.0.1"
- },
- "peerDependencies": {
- "typescript": "*"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@vue/language-core/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/@vue/language-core/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@vue/reactivity": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz",
- "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==",
- "license": "MIT",
- "dependencies": {
- "@vue/shared": "3.5.13"
- }
- },
- "node_modules/@vue/runtime-core": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz",
- "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==",
- "license": "MIT",
- "dependencies": {
- "@vue/reactivity": "3.5.13",
- "@vue/shared": "3.5.13"
- }
- },
- "node_modules/@vue/runtime-dom": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz",
- "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==",
- "license": "MIT",
- "dependencies": {
- "@vue/reactivity": "3.5.13",
- "@vue/runtime-core": "3.5.13",
- "@vue/shared": "3.5.13",
- "csstype": "^3.1.3"
- }
- },
- "node_modules/@vue/server-renderer": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz",
- "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==",
- "license": "MIT",
- "dependencies": {
- "@vue/compiler-ssr": "3.5.13",
- "@vue/shared": "3.5.13"
- },
- "peerDependencies": {
- "vue": "3.5.13"
- }
- },
- "node_modules/@vue/shared": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz",
- "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==",
- "license": "MIT"
- },
- "node_modules/@vuetify/loader-shared": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@vuetify/loader-shared/-/loader-shared-2.0.3.tgz",
- "integrity": "sha512-Ss3GC7eJYkp2SF6xVzsT7FAruEmdihmn4OCk2+UocREerlXKWgOKKzTN5PN3ZVN5q05jHHrsNhTuWbhN61Bpdg==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "upath": "^2.0.1"
- },
- "peerDependencies": {
- "vue": "^3.0.0",
- "vuetify": "^3.0.0"
- }
- },
- "node_modules/acorn": {
- "version": "8.14.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
- "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/alien-signals": {
- "version": "0.4.14",
- "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.4.14.tgz",
- "integrity": "sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true,
- "license": "Python-2.0",
- "peer": true
- },
- "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/axios": {
- "version": "1.7.9",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz",
- "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==",
- "license": "MIT",
- "dependencies": {
- "follow-redirects": "^1.15.6",
- "form-data": "^4.0.0",
- "proxy-from-env": "^1.1.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/boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "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==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/chart.js": {
- "version": "4.4.7",
- "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.7.tgz",
- "integrity": "sha512-pwkcKfdzTMAU/+jNosKhNL2bHtJc/sSmYgVbuGTEDhzkrhmyihmP7vUc/5ZK9WopidMDHNe3Wm7jOd/WhuHWuw==",
- "license": "MIT",
- "dependencies": {
- "@kurkle/color": "^0.3.0"
- },
- "engines": {
- "pnpm": ">=8"
- }
- },
- "node_modules/chokidar": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
- "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "readdirp": "^4.0.1"
- },
- "engines": {
- "node": ">= 14.16.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/clipboard": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz",
- "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==",
- "license": "MIT",
- "dependencies": {
- "good-listener": "^1.2.2",
- "select": "^1.1.2",
- "tiny-emitter": "^2.0.0"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "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/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/core-js": {
- "version": "3.40.0",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.40.0.tgz",
- "integrity": "sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ==",
- "hasInstallScript": true,
- "license": "MIT",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
- }
- },
- "node_modules/cross-spawn": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/cssesc": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
- "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "cssesc": "bin/cssesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/csstype": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
- "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
- "license": "MIT"
- },
- "node_modules/de-indent": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
- "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/debug": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
- "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "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/delegate": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
- "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==",
- "license": "MIT"
- },
- "node_modules/detect-libc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
- "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
- "license": "Apache-2.0",
- "optional": true,
- "bin": {
- "detect-libc": "bin/detect-libc.js"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/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/esbuild": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz",
- "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==",
- "devOptional": true,
- "hasInstallScript": true,
- "license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.24.2",
- "@esbuild/android-arm": "0.24.2",
- "@esbuild/android-arm64": "0.24.2",
- "@esbuild/android-x64": "0.24.2",
- "@esbuild/darwin-arm64": "0.24.2",
- "@esbuild/darwin-x64": "0.24.2",
- "@esbuild/freebsd-arm64": "0.24.2",
- "@esbuild/freebsd-x64": "0.24.2",
- "@esbuild/linux-arm": "0.24.2",
- "@esbuild/linux-arm64": "0.24.2",
- "@esbuild/linux-ia32": "0.24.2",
- "@esbuild/linux-loong64": "0.24.2",
- "@esbuild/linux-mips64el": "0.24.2",
- "@esbuild/linux-ppc64": "0.24.2",
- "@esbuild/linux-riscv64": "0.24.2",
- "@esbuild/linux-s390x": "0.24.2",
- "@esbuild/linux-x64": "0.24.2",
- "@esbuild/netbsd-arm64": "0.24.2",
- "@esbuild/netbsd-x64": "0.24.2",
- "@esbuild/openbsd-arm64": "0.24.2",
- "@esbuild/openbsd-x64": "0.24.2",
- "@esbuild/sunos-x64": "0.24.2",
- "@esbuild/win32-arm64": "0.24.2",
- "@esbuild/win32-ia32": "0.24.2",
- "@esbuild/win32-x64": "0.24.2"
- }
- },
- "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==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint": {
- "version": "9.18.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.18.0.tgz",
- "integrity": "sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.12.1",
- "@eslint/config-array": "^0.19.0",
- "@eslint/core": "^0.10.0",
- "@eslint/eslintrc": "^3.2.0",
- "@eslint/js": "9.18.0",
- "@eslint/plugin-kit": "^0.2.5",
- "@humanfs/node": "^0.16.6",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@humanwhocodes/retry": "^0.4.1",
- "@types/estree": "^1.0.6",
- "@types/json-schema": "^7.0.15",
- "ajv": "^6.12.4",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.6",
- "debug": "^4.3.2",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^8.2.0",
- "eslint-visitor-keys": "^4.2.0",
- "espree": "^10.3.0",
- "esquery": "^1.5.0",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^8.0.0",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "ignore": "^5.2.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.3"
- },
- "bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://eslint.org/donate"
- },
- "peerDependencies": {
- "jiti": "*"
- },
- "peerDependenciesMeta": {
- "jiti": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-plugin-vue": {
- "version": "9.32.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.32.0.tgz",
- "integrity": "sha512-b/Y05HYmnB/32wqVcjxjHZzNpwxj1onBOvqW89W+V+XNG1dRuaFbNd3vT9CLbr2LXjEoq+3vn8DanWf7XU22Ug==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "globals": "^13.24.0",
- "natural-compare": "^1.4.0",
- "nth-check": "^2.1.1",
- "postcss-selector-parser": "^6.0.15",
- "semver": "^7.6.3",
- "vue-eslint-parser": "^9.4.3",
- "xml-name-validator": "^4.0.0"
- },
- "engines": {
- "node": "^14.17.0 || >=16.0.0"
- },
- "peerDependencies": {
- "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0"
- }
- },
- "node_modules/eslint-plugin-vue/node_modules/globals": {
- "version": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint-scope": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz",
- "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==",
- "dev": true,
- "license": "BSD-2-Clause",
- "peer": true,
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-visitor-keys": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
- "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/espree": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
- "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
- "dev": true,
- "license": "BSD-2-Clause",
- "peer": true,
- "dependencies": {
- "acorn": "^8.14.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^4.2.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/esquery": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
- "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "estraverse": "^5.1.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=4.0"
- }
- },
- "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/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true,
- "license": "BSD-2-Clause",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "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==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/fast-glob": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
- "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.8"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "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==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/fastq": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz",
- "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/file-entry-cache": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
- "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "flat-cache": "^4.0.0"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/flat-cache": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
- "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "flatted": "^3.2.9",
- "keyv": "^4.5.4"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/flatted": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz",
- "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==",
- "dev": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/follow-redirects": {
- "version": "1.15.9",
- "resolved": "https://registry.npmjs.org/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.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
- "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
- "license": "MIT",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "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.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "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-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "is-glob": "^4.0.3"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/globals": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
- "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/good-listener": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
- "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==",
- "license": "MIT",
- "dependencies": {
- "delegate": "^3.1.2"
- }
- },
- "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==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "he": "bin/he"
- }
- },
- "node_modules/ignore": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
- "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/immutable": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz",
- "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==",
- "devOptional": true,
- "license": "MIT"
- },
- "node_modules/import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "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/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "devOptional": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "devOptional": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/jalaali-js": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/jalaali-js/-/jalaali-js-1.2.7.tgz",
- "integrity": "sha512-gE+YHWSbygYAoJa+Xg8LWxGILqFOxZSBQQw39ghel01fVFUxV7bjL0x1JFsHcLQ3uPjvn81HQMa+kxwyPWnxGQ==",
- "license": "MIT"
- },
- "node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/json-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/keyv": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
- "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "json-buffer": "3.0.1"
- }
- },
- "node_modules/levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/magic-string": {
- "version": "0.30.17",
- "resolved": "https://registry.npmjs.org/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/material-design-icons-iconfont": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/material-design-icons-iconfont/-/material-design-icons-iconfont-6.7.0.tgz",
- "integrity": "sha512-lSj71DgVv20kO0kGbs42icDzbRot61gEDBLQACzkUuznRQBUYmbxzEkGU6dNBb5fRWHMaScYlAXX96HQ4/cJWA==",
- "dev": true,
- "license": "Apache-2.0"
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
- "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "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/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/moment": {
- "version": "2.30.1",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
- "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/moment-jalaali": {
- "version": "0.9.6",
- "resolved": "https://registry.npmjs.org/moment-jalaali/-/moment-jalaali-0.9.6.tgz",
- "integrity": "sha512-v8wXjQplvk5ez+sUqgsWIrafwIf1BEXXvzTYwsg1wHcqh27nSgKPCJ6FnZRrCz03MoNyB9N31L0oms+vE8Rq7g==",
- "license": "MIT",
- "dependencies": {
- "jalaali-js": "^1.1.0",
- "moment": "^2.22.2",
- "moment-timezone": "^0.5.21",
- "rimraf": "^3.0.2"
- }
- },
- "node_modules/moment-timezone": {
- "version": "0.5.46",
- "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.46.tgz",
- "integrity": "sha512-ZXm9b36esbe7OmdABqIWJuBBiLLwAjrN7CE+7sYdCCx82Nabt1wHDj8TVseS59QIlfFPbOoiBPm6ca9BioG4hw==",
- "license": "MIT",
- "dependencies": {
- "moment": "^2.29.4"
- },
- "engines": {
- "node": "*"
- }
- },
- "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==",
- "devOptional": true,
- "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==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/nanoid": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
- "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
- "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/natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/node-addon-api": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
- "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
- "license": "MIT",
- "optional": true
- },
- "node_modules/notivue": {
- "version": "2.4.5",
- "resolved": "https://registry.npmjs.org/notivue/-/notivue-2.4.5.tgz",
- "integrity": "sha512-7yBdaKesUZIwdcQP3nv1oWYyisI2bURkZ+D9KfLgeNqguHUzkQ1WdhGcTj59PBZa8mqa1/K5Mh8YsphSToMKcQ==",
- "license": "MIT",
- "peerDependencies": {
- "@nuxt/kit": ">=3.5.0",
- "@nuxt/schema": ">=3.5.0",
- "defu": ">=6"
- },
- "peerDependenciesMeta": {
- "@nuxt/kit": {
- "optional": true
- },
- "@nuxt/schema": {
- "optional": true
- },
- "defu": {
- "optional": true
- }
- }
- },
- "node_modules/nth-check": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
- "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "boolbase": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/fb55/nth-check?sponsor=1"
- }
- },
- "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/optionator": {
- "version": "0.9.4",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
- "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.5"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/path-browserify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "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==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "devOptional": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pinia": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.0.tgz",
- "integrity": "sha512-ohZj3jla0LL0OH5PlLTDMzqKiVw2XARmC1XYLdLWIPBMdhDW/123ZWr4zVAhtJm+aoSkFa13pYXskAvAscIkhQ==",
- "license": "MIT",
- "dependencies": {
- "@vue/devtools-api": "^6.6.3",
- "vue-demi": "^0.14.10"
- },
- "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/postcss": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz",
- "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==",
- "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.8",
- "picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/postcss-selector-parser": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
- "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/proxy-from-env": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
- "license": "MIT"
- },
- "node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/qrcode.vue": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/qrcode.vue/-/qrcode.vue-3.6.0.tgz",
- "integrity": "sha512-vQcl2fyHYHMjDO1GguCldJxepq2izQjBkDEEu9NENgfVKP6mv/e2SU62WbqYHGwTgWXLhxZ1NCD1dAZKHQq1fg==",
- "license": "MIT",
- "peerDependencies": {
- "vue": "^3.0.0"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "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/readdirp": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.1.tgz",
- "integrity": "sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==",
- "devOptional": true,
- "license": "MIT",
- "engines": {
- "node": ">= 14.18.0"
- },
- "funding": {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "deprecated": "Rimraf versions prior to v4 are no longer supported",
- "license": "ISC",
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/roboto-fontface": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/roboto-fontface/-/roboto-fontface-0.10.0.tgz",
- "integrity": "sha512-OlwfYEgA2RdboZohpldlvJ1xngOins5d7ejqnIBWr9KaMxsnBqotpptRXTyfNRLnFpqzX6sTDt+X+a+6udnU8g==",
- "license": "Apache-2.0"
- },
- "node_modules/rollup": {
- "version": "4.31.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.31.0.tgz",
- "integrity": "sha512-9cCE8P4rZLx9+PjoyqHLs31V9a9Vpvfo4qNcs6JCiGWYhw2gijSetFbH6SSy1whnkgcefnUwr8sad7tgqsGvnw==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "@types/estree": "1.0.6"
- },
- "bin": {
- "rollup": "dist/bin/rollup"
- },
- "engines": {
- "node": ">=18.0.0",
- "npm": ">=8.0.0"
- },
- "optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.31.0",
- "@rollup/rollup-android-arm64": "4.31.0",
- "@rollup/rollup-darwin-arm64": "4.31.0",
- "@rollup/rollup-darwin-x64": "4.31.0",
- "@rollup/rollup-freebsd-arm64": "4.31.0",
- "@rollup/rollup-freebsd-x64": "4.31.0",
- "@rollup/rollup-linux-arm-gnueabihf": "4.31.0",
- "@rollup/rollup-linux-arm-musleabihf": "4.31.0",
- "@rollup/rollup-linux-arm64-gnu": "4.31.0",
- "@rollup/rollup-linux-arm64-musl": "4.31.0",
- "@rollup/rollup-linux-loongarch64-gnu": "4.31.0",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.31.0",
- "@rollup/rollup-linux-riscv64-gnu": "4.31.0",
- "@rollup/rollup-linux-s390x-gnu": "4.31.0",
- "@rollup/rollup-linux-x64-gnu": "4.31.0",
- "@rollup/rollup-linux-x64-musl": "4.31.0",
- "@rollup/rollup-win32-arm64-msvc": "4.31.0",
- "@rollup/rollup-win32-ia32-msvc": "4.31.0",
- "@rollup/rollup-win32-x64-msvc": "4.31.0",
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "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": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/sass": {
- "version": "1.83.4",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.83.4.tgz",
- "integrity": "sha512-B1bozCeNQiOgDcLd33e2Cs2U60wZwjUUXzh900ZyQF5qUasvMdDZYbQ566LJu7cqR+sAHlAfO6RMkaID5s6qpA==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "chokidar": "^4.0.0",
- "immutable": "^5.0.2",
- "source-map-js": ">=0.6.2 <2.0.0"
- },
- "bin": {
- "sass": "sass.js"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "optionalDependencies": {
- "@parcel/watcher": "^2.4.1"
- }
- },
- "node_modules/select": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
- "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==",
- "license": "MIT"
- },
- "node_modules/semver": {
- "version": "7.6.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
- "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "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==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "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==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/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/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "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==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/tiny-emitter": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
- "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==",
- "license": "MIT"
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "prelude-ls": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/typescript": {
- "version": "5.7.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
- "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
- "devOptional": true,
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/undici-types": {
- "version": "6.20.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
- "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
- "devOptional": true,
- "license": "MIT"
- },
- "node_modules/unplugin": {
- "version": "2.0.0-beta.1",
- "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.0.0-beta.1.tgz",
- "integrity": "sha512-2qzQo5LN2DmUZXkWDHvGKLF5BP0WN+KthD6aPnPJ8plRBIjv4lh5O07eYcSxgO2znNw9s4MNhEO1sB+JDllDbQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "acorn": "^8.14.0",
- "webpack-virtual-modules": "^0.6.2"
- },
- "engines": {
- "node": ">=18.12.0"
- }
- },
- "node_modules/unplugin-fonts": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/unplugin-fonts/-/unplugin-fonts-1.3.1.tgz",
- "integrity": "sha512-GmaJWPAWH6lBI4fP8xKdbMZJwTgsnr8PGJOfQE52jlod8QkqSO4M529Nox2L8zYapjB5hox2wCu4N3c/LOal/A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-glob": "^3.3.2",
- "unplugin": "2.0.0-beta.1"
- },
- "peerDependencies": {
- "@nuxt/kit": "^3.0.0",
- "vite": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0"
- },
- "peerDependenciesMeta": {
- "@nuxt/kit": {
- "optional": true
- }
- }
- },
- "node_modules/upath": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz",
- "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==",
- "devOptional": true,
- "license": "MIT",
- "engines": {
- "node": ">=4",
- "yarn": "*"
- }
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "license": "BSD-2-Clause",
- "peer": true,
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "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==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/vite": {
- "version": "6.0.7",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.7.tgz",
- "integrity": "sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "esbuild": "^0.24.2",
- "postcss": "^8.4.49",
- "rollup": "^4.23.0"
- },
- "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-plugin-vuetify": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/vite-plugin-vuetify/-/vite-plugin-vuetify-2.0.4.tgz",
- "integrity": "sha512-A4cliYUoP/u4AWSRVRvAPKgpgR987Pss7LpFa7s1GvOe8WjgDq92Rt3eVXrvgxGCWvZsPKziVqfHHdCMqeDhfw==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "@vuetify/loader-shared": "^2.0.3",
- "debug": "^4.3.3",
- "upath": "^2.0.1"
- },
- "engines": {
- "node": "^18.0.0 || >=20.0.0"
- },
- "peerDependencies": {
- "vite": ">=5",
- "vue": "^3.0.0",
- "vuetify": "^3.0.0"
- }
- },
- "node_modules/vscode-uri": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
- "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/vue": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz",
- "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==",
- "license": "MIT",
- "dependencies": {
- "@vue/compiler-dom": "3.5.13",
- "@vue/compiler-sfc": "3.5.13",
- "@vue/runtime-dom": "3.5.13",
- "@vue/server-renderer": "3.5.13",
- "@vue/shared": "3.5.13"
- },
- "peerDependencies": {
- "typescript": "*"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/vue-chartjs": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/vue-chartjs/-/vue-chartjs-5.3.2.tgz",
- "integrity": "sha512-NrkbRRoYshbXbWqJkTN6InoDVwVb90C0R7eAVgMWcB9dPikbruaOoTFjFYHE/+tNPdIe6qdLCDjfjPHQ0fw4jw==",
- "license": "MIT",
- "peerDependencies": {
- "chart.js": "^4.1.1",
- "vue": "^3.0.0-0 || ^2.7.0"
- }
- },
- "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/vue-eslint-parser": {
- "version": "9.4.3",
- "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz",
- "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^4.3.4",
- "eslint-scope": "^7.1.1",
- "eslint-visitor-keys": "^3.3.0",
- "espree": "^9.3.1",
- "esquery": "^1.4.0",
- "lodash": "^4.17.21",
- "semver": "^7.3.6"
- },
- "engines": {
- "node": "^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- },
- "peerDependencies": {
- "eslint": ">=6.0.0"
- }
- },
- "node_modules/vue-eslint-parser/node_modules/eslint-scope": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
- "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/vue-eslint-parser/node_modules/espree": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
- "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "acorn": "^8.9.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/vue-i18n": {
- "version": "11.0.1",
- "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-11.0.1.tgz",
- "integrity": "sha512-pWAT8CusK8q9/EpN7V3oxwHwxWm6+Kp2PeTZmRGvdZTkUzMQDpbbmHp0TwQ8xw04XKm23cr6B4GL72y3W8Yekg==",
- "license": "MIT",
- "dependencies": {
- "@intlify/core-base": "11.0.1",
- "@intlify/shared": "11.0.1",
- "@vue/devtools-api": "^6.5.0"
- },
- "engines": {
- "node": ">= 16"
- },
- "funding": {
- "url": "https://github.com/sponsors/kazupon"
- },
- "peerDependencies": {
- "vue": "^3.0.0"
- }
- },
- "node_modules/vue-router": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.0.tgz",
- "integrity": "sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==",
- "license": "MIT",
- "dependencies": {
- "@vue/devtools-api": "^6.6.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/posva"
- },
- "peerDependencies": {
- "vue": "^3.2.0"
- }
- },
- "node_modules/vue-tsc": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.0.tgz",
- "integrity": "sha512-gtmM1sUuJ8aSb0KoAFmK9yMxb8TxjewmxqTJ1aKphD5Cbu0rULFY6+UQT51zW7SpUcenfPUuflKyVwyx9Qdnxg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@volar/typescript": "~2.4.11",
- "@vue/language-core": "2.2.0"
- },
- "bin": {
- "vue-tsc": "bin/vue-tsc.js"
- },
- "peerDependencies": {
- "typescript": ">=5.0.0"
- }
- },
- "node_modules/vue3-persian-datetime-picker": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/vue3-persian-datetime-picker/-/vue3-persian-datetime-picker-1.2.2.tgz",
- "integrity": "sha512-d7nkj5vgtUvEXZboSdRmP1uwBfXvXgXqdvsOOMQb34jiMZU/aBDrTYWTEe1N+XKF9pvTTJn8Rws9ttJmyhK/hw==",
- "license": "MIT",
- "dependencies": {
- "moment-jalaali": "^0.9.4"
- }
- },
- "node_modules/vuetify": {
- "version": "3.7.6",
- "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.7.6.tgz",
- "integrity": "sha512-lol0Va5HtMIqZfjccSD5DLv5v31R/asJXzc6s7ULy51PHr1DjXxWylZejhq0kVpMGW64MiV1FmA/p8eYQfOWfQ==",
- "license": "MIT",
- "engines": {
- "node": "^12.20 || >=14.13"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/johnleider"
- },
- "peerDependencies": {
- "typescript": ">=4.7",
- "vite-plugin-vuetify": ">=1.0.0",
- "vue": "^3.3.0",
- "webpack-plugin-vuetify": ">=2.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- },
- "vite-plugin-vuetify": {
- "optional": true
- },
- "webpack-plugin-vuetify": {
- "optional": true
- }
- }
- },
- "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==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/word-wrap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "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-name-validator": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
- "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
- "dev": true,
- "license": "Apache-2.0",
- "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==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- }
-}
diff --git a/frontend/package.json b/frontend/package.json
deleted file mode 100644
index e1e399a..0000000
--- a/frontend/package.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
- "name": "frontend",
- "version": "1.2.0-beta.3",
- "private": true,
- "scripts": {
- "dev": "vite --host",
- "build": "vue-tsc --noEmit && vite build",
- "preview": "vite preview",
- "lint": "eslint . --fix --ignore-path .gitignore"
- },
- "dependencies": {
- "@mdi/font": "7.4.47",
- "axios": "^1.7.9",
- "chart.js": "^4.4.7",
- "clipboard": "^2.0.11",
- "core-js": "^3.40.0",
- "moment": "^2.30.1",
- "notivue": "^2.4.5",
- "pinia": "^2.3.0",
- "qrcode.vue": "^3.6.0",
- "roboto-fontface": "^0.10.0",
- "vue": "^3.5.13",
- "vue-chartjs": "^5.3.2",
- "vue-i18n": "^11.0.1",
- "vue-router": "^4.5.0",
- "vue3-persian-datetime-picker": "^1.2.2",
- "vuetify": "^3.7.6"
- },
- "devDependencies": {
- "@babel/types": "^7.26.5",
- "@types/node": "^22.10.7",
- "@vitejs/plugin-vue": "^5.2.1",
- "eslint-plugin-vue": "^9.32.0",
- "material-design-icons-iconfont": "^6.7.0",
- "sass": "1.83.4",
- "typescript": "^5.7.3",
- "unplugin-fonts": "^1.3.1",
- "vite": "^6.0.7",
- "vite-plugin-vuetify": "^2.0.4",
- "vue-tsc": "^2.2.0"
- }
-}
diff --git a/frontend/public/assets/favicon.ico b/frontend/public/assets/favicon.ico
deleted file mode 100644
index 2e25018..0000000
Binary files a/frontend/public/assets/favicon.ico and /dev/null differ
diff --git a/frontend/src/App.vue b/frontend/src/App.vue
deleted file mode 100644
index 0ec30e4..0000000
--- a/frontend/src/App.vue
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
- {{ $t('loading') }}
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/assets/Vazirmatn-UI-NL-Regular.woff2 b/frontend/src/assets/Vazirmatn-UI-NL-Regular.woff2
deleted file mode 100644
index 3ce577a..0000000
Binary files a/frontend/src/assets/Vazirmatn-UI-NL-Regular.woff2 and /dev/null differ
diff --git a/frontend/src/assets/logo.png b/frontend/src/assets/logo.png
deleted file mode 100644
index e982f82..0000000
Binary files a/frontend/src/assets/logo.png and /dev/null differ
diff --git a/frontend/src/assets/logo.svg b/frontend/src/assets/logo.svg
deleted file mode 100644
index c3e063b..0000000
--- a/frontend/src/assets/logo.svg
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
\ No newline at end of file
diff --git a/frontend/src/components/Addr.vue b/frontend/src/components/Addr.vue
deleted file mode 100644
index cc30b5a..0000000
--- a/frontend/src/components/Addr.vue
+++ /dev/null
@@ -1,73 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('in.mdOption') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/DateTime.vue b/frontend/src/components/DateTime.vue
deleted file mode 100644
index 0a73ea7..0000000
--- a/frontend/src/components/DateTime.vue
+++ /dev/null
@@ -1,146 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- {{ $t('submit') }}
-
-
- {{ $t('reset') }}
-
-
- {{ $t('now') }}
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/Dial.vue b/frontend/src/components/Dial.vue
deleted file mode 100644
index c24604c..0000000
--- a/frontend/src/components/Dial.vue
+++ /dev/null
@@ -1,215 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('dial.options') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/frontend/src/components/Headers.vue b/frontend/src/components/Headers.vue
deleted file mode 100644
index 62a75c6..0000000
--- a/frontend/src/components/Headers.vue
+++ /dev/null
@@ -1,99 +0,0 @@
-
-
-
- {{ $t('objects.headers') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/Listen.vue b/frontend/src/components/Listen.vue
deleted file mode 100644
index d037edb..0000000
--- a/frontend/src/components/Listen.vue
+++ /dev/null
@@ -1,118 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('listen.options') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/Main.vue b/frontend/src/components/Main.vue
deleted file mode 100644
index 4c26aab..0000000
--- a/frontend/src/components/Main.vue
+++ /dev/null
@@ -1,237 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('main.tiles') }}
-
-
-
-
-
- {{ $t('main.tiles') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('main.backup.title') }}
- {{ $t('basic.log.title') }}
-
-
-
-
-
-
-
-
-
-
- {{ $t('main.info.host') }}
- {{ tilesData.sys?.hostName }}
- {{ $t('main.info.cpu') }}
-
-
-
- {{ tilesData.sys?.cpuType }}
-
- {{ tilesData.sys?.cpuCount }} {{ $t('main.info.core') }}
-
-
- IP
-
-
-
-
-
- IPv4
-
-
-
-
-
- IPv6
-
-
- S-UI
-
-
- v{{ tilesData.sys?.appVersion }}
-
-
- {{ $t('main.info.uptime') }}
- {{ HumanReadable.formatSecond(tilesData.uptime) }}
-
-
-
-
- {{ $t('main.info.running') }}
-
- {{ $t('yes') }}
- {{ $t('no') }}
-
-
- {{ $t('actions.restartSb') }}
-
-
-
-
- {{ $t('main.info.memory') }}
-
-
- {{ HumanReadable.sizeFormat(tilesData.sbd?.stats?.Alloc) }}
-
-
- {{ $t('main.info.threads') }}
-
-
- {{ tilesData.sbd?.stats?.NumGoroutine }}
-
-
- {{ $t('main.info.uptime') }}
- {{ HumanReadable.formatSecond(tilesData.sbd?.stats?.Uptime) }}
- {{ $t('online') }}
-
-
-
-
- {{ Data().onlines.user?.length }}
-
-
-
- {{ Data().onlines.inbound?.length }}
-
-
-
- {{ Data().onlines.outbound?.length }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/frontend/src/components/Multiplex.vue b/frontend/src/components/Multiplex.vue
deleted file mode 100644
index 1f94517..0000000
--- a/frontend/src/components/Multiplex.vue
+++ /dev/null
@@ -1,129 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/Network.vue b/frontend/src/components/Network.vue
deleted file mode 100644
index d050bbe..0000000
--- a/frontend/src/components/Network.vue
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/OutJson.vue b/frontend/src/components/OutJson.vue
deleted file mode 100644
index e5f97e9..0000000
--- a/frontend/src/components/OutJson.vue
+++ /dev/null
@@ -1,123 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/Rule.vue b/frontend/src/components/Rule.vue
deleted file mode 100644
index 1ccdb58..0000000
--- a/frontend/src/components/Rule.vue
+++ /dev/null
@@ -1,382 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('rule.options') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/SubJsonExt.vue b/frontend/src/components/SubJsonExt.vue
deleted file mode 100644
index c74c19b..0000000
--- a/frontend/src/components/SubJsonExt.vue
+++ /dev/null
@@ -1,450 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('setting.jsonSubOptions') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/Transport.vue b/frontend/src/components/Transport.vue
deleted file mode 100644
index decdd18..0000000
--- a/frontend/src/components/Transport.vue
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/UoT.vue b/frontend/src/components/UoT.vue
deleted file mode 100644
index b6dc292..0000000
--- a/frontend/src/components/UoT.vue
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/Users.vue b/frontend/src/components/Users.vue
deleted file mode 100644
index fdf958d..0000000
--- a/frontend/src/components/Users.vue
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/WgPeer.vue b/frontend/src/components/WgPeer.vue
deleted file mode 100644
index 1051c79..0000000
--- a/frontend/src/components/WgPeer.vue
+++ /dev/null
@@ -1,81 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/message.vue b/frontend/src/components/message.vue
deleted file mode 100644
index ef28851..0000000
--- a/frontend/src/components/message.vue
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/protocols/Direct.vue b/frontend/src/components/protocols/Direct.vue
deleted file mode 100644
index 95b68d9..0000000
--- a/frontend/src/components/protocols/Direct.vue
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/protocols/Http.vue b/frontend/src/components/protocols/Http.vue
deleted file mode 100644
index e8969f2..0000000
--- a/frontend/src/components/protocols/Http.vue
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/protocols/Hysteria.vue b/frontend/src/components/protocols/Hysteria.vue
deleted file mode 100644
index 4be9ca2..0000000
--- a/frontend/src/components/protocols/Hysteria.vue
+++ /dev/null
@@ -1,159 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('types.hy.hyOptions') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/protocols/Hysteria2.vue b/frontend/src/components/protocols/Hysteria2.vue
deleted file mode 100644
index c364a2e..0000000
--- a/frontend/src/components/protocols/Hysteria2.vue
+++ /dev/null
@@ -1,206 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('types.hy.hy2Options') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/protocols/Naive.vue b/frontend/src/components/protocols/Naive.vue
deleted file mode 100644
index 005ef19..0000000
--- a/frontend/src/components/protocols/Naive.vue
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/protocols/OutShadowTls.vue b/frontend/src/components/protocols/OutShadowTls.vue
deleted file mode 100644
index 024ef86..0000000
--- a/frontend/src/components/protocols/OutShadowTls.vue
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/protocols/Selector.vue b/frontend/src/components/protocols/Selector.vue
deleted file mode 100644
index 7e28131..0000000
--- a/frontend/src/components/protocols/Selector.vue
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/protocols/ShadowTls.vue b/frontend/src/components/protocols/ShadowTls.vue
deleted file mode 100644
index a411095..0000000
--- a/frontend/src/components/protocols/ShadowTls.vue
+++ /dev/null
@@ -1,152 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ key }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/protocols/Shadowsocks.vue b/frontend/src/components/protocols/Shadowsocks.vue
deleted file mode 100644
index 11303c4..0000000
--- a/frontend/src/components/protocols/Shadowsocks.vue
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/protocols/Socks.vue b/frontend/src/components/protocols/Socks.vue
deleted file mode 100644
index f39b28b..0000000
--- a/frontend/src/components/protocols/Socks.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/protocols/Ssh.vue b/frontend/src/components/protocols/Ssh.vue
deleted file mode 100644
index 97a8964..0000000
--- a/frontend/src/components/protocols/Ssh.vue
+++ /dev/null
@@ -1,151 +0,0 @@
-
-
-
-
-
-
- {{ $t('tls.usePath') }}
- {{ $t('tls.useText') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('types.ssh.options') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/protocols/TProxy.vue b/frontend/src/components/protocols/TProxy.vue
deleted file mode 100644
index 036bde7..0000000
--- a/frontend/src/components/protocols/TProxy.vue
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/protocols/Tor.vue b/frontend/src/components/protocols/Tor.vue
deleted file mode 100644
index b3e8326..0000000
--- a/frontend/src/components/protocols/Tor.vue
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/protocols/Trojan.vue b/frontend/src/components/protocols/Trojan.vue
deleted file mode 100644
index b3637b8..0000000
--- a/frontend/src/components/protocols/Trojan.vue
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/protocols/Tuic.vue b/frontend/src/components/protocols/Tuic.vue
deleted file mode 100644
index 99fd707..0000000
--- a/frontend/src/components/protocols/Tuic.vue
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/protocols/Tun.vue b/frontend/src/components/protocols/Tun.vue
deleted file mode 100644
index 49edabc..0000000
--- a/frontend/src/components/protocols/Tun.vue
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/protocols/UrlTest.vue b/frontend/src/components/protocols/UrlTest.vue
deleted file mode 100644
index 298c97e..0000000
--- a/frontend/src/components/protocols/UrlTest.vue
+++ /dev/null
@@ -1,121 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('types.lb.urlTestOptions') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/protocols/Vless.vue b/frontend/src/components/protocols/Vless.vue
deleted file mode 100644
index 0d7b559..0000000
--- a/frontend/src/components/protocols/Vless.vue
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/protocols/Vmess.vue b/frontend/src/components/protocols/Vmess.vue
deleted file mode 100644
index 04d6690..0000000
--- a/frontend/src/components/protocols/Vmess.vue
+++ /dev/null
@@ -1,72 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/protocols/Warp.vue b/frontend/src/components/protocols/Warp.vue
deleted file mode 100644
index 932a150..0000000
--- a/frontend/src/components/protocols/Warp.vue
+++ /dev/null
@@ -1,156 +0,0 @@
-
-
-
-
-
-
- | Device ID |
- {{ data.ext.device_id }} |
-
-
- | Access Token |
- {{ data.ext.access_token }} |
-
-
- | {{ $t('types.wg.privKey') }} |
- {{ data.private_key }} |
-
-
- | {{ $t('types.wg.localIp') }} |
- {{ data.address.join(',') }} |
-
-
- |
-
-
- |
-
-
-
-
-
-
-
- | {{ $t('out.addr') }} |
- {{ data.peers[0].address + ":" + data.peers[0].port }} |
-
-
- | {{ $t('types.wg.pubKey') }} |
- {{ data.peers[0].public_key }} |
-
-
- | {{ $t('types.wg.allowedIp') }} |
- {{ data.peers[0].allowed_ips.join(',') }} |
-
-
- | Reserved |
- [{{ data.peers[0].reserved.join(',') }}] |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('types.wg.options') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/protocols/Wireguard.vue b/frontend/src/components/protocols/Wireguard.vue
deleted file mode 100644
index 6a357fe..0000000
--- a/frontend/src/components/protocols/Wireguard.vue
+++ /dev/null
@@ -1,181 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('types.wg.options') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('types.wg.peers') }}
-
-
-
-
- {{ $t('types.wg.peer') + ' ' + (index+1) }}
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/tiles/Gauge.vue b/frontend/src/components/tiles/Gauge.vue
deleted file mode 100644
index ce8f7e4..0000000
--- a/frontend/src/components/tiles/Gauge.vue
+++ /dev/null
@@ -1,110 +0,0 @@
-
-
-
-
-
-
-
diff --git a/frontend/src/components/tiles/History.vue b/frontend/src/components/tiles/History.vue
deleted file mode 100644
index 4069e5b..0000000
--- a/frontend/src/components/tiles/History.vue
+++ /dev/null
@@ -1,200 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/tls/Acme.vue b/frontend/src/components/tls/Acme.vue
deleted file mode 100644
index 7d389f2..0000000
--- a/frontend/src/components/tls/Acme.vue
+++ /dev/null
@@ -1,252 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('tls.acme.options') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/tls/Ech.vue b/frontend/src/components/tls/Ech.vue
deleted file mode 100644
index 7e21844..0000000
--- a/frontend/src/components/tls/Ech.vue
+++ /dev/null
@@ -1,163 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('tls.usePath') }}
- {{ $t('tls.useText') }}
-
-
-
-
-
-
-
- {{ $t('actions.generate') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/tls/InTLS.vue b/frontend/src/components/tls/InTLS.vue
deleted file mode 100644
index 5763141..0000000
--- a/frontend/src/components/tls/InTLS.vue
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/tls/OutTLS.vue b/frontend/src/components/tls/OutTLS.vue
deleted file mode 100644
index 8bdc9ff..0000000
--- a/frontend/src/components/tls/OutTLS.vue
+++ /dev/null
@@ -1,336 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('tls.usePath') }}
- {{ $t('tls.useText') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ECH
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('tls.usePath') }}
- {{ $t('tls.useText') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('tls.options') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/transports/Http.vue b/frontend/src/components/transports/Http.vue
deleted file mode 100644
index c6f8b0b..0000000
--- a/frontend/src/components/transports/Http.vue
+++ /dev/null
@@ -1,82 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/transports/HttpUpgrade.vue b/frontend/src/components/transports/HttpUpgrade.vue
deleted file mode 100644
index cfc3c90..0000000
--- a/frontend/src/components/transports/HttpUpgrade.vue
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/transports/WebSocket.vue b/frontend/src/components/transports/WebSocket.vue
deleted file mode 100644
index cf9f669..0000000
--- a/frontend/src/components/transports/WebSocket.vue
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/transports/gRPC.vue b/frontend/src/components/transports/gRPC.vue
deleted file mode 100644
index 3fc80d7..0000000
--- a/frontend/src/components/transports/gRPC.vue
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/layouts/default/AppBar.vue b/frontend/src/layouts/default/AppBar.vue
deleted file mode 100644
index 27bff40..0000000
--- a/frontend/src/layouts/default/AppBar.vue
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/frontend/src/layouts/default/Default.vue b/frontend/src/layouts/default/Default.vue
deleted file mode 100644
index 677235e..0000000
--- a/frontend/src/layouts/default/Default.vue
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/layouts/default/Drawer.vue b/frontend/src/layouts/default/Drawer.vue
deleted file mode 100644
index 13e8943..0000000
--- a/frontend/src/layouts/default/Drawer.vue
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/layouts/default/View.vue b/frontend/src/layouts/default/View.vue
deleted file mode 100644
index f17623b..0000000
--- a/frontend/src/layouts/default/View.vue
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/layouts/modals/Admin.vue b/frontend/src/layouts/modals/Admin.vue
deleted file mode 100644
index 8344503..0000000
--- a/frontend/src/layouts/modals/Admin.vue
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
-
-
- {{ $t('admin.changeCred') + " " + user.username }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('actions.close') }}
-
-
- {{ $t('actions.save') }}
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/layouts/modals/Backup.vue b/frontend/src/layouts/modals/Backup.vue
deleted file mode 100644
index e3228b7..0000000
--- a/frontend/src/layouts/modals/Backup.vue
+++ /dev/null
@@ -1,91 +0,0 @@
-
-
-
-
-
- {{ $t('main.backup.title') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('main.backup.backup') }}
-
-
-
-
-
- {{ $t('main.backup.restore') }}
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/layouts/modals/Changes.vue b/frontend/src/layouts/modals/Changes.vue
deleted file mode 100644
index 6c2bf30..0000000
--- a/frontend/src/layouts/modals/Changes.vue
+++ /dev/null
@@ -1,145 +0,0 @@
-
-
-
-
-
- {{ $t('admin.changes') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ dateFormatted(value) }}
-
-
-
-
- {{ $t('actions.' + value) }}
-
-
-
-
-
- Index: {{ item.index }}
- {{ item.obj }}
- |
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/layouts/modals/Client.vue b/frontend/src/layouts/modals/Client.vue
deleted file mode 100644
index badf8a3..0000000
--- a/frontend/src/layouts/modals/Client.vue
+++ /dev/null
@@ -1,280 +0,0 @@
-
-
-
-
- {{ $t('actions.' + title) + " " + $t('objects.client') }}
-
-
-
-
-
-
- {{ $t('client.basics') }}
- {{ $t('client.config') }}
- {{ $t('client.links') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('stats.usage') }}: {{ total }}({{ percent }}%)
-
-
-
- {{ $t('reset') }}
-
-
-
-
-
-
-
-
- {{ up }}
- /
- {{ down }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ key }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ index + 1 }}
- {{ lnk.uri }}
-
-
-
- {{ $t('actions.add') }} {{ $t('client.external') }}
-
-
-
-
-
-
-
-
-
- {{ $t('actions.add') }} {{ $t('client.sub') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('actions.close') }}
-
-
- {{ $t('actions.save') }}
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/layouts/modals/ClientBulk.vue b/frontend/src/layouts/modals/ClientBulk.vue
deleted file mode 100644
index a77e7f8..0000000
--- a/frontend/src/layouts/modals/ClientBulk.vue
+++ /dev/null
@@ -1,193 +0,0 @@
-
-
-
-
- {{ $t('actions.addbulk') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('actions.close') }}
-
-
- {{ $t('actions.save') }}
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/layouts/modals/Endpoint.vue b/frontend/src/layouts/modals/Endpoint.vue
deleted file mode 100644
index 36af78d..0000000
--- a/frontend/src/layouts/modals/Endpoint.vue
+++ /dev/null
@@ -1,158 +0,0 @@
-
-
-
-
- {{ $t('actions.' + title) + " " + $t('objects.endpoint') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('actions.close') }}
-
-
- {{ $t('actions.save') }}
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/layouts/modals/Inbound.vue b/frontend/src/layouts/modals/Inbound.vue
deleted file mode 100644
index af0e3c3..0000000
--- a/frontend/src/layouts/modals/Inbound.vue
+++ /dev/null
@@ -1,266 +0,0 @@
-
-
-
-
- {{ $t('actions.' + title) + " " + $t('objects.inbound') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('in.sSide') }}
- {{ $t('in.cSide') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('in.multiDomain') }}
-
-
-
- {{ $t('in.addr') }} #{{ (index+1) }}
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('actions.close') }}
-
-
- {{ $t('actions.save') }}
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/layouts/modals/Logs.vue b/frontend/src/layouts/modals/Logs.vue
deleted file mode 100644
index f9c3ec9..0000000
--- a/frontend/src/layouts/modals/Logs.vue
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
-
-
- {{ $t('basic.log.title') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/layouts/modals/Outbound.vue b/frontend/src/layouts/modals/Outbound.vue
deleted file mode 100644
index 6685953..0000000
--- a/frontend/src/layouts/modals/Outbound.vue
+++ /dev/null
@@ -1,199 +0,0 @@
-
-
-
-
- {{ $t('actions.' + title) + " " + $t('objects.outbound') }}
-
-
-
-
-
- {{ $t('client.basics') }}
- {{ $t('client.external') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('submit') }}
-
-
-
-
-
-
-
-
-
- {{ $t('actions.close') }}
-
-
- {{ $t('actions.save') }}
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/layouts/modals/QrCode.vue b/frontend/src/layouts/modals/QrCode.vue
deleted file mode 100644
index 0753e1b..0000000
--- a/frontend/src/layouts/modals/QrCode.vue
+++ /dev/null
@@ -1,144 +0,0 @@
-
-
-
-
-
- QrCode
-
-
-
-
-
-
-
-
- {{ $t('setting.sub') }}
- {{ $t('client.links') }}
-
-
-
-
-
- {{ $t('setting.sub') }}
-
-
-
-
-
- {{ $t('setting.jsonSub') }}
-
-
-
-
-
- SING-BOX (scan only)
-
-
-
-
-
-
-
- {{ l.remark?? $t('client.' + l.type) }}
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/layouts/modals/Rule.vue b/frontend/src/layouts/modals/Rule.vue
deleted file mode 100644
index 1416402..0000000
--- a/frontend/src/layouts/modals/Rule.vue
+++ /dev/null
@@ -1,320 +0,0 @@
-
-
-
-
- {{ $t('actions.' + title) + " " + $t('objects.rule') }}
-
-
-
-
-
-
-
-
-
- {})" hide-details>{{ $t('actions.add') + " " + $t('objects.rule') }}
-
-
-
- {{ $t('objects.rule') + ' ' + (index+1) }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('actions.close') }}
-
-
- {{ $t('actions.save') }}
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/layouts/modals/Ruleset.vue b/frontend/src/layouts/modals/Ruleset.vue
deleted file mode 100644
index a1842d6..0000000
--- a/frontend/src/layouts/modals/Ruleset.vue
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
-
-
- {{ $t('actions.' + title) + " Ruleset" }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('actions.close') }}
-
-
- {{ $t('actions.save') }}
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/layouts/modals/Stats.vue b/frontend/src/layouts/modals/Stats.vue
deleted file mode 100644
index 09d16be..0000000
--- a/frontend/src/layouts/modals/Stats.vue
+++ /dev/null
@@ -1,218 +0,0 @@
-
-
-
-
-
-
- {{ $t('stats.graphTitle') }}
-
-
-
-
-
-
-
-
- {{ $t('objects.' + resource) + " : " + tag }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/layouts/modals/Tls.vue b/frontend/src/layouts/modals/Tls.vue
deleted file mode 100644
index d91fb3e..0000000
--- a/frontend/src/layouts/modals/Tls.vue
+++ /dev/null
@@ -1,547 +0,0 @@
-
-
-
-
- {{ $t('actions.' + title) + " " + $t('objects.tls') }}
-
-
-
-
-
-
-
-
-
-
-
- TLS
- Reality
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('tls.usePath') }}
- {{ $t('tls.useText') }}
-
-
-
-
-
-
-
- {{ $t('actions.generate') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('actions.generate') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('tls.options') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('actions.close') }}
-
-
- {{ $t('actions.save') }}
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/locales/en.ts b/frontend/src/locales/en.ts
deleted file mode 100644
index 6095e5e..0000000
--- a/frontend/src/locales/en.ts
+++ /dev/null
@@ -1,434 +0,0 @@
-export default {
- message: "Welcome",
- success: "success",
- failed: "failed",
- enable: "Enable",
- disable: "Disable",
- none: "None",
- all: "All",
- filter: "Filter",
- loading: "Loading...",
- confirm: "Are you sure ?",
- yes: "yes",
- no: "no",
- unlimited: "infinite",
- remained: "Remained",
- type: "Type",
- protocol: "Protocol",
- submit: "Submit",
- reset: "Reset",
- now: "Now",
- network: "Network",
- copyToClipboard: "Copy to clipboard",
- noData: "No data!",
- invalidLogin: "Invalid Login!",
- online: "Online",
- version: "Version",
- email: "Email",
- commaSeparated: "(comma separated)",
- count: "Count",
- template: "Template",
- error: {
- dplData: "Duplicate Data",
- core: "Sing-Box Error",
- },
- pages: {
- login: "Login",
- home: "Home",
- inbounds: "Inbounds",
- outbounds: "Outbounds",
- endpoints: "Endpoints",
- clients: "Clients",
- rules: "Rules",
- tls: "TLS Settings",
- basics: "Basics",
- admins: "Admins",
- settings: "Settings",
- },
- main: {
- tiles: "Tiles",
- gauges: "Gauges",
- charts: "Charts",
- infos: "Information",
- gauge: {
- cpu: "CPU Gauge",
- mem: "RAM Gauge",
- },
- chart: {
- cpu: "CPU Monitor",
- mem: "RAM Monitor",
- net: "Network Bandwidth",
- pnet: "Network Packets",
- },
- info: {
- sys: "System Info",
- sbd: "Sing-Box Info",
- host: "Host",
- cpu: "CPU",
- core: "Core",
- uptime: "Uptime",
- threads: "Threads",
- memory: "Memory",
- running: "Running"
- },
- backup: {
- title: "Backup & Restore",
- backup: "Download Backup",
- restore: "Restore",
- exclStats: "Exclude graphs",
- exclChanges: "Exclude changes",
- }
- },
- objects: {
- inbound: "Inbound",
- client: "Client",
- outbound: "Outbound",
- endpoint: "Endpoint",
- config: "Config",
- rule: "Rule",
- user: "User",
- tag: "Tag",
- listen: "Listen",
- dial: "Dial",
- tls: "TLS",
- multiplex: "Multiplex",
- transport: "Transport",
- headers: "Headers",
- key: "Key",
- value: "Value",
- },
- actions: {
- action: "Action",
- add: "Add",
- addbulk: "Add Bulk",
- new: "New",
- edit: "Edit",
- del: "Delete",
- clone: "Clone",
- save: "Save",
- update: "Update",
- submit: "Submit",
- set: "Set",
- generate: "Generate",
- disable: "Disable",
- close: "Close",
- restartApp: "Restart App",
- restartSb: "Restart Singbox",
- },
- login: {
- title: "Login",
- username: "Username",
- unRules: "Username can not be empty",
- password: "Password",
- pwRules: "Password can not be empty",
- },
- menu: {
- logout: "Logout",
- },
- admin: {
- changeCred: "Change credentials",
- oldPass: "Current Password",
- newUname: "New Username",
- newPass: "New Password",
- lastLogin: "Last login",
- date: "Date",
- time: "Time",
- changes: "Changes",
- actor: "Actor",
- key: "Key",
- action: "Action",
- },
- setting: {
- interface: "Interface",
- sub: "Subscription",
- addr: "Address",
- port: "Port",
- webPath: "Base URI",
- domain: "Domain",
- sslKey: "SSL Key Path",
- sslCert: "SSL Certificate Path",
- webUri: "Panel URI",
- sessionAge: "Session Maximum Age",
- trafficAge: "Traffic Maximum Age",
- timeLoc: "Timezone Location",
- subEncode: "Enable Encoding",
- subInfo: "Enable Client Info",
- path: "Default Path",
- update: "Automatic Update Time",
- subUri: "Subscription URI",
- jsonSub: "JSON Subscription",
- toDirect: "Route to Direct",
- toBlock: "Route to Block",
- timestamp: "Timestamp",
- globalDns: "Global DNS",
- directDns: "Direct DNS",
- toDirectDns: "Route to Direct DNS",
- jsonSubOptions: "Other Options",
- excludePkg: "Exclude Packages",
- },
- client: {
- name: "Name",
- desc: "Description",
- group: "Group",
- inboundTags: "Inbound Tags",
- basics: "Basics",
- config: "Config",
- links: "Links",
- external: "External Link",
- sub: "External Subscription",
- },
- bulk: {
- order: "Order",
- random: "Random",
- },
- types: {
- un: "Username",
- pw: "Password",
- direct: {
- overrideAddr: "Override Address",
- overridePort: "Override Port",
- },
- hy: {
- obfs: "Obfuscated Password",
- auth: "Authentication Password",
- hyOptions: "Hysteria Options",
- hy2Options: "Hysteria2 Options",
- ignoreBw: "Ignore Client Bandwidth",
- },
- shdwTls: {
- hs: "Handshake Server",
- addHS: "Add Handshake Server",
- },
- ssh: {
- passphrase: "Passphrase",
- hostKey: "Host Keys",
- algorithm: "Key Algorithms",
- clientVer: "Client Version",
- options: "SSH Options",
- },
- tor: {
- execPath: "Executable File Path",
- dataDir: "Data Directory",
- extArgs: "Extra Args",
- },
- tuic: {
- congControl: "Congestion Control",
- authTimeout: "Authentication Timeout",
- hb: "Heartbeat",
- },
- tun: {
- addr: "Addresses",
- ifName: "Interface Name",
- },
- vless: {
- flow: "Flow",
- udpEnc: "UDP Packet Encoding",
- },
- vmess: {
- security: "Security",
- globalPadding: "Global Padding",
- authLen: "Encryptrd Length",
- },
- wg: {
- privKey: "Private Key",
- pubKey: "Peer Public Key",
- psk: "Pre-Shared Key",
- localIp: "Local IPs",
- worker: "Workers",
- ifName: "Interface Name",
- sysIf: "System Interface",
- options: "Wireguard Options",
- multiPeer: "Multi Peer",
- allowedIp: "Allowed IPs",
- peer: "Peer",
- peers: "Peers",
- },
- lb: {
- defaultOut: "Default Outbound",
- interruptConn: "Interrupt exist connections",
- testUrl: "Test URL",
- interval: "Interval",
- tolerance: "Tolerance",
- urlTestOptions: "URLTest Options"
- }
- },
- in: {
- addr: "Address",
- port: "Port",
- clients: "Enable Clients",
- ssMethod: "Method",
- sSide: "Server Side",
- cSide: "Client Side",
- multiDomain: "Multi Domain",
- remark: "Remark",
- mdOption: "Multi Domain Options",
- },
- listen: {
- options: "Listen Options",
- tcpOptions: "TCP Options",
- udpOptions: "UDP Options",
- detour: "Detour",
- detourText: "Forward to inbound",
- domainStrategy: "Domain Strategy",
- },
- dial: {
- bindIf: "Bind to Network Interface",
- bindIp4: "Bind to IPv4",
- bindIp6: "Bind to IPv6",
- reuseAddr: "Reuse Listener Address",
- connTimeout: "Connection Timeout",
- fbTimeout: "Fallback Timeout",
- options: "Dial Options",
- detourText: "Forward to outbound",
- },
- transport: {
- enable: "Enable Transport",
- host: "Host",
- hosts: "Hosts",
- path: "Path",
- httpMethod: "Request Method",
- idleTimeout: "Idle Timeout",
- pingTimeout: "Ping Timeout",
- grpcServiceName: "Service Name",
- grpcPws: "Permit Without Stream",
- },
- mux: {
- enable: "Enable Multiplex",
- maxConn: "Max Connections",
- minStr: "Min Streams",
- maxStr: "Max Streams",
- padding: "Only padding",
- enableBrutal: "Enable Brutal",
- },
- out: {
- addr: "Server Address",
- port: "Server Port",
- },
- rule: {
- add: "Add Rule",
- simple: "Simple",
- logical: "Logical",
- mode: "Mode",
- invert: "Invert",
- ipVer: "IP Version",
- domain: "Domains",
- domainSufix: "Domain Suffixes",
- domainKw: "Domain Keywords",
- domainRgx: "Domain Regexes",
- ip: "IP CIDRs",
- privateIp: "Invalid IP Ranges",
- port: "Ports",
- portRange: "Port Ranges",
- srcCidr: "Source IP CIDRs",
- srcPrivateIp: "Invalid Source IPs",
- srcPort: "Source Ports",
- srcPortRange: "Source Port Ranges",
- ruleset: "Rulesets",
- rulesetMatchSrc: "Ruleset IPcidr Match Source",
- options: "Rule Options",
- domainRules: "Domain/IP",
- srcIpRules: "Source IP",
- srcPortRules: "Source Port",
- udpDisableDomainUnmapping: "UDP Disable Domain Unmapping",
- udpConnect: "UDP Connect",
- udpTimeout: "UDP Timeout",
- method: "Method",
- noDrop: "No Drop",
- sniffer: "Sniffer",
- timeout: "Timeout",
- strategy: "Strategy",
- },
- ruleset: {
- add: "Add Ruleset",
- format: "Data Format",
- interval: "Update Intervals",
- remote: "Remote",
- local: "Local",
- },
- basic: {
- log: {
- title: "Logs",
- level: "Level",
- output: "Output",
- timestamp: "Enable Timestamp",
- },
- dns: {
- final: "Final",
- server: "Server",
- firstServer: "First Server",
- addrResolver: "Address Resolver",
- },
- routing: {
- title: "Routing",
- defaultOut: "Default Outbound",
- defaultIf: "Default NIC",
- defaultRm: "Default Routing Mark",
- autoBind: "Auto Bind NIC",
- },
- exp: {
- storeFakeIp: "Store Fake IP",
- },
- },
- tls: {
- enable: "Enable TLS",
- usePath: "Use Path",
- useText: "Use Text",
- certPath: "Certificate File Path",
- keyPath: "Key File Path",
- cert: "Certificate",
- key: "Key",
- options: "TLS Options",
- minVer: "Minimum Version",
- maxVer: "Maximum Version",
- cs: "Cipher suits",
- privKey: "Private Key",
- pubKey: "Public Key",
- disableSni: "Disable SNI",
- insecure: "Allow Insecure",
- acme: {
- options: "ACME Options",
- dataDir: "Data Directory",
- defaultDomain: "Default Domain",
- disableChallenges: "Disable Challenges",
- httpChallenge: "Disable HTTP Challenge",
- tlsChallenge: "Disable TLS Challenge",
- altPorts: "Alternative Ports",
- altHport: "Alternative HTTP Port",
- altTport: "Alternative TLS Port",
- caProvider: "CA Provider",
- customCa: "Custom CA Provider",
- extAcc: "External Account",
- dns01: "DNS01 Challenge",
- dns01Provider: "DNS01 Challenge Provider",
- },
- },
- stats: {
- upload: "Upload",
- download: "Download",
- volume: "Volume",
- usage: "Usage",
- graphTitle: "Traffic Chart",
- B: "B",
- KB: "KB",
- MB: "MB",
- GB: "GB",
- TB: "TB",
- PB: "PB",
- p: "p",
- Kp: "Kp",
- Mp: "Mp",
- Gb: "Gb",
- bps: "bps",
- Kbps: "Kbps",
- Mbps: "Mbps",
- },
- date: {
- expiry: "Expiry",
- expired: "Expired",
- d: "d",
- h: "h",
- m: "m",
- s: "s",
- ms: "ms",
- },
-}
\ No newline at end of file
diff --git a/frontend/src/locales/fa.ts b/frontend/src/locales/fa.ts
deleted file mode 100644
index 206d596..0000000
--- a/frontend/src/locales/fa.ts
+++ /dev/null
@@ -1,434 +0,0 @@
-export default {
- message: "خوش آمدید",
- success: "موفق",
- failed: "خطا",
- enable: "فعال",
- disable: "غیرفعال",
- none: "هیچ",
- all: "همه",
- filter: "فیلتر",
- loading: "در حال بارگذاری...",
- confirm: "آیا مطمئن هستید ؟",
- yes: "بله",
- no: "خیر",
- unlimited: "نامحدود",
- remained: "باقیمانده",
- type: "مدل",
- protocol: "پروتکل",
- submit: "تایید",
- reset: "ریست",
- now: "اکنون",
- network: "شبکه",
- copyToClipboard: "کپی در حافظه",
- noData: "بدون داده!",
- invalidLogin: "ورود نامعتبر!",
- online: "آنلاین",
- version: "نسخه",
- email: "ایمیل",
- commaSeparated: "(جداشده با کاما)",
- count: "تعداد",
- template: "الگو",
- error: {
- dplData: "داده تکراری",
- core: "خطا در سینگباکس",
- },
- pages: {
- login: "ورود",
- home: "خانه",
- inbounds: "ورودیها",
- outbounds: "خروجیها",
- endpoints: "درگاهها",
- clients: "کاربران",
- rules: "قوانین",
- tls: "رمزنگاریها",
- basics: "ترازها",
- admins: "ادمینها",
- settings: "پیکربندی",
- },
- main: {
- tiles: "کاشیها",
- gauges: "سنجشها",
- charts: "نمودارها",
- infos: "دادهها",
- gauge: {
- cpu: "سنجش پردازنده",
- mem: "سنجش حافظه",
- },
- chart: {
- cpu: "نمودار پردازنده",
- mem: "نمودار حافظه",
- net: "ترافیک شبکه",
- pnet: "بستههای شبکه",
- },
- info: {
- sys: "دادههای سیستم",
- sbd: "دادههای سینگباکس",
- host: "نام",
- cpu: "پردازنده",
- core: "هسته",
- uptime: "مدت",
- threads: "نخها",
- memory: "حافظه",
- running: "اجرا"
- },
- backup: {
- title: "پشتیبانگیری و بازیابی",
- backup: "دریافت پشتیبان",
- restore: "بازیابی",
- exclStats: "بدون گرافها",
- exclChanges: "بدون تغییرات",
- },
- },
- objects: {
- inbound: "ورودی",
- client: "کاربر",
- outbound: "خروجی",
- endpoint: "درگاه",
- config: "پیکربندی",
- rule: "قانون",
- user: "کاربر",
- tag: "برچسب",
- listen: "گوشدادن",
- dial: "تماس",
- tls: "رمزنگاری",
- multiplex: "تسهیم",
- transport: "انتقال",
- headers: "سربرگها",
- key: "نام",
- value: "مقدار",
- },
- actions: {
- action: "فرمان",
- add: "ایجاد",
- addbulk: "ایجاد انبوه",
- new: "جدید",
- edit: "ویرایش",
- del: "حذف",
- clone: "شبیهسازی",
- save: "ذخیره",
- update: "بروزرسانی",
- submit: "ارسال",
- set: "تنظیم",
- generate: "تولید",
- disable: "غیرفعال",
- close: "بستن",
- restartApp: "ریستارت پنل",
- restartSb: "ریستارت سینگباکس",
- },
- login: {
- title: "ورود",
- username: "نام کاربری",
- unRules: "نام کاربری نمیتواند خالی باشد",
- password: "کلمه عبور",
- pwRules: "کلمه عبور نمیتواند خالی باشد",
- },
- menu: {
- logout: "خروج",
- },
- admin: {
- changeCred: "ویرایش دادهها",
- oldPass: "رمز کنونی",
- newUname: "نام کاربری جدید",
- newPass: "رمز جدید",
- lastLogin: "آخرین ورود",
- date: "تاریخ",
- time: "ساعت",
- changes: "تغییرات",
- actor: "مجری",
- key: "کلید",
- action: "عمل",
- },
- setting: {
- interface: "نما",
- sub: "سابسکریپشن",
- addr: "آدرس",
- port: "پورت",
- webPath: "مسیر پایه",
- domain: "دامنه",
- sslKey: "مسیر فایل کلید",
- sslCert: "مسیر فایل گواهی",
- webUri: "آدرس نهایی پنل",
- sessionAge: "بیشینه زمان لاگین ماندن",
- trafficAge: "بیشینه زمان ذخیره ترافیک",
- timeLoc: "منطقه زمانی",
- subEncode: "رمزگذاری",
- subInfo: "نمایش اطلاعات کاربر",
- path: "مسیر پیشفرض",
- update: "زمان بروزرسانی خودکار",
- subUri: "آدرس نهایی سابسکریپشن",
- jsonSub: "سابسکریپشن JSON",
- toDirect: "هدایت مستقیم",
- toBlock: "بستن مسیر",
- timestamp: "نمایش زمان",
- globalDns: "DNS کلی",
- directDns: "DNS مستقیم",
- toDirectDns: "هدایت به DNS مستقیم",
- jsonSubOptions: "گزینههای دیگر",
- excludePkg: "نرمافزارهای استثنا",
- },
- client: {
- name: "نام",
- desc: "شرح",
- group: "گروه",
- inboundTags: "برچسبهای ورودی",
- basics: "پایه",
- config: "تنظیم",
- links: "لینکها",
- external: "لینک خارجی",
- sub: "سابسکریپشن خارجی",
- },
- bulk: {
- order: "ترتیب",
- random: "تصادفی",
- },
- types: {
- un: "نام کاربری",
- pw: "رمز",
- direct: {
- overrideAddr: "جایگزین آدرس",
- overridePort: "جایگزین پورت",
- },
- hy: {
- obfs: "رمز مبهم کننده",
- auth: "رمز احراز هویت",
- hyOptions: "گزینههای Hysteria",
- hy2Options: "گزینههای Hysteria2",
- ignoreBw: "نادیدهگرفتن پهنایباند کاربر",
- },
- shdwTls: {
- hs: "سرور دستتکانی",
- addHS: "افزودن سرور دستتکانی",
- },
- ssh: {
- passphrase: "عبارت عبور",
- hostKey: "کلیدهای هاستها",
- algorithm: "الگوریتمها",
- clientVer: "نسخه کلاینت",
- options: "گزینههای SSH",
- },
- tor: {
- execPath: "مسیر فایل اجرایی",
- dataDir: "پوشه دادهها",
- extArgs: "آرگومانهای اضافی",
- },
- tuic: {
- congControl: "کنترل ازدحام",
- authTimeout: "مهلت احراز هویت",
- hb: "ضربان قلب",
- },
- tun: {
- addr: "آدرسها",
- ifName: "نام اینترفیس",
- },
- vless: {
- flow: "جریان",
- udpEnc: "کدگذاری بسته UDP",
- },
- vmess: {
- security: "امنیت",
- globalPadding: "لایه بندی کلی",
- authLen: "رمزگذاری اندازه بسته",
- },
- wg: {
- privKey: "کلید خصوصی",
- pubKey: "کلید عمومی همتا",
- psk: "کلید مشترک",
- localIp: "آدرسهای محلی",
- worker: "عملگرها",
- ifName: "نام اینترفیس",
- sysIf: "استفاده از اینترفیس سیستم",
- options: "گزینههای Wireguard",
- multiPeer: "چند همتایی",
- allowedIp: "آدرسهای مجاز",
- peer: "همتا",
- peers: "همتاها",
- },
- lb: {
- defaultOut: "خروجی پیشفرض",
- interruptConn: "قطع ارتباط موجود",
- testUrl: "URL تست",
- interval: "فاصله زمانی",
- tolerance: "تحمل",
- urlTestOptions: "گزینههای URLTest"
- }
- },
- in: {
- addr: "آدرس",
- port: "پورت",
- clients: "فعالسازی کاربران",
- ssMethod: "روش",
- sSide: "سمت سرور",
- cSide: "سمت کاربر",
- multiDomain: "دامنه چندگانه",
- remark: "شرح",
- mdOption: "گزینههای دامنه چندگانه",
- },
- listen: {
- options: "گزینههای گوشدادن",
- tcpOptions: "گزینههای TCP",
- udpOptions: "گزینههای UDP",
- detour: "انحراف مسیر",
- detourText: "ارسال به ورودی دیگر",
- domainStrategy: "استراتژی دامنه",
- },
- dial: {
- bindIf: "اتصال به کارت شبکه",
- bindIp4: "اتصال به IPv4",
- bindIp6: "اتصال به IPv6",
- reuseAddr: "استفاده مجدد از آدرس",
- connTimeout: "مهلت ارتباط",
- fbTimeout: "مهلت فالبک",
- options: "گزینههای تماس",
- detourText: "ارسال به خروجی دیگر",
- },
- transport: {
- enable: "فعالسازی انتقال",
- host: "دامنه",
- hosts: "دامنهها",
- path: "مسیر",
- httpMethod: "متد درخواست",
- idleTimeout: "مهلت بیکاری",
- pingTimeout: "مهلت پینگ",
- grpcServiceName: "نام سرویس",
- grpcPws: "حفظ ارتباط بدون دیتا",
- },
- mux: {
- enable: "فعالسازی تسهیم",
- maxConn: "بیشینه ارتباطات",
- minStr: "کمینه استریم",
- maxStr: "بیشینه استریم",
- padding: "فقط با پدینگ",
- enableBrutal: "فعالسازی شدت",
- },
- out: {
- addr: "آدرس سرور",
- port: "پورت سرور",
- },
- rule: {
- add: "ایجاد قانون",
- simple: "ساده",
- logical: "منطقی",
- mode: "حالت",
- invert: "برعکس",
- ipVer: "نسخه IP",
- domain: "دامنهها",
- domainSufix: "پسوندهای دامنه",
- domainKw: "کلمات کلیدی دامنه",
- domainRgx: "رجکس دامنه",
- ip: "محدودههای IP",
- privateIp: "آدرس های IP نامعتبر",
- port: "پورتها",
- portRange: "محدودههای پورت",
- srcCidr: "محدودههای آدرس IP مبدا",
- srcPrivateIp: "آدرسهای IP مبدا نامعتبر",
- srcPort: "پورتهای مبدا",
- srcPortRange: "محدوده پورتهای منبع",
- ruleset: "مجموعهها",
- rulesetMatchSrc: "تطابق آدرسهای مبدا با مجموعه قوانین",
- options: "گزینههای قوانین",
- domainRules: "دامنه/آدرس",
- srcIpRules: "آدرس مبدا",
- srcPortRules: "پورت مبدا",
- udpDisableDomainUnmapping: "عدم تبدیل مسیریابی دامنه",
- udpConnect: "اتصال UDP",
- udpTimeout: "مهلت UDP",
- method: "روش",
- noDrop: "عدم رهاکردن",
- sniffer: "شنود کننده",
- timeout: "مهلت",
- strategy: "استراتژی",
- },
- ruleset: {
- add: "ایجاد مجموعه",
- format: "فرمت دادهها",
- interval: "بازه بروزرسانیها",
- remote: "راه دور",
- local: "محلی",
- },
- basic: {
- log: {
- title: "گزارشها",
- level: "سطح",
- output: "خروجی",
- timestamp: "فعالسازی ثبت زمان",
- },
- dns: {
- final: "سرور نهایی",
- server: "سرور",
- firstServer: "سرور نخست",
- addrResolver: "حل کننده دامنه",
- },
- routing: {
- title: "مسیریابی",
- defaultOut: "خروجی پیشفرض",
- defaultIf: "کارت شبکه پیشفرض",
- defaultRm: "Routing Mark پیشفرض",
- autoBind: "انتخاب اتوماتیک کارت شبکه",
- },
- exp: {
- storeFakeIp: "ذخیره آدرسهای نامعتبر",
- },
- },
- tls: {
- enable: "فعالسازی رمزنگاری",
- usePath: "مسیر فایل",
- useText: "متن گواهی",
- certPath: "مسیر فایل گواهی",
- keyPath: "مسیر فایل کلید",
- cert: "گواهی",
- key: "کلید",
- options: "گزینههای رمزنگاری",
- minVer: "کمینه نسخه",
- maxVer: "بیشینه نسخه",
- cs: "مدلهای رمزنگاری",
- privKey: "کلید خصوصی",
- pubKey: "کلید عمومی",
- disableSni: "غیرفعالسازی SNI",
- insecure: "تایید ارتباط ناامن",
- acme: {
- options: "گزینههای ACME",
- dataDir: "مسیر دادهها",
- defaultDomain: "دامنه پیشفرض",
- disableChallenges: "بستن چالشها",
- httpChallenge: "بستن چالش HTTP",
- tlsChallenge: "بستن چالش TLS",
- altPorts: "پورتهای جایگزین",
- altHport: "پورت جایگزین HTTP",
- altTport: "پورت جایگزین TLS",
- caProvider: "فراهم کننده گواهی",
- customCa: "فراهم کننده دیگر",
- extAcc: "حساب خارجی",
- dns01: "چالش DNS01",
- dns01Provider: "فراهم کننده چالش DNS01",
- },
- },
- stats: {
- upload: "آپلود",
- download: "دانلود",
- volume: "حجم",
- usage: "استفاده",
- graphTitle: "نمودار ترافیک",
- B: "ب",
- KB: "کب",
- MB: "مب",
- GB: "گب",
- TB: "تب",
- PB: "پب",
- p: "پ",
- Kp: "کپ",
- Mp: "مپ",
- Gp: "گپ",
- bps: "ب/ث",
- Kbps: "کب/ث",
- Mbps: "مب/ث",
- },
- date: {
- expiry: "انقضا",
- expired: "منقضی",
- d: "ر",
- h: "س",
- m: "د",
- s: "ث",
- ms: "مث",
- }
-}
\ No newline at end of file
diff --git a/frontend/src/locales/index.ts b/frontend/src/locales/index.ts
deleted file mode 100644
index 7049e4d..0000000
--- a/frontend/src/locales/index.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import { createI18n } from 'vue-i18n'
-import en from './en'
-import fa from './fa'
-import vi from './vi'
-import zhcn from './zhcn'
-import zhtw from './zhtw'
-import ru from './ru'
-
-export const i18n = createI18n({
- legacy: false,
- locale: localStorage.getItem("locale") ?? 'en',
- fallbackLocale: 'en',
- messages: {
- en: en,
- fa: fa,
- vi: vi,
- zhHans: zhcn,
- zhHant: zhtw,
- ru: ru
- },
-})
-
-export const languages = [
- { title: 'English', value: 'en' },
- { title: 'فارسی', value: 'fa' },
- { title: 'Tiếng Việt', value: 'vi' },
- { title: '简体中文', value: 'zhHans' },
- { title: '繁體中文', value: 'zhHant' },
- { title: 'Русский', value: 'ru' },
-]
diff --git a/frontend/src/locales/ru.ts b/frontend/src/locales/ru.ts
deleted file mode 100644
index e0de775..0000000
--- a/frontend/src/locales/ru.ts
+++ /dev/null
@@ -1,434 +0,0 @@
-export default {
- message: "Добро пожаловать",
- success: "успех",
- failed: "ошибка",
- enable: "Включить",
- disable: "Отключить",
- none: "Никакие",
- all: "Все",
- filter: "Фильтр",
- loading: "Загрузка...",
- confirm: "Вы уверены?",
- yes: "да",
- no: "нет",
- unlimited: "бесконечный",
- remained: "Осталось",
- type: "Тип",
- protocol: "Протокол",
- submit: "Отправить",
- reset: "Сбросить",
- now: "Сейчас",
- network: "Сеть",
- copyToClipboard: "Копировать в буфер обмена",
- noData: "Нет данных!",
- invalidLogin: "Неверный логин!",
- online: "В сети",
- version: "Версия",
- email: "Электронная почта",
- commaSeparated: "(разделено запятыми)",
- count: "Количество",
- template: "Шаблон",
- error: {
- dplData: "Дублирующие данные",
- core: "Ошибка Sing-Box",
- },
- pages: {
- login: "Вход",
- home: "Главная",
- inbounds: "Входящие",
- outbounds: "Исходящие",
- endpoints: "Эндпоинты",
- clients: "Клиенты",
- rules: "Правила",
- tls: "Настройки TLS",
- basics: "Основы",
- admins: "Администраторы",
- settings: "Настройки",
- },
- main: {
- tiles: "Плитки",
- gauges: "Датчики",
- charts: "Графики",
- infos: "Информация",
- gauge: {
- cpu: "Загрузка ЦП",
- mem: "Загрузка ОЗУ",
- },
- chart: {
- cpu: "Мониторинг ЦП",
- mem: "Мониторинг ОЗУ",
- net: "Сетевой трафик",
- pnet: "Сетевые пакеты",
- },
- info: {
- sys: "Информация о системе",
- sbd: "Информация о Sing-Box",
- host: "Хост",
- cpu: "ЦП",
- core: "Ядро",
- uptime: "Время работы",
- threads: "Потоки",
- memory: "Память",
- running: "Работает"
- },
- backup: {
- title: "Резервное копирование и восстановление",
- backup: "Скачать резервную копию",
- restore: "Восстановить",
- exclStats: "Исключить графики",
- exclChanges: "Исключить изменения",
- }
- },
- objects: {
- inbound: "Входящий",
- client: "Клиент",
- outbound: "Исходящий",
- endpoint: "Точка входа",
- config: "Настройки",
- rule: "Правило",
- user: "Пользователь",
- tag: "Тег",
- listen: "Прослушивание",
- dial: "Звонок",
- tls: "TLS",
- multiplex: "Мультиплекс",
- transport: "Транспорт",
- headers: "Заголовки",
- key: "Ключ",
- value: "Значение",
- },
- actions: {
- action: "Действие",
- add: "Добавить",
- addbulk: "Добавить пакетно",
- new: "Новый",
- edit: "Редактировать",
- del: "Удалить",
- clone: "Клонировать",
- save: "Сохранить",
- update: "Обновить",
- submit: "Отправить",
- set: "Установить",
- generate: "Генерировать",
- disable: "Отключить",
- close: "Закрыть",
- restartApp: "Перезапустить приложение",
- restartSb: "Перезапустить Singbox",
- },
- login: {
- title: "Вход",
- username: "Имя пользователя",
- unRules: "Имя пользователя не может быть пустым",
- password: "Пароль",
- pwRules: "Пароль не может быть пустым",
- },
- menu: {
- logout: "Выйти",
- },
- admin: {
- changeCred: "Изменить учетные данные",
- oldPass: "Текущий пароль",
- newUname: "Новое имя пользователя",
- newPass: "Новый пароль",
- lastLogin: "Последний вход",
- date: "Дата",
- time: "Время",
- changes: "Изменения",
- actor: "Исполнитель",
- key: "Ключ",
- action: "Действие",
- },
- setting: {
- interface: "Интерфейс",
- sub: "Подписка",
- addr: "Адрес",
- port: "Порт",
- webPath: "Базовый URI",
- domain: "Домен",
- sslKey: "Путь к SSL ключу",
- sslCert: "Путь к SSL сертификату",
- webUri: "URI панели",
- sessionAge: "Максимальная длительность сессии",
- trafficAge: "Максимальная длительность трафика",
- timeLoc: "Часовой пояс",
- subEncode: "Включить кодирование",
- subInfo: "Включить информацию о клиенте",
- path: "Путь по умолчанию",
- update: "Время автоматического обновления",
- subUri: "URI подписки",
- jsonSub: "JSON подписка",
- toDirect: "Маршрутизация на Direct",
- toBlock: "Маршрутизация на Block",
- timestamp: "Метка времени",
- globalDns: "Глобальный DNS",
- directDns: "Прямой DNS",
- toDirectDns: "Маршрутизация на Direct DNS",
- jsonSubOptions: "Другие параметры",
- excludePkg: "Исключить пакеты",
- },
- client: {
- name: "Имя",
- desc: "Описание",
- group: "Группа",
- inboundTags: "Теги входящих",
- basics: "Основы",
- config: "Конфигурация",
- links: "Ссылки",
- external: "Внешняя ссылка",
- sub: "Внешняя подписка",
- },
- bulk: {
- order: "Порядок",
- random: "Случайный",
- },
- types: {
- un: "Имя пользователя",
- pw: "Пароль",
- direct: {
- overrideAddr: "Переопределить адрес",
- overridePort: "Переопределить порт",
- },
- hy: {
- obfs: "Обфусцированный пароль",
- auth: "Пароль аутентификации",
- hyOptions: "Параметры Hysteria",
- hy2Options: "Параметры Hysteria2",
- ignoreBw: "Игнорировать пропускную способность клиента",
- },
- shdwTls: {
- hs: "Сервер рукопожатий",
- addHS: "Добавить сервер рукопожатий",
- },
- ssh: {
- passphrase: "Парольная фраза",
- hostKey: "Ключи хоста",
- algorithm: "Алгоритмы ключей",
- clientVer: "Версия клиента",
- options: "Параметры SSH",
- },
- tor: {
- execPath: "Путь к исполняемому файлу",
- dataDir: "Каталог данных",
- extArgs: "Дополнительные аргументы",
- },
- tuic: {
- congControl: "Контроль перегрузок",
- authTimeout: "Таймаут аутентификации",
- hb: "Сердцебиение",
- },
- tun: {
- addr: "Адреса",
- ifName: "Имя интерфейса",
- },
- vless: {
- flow: "Поток",
- udpEnc: "Кодирование UDP пакетов",
- },
- vmess: {
- security: "Безопасность",
- globalPadding: "Глобальная подкладка",
- authLen: "Длина шифрования",
- },
- wg: {
- privKey: "Приватный ключ",
- pubKey: "Публичный ключ пира",
- psk: "Предварительно разделенный ключ",
- localIp: "Локальные IP",
- worker: "Работники",
- ifName: "Имя интерфейса",
- sysIf: "Системный интерфейс",
- options: "Параметры Wireguard",
- multiPeer: "Множественный пир",
- allowedIp: "Разрешенные IP",
- peer: "Пир",
- peers: "Пиры",
- },
- lb: {
- defaultOut: "Исходящий по умолчанию",
- interruptConn: "Прервать существующие соединения",
- testUrl: "Тестовый URL",
- interval: "Интервал",
- tolerance: "Толерантность",
- urlTestOptions: "Параметры теста URL"
- }
- },
- in: {
- addr: "Адрес",
- port: "Порт",
- clients: "Включить клиентов",
- ssMethod: "Метод",
- sSide: "Сторона сервера",
- cSide: "Сторона клиента",
- multiDomain: "Мультидомен",
- remark: "Примечание",
- mdOption: "Параметры мультидомена",
- },
- listen: {
- options: "Параметры прослушивания",
- tcpOptions: "Параметры TCP",
- udpOptions: "Параметры UDP",
- detour: "Обход",
- detourText: "Переадресация на входящий",
- domainStrategy: "Стратегия домена",
- },
- dial: {
- bindIf: "Привязка к сетевому интерфейсу",
- bindIp4: "Привязка к IPv4",
- bindIp6: "Привязка к IPv6",
- reuseAddr: "Повторное использование адреса слушателя",
- connTimeout: "Таймаут подключения",
- fbTimeout: "Таймаут возврата",
- options: "Параметры вызова",
- detourText: "Переадресация на исходящий",
- },
- transport: {
- enable: "Включить транспорт",
- host: "Хост",
- hosts: "Хосты",
- path: "Путь",
- httpMethod: "Метод запроса",
- idleTimeout: "Таймаут бездействия",
- pingTimeout: "Таймаут пинга",
- grpcServiceName: "Имя службы",
- grpcPws: "Разрешить без потока",
- },
- mux: {
- enable: "Включить мультиплекс",
- maxConn: "Максимальное количество соединений",
- minStr: "Минимальное количество потоков",
- maxStr: "Максимальное количество потоков",
- padding: "Только подкладка",
- enableBrutal: "Включить Brutal",
- },
- out: {
- addr: "Адрес сервера",
- port: "Порт сервера",
- },
- rule: {
- add: "Добавить правило",
- simple: "Простое",
- logical: "Логическое",
- mode: "Режим",
- invert: "Инвертировать",
- ipVer: "Версия IP",
- domain: "Домены",
- domainSufix: "Суффиксы доменов",
- domainKw: "Ключевые слова домена",
- domainRgx: "Регулярные выражения домена",
- ip: "CIDR IP",
- privateIp: "Недействительные диапазоны IP",
- port: "Порты",
- portRange: "Диапазоны портов",
- srcCidr: "CIDR исходного IP",
- srcPrivateIp: "Недействительные исходные IP",
- srcPort: "Исходные порты",
- srcPortRange: "Диапазоны исходных портов",
- ruleset: "Наборы правил",
- rulesetMatchSrc: "Набор правил для соответствия источника IPcidr",
- options: "Параметры правила",
- domainRules: "Домен/IP",
- srcIpRules: "Источник IP",
- srcPortRules: "Источник порта",
- udpDisableDomainUnmapping: "Отключить перенос доменных имен",
- udpConnect: "Подключение UDP",
- udpTimeout: "Таймаут UDP",
- method: "Метод",
- noDrop: "Не сбрасывать",
- sniffer: "Обнаружение",
- timeout: "Таймаут",
- strategy: "Стратегия",
- },
- ruleset: {
- add: "Добавить набор правил",
- format: "Формат данных",
- interval: "Интервалы обновления",
- remote: "Удаленный",
- local: "Локальный",
- },
- basic: {
- log: {
- title: "Журналы",
- level: "Уровень",
- output: "Вывод",
- timestamp: "Включить метку времени",
- },
- dns: {
- final: "Итоговый",
- server: "Сервер",
- firstServer: "Первый сервер",
- addrResolver: "Разрешение адреса",
- },
- routing: {
- title: "Маршрутизация",
- defaultOut: "Исходящий по умолчанию",
- defaultIf: "Сетевой интерфейс по умолчанию",
- defaultRm: "Маршрут по умолчанию",
- autoBind: "Автопривязка сетевого интерфейса",
- },
- exp: {
- storeFakeIp: "Хранить поддельный IP",
- },
- },
- tls: {
- enable: "Включить TLS",
- usePath: "Использовать путь",
- useText: "Использовать текст",
- certPath: "Путь к файлу сертификата",
- keyPath: "Путь к файлу ключа",
- cert: "Сертификат",
- key: "Ключ",
- options: "Параметры TLS",
- minVer: "Минимальная версия",
- maxVer: "Максимальная версия",
- cs: "Наборы шифров",
- privKey: "Приватный ключ",
- pubKey: "Публичный ключ",
- disableSni: "Отключить SNI",
- insecure: "Разрешить небезопасное",
- acme: {
- options: "Параметры ACME",
- dataDir: "Каталог данных",
- defaultDomain: "Домен по умолчанию",
- disableChallenges: "Отключить вызовы",
- httpChallenge: "Отключить HTTP вызов",
- tlsChallenge: "Отключить TLS вызов",
- altPorts: "Альтернативные порты",
- altHport: "Альтернативный HTTP порт",
- altTport: "Альтернативный TLS порт",
- caProvider: "Поставщик CA",
- customCa: "Пользовательский поставщик CA",
- extAcc: "Внешний аккаунт",
- dns01: "DNS01 вызов",
- dns01Provider: "Поставщик DNS01 вызова",
- },
- },
- stats: {
- upload: "Загрузка",
- download: "Скачивание",
- volume: "Объем",
- usage: "Использование",
- graphTitle: "График трафика",
- B: "Б",
- KB: "КБ",
- MB: "МБ",
- GB: "ГБ",
- TB: "ТБ",
- PB: "ПБ",
- p: "п",
- Kp: "Кп",
- Mp: "Мп",
- Gb: "Гб",
- bps: "б/с",
- Kbps: "Кб/с",
- Mbps: "Мб/с",
- },
- date: {
- expiry: "Срок действия",
- expired: "Истек",
- d: "д",
- h: "ч",
- m: "м",
- s: "с",
- ms: "мс",
- },
-}
diff --git a/frontend/src/locales/vi.ts b/frontend/src/locales/vi.ts
deleted file mode 100644
index 656dd58..0000000
--- a/frontend/src/locales/vi.ts
+++ /dev/null
@@ -1,435 +0,0 @@
-export default {
- message: "Chào mừng OHB",
- success: "Thành công",
- failed: "Thất bại",
- enable: "Kích hoạt",
- disable: "Vô hiệu hóa",
- none: "Không",
- all: "Tất cả",
- filter: "Bộ lọc",
- loading: "Đang tải...",
- confirm: "Bạn chắc chắn chứ?",
- yes: "có",
- no: "không",
- unlimited: "vô hạn",
- remained: "Còn lại",
- type: "Loại",
- protocol: "Giao thức",
- submit: "Gửi",
- reset: "Đặt lại",
- now: "Hiện tại",
- network: "Mạng",
- copyToClipboard: "Sao chép vào clipboard",
- noData: "Không có dữ liệu!",
- invalidLogin: "Đăng nhập không hợp lệ!",
- online: "Trực tuyến",
- version: "Phiên bản",
- email: "Email",
- commaSeparated: "(được phân tách bằng dấu phẩy)",
- count: "Đếm",
- template: "Mẫu",
- error: {
- dplData: "Dữ liệu trùng lặp",
- core: "Lỗi Sing-Box",
- },
- pages: {
- login: "Đăng nhập",
- home: "Trang chủ",
- inbounds: "Đầu Vào",
- outbounds: "Đầu ra",
- endpoints: "Câu hình",
- clients: "Khách hàng",
- rules: "Quy tắc",
- tls: "Cài đặt TLS",
- basics: "Cơ bản",
- admins: "Quản trị viên",
- settings: "Cài đặt",
- },
- main: {
- tiles: "OHB",
- gauges: "Đồng hồ đo",
- charts: "Biểu đồ",
- infos: "Thông tin",
- gauge: {
- cpu: "Đồng hồ CPU",
- mem: "Đồng hồ RAM",
- },
- chart: {
- cpu: "Máy theo dõi CPU",
- mem: "Máy theo dõi RAM",
- net: "Băng thông mạng",
- pnet: "Gói mạng",
- },
- info: {
- sys: "Thông tin hệ thống",
- sbd: "Thông tin Sing-Box",
- host: "Máy chủ",
- cpu: "CPU",
- core: "Nhân",
- uptime: "Thời gian hoạt động",
- threads: "Luồng",
- memory: "Bộ nhớ",
- running: "Đang chạy"
- },
- backup: {
- title: "Sao lưu và khôi phục",
- backup: "Tải xuống bản sao lưu",
- restore: "Khôi phục",
- exclStats: "Loại trừ các biểu đồ",
- exclChanges: "Loại trừ các thay đổi",
- }
- },
- objects: {
- inbound: "Đầu Vào",
- client: "Máy Khách hàng",
- outbound: "Đầu Ra",
- endpoint: "Điểm cuối",
- config: "Câu hình",
- rule: "Quy tắc",
- user: "Người dùng",
- tag: "Thẻ",
- listen: "Nghe",
- dial: "Quay số",
- tls: "TLS",
- multiplex: "Ghép đa truyền thông ",
- transport: "Giao thông",
- headers: "Tiêu đề",
- key: "Chìa khóa",
- value: "Giá trị",
- },
- actions: {
- action: "Hành động",
- add: "Thêm",
- addbulk: "Thêm Hàng loạt",
- new: "Mới",
- edit: "Chỉnh sửa",
- del: "Xóa",
- clone: "Nhân bản",
- save: "Lưu",
- update: "Cập nhật",
- submit: "Gửi",
- set: "Đặt",
- generate: "Tạo ra",
- disable: "Vô hiệu hóa",
- close: "Đóng",
- restartApp: "Khởi động lại ứng dụng",
- restartSb: "Khởi động lại Singbox",
- },
- login: {
- title: "Đăng nhập",
- username: "Tên người dùng",
- unRules: "Tên người dùng không thể trống",
- password: "Mật khẩu",
- pwRules: "Mật khẩu không thể trống",
- },
- menu: {
- logout: "Đăng xuất",
- },
- admin: {
- changeCred: "Thay đổi thông tin đăng nhập",
- oldPass: "Mật khẩu hiện tại",
- newUname: "Tên người dùng mới",
- newPass: "Mật khẩu mới",
- lastLogin: "Lân đăng nhập cuôi",
- date: "Ngày",
- time: "Thời gian",
- changes: "Thay đổi",
- actor: "Diễn viên",
- key: "Khóa",
- action: "Hành động",
- },
- setting: {
- interface: "Giao diện",
- sub: "Đăng ký",
- addr: "Địa chỉ",
- port: "Cổng",
- webPath: "Đường dẫn gốc",
- domain: "Miền",
- sslKey: "Đường dẫn khóa SSL",
- sslCert: "Đường dẫn chứng chỉ SSL",
- webUri: "URI bảng điều khiển",
- sessionAge: "Tuổi tối đa của phiên",
- trafficAge: "Tuổi lưu thông tối đa",
- timeLoc: "Vị trí múi giờ",
- subEncode: "Kích hoạt mã hóa",
- subInfo: "Kích hoạt thông tin khách hàng",
- path: "Đường dẫn mặc định",
- update: "Thời gian cập nhật tự động",
- subUri: "URI đăng ký",
- jsonSub: "Đăng ký JSON",
- toDirect: "Chuyển hướng tới Trực tiếp",
- toBlock: "Chuyển hướng tới Chặn",
- timestamp: "Dấu thời gian",
- globalDns: "DNS Toàn cầu",
- directDns: "DNS Trực tiếp",
- toDirectDns: "Chuyển hướng tới DNS Trực tiếp",
- jsonSubOptions: "Tùy chọn Khác",
- excludePkg: "Loại trừ Gói",
- },
- client: {
- name: "Tên",
- desc: "Mô tả",
- group: "Nhóm",
- inboundTags: "Thẻ đầu vào",
- basics: "Cơ bản",
- config: "Cấu hình",
- links: "Liên kết",
- external: "Liên kết bên ngoài",
- sub: "Đăng ký bên ngoài",
- },
- bulk: {
- order: "Sắp xếp",
- random: "Ngẫu nhiên",
- },
- types: {
- un: "Tên người dùng",
- pw: "Mật khẩu",
- direct: {
- overrideAddr: "Ghi đè Địa chỉ",
- overridePort: "Ghi đè Cổng",
- },
- hy: {
- obfs: "Mật khẩu đã được Ẩn",
- auth: "Mật khẩu Xác thực",
- hyOptions: "Tùy chọn Hysteria",
- hy2Options: "Tùy chọn Hysteria2",
- ignoreBw: "Bỏ qua Băng thông của Client",
- },
- shdwTls: {
- hs: "Máy chủ Handshake",
- addHS: "Thêm Máy chủ Handshake",
- },
- ssh: {
- passphrase: "Cụm từ mật khẩu",
- hostKey: "Khóa Máy chủ",
- algorithm: "Thuật toán Khóa",
- clientVer: "Phiên bản Client",
- options: "Tùy chọn SSH",
- },
- tor: {
- execPath: "Đường dẫn File thực thi",
- dataDir: "Thư mục Dữ liệu",
- extArgs: "Đối số Bổ sung",
- },
- tuic: {
- congControl: "Kiểm soát Tắc nghẽn",
- authTimeout: "Thời gian chờ Xác thực",
- hb: "Nhịp tim",
- },
- tun: {
- addr: "Địa chỉ",
- ifName: "Tên Giao diện",
- },
- vless: {
- flow: "Luồng",
- udpEnc: "Mã hóa Gói UDP",
- },
- vmess: {
- security: "Bảo mật",
- globalPadding: "Đệm Toàn cầu",
- authLen: "Chiều dài Mã hóa",
- },
- wg: {
- privKey: "Khóa Riêng tư",
- pubKey: "Khóa Công khai của Đối tác",
- psk: "Khóa được Chia sẻ trước",
- localIp: "IPs Cục bộ",
- worker: "Công nhân",
- ifName: "Tên Giao diện",
- sysIf: "Giao diện Hệ thống",
- options: "Tùy chọn Wireguard",
- multiPeer: "Nhiều Đối tác",
- allowedIp: "IPs được Phép",
- peer: "Đối tác",
- peers: "Đối tác",
- },
- lb: {
- defaultOut: "Đầu ra Mặc định",
- interruptConn: "Ngắt kết nối hiện tại",
- testUrl: "URL Kiểm tra",
- interval: "Khoảng thời gian",
- tolerance: "Sự dung hòa",
- urlTestOptions: "Tùy chọn Kiểm tra URL",
- }
- },
- in: {
- addr: "Địa chỉ",
- port: "Cổng",
- clients: "Kích hoạt khách hàng",
- ssMethod: "Phương thức",
- sSide: "Phía Máy chủ",
- cSide: "Phía Khách hàng",
- multiDomain: "Nhiều Tên miền",
- remark: "Ghi chú",
- mdOption: "Tùy chọn Nhiều Tên miền",
- },
- listen: {
- options: "Tùy chọn Nghe",
- tcpOptions: "Tùy chọn TCP",
- udpOptions: "Tùy chọn UDP",
- detour: "Lạc đạo",
- detourText: "Chuyển tiếp tới đầu vào",
- domainStrategy: "Chiến lược Domain",
- },
- dial: {
- bindIf: "Ràng buộc tới Giao diện Mạng",
- bindIp4: "Ràng buộc tới IPv4",
- bindIp6: "Ràng buộc tới IPv6",
- reuseAddr: "Sử dụng lại Địa chỉ Nghe",
- connTimeout: "Thời gian Chờ Kết nối",
- fbTimeout: "Thời gian Chờ Fallback",
- options: "Tùy chọn Gọi",
- detourText: "Chuyển tiếp tới thư đi",
- },
- transport: {
- enable: "Kích hoạt vận chuyển",
- host: "Máy chủ",
- hosts: "Máy chủ",
- path: "Đường dẫn",
- httpMethod: "Phương thức Yêu cầu",
- idleTimeout: "Thời gian Chờ Chờ đợi",
- pingTimeout: "Thời gian Chờ Ping",
- grpcServiceName: "Tên Dịch vụ",
- grpcPws: "Cho phép mà không Có Luồng",
- },
- mux: {
- enable: "Bật Multiplex",
- maxConn: "Số kết nối Tối đa",
- minStr: "Số Luồng Tối thiểu",
- maxStr: "Số Luồng Tối đa",
- padding: "Chỉ đệm",
- enableBrutal: "Bật Brutal",
- },
- out: {
- addr: "Địa chỉ Máy chủ",
- port: "Cổng Máy chủ",
- },
- rule: {
- add: "Thêm Quy tắc",
- simple: "Đơn giản",
- logical: "Logic",
- mode: "Chế độ",
- invert: "Nghịch đảo",
- ipVer: "Phiên bản IP",
- domain: "Tên miền",
- domainSufix: "Hậu tố Miền",
- domainKw: "Từ khóa Miền",
- domainRgx: "Regex Miền",
- ip: "CIDRs IP",
- privateIp: "Dải IP Không hợp lệ",
- port: "Cổng",
- portRange: "Dải Cổng",
- srcCidr: "CIDRs IP Nguồn",
- srcPrivateIp: "IP Nguồn Không hợp lệ",
- srcPort: "Cổng Nguồn",
- srcPortRange: "Dải Cổng Nguồn",
- ruleset: "Bộ quy tắc",
- rulesetMatchSrc: "Bộ quy tắc IPcidr Phù hợp Nguồn",
- options: "Tùy chọn Quy tắc",
- domainRules: "Tên miền/IP",
- srcIpRules: "IP Nguồn",
- srcPortRules: "Cổng Nguồn",
- udpDisableDomainUnmapping: "Không màm mạng tiền lập tên miền",
- udpFallbackDelay: "Thời gian Chờ Fallback",
- udpConnect: "Kết nối UDP",
- udpTimeout: "Thời gian Chờ UDP",
- method: "Phương pháp",
- noDrop: "Không Tháp",
- sniffer: "Kiểm tra Sniffer",
- timeout: "Thời gian Chờ Sniffing",
- strategy: "Chiến lệ",
- },
- ruleset: {
- add: "Thêm Bộ quy tắc",
- format: "Định dạng Dữ liệu",
- interval: "Khoảng cách Cập nhật",
- remote: "Xa",
- local: "Cục bộ",
- },
- basic: {
- log: {
- title: "Nhật ký",
- level: "Mức độ",
- output: "Đầu ra",
- timestamp: "Bật Dấu thời gian",
- },
- dns: {
- final: "Cuối cùng",
- server: "Máy chủ",
- firstServer: "Máy chủ Đầu tiên",
- addrResolver: "Trình phân giải địa chỉ",
- },
- routing: {
- title: "Định tuyến",
- defaultOut: "Ra ngoài Mặc định",
- defaultIf: "NIC Mặc định",
- defaultRm: "Đánh dấu Định tuyến Mặc định",
- autoBind: "Tự động Ràng buộc NIC",
- },
- exp: {
- storeFakeIp: "Lưu IP Giả mạo",
- },
- },
- tls : {
- enable: "Kích hoạt TLS",
- usePath: "Sử dụng đường dẫn",
- useText: "Sử dụng văn bản",
- certPath: "Đường dẫn tệp chứng chỉ",
- keyPath: "Đường dẫn tệp khóa",
- cert: "Chứng chỉ",
- key: "Khóa",
- options: "Tùy chọn TLS",
- minVer: "Phiên bản Tối thiểu",
- maxVer: "Phiên bản Tối đa",
- cs: "Các bộ mã hóa",
- privKey: "Khóa riêng",
- pubKey: "Khóa Công khai",
- disableSni: "Tắt SNI",
- insecure: "Cho phép Không an toàn",
- acme: {
- options: "Tùy chọn ACME",
- dataDir: "Thư mục Dữ liệu",
- defaultDomain: "Tên miền Mặc định",
- disableChallenges: "Vô hiệu hóa Thách thức",
- httpChallenge: "Vô hiệu hóa Thách thức HTTP",
- tlsChallenge: "Vô hiệu hóa Thách thức TLS",
- altPorts: "Cổng Thay thế",
- altHport: "Cổng HTTP Thay thế",
- altTport: "Cổng TLS Thay thế",
- caProvider: "Nhà cung cấp CA",
- customCa: "Nhà cung cấp CA Tùy chỉnh",
- extAcc: "Tài khoản Bên ngoài",
- dns01: "Thách thức DNS01",
- dns01Provider: "Nhà cung cấp Thách thức DNS01"
- },
- },
- stats: {
- upload: "Tải lên",
- download: "Tải xuống",
- volume: "Thể tích",
- usage: "Sử dụng",
- graphTitle: "Biểu đồ lưu lượng",
- B: "B",
- KB: "KB",
- MB: "MB",
- GB: "GB",
- TB: "TB",
- PB: "PB",
- p: "ph",
- Kp: "Kph",
- Mp: "Mph",
- Gb: "Gb",
- bps: "bps",
- Kbps: "Kbps",
- Mbps: "Mbps",
- },
- date: {
- expiry: "Hết hạn",
- expired: "Đã hết hạn",
- d: "ng",
- h: "g",
- m: "p",
- s: "s",
- ms: "ms",
- },
-}
diff --git a/frontend/src/locales/zhcn.ts b/frontend/src/locales/zhcn.ts
deleted file mode 100644
index e7926a6..0000000
--- a/frontend/src/locales/zhcn.ts
+++ /dev/null
@@ -1,434 +0,0 @@
-export default {
- message: "欢迎",
- success: "成功",
- failed: "失败",
- enable: "启用",
- disable: "禁用",
- none: "无",
- all: "全部",
- filter: "过滤器",
- loading: "加载中...",
- confirm: "是否确定?",
- yes: "确认",
- no: "取消",
- unlimited: "无限",
- remained: "剩余",
- type: "类型",
- protocol: "协议",
- submit: "提交",
- reset: "重置",
- now: "当前",
- network: "网络",
- copyToClipboard: "复制到剪贴板",
- noData: "无数据!",
- invalidLogin: "登录无效!",
- online: "在线",
- version: "版本",
- email: "电子邮件",
- commaSeparated: "(逗号分隔)",
- count: "计数",
- template: "模板",
- error: {
- dplData: "重复数据",
- core: "Sing-Box 错误",
- },
- pages: {
- login: "登录",
- home: "主页",
- inbounds: "入站管理",
- outbounds: "出站管理",
- endpoints: "节点管理",
- clients: "用户管理",
- rules: "路由列表",
- tls: "TLS 设置",
- basics: "基础信息",
- admins: "管理员",
- settings: "设置",
- },
- main: {
- tiles: "信息卡",
- gauges: "仪表板",
- charts: "图表",
- infos: "信息",
- gauge: {
- cpu: "CPU 仪表",
- mem: "RAM 仪表",
- },
- chart: {
- cpu: "CPU 监视器",
- mem: "RAM 监视器",
- net: "网络带宽",
- pnet: "网络数据包",
- },
- info: {
- sys: "系统信息",
- sbd: "运行信息",
- host: "主机",
- cpu: "CPU",
- core: "核心",
- uptime: "运行时间",
- threads: "线程",
- memory: "内存",
- running: "运行状态"
- },
- backup: {
- title: "备份与恢复",
- backup: "下载备份",
- restore: "恢复",
- exclStats: "排除图表数据",
- exclChanges: "排除变更数据",
- },
- },
- objects: {
- inbound: "入站",
- client: "客户端",
- outbound: "出站",
- endpoint: "节点",
- config: "配置",
- rule: "规则",
- user: "用户",
- tag: "标签",
- listen: "监听",
- dial: "拨号",
- tls: "TLS",
- multiplex: "多路复用",
- transport: "传输",
- headers: "标头",
- key: "键",
- value: "值",
- },
- actions: {
- action: "操作",
- add: "添加",
- addbulk: "批量添加",
- new: "新建",
- edit: "编辑",
- del: "删除",
- clone: "克隆",
- save: "保存",
- update: "更新",
- submit: "提交",
- set: "设置",
- generate: "生成",
- disable: "禁用",
- close: "关闭",
- restartApp: "重启面板",
- restartSb: "重启 Singbox",
- },
- login: {
- title: "登录",
- username: "用户名",
- unRules: "用户名不能为空",
- password: "密码",
- pwRules: "密码不能为空",
- },
- menu: {
- logout: "退出登录",
- },
- admin: {
- changeCred: "更改凭据",
- oldPass: "当前密码",
- newUname: "新用户名",
- newPass: "新密码",
- lastLogin: "上次登录",
- date: "日期",
- time: "时间",
- changes: "更改",
- actor: "执行者",
- key: "键",
- action: "操作",
- },
- setting: {
- interface: "界面",
- sub: "订阅",
- addr: "地址",
- port: "端口",
- webPath: "面板路径",
- domain: "域名",
- sslKey: "SSL 密钥 (Key) 路径",
- sslCert: "SSL 证书 (cert) 路径",
- webUri: "面板 URI",
- sessionAge: "会话超时时限",
- trafficAge: "流量过期时限",
- timeLoc: "时区",
- subEncode: "启用 Base64 编码",
- subInfo: "启用用户信息",
- path: "默认路径",
- update: "自动更新时间",
- subUri: "订阅 URI",
- jsonSub: "JSON 订阅",
- toDirect: "路由到直连",
- toBlock: "路由到阻止",
- timestamp: "时间戳",
- globalDns: "全局 DNS",
- directDns: "直连 DNS",
- toDirectDns: "路由到直连 DNS",
- jsonSubOptions: "其他选项",
- excludePkg: "排除包",
- },
- client: {
- name: "名称",
- desc: "描述",
- group: "组",
- inboundTags: "入站标签",
- basics: "基础",
- config: "配置",
- links: "链接",
- external: "外部链接",
- sub: "外部订阅",
- },
- bulk: {
- order: "排序",
- random: "随机",
- },
- types: {
- un: "用户名",
- pw: "密码",
- direct: {
- overrideAddr: "覆盖地址",
- overridePort: "覆盖端口",
- },
- hy: {
- obfs: "混淆密码",
- auth: "认证密码",
- hyOptions: "Hysteria 选项",
- hy2Options: "Hysteria2 选项",
- ignoreBw: "忽略客户端带宽",
- },
- shdwTls: {
- hs: "握手服务器",
- addHS: "添加握手服务器",
- },
- ssh: {
- passphrase: "密码短语",
- hostKey: "主机密钥",
- algorithm: "密钥算法",
- clientVer: "客户端版本",
- options: "SSH 选项",
- },
- tor: {
- execPath: "可执行文件路径",
- dataDir: "数据目录",
- extArgs: "额外参数",
- },
- tuic: {
- congControl: "拥塞控制",
- authTimeout: "认证超时",
- hb: "心跳包",
- },
- tun: {
- addr: "地址",
- ifName: "接口名称",
- },
- vless: {
- flow: "流控",
- udpEnc: "UDP 数据包编码",
- },
- vmess: {
- security: "安全性",
- globalPadding: "全局填充",
- authLen: "加密长度",
- },
- wg: {
- privKey: "私钥",
- pubKey: "对等方公钥",
- psk: "预共享密钥",
- localIp: "本地 IP 地址",
- worker: "工作线程",
- ifName: "接口名称",
- sysIf: "系统接口",
- options: "WireGuard 选项",
- multiPeer: "多对等体",
- allowedIp: "允许的 IP 地址",
- peer: "对等体",
- peers: "对等体",
- },
- lb: {
- defaultOut: "默认出站",
- interruptConn: "中断现有连接",
- testUrl: "测试 URL",
- interval: "间隔",
- tolerance: "容错",
- urlTestOptions: "URL 测试选项",
- }
- },
- in: {
- addr: "地址",
- port: "端口",
- clients: "启用客户端",
- ssMethod: "方法",
- sSide: "服务器端",
- cSide: "客户端",
- multiDomain: "多域名",
- remark: "备注",
- mdOption: "多域名选项",
- },
- listen: {
- options: "监听选项",
- tcpOptions: "TCP 选项",
- udpOptions: "UDP 选项",
- detour: "转发",
- detourText: "转发到入站",
- domainStrategy: "域名解析策略",
- },
- dial: {
- bindIf: "绑定到网络接口",
- bindIp4: "绑定到 IPv4",
- bindIp6: "绑定到 IPv6",
- reuseAddr: "重用监听地址",
- connTimeout: "连接超时",
- fbTimeout: "回退超时",
- options: "拨号选项",
- detourText: "转发至出站",
- },
- transport: {
- enable: "启用传输",
- host: "主机域名",
- hosts: "主机域名列表",
- path: "HTTP 请求路径",
- httpMethod: "HTTP 请求方法",
- idleTimeout: "空闲超时",
- pingTimeout: "Ping 超时",
- grpcServiceName: "gRPC 服务名称",
- grpcPws: "允许无流时保持连接",
- },
- mux: {
- enable: "启用多路复用",
- maxConn: "最大连接数",
- minStr: "最小流数",
- maxStr: "最大流数",
- padding: "仅允许填充连接",
- enableBrutal: "启用 TCP Brutal",
- },
- out: {
- addr: "服务器地址",
- port: "服务器端口",
- },
- rule: {
- add: "添加规则",
- simple: "简单",
- logical: "逻辑",
- mode: "模式",
- invert: "反选结果",
- ipVer: "IP 版本",
- domain: "域名",
- domainSufix: "域名后缀",
- domainKw: "域名关键词",
- domainRgx: "域名正则表达式",
- ip: "IP CIDR",
- privateIp: "匹配非公开 IP",
- port: "端口",
- portRange: "端口范围",
- srcCidr: "源 IP CIDR",
- srcPrivateIp: "匹配非公开源 IP",
- srcPort: "源端口",
- srcPortRange: "源端口范围",
- ruleset: "规则集",
- rulesetMatchSrc: "规则集 IP CIDR 匹配源 IP",
- options: "规则选项",
- domainRules: "域名/IP",
- srcIpRules: "源 IP",
- srcPortRules: "源端口",
- udpDisableDomainUnmapping: "禁用域名解析映射",
- udpConnect: "启用 UDP 连接",
- udpTimeout: "UDP 超时",
- method: "方法",
- noDrop: "不丢弃",
- sniffer: "嗅探",
- timeout: "超时",
- strategy: "策略",
- },
- ruleset: {
- add: "添加规则集",
- format: "数据格式",
- interval: "更新间隔",
- remote: "远程",
- local: "本地",
- },
- basic: {
- log: {
- title: "日志",
- level: "级别",
- output: "输出",
- timestamp: "启用时间戳",
- },
- dns: {
- final: "最终",
- server: "服务器",
- firstServer: "首选服务器",
- addrResolver: "地址解析器",
- },
- routing: {
- title: "路由",
- defaultOut: "默认出站",
- defaultIf: "默认网卡",
- defaultRm: "默认路由标记",
- autoBind: "自动绑定网卡",
- },
- exp: {
- storeFakeIp: "持久化 Fake-IP",
- },
- },
- tls : {
- enable: "启用 TLS",
- usePath: "使用外部路径",
- useText: "使用文件内容",
- certPath: "证书文件路径",
- keyPath: "私钥文件路径",
- cert: "证书文件内容",
- key: "私钥文件内容",
- options: "TLS 选项",
- minVer: "最低版本",
- maxVer: "最高版本",
- cs: "密码套件",
- privKey: "私钥",
- pubKey: "公钥",
- disableSni: "禁用 SNI",
- insecure: "允许不安全",
- acme: {
- options: "ACME 选项",
- dataDir: "数据目录",
- defaultDomain: "默认域名",
- disableChallenges: "禁用挑战",
- httpChallenge: "禁用 HTTP 挑战",
- tlsChallenge: "禁用 TLS 挑战",
- altPorts: "替代端口",
- altHport: "替代 HTTP 端口",
- altTport: "替代 TLS 端口",
- caProvider: "CA 提供商",
- customCa: "自定义 CA 提供商",
- extAcc: "外部账户",
- dns01: "DNS01 挑战",
- dns01Provider: "DNS01 挑战提供商"
- },
- },
- stats: {
- upload: "上传",
- download: "下载",
- volume: "流量",
- usage: "已用",
- graphTitle: "流量图表",
- B: "B",
- KB: "KB",
- MB: "MB",
- GB: "GB",
- TB: "TB",
- PB: "PB",
- p: "p",
- Kp: "Kp",
- Mp: "Mp",
- Gb: "Gb",
- bps: "bps",
- Kbps: "Kbps",
- Mbps: "Mbps",
- },
- date: {
- expiry: "到期",
- expired: "已到期",
- d: "天",
- h: "时",
- m: "分",
- s: "秒",
- ms: "毫秒",
- },
-}
diff --git a/frontend/src/locales/zhtw.ts b/frontend/src/locales/zhtw.ts
deleted file mode 100644
index 8b3903c..0000000
--- a/frontend/src/locales/zhtw.ts
+++ /dev/null
@@ -1,435 +0,0 @@
-export default {
- open: "打開",
- message: "歡迎",
- success: "成功",
- failed: "失敗",
- enable: "啟用",
- disable: "禁用",
- none: "無",
- all: "全部",
- filter: "過濾器",
- loading: "加載中...",
- confirm: "是否確定?",
- yes: "確認",
- no: "取消",
- unlimited: "無限",
- remained: "剩余",
- type: "類型",
- protocol: "協定",
- submit: "提交",
- reset: "重置",
- now: "當前",
- network: "網絡",
- copyToClipboard: "復製到剪貼板",
- noData: "無數據!",
- invalidLogin: "登錄無效!",
- online: "在線",
- version: "版本",
- email: "電子郵件",
- commaSeparated: "(逗號分隔)",
- count: "計數",
- template: "模板",
- error: {
- dplData: "重複數據",
- core: "Sing-Box 錯誤",
- },
- pages: {
- login: "登錄",
- home: "主頁",
- inbounds: "入站管理",
- outbounds: "出站管理",
- endpoints: "端點管理",
- clients: "用戶管理",
- rules: "路由列表",
- tls: "TLS 設置",
- basics: "基礎信息",
- admins: "管理員",
- settings: "設置",
- },
- main: {
- tiles: "信息卡",
- gauges: "儀表板",
- charts: "圖表",
- infos: "信息",
- gauge: {
- cpu: "CPU 儀表",
- mem: "RAM 儀表",
- },
- chart: {
- cpu: "CPU 監視器",
- mem: "RAM 監視器",
- net: "網絡帶寬",
- pnet: "網絡數據包",
- },
- info: {
- sys: "系統信息",
- sbd: "運行信息",
- host: "主機",
- cpu: "CPU",
- core: "核心",
- uptime: "運行時間",
- threads: "線程",
- memory: "內存",
- running: "運行狀態"
- },
- backup: {
- title: "備份與恢復",
- backup: "下載備份",
- restore: "恢復",
- exclStats: "排除圖表記錄",
- exclChanges: "排除更改記錄",
- },
- },
- objects: {
- inbound: "入站",
- client: "客戶端",
- outbound: "出站",
- endpoint: "端點",
- config: "配置",
- rule: "規則",
- user: "用戶",
- tag: "標簽",
- listen: "聽",
- dial: "撥號",
- tls: "TLS",
- multiplex: "多路復用",
- transport: "傳輸",
- headers: "方法",
- key: "鑰匙",
- value: "價值",
- },
- actions: {
- action: "操作",
- add: "添加",
- addbulk: "批量添加",
- new: "新建",
- edit: "編輯",
- del: "刪除",
- clone: "克隆",
- save: "保存",
- update: "更新",
- submit: "提交",
- set: "設置",
- generate: "生成",
- disable: "禁用",
- close: "關閉",
- restartApp: "重啟面板",
- restartSb: "重啟 Singbox",
- },
- login: {
- title: "登錄",
- username: "用戶名",
- unRules: "用戶名不能為空",
- password: "密碼",
- pwRules: "密碼不能為空",
- },
- menu: {
- logout: "退出登錄",
- },
- admin: {
- changeCred: "更改憑據",
- oldPass: "當前密碼",
- newUname: "新用戶名",
- newPass: "新密碼",
- lastLogin: "上次登入",
- date: "日期",
- time: "時間",
- changes: "更改",
- actor: "執行者",
- key: "鍵",
- action: "操作",
- },
- setting: {
- interface: "界面",
- sub: "訂閱",
- addr: "地址",
- port: "端口",
- webPath: "基本 URI",
- domain: "域名",
- sslKey: "SSL 密鑰 (Key) 路徑",
- sslCert: "SSL 證書 (cert) 路徑",
- webUri: "面板 URI",
- sessionAge: "會話最大連接數",
- trafficAge: "流量最大年齡",
- timeLoc: "時區",
- subEncode: "啟用編碼",
- subInfo: "啟用用戶信息",
- path: "默認路徑",
- update: "自動更新時間",
- subUri: "訂閱 URL",
- jsonSub: "JSON 訂閱",
- toDirect: "路由到直連",
- toBlock: "路由到阻止",
- timestamp: "時間戳",
- globalDns: "全局 DNS",
- directDns: "直連 DNS",
- toDirectDns: "路由到直連 DNS",
- jsonSubOptions: "其他選項",
- excludePkg: "排除包",
- },
- client: {
- name: "名稱",
- desc: "描述",
- group: "組",
- inboundTags: "入站標簽",
- basics: "基礎",
- config: "配置",
- links: "鏈接",
- external: "外部鏈接",
- sub: "外部訂閱",
- },
- bulk: {
- order: "排序",
- random: "隨機",
- },
- types: {
- un: "用戶名",
- pw: "密碼",
- direct: {
- overrideAddr: "覆蓋地址",
- overridePort: "覆蓋端口",
- },
- hy: {
- obfs: "混淆密碼",
- auth: "驗證密碼",
- hyOptions: "Hysteria 選項",
- hy2Options: "Hysteria2 選項",
- ignoreBw: "忽略客戶端帶寬",
- },
- shdwTls: {
- hs: "握手服務器",
- addHS: "添加握手服務器",
- },
- ssh: {
- passphrase: "密語",
- hostKey: "主機密鑰",
- algorithm: "密鑰算法",
- clientVer: "客戶端版本",
- options: "SSH 選項",
- },
- tor: {
- execPath: "可執行文件路徑",
- dataDir: "數據目錄",
- extArgs: "額外參數",
- },
- tuic: {
- congControl: "擁塞控制",
- authTimeout: "身份驗證超時",
- hb: "心跳",
- },
- tun: {
- addr: "地址",
- ifName: "介面名稱",
- },
- vless: {
- flow: "流量",
- udpEnc: "UDP 封包編碼",
- },
- vmess: {
- security: "安全性",
- globalPadding: "全局填充",
- authLen: "加密長度",
- },
- wg: {
- privKey: "私鑰",
- pubKey: "對等方公鑰",
- psk: "預共享密鑰",
- localIp: "本地 IP",
- worker: "工作線程",
- ifName: "介面名稱",
- sysIf: "系統介面",
- options: "Wireguard 選項",
- multiPeer: "多對等方",
- allowedIp: "允許的 IP",
- peer: "對等方",
- peers: "對等方",
- },
- lb: {
- defaultOut: "默認外部",
- interruptConn: "中斷現有連接",
- testUrl: "測試 URL",
- interval: "間隔",
- tolerance: "容忍度",
- urlTestOptions: "URL 測試選項"
- }
- },
- in: {
- addr: "地址",
- port: "端口",
- clients: "啟用客戶端",
- ssMethod: "方法",
- sSide: "服務器端",
- cSide: "客戶端",
- multiDomain: "多域名",
- remark: "備註",
- mdOption: "多域名選項",
- },
- listen: {
- options: "監聽選項",
- tcpOptions: "TCP 選項",
- udpOptions: "UDP 選項",
- detour: "繞道",
- detourText: "轉發到入站",
- domainStrategy: "域名策略",
- },
- dial: {
- bindIf: "綁定到網路接口",
- bindIp4: "綁定到 IPv4",
- bindIp6: "綁定到 IPv6",
- reuseAddr: "重用監聽地址",
- connTimeout: "連接超時",
- fbTimeout: "回退超時",
- options: "撥號選項",
- detourText: "轉寄至出站",
- },
- transport: {
- enable: "啟用傳輸",
- host: "主機",
- hosts: "主機列表",
- path: "路徑",
- httpMethod: "請求方法",
- idleTimeout: "閒置超時",
- pingTimeout: "Ping 超時",
- grpcServiceName: "服務名稱",
- grpcPws: "允許無流",
- },
- mux: {
- enable: "啟用多路徑",
- maxConn: "最大連接數",
- minStr: "最小串流數",
- maxStr: "最大串流數",
- padding: "僅填充",
- enableBrutal: "啟用暴力",
- },
- out: {
- addr: "伺服器地址",
- port: "伺服器端口",
- },
- rule: {
- add: "添加規則",
- simple: "簡單",
- logical: "邏輯",
- mode: "模式",
- invert: "反轉",
- ipVer: "IP 版本",
- domain: "域名",
- domainSufix: "域名後綴",
- domainKw: "域名關鍵詞",
- domainRgx: "域名正則表達式",
- ip: "IP CIDR",
- privateIp: "無效 IP 範圍",
- port: "端口",
- portRange: "端口範圍",
- srcCidr: "源 IP CIDR",
- srcPrivateIp: "無效源 IP",
- srcPort: "源端口",
- srcPortRange: "源端口範圍",
- ruleset: "規則集",
- rulesetMatchSrc: "規則集 IP 範圍匹配源",
- options: "規則選項",
- domainRules: "域名/IP",
- srcIpRules: "源 IP",
- srcPortRules: "源端口",
- udpDisableDomainUnmapping: "禁用域名解析映射",
- udpConnect: "啟用 UDP 連接",
- udpTimeout: "UDP 超時",
- method: "方法",
- noDrop: "不丟弃",
- sniffer: "嗅探",
- timeout: "超時",
- strategy: "策略",
- },
- ruleset: {
- add: "添加規則集",
- format: "數據格式",
- interval: "更新間隔",
- remote: "遠端",
- local: "本地",
- },
- basic: {
- log: {
- title: "日誌",
- level: "級別",
- output: "輸出",
- timestamp: "啟用時間戳記",
- },
- dns: {
- final: "最終",
- server: "服務器",
- firstServer: "首選服務器",
- addrResolver: "地址解析器",
- },
- routing: {
- title: "路由",
- defaultOut: "默認外部",
- defaultIf: "默認網卡",
- defaultRm: "默認路由標記",
- autoBind: "自動綁定網卡",
- },
- exp: {
- storeFakeIp: "存儲假 IP",
- },
- },
- tls : {
- enable: "啟用 TLS",
- usePath: "使用外部路徑",
- useText: "使用文件內容",
- certPath: "證書文件路徑",
- keyPath: "私鑰文件路徑",
- cert: "證書文件內容",
- key: "私鑰文件內容",
- options: "TLS 選項",
- minVer: "最低版本",
- maxVer: "最高版本",
- cs: "加密套件",
- privKey: "私鑰",
- pubKey: "公鑰",
- disableSni: "停用 SNI",
- insecure: "允許不安全連線",
- acme: {
- options: "ACME 選項",
- dataDir: "數據目錄",
- defaultDomain: "默認域名",
- disableChallenges: "禁用挑戰",
- httpChallenge: "禁用 HTTP 挑戰",
- tlsChallenge: "禁用 TLS 挑戰",
- altPorts: "替代端口",
- altHport: "替代 HTTP 端口",
- altTport: "替代 TLS 端口",
- caProvider: "CA 提供商",
- customCa: "自定義 CA 提供商",
- extAcc: "外部賬戶",
- dns01: "DNS01 挑戰",
- dns01Provider: "DNS01 挑戰提供商"
- },
- },
- stats: {
- upload: "上傳",
- download: "下載",
- volume: "流量",
- usage: "已用",
- graphTitle: "流量圖表",
- B: "B",
- KB: "KB",
- MB: "MB",
- GB: "GB",
- TB: "TB",
- PB: "PB",
- p: "p",
- Kp: "Kp",
- Mp: "Mp",
- Gb: "Gb",
- bps: "bps",
- Kbps: "Kbps",
- Mbps: "Mbps",
- },
- date: {
- expiry: "到期",
- expired: "已到期",
- d: "天",
- h: "時",
- m: "分",
- s: "秒",
- ms: "毫秒",
- },
-}
diff --git a/frontend/src/main.ts b/frontend/src/main.ts
deleted file mode 100644
index 9af2edb..0000000
--- a/frontend/src/main.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * main.ts
- *
- * Bootstraps Vuetify and other plugins then mounts the App`
- */
-
-// Composables
-import { createApp, ref } from 'vue'
-
-// Components
-import App from './App.vue'
-
-// Use router
-import router from './router'
-
-// Store
-import store from './store'
-
-// Plugins
-import { registerPlugins } from '@/plugins'
-
-// Locale
-import { i18n } from '@/locales'
-import Vue3PersianDatetimePicker from 'vue3-persian-datetime-picker'
-
-// Notivue
-import { createNotivue } from 'notivue'
-import 'notivue/notification.css'
-import 'notivue/animations.css'
-const notivue = createNotivue({
- position: 'bottom-center',
- limit: 4,
- enqueue: false,
- avoidDuplicates: true,
- notifications: {
- global: {
- duration: 3000
- }
- },
-})
-
-const loading = ref(false)
-
-const app = createApp(App)
-app.provide('loading', loading)
-
-registerPlugins(app)
-
-app
- .use(router)
- .use(store)
- .use(i18n)
- .use(notivue)
- .component('DatePicker', Vue3PersianDatetimePicker)
- .mount('#app')
diff --git a/frontend/src/plugins/api.ts b/frontend/src/plugins/api.ts
deleted file mode 100644
index 8e562b3..0000000
--- a/frontend/src/plugins/api.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import axios from 'axios'
-
-axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'
-axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'
-
-axios.defaults.baseURL = "./"
-const pendingRequests = new Map()
-
-axios.interceptors.request.use(
- (config) => {
- // Generate a unique key for the request
- const requestKey = `${config.method}:${config.url}`
-
- // Check if there is already a pending request with the same key
- if (pendingRequests.has(requestKey)) {
- const cancelSource = pendingRequests.get(requestKey)
- cancelSource.cancel('Duplicate request cancelled')
- }
-
- // Create a new cancel token for the request
- const cancelSource = axios.CancelToken.source()
- config.cancelToken = cancelSource.token
-
- // Store the cancel token in the pending requests map
- pendingRequests.set(requestKey, cancelSource)
-
- if (config.data instanceof FormData) {
- config.headers['Content-Type'] = 'multipart/form-data'
- }
- return config
- },
- (error) => Promise.reject(error),
-)
-
-axios.interceptors.response.use(
- (response) => {
- // Remove the request from the pending requests map
- const requestKey = `${response.config.method}:${response.config.url}`
- pendingRequests.delete(requestKey)
- return response
- },
- (error) => {
- if (axios.isCancel(error)) {
- // Handle duplicate request cancellation here if needed
- console.warn(error.message)
- } else {
- // Remove the request from the pending requests map on error
- const requestKey = `${error.config.method}:${error.config.url}`
- pendingRequests.delete(requestKey)
- }
- return Promise.reject(error)
- }
-)
-
-const api = axios.create()
-
-export default api
diff --git a/frontend/src/plugins/httputil.ts b/frontend/src/plugins/httputil.ts
deleted file mode 100644
index a823c1c..0000000
--- a/frontend/src/plugins/httputil.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-import api from './api'
-import { i18n } from '@/locales'
-import router from '@/router'
-import { push } from 'notivue'
-
-export interface Msg {
- success: boolean
- msg: string
- obj: any | null
-}
-
-function _handleMsg(msg: any): void {
- if (!isMsg(msg)) {
- return
- }
- if(msg.msg){
- if (!msg.success && msg.msg == "Invalid login") {
- push.error({
- title: i18n.global.t('invalidLogin'),
- })
- logout()
- return
- }
- if (msg.success) {
- push.success({
- message: i18n.global.t('success') + ": " + i18n.global.t('actions.' + msg.msg),
- })
- } else {
- push.error({
- title: i18n.global.t('failed'),
- message: msg.msg
- })
- }
- }
-}
-
-export const logout = async () => {
- const response = await HttpUtils.get('api/logout')
- if(response.success){
- router.push('/login')
- }
-}
-
-function _respToMsg(resp: any): Msg {
- const data = resp.data
- if (data == null) {
- return { success: true, msg: "", obj: null }
- } else if (isMsg(data)) {
- if (data.hasOwnProperty('success')) {
- return { success: data.success, msg: data.msg, obj: data.obj || null }
- } else {
- return data
- }
- } else {
- return { success: false, msg: `unknown data: ${data}`, obj: null }
- }
-}
-
-function isMsg(obj: any): obj is Msg {
- return Object.hasOwn(obj,'success') && Object.hasOwn(obj,'msg') && Object.hasOwn(obj, 'obj')
-}
-
-const HttpUtils = {
- async get(url: string, data: object = {}, options: any[] = []): Promise {
- let msg: Msg
- try {
- const resp = await api.get(url, { params: data, ...options })
- msg = _respToMsg(resp)
- } catch (e: any) {
- msg = { success: false, msg: e.toString(), obj: null }
- }
- _handleMsg(msg)
- return msg
- },
- async post(url: string, data: object | null, options: any = undefined): Promise {
- let msg: Msg
- try {
- const resp = await api.post(url, data, options)
- msg = _respToMsg(resp)
- } catch (e: any) {
- msg = { success: false, msg: e.toString(), obj: null }
- }
- _handleMsg(msg)
- return msg
- },
-}
-
-export default HttpUtils
\ No newline at end of file
diff --git a/frontend/src/plugins/index.ts b/frontend/src/plugins/index.ts
deleted file mode 100644
index 9d76810..0000000
--- a/frontend/src/plugins/index.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-// Plugins
-import vuetify from './vuetify'
-
-// Types
-import type { App } from 'vue'
-
-export function registerPlugins (app: App) {
- app
- .use(vuetify)
-}
diff --git a/frontend/src/plugins/randomUtil.ts b/frontend/src/plugins/randomUtil.ts
deleted file mode 100644
index f9da01f..0000000
--- a/frontend/src/plugins/randomUtil.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-const seq = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('')
-
-const RandomUtil = {
- randomIntRange(min: number, max: number): number {
- return parseInt((Math.random() * (max - min) + min).toString(), 10)
- },
- randomInt(n: number) {
- return this.randomIntRange(0, n)
- },
- randomSeq(count: number): string {
- let str = ''
- for (let i = 0; i < count; ++i) {
- str += seq[this.randomInt(62)]
- }
- return str
- },
- randomLowerAndNum(count: number): string {
- let str = ''
- for (let i = 0; i < count; ++i) {
- str += seq[this.randomInt(36)]
- }
- return str
- },
- randomUUID(): string {
- let d = new Date().getTime()
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
- let r = (d + Math.random() * 16) % 16 | 0
- d = Math.floor(d / 16)
- return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16)
- })
- },
- randomShadowsocksPassword(n: number): string {
- const array = new Uint8Array(n)
- window.crypto.getRandomValues(array)
- return btoa(String.fromCharCode(...array))
- },
- randomShortId(): string[] {
- let shortIds = new Array(24).fill('')
- for (var ii = 1; ii < 24; ii++) {
- for (var jj = 0; jj <= this.randomInt(7); jj++){
- let randomNum = this.randomInt(256)
- shortIds[ii] += ('0' + randomNum.toString(16)).slice(-2)
- }
- }
- return shortIds
- }
-}
-
-export default RandomUtil
\ No newline at end of file
diff --git a/frontend/src/plugins/utils.ts b/frontend/src/plugins/utils.ts
deleted file mode 100644
index 8c109cd..0000000
--- a/frontend/src/plugins/utils.ts
+++ /dev/null
@@ -1,104 +0,0 @@
-import { i18n } from "@/locales"
-
-type OBJ = {
- [key: string]: any
-}
-
-export const FindDiff = {
- deepCompare(obj1: any, obj2: any): boolean {
- // Check if the types of both objects are the same
- if (typeof obj1 !== typeof obj2) {
- return false
- }
-
- // Check if both objects are arrays
- if (Array.isArray(obj1) && Array.isArray(obj2)) {
- if (obj1.length !== obj2.length) {
- return false
- }
-
- for (let i = 0; i < obj1.length; i++) {
- if (!this.deepCompare(obj1[i], obj2[i])) {
- return false
- }
- }
- return true
- }
-
- // Check if both objects are plain objects
- if (typeof obj1 === 'object' && typeof obj2 === 'object' && obj1 !== null && obj2 !== null) {
- const keys1 = Object.keys(obj1).filter(key => obj1[key] !== undefined)
- const keys2 = Object.keys(obj2).filter(key => obj2[key] !== undefined)
-
- if (keys1.length !== keys2.length) {
- return false
- }
-
- for (const key of keys1) {
- if (!keys2.includes(key) || !this.deepCompare(obj1[key], obj2[key])) {
- return false
- }
- }
- return true
- }
-
- // Check primitive values
- return obj1 === obj2
- }
-}
-
-const ONE_KB = 1024
-const ONE_MB = ONE_KB * 1024
-const ONE_GB = ONE_MB * 1024
-const ONE_TB = ONE_GB * 1024
-const ONE_PB = ONE_TB * 1024
-
-export const HumanReadable = {
- sizeFormat(size:number, fix:number=2) {
- if (!size || size<0) return "-"
- if (size < ONE_KB) {
- return size.toFixed(0) + " " + i18n.global.t('stats.B')
- } else if (size < ONE_MB) {
- return (size / ONE_KB).toFixed(fix) + " " + i18n.global.t('stats.KB')
- } else if (size < ONE_GB) {
- return (size / ONE_MB).toFixed(fix) + " " + i18n.global.t('stats.MB')
- } else if (size < ONE_TB) {
- return (size / ONE_GB).toFixed(fix) + " " + i18n.global.t('stats.GB')
- } else if (size < ONE_PB) {
- return (size / ONE_TB).toFixed(fix) + " " + i18n.global.t('stats.TB')
- } else {
- return (size / ONE_PB).toFixed(fix) + " " + i18n.global.t('stats.PB')
- }
- },
- packetFormat(size:number, fix:number=2) {
- if (!size || size<0) return "-"
- if (size < 1000) {
- return size.toFixed(0) + " " + i18n.global.t('stats.p')
- } else if (size < 1000000) {
- return (size / 1000).toFixed(fix) + " " + i18n.global.t('stats.Kp')
- } else if (size < 1000000000) {
- return (size / 1000000).toFixed(fix) + " " + i18n.global.t('stats.Mp')
- } else {
- return (size / 1000000000).toFixed(fix) + " " + i18n.global.t('stats.Gp')
- }
- },
- formatSecond(second:number): string {
- if (!second || second<0) return "-"
- if (second < 60) {
- return second.toFixed(0) + i18n.global.t('date.s')
- } else if (second < 3600) {
- return (second / 60).toFixed(0) + i18n.global.t('date.m')
- } else if (second < 3600 * 24) {
- return (second / 3600).toFixed(0) + i18n.global.t('date.h')
- }
- const day = Math.floor(second / 3600 / 24)
- const remain = Math.floor((second/3600) - (day*24))
- return day + i18n.global.t('date.d') + (remain > 0 ? ' ' + remain + i18n.global.t('date.h') : '')
- },
- remainedDays(exp:number): string {
- if (exp == 0) return i18n.global.t('unlimited')
- const now = Date.now()/1000
- if (exp < now) return i18n.global.t('date.expired')
- return Math.floor((exp - now) / (3600*24)) + " " + i18n.global.t('date.d')
- }
-}
\ No newline at end of file
diff --git a/frontend/src/plugins/vuetify.ts b/frontend/src/plugins/vuetify.ts
deleted file mode 100644
index 4bebe1d..0000000
--- a/frontend/src/plugins/vuetify.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * plugins/vuetify.ts
- *
- * Framework documentation: https://vuetifyjs.com`
- */
-
-// Styles
-import '@mdi/font/css/materialdesignicons.css'
-import 'vuetify/styles'
-
-import colors from 'vuetify/util/colors'
-import { fa, en, vi, zhHans, zhHant, ru } from 'vuetify/locale'
-
-// Composables
-import { createVuetify } from 'vuetify'
-
-// https://vuetifyjs.com/en/introduction/why-vuetify/#feature-guides
-export default createVuetify({
- defaults: {
- VRow: { dense: true } // Apply dense to v-row as default
- },
- theme: {
- defaultTheme: localStorage.getItem('theme') ?? 'light',
- themes: {
- light: {
- colors: {
- primary: '#1867C0',
- secondary: '#5CBBF6',
- tertiary: '#E57373',
- accent: '#005CAF',
- error: colors.red.accent3,
- warning: colors.amber.base,
- info: colors.teal.darken1,
- success: colors.green.base,
- background: colors.grey.lighten4,
- },
- },
- dark: {
- colors: {
- primary: colors.blue.darken4,
- secondary: colors.grey.darken3,
- accent: colors.pink.darken3,
- error: colors.red.accent3,
- warning: colors.amber.darken3,
- info: colors.teal.lighten1,
- success: colors.green.darken2,
- surface: colors.grey.darken3,
- background: colors.grey.darken4,
- },
- },
- },
- },
- locale: {
- locale: localStorage.getItem("locale") ?? 'en',
- fallback: 'en',
- messages: { en, fa, vi, zhHans, zhHant, ru },
- },
-})
diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts
deleted file mode 100644
index 56b6ac1..0000000
--- a/frontend/src/router/index.ts
+++ /dev/null
@@ -1,113 +0,0 @@
-// Composables
-import { createRouter, createWebHistory } from 'vue-router'
-import Login from '@/views/Login.vue'
-import Data from '@/store/modules/data'
-
-const routes = [
- {
- path: '/login',
- name: 'pages.login',
- component: Login,
- },
- {
- path: '/',
- component: () => import('@/layouts/default/Default.vue'),
- meta: { requiresAuth: true },
- children: [
- {
- path: '/',
- name: 'pages.home',
- component: () => import('@/views/Home.vue'),
- },
- {
- path: '/inbounds',
- name: 'pages.inbounds',
- component: () => import('@/views/Inbounds.vue'),
- },
- {
- path: '/clients',
- name: 'pages.clients',
- component: () => import('@/views/Clients.vue'),
- },
- {
- path: '/outbounds',
- name: 'pages.outbounds',
- component: () => import('@/views/Outbounds.vue'),
- },
- {
- path: '/endpoints',
- name: 'pages.endpoints',
- component: () => import('@/views/Endpoints.vue'),
- },
- {
- path: '/rules',
- name: 'pages.rules',
- component: () => import('@/views/Rules.vue'),
- },
- {
- path: '/tls',
- name: 'pages.tls',
- component: () => import('@/views/Tls.vue'),
- },
- {
- path: '/basics',
- name: 'pages.basics',
- component: () => import('@/views/Basics.vue'),
- },
- {
- path: '/admins',
- name: 'pages.admins',
- component: () => import('@/views/Admins.vue'),
- },
- {
- path: '/settings',
- name: 'pages.settings',
- component: () => import('@/views/Settings.vue'),
- },
- ],
- },
-]
-
-const router = createRouter({
- history: createWebHistory((window as any).BASE_URL),
- routes,
-})
-
-const DEFAULT_TITLE = 'S-UI'
-let intervalId:any
-
-// Navigation guard to check authentication state
-router.beforeEach((to, from, next) => {
- // Check the session cookie
- const sessionCookie = document.cookie.split(';').find(cookie => cookie.trim().startsWith('s-ui='))
- const isAuthenticated = !!sessionCookie
-
- // If the route requires authentication and the user is not authenticated, redirect to /login
- if (to.meta.requiresAuth && !isAuthenticated) {
- next('/login')
- } else if (to.path === '/login' && isAuthenticated) {
- // If already authenticated and visiting /route, redirect to '/'
- next('/')
- } else {
- // Load default data
- if(to.path != '/login'){
- loadDataInterval()
- } else {
- if (intervalId) {
- clearInterval(intervalId)
- intervalId = undefined
- }
- }
- next()
- }
-})
-
-const loadDataInterval = () => {
- if (intervalId) return
- Data().loadData()
- intervalId = setInterval(() => {
- Data().loadData()
- }, 10000)
-}
-
-export default router
diff --git a/frontend/src/store/index.ts b/frontend/src/store/index.ts
deleted file mode 100644
index e90ba41..0000000
--- a/frontend/src/store/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { createPinia } from 'pinia'
-
-const pinia = createPinia()
-
-export default pinia
\ No newline at end of file
diff --git a/frontend/src/store/modules/data.ts b/frontend/src/store/modules/data.ts
deleted file mode 100644
index 7fd93a6..0000000
--- a/frontend/src/store/modules/data.ts
+++ /dev/null
@@ -1,87 +0,0 @@
-import HttpUtils from '@/plugins/httputil'
-import { defineStore } from 'pinia'
-import { push } from 'notivue'
-import { i18n } from '@/locales'
-import { Inbound } from '@/types/inbounds'
-import { Client } from '@/types/clients'
-
-const Data = defineStore('Data', {
- state: () => ({
- lastLoad: 0,
- reloadItems: localStorage.getItem("reloadItems")?.split(',')?? [],
- subURI: "",
- onlines: {inbound: [], outbound: [], user: []},
- config: {},
- inbounds: [],
- outbounds: [],
- endpoints: [],
- clients: [],
- tlsConfigs: [],
- }),
- actions: {
- async loadData() {
- const msg = await HttpUtils.get('api/load', this.lastLoad >0 ? {lu: this.lastLoad} : {} )
- if(msg.success) {
- this.onlines = msg.obj.onlines
- if (msg.obj.lastLog) {
- push.error({
- title: i18n.global.t('error.core'),
- duration: 5000,
- message: msg.obj.lastLog
- })
- }
-
- if (msg.obj.config) {
- this.setNewData(msg.obj)
- }
- }
- },
- setNewData(data: any) {
- this.lastLoad = Math.floor((new Date()).getTime()/1000)
- if (data.subURI) this.subURI = data.subURI
- if (data.config) this.config = data.config
- if (data.clients) this.clients = data.clients
- if (data.inbounds) this.inbounds = data.inbounds
- if (data.outbounds) this.outbounds = data.outbounds
- if (data.endpoints) this.endpoints = data.endpoints
- if (data.tls) this.tlsConfigs = data.tls
- },
- async loadInbounds(ids: number[]): Promise {
- const options = ids.length > 0 ? {id: ids.join(",")} : {}
- const msg = await HttpUtils.get('api/inbounds', options)
- if(msg.success) {
- return msg.obj.inbounds
- }
- return []
- },
- async loadClients(id: number): Promise {
- const options = id > 0 ? {id: id} : {}
- const msg = await HttpUtils.get('api/clients', options)
- if(msg.success) {
- return msg.obj.clients[0]??{}
- }
- return {}
- },
- async save (object: string, action: string, data: any, initUsers?: number[]): Promise {
- let postData = {
- object: object,
- action: action,
- data: JSON.stringify(data, null, 2),
- initUsers: initUsers?.join(',') ?? undefined
- }
- const msg = await HttpUtils.post('api/save', postData)
- if (msg.success) {
- const objectName = ['tls', 'config'].includes(object) ? object : object.substring(0, object.length - 1)
- push.success({
- title: i18n.global.t('success'),
- duration: 5000,
- message: i18n.global.t('actions.' + action) + " " + i18n.global.t('objects.' + objectName)
- })
- this.setNewData(msg.obj)
- }
- return msg.success
- }
- }
-})
-
-export default Data
\ No newline at end of file
diff --git a/frontend/src/styles/settings.scss b/frontend/src/styles/settings.scss
deleted file mode 100644
index 3b4d288..0000000
--- a/frontend/src/styles/settings.scss
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * src/styles/settings.scss
- *
- * Configures SASS variables and Vuetify overwrites
- */
-
-// https://vuetifyjs.com/features/sass-variables/`
-// @use 'vuetify/settings' with (
-// $color-pack: false
-// );
-@font-face {
- font-display: swap;
- font-family: 'Vazirmatn';
- font-style: normal;
- font-weight: 400;
- src: url('@/assets/Vazirmatn-UI-NL-Regular.woff2') format('woff2');
- unicode-range: U+0600-06FF, U+200C-200E, U+2010-2011, U+204F, U+2E41, U+FB50-FDFF, U+FE80-FEFC, U+0030-0039;
-}
-$body-font-family: "Vazirmatn";
-
-$typoOptions: text-h1, text-sm-h1, text-md-h1, text-lg-h1, text-h2, text-sm-h2,
- text-md-h2, text-lg-h2, text-h3, text-sm-h3, text-md-h3, text-lg-h3, text-h4,
- text-sm-h4, text-md-h4, text-lg-h4, text-h5, text-sm-h5, text-md-h5,
- text-lg-h5, text-h6, text-sm-h6, text-md-h6, text-lg-h6, headline, title,
- subtitle-1, subtitle-2, text-body-1, text-sm-body-1, text-md-body-1,
- text-lg-body-1, text-body-2, text-sm-body-2, text-md-body-2, text-lg-body-2,
- text-caption;
-body {
- font-family: -apple-system, BlinkMacSystemFont, $body-font-family, sans-serif !important;
- @each $typoOption in $typoOptions {
- .#{$typoOption} {
- font-family: -apple-system, BlinkMacSystemFont, $body-font-family, sans-serif !important;
- }
- }
-}
-
-.v-btn {
- letter-spacing: 0;
-}
\ No newline at end of file
diff --git a/frontend/src/types/brutal.ts b/frontend/src/types/brutal.ts
deleted file mode 100644
index f05f562..0000000
--- a/frontend/src/types/brutal.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export interface Brutal {
- enabled: boolean
- up_mbps: number
- down_mbps: number
-}
\ No newline at end of file
diff --git a/frontend/src/types/clients.ts b/frontend/src/types/clients.ts
deleted file mode 100644
index 4da3391..0000000
--- a/frontend/src/types/clients.ts
+++ /dev/null
@@ -1,134 +0,0 @@
-import RandomUtil from "@/plugins/randomUtil"
-
-export interface Link {
- type: "local" | "external" | "sub"
- remark?: string
- uri: string
-}
-
-export interface Client {
- id?: number
- enable: boolean
- name: string
- config?: Config
- inbounds: number[]
- links?: Link[]
- volume: number
- expiry: number
- up: number
- down: number
- desc: string
- group: string
-}
-
-const defaultClient: Client = {
- enable: true,
- name: "",
- config: {},
- inbounds: [],
- links: [],
- volume: 0,
- expiry: 0,
- up: 0,
- down: 0,
- desc: "",
- group: "",
-}
-
-type Config = {
- [key: string]: {
- name?: string
- username?: string
- [key: string]: any
- }
-}
-
-export function updateConfigs(configs: Config, newUserName: string): Config {
-
- for (const key in configs) {
- if (configs.hasOwnProperty(key)) {
- const config = configs[key]
- if (config.hasOwnProperty("name")) {
- config.name = newUserName
- } else if (config.hasOwnProperty("username")) {
- config.username = newUserName
- }
- }
- }
-
- return configs
-}
-
-export function randomConfigs(user: string): Config {
- const mixedPassword = RandomUtil.randomSeq(10)
- const ssPassword16 = RandomUtil.randomShadowsocksPassword(16)
- const ssPassword32 = RandomUtil.randomShadowsocksPassword(32)
- const uuid = RandomUtil.randomUUID()
- return {
- mixed: {
- username: user,
- password: mixedPassword,
- },
- socks: {
- username: user,
- password: mixedPassword,
- },
- http: {
- username: user,
- password: mixedPassword,
- },
- shadowsocks: {
- name: user,
- password: ssPassword32,
- },
- shadowsocks16: {
- name: user,
- password: ssPassword16,
- },
- shadowtls: {
- name: user,
- password: ssPassword32,
- },
- vmess: {
- name: user,
- uuid: uuid,
- alterId: 0,
- },
- vless: {
- name: user,
- uuid: uuid,
- flow: "xtls-rprx-vision",
- },
- trojan: {
- name: user,
- password: mixedPassword,
- },
- naive: {
- username: user,
- password: mixedPassword,
- },
- hysteria: {
- name: user,
- auth_str: mixedPassword,
- },
- tuic: {
- name: user,
- uuid: uuid,
- password: mixedPassword,
- },
- hysteria2: {
- name: user,
- password: mixedPassword,
- },
- }
-}
-
-export function createClient(json?: Partial): Client {
- defaultClient.name = RandomUtil.randomSeq(8)
- const defaultObject: Client = { ...defaultClient, ...(json || {}) }
-
- // Add missing config
- defaultObject.config = { ...randomConfigs(defaultObject.name), ...defaultObject.config }
-
- return defaultObject
-}
diff --git a/frontend/src/types/config.ts b/frontend/src/types/config.ts
deleted file mode 100644
index ce15038..0000000
--- a/frontend/src/types/config.ts
+++ /dev/null
@@ -1,103 +0,0 @@
-import { Inbound } from './inbounds'
-import { Dial, Outbound } from './outbounds'
-
-interface Log {
- disabled?: boolean
- level?: string
- output?: string
- timestamp?: boolean
-}
-
-interface Dns {
- servers: DnsServer[]
- final?: string
- strategy?: string
-}
-
-interface DnsServer{
- tag?: string,
- address: string,
- address_resolver?: string,
- address_strategy?: string,
- strategy?: string,
- detour?: string
-}
-
-export interface Ntp extends Dial{
- enabled?: boolean
- server: string
- server_port?: number
- interval?: string
-}
-
-interface Route {
- rules: RouteRule[] | RouteRuleLogical[]
- rule_set: RouteRuleSet[]
- final?: string,
- auto_detect_interface?: boolean
- default_interface?: string
- default_mark?: number
-}
-
-interface RouteRule {
- inbound?: string[] | string
- ip_version?: 4 | 6,
- network?: "tcp" | "udp"
- auth_user?: string[]
- protocol?: string[] | string
- domain?: string[] | string
- domain_suffix?: string[] | string
- domain_keyword?: string[] | string
- domain_regex?: string[] | string
- source_ip_cidr?: string[] | string
- source_ip_is_private?: boolean
- ip_cidr?: string[] | string
- ip_is_private?: boolean
- source_port?: number[] | number
- source_port_range?: string[] | string
- port?: number[] | number
- port_range?: string[] | string
- clash_mode?: string
- rule_set?: string[] | string
- invert?: boolean
- outbound: string
-}
-
-interface RouteRuleLogical {
- type: "logical"
- mode: "and" | "or"
- rules: RouteRule[]
- invert?: boolean
- outbound: string
-}
-
-interface RouteRuleSet {
- type: string
- tag: string
- format: string
- path?: string
- url?: string
- download_detour?: string
- update_interval?: string
-}
-
-interface Experimental {
- cache_file?: CacheFile
-}
-
-interface CacheFile {
- enabled?: boolean
- path?: string
- cache_id?: string
- store_fakeip?: boolean
-}
-
-export interface Config {
- log: Log
- dns: Dns
- ntp?: Ntp
- inbounds: Inbound[]
- outbounds: Outbound[]
- route: Route
- experimental: Experimental
-}
\ No newline at end of file
diff --git a/frontend/src/types/dial.ts b/frontend/src/types/dial.ts
deleted file mode 100644
index 06a2670..0000000
--- a/frontend/src/types/dial.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-export interface Dial {
- detour?: string
- bind_interface?: string
- inet4_bind_address?: string
- inet6_bind_address?:string
- routing_mark?: number
- reuse_addr?: boolean
- connect_timeout?: string
- tcp_fast_open?: boolean
- tcp_multi_path?: boolean
- udp_fragment?: boolean
- domain_strategy?: string
- fallback_delay?: string
-}
\ No newline at end of file
diff --git a/frontend/src/types/endpoints.ts b/frontend/src/types/endpoints.ts
deleted file mode 100644
index 6bcddfd..0000000
--- a/frontend/src/types/endpoints.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-import { Dial } from "./outbounds"
-
-export const EpTypes = {
- Wireguard: 'wireguard',
- Warp: 'warp',
-}
-
-type EpType = typeof EpTypes[keyof typeof EpTypes]
-
-interface EndpointBasics {
- id: number
- type: EpType
- tag: string
-}
-
-export interface WgPeer {
- address: string
- port: number
- public_key: string
- pre_shared_key?: string
- allowed_ips?: string[]
- persistent_keepalive_interval?: number
- reserved?: number[]
-}
-
-export interface WireGuard extends EndpointBasics, Dial {
- system?: boolean
- name?: string
- mtu?: number
- address: string[]
- private_key: string
- listen_port: number,
- peers: WgPeer[]
- udp_timeout?: string,
- workers?: number
-}
-
-export interface Warp extends WireGuard {
- ext: any
-}
-
-// Create interfaces dynamically based on EpTypes keys
-type InterfaceMap = {
- [Key in keyof typeof EpTypes]: {
- type: string
- [otherProperties: string]: any // You can add other properties as needed
- }
-}
-
-// Create union type from InterfaceMap
-export type Endpoint = InterfaceMap[keyof InterfaceMap]
-
-// Create defaultValues object dynamically
-const defaultValues: Record = {
- wireguard: { type: EpTypes.Wireguard, address: ['10.0.0.2/32','fe80::2/128'], private_key: '', listen_port: 0, peers: [{ address: '', port: 0, public_key: ''}] },
- warp: { type: EpTypes.Warp, address: [], private_key: '', listen_port: 0, mtu: 1420, peers: [{ address: '', port: 0, public_key: ''}] },
-}
-
-export function createEndpoint(type: string,json?: Partial): Endpoint {
- const defaultObject: Endpoint = { ...defaultValues[type], ...(json || {}) }
- return defaultObject
-}
\ No newline at end of file
diff --git a/frontend/src/types/inbounds.ts b/frontend/src/types/inbounds.ts
deleted file mode 100644
index 50b6e0f..0000000
--- a/frontend/src/types/inbounds.ts
+++ /dev/null
@@ -1,235 +0,0 @@
-import { iMultiplex } from "./multiplex"
-import { iTls } from "./tls"
-import { Dial } from "./outbounds"
-import { Transport } from "./transport"
-
-export const InTypes = {
- Direct: 'direct',
- Mixed: 'mixed',
- SOCKS: 'socks',
- HTTP: 'http',
- Shadowsocks: 'shadowsocks',
- VMess: 'vmess',
- Trojan: 'trojan',
- Naive: 'naive',
- Hysteria: 'hysteria',
- ShadowTLS: 'shadowtls',
- TUIC: 'tuic',
- Hysteria2: 'hysteria2',
- VLESS: 'vless',
- Tun: 'tun',
- Redirect: 'redirect',
- TProxy: 'tproxy',
-}
-
-type InType = typeof InTypes[keyof typeof InTypes]
-
-export interface Addr {
- server: string
- server_port: number
- tls?: boolean
- insecure?: boolean
- server_name?: string
- remark?: string
-}
-
-export interface Listen {
- listen: string
- listen_port: number
- tcp_fast_open?: boolean
- tcp_multi_path?: boolean
- udp_fragment?: boolean
- udp_timeout?: string
- detour?: string
-}
-
-interface InboundBasics extends Listen {
- id: number
- type: InType
- tag: string
- tls_id: number
- addrs?: Addr[]
- out_json?: any
-}
-
-interface ShadowTLSHandShake extends Dial {
- server: string
- server_port: number
-}
-
-export interface Direct extends InboundBasics {
- network?: "udp" | "tcp"
- override_address?: string
- override_port?: number
-}
-export interface Mixed extends InboundBasics {}
-export interface SOCKS extends InboundBasics {}
-export interface HTTP extends InboundBasics {}
-export interface Shadowsocks extends InboundBasics {
- method: string
- password: string
- network?: "udp" | "tcp"
- multiplex?: iMultiplex
-}
-export interface VMess extends InboundBasics {
- tls: iTls
- multiplex?: iMultiplex
- transport?: Transport
-}
-export interface Trojan extends InboundBasics {
- tls: iTls
- fallback?: {
- server: string
- server_port: number
- }
- multiplex?: iMultiplex
- transport?: Transport
-}
-export interface Naive extends InboundBasics {
- tls: iTls,
-}
-export interface Hysteria extends InboundBasics {
- up_mbps: number
- down_mbps: number
- obfs?: string
- recv_window_conn?: number
- recv_window_client?: number
- max_conn_client?: number
- disable_mtu_discovery?: boolean
-}
-export interface ShadowTLS extends InboundBasics {
- version: 1|2|3
- password?: string
- handshake: ShadowTLSHandShake
- handshake_for_server_name?: {
- [server_name: string]: ShadowTLSHandShake
- }
- strict_mode?: boolean
-}
-export interface VLESS extends InboundBasics {
- multiplex?: iMultiplex
- transport?: Transport
-}
-export interface TUIC extends InboundBasics {
- congestion_control: ""|"cubic"|"new_reno"|"bbr"
- auth_timeout?: string
- zero_rtt_handshake?: boolean
- heartbeat?: string
-}
-export interface Hysteria2 extends InboundBasics {
- up_mbps?: number
- down_mbps?: number
- obfs?: {
- type?: "salamander"
- password: string
- }
- ignore_client_bandwidth?: boolean
- masquerade?: string | {
- type: string
- directory?: string
- url?: string
- rewrite_host?: boolean
- status_code?: number
- headers?: Headers[]
- content?: string
- }
- brutal_debug?: boolean
-}
-export interface Tun extends InboundBasics {
- interface_name?: string
- address?: string[]
- mtu?: number
- endpoint_independent_nat?: boolean
- udp_timeout?: string
- stack?: string
- auto_route?: boolean
- // strict_route?: boolean
- // iproute2_table_index?: number
- // iproute2_rule_index?: number
- // auto_redirect?: boolean
- // auto_redirect_input_mark?: string
- // auto_redirect_output_mark?: string
- // route_address?: string[]
- // route_exclude_address?: string[]
- // include_interface?: string[]
- // exclude_interface?: string[]
- // include_uid?: string[]
- // include_uid_range?: string[]
- // exclude_uid?: number[]
- // exclude_uid_range?: string[]
- // include_android_user?: number[]
- // include_package?: string[]
- // exclude_package?: string[]
-}
-export interface Redirect extends InboundBasics {}
-export interface TProxy extends InboundBasics {
- network?: "udp" | "tcp"
-}
-
-// Create interfaces dynamically based on InTypes keys
-type InterfaceMap = {
- direct: Direct
- mixed: Mixed
- socks: SOCKS
- http: SOCKS
- shadowsocks: Shadowsocks
- vmess: VMess
- trojan: Trojan
- naive: Naive
- hysteria: Hysteria
- shadowtls: ShadowTLS
- tuic: TUIC
- hysteria2: Hysteria2
- vless: VLESS
- tun: Tun
- redirect: Redirect
- tproxy: TProxy
-}
-
-// Create union type from InterfaceMap
-export type Inbound = InterfaceMap[keyof InterfaceMap]
-
-type userEnabledTypes = {
- mixed: Mixed
- socks: SOCKS
- http: SOCKS
- shadowsocks: Shadowsocks
- vmess: VMess
- trojan: Trojan
- naive: Naive
- hysteria: Hysteria
- shadowtls: ShadowTLS
- tuic: TUIC
- hysteria2: Hysteria2
- vless: VLESS
-}
-
-export const inboundWithUsers = ['mixed', 'socks', 'http', 'shadowsocks', 'vmess', 'trojan', 'naive', 'hysteria', 'shadowtls', 'tuic', 'hysteria2', 'vless']
-
-// Create union type from userEnabledTypes
-type InboundWithUser = userEnabledTypes[keyof userEnabledTypes]
-
-// Create defaultValues object dynamically
-const defaultValues: Record = {
- direct: { type: InTypes.Direct },
- mixed: { type: InTypes.Mixed },
- socks: { type: InTypes.SOCKS },
- http: { type: InTypes.HTTP, tls_id: 0 },
- shadowsocks: { type: InTypes.Shadowsocks, method: 'none', multiplex: {} },
- vmess: { type: InTypes.VMess, tls_id: 0, multiplex: {}, transport: {} },
- trojan: { type: InTypes.Trojan, tls_id: 0, multiplex: {}, transport: {} },
- naive: { type: InTypes.Naive, tls_id: 0 },
- hysteria: { type: InTypes.Hysteria, up_mbps: 100, down_mbps: 100, tls_id: 0 },
- shadowtls: { type: InTypes.ShadowTLS, version: 3, handshake: {}, handshake_for_server_name: {} },
- tuic: { type: InTypes.TUIC, congestion_control: "cubic", tls_id: 0 },
- hysteria2: { type: InTypes.Hysteria2, tls_id: 0 },
- vless: { type: InTypes.VLESS, tls_id: 0, multiplex: {}, transport: {} },
- tun: { type: InTypes.Tun, mtu: 9000, stack: 'system', udp_timeout: '5m', auto_route: false },
- redirect: { type: InTypes.Redirect },
- tproxy: { type: InTypes.TProxy },
-}
-
-export function createInbound(type: InType,json?: Partial): Inbound {
- const defaultObject: Inbound = { ...defaultValues[type] ?? {}, ...(json ?? {}) }
- return defaultObject
-}
\ No newline at end of file
diff --git a/frontend/src/types/multiplex.ts b/frontend/src/types/multiplex.ts
deleted file mode 100644
index 720daf8..0000000
--- a/frontend/src/types/multiplex.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { Brutal } from "./brutal"
-
-export interface iMultiplex{
- enabled: boolean
- padding?: boolean
- brutal?: Brutal
-}
-
-export interface oMultiplex extends iMultiplex{
- protocol?: "smux" | "yamux" | "h2mux"
- max_connections?: number
- min_streams?: number
- max_streams?: number
-}
\ No newline at end of file
diff --git a/frontend/src/types/outbounds.ts b/frontend/src/types/outbounds.ts
deleted file mode 100644
index c211dd7..0000000
--- a/frontend/src/types/outbounds.ts
+++ /dev/null
@@ -1,255 +0,0 @@
-import { oTls } from "./tls"
-import { oMultiplex } from "./multiplex"
-import { Transport } from "./transport"
-
-export const OutTypes = {
- Direct: 'direct',
- SOCKS: 'socks',
- HTTP: 'http',
- Shadowsocks: 'shadowsocks',
- VMess: 'vmess',
- Trojan: 'trojan',
- Hysteria: 'hysteria',
- VLESS: 'vless',
- ShadowTLS: 'shadowtls',
- TUIC: 'tuic',
- Hysteria2: 'hysteria2',
- Tor: 'tor',
- SSH: 'ssh',
- Selector: 'selector',
- URLTest: 'urltest',
-}
-
-type OutType = typeof OutTypes[keyof typeof OutTypes]
-
-export interface Dial {
- detour?: string
- bind_interface?: string
- inet4_bind_address?: string
- inet6_bind_address?: string
- routing_mark?: number
- reuse_addr?: boolean
- connect_timeout?: string
- tcp_fast_open?: boolean
- tcp_multi_path?: boolean
- udp_fragment?: boolean
- domain_strategy?: string
- fallback_delay?: string
-}
-
-interface OutboundBasics {
- id: number
- type: OutType
- tag: string
-}
-
-export interface WgPeer {
- server: string
- server_port: number
- public_key: string
- pre_shared_key?: string
- allowed_ips?: string[]
- reserved?: number[]
-}
-
-export interface Direct extends OutboundBasics, Dial {}
-
-export interface SOCKS extends OutboundBasics, Dial {
- server: string
- server_port: number
- version?: "4" | "4a" | "5"
- username?: string
- password?: string
- network?: "udp" | "tcp"
- udp_over_tcp?: false | {
- enabled: true
- version?: number
- }
-}
-
-export interface HTTP extends OutboundBasics, Dial {
- server: string
- server_port: number
- username?: string
- password?: string
- path?: string
- headers?: {
- [key: string]: string
- }
- tls?: oTls
-}
-
-export interface Shadowsocks extends OutboundBasics, Dial {
- server: string
- server_port: number
- method: string
- password: string
- network?: "udp" | "tcp"
- udp_over_tcp?: false | {
- enabled: true
- version?: number
- }
- multiplex?: oMultiplex
-}
-
-export interface VMESS extends OutboundBasics, Dial {
- server: string
- server_port: number
- uuid: string
- security?: string
- alter_id: 0
- global_padding?: boolean
- authenticated_length?: boolean
- network?: "udp" | "tcp"
- packet_encoding?: string
- tls?: oTls
- multiplex?: oMultiplex
- transport?: Transport
-}
-
-export interface Trojan extends OutboundBasics, Dial {
- server: string
- server_port: number
- password: string
- network?: "udp" | "tcp"
- tls?: oTls
- multiplex?: oMultiplex
- transport?: Transport
-}
-
-export interface Hysteria extends OutboundBasics, Dial {
- server: string
- server_port: number
- up_mbps: number
- down_mbps: number
- obfs?: string
- auth_str?: string
- recv_window_conn?: number
- recv_window?: number
- disable_mtu_discovery?: boolean
- network?: "udp" | "tcp"
- tls: oTls
-}
-
-export interface ShadowTLS extends OutboundBasics, Dial {
- server: string
- server_port: number
- version: 1|2|3
- password?: string
- tls: oTls
-}
-
-export interface VLESS extends OutboundBasics, Dial {
- server: string
- server_port: number
- uuid: string
- flow?: string
- network?: "udp" | "tcp"
- packet_encoding?: string
- tls?: oTls
- multiplex?: oMultiplex
- transport?: Transport
-}
-
-export interface TUIC extends OutboundBasics, Dial {
- server: string
- server_port: number
- uuid: string
- password?: string
- congestion_control?: "cubic"|"new_reno"|"bbr"
- udp_relay_mode?: "native" | "quic"
- udp_over_stream?: boolean
- zero_rtt_handshake?: boolean
- heartbeat?: string
- network?: "udp" | "tcp"
- tls: oTls
-}
-
-export interface Hysteria2 extends OutboundBasics, Dial {
- server: string
- server_port: number
- server_ports?: string[]
- hop_interval: string
- up_mbps?: number
- down_mbps?: number
- obfs?: {
- type?: "salamander"
- password: string
- }
- password?: string
- network?: "udp" | "tcp"
- tls: oTls
- brutal_debug?: boolean
-}
-
-export interface Tor extends OutboundBasics, Dial {
- executable_path?: string
- extra_args?: string[]
- data_directory: string
- torrc?: {
- ClientOnly: 0 | 1
- }
-}
-
-export interface SSH extends OutboundBasics, Dial {
- server: string
- server_port?: number
- user?: string
- password?: string
- private_key?: string
- private_key_path?: string
- private_key_passphrase?: string
- host_key?: string[]
- host_key_algorithms?: string[]
- client_version?: string
-}
-
-export interface Selector extends OutboundBasics {
- outbounds: string[]
- url?: string
- interval?: string
- tolerance?: number
- idle_timeout?: string
- interrupt_exist_connections?: boolean
-}
-
-export interface URLTest extends OutboundBasics {
- outbounds: string[]
- default?: string
- interrupt_exist_connections?: boolean
-}
-
-// Create interfaces dynamically based on OutTypes keys
-type InterfaceMap = {
- [Key in keyof typeof OutTypes]: {
- type: string
- [otherProperties: string]: any // You can add other properties as needed
- }
-}
-
-// Create union type from InterfaceMap
-export type Outbound = InterfaceMap[keyof InterfaceMap]
-
-// Create defaultValues object dynamically
-const defaultValues: Record = {
- direct: { type: OutTypes.Direct },
- socks: { type: OutTypes.SOCKS, version: "5" },
- http: { type: OutTypes.HTTP, tls: {} },
- shadowsocks: { type: OutTypes.Shadowsocks, method: 'none', multiplex: {} },
- vmess: { type: OutTypes.VMess, tls: {}, multiplex: {}, transport: {}, security: 'auto', global_padding: false },
- trojan: { type: OutTypes.Trojan, tls: {}, multiplex: {}, transport: {} },
- hysteria: { type: OutTypes.Hysteria, up_mbps: 100, down_mbps: 100, tls: { enabled: true } },
- shadowtls: { type: OutTypes.ShadowTLS, version: 3, tls: { enabled: true } },
- vless: { type: OutTypes.VLESS, tls: {}, multiplex: {}, transport: {} },
- tuic: { type: OutTypes.TUIC, congestion_control: 'cubic', tls: { enabled: true } },
- hysteria2: { type: OutTypes.Hysteria2, tls: { enabled: true } },
- tor: { type: OutTypes.Tor, executable_path: './tor', data_directory: '$HOME/.cache/tor', torrc: { ClientOnly: 1 } },
- ssh: { type: OutTypes.SSH },
- selector: { type: OutTypes.Selector },
- urltest: { type: OutTypes.URLTest },
-}
-
-export function createOutbound(type: string,json?: Partial): Outbound {
- const defaultObject: Outbound = { ...defaultValues[type], ...(json || {}) }
- return defaultObject
-}
\ No newline at end of file
diff --git a/frontend/src/types/rules.ts b/frontend/src/types/rules.ts
deleted file mode 100644
index ce9e4e3..0000000
--- a/frontend/src/types/rules.ts
+++ /dev/null
@@ -1,76 +0,0 @@
-interface generalRule {
- invert: boolean
- action: 'route' | 'route-options' | 'reject' | 'hijack-dns' | 'sniff' | 'resolve'
- outbound?: string
- override_address?: string
- override_port?: number
- udp_disable_domain_unmapping?: boolean
- udp_connect?: boolean
- udp_timeout?: string
- method?: string
- no_drop?: boolean
- sniffer: string[]
- timeout: string
- strategy: string
- server: string
-}
-
-export const actionKeys = [
- 'invert',
- 'action',
- 'outbound',
- 'override_address',
- 'override_port',
- 'udp_disable_domain_unmapping',
- 'udp_connect',
- 'udp_timeout',
- 'method',
- 'no_drop',
- 'sniffer',
- 'timeout',
- 'strategy',
- 'server'
-]
-export interface logicalRule extends generalRule {
- type: 'logical' | 'simple'
- mode: 'and' | 'or'
- rules: rule[]
-}
-
-export interface rule extends generalRule {
- inbound?: string[]
- ip_version?: 4 | 6
- network?: string[]
- auth_user?: string[]
- protocol?: string[]
- domain?: string[]
- domain_suffix?: string[]
- domain_keyword?: string[]
- domain_regex?: string[]
- source_ip_cidr?: string[]
- source_ip_is_private?: boolean
- ip_cidr?: string[]
- ip_is_private?: boolean
- source_port?: number[]
- source_port_range?: string[]
- port?: number[]
- port_range?: string[]
- process_name?: string[]
- process_path?: string[]
- package_name?: string[]
- user?: string[]
- user_id?: number[]
- clash_mode?: string
- rule_set?: string[]
- rule_set_ipcidr_match_source?: boolean
-}
-
-export interface ruleset {
- type: 'local' | 'remote'
- tag: string
- format: 'source' | 'binary'
- path?: string
- url?: string
- download_detour?: string
- update_interval?: string
-}
\ No newline at end of file
diff --git a/frontend/src/types/tls.ts b/frontend/src/types/tls.ts
deleted file mode 100644
index 4b4af2f..0000000
--- a/frontend/src/types/tls.ts
+++ /dev/null
@@ -1,123 +0,0 @@
-import { Dial } from "./dial"
-
-export interface tls {
- id: number
- name: string
- server: iTls
- client: oTls
-}
-
-export interface iTls {
- enabled?: boolean
- server_name?: string
- alpn?: string[]
- min_version?: string
- max_version?: string
- cipher_suites?: string[]
- certificate?: string[]
- certificate_path?: string
- key?: string[]
- key_path?: string
- acme?: acme
- ech?: ech
- reality?: reality
-}
-
-export interface acme {
- domain: string[]
- data_directory?: string
- default_server_name?: string
- email?: string
- provider?: string
- disable_http_challenge?: boolean
- disable_tls_alpn_challenge?: boolean
- alternative_http_port?: number
- alternative_tls_port?: number
- external_account?: {
- key_id: string
- mac_key: string
- }
- dns01_challenge?: {
- provider: string
- [key: string]: string
- }
-}
-
-export interface ech {
- enabled: boolean
- pq_signature_schemes_enabled?: boolean
- dynamic_record_sizing_disabled?: boolean
- key?: string[]
- key_path?: string
-}
-
-interface realityHanshake extends Dial {
- server: string
- server_port: number
-}
-
-export interface reality {
- enabled: boolean
- handshake: realityHanshake
- private_key: string
- short_id: string[]
- max_time_difference?: string
-}
-
-export const defaultInTls: iTls = {
- alpn: ['h3', 'h2', 'http/1.1'],
- min_version: "1.2",
- max_version: "1.3",
- cipher_suites: [],
-}
-
-export interface oTls {
- enabled?: boolean
- disable_sni?: boolean
- server_name?: string
- insecure?: boolean
- alpn?: string[]
- min_version?: string
- max_version?: string
- cipher_suites?: string[]
- certificate?: string
- certificate_path?: string
- ech?: {
- enabled: boolean
- pq_signature_schemes_enabled?: boolean
- dynamic_record_sizing_disabled?: boolean
- config?: string[],
- config_path?: string
- },
- utls?: {
- enabled: boolean
- fingerprint: string
- },
- reality?: {
- enabled: boolean
- public_key: string
- short_id: string
- }
-}
-
-export const defaultOutTls: oTls = {
- alpn: ['h3', 'h2', 'http/1.1'],
- min_version: "1.2",
- max_version: "1.3",
- cipher_suites: [],
- utls: {
- enabled: true,
- fingerprint: "chrome",
- },
- reality: {
- enabled: true,
- public_key: "",
- short_id: "",
- },
- ech: {
- enabled: true,
- pq_signature_schemes_enabled: false,
- dynamic_record_sizing_disabled: false,
- config_path: "",
- }
-}
\ No newline at end of file
diff --git a/frontend/src/types/transport.ts b/frontend/src/types/transport.ts
deleted file mode 100644
index 7805c66..0000000
--- a/frontend/src/types/transport.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-export const TrspTypes = {
- HTTP: 'http',
- WebSocket: 'ws',
- QUIC: 'quic',
- gRPC: 'grpc',
- HTTPUpgrade: "httpupgrade"
-}
-
-export type TrspType = typeof TrspTypes[keyof typeof TrspTypes]
-
-export type Transport = HTTP|WebSocket|QUIC|gRPC|HTTPUpgrade
-
-interface TransportBasics {
- type: TrspType
-}
-
-export interface HTTP extends TransportBasics {
- host?: string[]
- path?: string
- method?: string
- headers?: {}
- idle_timeout?: string
- ping_timeout?: string
-}
-
-export interface WebSocket extends TransportBasics {
- path: string
- headers?: {
- Host: string
- }
- max_early_data?: number
- early_data_header_name?: string
-}
-
-export interface QUIC extends TransportBasics {}
-
-export interface gRPC extends TransportBasics {
- service_name?: string
- idle_timeout?: string
- ping_timeout?: string
- permit_without_stream?: boolean
-}
-
-export interface HTTPUpgrade extends TransportBasics {
- host?: string
- path?: string
- headers?: {}
-}
diff --git a/frontend/src/views/Admins.vue b/frontend/src/views/Admins.vue
deleted file mode 100644
index 702970e..0000000
--- a/frontend/src/views/Admins.vue
+++ /dev/null
@@ -1,140 +0,0 @@
-
-
-
-
-
- {{ $t('admin.changes') }}
-
-
-
-
-
-
- {{ $t('admin.lastLogin') }}
-
-
-
- {{ $t('admin.date') }}
-
- {{ item.loginDate }}
-
-
-
- {{ $t('admin.time') }}
-
- {{ item.loginTime }}
-
-
-
- IP
-
- {{ item.ip }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/views/Basics.vue b/frontend/src/views/Basics.vue
deleted file mode 100644
index b1d4d45..0000000
--- a/frontend/src/views/Basics.vue
+++ /dev/null
@@ -1,312 +0,0 @@
-
-
-
-
- {{ $t('actions.save') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('basic.dns.server') }}
-
-
-
-
- {{ $t('basic.dns.server') + ' ' + (index+1) }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Cache File
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/views/Clients.vue b/frontend/src/views/Clients.vue
deleted file mode 100644
index 4d5d0ae..0000000
--- a/frontend/src/views/Clients.vue
+++ /dev/null
@@ -1,420 +0,0 @@
-
-
-
-
-
-
-
-
- {{ $t('actions.add') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('actions.del') }}
-
-
- {{ $t('actions.update') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ inbounds.find(inb => inb.id == i)?.tag }}
-
- {{ item.inbounds.length }}
-
-
-
-
- {{ item.volume == 0 ? $t('unlimited') : HumanReadable.sizeFormat(item.volume) }}
-
-
-
-
- {{ HumanReadable.remainedDays(item.expiry) }}
-
-
-
-
-
- {{ $t('online') }}
-
- -
-
-
-
-
- mdi-pencil
-
-
-
-
- mdi-delete
-
-
-
-
- {{ $t('confirm') }}
-
- {{ $t('yes') }}
- c.id == item.id)] = false">{{ $t('no') }}
-
-
-
-
- mdi-qrcode
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/views/Endpoints.vue b/frontend/src/views/Endpoints.vue
deleted file mode 100644
index a271231..0000000
--- a/frontend/src/views/Endpoints.vue
+++ /dev/null
@@ -1,166 +0,0 @@
-
-
-
-
-
- {{ $t('actions.add') }}
-
-
-
-
-
-
-
- {{ item.type }}
-
-
-
-
- {{ $t('in.addr') }}
-
- {{ item.address?.length>0 ? item.address[0] : '-' }}
-
-
-
- {{ $t('in.port') }}
-
- {{ item.listen_port>0 ? item.listen_port : '-' }}
-
-
-
- {{ $t('types.wg.peers') }}
-
- {{ item.peers.length?? '-' }}
-
-
-
- {{ $t('online') }}
-
-
- {{ $t('online') }}
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('confirm') }}
-
- {{ $t('yes') }}
- {{ $t('no') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/views/Home.vue b/frontend/src/views/Home.vue
deleted file mode 100644
index 365ad93..0000000
--- a/frontend/src/views/Home.vue
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
diff --git a/frontend/src/views/Inbounds.vue b/frontend/src/views/Inbounds.vue
deleted file mode 100644
index 1f83a84..0000000
--- a/frontend/src/views/Inbounds.vue
+++ /dev/null
@@ -1,191 +0,0 @@
-
-
-
-
-
- {{ $t('actions.add') }}
-
-
-
-
-
-
-
- {{ item.type }}
-
-
-
-
- {{ $t('in.addr') }}
-
- {{ item.listen }}
-
-
-
- {{ $t('in.port') }}
-
- {{ item.listen_port }}
-
-
-
- {{ $t('objects.tls') }}
-
- {{ item.tls_id > 0 ? $t('enable') : $t('disable') }}
-
-
-
- {{ $t('pages.clients') }}
-
-
-
- {{ u }}
-
- {{ item.users.length }}
-
- -
-
-
-
- {{ $t('online') }}
-
-
- {{ $t('online') }}
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('confirm') }}
-
- {{ $t('yes') }}
- {{ $t('no') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/views/Login.vue b/frontend/src/views/Login.vue
deleted file mode 100644
index 87e0c39..0000000
--- a/frontend/src/views/Login.vue
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/views/Outbounds.vue b/frontend/src/views/Outbounds.vue
deleted file mode 100644
index c5674d9..0000000
--- a/frontend/src/views/Outbounds.vue
+++ /dev/null
@@ -1,170 +0,0 @@
-
-
-
-
-
- {{ $t('actions.add') }}
-
-
-
-
-
-
-
- {{ item.type }}
-
-
-
-
- {{ $t('in.addr') }}
-
- {{ item.server?? '-' }}
-
-
-
- {{ $t('in.port') }}
-
- {{ item.server_port?? '-' }}
-
-
-
- {{ $t('objects.tls') }}
-
- {{ Object.hasOwn(item,'tls') ? $t(item.tls?.enabled ? 'enable' : 'disable') : '-' }}
-
-
-
- {{ $t('online') }}
-
-
- {{ $t('online') }}
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('confirm') }}
-
- {{ $t('yes') }}
- {{ $t('no') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/views/Rules.vue b/frontend/src/views/Rules.vue
deleted file mode 100644
index d760a0b..0000000
--- a/frontend/src/views/Rules.vue
+++ /dev/null
@@ -1,309 +0,0 @@
-
-
-
-
-
- {{ $t('rule.add') }}
- {{ $t('ruleset.add') }}
-
- {{ $t('actions.save') }}
-
-
-
-
- {{ $t('rule.ruleset') }}
-
-
-
-
- {{ $t('ruleset.' + item.type) }}
-
-
-
-
- {{ $t('ruleset.format') }}
-
- {{ item.format }}
-
-
-
- {{ $t('actions.update') }}
-
- {{ item.update_interval?? '-' }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('confirm') }}
-
- {{ $t('yes') }}
- {{ $t('no') }}
-
-
-
-
-
-
-
-
- {{ $t('pages.rules') }}
-
-
-
-
- {{ item.type != undefined ? $t('rule.logical') + ' (' + item.mode + ')' : $t('rule.simple') }}
-
-
-
-
- {{ $t('admin.action') }}
-
- {{ item.action }}
-
-
-
- {{ $t('objects.outbound') }}
-
- {{ item.outbound?? '-' }}
-
-
-
- {{ $t('pages.rules') }}
-
- {{ item.rules ? item.rules.length : Object.keys(item).filter(r => !actionKeys.includes(r)).length }}
-
-
-
- {{ $t('rule.invert') }}
-
- {{ $t( (item.invert?? false)? 'yes' : 'no') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('confirm') }}
-
- {{ $t('yes') }}
- {{ $t('no') }}
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/views/Settings.vue b/frontend/src/views/Settings.vue
deleted file mode 100644
index 3e1443c..0000000
--- a/frontend/src/views/Settings.vue
+++ /dev/null
@@ -1,295 +0,0 @@
-
-
-
- {{ $t('setting.interface') }}
- {{ $t('setting.sub') }}
- {{ $t('setting.jsonSub') }}
- Language
-
-
-
-
-
- {{ $t('actions.save') }}
-
-
-
-
- {{ $t('actions.restartApp') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/frontend/src/views/Tls.vue b/frontend/src/views/Tls.vue
deleted file mode 100644
index ec373b1..0000000
--- a/frontend/src/views/Tls.vue
+++ /dev/null
@@ -1,141 +0,0 @@
-
-
-
-
- {{ $t('actions.add') }}
-
-
-
-
-
-
- {{ item.server?.server_name?.length>0 ? item.server.server_name : "-" }}
-
-
-
- {{ $t('pages.inbounds') }}
-
-
-
- {{ i }}
-
- {{ tlsInbounds.length }}
-
- -
-
-
-
- ACME
-
- {{ $t(item.server?.acme == undefined ? 'no' : 'yes') }}
-
-
-
- ECH
-
- {{ $t(item.server?.ech == undefined ? 'no' : 'yes') }}
-
-
-
- Reality
-
- {{ $t(item.server?.reality == undefined ? 'no' : 'yes') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('confirm') }}
-
- {{ $t('yes') }}
- {{ $t('no') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/frontend/src/vite-env.d.ts b/frontend/src/vite-env.d.ts
deleted file mode 100644
index 323c78a..0000000
--- a/frontend/src/vite-env.d.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-///
-
-declare module '*.vue' {
- import type { DefineComponent } from 'vue'
- const component: DefineComponent<{}, {}, any>
- export default component
-}
diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json
deleted file mode 100644
index e57bb25..0000000
--- a/frontend/tsconfig.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "compilerOptions": {
- "baseUrl": ".",
- "target": "ESNext",
- "useDefineForClassFields": true,
- "module": "ESNext",
- "moduleResolution": "Node",
- "strict": true,
- "jsx": "preserve",
- "resolveJsonModule": true,
- "isolatedModules": true,
- "esModuleInterop": true,
- "lib": ["ESNext", "DOM"],
- "skipLibCheck": true,
- "noEmit": true,
- "paths": {
- "@/*": [
- "src/*"
- ]
- }
- },
- "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
- "references": [{ "path": "./tsconfig.node.json" }],
- "exclude": ["node_modules"],
-}
diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json
deleted file mode 100644
index 2634672..0000000
--- a/frontend/tsconfig.node.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "compilerOptions": {
- "composite": true,
- "module": "ESNext",
- "moduleResolution": "Node",
- "allowSyntheticDefaultImports": true
- },
- "include": ["vite.config.mts"],
- "exclude": []
-}
diff --git a/frontend/vite.config.mts b/frontend/vite.config.mts
deleted file mode 100644
index 3165ca1..0000000
--- a/frontend/vite.config.mts
+++ /dev/null
@@ -1,63 +0,0 @@
-// Plugins
-import vue from '@vitejs/plugin-vue'
-import vuetify, { transformAssetUrls } from 'vite-plugin-vuetify'
-
-// Utilities
-import { defineConfig } from 'vite'
-import { fileURLToPath, URL } from 'node:url'
-import { randomBytes } from 'crypto';
-
-function getUniqueFileName(template) {
- if (template.includes('.js') || template.includes('.css')) {
- const hash = randomBytes(8).toString('hex');
- return template.replace('[name]', hash);
- }
- return template;
-}
-
-export default defineConfig({
- base: '',
- plugins: [
- vue({
- template: { transformAssetUrls },
- }),
- vuetify({
- autoImport: true,
- styles: {
- configFile: 'src/styles/settings.scss',
- },
- })
- ],
- build: {
- manifest: false,
- outDir: 'dist',
- chunkSizeWarningLimit: 1600,
- rollupOptions: {
- output: {
- inlineDynamicImports: true,
- entryFileNames: getUniqueFileName('assets/[name].js'),
- chunkFileNames: getUniqueFileName('assets/[name].js'),
- assetFileNames: (assetInfo) => {
- if (assetInfo.name == "index.css") return getUniqueFileName('assets/[name].css');
- return 'assets/' + assetInfo.name;
- },
- },
- }
- },
- define: { 'process.env': {} },
- resolve: {
- alias: {
- '@': fileURLToPath(new URL('./src', import.meta.url)),
- },
- extensions: ['.js', '.json', '.jsx', '.mjs', '.ts', '.tsx', '.vue'],
- },
- server: {
- port: 3000,
- proxy: {
- '/app/api': {
- target: 'http://localhost:2095',
- changeOrigin: true,
- },
- },
- }
-})
diff --git a/backend/go.mod b/go.mod
similarity index 99%
rename from backend/go.mod
rename to go.mod
index efae577..b935fc1 100644
--- a/backend/go.mod
+++ b/go.mod
@@ -8,18 +8,13 @@ require (
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7
github.com/robfig/cron/v3 v3.0.1
github.com/sagernet/sing v0.6.0-beta.12
- github.com/sagernet/sing-box v1.11.0-beta.24
+ github.com/sagernet/sing-box v1.11.0-rc.1
github.com/sagernet/sing-dns v0.4.0-beta.2
golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230429144221-925a1e7659e6
gorm.io/driver/sqlite v1.5.7
gorm.io/gorm v1.25.12
)
-require (
- github.com/ebitengine/purego v0.8.1 // indirect
- google.golang.org/grpc v1.67.1 // indirect
-)
-
require (
github.com/ajg/form v1.5.1 // indirect
github.com/andybalholm/brotli v1.0.6 // indirect
@@ -30,6 +25,7 @@ require (
github.com/cloudwego/base64x v0.1.4 // indirect
github.com/cloudwego/iasm v0.2.0 // indirect
github.com/cretz/bine v0.2.0 // indirect
+ github.com/ebitengine/purego v0.8.1 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.6 // indirect
github.com/gin-contrib/sessions v1.0.1
@@ -123,6 +119,7 @@ require (
golang.org/x/tools v0.24.0 // indirect
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53 // indirect
+ google.golang.org/grpc v1.67.1 // indirect
google.golang.org/protobuf v1.35.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
lukechampine.com/blake3 v1.3.0 // indirect
diff --git a/backend/go.sum b/go.sum
similarity index 97%
rename from backend/go.sum
rename to go.sum
index 15d3f4b..12932e1 100644
--- a/backend/go.sum
+++ b/go.sum
@@ -170,14 +170,10 @@ github.com/sagernet/quic-go v0.48.2-beta.1/go.mod h1:1WgdDIVD1Gybp40JTWketeSfKA/
github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691 h1:5Th31OC6yj8byLGkEnIYp6grlXfo1QYUfiYFGjewIdc=
github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691/go.mod h1:B8lp4WkQ1PwNnrVMM6KyuFR20pU8jYBD+A4EhJovEXU=
github.com/sagernet/sing v0.2.18/go.mod h1:OL6k2F0vHmEzXz2KW19qQzu172FDgSbUSODylighuVo=
-github.com/sagernet/sing v0.6.0-beta.11 h1:jWCNlZI1Vdj8lQeBrjRZIQfNwlqMk0ZRqMJuPfTJupI=
-github.com/sagernet/sing v0.6.0-beta.11/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak=
github.com/sagernet/sing v0.6.0-beta.12 h1:2DnTJcvypK3/PM/8JjmgG8wVK48gdcpRwU98c4J/a7s=
github.com/sagernet/sing v0.6.0-beta.12/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak=
-github.com/sagernet/sing-box v1.11.0-beta.22 h1:UQrhqbUyJUZ1GvT3yNu4ANdZC8s1YdgN92jtvPd559g=
-github.com/sagernet/sing-box v1.11.0-beta.22/go.mod h1:CYFqT0KvhmGhs3hp6htI8x6DugWZgdiAde+Fyufxmek=
-github.com/sagernet/sing-box v1.11.0-beta.24 h1:6rUl8t6Cb0p9ML1eUobWgODL75c5iszxNvVABcWCivU=
-github.com/sagernet/sing-box v1.11.0-beta.24/go.mod h1:DmL1WKyrfaAEu5z88CtUeQBfELaEdUyQzLS5nzmRg8o=
+github.com/sagernet/sing-box v1.11.0-rc.1 h1:iJbMP+dcKOEbvjv0rBXkFndmJQCPAACrYmanYPPuIgk=
+github.com/sagernet/sing-box v1.11.0-rc.1/go.mod h1:DmL1WKyrfaAEu5z88CtUeQBfELaEdUyQzLS5nzmRg8o=
github.com/sagernet/sing-dns v0.4.0-beta.2 h1:HW94bUEp7K/vf5DlYz646LTZevQtJ0250jZa/UZRlbY=
github.com/sagernet/sing-dns v0.4.0-beta.2/go.mod h1:8wuFcoFkWM4vJuQyg8e97LyvDwe0/Vl7G839WLcKDs8=
github.com/sagernet/sing-mux v0.3.0-alpha.1 h1:IgNX5bJBpL41gGbp05pdDOvh/b5eUQ6cv9240+Ngipg=
diff --git a/backend/logger/logger.go b/logger/logger.go
similarity index 100%
rename from backend/logger/logger.go
rename to logger/logger.go
diff --git a/backend/main.go b/main.go
similarity index 100%
rename from backend/main.go
rename to main.go
diff --git a/backend/middleware/domainValidator.go b/middleware/domainValidator.go
similarity index 100%
rename from backend/middleware/domainValidator.go
rename to middleware/domainValidator.go
diff --git a/backend/network/auto_https_conn.go b/network/auto_https_conn.go
similarity index 100%
rename from backend/network/auto_https_conn.go
rename to network/auto_https_conn.go
diff --git a/backend/network/auto_https_listener.go b/network/auto_https_listener.go
similarity index 100%
rename from backend/network/auto_https_listener.go
rename to network/auto_https_listener.go
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..0cfbd30
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,6 @@
+{
+ "name": "s-ui",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {}
+}
diff --git a/backend/service/client.go b/service/client.go
similarity index 100%
rename from backend/service/client.go
rename to service/client.go
diff --git a/backend/service/config.go b/service/config.go
similarity index 100%
rename from backend/service/config.go
rename to service/config.go
diff --git a/backend/service/endpoints.go b/service/endpoints.go
similarity index 100%
rename from backend/service/endpoints.go
rename to service/endpoints.go
diff --git a/backend/service/inbounds.go b/service/inbounds.go
similarity index 100%
rename from backend/service/inbounds.go
rename to service/inbounds.go
diff --git a/backend/service/outbounds.go b/service/outbounds.go
similarity index 100%
rename from backend/service/outbounds.go
rename to service/outbounds.go
diff --git a/backend/service/panel.go b/service/panel.go
similarity index 100%
rename from backend/service/panel.go
rename to service/panel.go
diff --git a/backend/service/server.go b/service/server.go
similarity index 100%
rename from backend/service/server.go
rename to service/server.go
diff --git a/backend/service/setting.go b/service/setting.go
similarity index 100%
rename from backend/service/setting.go
rename to service/setting.go
diff --git a/backend/service/stats.go b/service/stats.go
similarity index 100%
rename from backend/service/stats.go
rename to service/stats.go
diff --git a/backend/service/tls.go b/service/tls.go
similarity index 100%
rename from backend/service/tls.go
rename to service/tls.go
diff --git a/backend/service/user.go b/service/user.go
similarity index 100%
rename from backend/service/user.go
rename to service/user.go
diff --git a/backend/service/warp.go b/service/warp.go
similarity index 100%
rename from backend/service/warp.go
rename to service/warp.go
diff --git a/backend/sub/jsonService.go b/sub/jsonService.go
similarity index 100%
rename from backend/sub/jsonService.go
rename to sub/jsonService.go
diff --git a/backend/sub/linkService.go b/sub/linkService.go
similarity index 100%
rename from backend/sub/linkService.go
rename to sub/linkService.go
diff --git a/backend/sub/sub.go b/sub/sub.go
similarity index 100%
rename from backend/sub/sub.go
rename to sub/sub.go
diff --git a/backend/sub/subHandler.go b/sub/subHandler.go
similarity index 100%
rename from backend/sub/subHandler.go
rename to sub/subHandler.go
diff --git a/backend/sub/subService.go b/sub/subService.go
similarity index 100%
rename from backend/sub/subService.go
rename to sub/subService.go
diff --git a/backend/util/base64.go b/util/base64.go
similarity index 100%
rename from backend/util/base64.go
rename to util/base64.go
diff --git a/backend/util/common/err.go b/util/common/err.go
similarity index 100%
rename from backend/util/common/err.go
rename to util/common/err.go
diff --git a/backend/util/common/random.go b/util/common/random.go
similarity index 100%
rename from backend/util/common/random.go
rename to util/common/random.go
diff --git a/backend/util/genLink.go b/util/genLink.go
similarity index 100%
rename from backend/util/genLink.go
rename to util/genLink.go
diff --git a/backend/util/linkToJson.go b/util/linkToJson.go
similarity index 100%
rename from backend/util/linkToJson.go
rename to util/linkToJson.go
diff --git a/backend/util/outJson.go b/util/outJson.go
similarity index 100%
rename from backend/util/outJson.go
rename to util/outJson.go
diff --git a/backend/web/web.go b/web/web.go
similarity index 100%
rename from backend/web/web.go
rename to web/web.go