[cleanup] 删除 server-status-web 相关文件以清理项目

This commit is contained in:
远野千束 2025-01-03 21:21:41 +08:00
parent 717f630eb7
commit 952ef1d136
55 changed files with 0 additions and 3030 deletions

View File

View File

@ -1 +0,0 @@
VITE_API_ROOT=https://status.liteyuki.icu

View File

@ -1 +0,0 @@
VITE_API_ROOT=""

View File

@ -1,24 +0,0 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

View File

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2024 Snowykami
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -1,3 +0,0 @@
# 服务器监控面板前端源码
![]

View File

@ -1,15 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<link rel="icon" type="image/svg+xml" href="/icon.svg"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Server Status</title>
<link href="https://fonts.font.im/css?family=Josefin+Sans:400,400i,600,600i,700,700i" rel="stylesheet">
<link href="https://fonts.font.im/css?family=Quattrocento+Sans:400,400i,700,700i" rel="stylesheet">
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>

View File

@ -1,727 +0,0 @@
{
"name": "server-status",
"version": "0.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "server-status",
"version": "0.0.0",
"dependencies": {
"echarts": "^5.5.1",
"html2canvas": "^1.4.1",
"pnpm": "^9.12.0",
"vue": "^3.4.37",
"vue-router": "^4.4.5"
},
"devDependencies": {
"@types/node": "^22.7.4",
"@vitejs/plugin-vue": "^5.1.2",
"sax": "^1.4.1",
"typescript": "^5.5.3",
"vite": "^5.4.1",
"vue-tsc": "^2.0.29"
}
},
"node_modules/@babel/helper-string-parser": {
"version": "7.25.7",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
"version": "7.25.7",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
"version": "7.25.7",
"license": "MIT",
"dependencies": {
"@babel/types": "^7.25.7"
},
"bin": {
"parser": "bin/babel-parser.js"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@babel/types": {
"version": "7.25.7",
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.25.7",
"@babel/helper-validator-identifier": "^7.25.7",
"to-fast-properties": "^2.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@esbuild/linux-x64": {
"version": "0.21.5",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.5.0",
"license": "MIT"
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
"version": "4.24.0",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@types/estree": {
"version": "1.0.6",
"dev": true,
"license": "MIT"
},
"node_modules/@types/node": {
"version": "22.7.4",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.4.tgz",
"integrity": "sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==",
"dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~6.19.2"
}
},
"node_modules/@vitejs/plugin-vue": {
"version": "5.1.4",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.4.tgz",
"integrity": "sha512-N2XSI2n3sQqp5w7Y/AN/L2XDjBIRGqXko+eDp42sydYSBeJuSm5a1sLf8zakmo8u7tA8NmBgoDLA1HeOESjp9A==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^18.0.0 || >=20.0.0"
},
"peerDependencies": {
"vite": "^5.0.0",
"vue": "^3.2.25"
}
},
"node_modules/@volar/language-core": {
"version": "2.4.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@volar/source-map": "2.4.5"
}
},
"node_modules/@volar/source-map": {
"version": "2.4.5",
"dev": true,
"license": "MIT"
},
"node_modules/@volar/typescript": {
"version": "2.4.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@volar/language-core": "2.4.5",
"path-browserify": "^1.0.1",
"vscode-uri": "^3.0.8"
}
},
"node_modules/@vue/compiler-core": {
"version": "3.5.11",
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.25.3",
"@vue/shared": "3.5.11",
"entities": "^4.5.0",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.0"
}
},
"node_modules/@vue/compiler-dom": {
"version": "3.5.11",
"license": "MIT",
"dependencies": {
"@vue/compiler-core": "3.5.11",
"@vue/shared": "3.5.11"
}
},
"node_modules/@vue/compiler-sfc": {
"version": "3.5.11",
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.25.3",
"@vue/compiler-core": "3.5.11",
"@vue/compiler-dom": "3.5.11",
"@vue/compiler-ssr": "3.5.11",
"@vue/shared": "3.5.11",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.11",
"postcss": "^8.4.47",
"source-map-js": "^1.2.0"
}
},
"node_modules/@vue/compiler-ssr": {
"version": "3.5.11",
"license": "MIT",
"dependencies": {
"@vue/compiler-dom": "3.5.11",
"@vue/shared": "3.5.11"
}
},
"node_modules/@vue/compiler-vue2": {
"version": "2.7.16",
"dev": true,
"license": "MIT",
"dependencies": {
"de-indent": "^1.0.2",
"he": "^1.2.0"
}
},
"node_modules/@vue/devtools-api": {
"version": "6.6.4",
"license": "MIT"
},
"node_modules/@vue/language-core": {
"version": "2.1.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@volar/language-core": "~2.4.1",
"@vue/compiler-dom": "^3.4.0",
"@vue/compiler-vue2": "^2.7.16",
"@vue/shared": "^3.4.0",
"computeds": "^0.0.1",
"minimatch": "^9.0.3",
"muggle-string": "^0.4.1",
"path-browserify": "^1.0.1"
},
"peerDependencies": {
"typescript": "*"
},
"peerDependenciesMeta": {
"typescript": {
"optional": true
}
}
},
"node_modules/@vue/reactivity": {
"version": "3.5.11",
"license": "MIT",
"dependencies": {
"@vue/shared": "3.5.11"
}
},
"node_modules/@vue/runtime-core": {
"version": "3.5.11",
"license": "MIT",
"dependencies": {
"@vue/reactivity": "3.5.11",
"@vue/shared": "3.5.11"
}
},
"node_modules/@vue/runtime-dom": {
"version": "3.5.11",
"license": "MIT",
"dependencies": {
"@vue/reactivity": "3.5.11",
"@vue/runtime-core": "3.5.11",
"@vue/shared": "3.5.11",
"csstype": "^3.1.3"
}
},
"node_modules/@vue/server-renderer": {
"version": "3.5.11",
"license": "MIT",
"dependencies": {
"@vue/compiler-ssr": "3.5.11",
"@vue/shared": "3.5.11"
},
"peerDependencies": {
"vue": "3.5.11"
}
},
"node_modules/@vue/shared": {
"version": "3.5.11",
"license": "MIT"
},
"node_modules/balanced-match": {
"version": "1.0.2",
"dev": true,
"license": "MIT"
},
"node_modules/base64-arraybuffer": {
"version": "1.0.2",
"license": "MIT",
"engines": {
"node": ">= 0.6.0"
}
},
"node_modules/brace-expansion": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/computeds": {
"version": "0.0.1",
"dev": true,
"license": "MIT"
},
"node_modules/css-line-break": {
"version": "2.1.0",
"license": "MIT",
"dependencies": {
"utrie": "^1.0.2"
}
},
"node_modules/csstype": {
"version": "3.1.3",
"license": "MIT"
},
"node_modules/de-indent": {
"version": "1.0.2",
"dev": true,
"license": "MIT"
},
"node_modules/echarts": {
"version": "5.5.1",
"resolved": "https://registry.npmjs.org/echarts/-/echarts-5.5.1.tgz",
"integrity": "sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==",
"license": "Apache-2.0",
"dependencies": {
"tslib": "2.3.0",
"zrender": "5.6.0"
}
},
"node_modules/entities": {
"version": "4.5.0",
"license": "BSD-2-Clause",
"engines": {
"node": ">=0.12"
},
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/esbuild": {
"version": "0.21.5",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"bin": {
"esbuild": "bin/esbuild"
},
"engines": {
"node": ">=12"
},
"optionalDependencies": {
"@esbuild/aix-ppc64": "0.21.5",
"@esbuild/android-arm": "0.21.5",
"@esbuild/android-arm64": "0.21.5",
"@esbuild/android-x64": "0.21.5",
"@esbuild/darwin-arm64": "0.21.5",
"@esbuild/darwin-x64": "0.21.5",
"@esbuild/freebsd-arm64": "0.21.5",
"@esbuild/freebsd-x64": "0.21.5",
"@esbuild/linux-arm": "0.21.5",
"@esbuild/linux-arm64": "0.21.5",
"@esbuild/linux-ia32": "0.21.5",
"@esbuild/linux-loong64": "0.21.5",
"@esbuild/linux-mips64el": "0.21.5",
"@esbuild/linux-ppc64": "0.21.5",
"@esbuild/linux-riscv64": "0.21.5",
"@esbuild/linux-s390x": "0.21.5",
"@esbuild/linux-x64": "0.21.5",
"@esbuild/netbsd-x64": "0.21.5",
"@esbuild/openbsd-x64": "0.21.5",
"@esbuild/sunos-x64": "0.21.5",
"@esbuild/win32-arm64": "0.21.5",
"@esbuild/win32-ia32": "0.21.5",
"@esbuild/win32-x64": "0.21.5"
}
},
"node_modules/estree-walker": {
"version": "2.0.2",
"license": "MIT"
},
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/he": {
"version": "1.2.0",
"dev": true,
"license": "MIT",
"bin": {
"he": "bin/he"
}
},
"node_modules/html2canvas": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz",
"integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
"license": "MIT",
"dependencies": {
"css-line-break": "^2.1.0",
"text-segmentation": "^1.0.3"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/magic-string": {
"version": "0.30.11",
"license": "MIT",
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.5.0"
}
},
"node_modules/minimatch": {
"version": "9.0.5",
"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/muggle-string": {
"version": "0.4.1",
"dev": true,
"license": "MIT"
},
"node_modules/nanoid": {
"version": "3.3.7",
"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/path-browserify": {
"version": "1.0.1",
"dev": true,
"license": "MIT"
},
"node_modules/picocolors": {
"version": "1.1.0",
"license": "ISC"
},
"node_modules/pnpm": {
"version": "9.12.0",
"resolved": "https://registry.npmjs.org/pnpm/-/pnpm-9.12.0.tgz",
"integrity": "sha512-Sr9yUITXvLr71yi/x77mHy95H5d/2HVCs1edyyNQTRcNRjN5ReTGZIXNEtWIoMDlcO2cR358zdhQfPBfP5Lqyg==",
"license": "MIT",
"bin": {
"pnpm": "bin/pnpm.cjs",
"pnpx": "bin/pnpx.cjs"
},
"engines": {
"node": ">=18.12"
},
"funding": {
"url": "https://opencollective.com/pnpm"
}
},
"node_modules/postcss": {
"version": "8.4.47",
"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.7",
"picocolors": "^1.1.0",
"source-map-js": "^1.2.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
"node_modules/rollup": {
"version": "4.24.0",
"dev": 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.24.0",
"@rollup/rollup-android-arm64": "4.24.0",
"@rollup/rollup-darwin-arm64": "4.24.0",
"@rollup/rollup-darwin-x64": "4.24.0",
"@rollup/rollup-linux-arm-gnueabihf": "4.24.0",
"@rollup/rollup-linux-arm-musleabihf": "4.24.0",
"@rollup/rollup-linux-arm64-gnu": "4.24.0",
"@rollup/rollup-linux-arm64-musl": "4.24.0",
"@rollup/rollup-linux-powerpc64le-gnu": "4.24.0",
"@rollup/rollup-linux-riscv64-gnu": "4.24.0",
"@rollup/rollup-linux-s390x-gnu": "4.24.0",
"@rollup/rollup-linux-x64-gnu": "4.24.0",
"@rollup/rollup-linux-x64-musl": "4.24.0",
"@rollup/rollup-win32-arm64-msvc": "4.24.0",
"@rollup/rollup-win32-ia32-msvc": "4.24.0",
"@rollup/rollup-win32-x64-msvc": "4.24.0",
"fsevents": "~2.3.2"
}
},
"node_modules/sax": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
"integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
"dev": true,
"license": "ISC"
},
"node_modules/semver": {
"version": "7.6.3",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/source-map-js": {
"version": "1.2.1",
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/text-segmentation": {
"version": "1.0.3",
"license": "MIT",
"dependencies": {
"utrie": "^1.0.2"
}
},
"node_modules/to-fast-properties": {
"version": "2.0.0",
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/tslib": {
"version": "2.3.0",
"license": "0BSD"
},
"node_modules/typescript": {
"version": "5.6.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
"integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
"devOptional": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=14.17"
}
},
"node_modules/undici-types": {
"version": "6.19.8",
"dev": true,
"license": "MIT"
},
"node_modules/utrie": {
"version": "1.0.2",
"license": "MIT",
"dependencies": {
"base64-arraybuffer": "^1.0.2"
}
},
"node_modules/vite": {
"version": "5.4.8",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz",
"integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"esbuild": "^0.21.3",
"postcss": "^8.4.43",
"rollup": "^4.20.0"
},
"bin": {
"vite": "bin/vite.js"
},
"engines": {
"node": "^18.0.0 || >=20.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",
"less": "*",
"lightningcss": "^1.21.0",
"sass": "*",
"sass-embedded": "*",
"stylus": "*",
"sugarss": "*",
"terser": "^5.4.0"
},
"peerDependenciesMeta": {
"@types/node": {
"optional": true
},
"less": {
"optional": true
},
"lightningcss": {
"optional": true
},
"sass": {
"optional": true
},
"sass-embedded": {
"optional": true
},
"stylus": {
"optional": true
},
"sugarss": {
"optional": true
},
"terser": {
"optional": true
}
}
},
"node_modules/vscode-uri": {
"version": "3.0.8",
"dev": true,
"license": "MIT"
},
"node_modules/vue": {
"version": "3.5.11",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.11.tgz",
"integrity": "sha512-/8Wurrd9J3lb72FTQS7gRMNQD4nztTtKPmuDuPuhqXmmpD6+skVjAeahNpVzsuky6Sy9gy7wn8UadqPtt9SQIg==",
"license": "MIT",
"dependencies": {
"@vue/compiler-dom": "3.5.11",
"@vue/compiler-sfc": "3.5.11",
"@vue/runtime-dom": "3.5.11",
"@vue/server-renderer": "3.5.11",
"@vue/shared": "3.5.11"
},
"peerDependencies": {
"typescript": "*"
},
"peerDependenciesMeta": {
"typescript": {
"optional": true
}
}
},
"node_modules/vue-router": {
"version": "4.4.5",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.4.5.tgz",
"integrity": "sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q==",
"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.1.6",
"resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.1.6.tgz",
"integrity": "sha512-f98dyZp5FOukcYmbFpuSCJ4Z0vHSOSmxGttZJCsFeX0M4w/Rsq0s4uKXjcSRsZqsRgQa6z7SfuO+y0HVICE57Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"@volar/typescript": "~2.4.1",
"@vue/language-core": "2.1.6",
"semver": "^7.5.4"
},
"bin": {
"vue-tsc": "bin/vue-tsc.js"
},
"peerDependencies": {
"typescript": ">=5.0.0"
}
},
"node_modules/zrender": {
"version": "5.6.0",
"license": "BSD-3-Clause",
"dependencies": {
"tslib": "2.3.0"
}
}
}
}

View File

@ -1,26 +0,0 @@
{
"name": "server-status",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite --mode dev --host",
"build": "vue-tsc -b && vite build --mode prod",
"preview": "vite preview"
},
"dependencies": {
"echarts": "^5.5.1",
"html2canvas": "^1.4.1",
"pnpm": "^9.12.0",
"vue": "^3.4.37",
"vue-router": "^4.4.5"
},
"devDependencies": {
"@types/node": "^22.7.4",
"@vitejs/plugin-vue": "^5.1.2",
"sax": "^1.4.1",
"typescript": "^5.5.3",
"vite": "^5.4.1",
"vue-tsc": "^2.0.29"
}
}

View File

@ -1,833 +0,0 @@
lockfileVersion: '6.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
dependencies:
echarts:
specifier: ^5.5.1
version: 5.5.1
html2canvas:
specifier: ^1.4.1
version: 1.4.1
vue:
specifier: ^3.4.37
version: 3.5.10(typescript@5.6.2)
vue-router:
specifier: ^4.4.5
version: 4.4.5(vue@3.5.10)
devDependencies:
'@types/node':
specifier: ^22.7.4
version: 22.7.4
'@vitejs/plugin-vue':
specifier: ^5.1.2
version: 5.1.4(vite@5.4.8)(vue@3.5.10)
sax:
specifier: ^1.4.1
version: 1.4.1
typescript:
specifier: ^5.5.3
version: 5.6.2
vite:
specifier: ^5.4.1
version: 5.4.8(@types/node@22.7.4)
vue-tsc:
specifier: ^2.0.29
version: 2.1.6(typescript@5.6.2)
packages:
/@babel/helper-string-parser@7.24.8:
resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==}
engines: {node: '>=6.9.0'}
/@babel/helper-validator-identifier@7.24.7:
resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==}
engines: {node: '>=6.9.0'}
/@babel/parser@7.25.6:
resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==}
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
'@babel/types': 7.25.6
/@babel/types@7.25.6:
resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-string-parser': 7.24.8
'@babel/helper-validator-identifier': 7.24.7
to-fast-properties: 2.0.0
/@esbuild/aix-ppc64@0.21.5:
resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [aix]
requiresBuild: true
dev: true
optional: true
/@esbuild/android-arm64@0.21.5:
resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
requiresBuild: true
dev: true
optional: true
/@esbuild/android-arm@0.21.5:
resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
requiresBuild: true
dev: true
optional: true
/@esbuild/android-x64@0.21.5:
resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
requiresBuild: true
dev: true
optional: true
/@esbuild/darwin-arm64@0.21.5:
resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@esbuild/darwin-x64@0.21.5:
resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@esbuild/freebsd-arm64@0.21.5:
resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
requiresBuild: true
dev: true
optional: true
/@esbuild/freebsd-x64@0.21.5:
resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-arm64@0.21.5:
resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-arm@0.21.5:
resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-ia32@0.21.5:
resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-loong64@0.21.5:
resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-mips64el@0.21.5:
resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-ppc64@0.21.5:
resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-riscv64@0.21.5:
resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-s390x@0.21.5:
resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-x64@0.21.5:
resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/netbsd-x64@0.21.5:
resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
requiresBuild: true
dev: true
optional: true
/@esbuild/openbsd-x64@0.21.5:
resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
requiresBuild: true
dev: true
optional: true
/@esbuild/sunos-x64@0.21.5:
resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
requiresBuild: true
dev: true
optional: true
/@esbuild/win32-arm64@0.21.5:
resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@esbuild/win32-ia32@0.21.5:
resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@esbuild/win32-x64@0.21.5:
resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@jridgewell/sourcemap-codec@1.5.0:
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
/@rollup/rollup-android-arm-eabi@4.23.0:
resolution: {integrity: sha512-8OR+Ok3SGEMsAZispLx8jruuXw0HVF16k+ub2eNXKHDmdxL4cf9NlNpAzhlOhNyXzKDEJuFeq0nZm+XlNb1IFw==}
cpu: [arm]
os: [android]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-android-arm64@4.23.0:
resolution: {integrity: sha512-rEFtX1nP8gqmLmPZsXRMoLVNB5JBwOzIAk/XAcEPuKrPa2nPJ+DuGGpfQUR0XjRm8KjHfTZLpWbKXkA5BoFL3w==}
cpu: [arm64]
os: [android]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-darwin-arm64@4.23.0:
resolution: {integrity: sha512-ZbqlMkJRMMPeapfaU4drYHns7Q5MIxjM/QeOO62qQZGPh9XWziap+NF9fsqPHT0KzEL6HaPspC7sOwpgyA3J9g==}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-darwin-x64@4.23.0:
resolution: {integrity: sha512-PfmgQp78xx5rBCgn2oYPQ1rQTtOaQCna0kRaBlc5w7RlA3TDGGo7m3XaptgitUZ54US9915i7KeVPHoy3/W8tA==}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-arm-gnueabihf@4.23.0:
resolution: {integrity: sha512-WAeZfAAPus56eQgBioezXRRzArAjWJGjNo/M+BHZygUcs9EePIuGI1Wfc6U/Ki+tMW17FFGvhCfYnfcKPh18SA==}
cpu: [arm]
os: [linux]
libc: [glibc]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-arm-musleabihf@4.23.0:
resolution: {integrity: sha512-v7PGcp1O5XKZxKX8phTXtmJDVpE20Ub1eF6w9iMmI3qrrPak6yR9/5eeq7ziLMrMTjppkkskXyxnmm00HdtXjA==}
cpu: [arm]
os: [linux]
libc: [musl]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-arm64-gnu@4.23.0:
resolution: {integrity: sha512-nAbWsDZ9UkU6xQiXEyXBNHAKbzSAi95H3gTStJq9UGiS1v+YVXwRHcQOQEF/3CHuhX5BVhShKoeOf6Q/1M+Zhg==}
cpu: [arm64]
os: [linux]
libc: [glibc]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-arm64-musl@4.23.0:
resolution: {integrity: sha512-5QT/Di5FbGNPaVw8hHO1wETunwkPuZBIu6W+5GNArlKHD9fkMHy7vS8zGHJk38oObXfWdsuLMogD4sBySLJ54g==}
cpu: [arm64]
os: [linux]
libc: [musl]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-powerpc64le-gnu@4.23.0:
resolution: {integrity: sha512-Sefl6vPyn5axzCsO13r1sHLcmPuiSOrKIImnq34CBurntcJ+lkQgAaTt/9JkgGmaZJ+OkaHmAJl4Bfd0DmdtOQ==}
cpu: [ppc64]
os: [linux]
libc: [glibc]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-riscv64-gnu@4.23.0:
resolution: {integrity: sha512-o4QI2KU/QbP7ZExMse6ULotdV3oJUYMrdx3rBZCgUF3ur3gJPfe8Fuasn6tia16c5kZBBw0aTmaUygad6VB/hQ==}
cpu: [riscv64]
os: [linux]
libc: [glibc]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-s390x-gnu@4.23.0:
resolution: {integrity: sha512-+bxqx+V/D4FGrpXzPGKp/SEZIZ8cIW3K7wOtcJAoCrmXvzRtmdUhYNbgd+RztLzfDEfA2WtKj5F4tcbNPuqgeg==}
cpu: [s390x]
os: [linux]
libc: [glibc]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-x64-gnu@4.23.0:
resolution: {integrity: sha512-I/eXsdVoCKtSgK9OwyQKPAfricWKUMNCwJKtatRYMmDo5N859tbO3UsBw5kT3dU1n6ZcM1JDzPRSGhAUkxfLxw==}
cpu: [x64]
os: [linux]
libc: [glibc]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-x64-musl@4.23.0:
resolution: {integrity: sha512-4ZoDZy5ShLbbe1KPSafbFh1vbl0asTVfkABC7eWqIs01+66ncM82YJxV2VtV3YVJTqq2P8HMx3DCoRSWB/N3rw==}
cpu: [x64]
os: [linux]
libc: [musl]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-win32-arm64-msvc@4.23.0:
resolution: {integrity: sha512-+5Ky8dhft4STaOEbZu3/NU4QIyYssKO+r1cD3FzuusA0vO5gso15on7qGzKdNXnc1gOrsgCqZjRw1w+zL4y4hQ==}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-win32-ia32-msvc@4.23.0:
resolution: {integrity: sha512-0SPJk4cPZQhq9qA1UhIRumSE3+JJIBBjtlGl5PNC///BoaByckNZd53rOYD0glpTkYFBQSt7AkMeLVPfx65+BQ==}
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-win32-x64-msvc@4.23.0:
resolution: {integrity: sha512-lqCK5GQC8fNo0+JvTSxcG7YB1UKYp8yrNLhsArlvPWN+16ovSZgoehlVHg6X0sSWPUkpjRBR5TuR12ZugowZ4g==}
cpu: [x64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@types/estree@1.0.6:
resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
dev: true
/@types/node@22.7.4:
resolution: {integrity: sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==}
dependencies:
undici-types: 6.19.8
dev: true
/@vitejs/plugin-vue@5.1.4(vite@5.4.8)(vue@3.5.10):
resolution: {integrity: sha512-N2XSI2n3sQqp5w7Y/AN/L2XDjBIRGqXko+eDp42sydYSBeJuSm5a1sLf8zakmo8u7tA8NmBgoDLA1HeOESjp9A==}
engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies:
vite: ^5.0.0
vue: ^3.2.25
dependencies:
vite: 5.4.8(@types/node@22.7.4)
vue: 3.5.10(typescript@5.6.2)
dev: true
/@volar/language-core@2.4.5:
resolution: {integrity: sha512-F4tA0DCO5Q1F5mScHmca0umsi2ufKULAnMOVBfMsZdT4myhVl4WdKRwCaKcfOkIEuyrAVvtq1ESBdZ+rSyLVww==}
dependencies:
'@volar/source-map': 2.4.5
dev: true
/@volar/source-map@2.4.5:
resolution: {integrity: sha512-varwD7RaKE2J/Z+Zu6j3mNNJbNT394qIxXwdvz/4ao/vxOfyClZpSDtLKkwWmecinkOVos5+PWkWraelfMLfpw==}
dev: true
/@volar/typescript@2.4.5:
resolution: {integrity: sha512-mcT1mHvLljAEtHviVcBuOyAwwMKz1ibXTi5uYtP/pf4XxoAzpdkQ+Br2IC0NPCvLCbjPZmbf3I0udndkfB1CDg==}
dependencies:
'@volar/language-core': 2.4.5
path-browserify: 1.0.1
vscode-uri: 3.0.8
dev: true
/@vue/compiler-core@3.5.10:
resolution: {integrity: sha512-iXWlk+Cg/ag7gLvY0SfVucU8Kh2CjysYZjhhP70w9qI4MvSox4frrP+vDGvtQuzIcgD8+sxM6lZvCtdxGunTAA==}
dependencies:
'@babel/parser': 7.25.6
'@vue/shared': 3.5.10
entities: 4.5.0
estree-walker: 2.0.2
source-map-js: 1.2.1
/@vue/compiler-dom@3.5.10:
resolution: {integrity: sha512-DyxHC6qPcktwYGKOIy3XqnHRrrXyWR2u91AjP+nLkADko380srsC2DC3s7Y1Rk6YfOlxOlvEQKa9XXmLI+W4ZA==}
dependencies:
'@vue/compiler-core': 3.5.10
'@vue/shared': 3.5.10
/@vue/compiler-sfc@3.5.10:
resolution: {integrity: sha512-to8E1BgpakV7224ZCm8gz1ZRSyjNCAWEplwFMWKlzCdP9DkMKhRRwt0WkCjY7jkzi/Vz3xgbpeig5Pnbly4Tow==}
dependencies:
'@babel/parser': 7.25.6
'@vue/compiler-core': 3.5.10
'@vue/compiler-dom': 3.5.10
'@vue/compiler-ssr': 3.5.10
'@vue/shared': 3.5.10
estree-walker: 2.0.2
magic-string: 0.30.11
postcss: 8.4.47
source-map-js: 1.2.1
/@vue/compiler-ssr@3.5.10:
resolution: {integrity: sha512-hxP4Y3KImqdtyUKXDRSxKSRkSm1H9fCvhojEYrnaoWhE4w/y8vwWhnosJoPPe2AXm5sU7CSbYYAgkt2ZPhDz+A==}
dependencies:
'@vue/compiler-dom': 3.5.10
'@vue/shared': 3.5.10
/@vue/compiler-vue2@2.7.16:
resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==}
dependencies:
de-indent: 1.0.2
he: 1.2.0
dev: true
/@vue/devtools-api@6.6.4:
resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
dev: false
/@vue/language-core@2.1.6(typescript@5.6.2):
resolution: {integrity: sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
'@volar/language-core': 2.4.5
'@vue/compiler-dom': 3.5.10
'@vue/compiler-vue2': 2.7.16
'@vue/shared': 3.5.10
computeds: 0.0.1
minimatch: 9.0.5
muggle-string: 0.4.1
path-browserify: 1.0.1
typescript: 5.6.2
dev: true
/@vue/reactivity@3.5.10:
resolution: {integrity: sha512-kW08v06F6xPSHhid9DJ9YjOGmwNDOsJJQk0ax21wKaUYzzuJGEuoKNU2Ujux8FLMrP7CFJJKsHhXN9l2WOVi2g==}
dependencies:
'@vue/shared': 3.5.10
/@vue/runtime-core@3.5.10:
resolution: {integrity: sha512-9Q86I5Qq3swSkFfzrZ+iqEy7Vla325M7S7xc1NwKnRm/qoi1Dauz0rT6mTMmscqx4qz0EDJ1wjB+A36k7rl8mA==}
dependencies:
'@vue/reactivity': 3.5.10
'@vue/shared': 3.5.10
/@vue/runtime-dom@3.5.10:
resolution: {integrity: sha512-t3x7ht5qF8ZRi1H4fZqFzyY2j+GTMTDxRheT+i8M9Ph0oepUxoadmbwlFwMoW7RYCpNQLpP2Yx3feKs+fyBdpA==}
dependencies:
'@vue/reactivity': 3.5.10
'@vue/runtime-core': 3.5.10
'@vue/shared': 3.5.10
csstype: 3.1.3
/@vue/server-renderer@3.5.10(vue@3.5.10):
resolution: {integrity: sha512-IVE97tt2kGKwHNq9yVO0xdh1IvYfZCShvDSy46JIh5OQxP1/EXSpoDqetVmyIzL7CYOWnnmMkVqd7YK2QSWkdw==}
peerDependencies:
vue: 3.5.10
dependencies:
'@vue/compiler-ssr': 3.5.10
'@vue/shared': 3.5.10
vue: 3.5.10(typescript@5.6.2)
/@vue/shared@3.5.10:
resolution: {integrity: sha512-VkkBhU97Ki+XJ0xvl4C9YJsIZ2uIlQ7HqPpZOS3m9VCvmROPaChZU6DexdMJqvz9tbgG+4EtFVrSuailUq5KGQ==}
/balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
dev: true
/base64-arraybuffer@1.0.2:
resolution: {integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==}
engines: {node: '>= 0.6.0'}
dev: false
/brace-expansion@2.0.1:
resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
dependencies:
balanced-match: 1.0.2
dev: true
/computeds@0.0.1:
resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==}
dev: true
/css-line-break@2.1.0:
resolution: {integrity: sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==}
dependencies:
utrie: 1.0.2
dev: false
/csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
/de-indent@1.0.2:
resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
dev: true
/echarts@5.5.1:
resolution: {integrity: sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==}
dependencies:
tslib: 2.3.0
zrender: 5.6.0
dev: false
/entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
/esbuild@0.21.5:
resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
optionalDependencies:
'@esbuild/aix-ppc64': 0.21.5
'@esbuild/android-arm': 0.21.5
'@esbuild/android-arm64': 0.21.5
'@esbuild/android-x64': 0.21.5
'@esbuild/darwin-arm64': 0.21.5
'@esbuild/darwin-x64': 0.21.5
'@esbuild/freebsd-arm64': 0.21.5
'@esbuild/freebsd-x64': 0.21.5
'@esbuild/linux-arm': 0.21.5
'@esbuild/linux-arm64': 0.21.5
'@esbuild/linux-ia32': 0.21.5
'@esbuild/linux-loong64': 0.21.5
'@esbuild/linux-mips64el': 0.21.5
'@esbuild/linux-ppc64': 0.21.5
'@esbuild/linux-riscv64': 0.21.5
'@esbuild/linux-s390x': 0.21.5
'@esbuild/linux-x64': 0.21.5
'@esbuild/netbsd-x64': 0.21.5
'@esbuild/openbsd-x64': 0.21.5
'@esbuild/sunos-x64': 0.21.5
'@esbuild/win32-arm64': 0.21.5
'@esbuild/win32-ia32': 0.21.5
'@esbuild/win32-x64': 0.21.5
dev: true
/estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
/fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
requiresBuild: true
dev: true
optional: true
/he@1.2.0:
resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
hasBin: true
dev: true
/html2canvas@1.4.1:
resolution: {integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==}
engines: {node: '>=8.0.0'}
dependencies:
css-line-break: 2.1.0
text-segmentation: 1.0.3
dev: false
/magic-string@0.30.11:
resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==}
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
/minimatch@9.0.5:
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
engines: {node: '>=16 || 14 >=14.17'}
dependencies:
brace-expansion: 2.0.1
dev: true
/muggle-string@0.4.1:
resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==}
dev: true
/nanoid@3.3.7:
resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
/path-browserify@1.0.1:
resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
dev: true
/picocolors@1.1.0:
resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==}
/postcss@8.4.47:
resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==}
engines: {node: ^10 || ^12 || >=14}
dependencies:
nanoid: 3.3.7
picocolors: 1.1.0
source-map-js: 1.2.1
/rollup@4.23.0:
resolution: {integrity: sha512-vXB4IT9/KLDrS2WRXmY22sVB2wTsTwkpxjB8Q3mnakTENcYw3FRmfdYDy/acNmls+lHmDazgrRjK/yQ6hQAtwA==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
dependencies:
'@types/estree': 1.0.6
optionalDependencies:
'@rollup/rollup-android-arm-eabi': 4.23.0
'@rollup/rollup-android-arm64': 4.23.0
'@rollup/rollup-darwin-arm64': 4.23.0
'@rollup/rollup-darwin-x64': 4.23.0
'@rollup/rollup-linux-arm-gnueabihf': 4.23.0
'@rollup/rollup-linux-arm-musleabihf': 4.23.0
'@rollup/rollup-linux-arm64-gnu': 4.23.0
'@rollup/rollup-linux-arm64-musl': 4.23.0
'@rollup/rollup-linux-powerpc64le-gnu': 4.23.0
'@rollup/rollup-linux-riscv64-gnu': 4.23.0
'@rollup/rollup-linux-s390x-gnu': 4.23.0
'@rollup/rollup-linux-x64-gnu': 4.23.0
'@rollup/rollup-linux-x64-musl': 4.23.0
'@rollup/rollup-win32-arm64-msvc': 4.23.0
'@rollup/rollup-win32-ia32-msvc': 4.23.0
'@rollup/rollup-win32-x64-msvc': 4.23.0
fsevents: 2.3.3
dev: true
/sax@1.4.1:
resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==}
dev: true
/semver@7.6.3:
resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
engines: {node: '>=10'}
hasBin: true
dev: true
/source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
/text-segmentation@1.0.3:
resolution: {integrity: sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==}
dependencies:
utrie: 1.0.2
dev: false
/to-fast-properties@2.0.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
engines: {node: '>=4'}
/tslib@2.3.0:
resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
dev: false
/typescript@5.6.2:
resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==}
engines: {node: '>=14.17'}
hasBin: true
/undici-types@6.19.8:
resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
dev: true
/utrie@1.0.2:
resolution: {integrity: sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==}
dependencies:
base64-arraybuffer: 1.0.2
dev: false
/vite@5.4.8(@types/node@22.7.4):
resolution: {integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
'@types/node': ^18.0.0 || >=20.0.0
less: '*'
lightningcss: ^1.21.0
sass: '*'
sass-embedded: '*'
stylus: '*'
sugarss: '*'
terser: ^5.4.0
peerDependenciesMeta:
'@types/node':
optional: true
less:
optional: true
lightningcss:
optional: true
sass:
optional: true
sass-embedded:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
dependencies:
'@types/node': 22.7.4
esbuild: 0.21.5
postcss: 8.4.47
rollup: 4.23.0
optionalDependencies:
fsevents: 2.3.3
dev: true
/vscode-uri@3.0.8:
resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==}
dev: true
/vue-router@4.4.5(vue@3.5.10):
resolution: {integrity: sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q==}
peerDependencies:
vue: ^3.2.0
dependencies:
'@vue/devtools-api': 6.6.4
vue: 3.5.10(typescript@5.6.2)
dev: false
/vue-tsc@2.1.6(typescript@5.6.2):
resolution: {integrity: sha512-f98dyZp5FOukcYmbFpuSCJ4Z0vHSOSmxGttZJCsFeX0M4w/Rsq0s4uKXjcSRsZqsRgQa6z7SfuO+y0HVICE57Q==}
hasBin: true
peerDependencies:
typescript: '>=5.0.0'
dependencies:
'@volar/typescript': 2.4.5
'@vue/language-core': 2.1.6(typescript@5.6.2)
semver: 7.6.3
typescript: 5.6.2
dev: true
/vue@3.5.10(typescript@5.6.2):
resolution: {integrity: sha512-Vy2kmJwHPlouC/tSnIgXVg03SG+9wSqT1xu1Vehc+ChsXsRd7jLkKgMltVEFOzUdBr3uFwBCG+41LJtfAcBRng==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
'@vue/compiler-dom': 3.5.10
'@vue/compiler-sfc': 3.5.10
'@vue/runtime-dom': 3.5.10
'@vue/server-renderer': 3.5.10(vue@3.5.10)
'@vue/shared': 3.5.10
typescript: 5.6.2
/zrender@5.6.0:
resolution: {integrity: sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==}
dependencies:
tslib: 2.3.0
dev: false

View File

@ -1 +0,0 @@
http://127.0.0.1:8088

View File

@ -1 +0,0 @@
<svg t="1727822038069" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4294" width="500" height="500"><path d="M131.437714 1024h761.124572v-72.704H131.437714V1024z m792.868572-1024H99.766857C44.617143 0 0 44.836571 0 99.913143v604.745143C0 759.734857 44.763429 804.571429 99.693714 804.571429h824.612572C979.236571 804.571429 1024 759.734857 1024 704.658286V99.913143C1024 44.763429 979.382857 0 924.306286 0z m49.371428 475.428571H682.057143L572.854857 297.398857 357.595429 590.043429 243.126857 475.428571H71.972571v-72.704h201.289143l76.068572 76.068572 228.790857-311.222857L722.651429 402.724571h251.172571V475.428571z" p-id="4295" fill="#a2d8f4"></path></svg>

Before

Width:  |  Height:  |  Size: 710 B

View File

@ -1 +0,0 @@
<svg t="1728071238053" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8448" width="500" height="500"><path d="M973.180137 514.739063L509.228934 50.787861c-11.980201-12.082596-28.260987-18.840658-45.258537-18.738263H96.065593c-35.326234 0-63.9968 28.670566-63.996801 63.9968v368.007199c0 16.99755 6.655667 33.278336 18.738263 45.258537l463.951203 463.951203c24.984351 24.984351 65.532723 24.984351 90.517074 0l368.0072-368.0072c24.881956-24.984351 24.881956-65.532723-0.102395-90.517074zM271.979997 335.957602c-44.132193 0-79.970401-35.838208-79.970402-79.970401s35.838208-79.970401 79.970402-79.970402c44.132193 0 79.970401 35.838208 79.970401 79.970402 0.102395 44.132193-35.735813 79.970401-79.970401 79.970401z" fill="#2c2c2c" p-id="8449"></path><path d="M901.298931 469.275736L469.294931 901.279736l80.072796 79.970401h31.947203l399.954402-399.954402v-31.947202z" fill="#2c2c2c" p-id="8450"></path><path d="M112.039194 335.957602H31.966398c-8.80596 0.20479-15.768812 7.577221-15.564022 16.383181 0.20479 8.498775 7.065247 15.359232 15.564022 15.564022h79.970401c8.80596-0.20479 15.768812-7.577221 15.564022-16.383181-0.102395-8.498775-6.962852-15.359232-15.461627-15.564022zM511.993596 480.027199H383.999996c-8.80596 0.20479-15.768812 7.577221-15.564022 16.38318 0.20479 8.498775 7.065247 15.359232 15.564022 15.564022h127.9936c8.80596 0.20479 16.178391-6.758062 16.383181-15.564022s-6.758062-16.178391-15.564022-16.38318c-0.307185-0.102395-0.511974-0.102395-0.819159 0z m63.9968-127.993601h-15.973601c-8.80596 0-15.973601 7.167642-15.973601 15.973602s7.167642 15.973601 15.973601 15.973601h15.973601c8.80596 0 15.973601-7.167642 15.973602-15.973601s-7.167642-15.973601-15.973602-15.973602z m15.973602-208.066396h-96.046398c-8.80596 0-15.973601 7.167642-15.973601 15.973601s7.167642 15.973601 15.973601 15.973601h96.046398c8.80596 0 15.973601-7.167642 15.973601-15.973601s-7.167642-15.973601-15.973601-15.973601z m-383.980801-48.023199h-32.049598c-8.80596 0.20479-15.768812 7.577221-15.564022 16.383181 0.20479 8.498775 7.065247 15.359232 15.564022 15.564021H207.880802c8.80596 0.20479 16.178391-6.758062 16.383181-15.564021 0.20479-8.80596-6.758062-16.178391-15.564022-16.383181h-0.716764zM383.999996 719.938403h-79.970402c-8.80596 0-15.973601 7.167642-15.973601 15.973601s7.167642 15.973601 15.973601 15.973602H383.999996c8.80596 0 15.973601-7.167642 15.973601-15.973602s-7.167642-15.973601-15.973601-15.973601z m352.033598 79.970402h-79.970401c-8.80596 0-15.973601 7.167642-15.973602 15.973601s7.167642 15.973601 15.973602 15.973601h79.970401c8.80596 0 15.973601-7.167642 15.973601-15.973601s-7.167642-15.973601-15.973601-15.973601z m-64.099195-143.967202h48.023199c8.80596 0.20479 16.178391-6.758062 16.383181-15.564022s-6.758062-16.178391-15.564022-16.383181H671.934399c-8.80596-0.20479-16.178391 6.758062-16.383181 15.564022s6.758062 16.178391 15.564022 16.383181h0.819159z" fill="#2c2c2c" p-id="8451"></path><path d="M995.809405 492.109795L531.858203 28.158592C513.939099 10.137093 489.466723 0 463.970397 0H96.065593C43.025045 0 0.019195 43.00585 0.019195 96.046398v368.007199c0 25.496325 10.137093 49.866307 28.158592 67.887806l463.951202 463.951202c37.476526 37.476526 98.299085 37.476526 135.775612 0l368.007199-368.007199c37.374131-37.476526 37.374131-98.299085-0.102395-135.775611zM470.011695 883.258237L73.436324 486.580471c-6.041298-5.938903-9.420329-14.130493-9.420329-22.629269V96.046398c0-17.714314 14.335283-31.947203 31.947203-31.947203h368.007199c8.498775 0 16.587971 3.379031 22.629269 9.420329L883.277432 469.9925 470.011695 883.258237zM950.550868 582.626869L582.646064 950.531673c-12.492175 12.492175-32.766362 12.492175-45.258538 0l-44.644167-44.644167 413.163342-413.265737 44.644167 44.644168c12.59457 12.59457 12.59457 32.868757 0 45.360932zM271.979997 159.940803c-53.040548 0-95.944003 43.00585-95.944003 96.046398s43.00585 95.944003 96.046398 95.944002 95.944003-43.00585 95.944003-96.046397c0-52.938153-43.00585-95.944003-96.046398-95.944003z m0 160.043198c-35.326234 0-63.9968-28.670566-63.9968-63.9968s28.670566-63.9968 63.9968-63.996801 63.9968 28.670566 63.9968 63.996801-28.670566 63.9968-63.9968 63.9968z" fill="#2c2c2c" p-id="8452"></path></svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

View File

@ -1 +0,0 @@
<svg t="1727943332955" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4336" width="500" height="500"><path d="M731.546 588.952C782.032 501.857 806 432.632 806 384c0-162.372-131.628-294-294-294S218 221.628 218 384c0 48.633 23.968 117.857 74.454 204.952C341.914 674.28 415.131 773.963 512 887.432c96.869-113.469 170.085-213.153 219.546-298.48zM549.64 981.52a50 50 0 0 1-4.727 4.727c-20.788 18.177-52.375 16.06-70.553-4.727C243.453 717.45 128 518.277 128 384 128 171.923 299.923 0 512 0s384 171.923 384 384c0 134.277-115.453 333.45-346.36 597.519zM512 544c88.366 0 160-71.634 160-160s-71.634-160-160-160-160 71.634-160 160 71.634 160 160 160z m0-90c-38.66 0-70-31.34-70-70s31.34-70 70-70 70 31.34 70 70-31.34 70-70 70z" p-id="4337"></path></svg>

Before

Width:  |  Height:  |  Size: 787 B

View File

@ -1 +0,0 @@
<svg t="1728073281593" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9684" width="500" height="500"><path d="M981.333333 789.333333h-106.666666V256c0-59.733333-46.933333-106.666667-106.666667-106.666667H234.666667V42.666667c0-25.6-17.066667-42.666667-42.666667-42.666667s-42.666667 17.066667-42.666667 42.666667v106.666666H42.666667c-25.6 0-42.666667 17.066667-42.666667 42.666667s17.066667 42.666667 42.666667 42.666667h106.666666V768c0 59.733333 46.933333 106.666667 106.666667 106.666667h533.333333V981.333333c0 25.6 17.066667 42.666667 42.666667 42.666667s42.666667-17.066667 42.666667-42.666667v-106.666666H981.333333c25.6 0 42.666667-17.066667 42.666667-42.666667s-17.066667-42.666667-42.666667-42.666667z m-213.333333-554.666666c12.8 0 21.333333 8.533333 21.333333 21.333333v341.333333l-145.066666-140.8c-17.066667-17.066667-42.666667-17.066667-59.733334 0l-140.8 145.066667L384 541.866667c-17.066667-17.066667-38.4-17.066667-55.466667-4.266667l-89.6 72.533333V234.666667H768z m-512 554.666666c-12.8 0-21.333333-8.533333-21.333333-21.333333v-42.666667l115.2-93.866666 64 64c8.533333 8.533333 17.066667 12.8 29.866666 12.8s21.333333-4.266667 29.866667-12.8l140.8-145.066667 174.933333 166.4v72.533333H256z" p-id="9685"></path><path d="M384 482.133333c51.2 0 93.866667-42.666667 93.866667-93.866666s-42.666667-93.866667-93.866667-93.866667-93.866667 38.4-93.866667 89.6 42.666667 98.133333 93.866667 98.133333z m0-128c17.066667 0 34.133333 12.8 34.133333 34.133334s-17.066667 29.866667-34.133333 29.866666-34.133333-17.066667-34.133333-34.133333 17.066667-29.866667 34.133333-29.866667z" p-id="9686"></path></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -1 +0,0 @@
<svg t="1728061797541" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="16315" width="500" height="500"><path d="M378.327044 615.997446v-103.014401l-74.168321 74.260481c7.9872 5.56032 15.52384 10.1376 22.60992 13.84448 7.08608 3.72736 13.7216 6.6048 19.89632 8.78592 6.17472 2.2016 11.90912 3.6864 17.182721 4.66944 5.2736 0.96256 10.10688 1.39264 14.47936 1.45408m379.217924-8.56064c0.13312 0.1024 0.86016 0.7168 2.19136 1.56672 1.3312 0.86016 3.29728 1.9456 5.89824 3.03104 2.59072 1.08544 5.8368 2.1504 9.74848 2.94912 3.91168 0.79872 8.4992 1.3312 13.7728 1.3312 4.4032 0 9.2672-0.39936 14.592-1.32096 5.3248-0.93184 11.12064-2.4064 17.36704-4.58752a152.053762 152.053762 0 0 0 20.16256-8.82688 213.575682 213.575682 0 0 0 22.947841-14.0288L807.936008 532.418565 621.383686 345.169923l-81.858561 81.879041-110.417921-113.868801L151.982082 587.161606a213.391362 213.391362 0 0 0 22.91712 14.0288c7.17824 3.74784 13.89568 6.63552 20.14208 8.82688 6.2464 2.17088 12.032 3.65568 17.3568 4.57728 5.3248 0.93184 10.17856 1.3312 14.58176 1.3312a68.505601 68.505601 0 0 0 13.76256-1.3312c3.91168-0.79872 7.15776-1.87392 9.758721-2.94912 2.59072-1.08544 4.54656-2.18112 5.888-3.03104 1.3312-0.84992 2.05824-1.46432 2.19136-1.57696l125.102081-125.102081 44.73856-42.905601 123.883522 123.893762 43.27424 44.50304c0.13312 0.1024 0.86016 0.7168 2.19136 1.56672 1.34144 0.86016 3.29728 1.9456 5.89824 3.03104 2.59072 1.08544 5.8368 2.1504 9.74848 2.94912 3.91168 0.79872 8.4992 1.3312 13.78304 1.3312 4.4032 0 9.2672-0.39936 14.592-1.32096 5.3248-0.93184 11.1104-2.4064 17.367041-4.58752a152.371202 152.371202 0 0 0 20.15232-8.82688 213.575682 213.575682 0 0 0 22.9376-14.0288l-99.399681-97.341441 18.50368-18.50368 86.026241 86.016001 50.176001 49.7152m-1.0752-518.860805L1000.85761 512.000005 756.480008 935.424009h-488.960005L23.1424 512.000005 267.520003 88.576001z" p-id="16316"></path><path d="M603.985926 491.376645l-65.095681-64.972801 4.62848-4.6592 65.556481 64.839681z" p-id="16317"></path></svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -1 +0,0 @@
<svg t="1727945382740" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9321" width="500" height="500"><path d="M373.279603 324.241914c36.285052 30.618137 94.83984 62.536026 145.66011 82.450213-43.715629-31.725925-87.219299-67.485078-130.642985-114.288116 36.145079-77.077241 79.304815-183.536856 123.800295-292.208049 72.546109 185.360507 207.760218 464.315093 388.897534 795.28372-49.210577-27.020826-93.79804-42.40588-139.833225-54.293604 15.257079 8.708333 51.320173 28.388564 74.459743 44.207535 36.553001 24.989215 70.382523 52.315983 102.194431 78.482972 28.394563 52.210003 57.137059 105.499799 86.189497 159.729415-144.484334-83.657981-284.891449-151.425005-399.923423-172.356997 37.658789-208.902-109.738987-332.1504-193.482952-199.181861-32.245826 51.196197-40.966156 135.548045-25.675084 198.228044C259.485393 878.301823 117.18464 956.696812 0.20104 1023.608c136.259909-246.906722 274.02353-497.202796 373.078563-699.366086z" p-id="9322"></path></svg>

Before

Width:  |  Height:  |  Size: 1006 B

View File

@ -1 +0,0 @@
<svg t="1728061341331" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8375" width="500" height="500"><path d="M928.768 750.592c-1.536 4.096-21.504 74.24-70.656 145.92-43.008 62.464-87.04 124.928-156.672 125.952-68.608 1.024-90.624-40.96-168.96-40.96s-102.912 39.936-167.936 41.984c-67.072 2.56-118.784-68.096-161.792-130.048C115.2 767.488 47.616 534.528 138.24 378.88c44.544-77.824 124.928-127.488 211.968-129.024 65.536-1.024 128.512 44.544 168.448 44.544 40.96 0 116.736-55.296 196.608-47.104 33.28 1.536 126.976 13.824 186.88 101.376-4.608 3.072-111.616 66.56-110.592 195.072 1.024 155.136 135.68 206.336 137.216 206.848m-266.24-586.24C698.368 120.32 722.432 59.904 715.776 0c-51.2 2.048-114.176 34.304-151.04 77.824-32.768 37.888-61.952 99.328-53.76 158.72 56.832 3.072 115.712-30.208 151.552-72.192" p-id="8376"></path></svg>

Before

Width:  |  Height:  |  Size: 875 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.6 KiB

View File

@ -1 +0,0 @@
<svg t="1728061738726" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="15126" width="500" height="500"><path d="M687.07344 29.713441c-73.564437-26.878698-148.888788-34.142346-222.069244-27.294678-84.827891 6.687676-126.201887 32.926405-123.738006 28.190634-138.713281 49.501602-255.987601 156.024443-310.256972 305.361209-96.667318 265.971117 40.286049 560.10087 305.809187 656.960179 265.715129 96.859308 559.364906-40.318047 656.096221-306.289164 96.731315-265.939119-40.222052-560.068872-305.873184-656.896182zM354.321558 944.837114a455.337945 455.337945 0 0 1-81.628046-39.710076l1.983903 1.119946c123.738006 9.50354 285.266182-18.975081 394.188907-120.922143 0 0 207.605944-165.879965 57.373221-438.122779 0 0 24.222827 109.722685-6.655678 199.958315 0 0-29.438574 122.746054-160.280236 158.360329-192.726665 52.509457-412.300029-82.332012-504.135581-147.736844-6.911665-67.164747-0.767963-136.537386 23.902842-204.278105 36.478233-100.347139 105.08291-178.679345 188.886851-231.252799-20.894988 146.5849-4.351789 281.586361 19.455058 338.127622 31.966452 75.804328 87.451764 164.248044 195.830514 175.575496 108.37875 11.391448 168.087858-90.01164 168.087858-90.01164 55.645305-84.475908 64.348883-205.782032 63.484925-208.72589-0.863958-2.975856-14.815282-10.975468-14.815282-10.975468-37.406188 151.416666-99.0992 201.974217-99.0992 201.974216-97.275288 93.915451-166.167951 28.798605-166.167951 28.798606-74.076412-79.580145-22.174926-208.853884-22.174926-208.853884 29.022594-88.059735 113.498502-216.917493 209.269863-282.450319 15.967227 3.935809 31.99845 6.39969 47.773686 12.127413a458.857774 458.857774 0 0 1 151.96064 92.443522l-0.319985-0.287986c-70.012609 25.566762-183.063133 79.580145-183.063133 79.580145-179.223319 75.516342-191.350731 189.686812-191.350731 189.686812-18.559101 117.658301 74.844375 67.836714 74.844375 67.836714 96.091346-46.813732 143.321058-192.662668 143.321057-192.662667-29.982548-5.727723-53.629402 3.423834-53.629402 3.423834-38.366142 94.715412-116.602352 133.625528-116.602352 133.625527-30.814507 16.287211-37.98216-12.511394-37.98216-12.511394-5.215747-21.598954 22.270921-25.246777 22.270921-25.246777 42.653934-16.607196 69.916613-61.405026 76.124313-79.708139 6.143702-18.335112 17.567149-19.807041 17.567149-19.807041a530.086324 530.086324 0 0 1 109.402701-22.622904l2.335887-0.191991c72.540486-8.927568 183.575108 25.694755 183.575108 25.694756 24.926793 10.015515 48.797636 17.503152 70.012608 23.518861 40.702028 101.723073 47.133717 217.493465 6.81567 328.528087-87.003786 239.348407-351.37498 362.830425-590.531396 275.698645z" p-id="15127"></path></svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -1 +0,0 @@
<svg t="1728061671403" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="14056" width="500" height="500"><path d="M512 0C229.282909 0 0 229.282909 0 512s229.282909 512 512 512 512-229.282909 512-512S794.717091 0 512 0z m-0.930909 48.826182h0.093091a3.258182 3.258182 0 0 0 0.837818 0c211.688727 0 390.237091 142.056727 445.44 335.918545a805.934545 805.934545 0 0 1-196.096 255.813818c-39.424 34.117818-82.525091 64.372364-129.861818 85.736728-47.383273 21.317818-99.421091 33.466182-151.133091 30.533818a260.654545 260.654545 0 0 1-105.704727-29.463273 850.664727 850.664727 0 0 0 236.357818-191.767273c44.497455-51.944727 83.362909-111.243636 98.443636-178.408727 7.68-33.605818 8.843636-68.887273 1.861818-102.725818a189.858909 189.858909 0 0 0-46.498909-91.461818 186.786909 186.786909 0 0 0-86.341818-51.106909 225.745455 225.745455 0 0 0-100.212364-3.630546c-66.234182 12.148364-125.346909 50.548364-172.450909 98.117818-83.176727 83.781818-134.516364 202.007273-125.067636 320 4.747636 58.973091 24.389818 116.875636 58.274909 165.422546 6.656 9.541818 14.056727 18.525091 21.736727 27.182545a755.339636 755.339636 0 0 1-143.639272 34.397091A462.941091 462.941091 0 0 1 511.069091 48.826182z m3.258182 94.021818c0.186182-0.046545 0.744727 0.093091 0.558545 0.046545 32.209455 0 64.558545 9.821091 90.112 29.184a148.945455 148.945455 0 0 1 49.710546 69.352728 191.767273 191.767273 0 0 1 8.936727 86.016c-6.656 57.856-35.84 111.150545-71.354182 157.928727-63.022545 82.757818-146.897455 149.085091-240.128 195.490909-8.843636 4.421818-17.966545 8.704-27.089454 12.753455a238.033455 238.033455 0 0 1-48.872728-60.276364c-27.461818-48.593455-36.491636-106.309818-31.185454-162.071273 5.399273-55.808 24.482909-109.661091 50.362182-159.650909 29.928727-57.902545 70.562909-112.546909 127.162181-143.825454a192.698182 192.698182 0 0 1 91.834182-24.994909z m457.541818 316.974545c1.954909 17.082182 3.304727 34.397091 3.304727 51.991273 0 255.860364-207.220364 463.266909-463.127273 463.266909a461.591273 461.591273 0 0 1-353.28-164.305454 844.241455 844.241455 0 0 0 147.549091-49.338182c21.457455 16.104727 45.009455 29.509818 70.144 39.098182 74.007273 28.392727 157.882182 24.203636 232.541091-1.629091 74.612364-25.832727 140.613818-72.098909 198.097455-125.905455a850.106182 850.106182 0 0 0 164.770909-213.178182z" p-id="14057"></path></svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 10 KiB

View File

@ -1 +0,0 @@
<svg t="1727944988493" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4321" width="500" height="500"><path d="M567.612524 736.945941c-81.946878 38.109618-158.134117 37.725642-209.330917 34.013874-61.052184-4.415724-110.137116-21.11868-131.735766-35.741766a29.086182 29.086182 0 1 0-32.605962 48.15699c34.685832 23.486532 96.057996 40.95744 160.14999 45.565152 10.87932 0.767952 22.782576 1.27992 35.645773 1.27992 55.772514 0 126.616086-5.311668 202.419348-40.573464a29.11818 29.11818 0 0 0-24.542466-52.732704z m323.275795-43.101306c2.783826-252.656209 28.766202-730.162365-454.947565-691.572777C-41.629398 40.701456 84.986688 545.213924 77.883132 714.163365 71.579526 803.533779 41.91738 912.80695 0 1024h129.079933c13.27917-47.133054 23.03856-93.722142 27.230298-138.135367 7.775514 5.43966 16.094994 10.687332 24.990438 15.711019 14.463096 8.511468 26.87832 19.83876 40.029498 31.83801 30.750078 28.030248 65.5959 59.772264 133.719642 63.740016 4.575714 0.255984 9.183426 0.383976 13.663146 0.383976 68.891694 0 115.99275-30.142116 153.878383-54.364602 18.142866-11.615274 33.821886-21.630648 48.572964-26.462346 41.91738-13.11918 78.523092-34.301856 105.881383-61.244173a180.468721 180.468721 0 0 0 11.967252-12.95919c15.231048 55.868508 36.125742 118.744578 59.292294 181.492657H1023.936004c-66.171864-102.23361-134.423599-202.355353-133.047685-330.155365zM124.088244 556.381226v-0.031998c-4.735704-82.458846 34.71783-151.830511 88.122493-154.934316s100.537716 61.212174 105.305418 143.67102v0.031998c0.255984 4.447722 0.351978 8.831448 0.383976 13.215174a206.707081 206.707081 0 0 0-45.885132 17.630898l-0.15999-1.823886v-0.031998c-4.575714-46.813074-29.566152-82.138866-55.83651-78.939066s-43.869258 43.741266-39.293544 90.55434v0.031998c1.983876 20.414724 7.871508 38.621586 16.030998 52.444722-2.047872 1.5999-7.775514 5.823636-14.3991 10.655335l-18.302856 13.43916c-19.870758-26.07837-33.501906-63.580026-35.933755-105.881383z m541.118181 203.827261c-1.887882 43.581276-58.908318 84.570714-111.577027 101.049684l-0.287982 0.095994c-21.886632 7.103556-41.43741 19.614774-62.108118 32.829948-34.71783 22.23861-70.651584 45.213174-122.520343 45.213175-3.391788 0-6.87957-0.095994-10.335354-0.287982-47.51703-2.783826-69.723642-23.03856-97.881882-48.668959-14.847072-13.535154-30.174114-27.51828-49.980876-39.133554l-0.415974-0.255984c-42.71733-24.094494-69.211674-54.07662-70.907568-80.186988-0.831948-12.991188 4.927692-24.222486 17.182926-33.405912 26.622336-19.966752 44.47722-33.021936 56.284482-41.661396 13.11918-9.5994 17.054934-12.47922 19.99875-15.263046 2.111868-1.983876 4.351728-4.191738 6.815574-6.55959 24.446472-23.774514 65.371914-63.548028 128.15199-63.548029 38.3976 0 80.890944 14.783076 126.168115 43.901257 21.310668 13.887132 39.869508 20.286732 63.388038 28.382226 16.15899 5.567652 34.461846 11.903256 58.972314 22.3986l0.383976 0.15999c22.87857 9.407412 49.884882 26.55834 48.668959 54.940566z m-12.607212-102.3936a188.020249 188.020249 0 0 0-13.759141-6.271608 806.765577 806.765577 0 0 0-54.524592-20.990689 133.367665 133.367665 0 0 0 13.631148-57.244422v-0.031998c1.11993-52.380726-25.27842-94.906068-59.004312-94.970064s-61.948128 42.301356-63.068058 94.682082v0.031998l-0.031998 5.11968a293.805637 293.805637 0 0 0-61.148178-20.766702 350.890069 350.890069 0 0 1-0.255984-5.91963v-0.063996c-1.951878-95.418036 56.604462-174.389101 130.743828-176.404975s135.831511 73.691394 137.751391 169.109431v0.063996c0.863946 43.133304-10.655334 82.87482-30.366102 113.656897z" fill="#5D5D5D" p-id="4322"></path></svg>

Before

Width:  |  Height:  |  Size: 3.5 KiB

View File

@ -1 +0,0 @@
<svg t="1728061281077" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6300" width="500" height="500"><path d="M0 0v1024h288V288h368V0H0z m368 368V1024h288V368h-288zM736 0v1024H1024V0h-288z" p-id="6301"></path></svg>

Before

Width:  |  Height:  |  Size: 260 B

View File

@ -1 +0,0 @@
<svg t="1728061313768" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7370" width="500" height="500"><path d="M0 72.234667v178.901333h77.994667c54.442667 0 64.085333 36.906667 64.085333 87.808l0.426667 316.245333c0 163.84 146.773333 296.576 327.68 296.576h446.464c57.258667 0 107.349333-35.413333 107.349333-89.941333V371.456c0-163.84-146.773333-296.533333-327.808-296.533333h-187.946667v-0.554667L0 72.234667z m244.181333 109.482666h89.685334V632.32c0 60.288 41.984 107.093333 91.264 107.093333l305.92 1.28c63.829333 0 113.536-43.093333 113.536-94.122666l-0.512-239.232a51.2 51.2 0 0 0-16.469334-38.826667 52.224 52.224 0 0 0-39.125333-16.384c-15.957333 0-27.733333 5.12-39.168 16.384a51.2 51.2 0 0 0-16.469333 38.826667v204.714666h-94.848V407.381333c0-15.530667-5.290667-27.648-16.597334-38.826666a51.541333 51.541333 0 0 0-39.125333-16.384c-15.616 0-27.605333 5.12-38.997333 16.384-11.306667 11.178667-16.64 23.296-16.64 38.826666v204.714667H431.786667V407.381333c0-40.533333 15.36-76.458667 44.458666-105.216a146.986667 146.986667 0 0 1 106.026667-43.605333 146.346667 146.346667 0 0 1 102.954667 41.386667 147.114667 147.114667 0 0 1 103.253333-41.386667c40.704 0 76.928 14.848 106.026667 43.605333a144.426667 144.426667 0 0 1 44.416 105.216l0.384 255.616c-4.48 42.837333-22.997333 80.810667-54.613334 112.512h-0.085333a186.325333 186.325333 0 0 1-135.424 56.064H408.490667v-1.621333c-41.642667-4.394667-78.762667-22.144-109.653334-51.925333-36.053333-35.2-54.656-78.762667-54.656-128.426667V181.76z" p-id="7371"></path></svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -1 +0,0 @@
<svg t="1727945411894" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10356" width="500" height="500"><path d="M510.72 1.792C229.156571 1.792 0.841143 230.070857 0.841143 511.634286s228.278857 509.878857 509.878857 509.878857c281.563429 0 509.842286-228.278857 509.842286-509.878857S792.283429 1.792 510.72 1.792z m2.450286 70.619429c242.614857 0 439.442286 196.681143 439.442285 439.259428 0 242.614857-196.864 439.259429-439.442285 439.259429-130.998857 0-248.539429-57.417143-329.033143-148.370286 33.097143-25.673143 88.429714-19.419429 156.598857-11.666286 32.658286 3.730286 69.924571 7.972571 108.361143 8.813715 107.410286 0.621714 222.976-18.980571 294.290286-50.139429 46.116571-20.224 75.629714-33.536 94.098285-50.322286 6.656-5.449143 10.130286-14.592 13.714286-24.027428l2.450286-6.4c2.998857-7.643429 7.277714-24.064 9.216-33.060572 0.841143-3.913143 1.28-8.155429-1.499429-10.313143l-9.947428 1.865143c-31.305143 18.761143-109.494857 54.491429-182.710858 55.954286-90.770286 1.901714-273.700571-91.392-292.754285-101.229714l-1.865143-2.267429-37.741714-89.563428c131.657143 86.710857 240.822857 134.692571 324.498285 142.153142 93.037714 8.265143 165.595429-42.532571 196.608-64.219428 6.070857-4.132571 10.678857-7.387429 12.580572-8.082286l2.048-3.401143c-5.156571-32.694857-53.942857-190.902857-90.697143-228.937143-10.203429-10.422857-18.285714-20.553143-34.742857-30.244571-133.010286-77.531429-448.877714-124.233143-463.652572-126.390857l-2.450285 0.768-0.950858 2.048-1.316571 72.850286a1864.155429 1864.155429 0 0 0-92.598857-27.794286c62.829714-77.714286 159.085714-146.688 327.533714-146.688z m116.077714 232.484571a135.643429 135.643429 0 0 1 137.289143 139.885714 134.326857 134.326857 0 0 1-42.825143 93.878857 134.107429 134.107429 0 0 1-96.877714 36.425143 135.899429 135.899429 0 0 1-130.523429-139.885714 133.924571 133.924571 0 0 1 43.008-94.098286 133.376 133.376 0 0 1 89.965714-36.242285z m-3.584 39.789714a93.257143 93.257143 0 0 0-58.221714 25.161143 93.366857 93.366857 0 0 0-29.842286 65.536 94.573714 94.573714 0 0 0 90.88 97.645714c25.234286 0.768 49.152-8.045714 67.584-25.161142a93.842286 93.842286 0 0 0 29.878857-65.718858 94.464 94.464 0 0 0-91.062857-97.462857 96.804571 96.804571 0 0 0-9.216 0z m24.795429 47.140572c23.076571 0 41.691429 12.544 41.691428 27.977143 0 15.36-18.614857 27.977143-41.691428 27.977142-23.149714 0-41.874286-12.653714-41.874286-27.977142 0-15.433143 18.724571-27.977143 41.874286-27.977143z" p-id="10357"></path></svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -1 +0,0 @@
<svg t="1728061127184" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5302" width="500" height="500"><path d="M683.050667 571.136c67.285333 0 164.693333-13.909333 164.693333-93.952a75.306667 75.306667 0 0 0-1.706667-18.389333l-40.106666-174.08c-9.216-38.314667-17.322667-55.68-84.565334-89.301334-52.181333-26.666667-165.888-70.741333-199.509333-70.741333-31.274667 0-40.405333 40.362667-77.738667 40.362667-35.925333 0-62.592-30.122667-96.213333-30.122667-32.298667 0-53.333333 21.973333-69.546667 67.242667 0 0-45.226667 127.573333-51.072 146.090666a34.56 34.56 0 0 0-1.194666 10.453334c0 49.578667 195.285333 212.224 456.96 212.224m174.976-61.226667c9.301333 44.032 9.301333 48.64 9.301333 54.485333 0 75.306667-84.650667 117.12-195.968 117.12-251.52 0.170667-471.893333-147.242667-471.893333-244.650666a99.242667 99.242667 0 0 1 8.106666-39.466667C117.162667 401.706667 0 417.877333 0 521.258667c0 169.344 401.28 378.069333 718.976 378.069333 243.626667 0 305.024-110.165333 305.024-197.12 0-68.48-59.178667-146.133333-165.845333-192.512" p-id="5303"></path></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1 +0,0 @@
<svg t="1727945603402" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11437" width="500" height="500"><path d="M512 0c282.581333 0 512 229.418667 512 512s-229.418667 512-512 512S0 794.581333 0 512 229.418667 0 512 0z m139.904 754.346667a68.352 68.352 0 1 0 68.309333 118.4 68.352 68.352 0 0 0-68.309333-118.4z m-139.904-42.666667a199.04 199.04 0 0 1-84.096-18.56L380.416 778.24c39.68 19.584 84.394667 30.762667 131.584 30.762667a294.826667 294.826667 0 0 0 79.36-10.922667 95.573333 95.573333 0 0 1 46.72-67.712 95.744 95.744 0 0 1 81.92-6.656 295.765333 295.765333 0 0 0 88.32-192.64l-97.493333-1.408A199.637333 199.637333 0 0 1 512 711.68zM312.32 512a199.68 199.68 0 0 1 84.906667-163.413333L347.306667 264.917333a297.344 297.344 0 0 0-122.922667 172.16 94.72 94.72 0 0 1 35.413333 74.24c0 30.037333-13.824 56.277333-35.413333 74.197334a297.386667 297.386667 0 0 0 122.922667 172.117333l49.92-83.84A195.626667 195.626667 0 0 1 312.32 512z m-148.48-68.352a68.352 68.352 0 1 0 0 136.661333 68.352 68.352 0 0 0 0-136.661333zM512 312.32a199.637333 199.637333 0 0 1 198.826667 181.973333l97.493333-1.450666a296.490667 296.490667 0 0 0-88.32-192.682667A95.829333 95.829333 0 0 1 591.36 225.706667 303.957333 303.957333 0 0 0 512 215.04c-47.36 0-91.946667 11.093333-131.584 30.72l47.488 85.12A198.954667 198.954667 0 0 1 512 312.32z m139.904-42.709333a68.394667 68.394667 0 0 0 93.397333-24.96 68.437333 68.437333 0 0 0-118.485333-68.309334 68.266667 68.266667 0 0 0 25.088 93.269334z" fill="" p-id="11438"></path></svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -1 +0,0 @@
<svg t="1727945032638" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5297" width="500" height="500"><path d="M426.285714 574.857143v372L36.571429 893.142857v-318.285714h389.714285z m0-424.571429v376.571429H36.571429V204z m561.142857 424.571429v449.142857l-518.285714-71.428571v-377.714286h518.285714z m0-501.714286v453.714286H469.142857V144.571429z" p-id="5298"></path></svg>

Before

Width:  |  Height:  |  Size: 421 B

View File

@ -1 +0,0 @@
<svg t="1728061563073" class="icon" viewBox="0 0 1159 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10221" width="500" height="500"><path d="M304.867307 54.334925L237.629153 172.197198h614.90728l-66.461779-117.862273H304.867307zM154.42175 318.439431L63.649866 478.714677l84.564649 150.250054h32.649079l461.489694-310.5253H154.42175z m750.094168 0L442.964189 628.964731h498.857174L1026.128473 480.006128l-90.901593-161.566697h-30.709083zM230.842927 775.208844l72.926553 129.175156h481.207347l73.704807-129.175156H230.841047z" p-id="10222"></path></svg>

Before

Width:  |  Height:  |  Size: 566 B

View File

@ -1 +0,0 @@
<svg t="1727943359403" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6236" width="500" height="500"><path d="M423.844408 284.113794c-39.870006 0-72.156392 31.870406-72.156392 71.05778 0 39.25137 32.275719 71.05778 72.156392 71.05778 39.838008 0 72.124394-31.80641 72.124394-71.05778C495.968802 315.984201 463.693082 284.113794 423.844408 284.113794zM676.237121 624.651434l20.372314-20.062997c22.558872-22.185558 22.558872-58.183758 0-80.369315l-35.25157-34.686266c11.370098-19.433695 20.244321-40.307318 26.494675-62.439545l38.056764 0c31.870406 0 57.746446-25.438728 57.746446-56.807827l0-28.435911c0-31.369099-25.876039-56.871823-57.746446-56.871823l-37.619452 0c-5.941036-21.812242-14.495275-42.621869-25.556055-61.938236l33.875639-33.310334c22.558872-22.249555 22.558872-58.247755 0-80.369315l-20.372314-20.126994c-22.558872-22.185558-59.122377-22.185558-81.617252 0l-33.246338 32.681033c-20.276319-11.626086-42.216556-20.681633-65.40473-26.931986l0-38.184758C495.968802 25.438728 470.124761 0 438.254354 0l-28.841225 0c-31.870406 0-57.714447 25.438728-57.714447 56.807827l0 38.184758c-23.188174 6.250354-45.117744 15.316567-65.436728 26.931986l-33.182341-32.681033c-22.526874-22.185558-59.090378-22.185558-81.617252 0l-20.404313 20.126994c-22.526874 22.121561-22.526874 58.119761 0 80.369315l33.875639 33.310334c-11.028782 19.316367-19.593687 40.125994-25.534723 61.938236l-37.65145 0C89.834441 284.988418 64.022399 310.480476 64.022399 341.86024l0 28.435911c0 31.369099 25.812042 56.807827 57.714447 56.807827l38.088763 0c6.186358 22.121561 15.092578 42.995183 26.441345 62.439545l-35.219572 34.686266c-22.526874 22.185558-22.526874 58.183758 0 80.369315l20.404313 20.062997c22.526874 22.185558 59.090378 22.185558 81.617252 0l35.432895-34.878256c19.689683 10.996783 40.872623 19.625686 63.186174 25.556055l0 36.435511c0 31.369099 25.844041 56.807827 57.714447 56.807827l28.841225 0c31.870406 0 57.714447-25.438728 57.714447-56.807827l0-36.435511c22.34555-5.941036 43.496492-14.559272 63.154175-25.556055l35.496892 34.878256C617.114744 646.847658 653.678249 646.847658 676.237121 624.651434zM423.844408 513.222339c-87.654284 0-158.744063-70.001833-158.744063-156.237521 0-86.374348 71.089779-156.301518 158.744063-156.301518s158.712064 69.937836 158.712064 156.301518C582.556472 443.231171 511.498692 513.222339 423.844408 513.222339zM931.979001 818.519074l-18.249755 0c-2.879856-10.623469-6.996983-20.681633-12.372714-30.057164l16.372514-16.19119c10.996783-10.751462 10.996783-28.19059 0-38.995383l-9.876839-9.748846c-10.932786-10.751462-28.627902-10.751462-39.624686 0l-16.063197 15.871206c-9.812842-5.621052-20.500308-10.058164-31.689083-13.066014l0-18.495075c0-15.25257-12.564705-27.561289-27.9986-27.561289l-14.004633 0c-15.497892 0-27.9986 12.308718-27.9986 27.561289l0 18.495075c-11.25277 2.997183-21.876239 7.434295-31.753079 13.066014l-16.127194-15.871206c-10.879456-10.751462-28.627902-10.751462-39.560689 0l-9.940836 9.748846c-10.879456 10.815459-10.879456 28.243921 0 38.995383l16.436511 16.19119c-5.311734 9.375531-9.439528 19.433695-12.372714 30.057164L638.926987 818.519074c-15.433895 0-27.9986 12.308718-27.9986 27.561289l0 13.748646c0 15.25257 12.564705 27.561289 27.9986 27.561289l18.495075 0c2.997183 10.751462 7.316967 20.873623 12.810026 30.313151l-17.119144 16.809827c-10.879456 10.751462-10.879456 28.19059 0 38.995383l9.940836 9.684849c10.932786 10.815459 28.681233 10.815459 39.560689 0l17.247138-16.873823c9.503525 5.311734 19.753679 9.503525 30.622469 12.372714l0 17.684449c0 15.188574 12.500708 27.561289 27.9986 27.561289l14.004633 0c15.433895 0 27.9986-12.372714 27.9986-27.561289l0-17.684449c10.751462-2.879856 21.065614-7.06098 30.622469-12.372714l17.119144 16.873823c10.996783 10.815459 28.681233 10.815459 39.624686 0l9.876839-9.684849c10.996783-10.815459 10.996783-28.243921 0-38.995383l-17.065814-16.809827c5.503725-9.439528 9.812842-19.561689 12.810026-30.313151l18.495075 0c15.497892 0 27.9986-12.308718 27.9986-27.561289l0-13.748646C959.977601 830.838458 947.476893 818.519074 931.979001 818.519074zM785.490325 929.20154c-42.557872 0-76.998817-33.939636-76.998817-75.80421s34.440945-75.80421 76.998817-75.80421c42.493875 0 76.998817 33.939636 76.998817 75.80421S827.984201 929.20154 785.490325 929.20154zM785.490325 818.081763c-19.369699 0-34.995583 15.433895-34.995583 34.440945 0 19.06038 15.625886 34.440945 34.995583 34.440945 19.316367 0 34.995583-15.369899 34.995583-34.440945C820.485909 833.515657 804.796027 818.081763 785.490325 818.081763z" fill="#272636" p-id="6237"></path></svg>

Before

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -1 +0,0 @@
<svg t="1728070867266" class="icon" viewBox="0 0 1075 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2481" width="500" height="500"><path d="M486.58043 972.367932h-22.899578A489.640506 489.640506 0 0 1 0.720514 509.407595a482.619409 482.619409 0 0 1 134.048946-358.616034A482.511392 482.511392 0 0 1 486.58043 0.216034a486.940084 486.940084 0 0 1 486.075949 486.075949c0 13.286076-0.540084 26.896203-1.72827 40.398312a281.924051 281.924051 0 0 0-49.687763-53.144303A418.025316 418.025316 0 0 0 644.285071 102.075949v21.603376a108.016878 108.016878 0 0 1-110.933333 104.020253 108.016878 108.016878 0 0 0-110.933333 104.020253 54.008439 54.008439 0 0 1-55.412659 51.740085 108.016878 108.016878 0 0 0-110.933333 103.696202h291.64557a278.791561 278.791561 0 0 0-87.277637 203.719831 280.843882 280.843882 0 0 0 171.422784 259.240507 485.211814 485.211814 0 0 1-145.2827 22.251476zM93.93908 409.383966a42.234599 42.234599 0 0 0-42.450633 43.206751v0.972152A417.269198 417.269198 0 0 0 409.78043 870.616034v-64.810127a43.206751 43.206751 0 0 0-29.920675-41.370464 104.236287 104.236287 0 0 1-72.479325-100.779747v-34.349367a44.502954 44.502954 0 0 0-12.421941-30.892827L123.751738 422.562025a41.046414 41.046414 0 0 0-29.596624-12.854008z" p-id="2482"></path><path d="M768.072413 460.908017a256 256 0 1 0 256 256 256.216034 256.216034 0 0 0-256-256M742.472413 1024A332.691983 332.691983 0 1 1 1075.164396 691.308017a333.124051 333.124051 0 0 1-332.691983 332.691983" p-id="2483"></path><path d="M881.706168 819.308017a43.206751 43.206751 0 0 1-21.603375-5.832912l-142.798312-82.848945V548.293671a40.398312 40.398312 0 0 1 80.364557 0v143.122363l105.964557 61.56962a34.025316 34.025316 0 0 1 11.989873 49.903797 41.370464 41.370464 0 0 1-33.809283 16.526583" p-id="2484"></path></svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -1,37 +0,0 @@
<script setup lang="ts">
// import Nav from './components/Nav.vue'
console.log('App.vue')
const year = new Date().getFullYear()
</script>
<template>
<h1 style="text-align: center">Server Status</h1>
<router-view/>
<footer>
<a href="https://github.com/snowykami/server-status-server">Server status dashboard</a><br>
© Copyright 2024-{{year}} <a href="https://sfkm.me" target="_blank">Snowykami</a> All Rights Reserved
</footer>
</template>
<style scoped>
.logo {
height: 6em;
padding: 1.5em;
will-change: filter;
transition: filter 300ms;
}
.logo:hover {
filter: drop-shadow(0 0 2em #646cffaa);
}
.logo.vue:hover {
filter: drop-shadow(0 0 2em #42b883aa);
}
footer {
text-align: center;
padding: 1em;
color: #666;
}
a {
color: #36a7ec;
}
</style>

View File

@ -1,56 +0,0 @@
/// <reference types="node" />
export interface Status {
meta: {
id: string; // 服务器ID用于标识服务器
name: string;
os: {
name: string;
version: string;
release: string;
machine: string;
};
labels: string[]; // 服务器标签
location: string; // Chongqing, China
uptime: number; // uptime in seconds
link: string | null; // 链接或是nil
observed_at: number; // unix timestamp
start_time: number; // unix timestamp
timezone: string; // Asia/Shanghai
};
hardware: {
mem: {
total: number;
used: number;
};
swap: {
total: number;
used: number;
};
cpu: {
cores: number;
logics: number;
percent: number; // 0-100
};
disks: {
[key: string]: {
used: number;
total: number;
mountpoint: string;
fstype: string;
device: string;
};
};
net: {
up: number;
down: number;
type: string; // IPv4 or IPv6 or IPv4/6
};
};
}
const apiRoot = import.meta.env.VITE_API_ROOT
export async function getStatuses(): Promise<Record<string, Status>> {
const response = await fetch(`${apiRoot}/api/status`)
return response.json()
}

View File

@ -1,123 +0,0 @@
export const onlineTimeout = 30
export function getReleaseInfo(name: string, release: string): { name: string, icon: string } {
if (name.toLowerCase() == 'windows') {
return {name: 'Windows', icon: '/svg/system-windows.svg'}
} else if (name.toLowerCase() == 'darwin') {
return {name: 'macOS', icon: '/svg/system-darwin.svg'}
} else {
const map: Record<string, { name: string, icon: string }> = {
'alpine': {name: 'Alpine Linux', icon: '/svg/system-alpine.svg'},
'arch': {name: 'Arch Linux', icon: '/svg/system-archlinux.svg'},
'centos': {name: 'CentOS', icon: '/svg/system-centos.svg'},
'debian': {name: 'Debian', icon: '/svg/system-debian.svg'},
'deepin': {name: 'Deepin', icon: '/svg/system-deepin.svg'},
'elementary': {name: 'elementary OS', icon: '/svg/system-elementary.svg'},
'fedora': {name: 'Fedora', icon: '/svg/system-fedora.svg'},
'kali': {name: 'Kali Linux', icon: '/svg/system-kali.svg'},
'manjaro': {name: 'Manjaro', icon: '/svg/system-manjaro.svg'},
'opensuse': {name: 'openSUSE', icon: '/svg/system-opensuse.svg'},
'redhat': {name: 'Red Hat', icon: '/svg/system-redhat.svg'},
'suse': {name: 'SUSE', icon: '/svg/system-opensuse.svg'}, // SUSE Linux Enterprise Server
'ubuntu': {name: 'Ubuntu', icon: '/svg/system-ubuntu.svg'},
'zorin': {name: 'Zorin OS', icon: '/svg/system-zorin.svg'},
}
release = release.toLowerCase()
for (const key in map) {
if (release.includes(key)) {
return map[key]
}
}
return {name: name, icon: '/svg/system-linux.svg'}
}
}
export function formatSizeByUnit(bytes: number, unit: string | null = null, suffix: string | null = null): string {
// 若指定单位,则格式化为指定单位对应的大小字符串加上单位
// 若未指定单位则选择1-1024之间的最大单位格式化为该单位对应的大小字符串加上单位
if (bytes == 0) {
return '0'
}
if (bytes < 1024) {
return bytes.toFixed(0) + (suffix ? suffix : '')
}
const units = ['', 'K', 'M', 'G', 'T', 'P', 'E']
let i = unit ? units.indexOf(unit) : Math.floor(Math.log2(bytes) / 10)
return (bytes / Math.pow(1024, i)).toFixed(1) + (suffix ? (units[i] + suffix) : '')
}
export function formatSizeToNumAndUnit(bytes: number): { num: number, unit: string } {
const units = ['', 'K', 'M', 'G', 'T', 'P', 'E']
let i = Math.floor(Math.log2(bytes) / 10)
return {num: (bytes / Math.pow(1024, i)), unit: units[i]}
}
export function format2Size(num1: number, num2: number, suffix: string | null = 'iB'): string {
// const n1, unit = formatSizeToNumAndUnit(num1)
// const n2 = formatSizeWithUnit(num2, unit)
// return `${n1}/${n2}`
// const r1 = formatSizeToNumAndUnit(num1)
// let n2 = formatSizeWithUnit(num2, r1.unit)
// return `${r1.num.toFixed(2)}/${n2}`
const r2 = formatSizeToNumAndUnit(num2)
const n1 = formatSizeByUnit(num1, r2.unit)
return `${n1}/${r2.num.toFixed(1)}${r2.unit}${suffix}`
}
export function formatDate(timestamp: number, timeOnly: boolean = false) {
const d = new Date(timestamp * 1000)
const date = d.toLocaleDateString()
const time = d.toLocaleTimeString()
return timeOnly ? time : `${date} ${time}`
}
export function getBaseColor(percent: number, disable: boolean = false) {
// 0~60: green, 60~80: yellow, 80~90: orange, 90~100: red
if (disable) {
return '#9ca3af'
}
if (percent < 60) {
return '#22c55e'
} else if (percent < 80) {
return '#eab308'
} else if (percent < 90) {
return '#f97316'
} else {
return '#ef4444'
}
}
export function getBlankColor(percent: number, disable: boolean = false) {
if (disable) {
return '#e5e7eb'
}
if (percent < 60) {
return '#bbf7d0'
} else if (percent < 80) {
return '#fef08a'
} else if (percent < 90) {
return '#fed7aa'
} else {
return '#fecaca'
}
}
// 1727998501
export function formatUptime(uptime: number): string {
const seconds = uptime;
const d = Math.floor(seconds / 86400);
const h = Math.floor((seconds % 86400) / 3600).toString().padStart(2, '0');
const m = Math.floor((seconds % 3600) / 60).toString().padStart(2, '0');
const s = Math.floor(seconds % 60).toString().padStart(2, '0');
return `${d}:${h}:${m}:${s}`;
}
export function formatDuration(duration: number): string {
const d = Math.floor(duration / 86400);
const h = Math.floor((duration % 86400) / 3600);
const m = Math.floor((duration % 3600) / 60);
const s = Math.floor(duration % 60);
return d > 0 ? `${d}d` : h > 0 ? `${h}h` : m > 0 ? `${m}m` : `${s}s`;
}

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="37.07" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"></path><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"></path><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"></path></svg>

Before

Width:  |  Height:  |  Size: 496 B

View File

@ -1,90 +0,0 @@
<script setup lang="ts">
import {format2Size, getBaseColor, getBlankColor} from '../api/utils.ts';
const props = defineProps<{
mountpoint: string;
device: string;
used: number;
total: number;
fstype: string;
}>();
const colorUsed = getBaseColor(props.used / props.total * 100);
const colorBlank = getBlankColor(props.used / props.total * 100);
</script>
<template>
<div class="disk">
<div class="hover-text">
<div class="left-text">
<span class="disk-text">{{ props.mountpoint }}</span>
</div>
<div class="right-text">
<span class="disk-text">{{ format2Size(props.used, props.total) }} [{{ props.fstype }}]</span>
</div>
</div>
<div class="progress-bar" style="display: flex; align-items: center">
<div class="disk-total" :style="{ backgroundColor: colorBlank }" style="margin-right: 0.5rem;">
<div class="disk-used"
:style="{ width: props.used / props.total * 100 + '%', backgroundColor: colorUsed }"></div>
</div>
<div style="color: var(--text-color-2)">
<div class="percentage" style="text-align: right">{{ (props.used / props.total * 100).toFixed(1) }}%</div>
</div>
</div>
</div>
</template>
<style scoped>
.disk {
margin-top: 0.75rem;
}
.disk-total {
height: 0.618rem;
width: 90%;
border-radius: 1rem;
display: flex;
align-items: center;
justify-content: flex-start;
overflow: hidden; /* Ensure the used part doesn't overflow */
}
.disk-used {
height: 100%;
left: 0;
top: 0;
clip-path: inset(0 0 0 0 round 1rem);
}
.hover-text {
width: 100%;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
text-align: center;
}
.left-text {
display: flex;
justify-content: flex-start;
}
.right-text {
display: flex;
justify-content: flex-end;
}
.disk-text {
font-size: 16px;
color: var(--text-color-2);
}
.percentage{
font-size: 14px;
color: var(--text-color-2);
}
</style>

View File

@ -1,41 +0,0 @@
<script setup lang="ts">
import { ref } from 'vue'
defineProps<{ msg: string }>()
const count = ref(0)
</script>
<template>
<h1>{{ msg }}</h1>
<div class="card">
<button type="button" @click="count++">count is {{ count }}</button>
<p>
Edit
<code>components/HelloWorld.vue</code> to test HMR
</p>
</div>
<p>
Check out
<a href="https://vuejs.org/guide/quick-start.html#local" target="_blank"
>create-vue</a
>, the official Vue + Vite starter
</p>
<p>
Learn more about IDE Support for Vue in the
<a
href="https://vuejs.org/guide/scaling-up/tooling.html#ide-support"
target="_blank"
>Vue Docs Scaling up Guide</a
>.
</p>
<p class="read-the-docs">Click on the Vite and Vue logos to learn more</p>
</template>
<style scoped>
.read-the-docs {
color: #888;
}
</style>

View File

@ -1,548 +0,0 @@
<script setup lang="ts">
import {Status} from "../api";
import {computed, onMounted, ref, watch} from "vue";
import * as echarts from "echarts";
import {
format2Size,
formatDate, formatDuration,
formatSizeByUnit,
formatUptime,
getBaseColor,
getBlankColor,
getReleaseInfo,
onlineTimeout
} from "../api/utils.ts";
import OutlineAnime from "./OutlineAnime.vue";
import Disk from "./Disk.vue";
import html2canvas from "html2canvas";
const props = defineProps<{
status: Status
}>()
const status = computed(
() => props.status
)
const uptime = ref(formatUptime(status.value.meta.uptime))
const cpuChartRef = ref(null);
const memoryChartRef = ref(null);
const swapChartRef = ref(null);
//
const netChartRef = ref(null);
let netStats: [number, number, number][] = []
const isOnline = ref(true)
const statusColor = computed(
() => isOnline.value ? '#22c55e' : '#ff4d4f'
)
const statusColor2 = computed(
() => isOnline.value ? '#80ffb0' : '#fd8182'
)
const deltaTime = ref('0')
const os = computed(() => {
return getReleaseInfo(status.value.meta.os.name, status.value.meta.os.version)
})
const memDetail = computed(() => {
return format2Size(status.value.hardware.mem.used, status.value.hardware.mem.total)
})
const swapDetail = computed(() => {
return status.value.hardware.swap.total > 0 ? format2Size(status.value.hardware.swap.used, status.value.hardware.swap.total) : 'N/A'
})
const gradientStyle = computed(() => {
return {
borderColor: `linear-gradient(90deg, ${statusColor.value}, ${statusColor2.value})`
}
})
const hoverBorderColor = computed(() => {
return statusColor.value
})
const fontFam = 'Josefin Sans'
function onMountedFunc() {
const cpuChart = echarts.init(cpuChartRef.value);
const memoryChart = echarts.init(memoryChartRef.value);
const swapChart = echarts.init(swapChartRef.value);
const netChart = echarts.init(netChartRef.value);
// style
const titleStyle = {
color: 'rgba(0, 0, 0, 0.8)',
fontSize: 18,
}
const radius = ['65%', '80%']
const netColor = ['#a2d8f4', '#0194e3'] // Tx Rx
const pieLabelPosition = 'center'
const emphasis = {
label: {
show: true,
fontSize: 15,
fontFamily: fontFam,
position: ['50%', '20%'] //
},
}
//
setInterval(() => {
if (isOnline.value) {
const deltaTime = (Date.now()) / 1000 - status.value.meta.observed_at
uptime.value = formatUptime(status.value.meta.uptime + deltaTime)
}
}, 1000)
function update() {
const timeDiff = (Date.now()) / 1000 - status.value.meta.observed_at
deltaTime.value = formatDuration(timeDiff)
// push
if (netStats.length === 0 || netStats[netStats.length - 1][0] !== status.value.meta.observed_at) {
netStats.push([status.value.meta.observed_at, status.value.hardware.net.up, status.value.hardware.net.down]) //
}
if (netStats.length > 20) {
netStats.shift()
}
isOnline.value = timeDiff <= onlineTimeout;
cpuChart.setOption(
{
color: [
getBaseColor(status.value.hardware.cpu.percent),
getBlankColor(status.value.hardware.cpu.percent)
],
title: {
text: status.value.hardware.cpu.percent + '%',
left: 'center',
top: 'center',
textStyle: titleStyle,
},
textStyle: {
fontFamily: fontFam
},
series: [
{
type: 'pie',
radius: radius,
avoidLabelOverlap: false,
label: {
show: false,
position: pieLabelPosition
},
emphasis: emphasis,
labelLine: {
show: false
},
data: computed(
() => [
{value: status.value.hardware.cpu.percent, name: 'Used'},
{value: 100 - status.value.hardware.cpu.percent, name: 'Free'}
]
).value
}
]
}
)
memoryChart.setOption(
{
color: [
getBaseColor(status.value.hardware.mem.used / status.value.hardware.mem.total * 100),
getBlankColor(status.value.hardware.mem.used / status.value.hardware.mem.total * 100)
],
title: {
text: `${(status.value.hardware.mem.used / status.value.hardware.mem.total * 100).toFixed(1)}%`,
left: 'center',
top: 'center',
textStyle: titleStyle
},
textStyle: {
fontFamily: fontFam
},
series: [
{
type: 'pie',
radius: radius,
avoidLabelOverlap: false,
label: {
show: false,
position: pieLabelPosition
},
emphasis: emphasis,
labelLine: {
show: false
},
data: [
{value: status.value.hardware.mem.used, name: 'Used'},
{value: status.value.hardware.mem.total - status.value.hardware.mem.used, name: 'Free'}
]
}
]
}
)
swapChart.setOption(
{
color: [
getBaseColor(status.value.hardware.swap.used / status.value.hardware.swap.total * 100, status.value.hardware.swap.total <= 0),
getBlankColor(status.value.hardware.swap.used / status.value.hardware.swap.total * 100, status.value.hardware.swap.total <= 0)
],
title: {
text: status.value.hardware.swap.total > 0 ? `${(status.value.hardware.swap.used / status.value.hardware.swap.total * 100).toFixed(1)}%` : 'N/A',
left: 'center',
top: 'center',
textStyle: titleStyle,
},
textStyle: {
fontFamily: fontFam
},
series: [
{
type: 'pie',
radius: radius,
avoidLabelOverlap: false,
label: {
show: false,
position: pieLabelPosition
},
emphasis: emphasis,
labelLine: {
show: false
},
data: [
{value: status.value.hardware.swap.total > 0 ? status.value.hardware.swap.used : 0, name: 'Used'},
{
value: status.value.hardware.swap.total > 0 ? status.value.hardware.swap.total - status.value.hardware.swap.used : 100,
name: 'Free'
}
]
}
]
}
)
netChart.setOption(
{
color: netColor,
title: {
textStyle: titleStyle
},
textStyle: {
fontFamily: fontFam
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#0f7bc5',
borderRadius: 50,
formatter: function (params: any) {
if (params.axisDimension === 'y') {
return formatSizeByUnit(params.value * 8, null, 'bps');
} else {
return formatDate(params.value, true);
}
},
}
},
formatter: function (params: any) {
let result = formatDate(params[0].name, true) + '<br/>';
params.forEach(function (item: any) {
result += item.marker + (item.seriesName == 'Tx' ? '↑' : '↓') + ': ' + formatSizeByUnit(item.value * 8, null, 'bps') + '<br/>';
});
return result;
},
},
toolbox: {
feature: {}
},
grid: {
top: '25%',
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
boundaryGap: false,
data: netStats.map(item => item[0]),
axisLabel: {
formatter: function (value: number) {
return formatDate(value, true)
},
}
}
],
yAxis: [
{
type: 'value',
axisLabel: {
formatter: function (value: number) {
return formatSizeByUnit(value * 8, null, 'b')
},
}
}
],
series: [
{
name: 'Tx',
type: 'line',
stack: 'Total',
areaStyle: {},
emphasis: {
focus: 'series',
},
data: netStats.map(item => item[1]),
showSymbol: false,
lineStyle: {
type: 'dashed'
}
},
{
name: 'Rx',
type: 'line',
stack: 'Total',
areaStyle: {},
emphasis: {
focus: 'series'
},
data: netStats.map(item => item[2]),
showSymbol: false
}
]
}
)
}
update()
watch(
() => status.value,
() => {
update()
}
)
}
// link.download = `screenshot-${status.value.meta.id}-${formatDate(Date.now(), false)}.svg`;
function downloadScreenshot() {
const hostElement = document.querySelector(".host#" + status.value.meta.id);
if (hostElement) {
html2canvas(<HTMLElement>hostElement, {scale: 2}).then((canvas) => {
const dataURL = canvas.toDataURL("image/png");
const link = document.createElement("a");
link.href = dataURL;
link.download = `screenshot-${status.value.meta.id}-${formatDate(Date.now(), false)}.png`;
link.click();
});
}
}
onMounted(
() => {
onMountedFunc()
}
)
</script>
<template>
<div class="host" :style="[gradientStyle, { '--hover-border-color': hoverBorderColor }]" :id="status.meta.id">
<!-- 主机名-->
<div class="host-name">{{ status.meta.name }}</div>
<div class="meta-1" style="display: flex; justify-content: space-between">
<div class="meta1-left" style="display: flex; justify-content: flex-start; align-items: center">
<OutlineAnime class="outline-anime" :color="statusColor" :spreadColor="statusColor2" :is-online="isOnline"/>&nbsp;
<div class="uptime time-tag" style="margin-right: 5px"
:style="{backgroundColor: statusColor2, borderColor: statusColor}">{{ uptime }}
</div>
<div class="offline-time time-tag" v-if="!isOnline">
Offline for {{ deltaTime }}
</div>
</div>
<div class="meta1-right" style="display: flex; justify-content: flex-end; align-items: center">
<img @click="downloadScreenshot" src="/svg/screenshots.svg" alt="download" style="width: 20px; height: 20px">
</div>
</div>
<div class="meta-2">
<div class="section">
<img class="icon" :src="os.icon" alt="system">
<span class="meta2-text">{{ os.name }} {{ status.meta.os.release }} · {{ status.meta.os.machine }}</span>
</div>
<div class="section">
<img class="icon" src="/svg/timezone.svg" alt="location">
<span class="meta2-text">{{ status.meta.location }} · {{ status.meta.timezone }}</span>
</div>
<div class="labels section" style="display: flex">
<img class="icon" src="/svg/label.svg" alt="labels">
<span><span class="label meta2-text" v-for="label in status.meta.labels" :key="label">{{ label }}</span></span>
</div>
</div>
<hr>
<div class="section-name">
Hardware
</div>
<div class="charts-container" style="display: flex; justify-content: space-between">
<div class="cpu-info hw-info">
<div class="chart" ref="cpuChartRef"></div>
<div class="hw-title">CPU</div>
<div class="hw-detail">{{ status.hardware.cpu.cores }}C {{ status.hardware.cpu.logics }}T</div>
</div>
<div class="memory-info hw-info">
<div class="chart" ref="memoryChartRef"></div>
<div class="hw-title">Mem</div>
<div class="hw-detail">{{ memDetail }}</div>
</div>
<div class="swap-info hw-info">
<div class="chart" ref="swapChartRef"></div>
<div class="hw-title">Swap</div>
<div class="hw-detail">{{ swapDetail }}</div>
</div>
</div>
<hr>
<!-- -->
<div class="net">
<div class="section-name">
Network
</div>
<div class="net-chart" ref="netChartRef"></div>
</div>
<hr>
<!-- -->
<div class="disks">
<div class="section-name">
Storage
</div>
<Disk v-for="disk in status.hardware.disks" :key="disk.mountpoint" :mountpoint="disk.mountpoint"
:device="disk.device" :used="disk.used" :total="disk.total" :fstype="disk.fstype"/>
</div>
</div>
</template>
<style scoped>
:root {
--liteyuki-color-1: #d0e9ff;
--liteyuki-color-2: #a2d8f4;
--hover-border-color: #ccc;
}
.host {
padding: 1rem;
border: 2px solid #ccc;
border-radius: 20px;
flex-direction: column;
justify-content: space-between;
transition: border-color 0.3s ease;
}
.host:hover {
border-color: var(--hover-border-color); /* Change border color on hover */
}
.meta-1 {
.outline-anime {
margin-right: 0.5em;
}
}
.host-name {
text-align: center;
font-size: 1.5rem;
font-weight: bold;
}
.meta-2 {
margin-top: 0.5em;
.meta2-text {
font-size: 0.9rem;
color: var(--text-color-2);
}
.section {
margin-bottom: 0.5rem;
justify-content: flex-start;
}
}
.labels {
margin-top: 0.5em;
.label {
padding: 0.05rem 0.5rem;
border: 1px dashed;
border-color: var(--text-color-1);
border-radius: 50px;
margin-right: 0.5rem;
background-color: #dfdfdf;
color: var(--text-color-1);
font-size: 0.8rem;
}
}
.icon {
margin-right: 0.618rem;
height: 16px;
}
.section {
display: flex;
margin-right: 10px;
align-items: center;
}
.time-tag {
padding: 0 0.5rem;
font-size: 0.8rem;
border-radius: 50px;
border: 1px dashed;
align-items: center;
}
.charts-container {
.hw-info {
width: 30%;
align-items: center;
.chart {
width: 100%;
aspect-ratio: 1;
}
.hw-title {
text-align: center;
font-size: 0.9rem;
}
.hw-detail {
text-align: center;
font-size: 0.7rem;
}
}
}
.section-name {
text-align: center;
font-size: 1rem;
font-weight: bold;
}
.net {
.net-chart {
width: 100%;
aspect-ratio: 2;
}
}
</style>

View File

@ -1,48 +0,0 @@
<script setup lang="ts">
import router from "../router/index.ts"
</script>
<template>
<!-- 三部分 点击侧栏, logo, 语言-->
<div class="navbar">
<div class="navbar-left">
</div>
<div class="navbar-center">
</div>
<div class="navbar-right">
<div v-for="route in router.getRoutes()">
<router-link :to="route.path" :key="route.name">
{{ route.name }}
</router-link>
</div>
</div>
</div>
</template>
<style scoped>
.navbar {
z-index: 3;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 20px;
height: 80px;
background-color: #d0e9ff;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.navbar-left img {
height: 40px;
}
.navbar-left,
.navbar-right {
display: flex;
align-items: center;
}
.navbar-center img {
height: 80px;
}
</style>

View File

@ -1,53 +0,0 @@
<template>
<div class="online-status">
<div class="dot" :style="{ backgroundColor: props.color }"></div>
<div class="pulse" v-if="isOnline" :style="{ backgroundColor: props.spreadColor }"></div>
</div>
</template>
<script setup lang="ts">
import { defineProps } from 'vue';
const props = defineProps<{
color: string;
spreadColor: string;
isOnline: boolean;
}>();
</script>
<style scoped>
.online-status {
position: relative;
width: 15px;
height: 15px;
}
.dot {
width: 100%;
height: 100%;
border-radius: 50%;
z-index: 1; /* Ensure the base color layer is on top */
}
.pulse {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: 50%;
animation: pulse 1.5s infinite;
z-index: 0; /* Ensure the radar layer is below the base color layer */
}
@keyframes pulse {
0% {
transform: scale(1);
opacity: 1;
}
100% {
transform: scale(2);
opacity: 0;
}
}
</style>

View File

@ -1,10 +0,0 @@
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
import router from "./router";
// createApp(App).use(router).mount('#app')
const app = createApp(App)
app.use(router)
app.mount('#app')

View File

@ -1,23 +0,0 @@
import {createRouter, createWebHistory} from "vue-router"
import Home from "../views/Home.vue"
import Test from "../views/Test.vue"
const routes = [
{
path: '/',
name: '主页',
component: Home
},
{
path: '/test',
name: '测试',
component: Test
}
]
const router = createRouter({
history: createWebHistory("/"),
routes
})
export default router

View File

@ -1,89 +0,0 @@
:root {
font-family: 'Josefin Sans', sans-serif;
line-height: 1.5;
font-weight: 400;
color-scheme: light dark;
color: #000;
background-color: #fff;
font-synthesis: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
--text-color-1: #000;
--text-color-2: #5f5f5f;
}
.dark {
color: #fff;
background-color: #000;
}
a {
font-weight: 500;
color: #646cff;
text-decoration: inherit;
}
a:hover {
color: #535bf2;
}
/*body {*/
/* margin: 0;*/
/* display: flex;*/
/* place-items: center;*/
/* min-width: 320px;*/
/* min-height: 100vh;*/
/*}*/
/*h1 {*/
/* font-size: 3.2em;*/
/* line-height: 1.1;*/
/*}*/
/*button {*/
/* border-radius: 8px;*/
/* border: 1px solid transparent;*/
/* padding: 0.6em 1.2em;*/
/* font-size: 1em;*/
/* font-weight: 500;*/
/* font-family: inherit;*/
/* background-color: #1a1a1a;*/
/* cursor: pointer;*/
/* transition: border-color 0.25s;*/
/*}*/
/*button:hover {*/
/* border-color: #646cff;*/
/*}*/
/*button:focus,*/
/*button:focus-visible {*/
/* outline: 4px auto -webkit-focus-ring-color;*/
/*}*/
/*.card {*/
/* padding: 2em;*/
/*}*/
/*#app {*/
/* max-width: 1280px;*/
/* margin: 0 auto;*/
/* padding: 2rem;*/
/* text-align: center;*/
/*}*/
/*@media (prefers-color-scheme: light) {*/
/* :root {*/
/* color: #213547;*/
/* background-color: #ffffff;*/
/* }*/
/* a:hover {*/
/* color: #747bff;*/
/* }*/
/* button {*/
/* background-color: #f9f9f9;*/
/* }*/
/*}*/

View File

@ -1,160 +0,0 @@
<script setup lang="ts">
import { computed, onMounted, onUnmounted, Ref, ref } from "vue";
import { getStatuses, Status } from "../api";
import Host from "../components/Host.vue";
import { onlineTimeout } from "../api/utils.ts";
const statuses: Ref<Record<string, Status>> = ref({});
const offline = ref(0);
const showOptions = ref(false);
const selectedOption = ref('');
const sortedKey = ref('name');
const reverse = ref(false);
const toggleOptions = () => {
showOptions.value = !showOptions.value;
};
const selectOption = (option: string) => {
selectedOption.value = option;
sortedKey.value = option;
};
const onlineNum = computed(() => {
const nowTimestamp = Date.now() / 1000;
let online = 0;
for (const status of Object.values(statuses.value)) {
if (nowTimestamp - status.meta.observed_at < onlineTimeout) {
online++;
}
}
offline.value = Object.values(statuses.value).length - online;
return online;
});
function sortByName(statusMap: Record<string, Status>) {
return Object.fromEntries(
Object.entries(statusMap).sort((a, b) => a[1].meta.name.localeCompare(b[1].meta.name))
);
}
function sortByUpTime(statusMap: Record<string, Status>) {
return Object.fromEntries(
Object.entries(statusMap).sort((a, b) => a[1].meta.uptime - b[1].meta.uptime)
);
}
function updateSort(statusMap: Record<string, Status>) {
let sortedMap = statusMap;
if (sortedKey.value === 'name') {
sortedMap = sortByName(statusMap);
} else if (sortedKey.value === 'uptime') {
sortedMap = sortByUpTime(statusMap);
} else if (sortedKey.value === 'memory') {
sortedMap = Object.fromEntries(
Object.entries(statusMap).sort((a, b) => a[1].hardware.mem.total - b[1].hardware.mem.total)
);
} else if (sortedKey.value === 'network') {
sortedMap = Object.fromEntries(
Object.entries(statusMap).sort((a, b) => a[1].hardware.net.down + a[1].hardware.net.up - b[1].hardware.net.down - b[1].hardware.net.up)
);
}
if (reverse.value) {
sortedMap = Object.fromEntries(Object.entries(sortedMap).reverse());
}
return sortedMap;
}
const timer = setInterval(async () => {
statuses.value = updateSort(await getStatuses());
}, 1000);
onMounted(async () => {
statuses.value = updateSort(await getStatuses());
});
onUnmounted(() => {
clearInterval(timer);
});
</script>
<template>
<div class="overview">
<h2>Overview: {{ onlineNum }} Online {{ offline }} Offline</h2>
</div>
<div class="tabs" style="display: flex">
<button class="button-a" @click="toggleOptions">Sort by</button>
<transition name="slide-fade">
<div v-if="showOptions" class="options">
<button :class="{ selected: selectedOption === 'name' }" @click="() => selectOption('name')">Name</button>
<button :class="{ selected: selectedOption === 'uptime' }" @click="() => selectOption('uptime')">Uptime</button>
<button :class="{ selected: selectedOption === 'memory' }" @click="() => selectOption('memory')">Memory</button>
<button :class="{ selected: selectedOption === 'network' }" @click="() => selectOption('network')">Network</button>
<!-- <button :class="{ selected: selectedOption === 'cpu' }" @click="() => selectOption('cpu')">CPU Percent</button>-->
<button :class="{ selected: reverse }" @click="() => reverse= !reverse" id="reverse-button">Reverse</button>
</div>
</transition>
</div>
<div class="grid-container">
<Host class="grid-item" v-for="(status, id) in statuses" :key="id" :status="status" />
</div>
</template>
<style scoped>
.tabs{
margin-bottom: 1rem;
}
.button-a{
margin-left: 10px;
}
button {
margin: 10px 10px 0 0;
padding: 0.5rem 0.5rem;
border-radius: 50px;
border: none;
background: #36a7ec;
}
#reverse-button {
background: #05c860;
}
#reverse-button.selected {
background: #ff6347;
}
button.selected {
background: #ff6347; /* Selected button background color */
}
.overview {
display: flex;
justify-content: center;
padding: 10px;
}
.grid-container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
gap: 20px;
padding: 10px;
}
.options {
display: flex;
gap: 10px;
}
.slide-fade-enter-active, .slide-fade-leave-active {
transition: all 0.5s ease;
}
.slide-fade-enter-from, .slide-fade-leave-to {
transform: translateX(-100%);
opacity: 0;
}
</style>

View File

@ -1,11 +0,0 @@
<script setup lang="ts">
</script>
<template>
Test
</template>
<style scoped>
</style>

View File

@ -1 +0,0 @@
/// <reference types="vite/client" />

View File

@ -1,24 +0,0 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"module": "ESNext",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"isolatedModules": true,
"moduleDetection": "force",
"noEmit": true,
"jsx": "preserve",
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true
},
"include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"]
}

View File

@ -1 +0,0 @@
{"root":["./src/main.ts","./src/vite-env.d.ts","./src/api/index.ts","./src/api/node.ts","./src/api/utils.ts","./src/router/index.ts","./src/App.vue","./src/components/Disk.vue","./src/components/HelloWorld.vue","./src/components/Host.vue","./src/components/Nav.vue","./src/components/OutlineAnime.vue","./src/views/Home.vue","./src/views/Test.vue"],"version":"5.6.2"}

View File

@ -1,11 +0,0 @@
{
"files": [],
"references": [
{
"path": "./tsconfig.app.json"
},
{
"path": "./tsconfig.node.json"
}
]
}

View File

@ -1,22 +0,0 @@
{
"compilerOptions": {
"target": "ES2022",
"lib": ["ES2023"],
"module": "ESNext",
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"isolatedModules": true,
"moduleDetection": "force",
"noEmit": true,
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true
},
"include": ["vite.config.ts"]
}

View File

@ -1 +0,0 @@
{"root":["./vite.config.ts"],"version":"5.6.2"}

View File

@ -1,7 +0,0 @@
import {defineConfig} from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()],
})