From e7cca10a29611749485b5e5044f4e3eab823f769 Mon Sep 17 00:00:00 2001 From: ZZY <2450266535@qq.com> Date: Tue, 23 Jul 2024 22:39:54 +0800 Subject: [PATCH] init --- .gitignore | 33 + README.md | 38 + env.d.ts | 1 + index.html | 13 + package-lock.json | 2790 ++++++++++++++++++++++++ package.json | 32 + postcss.config.js | 6 + public/Home.png | Bin 0 -> 6740 bytes public/fetch-wrapper.js | 154 ++ public/fetch-wrapper使用文档.md | 144 ++ public/ico/beian.png | Bin 0 -> 1403 bytes public/ico/qq-link.png | Bin 0 -> 13784 bytes public/ico/qq.png | Bin 0 -> 11492 bytes public/ico/wechat-link.png | Bin 0 -> 18818 bytes public/ico/wechat.png | Bin 0 -> 12891 bytes public/setting.json | 3 + src/App.vue | 10 + src/components/Footer.vue | 42 + src/components/Hero.vue | 25 + src/components/Navbar.vue | 85 + src/components/cards/Card.ts | 26 + src/components/cards/Card.vue | 44 + src/components/cards/CardActions.vue | 80 + src/components/cards/CardEditor.vue | 0 src/components/cards/CardsContaner.vue | 67 + src/components/cards/CardsManager.vue | 39 + src/components/files/FileIcon.vue | 30 + src/components/files/FileTree.vue | 99 + src/components/utils/EditModal.vue | 99 + src/components/utils/FetchWapper.ts | 52 + src/components/utils/IconModal.vue | 30 + src/main.ts | 11 + src/pages/CardShower.vue | 84 + src/pages/ErrorPage.vue | 110 + src/pages/Files.vue | 113 + src/pages/Home.vue | 86 + src/pages/Users.vue | 54 + src/router/index.ts | 43 + src/style.css | 3 + tailwind.config.js | 15 + tsconfig.app.json | 14 + tsconfig.json | 11 + tsconfig.node.json | 19 + vite.config.ts | 16 + 44 files changed, 4521 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 env.d.ts create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 postcss.config.js create mode 100644 public/Home.png create mode 100644 public/fetch-wrapper.js create mode 100644 public/fetch-wrapper使用文档.md create mode 100644 public/ico/beian.png create mode 100644 public/ico/qq-link.png create mode 100644 public/ico/qq.png create mode 100644 public/ico/wechat-link.png create mode 100644 public/ico/wechat.png create mode 100644 public/setting.json create mode 100644 src/App.vue create mode 100644 src/components/Footer.vue create mode 100644 src/components/Hero.vue create mode 100644 src/components/Navbar.vue create mode 100644 src/components/cards/Card.ts create mode 100644 src/components/cards/Card.vue create mode 100644 src/components/cards/CardActions.vue create mode 100644 src/components/cards/CardEditor.vue create mode 100644 src/components/cards/CardsContaner.vue create mode 100644 src/components/cards/CardsManager.vue create mode 100644 src/components/files/FileIcon.vue create mode 100644 src/components/files/FileTree.vue create mode 100644 src/components/utils/EditModal.vue create mode 100644 src/components/utils/FetchWapper.ts create mode 100644 src/components/utils/IconModal.vue create mode 100644 src/main.ts create mode 100644 src/pages/CardShower.vue create mode 100644 src/pages/ErrorPage.vue create mode 100644 src/pages/Files.vue create mode 100644 src/pages/Home.vue create mode 100644 src/pages/Users.vue create mode 100644 src/router/index.ts create mode 100644 src/style.css create mode 100644 tailwind.config.js create mode 100644 tsconfig.app.json create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..128fe34 --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +.* +!.gitignore + +# 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/README.md b/README.md new file mode 100644 index 0000000..fe1d6b9 --- /dev/null +++ b/README.md @@ -0,0 +1,38 @@ +# vue-project + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur). + +## Type Support for `.vue` Imports in TS + +TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) to make the TypeScript language service aware of `.vue` types. + +## Customize configuration + +See [Vite Configuration Reference](https://vitejs.dev/config/). + +## Project Setup + +```sh +npm install +``` + +### Compile and Hot-Reload for Development + +```sh +npm run dev +``` + +### Type-Check, Compile and Minify for Production + +```sh +npm run build +``` + +https://tailwindcss.com/docs/guides/vite#vue + +npm install -D tailwindcss postcss autoprefixer +npx tailwindcss init -p \ No newline at end of file diff --git a/env.d.ts b/env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/index.html b/index.html new file mode 100644 index 0000000..2e776f1 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + zzyxyz + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..5c5bb30 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2790 @@ +{ + "name": "vue-project", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "vue-project", + "version": "0.0.0", + "dependencies": { + "pinia": "^2.1.7", + "vue": "^3.4.21", + "vue-router": "^4.3.2" + }, + "devDependencies": { + "@tsconfig/node20": "^20.1.4", + "@types/node": "^20.12.5", + "@vitejs/plugin-vue": "^5.0.4", + "@vue/tsconfig": "^0.5.1", + "autoprefixer": "^10.4.19", + "daisyui": "^4.11.1", + "npm-run-all2": "^6.1.2", + "postcss": "^8.4.38", + "tailwindcss": "^3.4.3", + "typescript": "~5.4.0", + "vite": "^5.2.8", + "vue-tsc": "^2.0.11" + } + }, + "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.24.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz", + "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "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.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "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.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "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.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", + "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", + "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", + "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", + "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", + "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", + "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", + "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", + "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", + "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", + "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", + "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", + "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", + "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", + "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", + "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", + "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tsconfig/node20": { + "version": "20.1.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node20/-/node20-20.1.4.tgz", + "integrity": "sha512-sqgsT69YFeLWf5NtJ4Xq/xAF8p4ZQHlmGW74Nu2tD4+g5fAsposc4ZfaaPixVu4y01BEiDCWLRDCvDM5JOsRxg==", + "dev": true + }, + "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/@types/node": { + "version": "20.13.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.13.0.tgz", + "integrity": "sha512-FM6AOb3khNkNIXPnHFDYaHerSv8uN22C91z098AnGccVu+Pcdhi+pNUFDi0iLmPIsVE0JBD0KVS7mzUYt4nRzQ==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.5.tgz", + "integrity": "sha512-LOjm7XeIimLBZyzinBQ6OSm3UBCNVCpLkxGC0oWmm2YPzVZoxMsdvNVimLTBzpAnR9hl/yn1SHGuRfe6/Td9rQ==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.2.5.tgz", + "integrity": "sha512-2htyAuxRrAgETmFeUhT4XLELk3LiEcqoW/B8YUXMF6BrGWLMwIR09MFaZYvrA2UhbdAeSyeQ726HaWSWkexUcQ==", + "dev": true, + "dependencies": { + "@volar/source-map": "2.2.5" + } + }, + "node_modules/@volar/source-map": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.2.5.tgz", + "integrity": "sha512-wrOEIiZNf4E+PWB0AxyM4tfhkfldPsb3bxg8N6FHrxJH2ohar7aGu48e98bp3pR9HUA7P/pR9VrLmkTrgCCnWQ==", + "dev": true, + "dependencies": { + "muggle-string": "^0.4.0" + } + }, + "node_modules/@volar/typescript": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.2.5.tgz", + "integrity": "sha512-eSV/n75+ppfEVugMC/salZsI44nXDPAyL6+iTYCNLtiLHGJsnMv9GwiDMujrvAUj/aLQyqRJgYtXRoxop2clCw==", + "dev": true, + "dependencies": { + "@volar/language-core": "2.2.5", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz", + "integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==", + "dependencies": { + "@babel/parser": "^7.24.4", + "@vue/shared": "3.4.27", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz", + "integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==", + "dependencies": { + "@vue/compiler-core": "3.4.27", + "@vue/shared": "3.4.27" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz", + "integrity": "sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==", + "dependencies": { + "@babel/parser": "^7.24.4", + "@vue/compiler-core": "3.4.27", + "@vue/compiler-dom": "3.4.27", + "@vue/compiler-ssr": "3.4.27", + "@vue/shared": "3.4.27", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.10", + "postcss": "^8.4.38", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz", + "integrity": "sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw==", + "dependencies": { + "@vue/compiler-dom": "3.4.27", + "@vue/shared": "3.4.27" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.2.tgz", + "integrity": "sha512-134clD8u7cBBXdmBbXI282gHGF7T/eAbD/G7mAK2llQF62IbI4ny28IVamZVMoJSvfImC2Xxnj732hXkJvUj6g==" + }, + "node_modules/@vue/language-core": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.19.tgz", + "integrity": "sha512-A9EGOnvb51jOvnCYoRLnMP+CcoPlbZVxI9gZXE/y2GksRWM6j/PrLEIC++pnosWTN08tFpJgxhSS//E9v/Sg+Q==", + "dev": true, + "dependencies": { + "@volar/language-core": "~2.2.4", + "@vue/compiler-dom": "^3.4.0", + "@vue/shared": "^3.4.0", + "computeds": "^0.0.1", + "minimatch": "^9.0.3", + "path-browserify": "^1.0.1", + "vue-template-compiler": "^2.7.14" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/reactivity": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.27.tgz", + "integrity": "sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA==", + "dependencies": { + "@vue/shared": "3.4.27" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.27.tgz", + "integrity": "sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA==", + "dependencies": { + "@vue/reactivity": "3.4.27", + "@vue/shared": "3.4.27" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.27.tgz", + "integrity": "sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q==", + "dependencies": { + "@vue/runtime-core": "3.4.27", + "@vue/shared": "3.4.27", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.27.tgz", + "integrity": "sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA==", + "dependencies": { + "@vue/compiler-ssr": "3.4.27", + "@vue/shared": "3.4.27" + }, + "peerDependencies": { + "vue": "3.4.27" + } + }, + "node_modules/@vue/shared": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz", + "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==" + }, + "node_modules/@vue/tsconfig": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.5.1.tgz", + "integrity": "sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==", + "dev": true + }, + "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.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "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.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", + "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.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "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.30001587", + "electron-to-chromium": "^1.4.668", + "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.30001626", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001626.tgz", + "integrity": "sha512-JRW7kAH8PFJzoPCJhLSHgDgKg5348hsQ68aqb+slnzuB5QFERv846oA/mRChmlLAOdEDeOkRn3ynb1gSFnjt3w==", + "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.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "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" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "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/computeds": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", + "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", + "dev": true + }, + "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/css-selector-tokenizer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz", + "integrity": "sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, + "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/culori": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/culori/-/culori-3.3.0.tgz", + "integrity": "sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/daisyui": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-4.11.1.tgz", + "integrity": "sha512-obT9CUbQdW6eoHwSeT5VwaRrWlwrM4OT5qlfdJ0oQlSIEYhwnEl2+L2fwu5PioLbitwuMdYC2X8I1cyy8Pf6LQ==", + "dev": true, + "dependencies": { + "css-selector-tokenizer": "^0.8", + "culori": "^3", + "picocolors": "^1", + "postcss-js": "^4" + }, + "engines": { + "node": ">=16.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/daisyui" + } + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "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.788", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.788.tgz", + "integrity": "sha512-ubp5+Ev/VV8KuRoWnfP2QF2Bg+O2ZFdb49DiiNbz2VmgkIqrnyYaqIOqj8A6K/3p1xV0QcU5hBQ1+BmB6ot1OA==", + "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.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "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/fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "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.4.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "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.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "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": "3.1.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.1.2.tgz", + "integrity": "sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==", + "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/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/magic-string": { + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "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.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true + }, + "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/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-all2": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/npm-run-all2/-/npm-run-all2-6.2.0.tgz", + "integrity": "sha512-wA7yVIkthe6qJBfiJ2g6aweaaRlw72itsFGF6HuwCHKwtwAx/4BY1vVpk6bw6lS8RLMsexoasOkd0aYOmsFG7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "cross-spawn": "^7.0.3", + "memorystream": "^0.3.1", + "minimatch": "^9.0.0", + "pidtree": "^0.6.0", + "read-package-json-fast": "^3.0.2", + "shell-quote": "^1.7.3" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "npm-run-all2": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0", + "npm": ">= 8" + } + }, + "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-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "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.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + }, + "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/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "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/pinia": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.7.tgz", + "integrity": "sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==", + "dependencies": { + "@vue/devtools-api": "^6.5.0", + "vue-demi": ">=0.14.5" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.3.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia/node_modules/vue-demi": { + "version": "0.14.8", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.8.tgz", + "integrity": "sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/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.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "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.2.0" + }, + "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.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "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.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", + "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", + "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/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.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.18.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", + "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", + "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.18.0", + "@rollup/rollup-android-arm64": "4.18.0", + "@rollup/rollup-darwin-arm64": "4.18.0", + "@rollup/rollup-darwin-x64": "4.18.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", + "@rollup/rollup-linux-arm-musleabihf": "4.18.0", + "@rollup/rollup-linux-arm64-gnu": "4.18.0", + "@rollup/rollup-linux-arm64-musl": "4.18.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", + "@rollup/rollup-linux-riscv64-gnu": "4.18.0", + "@rollup/rollup-linux-s390x-gnu": "4.18.0", + "@rollup/rollup-linux-x64-gnu": "4.18.0", + "@rollup/rollup-linux-x64-musl": "4.18.0", + "@rollup/rollup-win32-arm64-msvc": "4.18.0", + "@rollup/rollup-win32-ia32-msvc": "4.18.0", + "@rollup/rollup-win32-x64-msvc": "4.18.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "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/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "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.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", + "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==", + "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.21.0", + "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/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "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.2", + "picocolors": "^1.0.1" + }, + "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.2.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.12.tgz", + "integrity": "sha512-/gC8GxzxMK5ntBwb48pR32GGhENnjtY30G4A0jemunsBkiEZFw60s8InGpN8gkhHEkjnRK1aSAxeQgwvFhUHAA==", + "dev": true, + "dependencies": { + "esbuild": "^0.20.1", + "postcss": "^8.4.38", + "rollup": "^4.13.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.27", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.27.tgz", + "integrity": "sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA==", + "dependencies": { + "@vue/compiler-dom": "3.4.27", + "@vue/compiler-sfc": "3.4.27", + "@vue/runtime-dom": "3.4.27", + "@vue/server-renderer": "3.4.27", + "@vue/shared": "3.4.27" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-router": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.3.2.tgz", + "integrity": "sha512-hKQJ1vDAZ5LVkKEnHhmm1f9pMiWIBNGF5AwU67PdH7TyXCj/a4hTccuUuYCAMgJK6rO/NVYtQIEN3yL8CECa7Q==", + "dependencies": { + "@vue/devtools-api": "^6.5.1" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-template-compiler": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", + "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.0.19.tgz", + "integrity": "sha512-JWay5Zt2/871iodGF72cELIbcAoPyhJxq56mPPh+M2K7IwI688FMrFKc/+DvB05wDWEuCPexQJ6L10zSwzzapg==", + "dev": true, + "dependencies": { + "@volar/typescript": "~2.2.4", + "@vue/language-core": "2.0.19", + "semver": "^7.5.4" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "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.4.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.3.tgz", + "integrity": "sha512-sntgmxj8o7DE7g/Qi60cqpLBA3HG3STcDA0kO+WfB05jEKhZMbY7umNm2rBpQvsmZ16/lPXCJGW2672dgOUkrg==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..08a6861 --- /dev/null +++ b/package.json @@ -0,0 +1,32 @@ +{ + "name": "vue-project", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "run-p type-check \"build-only {@}\" --", + "preview": "vite preview", + "build-only": "vite build", + "type-check": "vue-tsc --build --force" + }, + "dependencies": { + "pinia": "^2.1.7", + "vue": "^3.4.21", + "vue-router": "^4.3.2" + }, + "devDependencies": { + "@tsconfig/node20": "^20.1.4", + "@types/node": "^20.12.5", + "@vitejs/plugin-vue": "^5.0.4", + "@vue/tsconfig": "^0.5.1", + "autoprefixer": "^10.4.19", + "daisyui": "^4.11.1", + "npm-run-all2": "^6.1.2", + "postcss": "^8.4.38", + "tailwindcss": "^3.4.3", + "typescript": "~5.4.0", + "vite": "^5.2.8", + "vue-tsc": "^2.0.11" + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..2e7af2b --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/public/Home.png b/public/Home.png new file mode 100644 index 0000000000000000000000000000000000000000..f683c56e792fc9814365b4697689895e78689db5 GIT binary patch literal 6740 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 O0-@~P?3#}SUHl&ycFb)6 literal 0 HcmV?d00001 diff --git a/public/fetch-wrapper.js b/public/fetch-wrapper.js new file mode 100644 index 0000000..33f8f44 --- /dev/null +++ b/public/fetch-wrapper.js @@ -0,0 +1,154 @@ +class FetchWrapper { + constructor(baseURL, options = {}, contentTypeMappings = {}, onError = console.error) { + this.baseURL = baseURL; + this.contentTypeMappings = contentTypeMappings; + this.defaultContentType = 'application/json'; + this.onError = onError; + this.defaultOptions = { + ...{ + method: 'GET', + headers: new Headers({ + 'Content-Type': this.defaultContentType + }), + mode: 'cors', // 指定是否允许跨域请求,默认为cors + cache: 'default', // 请求的缓存模式 + credentials: 'same-origin', // 请求的凭据模式,默认同源请求时发送cookies + parseResponseHandler: { + 'application/json': response => response.json(), + 'text/*': response => response.text(), + 'image/*': response => response.blob(), + 'application/octet-stream': response => response.blob(), + '*/*': response => response.arrayBuffer(), // 默认处理程序 + }, + ...options + } + }; + } + + + + async fetch(url, options = {}) { + // 合并默认选项与传入的options + const mergedOptions = { ...this.defaultOptions, ...options }; + + // 根据URL自动设置Content-Type(如果有匹配的映射) + const matchedMapping = Object.entries(this.contentTypeMappings).find(([pattern, type]) => url.endsWith(pattern)); + if (matchedMapping && !mergedOptions.headers.has('Content-Type')) { + mergedOptions.headers['Content-Type'] = matchedMapping[1]; + } + // 根据请求方法处理数据 + if (['POST', 'PUT', 'PATCH'].includes(mergedOptions.method)) { + if (typeof mergedOptions.body === 'object') { + mergedOptions.body = JSON.stringify(mergedOptions.body); + // 如果Content-Type未设置或默认为application/json,则需要在这里设置 + if (!mergedOptions.headers.has('Content-Type')) { + mergedOptions.headers.set('Content-Type', 'application/json'); + } + } else if (mergedOptions.body !== null && typeof mergedOptions.body !== 'string') { + throw new Error('非GET请求时, body必须是一个对象或字符串'); + } + } else if (mergedOptions.method === 'GET' && mergedOptions.body) { + console.warn('GET请求不支持发送请求体, 已忽略提供的body参数'); + delete mergedOptions.body; + } + + url = new URL(url, this.baseURL).href; + + return fetch(url, mergedOptions) + .then(async response => { + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + // console.warn(`HTTP warning! status: ${response.status}`); + } + + const contentType = response.headers.get('content-type').split(';')[0].trim(); + const parseResponseHandler = this.getParseResponseHandler(contentType); + + const responseData = await parseResponseHandler(response); + return formatResponse(response, responseData); + }) + .catch(error => { + error.options = mergedOptions; + error.url = url; + error.timestamp = Date.now(); + error.onFunction = 'fetch'; + this.onError(error.message); + throw error; + }); + } + + getParseResponseHandler(contentType) { + if (contentType.startsWith('text/')) { + return this.defaultOptions.parseResponseHandler['text/*'] || this.defaultOptions.parseResponseHandler['*/*']; + } + if (contentType.startsWith('image/')) { + return this.defaultOptions.parseResponseHandler['image/*'] || this.defaultOptions.parseResponseHandler['*/*']; + } + return this.defaultOptions.parseResponseHandler[contentType] || this.defaultOptions.parseResponseHandler['*/*']; + } + + async fetchWithRetry(url, options = {}, maxRetries = 3, retryDelayBaseMs = 1000) { + let remainingAttempts = maxRetries; + const delays = []; + + for (let i = 0; i < maxRetries; i++) { + delays.push(retryDelayBaseMs * Math.pow(2, i)); + } + + const attemptFetch = async (retryIndex = 0) => { + try { + return await this.fetch(url, options); + } catch (error) { + if (remainingAttempts > 1) { + console.log(`请求失败,剩余重试次数:${remainingAttempts - 1}`); + setTimeout(() => attemptFetch(retryIndex + 1), delays[retryIndex]); + remainingAttempts--; + return; + } else { + this.onError(error.message); + throw error; + } + } + }; + + return attemptFetch(); + } + + // 可以为不同的HTTP方法提供便捷的方法,如: + async post(url, body, options = {}) { + return this.fetch(url, { ...options, method: 'POST', body }); + } + + async get(url, options = {}) { + return this.fetch(url, { ...options, method: 'GET' }); + } + + async put(url, body, options = {}) { + return this.fetch(url, { ...options, method: 'PUT', body }); + } + + async patch(url, body, options = {}) { + return this.fetch(url, { ...options, method: 'PATCH', body }); + } + + async delete(url, options = {}) { + return this.fetch(url, { ...options, method: 'DELETE' }); + } +}; + +function formatResponse(response, data) { + return { + status: response.status, + message: response.statusText, + data, + }; +} + +// 检查是否在Node.js环境中 +if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') { + // Node.js环境,使用CommonJS + module.exports = FetchWrapper; +} else if (typeof window !== 'undefined') { + // 浏览器环境,直接暴露到全局作用域(不推荐,但简单示例) + // window.FetchWrapper = FetchWrapper; +} \ No newline at end of file diff --git a/public/fetch-wrapper使用文档.md b/public/fetch-wrapper使用文档.md new file mode 100644 index 0000000..e47d9c5 --- /dev/null +++ b/public/fetch-wrapper使用文档.md @@ -0,0 +1,144 @@ +# FetchWrapper 类使用文档 + +**概述:** + +`FetchWrapper` 是一个基于 `fetch API` 的封装类,用于简化网络请求操作,并提供默认选项、Content-Type 自动映射、错误处理和重试机制等功能。 + +## 构造函数 + +````javascript +new FetchWrapper(baseURL, contentTypeMappings = {}, defaultOptions = {}, onError = console.error) +```` + +- **baseURL**:基础 URL 字符串,所有相对路径的请求都会基于此 URL 进行拼接。 +- **contentTypeMappings**:对象,键为文件扩展名或通配符模式,值为对应的 Content-Type,当请求 URL 匹配时自动设置 Content-Type 头部。 +- **defaultOptions**:对象,定义了发起请求时的默认选项,例如: + +````javascript +{ + method: 'GET', + headers: { + 'Content-Type': 'application/json' + }, + // 其他默认配置项... +} +```` + +- **onError**:错误回调函数,当发生网络请求错误时触发,默认为 `console.error`。 + +## 主要方法 + +### formatResponse(response, data) + +````javascript +formatResponse(response, data) +```` + +- 格式化响应对象和数据,返回一个统一格式的对象。 + +### fetch(url, options = {}) + +````javascript +async fetch(url, options = {}) +```` + +- 发起 HTTP 请求,参数说明: + - **url**:请求 URL。 + - **options**:覆盖默认选项的对象,可自定义请求方法、头部、请求体等信息。 + +### getParseResponseHandler(contentType) + +````javascript +getParseResponseHandler(contentType) +```` + +- 根据响应内容类型(Content-Type)获取相应的解析器函数。 + +### fetchWithRetry(url, options = {}, maxRetries = 3, retryDelayBaseMs = 1000) + +````javascript +async fetchWithRetry(url, options = {}, maxRetries = 3, retryDelayBaseMs = 1000) +```` + +- 发起带有重试机制的 HTTP 请求,在请求失败时会按照指数退避策略进行重试。 + - **maxRetries**:最大重试次数,默认为3次。 + - **retryDelayBaseMs**:首次重试延迟时间的基础单位,默认为1000毫秒。 + +### post(url, body, options = {}) + +### get(url, options = {}) + +### put(url, body, options = {}) + +### patch(url, body, options = {}) + +### delete(url, options = {}) + +这些是针对不同HTTP方法的便捷调用方法。 + +## 示例使用 + +```javascript +const wrapper = new FetchWrapper('https://api.example.com', { + '.json': 'application/json', +}, { + credentials: 'include', +}); + +async function fetchData() { + try { + const response = await wrapper.get('/data.json'); + console.log(response.data); + } catch (error) { + wrapper.onError(error); + } +} + +//使用带重试机制的 POST 请求 +async function postDataWithRetry() { + const body = { key: 'value' }; + const options = { headers: { 'X-Custom-Header': 'value' } }; + + try { + const response = await wrapper.fetchWithRetry('/post-data', { body }, 5, 2000); + console.log(response.data); + } catch (error) { + wrapper.onError(error); + } +} +```` + +以上JavaScript代码已用Markdown代码块包裹,可以直接复制并粘贴到您的项目中。通过创建一个 `FetchWrapper` 实例,您可以利用其便捷的方法来发起网络请求,并根据需要灵活定制请求选项以及实现重试功能。 + +当您在fetch-wrapper.js文件中使用export default class FetchWrapper {...}导出FetchWrapper类时,您可以在其他JavaScript模块中这样导入: + +````javascript +// 导入 FetchWrapper 类 +import FetchWrapper from './fetch-wrapper'; + +// 创建一个实例 +const wrapper = new FetchWrapper('https://api.example.com', {}, { credentials: 'include' }); + +// 使用这个实例发起请求 +async function fetchData() { + try { + const response = await wrapper.get('/data.json'); + console.log(response.data); + } catch (error) { + wrapper.onError(error); + } +} + +fetchData(); + +```` + +这里,./fetch-wrapper是相对路径,表示FetchWrapper类所在的模块位置。根据实际项目结构,您需要调整这个路径以便正确指向fetch-wrapper.js文件。 + +formatResponse(response, data) { + return { + status: response.status, + message: response.statusText, + data, + }; +} \ No newline at end of file diff --git a/public/ico/beian.png b/public/ico/beian.png new file mode 100644 index 0000000000000000000000000000000000000000..2a13ba2f4b92c4b531945a66e3e35e3ead3739f9 GIT binary patch literal 1403 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 literal 0 HcmV?d00001 diff --git a/public/ico/qq.png b/public/ico/qq.png new file mode 100644 index 0000000000000000000000000000000000000000..6789b43f9c6a49397cc8021e0c051a830e836c3c GIT binary patch literal 11492 zcmY*=gXsEA20lEhQ000zPnrg-X0D&sakRP&>i8kAEQcQ_*@(ivNX?Iwk-B_W@dJPoKjJj@ClMp3k>EI^9@# znCqx%PpBdqlW#>#@PX$E?J2D{=SQCVddc%HBu&{r%z~TkJDp#cpm01AO7WLX6@z4#jblCVbA`CU8To3E!j28^E5OLki3qAJ2K{okXNfK;ld|Oq4Eyu7I*G4amCp z7=C~StTtCAb)r1Dei}lTb)QamXg%5Bh|PoCdhs?C3na_JnWOxd zfn>hKw{{1?7C$@-}aZMw{s{BmSLCLw;I%Bv1ADkAsmxlnigKgL5c`_Cxz^oA` zMldg*0GSSx3l$)T2hGlH4?U?$`PUX`@|(kPQN=p5=?2Ik$r=9 z(LM$VXY5fvn52?jdPKl8T06w0AH6NuvUssUZ}t5N!U@)(qy0AA=8{Ra>+b!hfl3VX z#Hl;draRqltx5MefLV4Trp^!oNLTGy0d%!G$ae)VI zJv~b&vf`$JA~L2Fz>S(^$ZZKuWq3dUN$wb^rG=X8DzaL!LQz7T^pKf=Ak$HAz-<)HLNoFzL;Bre zhAQU=FU=Ptc+d=JV@F1)`NL$LqVEOW1R$YV zC`RhoP
;Xj(?rX_FyQo2|EK$3=Ta z%4HzL`o)V}ZnwFZ?pNEZC=bqd7$GkC#Wvr255-n*G|s*zl~70HKcnYQRD;QL#Lx_- zLW4}-9bXsatixd&La5|=N%{Elj2G&6XKr-Y$fMU{IHQ6BZQ zAYlsdSgx`OFp{E?PGJACBwFZEr%BUg8BV3<6`>Ay@Br`fSI@hy%Yyvs93||Ci`qe zg@wyRY8})N;OLGvKe27A&xGlmXa;-uBmcq5uKQ@xh7YkHj2;LH`AG$x>ZR1P;yq(F z=dJWhu6tC+p(cTx&guwo`L{Q8w_{8nz&IYRl=|KpGCE~XMP%A#avEW$HdAb_`dRll zQ=~;8TYsZGICgTS+2^n5a%>I-&@ATX_X%u#l_xNulIISqEH27prFnGT#c9!=&woaV zu)$l1nbK5{Bo>@VL-g#^X)Q2oMuLgp+F2bl1d-c&%ToHDvt>)D}Gl#9voMAW_A+QWvj+9R1D{zzC9)SK_jVaR9a=WK<)zREuYR>LLvZ1vs#pkjcb(rwH%%l=F zyk~5GM5!vFJ;YSv=cB)o^O;3PYDBbO^J5?AZGJvWCAoHRZZ52PyJ_+tP451RjdW&i zVI01%CFJh_J&qQ!kQng&Zif_OMRT@93X)$hGp!Te7(#)};o~VM_{E6tXD(?6D@9ce zFe(A(+&TDt6}7M8@qJII&LZF&#^wMOVhFt$7JZ=Y&-GFS(1Nqzs<;0wsaJ_8A?`Jt zj1E6Ki<~>ECmLh2cmNCDMudAfF51yI&UD7-w{ajwUhV;T9S%Vnq z$Mbp6lpl&Qgz2FkFF;WmPKz{x(5BLST1Y-3^1#PcNv411%K>UC&&+8Ro6ShjWBa+w z6>*eTk@wMexRK$|fZ!kEfOa8o;u>m5#UYBx@;U76{R|&zF{MWQNbgx*u3Lga>JE4-( zM-~tROre^A6mMoEkp~CA)WVmwYXa1+FY4!3I80(0qVubLY_qK6belV~kWl>*IM}lr zuc|40wmpaALmiRwOvdlu1Ji3)@^5__tD3~Vug)Xp=bzVN-&w~BHy+zMvoO_J94Y&XAl+w3{PK=zLf-Mj;fCCKsvB*u^jP0U=X zRD41D3ZWv-AL`zp&5^jYxc<>f@ntIRo*GII3T9xC?|H+IrhG`oPn;sPmXh_UD0;Lu z!}^tGGg-~q4?!TH0Cku?P|KDuFA=wl@}M4(K@7CEMI!413EtevvZ?OYTN`JhCaG9) zOB4P>%&=WSSp!kO_hd7y%d~e0HyQ0`j=*xg`_Z1KC2O= z1r0Ufl@2f<-YIym-xtq`Ao>TPs(~#E?}v9`T?yEgxjONl9v00)BrJ5AvTrUVQ5Oviz&gMXnbIcBW zgHn$N#`&Ohrjm?~@6ma%JtGAvJ$gVt861lPsUbC>1P+dj#b9n$M~j#W+%7cpo>X7W znZh~;ns@=e40IgT_q*zyH#{Ml5q7 zg##qzGv93UXAzE}6r_nOTth^At?-G#bLpo2Wg1mNF#Fx(hI6*{WpKuzayb0ot^RWC z-pDl@LneG#dQWfCEp=EhlYMuX(6K;>Zv4a#(uGBZ#Y@}w_FDqR-de}6pYIuFDPB9Q zDO9f$Zo6G5;={?;k;=lXuJ1a;cXqt-FO-YSVxsxeB9DnmeZ@36XIj~&mnCT(Z^@ydovallp z6oKmCP0UhhKn$IZf~ zt9x>Wb=GGisMh)EXARiDi>&qgGqlEZXynJQObp-IhJGg1fBe`mz}7^bXx6UtGg&M` z*Um}O2Q-wXO|@m4tejz;4^N6nQj~8#VN~9 zq7l%vdmf;yE57iVY^eNwwl!hmboZC3gxz)g@*L#73Rq+a?4JJnhYIM8`i!nFXDH{? z`CPEwP#exluA};QRonc5S-UZ@IsFRTV&R|x1LWFf=6p?_^As$|^Ec;F4W0)A~+g&p{sf zGB03{vI@+`k1X9Lz9tm{2z+a(3s-fuldo5cmo|jNa-p~Lq&nETyZ@=SZhLj^bO`

2A2a;6^&zvRv$ZmW)2kGul0^R{tX*Tdy;E#pCM{ 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 Re5Eo#OI=^BRt5U%{{Ss2+=~DJ literal 0 HcmV?d00001 diff --git a/public/ico/wechat-link.png b/public/ico/wechat-link.png new file mode 100644 index 0000000000000000000000000000000000000000..0ef0db03c5595a4e04df9bd750dc35d9dbc02658 GIT binary patch literal 18818 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 literal 0 HcmV?d00001 diff --git a/public/ico/wechat.png b/public/ico/wechat.png new file mode 100644 index 0000000000000000000000000000000000000000..c2511a6d63528a3187a17f4f9563896c0a04bb10 GIT binary patch literal 12891 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 literal 0 HcmV?d00001 diff --git a/public/setting.json b/public/setting.json new file mode 100644 index 0000000..2e11546 --- /dev/null +++ b/public/setting.json @@ -0,0 +1,3 @@ +{ + "isServer": false +} \ No newline at end of file diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..d740280 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/src/components/Footer.vue b/src/components/Footer.vue new file mode 100644 index 0000000..a61eae6 --- /dev/null +++ b/src/components/Footer.vue @@ -0,0 +1,42 @@ + + + + + \ No newline at end of file diff --git a/src/components/Hero.vue b/src/components/Hero.vue new file mode 100644 index 0000000..1f69843 --- /dev/null +++ b/src/components/Hero.vue @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/src/components/Navbar.vue b/src/components/Navbar.vue new file mode 100644 index 0000000..bc237b4 --- /dev/null +++ b/src/components/Navbar.vue @@ -0,0 +1,85 @@ + + + + + \ No newline at end of file diff --git a/src/components/cards/Card.ts b/src/components/cards/Card.ts new file mode 100644 index 0000000..a3dc981 --- /dev/null +++ b/src/components/cards/Card.ts @@ -0,0 +1,26 @@ +// import axios from "axios"; + +export const schema = [ + { name: 'title', label: '标题', type: 'input' }, + { name: 'body', label: '内容', type: 'input' }, + { name: 'jumpHerf', label: '跳转链接', type: 'input' }, + { name: 'btnText', label: '按钮内容', type: 'input' }, + { name: 'btnHref', label: '按钮链接', type: 'input' }, +] + +export type cardType = { + title?: string | null + body?: string | null + jumpHerf?: string | null + imgSrc?: string | null + imgAlt?: string | null + btnText?: string | null + btnHref?: string | null +}; + +function getData() { +} + +function setData() { + +} \ No newline at end of file diff --git a/src/components/cards/Card.vue b/src/components/cards/Card.vue new file mode 100644 index 0000000..32623c0 --- /dev/null +++ b/src/components/cards/Card.vue @@ -0,0 +1,44 @@ + + + + + \ No newline at end of file diff --git a/src/components/cards/CardActions.vue b/src/components/cards/CardActions.vue new file mode 100644 index 0000000..5d4e0e3 --- /dev/null +++ b/src/components/cards/CardActions.vue @@ -0,0 +1,80 @@ + + + + + \ No newline at end of file diff --git a/src/components/cards/CardEditor.vue b/src/components/cards/CardEditor.vue new file mode 100644 index 0000000..e69de29 diff --git a/src/components/cards/CardsContaner.vue b/src/components/cards/CardsContaner.vue new file mode 100644 index 0000000..892bd09 --- /dev/null +++ b/src/components/cards/CardsContaner.vue @@ -0,0 +1,67 @@ + + + + + \ No newline at end of file diff --git a/src/components/cards/CardsManager.vue b/src/components/cards/CardsManager.vue new file mode 100644 index 0000000..669c5e1 --- /dev/null +++ b/src/components/cards/CardsManager.vue @@ -0,0 +1,39 @@ + + + + + \ No newline at end of file diff --git a/src/components/files/FileIcon.vue b/src/components/files/FileIcon.vue new file mode 100644 index 0000000..2b84d0e --- /dev/null +++ b/src/components/files/FileIcon.vue @@ -0,0 +1,30 @@ + + + \ No newline at end of file diff --git a/src/components/files/FileTree.vue b/src/components/files/FileTree.vue new file mode 100644 index 0000000..3fef461 --- /dev/null +++ b/src/components/files/FileTree.vue @@ -0,0 +1,99 @@ + + + diff --git a/src/components/utils/EditModal.vue b/src/components/utils/EditModal.vue new file mode 100644 index 0000000..3eec23f --- /dev/null +++ b/src/components/utils/EditModal.vue @@ -0,0 +1,99 @@ + + + + + \ No newline at end of file diff --git a/src/components/utils/FetchWapper.ts b/src/components/utils/FetchWapper.ts new file mode 100644 index 0000000..a180829 --- /dev/null +++ b/src/components/utils/FetchWapper.ts @@ -0,0 +1,52 @@ +interface FetchOptions extends RequestInit { + retry?: number; + timeout?: number; +} + +export default class FetchWrapper { + static async fetch(url: RequestInfo, options: FetchOptions = {}): Promise { + const mergedOptions: RequestInit = { + ...{ + method: 'GET', + headers: { + 'Content-Type': 'application/json', + }, + }, + ...options, + }; + + let response: Response | unknown; + let retries = options.retry || 0; + + while (true) { + try { + if (options.timeout ?? 0) { + response = await Promise.race([ + fetch(url, mergedOptions), + new Promise((_, reject) => + setTimeout(() => + reject(new Error(`Request timed out after ${options.timeout}ms`)), + options.timeout)), + ]); + } else { + response = await fetch(url, options); + } + if (!(response instanceof Response)) { + throw response; + } + + + return response; + + } catch (error) { + if (retries > 0) { + retries--; + console.debug(`Retrying fetch request... (${retries} retries left)`); + await new Promise(resolve => setTimeout(resolve, 1000)); + } else { + throw error; + } + } + } + } +} diff --git a/src/components/utils/IconModal.vue b/src/components/utils/IconModal.vue new file mode 100644 index 0000000..d8332bb --- /dev/null +++ b/src/components/utils/IconModal.vue @@ -0,0 +1,30 @@ + + + + + + \ No newline at end of file diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..1da3adc --- /dev/null +++ b/src/main.ts @@ -0,0 +1,11 @@ +import { createApp } from 'vue' +import { createPinia } from 'pinia' +// import PrimeVue from 'primevue/config'; +import router from '@/router' +import '@/style.css' +import App from '@/App.vue' + +createApp(App) +.use(createPinia()) +.use(router) +.mount('#app') diff --git a/src/pages/CardShower.vue b/src/pages/CardShower.vue new file mode 100644 index 0000000..0fc3025 --- /dev/null +++ b/src/pages/CardShower.vue @@ -0,0 +1,84 @@ + + + \ No newline at end of file diff --git a/src/pages/ErrorPage.vue b/src/pages/ErrorPage.vue new file mode 100644 index 0000000..a1d8383 --- /dev/null +++ b/src/pages/ErrorPage.vue @@ -0,0 +1,110 @@ + + + + + \ No newline at end of file diff --git a/src/pages/Files.vue b/src/pages/Files.vue new file mode 100644 index 0000000..7877f07 --- /dev/null +++ b/src/pages/Files.vue @@ -0,0 +1,113 @@ + + + + + \ No newline at end of file diff --git a/src/pages/Home.vue b/src/pages/Home.vue new file mode 100644 index 0000000..32c6f1b --- /dev/null +++ b/src/pages/Home.vue @@ -0,0 +1,86 @@ + + + \ No newline at end of file diff --git a/src/pages/Users.vue b/src/pages/Users.vue new file mode 100644 index 0000000..b65bfa4 --- /dev/null +++ b/src/pages/Users.vue @@ -0,0 +1,54 @@ + + + + + \ No newline at end of file diff --git a/src/router/index.ts b/src/router/index.ts new file mode 100644 index 0000000..470af54 --- /dev/null +++ b/src/router/index.ts @@ -0,0 +1,43 @@ +import { createRouter, createWebHistory } from "vue-router" + +const router = createRouter({ + history: createWebHistory(), + routes: [ + { + name: "root", + path: "/", + redirect: "/home", + }, + { + name: "home", + path: "/home", + component: () => import("@/pages/Home.vue"), + }, + { + name: "files", + path: "/files", + component: () => import("@/pages/Files.vue"), + }, + { + name: "users", + path: "/users", + component: () => import("@/pages/Users.vue"), + }, + { + name: "cardShower", + path: "/card/:user_name/:pages_name/:token?", + component: () => import("@/pages/CardShower.vue"), + props: true, + }, + { + name: 'notFound', + path: "/:any*", // 使用正则表达式匹配所有路径 + component: () => import('@/pages/ErrorPage.vue'), + props() { + return { statusCode: 404 } + }, + }, + ], +}); + +export default router \ No newline at end of file diff --git a/src/style.css b/src/style.css new file mode 100644 index 0000000..bd6213e --- /dev/null +++ b/src/style.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..524f883 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,15 @@ +/** @type {import('tailwindcss').Config} */ + +import daisyui from "daisyui" + +export default { + content: [ + "./index.html", + "./src/**/*.{vue,js,ts,jsx,tsx}", + ], + theme: { + extend: {}, + }, + plugins: [daisyui], +} + diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..e14c754 --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,14 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "exclude": ["src/**/__tests__/*"], + "compilerOptions": { + "composite": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..66b5e57 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,11 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.node.json" + }, + { + "path": "./tsconfig.app.json" + } + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..f094063 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,19 @@ +{ + "extends": "@tsconfig/node20/tsconfig.json", + "include": [ + "vite.config.*", + "vitest.config.*", + "cypress.config.*", + "nightwatch.conf.*", + "playwright.config.*" + ], + "compilerOptions": { + "composite": true, + "noEmit": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + + "module": "ESNext", + "moduleResolution": "Bundler", + "types": ["node"] + } +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..5c45e1d --- /dev/null +++ b/vite.config.ts @@ -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)) + } + } +})