From 579b047eccc86de1b55c148efe5d2942a259305a Mon Sep 17 00:00:00 2001 From: Daniil Isakov <12859907+oplexz@users.noreply.github.com> Date: Fri, 12 Jan 2024 00:24:12 +0300 Subject: [PATCH] Initialize new Vue project; move existing contents --- src/webui/.gitignore | 30 + src/webui/index.html | 16 + src/webui/jsconfig.json | 8 + src/webui/package-lock.json | 2374 +++++++++++++++++++++ src/webui/package.json | 21 + src/webui/postcss.config.js | 6 + src/webui/public/img/apple-touch-icon.png | Bin 0 -> 70851 bytes src/webui/public/img/favicon.png | Bin 0 -> 2948 bytes src/webui/public/manifest.json | 11 + src/webui/src/App.vue | 1270 +++++++++++ src/webui/src/assets/img/logo.png | Bin 0 -> 3103 bytes src/webui/src/assets/style.css | 3 + src/webui/src/main.js | 6 + src/webui/tailwind.config.js | 11 + src/webui/vite.config.js | 16 + 15 files changed, 3772 insertions(+) create mode 100644 src/webui/.gitignore create mode 100644 src/webui/index.html create mode 100644 src/webui/jsconfig.json create mode 100644 src/webui/package-lock.json create mode 100644 src/webui/package.json create mode 100644 src/webui/postcss.config.js create mode 100644 src/webui/public/img/apple-touch-icon.png create mode 100644 src/webui/public/img/favicon.png create mode 100644 src/webui/public/manifest.json create mode 100644 src/webui/src/App.vue create mode 100644 src/webui/src/assets/img/logo.png create mode 100644 src/webui/src/assets/style.css create mode 100644 src/webui/src/main.js create mode 100644 src/webui/tailwind.config.js create mode 100644 src/webui/vite.config.js diff --git a/src/webui/.gitignore b/src/webui/.gitignore new file mode 100644 index 00000000..8ee54e8d --- /dev/null +++ b/src/webui/.gitignore @@ -0,0 +1,30 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo diff --git a/src/webui/index.html b/src/webui/index.html new file mode 100644 index 00000000..3e43c5c6 --- /dev/null +++ b/src/webui/index.html @@ -0,0 +1,16 @@ + + + + + WireGuard + + + + + + + +
+ + + diff --git a/src/webui/jsconfig.json b/src/webui/jsconfig.json new file mode 100644 index 00000000..5a1f2d22 --- /dev/null +++ b/src/webui/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + }, + "exclude": ["node_modules", "dist"] +} diff --git a/src/webui/package-lock.json b/src/webui/package-lock.json new file mode 100644 index 00000000..60f52966 --- /dev/null +++ b/src/webui/package-lock.json @@ -0,0 +1,2374 @@ +{ + "name": "webui", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "webui", + "version": "0.0.0", + "dependencies": { + "vue": "^3.3.11" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^4.5.2", + "autoprefixer": "^10.4.16", + "postcss": "^8.4.33", + "tailwindcss": "^3.4.1", + "vite": "^5.0.10" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", + "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", + "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", + "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", + "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz", + "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", + "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", + "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", + "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", + "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", + "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", + "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", + "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", + "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", + "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", + "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", + "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", + "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", + "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", + "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", + "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", + "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", + "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", + "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.4.tgz", + "integrity": "sha512-ub/SN3yWqIv5CWiAZPHVS1DloyZsJbtXmX4HxUTIpS0BHm9pW5iYBo2mIZi+hE3AeiTzHz33blwSnhdUo+9NpA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.4.tgz", + "integrity": "sha512-ehcBrOR5XTl0W0t2WxfTyHCR/3Cq2jfb+I4W+Ch8Y9b5G+vbAecVv0Fx/J1QKktOrgUYsIKxWAKgIpvw56IFNA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.4.tgz", + "integrity": "sha512-1fzh1lWExwSTWy8vJPnNbNM02WZDS8AW3McEOb7wW+nPChLKf3WG2aG7fhaUmfX5FKw9zhsF5+MBwArGyNM7NA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.4.tgz", + "integrity": "sha512-Gc6cukkF38RcYQ6uPdiXi70JB0f29CwcQ7+r4QpfNpQFVHXRd0DfWFidoGxjSx1DwOETM97JPz1RXL5ISSB0pA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.4.tgz", + "integrity": "sha512-g21RTeFzoTl8GxosHbnQZ0/JkuFIB13C3T7Y0HtKzOXmoHhewLbVTFBQZu+z5m9STH6FZ7L/oPgU4Nm5ErN2fw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.4.tgz", + "integrity": "sha512-TVYVWD/SYwWzGGnbfTkrNpdE4HON46orgMNHCivlXmlsSGQOx/OHHYiQcMIOx38/GWgwr/po2LBn7wypkWw/Mg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.4.tgz", + "integrity": "sha512-XcKvuendwizYYhFxpvQ3xVpzje2HHImzg33wL9zvxtj77HvPStbSGI9czrdbfrf8DGMcNNReH9pVZv8qejAQ5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.4.tgz", + "integrity": "sha512-LFHS/8Q+I9YA0yVETyjonMJ3UA+DczeBd/MqNEzsGSTdNvSJa1OJZcSH8GiXLvcizgp9AlHs2walqRcqzjOi3A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.4.tgz", + "integrity": "sha512-dIYgo+j1+yfy81i0YVU5KnQrIJZE8ERomx17ReU4GREjGtDW4X+nvkBak2xAUpyqLs4eleDSj3RrV72fQos7zw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.4.tgz", + "integrity": "sha512-RoaYxjdHQ5TPjaPrLsfKqR3pakMr3JGqZ+jZM0zP2IkDtsGa4CqYaWSfQmZVgFUCgLrTnzX+cnHS3nfl+kB6ZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.4.tgz", + "integrity": "sha512-T8Q3XHV+Jjf5e49B4EAaLKV74BbX7/qYBRQ8Wop/+TyyU0k+vSjiLVSHNWdVd1goMjZcbhDmYZUYW5RFqkBNHQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.4.tgz", + "integrity": "sha512-z+JQ7JirDUHAsMecVydnBPWLwJjbppU+7LZjffGf+Jvrxq+dVjIE7By163Sc9DKc3ADSU50qPVw0KonBS+a+HQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.4.tgz", + "integrity": "sha512-LfdGXCV9rdEify1oxlN9eamvDSjv9md9ZVMAbNHA87xqIfFCxImxan9qZ8+Un54iK2nnqPlbnSi4R54ONtbWBw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@vitejs/plugin-vue": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz", + "integrity": "sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0 || ^5.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.10.tgz", + "integrity": "sha512-53vxh7K9qbx+JILnGEhrFRyr7H7e4NdT8RuTNU3m6HhJKFvcAqFTNXpYMHnyuAzzRGdsbsYHBgQC3H6xEXTG6w==", + "dependencies": { + "@babel/parser": "^7.23.6", + "@vue/shared": "3.4.10", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.10.tgz", + "integrity": "sha512-QAALBJksIFpXGYuo74rtMgnwpVZDvd3kYbUa4gYX9s/5QiqEvZSgbKtOdUGydXcxKPt3ifC+0/bhPVHXN2694A==", + "dependencies": { + "@vue/compiler-core": "3.4.10", + "@vue/shared": "3.4.10" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.10.tgz", + "integrity": "sha512-sTOssaQySgrMjrhZxmAqdp6n+E51VteIVIDaOR537H2P63DyzMmig21U0XXFxiXmMIfrK91lAInnc+bIAYemGw==", + "dependencies": { + "@babel/parser": "^7.23.6", + "@vue/compiler-core": "3.4.10", + "@vue/compiler-dom": "3.4.10", + "@vue/compiler-ssr": "3.4.10", + "@vue/shared": "3.4.10", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.5", + "postcss": "^8.4.32", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.10.tgz", + "integrity": "sha512-Y90TL1abretWbUiK5rv+9smS1thCHE5sSuhZgiLh6cxgZ2Pcy3BEvDd3reID0iwNcTdMbTeE6NI3Aq4Mux6hqQ==", + "dependencies": { + "@vue/compiler-dom": "3.4.10", + "@vue/shared": "3.4.10" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.10.tgz", + "integrity": "sha512-SmGGpo37LzPcAFTopHNIJRNVOQfma9YgyPkAzx9/TJ01lbCCYigS28hEcY1hjiJ1PRK8iVX62Ov5yzmUgYH/pQ==", + "dependencies": { + "@vue/shared": "3.4.10" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.10.tgz", + "integrity": "sha512-Ri2Cz9sFr66AEUewGUK8IXhIUAhshTHVUGuJR8pqMbtjIds+zPa8QPO5UZImGMQ8HTY7eEpKwztCct9V3+Iqug==", + "dependencies": { + "@vue/reactivity": "3.4.10", + "@vue/shared": "3.4.10" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.10.tgz", + "integrity": "sha512-ROsdi5M2niRDmjXJNZ8KKiGwXyG1FO8l9n6sCN0kaJEHbjWkuigu96YAI3fK/AWUZPSXXEcMEBVPC6rL3mmUuA==", + "dependencies": { + "@vue/runtime-core": "3.4.10", + "@vue/shared": "3.4.10", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.10.tgz", + "integrity": "sha512-WpCBAhesLq44JKWfdFqb+Bi4ACUW0d8x1z90GnE0spccsAlEDMXV5nm+pwXLyW0OdP2iPrO/n/QMJh4B1v9Ciw==", + "dependencies": { + "@vue/compiler-ssr": "3.4.10", + "@vue/shared": "3.4.10" + }, + "peerDependencies": { + "vue": "3.4.10" + } + }, + "node_modules/@vue/shared": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.10.tgz", + "integrity": "sha512-C0mIVhwW1xQLMFyqMJxnhq6fWyE02lCgcE+TDdtGpg6B3H6kh/0YcqS54qYc76UJNlWegf3VgsLqgk6D9hBmzQ==" + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/autoprefixer": { + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001576", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", + "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.628", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.628.tgz", + "integrity": "sha512-2k7t5PHvLsufpP6Zwk0nof62yLOsCf032wZx7/q0mv8gwlXjhcxI3lz6f0jBr0GrnWKcm3burXzI3t5IrcdUxw==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", + "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.11", + "@esbuild/android-arm": "0.19.11", + "@esbuild/android-arm64": "0.19.11", + "@esbuild/android-x64": "0.19.11", + "@esbuild/darwin-arm64": "0.19.11", + "@esbuild/darwin-x64": "0.19.11", + "@esbuild/freebsd-arm64": "0.19.11", + "@esbuild/freebsd-x64": "0.19.11", + "@esbuild/linux-arm": "0.19.11", + "@esbuild/linux-arm64": "0.19.11", + "@esbuild/linux-ia32": "0.19.11", + "@esbuild/linux-loong64": "0.19.11", + "@esbuild/linux-mips64el": "0.19.11", + "@esbuild/linux-ppc64": "0.19.11", + "@esbuild/linux-riscv64": "0.19.11", + "@esbuild/linux-s390x": "0.19.11", + "@esbuild/linux-x64": "0.19.11", + "@esbuild/netbsd-x64": "0.19.11", + "@esbuild/openbsd-x64": "0.19.11", + "@esbuild/sunos-x64": "0.19.11", + "@esbuild/win32-arm64": "0.19.11", + "@esbuild/win32-ia32": "0.19.11", + "@esbuild/win32-x64": "0.19.11" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "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, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.33", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", + "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", + "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.4.tgz", + "integrity": "sha512-2ztU7pY/lrQyXSCnnoU4ICjT/tCG9cdH3/G25ERqE3Lst6vl2BCM5hL2Nw+sslAvAf+ccKsAq1SkKQALyqhR7g==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.9.4", + "@rollup/rollup-android-arm64": "4.9.4", + "@rollup/rollup-darwin-arm64": "4.9.4", + "@rollup/rollup-darwin-x64": "4.9.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.4", + "@rollup/rollup-linux-arm64-gnu": "4.9.4", + "@rollup/rollup-linux-arm64-musl": "4.9.4", + "@rollup/rollup-linux-riscv64-gnu": "4.9.4", + "@rollup/rollup-linux-x64-gnu": "4.9.4", + "@rollup/rollup-linux-x64-musl": "4.9.4", + "@rollup/rollup-win32-arm64-msvc": "4.9.4", + "@rollup/rollup-win32-ia32-msvc": "4.9.4", + "@rollup/rollup-win32-x64-msvc": "4.9.4", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/vite": { + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.11.tgz", + "integrity": "sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.32", + "rollup": "^4.2.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": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.10.tgz", + "integrity": "sha512-c+O8qGqdWPF9joTCzMGeDDedViooh6c8RY3+eW5+6GCAIY8YjChmU06LsUu0PnMZbIk1oKUoJTqKzmghYtFypw==", + "dependencies": { + "@vue/compiler-dom": "3.4.10", + "@vue/compiler-sfc": "3.4.10", + "@vue/runtime-dom": "3.4.10", + "@vue/server-renderer": "3.4.10", + "@vue/shared": "3.4.10" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "dev": true, + "engines": { + "node": ">= 14" + } + } + } +} diff --git a/src/webui/package.json b/src/webui/package.json new file mode 100644 index 00000000..379ce505 --- /dev/null +++ b/src/webui/package.json @@ -0,0 +1,21 @@ +{ + "name": "webui", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "vue": "^3.3.11" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^4.5.2", + "autoprefixer": "^10.4.16", + "postcss": "^8.4.33", + "tailwindcss": "^3.4.1", + "vite": "^5.0.10" + } +} diff --git a/src/webui/postcss.config.js b/src/webui/postcss.config.js new file mode 100644 index 00000000..2e7af2b7 --- /dev/null +++ b/src/webui/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/src/webui/public/img/apple-touch-icon.png b/src/webui/public/img/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2ebeee55c62b7f3a820b11463d8582dc93282470 GIT binary patch literal 70851 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 literal 0 HcmV?d00001 diff --git a/src/webui/public/img/favicon.png b/src/webui/public/img/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..470e2e9b367b168733e6b51f7d0d59d3d5036154 GIT binary patch literal 2948 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 +import { ref, reactive } from "vue"; + +class API { + async call({ method, path, body }) { + const res = await fetch(`./api${path}`, { + method, + headers: { + "Content-Type": "application/json", + }, + body: body ? JSON.stringify(body) : undefined, + }); + + if (res.status === 204) { + return undefined; + } + + const json = await res.json(); + + if (!res.ok) { + throw new Error(json.error || res.statusText); + } + + return json; + } + + async getRelease() { + return this.call({ + method: "get", + path: "/release", + }); + } + + async getSession() { + return this.call({ + method: "get", + path: "/session", + }); + } + + async createSession({ password }) { + return this.call({ + method: "post", + path: "/session", + body: { password }, + }); + } + + async deleteSession() { + return this.call({ + method: "delete", + path: "/session", + }); + } + + async getClients() { + return this.call({ + method: "get", + path: "/wireguard/client", + }).then((clients) => + clients.map((client) => ({ + ...client, + createdAt: new Date(client.createdAt), + updatedAt: new Date(client.updatedAt), + latestHandshakeAt: client.latestHandshakeAt !== null ? new Date(client.latestHandshakeAt) : null, + })) + ); + } + + async createClient({ name }) { + return this.call({ + method: "post", + path: "/wireguard/client", + body: { name }, + }); + } + + async deleteClient({ clientId }) { + return this.call({ + method: "delete", + path: `/wireguard/client/${clientId}`, + }); + } + + async enableClient({ clientId }) { + return this.call({ + method: "post", + path: `/wireguard/client/${clientId}/enable`, + }); + } + + async disableClient({ clientId }) { + return this.call({ + method: "post", + path: `/wireguard/client/${clientId}/disable`, + }); + } + + async updateClientName({ clientId, name }) { + return this.call({ + method: "put", + path: `/wireguard/client/${clientId}/name/`, + body: { name }, + }); + } + + async updateClientAddress({ clientId, address }) { + return this.call({ + method: "put", + path: `/wireguard/client/${clientId}/address/`, + body: { address }, + }); + } +} + +export default { + setup() { + const authenticated = ref(null); + const authenticating = ref(false); + const password = ref(null); + const requiresPassword = ref(null); + + const clients = ref(null); + const clientsPersist = reactive({}); + const clientDelete = ref(null); + const clientCreate = ref(null); + const clientCreateName = ref(""); + const clientEditName = ref(null); + const clientEditNameId = ref(null); + const clientEditAddress = ref(null); + const clientEditAddressId = ref(null); + const qrcode = ref(null); + + const currentRelease = ref(null); + const latestRelease = ref(null); + + const isDark = ref(null); + + const chartOptions = reactive({ + chart: { + background: "transparent", + type: "bar", + stacked: false, + toolbar: { + show: false, + }, + animations: { + enabled: false, + }, + }, + colors: [ + "#DDDDDD", // rx + "#EEEEEE", // tx + ], + dataLabels: { + enabled: false, + }, + plotOptions: { + bar: { + horizontal: false, + }, + }, + xaxis: { + labels: { + show: false, + }, + axisTicks: { + show: true, + }, + axisBorder: { + show: true, + }, + }, + yaxis: { + labels: { + show: false, + }, + min: 0, + }, + tooltip: { + enabled: false, + }, + legend: { + show: false, + }, + grid: { + show: false, + padding: { + left: -10, + right: 0, + bottom: -15, + top: -15, + }, + column: { + opacity: 0, + }, + xaxis: { + lines: { + show: false, + }, + }, + }, + }); + + const api = new API(); + + const dateTime = (value) => { + return new Intl.DateTimeFormat(undefined, { + year: "numeric", + month: "short", + day: "numeric", + hour: "numeric", + minute: "numeric", + }).format(value); + }; + + const refresh = async ({ updateCharts = false } = {}) => { + if (!authenticated.value) return; + + const clientsData = await api.getClients(); + clients.value = clientsData.map((client) => { + if (client.name.includes("@") && client.name.includes(".")) { + // FIXME: add "sha512" + client.avatar = `https://www.gravatar.com/avatar/${sha512(client.name)}?d=blank`; + } + + if (!clientsPersist[client.id]) { + clientsPersist[client.id] = {}; + clientsPersist[client.id].transferRxHistory = Array(50).fill(0); + clientsPersist[client.id].transferRxPrevious = client.transferRx; + clientsPersist[client.id].transferTxHistory = Array(50).fill(0); + clientsPersist[client.id].transferTxPrevious = client.transferTx; + } + + // Debug + // client.transferRx = clientsPersist[client.id].transferRxPrevious + Math.random() * 1000; + // client.transferTx = clientsPersist[client.id].transferTxPrevious + Math.random() * 1000; + + if (updateCharts) { + clientsPersist[client.id].transferRxCurrent = + client.transferRx - clientsPersist[client.id].transferRxPrevious; + clientsPersist[client.id].transferRxPrevious = client.transferRx; + clientsPersist[client.id].transferTxCurrent = + client.transferTx - clientsPersist[client.id].transferTxPrevious; + clientsPersist[client.id].transferTxPrevious = client.transferTx; + + clientsPersist[client.id].transferRxHistory.push(clientsPersist[client.id].transferRxCurrent); + clientsPersist[client.id].transferRxHistory.shift(); + + clientsPersist[client.id].transferTxHistory.push(clientsPersist[client.id].transferTxCurrent); + clientsPersist[client.id].transferTxHistory.shift(); + } + + client.transferTxCurrent = clientsPersist[client.id].transferTxCurrent; + client.transferRxCurrent = clientsPersist[client.id].transferRxCurrent; + + client.transferTxHistory = clientsPersist[client.id].transferTxHistory; + client.transferRxHistory = clientsPersist[client.id].transferRxHistory; + client.transferMax = Math.max(...client.transferTxHistory, ...client.transferRxHistory); + + client.hoverTx = clientsPersist[client.id].hoverTx; + client.hoverRx = clientsPersist[client.id].hoverRx; + + return client; + }); + }; + + const login = (e) => { + e.preventDefault(); + + if (!password.value) return; + if (authenticating.value) return; + + authenticating.value = true; + api.createSession({ + password: password.value, + }) + .then(async () => { + const session = await api.getSession(); + authenticated.value = session.authenticated; + requiresPassword.value = session.requiresPassword; + return refresh(); + }) + .catch((err) => { + alert(err.message || err.toString()); + }) + .finally(() => { + authenticating.value = false; + password.value = null; + }); + }; + + const logout = (e) => { + e.preventDefault(); + + api.deleteSession() + .then(() => { + authenticated.value = false; + clients.value = null; + }) + .catch((err) => { + alert(err.message || err.toString()); + }); + }; + + const createClient = () => { + const name = clientCreateName.value; + if (!name) return; + + api.createClient({ name }) + .catch((err) => alert(err.message || err.toString())) + .finally(() => refresh().catch(console.error)); + }; + + const deleteClient = (client) => { + api.deleteClient({ clientId: client.id }) + .catch((err) => alert(err.message || err.toString())) + .finally(() => refresh().catch(console.error)); + }; + + const enableClient = (client) => { + api.enableClient({ clientId: client.id }) + .catch((err) => alert(err.message || err.toString())) + .finally(() => refresh().catch(console.error)); + }; + + const disableClient = (client) => { + api.disableClient({ clientId: client.id }) + .catch((err) => alert(err.message || err.toString())) + .finally(() => refresh().catch(console.error)); + }; + + const updateClientName = (client, name) => { + api.updateClientName({ clientId: client.id, name }) + .catch((err) => alert(err.message || err.toString())) + .finally(() => refresh().catch(console.error)); + }; + + const updateClientAddress = (client, address) => { + api.updateClientAddress({ clientId: client.id, address }) + .catch((err) => alert(err.message || err.toString())) + .finally(() => refresh().catch(console.error)); + }; + + const toggleTheme = () => { + if (isDark.value) { + localStorage.theme = "light"; + document.documentElement.classList.remove("dark"); + } else { + localStorage.theme = "dark"; + document.documentElement.classList.add("dark"); + } + isDark.value = !isDark.value; + }; + + return { + authenticated, + authenticating, + password, + requiresPassword, + + clients, + clientsPersist, + clientDelete, + clientCreate, + clientCreateName, + clientEditName, + clientEditNameId, + clientEditAddress, + clientEditAddressId, + qrcode, + + currentRelease, + latestRelease, + + isDark, + + chartOptions, + + dateTime, + refresh, + login, + logout, + createClient, + deleteClient, + enableClient, + disableClient, + updateClientName, + updateClientAddress, + toggleTheme, + + api, + }; + }, + mounted() { + this.isDark = false; + if (localStorage.theme === "dark") { + this.isDark = true; + } + + this.api + .getSession() + .then((session) => { + console.log(session); + this.authenticated = session.authenticated; + this.requiresPassword = session.requiresPassword; + this.refresh({ + updateCharts: true, + }).catch((err) => { + alert(err.message || err.toString()); + }); + }) + .catch((err) => { + alert(err.message || err.toString()); + }); + + setInterval(() => { + this.refresh({ + updateCharts: true, + }).catch(console.error); + }, 1000); + + Promise.resolve() + .then(async () => { + const currentReleaseData = await this.api.getRelease(); + const latestReleaseData = await fetch("https://wg-easy.github.io/wg-easy/changelog.json") + .then((res) => res.json()) + .then((releases) => { + const releasesArray = Object.entries(releases).map(([version, changelog]) => ({ + version: parseInt(version, 10), + changelog, + })); + releasesArray.sort((a, b) => { + return b.version - a.version; + }); + + return releasesArray[0]; + }); + + console.log(`Current Release: ${currentReleaseData}`); + console.log(`Latest Release: ${latestReleaseData.version}`); + + if (currentReleaseData >= latestReleaseData.version) return; + + currentRelease.value = currentReleaseData; + latestRelease.value = latestReleaseData; + }) + .catch(console.error); + }, +}; + + + diff --git a/src/webui/src/assets/img/logo.png b/src/webui/src/assets/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..582b13123487710f11484a40b6ec6d581e22b114 GIT binary patch literal 3103 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 literal 0 HcmV?d00001 diff --git a/src/webui/src/assets/style.css b/src/webui/src/assets/style.css new file mode 100644 index 00000000..b5c61c95 --- /dev/null +++ b/src/webui/src/assets/style.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/src/webui/src/main.js b/src/webui/src/main.js new file mode 100644 index 00000000..48a9274b --- /dev/null +++ b/src/webui/src/main.js @@ -0,0 +1,6 @@ +import './assets/style.css' + +import { createApp } from 'vue' +import App from './App.vue' + +createApp(App).mount('#app') diff --git a/src/webui/tailwind.config.js b/src/webui/tailwind.config.js new file mode 100644 index 00000000..ff48818c --- /dev/null +++ b/src/webui/tailwind.config.js @@ -0,0 +1,11 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + "./index.html", + "./src/**/*.{vue,js,ts,jsx,tsx}", + ], + theme: { + extend: {}, + }, + plugins: [], +} \ No newline at end of file diff --git a/src/webui/vite.config.js b/src/webui/vite.config.js new file mode 100644 index 00000000..5c45e1d9 --- /dev/null +++ b/src/webui/vite.config.js @@ -0,0 +1,16 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + } + } +})