├── .bolt └── config.json ├── .github └── workflows │ └── docker-publish.yml ├── .gitignore ├── Dockerfile ├── README.md ├── docker-compose.yml ├── index.html ├── nginx.conf ├── package-lock.json ├── package.json ├── postcss.config.js ├── public ├── favicon.svg └── vite.svg ├── src ├── App.vue ├── assets │ └── vue.svg ├── components │ ├── CaddyConfig.vue │ ├── HelloWorld.vue │ ├── HostForm.vue │ ├── ImportModal.vue │ ├── PresetModal.vue │ └── PresetSelect.vue ├── main.ts ├── presets.ts ├── style.css ├── types │ └── caddy.ts └── vite-env.d.ts ├── tailwind.config.js ├── tsconfig.app.json ├── tsconfig.app.tsbuildinfo ├── tsconfig.json ├── tsconfig.node.json ├── tsconfig.node.tsbuildinfo └── vite.config.ts /.bolt/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "template": "vite-vue-ts" 3 | } 4 | -------------------------------------------------------------------------------- /.github/workflows/docker-publish.yml: -------------------------------------------------------------------------------- 1 | name: Docker Build and Publish 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | build-and-push: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | # Checkout the repository 14 | - name: Checkout repository 15 | uses: actions/checkout@v3 16 | 17 | # Set up Docker Buildx 18 | - name: Set up Docker Buildx 19 | uses: docker/setup-buildx-action@v2 20 | 21 | # Log in to Docker Hub 22 | - name: Log in to Docker Hub 23 | uses: docker/login-action@v2 24 | with: 25 | username: ${{ secrets.DOCKER_USERNAME }} 26 | password: ${{ secrets.DOCKER_PASSWORD }} 27 | 28 | # Build and push the multi-platform image 29 | - name: Build and push multi-platform Docker image 30 | uses: docker/build-push-action@v4 31 | with: 32 | context: . 33 | push: true 34 | platforms: linux/amd64,linux/arm64 35 | tags: wardy784/caddygen:latest -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:20-alpine as build 2 | 3 | WORKDIR /app 4 | COPY package*.json ./ 5 | RUN npm install 6 | COPY . . 7 | RUN npx vite build 8 | 9 | FROM nginx:alpine 10 | COPY --from=build /app/dist /usr/share/nginx/html 11 | COPY nginx.conf /etc/nginx/conf.d/default.conf 12 | EXPOSE 80 13 | CMD ["nginx", "-g", "daemon off;"] -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # **CaddyGen - Caddy Config Generator** 2 | 3 | CaddyGen is a user-friendly web interface for generating [Caddy server](https://caddyserver.com) configurations. Easily create and manage reverse proxy and file server configurations with support for SSL, compression, security headers, and more. 4 | 5 | ## **Features** 6 | 7 | - 🚀 **Visual configuration builder** for the Caddy server 8 | - 🔒 **SSL/TLS configuration** with Let's Encrypt support 9 | - 🔄 **Reverse proxy** and **file server** setup 10 | - 📦 Pre-configured **presets** for popular applications 11 | - 💾 **Local storage** for saving configurations 12 | - 📤 **Import/Export** for Caddyfiles 13 | - 🛡️ Advanced **security options** (CSP, rate limiting, IP filtering) 14 | - ⚡ **Performance optimizations** (compression, caching) 15 | - 🌐 **CORS configuration** 16 | - 📁 File server options (directory listing, PHP and FrankenPHP support) 17 | 18 | --- 19 | 20 | ## **Live Demo** 21 | 22 | Try CaddyGen now: [demo.caddygen.site](https://demo.caddygen.site) 23 | 24 | ### **How to Use** 25 | 1. Click the **"Add New Host"** button. 26 | 2. Configure your settings: 27 | - Choose between **reverse proxy** or **file server**. 28 | - Select from pre-configured **application presets**. 29 | - Configure SSL, compression, and security options. 30 | 3. View, copy, or download your generated **Caddyfile**. 31 | 32 | --- 33 | 34 | ## **Docker Deployment** 35 | 36 | Deploy CaddyGen using Docker with ease: 37 | 38 | ### **Run the Pre-Built Image** 39 | Pull the latest image from Docker Hub and run it: 40 | ```bash 41 | docker pull wardy784/caddygen:latest 42 | docker run -d --restart unless-stopped -p 8189:80 wardy784/caddygen:latest 43 | ``` 44 | 45 | ### **Run with Docker Compose** 46 | Use the following `docker-compose.yml`: 47 | ```yaml 48 | version: '3.8' 49 | 50 | services: 51 | app: 52 | image: wardy784/caddygen:latest 53 | ports: 54 | - "8189:80" 55 | restart: unless-stopped 56 | container_name: caddygen 57 | ``` 58 | 59 | To deploy: 60 | ```bash 61 | docker compose up -d 62 | ``` 63 | 64 | Access the app at `http://localhost:8189`. 65 | 66 | ### **Build Locally** 67 | If you prefer to build the image yourself: 68 | ```bash 69 | docker build -t caddygen . 70 | docker run -p 8189:80 caddygen 71 | ``` 72 | 73 | --- 74 | 75 | ## **Development Setup** 76 | 77 | This project is built using the following technologies: 78 | 79 | - **Vue 3** with TypeScript 80 | - **Vite** for fast builds 81 | - **Tailwind CSS** for styling 82 | - **Prism.js** for syntax highlighting 83 | - **Lucide Icons** for UI elements 84 | 85 | ### **Getting Started** 86 | 1. Clone the repository: 87 | ```bash 88 | git clone https://github.com/wardy784/caddygen.git 89 | cd caddygen 90 | ``` 91 | 92 | 2. Install dependencies: 93 | ```bash 94 | npm install 95 | ``` 96 | 97 | 3. Start the development server: 98 | ```bash 99 | npm run dev 100 | ``` 101 | 102 | 4. Open the app in your browser at `http://localhost:5173`. 103 | 104 | --- 105 | 106 | ## **Contributing** 107 | 108 | Contributions are welcome! Whether it's fixing a bug, suggesting a new feature, or improving the documentation, we’d love your help. Feel free to open an issue or submit a pull request. 109 | 110 | --- 111 | 112 | ## **License** 113 | 114 | CaddyGen is open-source and available under the **MIT License**. Feel free to use, modify, and distribute it as you wish! 115 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.8' 2 | 3 | services: 4 | app: 5 | image: wardy784/caddygen:latest 6 | ports: 7 | - "8189:80" 8 | restart: unless-stopped 9 | container_name: caddygen -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | CaddyGen | Caddy Config Generator 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /nginx.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name _; 4 | root /usr/share/nginx/html; 5 | index index.html; 6 | 7 | location / { 8 | try_files $uri $uri/ /index.html; 9 | } 10 | 11 | # Cache static assets 12 | location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { 13 | expires 30d; 14 | add_header Cache-Control "public, no-transform"; 15 | } 16 | 17 | # Security headers 18 | add_header X-Frame-Options "SAMEORIGIN"; 19 | add_header X-XSS-Protection "1; mode=block"; 20 | add_header X-Content-Type-Options "nosniff"; 21 | } -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vite-vue-typescript-starter", 3 | "version": "0.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "vite-vue-typescript-starter", 9 | "version": "0.0.0", 10 | "dependencies": { 11 | "@radix-ui/colors": "^3.0.0", 12 | "class-variance-authority": "^0.7.0", 13 | "clsx": "^2.1.0", 14 | "lucide-vue-next": "^0.344.0", 15 | "prismjs": "^1.29.0", 16 | "tailwind-merge": "^2.2.1", 17 | "tailwindcss-animate": "^1.0.7", 18 | "uuid": "^11.0.5", 19 | "vue": "^3.4.38", 20 | "vue-select": "^4.0.0-beta.6" 21 | }, 22 | "devDependencies": { 23 | "@types/prismjs": "^1.26.3", 24 | "@types/vue-select": "^3.16.8", 25 | "@vitejs/plugin-vue": "^5.1.3", 26 | "autoprefixer": "^10.4.18", 27 | "postcss": "^8.4.35", 28 | "tailwindcss": "^3.4.1", 29 | "typescript": "^5.5.3", 30 | "vite": "^5.4.2", 31 | "vue-tsc": "^2.1.4" 32 | } 33 | }, 34 | "node_modules/@alloc/quick-lru": { 35 | "version": "5.2.0", 36 | "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", 37 | "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", 38 | "engines": { 39 | "node": ">=10" 40 | }, 41 | "funding": { 42 | "url": "https://github.com/sponsors/sindresorhus" 43 | } 44 | }, 45 | "node_modules/@babel/helper-string-parser": { 46 | "version": "7.25.9", 47 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", 48 | "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", 49 | "engines": { 50 | "node": ">=6.9.0" 51 | } 52 | }, 53 | "node_modules/@babel/helper-validator-identifier": { 54 | "version": "7.25.9", 55 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", 56 | "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", 57 | "engines": { 58 | "node": ">=6.9.0" 59 | } 60 | }, 61 | "node_modules/@babel/parser": { 62 | "version": "7.26.3", 63 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", 64 | "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", 65 | "dependencies": { 66 | "@babel/types": "^7.26.3" 67 | }, 68 | "bin": { 69 | "parser": "bin/babel-parser.js" 70 | }, 71 | "engines": { 72 | "node": ">=6.0.0" 73 | } 74 | }, 75 | "node_modules/@babel/types": { 76 | "version": "7.26.3", 77 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", 78 | "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", 79 | "dependencies": { 80 | "@babel/helper-string-parser": "^7.25.9", 81 | "@babel/helper-validator-identifier": "^7.25.9" 82 | }, 83 | "engines": { 84 | "node": ">=6.9.0" 85 | } 86 | }, 87 | "node_modules/@esbuild/aix-ppc64": { 88 | "version": "0.21.5", 89 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", 90 | "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", 91 | "cpu": [ 92 | "ppc64" 93 | ], 94 | "dev": true, 95 | "optional": true, 96 | "os": [ 97 | "aix" 98 | ], 99 | "engines": { 100 | "node": ">=12" 101 | } 102 | }, 103 | "node_modules/@esbuild/android-arm": { 104 | "version": "0.21.5", 105 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", 106 | "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", 107 | "cpu": [ 108 | "arm" 109 | ], 110 | "dev": true, 111 | "optional": true, 112 | "os": [ 113 | "android" 114 | ], 115 | "engines": { 116 | "node": ">=12" 117 | } 118 | }, 119 | "node_modules/@esbuild/android-arm64": { 120 | "version": "0.21.5", 121 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", 122 | "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", 123 | "cpu": [ 124 | "arm64" 125 | ], 126 | "dev": true, 127 | "optional": true, 128 | "os": [ 129 | "android" 130 | ], 131 | "engines": { 132 | "node": ">=12" 133 | } 134 | }, 135 | "node_modules/@esbuild/android-x64": { 136 | "version": "0.21.5", 137 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", 138 | "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", 139 | "cpu": [ 140 | "x64" 141 | ], 142 | "dev": true, 143 | "optional": true, 144 | "os": [ 145 | "android" 146 | ], 147 | "engines": { 148 | "node": ">=12" 149 | } 150 | }, 151 | "node_modules/@esbuild/darwin-arm64": { 152 | "version": "0.21.5", 153 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", 154 | "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", 155 | "cpu": [ 156 | "arm64" 157 | ], 158 | "dev": true, 159 | "optional": true, 160 | "os": [ 161 | "darwin" 162 | ], 163 | "engines": { 164 | "node": ">=12" 165 | } 166 | }, 167 | "node_modules/@esbuild/darwin-x64": { 168 | "version": "0.21.5", 169 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", 170 | "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", 171 | "cpu": [ 172 | "x64" 173 | ], 174 | "dev": true, 175 | "optional": true, 176 | "os": [ 177 | "darwin" 178 | ], 179 | "engines": { 180 | "node": ">=12" 181 | } 182 | }, 183 | "node_modules/@esbuild/freebsd-arm64": { 184 | "version": "0.21.5", 185 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", 186 | "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", 187 | "cpu": [ 188 | "arm64" 189 | ], 190 | "dev": true, 191 | "optional": true, 192 | "os": [ 193 | "freebsd" 194 | ], 195 | "engines": { 196 | "node": ">=12" 197 | } 198 | }, 199 | "node_modules/@esbuild/freebsd-x64": { 200 | "version": "0.21.5", 201 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", 202 | "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", 203 | "cpu": [ 204 | "x64" 205 | ], 206 | "dev": true, 207 | "optional": true, 208 | "os": [ 209 | "freebsd" 210 | ], 211 | "engines": { 212 | "node": ">=12" 213 | } 214 | }, 215 | "node_modules/@esbuild/linux-arm": { 216 | "version": "0.21.5", 217 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", 218 | "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", 219 | "cpu": [ 220 | "arm" 221 | ], 222 | "dev": true, 223 | "optional": true, 224 | "os": [ 225 | "linux" 226 | ], 227 | "engines": { 228 | "node": ">=12" 229 | } 230 | }, 231 | "node_modules/@esbuild/linux-arm64": { 232 | "version": "0.21.5", 233 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", 234 | "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", 235 | "cpu": [ 236 | "arm64" 237 | ], 238 | "dev": true, 239 | "optional": true, 240 | "os": [ 241 | "linux" 242 | ], 243 | "engines": { 244 | "node": ">=12" 245 | } 246 | }, 247 | "node_modules/@esbuild/linux-ia32": { 248 | "version": "0.21.5", 249 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", 250 | "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", 251 | "cpu": [ 252 | "ia32" 253 | ], 254 | "dev": true, 255 | "optional": true, 256 | "os": [ 257 | "linux" 258 | ], 259 | "engines": { 260 | "node": ">=12" 261 | } 262 | }, 263 | "node_modules/@esbuild/linux-loong64": { 264 | "version": "0.21.5", 265 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", 266 | "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", 267 | "cpu": [ 268 | "loong64" 269 | ], 270 | "dev": true, 271 | "optional": true, 272 | "os": [ 273 | "linux" 274 | ], 275 | "engines": { 276 | "node": ">=12" 277 | } 278 | }, 279 | "node_modules/@esbuild/linux-mips64el": { 280 | "version": "0.21.5", 281 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", 282 | "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", 283 | "cpu": [ 284 | "mips64el" 285 | ], 286 | "dev": true, 287 | "optional": true, 288 | "os": [ 289 | "linux" 290 | ], 291 | "engines": { 292 | "node": ">=12" 293 | } 294 | }, 295 | "node_modules/@esbuild/linux-ppc64": { 296 | "version": "0.21.5", 297 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", 298 | "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", 299 | "cpu": [ 300 | "ppc64" 301 | ], 302 | "dev": true, 303 | "optional": true, 304 | "os": [ 305 | "linux" 306 | ], 307 | "engines": { 308 | "node": ">=12" 309 | } 310 | }, 311 | "node_modules/@esbuild/linux-riscv64": { 312 | "version": "0.21.5", 313 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", 314 | "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", 315 | "cpu": [ 316 | "riscv64" 317 | ], 318 | "dev": true, 319 | "optional": true, 320 | "os": [ 321 | "linux" 322 | ], 323 | "engines": { 324 | "node": ">=12" 325 | } 326 | }, 327 | "node_modules/@esbuild/linux-s390x": { 328 | "version": "0.21.5", 329 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", 330 | "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", 331 | "cpu": [ 332 | "s390x" 333 | ], 334 | "dev": true, 335 | "optional": true, 336 | "os": [ 337 | "linux" 338 | ], 339 | "engines": { 340 | "node": ">=12" 341 | } 342 | }, 343 | "node_modules/@esbuild/linux-x64": { 344 | "version": "0.21.5", 345 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", 346 | "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", 347 | "cpu": [ 348 | "x64" 349 | ], 350 | "dev": true, 351 | "optional": true, 352 | "os": [ 353 | "linux" 354 | ], 355 | "engines": { 356 | "node": ">=12" 357 | } 358 | }, 359 | "node_modules/@esbuild/netbsd-x64": { 360 | "version": "0.21.5", 361 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", 362 | "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", 363 | "cpu": [ 364 | "x64" 365 | ], 366 | "dev": true, 367 | "optional": true, 368 | "os": [ 369 | "netbsd" 370 | ], 371 | "engines": { 372 | "node": ">=12" 373 | } 374 | }, 375 | "node_modules/@esbuild/openbsd-x64": { 376 | "version": "0.21.5", 377 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", 378 | "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", 379 | "cpu": [ 380 | "x64" 381 | ], 382 | "dev": true, 383 | "optional": true, 384 | "os": [ 385 | "openbsd" 386 | ], 387 | "engines": { 388 | "node": ">=12" 389 | } 390 | }, 391 | "node_modules/@esbuild/sunos-x64": { 392 | "version": "0.21.5", 393 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", 394 | "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", 395 | "cpu": [ 396 | "x64" 397 | ], 398 | "dev": true, 399 | "optional": true, 400 | "os": [ 401 | "sunos" 402 | ], 403 | "engines": { 404 | "node": ">=12" 405 | } 406 | }, 407 | "node_modules/@esbuild/win32-arm64": { 408 | "version": "0.21.5", 409 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", 410 | "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", 411 | "cpu": [ 412 | "arm64" 413 | ], 414 | "dev": true, 415 | "optional": true, 416 | "os": [ 417 | "win32" 418 | ], 419 | "engines": { 420 | "node": ">=12" 421 | } 422 | }, 423 | "node_modules/@esbuild/win32-ia32": { 424 | "version": "0.21.5", 425 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", 426 | "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", 427 | "cpu": [ 428 | "ia32" 429 | ], 430 | "dev": true, 431 | "optional": true, 432 | "os": [ 433 | "win32" 434 | ], 435 | "engines": { 436 | "node": ">=12" 437 | } 438 | }, 439 | "node_modules/@esbuild/win32-x64": { 440 | "version": "0.21.5", 441 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", 442 | "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", 443 | "cpu": [ 444 | "x64" 445 | ], 446 | "dev": true, 447 | "optional": true, 448 | "os": [ 449 | "win32" 450 | ], 451 | "engines": { 452 | "node": ">=12" 453 | } 454 | }, 455 | "node_modules/@isaacs/cliui": { 456 | "version": "8.0.2", 457 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", 458 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 459 | "dependencies": { 460 | "string-width": "^5.1.2", 461 | "string-width-cjs": "npm:string-width@^4.2.0", 462 | "strip-ansi": "^7.0.1", 463 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 464 | "wrap-ansi": "^8.1.0", 465 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 466 | }, 467 | "engines": { 468 | "node": ">=12" 469 | } 470 | }, 471 | "node_modules/@jridgewell/gen-mapping": { 472 | "version": "0.3.8", 473 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", 474 | "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", 475 | "dependencies": { 476 | "@jridgewell/set-array": "^1.2.1", 477 | "@jridgewell/sourcemap-codec": "^1.4.10", 478 | "@jridgewell/trace-mapping": "^0.3.24" 479 | }, 480 | "engines": { 481 | "node": ">=6.0.0" 482 | } 483 | }, 484 | "node_modules/@jridgewell/resolve-uri": { 485 | "version": "3.1.2", 486 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 487 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 488 | "engines": { 489 | "node": ">=6.0.0" 490 | } 491 | }, 492 | "node_modules/@jridgewell/set-array": { 493 | "version": "1.2.1", 494 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 495 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 496 | "engines": { 497 | "node": ">=6.0.0" 498 | } 499 | }, 500 | "node_modules/@jridgewell/sourcemap-codec": { 501 | "version": "1.5.0", 502 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 503 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" 504 | }, 505 | "node_modules/@jridgewell/trace-mapping": { 506 | "version": "0.3.25", 507 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 508 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 509 | "dependencies": { 510 | "@jridgewell/resolve-uri": "^3.1.0", 511 | "@jridgewell/sourcemap-codec": "^1.4.14" 512 | } 513 | }, 514 | "node_modules/@nodelib/fs.scandir": { 515 | "version": "2.1.5", 516 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 517 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 518 | "dependencies": { 519 | "@nodelib/fs.stat": "2.0.5", 520 | "run-parallel": "^1.1.9" 521 | }, 522 | "engines": { 523 | "node": ">= 8" 524 | } 525 | }, 526 | "node_modules/@nodelib/fs.stat": { 527 | "version": "2.0.5", 528 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 529 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 530 | "engines": { 531 | "node": ">= 8" 532 | } 533 | }, 534 | "node_modules/@nodelib/fs.walk": { 535 | "version": "1.2.8", 536 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 537 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 538 | "dependencies": { 539 | "@nodelib/fs.scandir": "2.1.5", 540 | "fastq": "^1.6.0" 541 | }, 542 | "engines": { 543 | "node": ">= 8" 544 | } 545 | }, 546 | "node_modules/@pkgjs/parseargs": { 547 | "version": "0.11.0", 548 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 549 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 550 | "optional": true, 551 | "engines": { 552 | "node": ">=14" 553 | } 554 | }, 555 | "node_modules/@radix-ui/colors": { 556 | "version": "3.0.0", 557 | "resolved": "https://registry.npmjs.org/@radix-ui/colors/-/colors-3.0.0.tgz", 558 | "integrity": "sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==" 559 | }, 560 | "node_modules/@rollup/rollup-android-arm-eabi": { 561 | "version": "4.30.0", 562 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.0.tgz", 563 | "integrity": "sha512-qFcFto9figFLz2g25DxJ1WWL9+c91fTxnGuwhToCl8BaqDsDYMl/kOnBXAyAqkkzAWimYMSWNPWEjt+ADAHuoQ==", 564 | "cpu": [ 565 | "arm" 566 | ], 567 | "dev": true, 568 | "optional": true, 569 | "os": [ 570 | "android" 571 | ] 572 | }, 573 | "node_modules/@rollup/rollup-android-arm64": { 574 | "version": "4.30.0", 575 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.0.tgz", 576 | "integrity": "sha512-vqrQdusvVl7dthqNjWCL043qelBK+gv9v3ZiqdxgaJvmZyIAAXMjeGVSqZynKq69T7062T5VrVTuikKSAAVP6A==", 577 | "cpu": [ 578 | "arm64" 579 | ], 580 | "dev": true, 581 | "optional": true, 582 | "os": [ 583 | "android" 584 | ] 585 | }, 586 | "node_modules/@rollup/rollup-darwin-arm64": { 587 | "version": "4.30.0", 588 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.0.tgz", 589 | "integrity": "sha512-617pd92LhdA9+wpixnzsyhVft3szYiN16aNUMzVkf2N+yAk8UXY226Bfp36LvxYTUt7MO/ycqGFjQgJ0wlMaWQ==", 590 | "cpu": [ 591 | "arm64" 592 | ], 593 | "dev": true, 594 | "optional": true, 595 | "os": [ 596 | "darwin" 597 | ] 598 | }, 599 | "node_modules/@rollup/rollup-darwin-x64": { 600 | "version": "4.30.0", 601 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.0.tgz", 602 | "integrity": "sha512-Y3b4oDoaEhCypg8ajPqigKDcpi5ZZovemQl9Edpem0uNv6UUjXv7iySBpGIUTSs2ovWOzYpfw9EbFJXF/fJHWw==", 603 | "cpu": [ 604 | "x64" 605 | ], 606 | "dev": true, 607 | "optional": true, 608 | "os": [ 609 | "darwin" 610 | ] 611 | }, 612 | "node_modules/@rollup/rollup-freebsd-arm64": { 613 | "version": "4.30.0", 614 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.0.tgz", 615 | "integrity": "sha512-3REQJ4f90sFIBfa0BUokiCdrV/E4uIjhkWe1bMgCkhFXbf4D8YN6C4zwJL881GM818qVYE9BO3dGwjKhpo2ABA==", 616 | "cpu": [ 617 | "arm64" 618 | ], 619 | "dev": true, 620 | "optional": true, 621 | "os": [ 622 | "freebsd" 623 | ] 624 | }, 625 | "node_modules/@rollup/rollup-freebsd-x64": { 626 | "version": "4.30.0", 627 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.0.tgz", 628 | "integrity": "sha512-ZtY3Y8icbe3Cc+uQicsXG5L+CRGUfLZjW6j2gn5ikpltt3Whqjfo5mkyZ86UiuHF9Q3ZsaQeW7YswlHnN+lAcg==", 629 | "cpu": [ 630 | "x64" 631 | ], 632 | "dev": true, 633 | "optional": true, 634 | "os": [ 635 | "freebsd" 636 | ] 637 | }, 638 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 639 | "version": "4.30.0", 640 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.0.tgz", 641 | "integrity": "sha512-bsPGGzfiHXMhQGuFGpmo2PyTwcrh2otL6ycSZAFTESviUoBOuxF7iBbAL5IJXc/69peXl5rAtbewBFeASZ9O0g==", 642 | "cpu": [ 643 | "arm" 644 | ], 645 | "dev": true, 646 | "optional": true, 647 | "os": [ 648 | "linux" 649 | ] 650 | }, 651 | "node_modules/@rollup/rollup-linux-arm-musleabihf": { 652 | "version": "4.30.0", 653 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.0.tgz", 654 | "integrity": "sha512-kvyIECEhs2DrrdfQf++maCWJIQ974EI4txlz1nNSBaCdtf7i5Xf1AQCEJWOC5rEBisdaMFFnOWNLYt7KpFqy5A==", 655 | "cpu": [ 656 | "arm" 657 | ], 658 | "dev": true, 659 | "optional": true, 660 | "os": [ 661 | "linux" 662 | ] 663 | }, 664 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 665 | "version": "4.30.0", 666 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.0.tgz", 667 | "integrity": "sha512-CFE7zDNrokaotXu+shwIrmWrFxllg79vciH4E/zeK7NitVuWEaXRzS0mFfFvyhZfn8WfVOG/1E9u8/DFEgK7WQ==", 668 | "cpu": [ 669 | "arm64" 670 | ], 671 | "dev": true, 672 | "optional": true, 673 | "os": [ 674 | "linux" 675 | ] 676 | }, 677 | "node_modules/@rollup/rollup-linux-arm64-musl": { 678 | "version": "4.30.0", 679 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.0.tgz", 680 | "integrity": "sha512-MctNTBlvMcIBP0t8lV/NXiUwFg9oK5F79CxLU+a3xgrdJjfBLVIEHSAjQ9+ipofN2GKaMLnFFXLltg1HEEPaGQ==", 681 | "cpu": [ 682 | "arm64" 683 | ], 684 | "dev": true, 685 | "optional": true, 686 | "os": [ 687 | "linux" 688 | ] 689 | }, 690 | "node_modules/@rollup/rollup-linux-loongarch64-gnu": { 691 | "version": "4.30.0", 692 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.0.tgz", 693 | "integrity": "sha512-fBpoYwLEPivL3q368+gwn4qnYnr7GVwM6NnMo8rJ4wb0p/Y5lg88vQRRP077gf+tc25akuqd+1Sxbn9meODhwA==", 694 | "cpu": [ 695 | "loong64" 696 | ], 697 | "dev": true, 698 | "optional": true, 699 | "os": [ 700 | "linux" 701 | ] 702 | }, 703 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 704 | "version": "4.30.0", 705 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.0.tgz", 706 | "integrity": "sha512-1hiHPV6dUaqIMXrIjN+vgJqtfkLpqHS1Xsg0oUfUVD98xGp1wX89PIXgDF2DWra1nxAd8dfE0Dk59MyeKaBVAw==", 707 | "cpu": [ 708 | "ppc64" 709 | ], 710 | "dev": true, 711 | "optional": true, 712 | "os": [ 713 | "linux" 714 | ] 715 | }, 716 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 717 | "version": "4.30.0", 718 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.0.tgz", 719 | "integrity": "sha512-U0xcC80SMpEbvvLw92emHrNjlS3OXjAM0aVzlWfar6PR0ODWCTQtKeeB+tlAPGfZQXicv1SpWwRz9Hyzq3Jx3g==", 720 | "cpu": [ 721 | "riscv64" 722 | ], 723 | "dev": true, 724 | "optional": true, 725 | "os": [ 726 | "linux" 727 | ] 728 | }, 729 | "node_modules/@rollup/rollup-linux-s390x-gnu": { 730 | "version": "4.30.0", 731 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.0.tgz", 732 | "integrity": "sha512-VU/P/IODrNPasgZDLIFJmMiLGez+BN11DQWfTVlViJVabyF3JaeaJkP6teI8760f18BMGCQOW9gOmuzFaI1pUw==", 733 | "cpu": [ 734 | "s390x" 735 | ], 736 | "dev": true, 737 | "optional": true, 738 | "os": [ 739 | "linux" 740 | ] 741 | }, 742 | "node_modules/@rollup/rollup-linux-x64-gnu": { 743 | "version": "4.30.0", 744 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.0.tgz", 745 | "integrity": "sha512-laQVRvdbKmjXuFA3ZiZj7+U24FcmoPlXEi2OyLfbpY2MW1oxLt9Au8q9eHd0x6Pw/Kw4oe9gwVXWwIf2PVqblg==", 746 | "cpu": [ 747 | "x64" 748 | ], 749 | "dev": true, 750 | "optional": true, 751 | "os": [ 752 | "linux" 753 | ] 754 | }, 755 | "node_modules/@rollup/rollup-linux-x64-musl": { 756 | "version": "4.30.0", 757 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.0.tgz", 758 | "integrity": "sha512-3wzKzduS7jzxqcOvy/ocU/gMR3/QrHEFLge5CD7Si9fyHuoXcidyYZ6jyx8OPYmCcGm3uKTUl+9jUSAY74Ln5A==", 759 | "cpu": [ 760 | "x64" 761 | ], 762 | "dev": true, 763 | "optional": true, 764 | "os": [ 765 | "linux" 766 | ] 767 | }, 768 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 769 | "version": "4.30.0", 770 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.0.tgz", 771 | "integrity": "sha512-jROwnI1+wPyuv696rAFHp5+6RFhXGGwgmgSfzE8e4xfit6oLRg7GyMArVUoM3ChS045OwWr9aTnU+2c1UdBMyw==", 772 | "cpu": [ 773 | "arm64" 774 | ], 775 | "dev": true, 776 | "optional": true, 777 | "os": [ 778 | "win32" 779 | ] 780 | }, 781 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 782 | "version": "4.30.0", 783 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.0.tgz", 784 | "integrity": "sha512-duzweyup5WELhcXx5H1jokpr13i3BV9b48FMiikYAwk/MT1LrMYYk2TzenBd0jj4ivQIt58JWSxc19y4SvLP4g==", 785 | "cpu": [ 786 | "ia32" 787 | ], 788 | "dev": true, 789 | "optional": true, 790 | "os": [ 791 | "win32" 792 | ] 793 | }, 794 | "node_modules/@rollup/rollup-win32-x64-msvc": { 795 | "version": "4.30.0", 796 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.0.tgz", 797 | "integrity": "sha512-DYvxS0M07PvgvavMIybCOBYheyrqlui6ZQBHJs6GqduVzHSZ06TPPvlfvnYstjODHQ8UUXFwt5YE+h0jFI8kwg==", 798 | "cpu": [ 799 | "x64" 800 | ], 801 | "dev": true, 802 | "optional": true, 803 | "os": [ 804 | "win32" 805 | ] 806 | }, 807 | "node_modules/@types/estree": { 808 | "version": "1.0.6", 809 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", 810 | "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", 811 | "dev": true 812 | }, 813 | "node_modules/@types/prismjs": { 814 | "version": "1.26.5", 815 | "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", 816 | "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==", 817 | "dev": true 818 | }, 819 | "node_modules/@types/vue-select": { 820 | "version": "3.16.8", 821 | "resolved": "https://registry.npmjs.org/@types/vue-select/-/vue-select-3.16.8.tgz", 822 | "integrity": "sha512-ZBovlBrWf/wnPqCmMw24ryIC7ghQLfIBmkl1qssqBGONdx7yOmi/GLwtPxll/6UwXWGNWMeokleOgVAZPis+Ag==", 823 | "dev": true, 824 | "dependencies": { 825 | "vue": "^2.0.0" 826 | } 827 | }, 828 | "node_modules/@types/vue-select/node_modules/@vue/compiler-sfc": { 829 | "version": "2.7.16", 830 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz", 831 | "integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==", 832 | "dev": true, 833 | "dependencies": { 834 | "@babel/parser": "^7.23.5", 835 | "postcss": "^8.4.14", 836 | "source-map": "^0.6.1" 837 | }, 838 | "optionalDependencies": { 839 | "prettier": "^1.18.2 || ^2.0.0" 840 | } 841 | }, 842 | "node_modules/@types/vue-select/node_modules/vue": { 843 | "version": "2.7.16", 844 | "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.16.tgz", 845 | "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==", 846 | "deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.", 847 | "dev": true, 848 | "dependencies": { 849 | "@vue/compiler-sfc": "2.7.16", 850 | "csstype": "^3.1.0" 851 | } 852 | }, 853 | "node_modules/@vitejs/plugin-vue": { 854 | "version": "5.2.1", 855 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz", 856 | "integrity": "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==", 857 | "dev": true, 858 | "engines": { 859 | "node": "^18.0.0 || >=20.0.0" 860 | }, 861 | "peerDependencies": { 862 | "vite": "^5.0.0 || ^6.0.0", 863 | "vue": "^3.2.25" 864 | } 865 | }, 866 | "node_modules/@volar/language-core": { 867 | "version": "2.4.11", 868 | "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.11.tgz", 869 | "integrity": "sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==", 870 | "dev": true, 871 | "dependencies": { 872 | "@volar/source-map": "2.4.11" 873 | } 874 | }, 875 | "node_modules/@volar/source-map": { 876 | "version": "2.4.11", 877 | "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.11.tgz", 878 | "integrity": "sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ==", 879 | "dev": true 880 | }, 881 | "node_modules/@volar/typescript": { 882 | "version": "2.4.11", 883 | "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.11.tgz", 884 | "integrity": "sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==", 885 | "dev": true, 886 | "dependencies": { 887 | "@volar/language-core": "2.4.11", 888 | "path-browserify": "^1.0.1", 889 | "vscode-uri": "^3.0.8" 890 | } 891 | }, 892 | "node_modules/@vue/compiler-core": { 893 | "version": "3.5.13", 894 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", 895 | "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", 896 | "dependencies": { 897 | "@babel/parser": "^7.25.3", 898 | "@vue/shared": "3.5.13", 899 | "entities": "^4.5.0", 900 | "estree-walker": "^2.0.2", 901 | "source-map-js": "^1.2.0" 902 | } 903 | }, 904 | "node_modules/@vue/compiler-dom": { 905 | "version": "3.5.13", 906 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", 907 | "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", 908 | "dependencies": { 909 | "@vue/compiler-core": "3.5.13", 910 | "@vue/shared": "3.5.13" 911 | } 912 | }, 913 | "node_modules/@vue/compiler-sfc": { 914 | "version": "3.5.13", 915 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", 916 | "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", 917 | "dependencies": { 918 | "@babel/parser": "^7.25.3", 919 | "@vue/compiler-core": "3.5.13", 920 | "@vue/compiler-dom": "3.5.13", 921 | "@vue/compiler-ssr": "3.5.13", 922 | "@vue/shared": "3.5.13", 923 | "estree-walker": "^2.0.2", 924 | "magic-string": "^0.30.11", 925 | "postcss": "^8.4.48", 926 | "source-map-js": "^1.2.0" 927 | } 928 | }, 929 | "node_modules/@vue/compiler-ssr": { 930 | "version": "3.5.13", 931 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", 932 | "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", 933 | "dependencies": { 934 | "@vue/compiler-dom": "3.5.13", 935 | "@vue/shared": "3.5.13" 936 | } 937 | }, 938 | "node_modules/@vue/compiler-vue2": { 939 | "version": "2.7.16", 940 | "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", 941 | "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", 942 | "dev": true, 943 | "dependencies": { 944 | "de-indent": "^1.0.2", 945 | "he": "^1.2.0" 946 | } 947 | }, 948 | "node_modules/@vue/language-core": { 949 | "version": "2.2.0", 950 | "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.0.tgz", 951 | "integrity": "sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==", 952 | "dev": true, 953 | "dependencies": { 954 | "@volar/language-core": "~2.4.11", 955 | "@vue/compiler-dom": "^3.5.0", 956 | "@vue/compiler-vue2": "^2.7.16", 957 | "@vue/shared": "^3.5.0", 958 | "alien-signals": "^0.4.9", 959 | "minimatch": "^9.0.3", 960 | "muggle-string": "^0.4.1", 961 | "path-browserify": "^1.0.1" 962 | }, 963 | "peerDependencies": { 964 | "typescript": "*" 965 | }, 966 | "peerDependenciesMeta": { 967 | "typescript": { 968 | "optional": true 969 | } 970 | } 971 | }, 972 | "node_modules/@vue/reactivity": { 973 | "version": "3.5.13", 974 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", 975 | "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", 976 | "dependencies": { 977 | "@vue/shared": "3.5.13" 978 | } 979 | }, 980 | "node_modules/@vue/runtime-core": { 981 | "version": "3.5.13", 982 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", 983 | "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", 984 | "dependencies": { 985 | "@vue/reactivity": "3.5.13", 986 | "@vue/shared": "3.5.13" 987 | } 988 | }, 989 | "node_modules/@vue/runtime-dom": { 990 | "version": "3.5.13", 991 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", 992 | "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", 993 | "dependencies": { 994 | "@vue/reactivity": "3.5.13", 995 | "@vue/runtime-core": "3.5.13", 996 | "@vue/shared": "3.5.13", 997 | "csstype": "^3.1.3" 998 | } 999 | }, 1000 | "node_modules/@vue/server-renderer": { 1001 | "version": "3.5.13", 1002 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", 1003 | "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", 1004 | "dependencies": { 1005 | "@vue/compiler-ssr": "3.5.13", 1006 | "@vue/shared": "3.5.13" 1007 | }, 1008 | "peerDependencies": { 1009 | "vue": "3.5.13" 1010 | } 1011 | }, 1012 | "node_modules/@vue/shared": { 1013 | "version": "3.5.13", 1014 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", 1015 | "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==" 1016 | }, 1017 | "node_modules/alien-signals": { 1018 | "version": "0.4.12", 1019 | "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.4.12.tgz", 1020 | "integrity": "sha512-Og0PgAihxlp1R22bsoBsyhhMG4+qhU+fkkLPoGBQkYVc3qt9rYnrwYTf+M6kqUqUZpf3rXDnpL90iKa0QcSVVg==", 1021 | "dev": true 1022 | }, 1023 | "node_modules/ansi-regex": { 1024 | "version": "6.1.0", 1025 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 1026 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 1027 | "engines": { 1028 | "node": ">=12" 1029 | }, 1030 | "funding": { 1031 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 1032 | } 1033 | }, 1034 | "node_modules/ansi-styles": { 1035 | "version": "6.2.1", 1036 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 1037 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 1038 | "engines": { 1039 | "node": ">=12" 1040 | }, 1041 | "funding": { 1042 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1043 | } 1044 | }, 1045 | "node_modules/any-promise": { 1046 | "version": "1.3.0", 1047 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 1048 | "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" 1049 | }, 1050 | "node_modules/anymatch": { 1051 | "version": "3.1.3", 1052 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 1053 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 1054 | "dependencies": { 1055 | "normalize-path": "^3.0.0", 1056 | "picomatch": "^2.0.4" 1057 | }, 1058 | "engines": { 1059 | "node": ">= 8" 1060 | } 1061 | }, 1062 | "node_modules/arg": { 1063 | "version": "5.0.2", 1064 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 1065 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" 1066 | }, 1067 | "node_modules/autoprefixer": { 1068 | "version": "10.4.20", 1069 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", 1070 | "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", 1071 | "dev": true, 1072 | "funding": [ 1073 | { 1074 | "type": "opencollective", 1075 | "url": "https://opencollective.com/postcss/" 1076 | }, 1077 | { 1078 | "type": "tidelift", 1079 | "url": "https://tidelift.com/funding/github/npm/autoprefixer" 1080 | }, 1081 | { 1082 | "type": "github", 1083 | "url": "https://github.com/sponsors/ai" 1084 | } 1085 | ], 1086 | "dependencies": { 1087 | "browserslist": "^4.23.3", 1088 | "caniuse-lite": "^1.0.30001646", 1089 | "fraction.js": "^4.3.7", 1090 | "normalize-range": "^0.1.2", 1091 | "picocolors": "^1.0.1", 1092 | "postcss-value-parser": "^4.2.0" 1093 | }, 1094 | "bin": { 1095 | "autoprefixer": "bin/autoprefixer" 1096 | }, 1097 | "engines": { 1098 | "node": "^10 || ^12 || >=14" 1099 | }, 1100 | "peerDependencies": { 1101 | "postcss": "^8.1.0" 1102 | } 1103 | }, 1104 | "node_modules/balanced-match": { 1105 | "version": "1.0.2", 1106 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1107 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 1108 | }, 1109 | "node_modules/binary-extensions": { 1110 | "version": "2.3.0", 1111 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", 1112 | "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", 1113 | "engines": { 1114 | "node": ">=8" 1115 | }, 1116 | "funding": { 1117 | "url": "https://github.com/sponsors/sindresorhus" 1118 | } 1119 | }, 1120 | "node_modules/brace-expansion": { 1121 | "version": "2.0.1", 1122 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 1123 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 1124 | "dependencies": { 1125 | "balanced-match": "^1.0.0" 1126 | } 1127 | }, 1128 | "node_modules/braces": { 1129 | "version": "3.0.3", 1130 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 1131 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 1132 | "dependencies": { 1133 | "fill-range": "^7.1.1" 1134 | }, 1135 | "engines": { 1136 | "node": ">=8" 1137 | } 1138 | }, 1139 | "node_modules/browserslist": { 1140 | "version": "4.24.3", 1141 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.3.tgz", 1142 | "integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==", 1143 | "dev": true, 1144 | "funding": [ 1145 | { 1146 | "type": "opencollective", 1147 | "url": "https://opencollective.com/browserslist" 1148 | }, 1149 | { 1150 | "type": "tidelift", 1151 | "url": "https://tidelift.com/funding/github/npm/browserslist" 1152 | }, 1153 | { 1154 | "type": "github", 1155 | "url": "https://github.com/sponsors/ai" 1156 | } 1157 | ], 1158 | "dependencies": { 1159 | "caniuse-lite": "^1.0.30001688", 1160 | "electron-to-chromium": "^1.5.73", 1161 | "node-releases": "^2.0.19", 1162 | "update-browserslist-db": "^1.1.1" 1163 | }, 1164 | "bin": { 1165 | "browserslist": "cli.js" 1166 | }, 1167 | "engines": { 1168 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 1169 | } 1170 | }, 1171 | "node_modules/camelcase-css": { 1172 | "version": "2.0.1", 1173 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 1174 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 1175 | "engines": { 1176 | "node": ">= 6" 1177 | } 1178 | }, 1179 | "node_modules/caniuse-lite": { 1180 | "version": "1.0.30001690", 1181 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz", 1182 | "integrity": "sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==", 1183 | "dev": true, 1184 | "funding": [ 1185 | { 1186 | "type": "opencollective", 1187 | "url": "https://opencollective.com/browserslist" 1188 | }, 1189 | { 1190 | "type": "tidelift", 1191 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 1192 | }, 1193 | { 1194 | "type": "github", 1195 | "url": "https://github.com/sponsors/ai" 1196 | } 1197 | ] 1198 | }, 1199 | "node_modules/chokidar": { 1200 | "version": "3.6.0", 1201 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", 1202 | "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", 1203 | "dependencies": { 1204 | "anymatch": "~3.1.2", 1205 | "braces": "~3.0.2", 1206 | "glob-parent": "~5.1.2", 1207 | "is-binary-path": "~2.1.0", 1208 | "is-glob": "~4.0.1", 1209 | "normalize-path": "~3.0.0", 1210 | "readdirp": "~3.6.0" 1211 | }, 1212 | "engines": { 1213 | "node": ">= 8.10.0" 1214 | }, 1215 | "funding": { 1216 | "url": "https://paulmillr.com/funding/" 1217 | }, 1218 | "optionalDependencies": { 1219 | "fsevents": "~2.3.2" 1220 | } 1221 | }, 1222 | "node_modules/chokidar/node_modules/glob-parent": { 1223 | "version": "5.1.2", 1224 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1225 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1226 | "dependencies": { 1227 | "is-glob": "^4.0.1" 1228 | }, 1229 | "engines": { 1230 | "node": ">= 6" 1231 | } 1232 | }, 1233 | "node_modules/class-variance-authority": { 1234 | "version": "0.7.1", 1235 | "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", 1236 | "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", 1237 | "dependencies": { 1238 | "clsx": "^2.1.1" 1239 | }, 1240 | "funding": { 1241 | "url": "https://polar.sh/cva" 1242 | } 1243 | }, 1244 | "node_modules/clsx": { 1245 | "version": "2.1.1", 1246 | "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", 1247 | "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", 1248 | "engines": { 1249 | "node": ">=6" 1250 | } 1251 | }, 1252 | "node_modules/color-convert": { 1253 | "version": "2.0.1", 1254 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1255 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1256 | "dependencies": { 1257 | "color-name": "~1.1.4" 1258 | }, 1259 | "engines": { 1260 | "node": ">=7.0.0" 1261 | } 1262 | }, 1263 | "node_modules/color-name": { 1264 | "version": "1.1.4", 1265 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1266 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 1267 | }, 1268 | "node_modules/commander": { 1269 | "version": "4.1.1", 1270 | "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", 1271 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", 1272 | "engines": { 1273 | "node": ">= 6" 1274 | } 1275 | }, 1276 | "node_modules/cross-spawn": { 1277 | "version": "7.0.6", 1278 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 1279 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 1280 | "dependencies": { 1281 | "path-key": "^3.1.0", 1282 | "shebang-command": "^2.0.0", 1283 | "which": "^2.0.1" 1284 | }, 1285 | "engines": { 1286 | "node": ">= 8" 1287 | } 1288 | }, 1289 | "node_modules/cssesc": { 1290 | "version": "3.0.0", 1291 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 1292 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 1293 | "bin": { 1294 | "cssesc": "bin/cssesc" 1295 | }, 1296 | "engines": { 1297 | "node": ">=4" 1298 | } 1299 | }, 1300 | "node_modules/csstype": { 1301 | "version": "3.1.3", 1302 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 1303 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" 1304 | }, 1305 | "node_modules/de-indent": { 1306 | "version": "1.0.2", 1307 | "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", 1308 | "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", 1309 | "dev": true 1310 | }, 1311 | "node_modules/didyoumean": { 1312 | "version": "1.2.2", 1313 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 1314 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" 1315 | }, 1316 | "node_modules/dlv": { 1317 | "version": "1.1.3", 1318 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 1319 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" 1320 | }, 1321 | "node_modules/eastasianwidth": { 1322 | "version": "0.2.0", 1323 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 1324 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" 1325 | }, 1326 | "node_modules/electron-to-chromium": { 1327 | "version": "1.5.78", 1328 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.78.tgz", 1329 | "integrity": "sha512-UmwIt7HRKN1rsJfddG5UG7rCTCTAKoS9JeOy/R0zSenAyaZ8SU3RuXlwcratxhdxGRNpk03iq8O7BA3W7ibLVw==", 1330 | "dev": true 1331 | }, 1332 | "node_modules/emoji-regex": { 1333 | "version": "9.2.2", 1334 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 1335 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" 1336 | }, 1337 | "node_modules/entities": { 1338 | "version": "4.5.0", 1339 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", 1340 | "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", 1341 | "engines": { 1342 | "node": ">=0.12" 1343 | }, 1344 | "funding": { 1345 | "url": "https://github.com/fb55/entities?sponsor=1" 1346 | } 1347 | }, 1348 | "node_modules/esbuild": { 1349 | "version": "0.21.5", 1350 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", 1351 | "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", 1352 | "dev": true, 1353 | "hasInstallScript": true, 1354 | "bin": { 1355 | "esbuild": "bin/esbuild" 1356 | }, 1357 | "engines": { 1358 | "node": ">=12" 1359 | }, 1360 | "optionalDependencies": { 1361 | "@esbuild/aix-ppc64": "0.21.5", 1362 | "@esbuild/android-arm": "0.21.5", 1363 | "@esbuild/android-arm64": "0.21.5", 1364 | "@esbuild/android-x64": "0.21.5", 1365 | "@esbuild/darwin-arm64": "0.21.5", 1366 | "@esbuild/darwin-x64": "0.21.5", 1367 | "@esbuild/freebsd-arm64": "0.21.5", 1368 | "@esbuild/freebsd-x64": "0.21.5", 1369 | "@esbuild/linux-arm": "0.21.5", 1370 | "@esbuild/linux-arm64": "0.21.5", 1371 | "@esbuild/linux-ia32": "0.21.5", 1372 | "@esbuild/linux-loong64": "0.21.5", 1373 | "@esbuild/linux-mips64el": "0.21.5", 1374 | "@esbuild/linux-ppc64": "0.21.5", 1375 | "@esbuild/linux-riscv64": "0.21.5", 1376 | "@esbuild/linux-s390x": "0.21.5", 1377 | "@esbuild/linux-x64": "0.21.5", 1378 | "@esbuild/netbsd-x64": "0.21.5", 1379 | "@esbuild/openbsd-x64": "0.21.5", 1380 | "@esbuild/sunos-x64": "0.21.5", 1381 | "@esbuild/win32-arm64": "0.21.5", 1382 | "@esbuild/win32-ia32": "0.21.5", 1383 | "@esbuild/win32-x64": "0.21.5" 1384 | } 1385 | }, 1386 | "node_modules/escalade": { 1387 | "version": "3.2.0", 1388 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 1389 | "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 1390 | "dev": true, 1391 | "engines": { 1392 | "node": ">=6" 1393 | } 1394 | }, 1395 | "node_modules/estree-walker": { 1396 | "version": "2.0.2", 1397 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 1398 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" 1399 | }, 1400 | "node_modules/fast-glob": { 1401 | "version": "3.3.3", 1402 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", 1403 | "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", 1404 | "dependencies": { 1405 | "@nodelib/fs.stat": "^2.0.2", 1406 | "@nodelib/fs.walk": "^1.2.3", 1407 | "glob-parent": "^5.1.2", 1408 | "merge2": "^1.3.0", 1409 | "micromatch": "^4.0.8" 1410 | }, 1411 | "engines": { 1412 | "node": ">=8.6.0" 1413 | } 1414 | }, 1415 | "node_modules/fast-glob/node_modules/glob-parent": { 1416 | "version": "5.1.2", 1417 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1418 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1419 | "dependencies": { 1420 | "is-glob": "^4.0.1" 1421 | }, 1422 | "engines": { 1423 | "node": ">= 6" 1424 | } 1425 | }, 1426 | "node_modules/fastq": { 1427 | "version": "1.18.0", 1428 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", 1429 | "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", 1430 | "dependencies": { 1431 | "reusify": "^1.0.4" 1432 | } 1433 | }, 1434 | "node_modules/fill-range": { 1435 | "version": "7.1.1", 1436 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 1437 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 1438 | "dependencies": { 1439 | "to-regex-range": "^5.0.1" 1440 | }, 1441 | "engines": { 1442 | "node": ">=8" 1443 | } 1444 | }, 1445 | "node_modules/foreground-child": { 1446 | "version": "3.3.0", 1447 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", 1448 | "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", 1449 | "dependencies": { 1450 | "cross-spawn": "^7.0.0", 1451 | "signal-exit": "^4.0.1" 1452 | }, 1453 | "engines": { 1454 | "node": ">=14" 1455 | }, 1456 | "funding": { 1457 | "url": "https://github.com/sponsors/isaacs" 1458 | } 1459 | }, 1460 | "node_modules/fraction.js": { 1461 | "version": "4.3.7", 1462 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", 1463 | "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", 1464 | "dev": true, 1465 | "engines": { 1466 | "node": "*" 1467 | }, 1468 | "funding": { 1469 | "type": "patreon", 1470 | "url": "https://github.com/sponsors/rawify" 1471 | } 1472 | }, 1473 | "node_modules/fsevents": { 1474 | "version": "2.3.3", 1475 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1476 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1477 | "hasInstallScript": true, 1478 | "optional": true, 1479 | "os": [ 1480 | "darwin" 1481 | ], 1482 | "engines": { 1483 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1484 | } 1485 | }, 1486 | "node_modules/function-bind": { 1487 | "version": "1.1.2", 1488 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 1489 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 1490 | "funding": { 1491 | "url": "https://github.com/sponsors/ljharb" 1492 | } 1493 | }, 1494 | "node_modules/glob": { 1495 | "version": "10.4.5", 1496 | "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", 1497 | "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", 1498 | "dependencies": { 1499 | "foreground-child": "^3.1.0", 1500 | "jackspeak": "^3.1.2", 1501 | "minimatch": "^9.0.4", 1502 | "minipass": "^7.1.2", 1503 | "package-json-from-dist": "^1.0.0", 1504 | "path-scurry": "^1.11.1" 1505 | }, 1506 | "bin": { 1507 | "glob": "dist/esm/bin.mjs" 1508 | }, 1509 | "funding": { 1510 | "url": "https://github.com/sponsors/isaacs" 1511 | } 1512 | }, 1513 | "node_modules/glob-parent": { 1514 | "version": "6.0.2", 1515 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1516 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1517 | "dependencies": { 1518 | "is-glob": "^4.0.3" 1519 | }, 1520 | "engines": { 1521 | "node": ">=10.13.0" 1522 | } 1523 | }, 1524 | "node_modules/hasown": { 1525 | "version": "2.0.2", 1526 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 1527 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 1528 | "dependencies": { 1529 | "function-bind": "^1.1.2" 1530 | }, 1531 | "engines": { 1532 | "node": ">= 0.4" 1533 | } 1534 | }, 1535 | "node_modules/he": { 1536 | "version": "1.2.0", 1537 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 1538 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 1539 | "dev": true, 1540 | "bin": { 1541 | "he": "bin/he" 1542 | } 1543 | }, 1544 | "node_modules/is-binary-path": { 1545 | "version": "2.1.0", 1546 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1547 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1548 | "dependencies": { 1549 | "binary-extensions": "^2.0.0" 1550 | }, 1551 | "engines": { 1552 | "node": ">=8" 1553 | } 1554 | }, 1555 | "node_modules/is-core-module": { 1556 | "version": "2.16.1", 1557 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", 1558 | "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", 1559 | "dependencies": { 1560 | "hasown": "^2.0.2" 1561 | }, 1562 | "engines": { 1563 | "node": ">= 0.4" 1564 | }, 1565 | "funding": { 1566 | "url": "https://github.com/sponsors/ljharb" 1567 | } 1568 | }, 1569 | "node_modules/is-extglob": { 1570 | "version": "2.1.1", 1571 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1572 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1573 | "engines": { 1574 | "node": ">=0.10.0" 1575 | } 1576 | }, 1577 | "node_modules/is-fullwidth-code-point": { 1578 | "version": "3.0.0", 1579 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1580 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1581 | "engines": { 1582 | "node": ">=8" 1583 | } 1584 | }, 1585 | "node_modules/is-glob": { 1586 | "version": "4.0.3", 1587 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1588 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1589 | "dependencies": { 1590 | "is-extglob": "^2.1.1" 1591 | }, 1592 | "engines": { 1593 | "node": ">=0.10.0" 1594 | } 1595 | }, 1596 | "node_modules/is-number": { 1597 | "version": "7.0.0", 1598 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1599 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1600 | "engines": { 1601 | "node": ">=0.12.0" 1602 | } 1603 | }, 1604 | "node_modules/isexe": { 1605 | "version": "2.0.0", 1606 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1607 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" 1608 | }, 1609 | "node_modules/jackspeak": { 1610 | "version": "3.4.3", 1611 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", 1612 | "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", 1613 | "dependencies": { 1614 | "@isaacs/cliui": "^8.0.2" 1615 | }, 1616 | "funding": { 1617 | "url": "https://github.com/sponsors/isaacs" 1618 | }, 1619 | "optionalDependencies": { 1620 | "@pkgjs/parseargs": "^0.11.0" 1621 | } 1622 | }, 1623 | "node_modules/jiti": { 1624 | "version": "1.21.7", 1625 | "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", 1626 | "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", 1627 | "bin": { 1628 | "jiti": "bin/jiti.js" 1629 | } 1630 | }, 1631 | "node_modules/lilconfig": { 1632 | "version": "3.1.3", 1633 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", 1634 | "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", 1635 | "engines": { 1636 | "node": ">=14" 1637 | }, 1638 | "funding": { 1639 | "url": "https://github.com/sponsors/antonk52" 1640 | } 1641 | }, 1642 | "node_modules/lines-and-columns": { 1643 | "version": "1.2.4", 1644 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 1645 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" 1646 | }, 1647 | "node_modules/lru-cache": { 1648 | "version": "10.4.3", 1649 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", 1650 | "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" 1651 | }, 1652 | "node_modules/lucide-vue-next": { 1653 | "version": "0.344.0", 1654 | "resolved": "https://registry.npmjs.org/lucide-vue-next/-/lucide-vue-next-0.344.0.tgz", 1655 | "integrity": "sha512-YvexWTTzcRScmOKUvbQvexDmIK63x6NT8lV3Cot9TShQyy3PpFxfx5i2wZNhaZfV8bKqTMRXgCs372rnrtPYKQ==", 1656 | "peerDependencies": { 1657 | "vue": ">=3.0.1" 1658 | } 1659 | }, 1660 | "node_modules/magic-string": { 1661 | "version": "0.30.17", 1662 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", 1663 | "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", 1664 | "dependencies": { 1665 | "@jridgewell/sourcemap-codec": "^1.5.0" 1666 | } 1667 | }, 1668 | "node_modules/merge2": { 1669 | "version": "1.4.1", 1670 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1671 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1672 | "engines": { 1673 | "node": ">= 8" 1674 | } 1675 | }, 1676 | "node_modules/micromatch": { 1677 | "version": "4.0.8", 1678 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", 1679 | "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", 1680 | "dependencies": { 1681 | "braces": "^3.0.3", 1682 | "picomatch": "^2.3.1" 1683 | }, 1684 | "engines": { 1685 | "node": ">=8.6" 1686 | } 1687 | }, 1688 | "node_modules/minimatch": { 1689 | "version": "9.0.5", 1690 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 1691 | "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 1692 | "dependencies": { 1693 | "brace-expansion": "^2.0.1" 1694 | }, 1695 | "engines": { 1696 | "node": ">=16 || 14 >=14.17" 1697 | }, 1698 | "funding": { 1699 | "url": "https://github.com/sponsors/isaacs" 1700 | } 1701 | }, 1702 | "node_modules/minipass": { 1703 | "version": "7.1.2", 1704 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", 1705 | "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", 1706 | "engines": { 1707 | "node": ">=16 || 14 >=14.17" 1708 | } 1709 | }, 1710 | "node_modules/muggle-string": { 1711 | "version": "0.4.1", 1712 | "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", 1713 | "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", 1714 | "dev": true 1715 | }, 1716 | "node_modules/mz": { 1717 | "version": "2.7.0", 1718 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", 1719 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", 1720 | "dependencies": { 1721 | "any-promise": "^1.0.0", 1722 | "object-assign": "^4.0.1", 1723 | "thenify-all": "^1.0.0" 1724 | } 1725 | }, 1726 | "node_modules/nanoid": { 1727 | "version": "3.3.8", 1728 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", 1729 | "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", 1730 | "funding": [ 1731 | { 1732 | "type": "github", 1733 | "url": "https://github.com/sponsors/ai" 1734 | } 1735 | ], 1736 | "bin": { 1737 | "nanoid": "bin/nanoid.cjs" 1738 | }, 1739 | "engines": { 1740 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1741 | } 1742 | }, 1743 | "node_modules/node-releases": { 1744 | "version": "2.0.19", 1745 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", 1746 | "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", 1747 | "dev": true 1748 | }, 1749 | "node_modules/normalize-path": { 1750 | "version": "3.0.0", 1751 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1752 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1753 | "engines": { 1754 | "node": ">=0.10.0" 1755 | } 1756 | }, 1757 | "node_modules/normalize-range": { 1758 | "version": "0.1.2", 1759 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", 1760 | "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", 1761 | "dev": true, 1762 | "engines": { 1763 | "node": ">=0.10.0" 1764 | } 1765 | }, 1766 | "node_modules/object-assign": { 1767 | "version": "4.1.1", 1768 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1769 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1770 | "engines": { 1771 | "node": ">=0.10.0" 1772 | } 1773 | }, 1774 | "node_modules/object-hash": { 1775 | "version": "3.0.0", 1776 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", 1777 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", 1778 | "engines": { 1779 | "node": ">= 6" 1780 | } 1781 | }, 1782 | "node_modules/package-json-from-dist": { 1783 | "version": "1.0.1", 1784 | "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", 1785 | "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" 1786 | }, 1787 | "node_modules/path-browserify": { 1788 | "version": "1.0.1", 1789 | "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", 1790 | "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", 1791 | "dev": true 1792 | }, 1793 | "node_modules/path-key": { 1794 | "version": "3.1.1", 1795 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1796 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1797 | "engines": { 1798 | "node": ">=8" 1799 | } 1800 | }, 1801 | "node_modules/path-parse": { 1802 | "version": "1.0.7", 1803 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1804 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 1805 | }, 1806 | "node_modules/path-scurry": { 1807 | "version": "1.11.1", 1808 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", 1809 | "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", 1810 | "dependencies": { 1811 | "lru-cache": "^10.2.0", 1812 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" 1813 | }, 1814 | "engines": { 1815 | "node": ">=16 || 14 >=14.18" 1816 | }, 1817 | "funding": { 1818 | "url": "https://github.com/sponsors/isaacs" 1819 | } 1820 | }, 1821 | "node_modules/picocolors": { 1822 | "version": "1.1.1", 1823 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 1824 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" 1825 | }, 1826 | "node_modules/picomatch": { 1827 | "version": "2.3.1", 1828 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1829 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1830 | "engines": { 1831 | "node": ">=8.6" 1832 | }, 1833 | "funding": { 1834 | "url": "https://github.com/sponsors/jonschlinkert" 1835 | } 1836 | }, 1837 | "node_modules/pify": { 1838 | "version": "2.3.0", 1839 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1840 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 1841 | "engines": { 1842 | "node": ">=0.10.0" 1843 | } 1844 | }, 1845 | "node_modules/pirates": { 1846 | "version": "4.0.6", 1847 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", 1848 | "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", 1849 | "engines": { 1850 | "node": ">= 6" 1851 | } 1852 | }, 1853 | "node_modules/postcss": { 1854 | "version": "8.4.49", 1855 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", 1856 | "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", 1857 | "funding": [ 1858 | { 1859 | "type": "opencollective", 1860 | "url": "https://opencollective.com/postcss/" 1861 | }, 1862 | { 1863 | "type": "tidelift", 1864 | "url": "https://tidelift.com/funding/github/npm/postcss" 1865 | }, 1866 | { 1867 | "type": "github", 1868 | "url": "https://github.com/sponsors/ai" 1869 | } 1870 | ], 1871 | "dependencies": { 1872 | "nanoid": "^3.3.7", 1873 | "picocolors": "^1.1.1", 1874 | "source-map-js": "^1.2.1" 1875 | }, 1876 | "engines": { 1877 | "node": "^10 || ^12 || >=14" 1878 | } 1879 | }, 1880 | "node_modules/postcss-import": { 1881 | "version": "15.1.0", 1882 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", 1883 | "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", 1884 | "dependencies": { 1885 | "postcss-value-parser": "^4.0.0", 1886 | "read-cache": "^1.0.0", 1887 | "resolve": "^1.1.7" 1888 | }, 1889 | "engines": { 1890 | "node": ">=14.0.0" 1891 | }, 1892 | "peerDependencies": { 1893 | "postcss": "^8.0.0" 1894 | } 1895 | }, 1896 | "node_modules/postcss-js": { 1897 | "version": "4.0.1", 1898 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", 1899 | "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", 1900 | "dependencies": { 1901 | "camelcase-css": "^2.0.1" 1902 | }, 1903 | "engines": { 1904 | "node": "^12 || ^14 || >= 16" 1905 | }, 1906 | "funding": { 1907 | "type": "opencollective", 1908 | "url": "https://opencollective.com/postcss/" 1909 | }, 1910 | "peerDependencies": { 1911 | "postcss": "^8.4.21" 1912 | } 1913 | }, 1914 | "node_modules/postcss-load-config": { 1915 | "version": "4.0.2", 1916 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", 1917 | "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", 1918 | "funding": [ 1919 | { 1920 | "type": "opencollective", 1921 | "url": "https://opencollective.com/postcss/" 1922 | }, 1923 | { 1924 | "type": "github", 1925 | "url": "https://github.com/sponsors/ai" 1926 | } 1927 | ], 1928 | "dependencies": { 1929 | "lilconfig": "^3.0.0", 1930 | "yaml": "^2.3.4" 1931 | }, 1932 | "engines": { 1933 | "node": ">= 14" 1934 | }, 1935 | "peerDependencies": { 1936 | "postcss": ">=8.0.9", 1937 | "ts-node": ">=9.0.0" 1938 | }, 1939 | "peerDependenciesMeta": { 1940 | "postcss": { 1941 | "optional": true 1942 | }, 1943 | "ts-node": { 1944 | "optional": true 1945 | } 1946 | } 1947 | }, 1948 | "node_modules/postcss-nested": { 1949 | "version": "6.2.0", 1950 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", 1951 | "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", 1952 | "funding": [ 1953 | { 1954 | "type": "opencollective", 1955 | "url": "https://opencollective.com/postcss/" 1956 | }, 1957 | { 1958 | "type": "github", 1959 | "url": "https://github.com/sponsors/ai" 1960 | } 1961 | ], 1962 | "dependencies": { 1963 | "postcss-selector-parser": "^6.1.1" 1964 | }, 1965 | "engines": { 1966 | "node": ">=12.0" 1967 | }, 1968 | "peerDependencies": { 1969 | "postcss": "^8.2.14" 1970 | } 1971 | }, 1972 | "node_modules/postcss-selector-parser": { 1973 | "version": "6.1.2", 1974 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", 1975 | "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", 1976 | "dependencies": { 1977 | "cssesc": "^3.0.0", 1978 | "util-deprecate": "^1.0.2" 1979 | }, 1980 | "engines": { 1981 | "node": ">=4" 1982 | } 1983 | }, 1984 | "node_modules/postcss-value-parser": { 1985 | "version": "4.2.0", 1986 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 1987 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" 1988 | }, 1989 | "node_modules/prettier": { 1990 | "version": "2.8.8", 1991 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", 1992 | "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", 1993 | "dev": true, 1994 | "optional": true, 1995 | "bin": { 1996 | "prettier": "bin-prettier.js" 1997 | }, 1998 | "engines": { 1999 | "node": ">=10.13.0" 2000 | }, 2001 | "funding": { 2002 | "url": "https://github.com/prettier/prettier?sponsor=1" 2003 | } 2004 | }, 2005 | "node_modules/prismjs": { 2006 | "version": "1.29.0", 2007 | "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", 2008 | "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", 2009 | "engines": { 2010 | "node": ">=6" 2011 | } 2012 | }, 2013 | "node_modules/queue-microtask": { 2014 | "version": "1.2.3", 2015 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2016 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2017 | "funding": [ 2018 | { 2019 | "type": "github", 2020 | "url": "https://github.com/sponsors/feross" 2021 | }, 2022 | { 2023 | "type": "patreon", 2024 | "url": "https://www.patreon.com/feross" 2025 | }, 2026 | { 2027 | "type": "consulting", 2028 | "url": "https://feross.org/support" 2029 | } 2030 | ] 2031 | }, 2032 | "node_modules/read-cache": { 2033 | "version": "1.0.0", 2034 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", 2035 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", 2036 | "dependencies": { 2037 | "pify": "^2.3.0" 2038 | } 2039 | }, 2040 | "node_modules/readdirp": { 2041 | "version": "3.6.0", 2042 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 2043 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 2044 | "dependencies": { 2045 | "picomatch": "^2.2.1" 2046 | }, 2047 | "engines": { 2048 | "node": ">=8.10.0" 2049 | } 2050 | }, 2051 | "node_modules/resolve": { 2052 | "version": "1.22.10", 2053 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", 2054 | "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", 2055 | "dependencies": { 2056 | "is-core-module": "^2.16.0", 2057 | "path-parse": "^1.0.7", 2058 | "supports-preserve-symlinks-flag": "^1.0.0" 2059 | }, 2060 | "bin": { 2061 | "resolve": "bin/resolve" 2062 | }, 2063 | "engines": { 2064 | "node": ">= 0.4" 2065 | }, 2066 | "funding": { 2067 | "url": "https://github.com/sponsors/ljharb" 2068 | } 2069 | }, 2070 | "node_modules/reusify": { 2071 | "version": "1.0.4", 2072 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2073 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2074 | "engines": { 2075 | "iojs": ">=1.0.0", 2076 | "node": ">=0.10.0" 2077 | } 2078 | }, 2079 | "node_modules/rollup": { 2080 | "version": "4.30.0", 2081 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.30.0.tgz", 2082 | "integrity": "sha512-sDnr1pcjTgUT69qBksNF1N1anwfbyYG6TBQ22b03bII8EdiUQ7J0TlozVaTMjT/eEJAO49e1ndV7t+UZfL1+vA==", 2083 | "dev": true, 2084 | "dependencies": { 2085 | "@types/estree": "1.0.6" 2086 | }, 2087 | "bin": { 2088 | "rollup": "dist/bin/rollup" 2089 | }, 2090 | "engines": { 2091 | "node": ">=18.0.0", 2092 | "npm": ">=8.0.0" 2093 | }, 2094 | "optionalDependencies": { 2095 | "@rollup/rollup-android-arm-eabi": "4.30.0", 2096 | "@rollup/rollup-android-arm64": "4.30.0", 2097 | "@rollup/rollup-darwin-arm64": "4.30.0", 2098 | "@rollup/rollup-darwin-x64": "4.30.0", 2099 | "@rollup/rollup-freebsd-arm64": "4.30.0", 2100 | "@rollup/rollup-freebsd-x64": "4.30.0", 2101 | "@rollup/rollup-linux-arm-gnueabihf": "4.30.0", 2102 | "@rollup/rollup-linux-arm-musleabihf": "4.30.0", 2103 | "@rollup/rollup-linux-arm64-gnu": "4.30.0", 2104 | "@rollup/rollup-linux-arm64-musl": "4.30.0", 2105 | "@rollup/rollup-linux-loongarch64-gnu": "4.30.0", 2106 | "@rollup/rollup-linux-powerpc64le-gnu": "4.30.0", 2107 | "@rollup/rollup-linux-riscv64-gnu": "4.30.0", 2108 | "@rollup/rollup-linux-s390x-gnu": "4.30.0", 2109 | "@rollup/rollup-linux-x64-gnu": "4.30.0", 2110 | "@rollup/rollup-linux-x64-musl": "4.30.0", 2111 | "@rollup/rollup-win32-arm64-msvc": "4.30.0", 2112 | "@rollup/rollup-win32-ia32-msvc": "4.30.0", 2113 | "@rollup/rollup-win32-x64-msvc": "4.30.0", 2114 | "fsevents": "~2.3.2" 2115 | } 2116 | }, 2117 | "node_modules/run-parallel": { 2118 | "version": "1.2.0", 2119 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 2120 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 2121 | "funding": [ 2122 | { 2123 | "type": "github", 2124 | "url": "https://github.com/sponsors/feross" 2125 | }, 2126 | { 2127 | "type": "patreon", 2128 | "url": "https://www.patreon.com/feross" 2129 | }, 2130 | { 2131 | "type": "consulting", 2132 | "url": "https://feross.org/support" 2133 | } 2134 | ], 2135 | "dependencies": { 2136 | "queue-microtask": "^1.2.2" 2137 | } 2138 | }, 2139 | "node_modules/shebang-command": { 2140 | "version": "2.0.0", 2141 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2142 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2143 | "dependencies": { 2144 | "shebang-regex": "^3.0.0" 2145 | }, 2146 | "engines": { 2147 | "node": ">=8" 2148 | } 2149 | }, 2150 | "node_modules/shebang-regex": { 2151 | "version": "3.0.0", 2152 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2153 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2154 | "engines": { 2155 | "node": ">=8" 2156 | } 2157 | }, 2158 | "node_modules/signal-exit": { 2159 | "version": "4.1.0", 2160 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 2161 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 2162 | "engines": { 2163 | "node": ">=14" 2164 | }, 2165 | "funding": { 2166 | "url": "https://github.com/sponsors/isaacs" 2167 | } 2168 | }, 2169 | "node_modules/source-map": { 2170 | "version": "0.6.1", 2171 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2172 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2173 | "dev": true, 2174 | "engines": { 2175 | "node": ">=0.10.0" 2176 | } 2177 | }, 2178 | "node_modules/source-map-js": { 2179 | "version": "1.2.1", 2180 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 2181 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 2182 | "engines": { 2183 | "node": ">=0.10.0" 2184 | } 2185 | }, 2186 | "node_modules/string-width": { 2187 | "version": "5.1.2", 2188 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 2189 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 2190 | "dependencies": { 2191 | "eastasianwidth": "^0.2.0", 2192 | "emoji-regex": "^9.2.2", 2193 | "strip-ansi": "^7.0.1" 2194 | }, 2195 | "engines": { 2196 | "node": ">=12" 2197 | }, 2198 | "funding": { 2199 | "url": "https://github.com/sponsors/sindresorhus" 2200 | } 2201 | }, 2202 | "node_modules/string-width-cjs": { 2203 | "name": "string-width", 2204 | "version": "4.2.3", 2205 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2206 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2207 | "dependencies": { 2208 | "emoji-regex": "^8.0.0", 2209 | "is-fullwidth-code-point": "^3.0.0", 2210 | "strip-ansi": "^6.0.1" 2211 | }, 2212 | "engines": { 2213 | "node": ">=8" 2214 | } 2215 | }, 2216 | "node_modules/string-width-cjs/node_modules/ansi-regex": { 2217 | "version": "5.0.1", 2218 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2219 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2220 | "engines": { 2221 | "node": ">=8" 2222 | } 2223 | }, 2224 | "node_modules/string-width-cjs/node_modules/emoji-regex": { 2225 | "version": "8.0.0", 2226 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2227 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 2228 | }, 2229 | "node_modules/string-width-cjs/node_modules/strip-ansi": { 2230 | "version": "6.0.1", 2231 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2232 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2233 | "dependencies": { 2234 | "ansi-regex": "^5.0.1" 2235 | }, 2236 | "engines": { 2237 | "node": ">=8" 2238 | } 2239 | }, 2240 | "node_modules/strip-ansi": { 2241 | "version": "7.1.0", 2242 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 2243 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 2244 | "dependencies": { 2245 | "ansi-regex": "^6.0.1" 2246 | }, 2247 | "engines": { 2248 | "node": ">=12" 2249 | }, 2250 | "funding": { 2251 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 2252 | } 2253 | }, 2254 | "node_modules/strip-ansi-cjs": { 2255 | "name": "strip-ansi", 2256 | "version": "6.0.1", 2257 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2258 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2259 | "dependencies": { 2260 | "ansi-regex": "^5.0.1" 2261 | }, 2262 | "engines": { 2263 | "node": ">=8" 2264 | } 2265 | }, 2266 | "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { 2267 | "version": "5.0.1", 2268 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2269 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2270 | "engines": { 2271 | "node": ">=8" 2272 | } 2273 | }, 2274 | "node_modules/sucrase": { 2275 | "version": "3.35.0", 2276 | "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", 2277 | "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", 2278 | "dependencies": { 2279 | "@jridgewell/gen-mapping": "^0.3.2", 2280 | "commander": "^4.0.0", 2281 | "glob": "^10.3.10", 2282 | "lines-and-columns": "^1.1.6", 2283 | "mz": "^2.7.0", 2284 | "pirates": "^4.0.1", 2285 | "ts-interface-checker": "^0.1.9" 2286 | }, 2287 | "bin": { 2288 | "sucrase": "bin/sucrase", 2289 | "sucrase-node": "bin/sucrase-node" 2290 | }, 2291 | "engines": { 2292 | "node": ">=16 || 14 >=14.17" 2293 | } 2294 | }, 2295 | "node_modules/supports-preserve-symlinks-flag": { 2296 | "version": "1.0.0", 2297 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 2298 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 2299 | "engines": { 2300 | "node": ">= 0.4" 2301 | }, 2302 | "funding": { 2303 | "url": "https://github.com/sponsors/ljharb" 2304 | } 2305 | }, 2306 | "node_modules/tailwind-merge": { 2307 | "version": "2.6.0", 2308 | "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz", 2309 | "integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==", 2310 | "funding": { 2311 | "type": "github", 2312 | "url": "https://github.com/sponsors/dcastil" 2313 | } 2314 | }, 2315 | "node_modules/tailwindcss": { 2316 | "version": "3.4.17", 2317 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", 2318 | "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", 2319 | "dependencies": { 2320 | "@alloc/quick-lru": "^5.2.0", 2321 | "arg": "^5.0.2", 2322 | "chokidar": "^3.6.0", 2323 | "didyoumean": "^1.2.2", 2324 | "dlv": "^1.1.3", 2325 | "fast-glob": "^3.3.2", 2326 | "glob-parent": "^6.0.2", 2327 | "is-glob": "^4.0.3", 2328 | "jiti": "^1.21.6", 2329 | "lilconfig": "^3.1.3", 2330 | "micromatch": "^4.0.8", 2331 | "normalize-path": "^3.0.0", 2332 | "object-hash": "^3.0.0", 2333 | "picocolors": "^1.1.1", 2334 | "postcss": "^8.4.47", 2335 | "postcss-import": "^15.1.0", 2336 | "postcss-js": "^4.0.1", 2337 | "postcss-load-config": "^4.0.2", 2338 | "postcss-nested": "^6.2.0", 2339 | "postcss-selector-parser": "^6.1.2", 2340 | "resolve": "^1.22.8", 2341 | "sucrase": "^3.35.0" 2342 | }, 2343 | "bin": { 2344 | "tailwind": "lib/cli.js", 2345 | "tailwindcss": "lib/cli.js" 2346 | }, 2347 | "engines": { 2348 | "node": ">=14.0.0" 2349 | } 2350 | }, 2351 | "node_modules/tailwindcss-animate": { 2352 | "version": "1.0.7", 2353 | "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", 2354 | "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", 2355 | "peerDependencies": { 2356 | "tailwindcss": ">=3.0.0 || insiders" 2357 | } 2358 | }, 2359 | "node_modules/thenify": { 2360 | "version": "3.3.1", 2361 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", 2362 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", 2363 | "dependencies": { 2364 | "any-promise": "^1.0.0" 2365 | } 2366 | }, 2367 | "node_modules/thenify-all": { 2368 | "version": "1.6.0", 2369 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", 2370 | "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", 2371 | "dependencies": { 2372 | "thenify": ">= 3.1.0 < 4" 2373 | }, 2374 | "engines": { 2375 | "node": ">=0.8" 2376 | } 2377 | }, 2378 | "node_modules/to-regex-range": { 2379 | "version": "5.0.1", 2380 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2381 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2382 | "dependencies": { 2383 | "is-number": "^7.0.0" 2384 | }, 2385 | "engines": { 2386 | "node": ">=8.0" 2387 | } 2388 | }, 2389 | "node_modules/ts-interface-checker": { 2390 | "version": "0.1.13", 2391 | "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", 2392 | "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" 2393 | }, 2394 | "node_modules/typescript": { 2395 | "version": "5.7.2", 2396 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", 2397 | "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", 2398 | "devOptional": true, 2399 | "bin": { 2400 | "tsc": "bin/tsc", 2401 | "tsserver": "bin/tsserver" 2402 | }, 2403 | "engines": { 2404 | "node": ">=14.17" 2405 | } 2406 | }, 2407 | "node_modules/update-browserslist-db": { 2408 | "version": "1.1.1", 2409 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", 2410 | "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", 2411 | "dev": true, 2412 | "funding": [ 2413 | { 2414 | "type": "opencollective", 2415 | "url": "https://opencollective.com/browserslist" 2416 | }, 2417 | { 2418 | "type": "tidelift", 2419 | "url": "https://tidelift.com/funding/github/npm/browserslist" 2420 | }, 2421 | { 2422 | "type": "github", 2423 | "url": "https://github.com/sponsors/ai" 2424 | } 2425 | ], 2426 | "dependencies": { 2427 | "escalade": "^3.2.0", 2428 | "picocolors": "^1.1.0" 2429 | }, 2430 | "bin": { 2431 | "update-browserslist-db": "cli.js" 2432 | }, 2433 | "peerDependencies": { 2434 | "browserslist": ">= 4.21.0" 2435 | } 2436 | }, 2437 | "node_modules/util-deprecate": { 2438 | "version": "1.0.2", 2439 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2440 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 2441 | }, 2442 | "node_modules/uuid": { 2443 | "version": "11.0.5", 2444 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.5.tgz", 2445 | "integrity": "sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA==", 2446 | "funding": [ 2447 | "https://github.com/sponsors/broofa", 2448 | "https://github.com/sponsors/ctavan" 2449 | ], 2450 | "bin": { 2451 | "uuid": "dist/esm/bin/uuid" 2452 | } 2453 | }, 2454 | "node_modules/vite": { 2455 | "version": "5.4.11", 2456 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", 2457 | "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", 2458 | "dev": true, 2459 | "dependencies": { 2460 | "esbuild": "^0.21.3", 2461 | "postcss": "^8.4.43", 2462 | "rollup": "^4.20.0" 2463 | }, 2464 | "bin": { 2465 | "vite": "bin/vite.js" 2466 | }, 2467 | "engines": { 2468 | "node": "^18.0.0 || >=20.0.0" 2469 | }, 2470 | "funding": { 2471 | "url": "https://github.com/vitejs/vite?sponsor=1" 2472 | }, 2473 | "optionalDependencies": { 2474 | "fsevents": "~2.3.3" 2475 | }, 2476 | "peerDependencies": { 2477 | "@types/node": "^18.0.0 || >=20.0.0", 2478 | "less": "*", 2479 | "lightningcss": "^1.21.0", 2480 | "sass": "*", 2481 | "sass-embedded": "*", 2482 | "stylus": "*", 2483 | "sugarss": "*", 2484 | "terser": "^5.4.0" 2485 | }, 2486 | "peerDependenciesMeta": { 2487 | "@types/node": { 2488 | "optional": true 2489 | }, 2490 | "less": { 2491 | "optional": true 2492 | }, 2493 | "lightningcss": { 2494 | "optional": true 2495 | }, 2496 | "sass": { 2497 | "optional": true 2498 | }, 2499 | "sass-embedded": { 2500 | "optional": true 2501 | }, 2502 | "stylus": { 2503 | "optional": true 2504 | }, 2505 | "sugarss": { 2506 | "optional": true 2507 | }, 2508 | "terser": { 2509 | "optional": true 2510 | } 2511 | } 2512 | }, 2513 | "node_modules/vscode-uri": { 2514 | "version": "3.0.8", 2515 | "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", 2516 | "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", 2517 | "dev": true 2518 | }, 2519 | "node_modules/vue": { 2520 | "version": "3.5.13", 2521 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", 2522 | "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", 2523 | "dependencies": { 2524 | "@vue/compiler-dom": "3.5.13", 2525 | "@vue/compiler-sfc": "3.5.13", 2526 | "@vue/runtime-dom": "3.5.13", 2527 | "@vue/server-renderer": "3.5.13", 2528 | "@vue/shared": "3.5.13" 2529 | }, 2530 | "peerDependencies": { 2531 | "typescript": "*" 2532 | }, 2533 | "peerDependenciesMeta": { 2534 | "typescript": { 2535 | "optional": true 2536 | } 2537 | } 2538 | }, 2539 | "node_modules/vue-select": { 2540 | "version": "4.0.0-beta.6", 2541 | "resolved": "https://registry.npmjs.org/vue-select/-/vue-select-4.0.0-beta.6.tgz", 2542 | "integrity": "sha512-K+zrNBSpwMPhAxYLTCl56gaMrWZGgayoWCLqe5rWwkB8aUbAUh7u6sXjIR7v4ckp2WKC7zEEUY27g6h1MRsIHw==", 2543 | "peerDependencies": { 2544 | "vue": "3.x" 2545 | } 2546 | }, 2547 | "node_modules/vue-tsc": { 2548 | "version": "2.2.0", 2549 | "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.0.tgz", 2550 | "integrity": "sha512-gtmM1sUuJ8aSb0KoAFmK9yMxb8TxjewmxqTJ1aKphD5Cbu0rULFY6+UQT51zW7SpUcenfPUuflKyVwyx9Qdnxg==", 2551 | "dev": true, 2552 | "dependencies": { 2553 | "@volar/typescript": "~2.4.11", 2554 | "@vue/language-core": "2.2.0" 2555 | }, 2556 | "bin": { 2557 | "vue-tsc": "bin/vue-tsc.js" 2558 | }, 2559 | "peerDependencies": { 2560 | "typescript": ">=5.0.0" 2561 | } 2562 | }, 2563 | "node_modules/which": { 2564 | "version": "2.0.2", 2565 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2566 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2567 | "dependencies": { 2568 | "isexe": "^2.0.0" 2569 | }, 2570 | "bin": { 2571 | "node-which": "bin/node-which" 2572 | }, 2573 | "engines": { 2574 | "node": ">= 8" 2575 | } 2576 | }, 2577 | "node_modules/wrap-ansi": { 2578 | "version": "8.1.0", 2579 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 2580 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 2581 | "dependencies": { 2582 | "ansi-styles": "^6.1.0", 2583 | "string-width": "^5.0.1", 2584 | "strip-ansi": "^7.0.1" 2585 | }, 2586 | "engines": { 2587 | "node": ">=12" 2588 | }, 2589 | "funding": { 2590 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2591 | } 2592 | }, 2593 | "node_modules/wrap-ansi-cjs": { 2594 | "name": "wrap-ansi", 2595 | "version": "7.0.0", 2596 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2597 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2598 | "dependencies": { 2599 | "ansi-styles": "^4.0.0", 2600 | "string-width": "^4.1.0", 2601 | "strip-ansi": "^6.0.0" 2602 | }, 2603 | "engines": { 2604 | "node": ">=10" 2605 | }, 2606 | "funding": { 2607 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2608 | } 2609 | }, 2610 | "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { 2611 | "version": "5.0.1", 2612 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2613 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2614 | "engines": { 2615 | "node": ">=8" 2616 | } 2617 | }, 2618 | "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { 2619 | "version": "4.3.0", 2620 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2621 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2622 | "dependencies": { 2623 | "color-convert": "^2.0.1" 2624 | }, 2625 | "engines": { 2626 | "node": ">=8" 2627 | }, 2628 | "funding": { 2629 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 2630 | } 2631 | }, 2632 | "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { 2633 | "version": "8.0.0", 2634 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2635 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 2636 | }, 2637 | "node_modules/wrap-ansi-cjs/node_modules/string-width": { 2638 | "version": "4.2.3", 2639 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2640 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2641 | "dependencies": { 2642 | "emoji-regex": "^8.0.0", 2643 | "is-fullwidth-code-point": "^3.0.0", 2644 | "strip-ansi": "^6.0.1" 2645 | }, 2646 | "engines": { 2647 | "node": ">=8" 2648 | } 2649 | }, 2650 | "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { 2651 | "version": "6.0.1", 2652 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2653 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2654 | "dependencies": { 2655 | "ansi-regex": "^5.0.1" 2656 | }, 2657 | "engines": { 2658 | "node": ">=8" 2659 | } 2660 | }, 2661 | "node_modules/yaml": { 2662 | "version": "2.7.0", 2663 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", 2664 | "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", 2665 | "bin": { 2666 | "yaml": "bin.mjs" 2667 | }, 2668 | "engines": { 2669 | "node": ">= 14" 2670 | } 2671 | } 2672 | } 2673 | } 2674 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vite-vue-typescript-starter", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vue-tsc -b && vite build", 9 | "preview": "vite preview" 10 | }, 11 | "dependencies": { 12 | "@radix-ui/colors": "^3.0.0", 13 | "class-variance-authority": "^0.7.0", 14 | "clsx": "^2.1.0", 15 | "lucide-vue-next": "^0.344.0", 16 | "prismjs": "^1.29.0", 17 | "tailwind-merge": "^2.2.1", 18 | "tailwindcss-animate": "^1.0.7", 19 | "uuid": "^11.0.5", 20 | "vue": "^3.4.38", 21 | "vue-select": "^4.0.0-beta.6" 22 | }, 23 | "devDependencies": { 24 | "@types/prismjs": "^1.26.3", 25 | "@types/vue-select": "^3.16.8", 26 | "@vitejs/plugin-vue": "^5.1.3", 27 | "autoprefixer": "^10.4.18", 28 | "postcss": "^8.4.35", 29 | "tailwindcss": "^3.4.1", 30 | "typescript": "^5.5.3", 31 | "vite": "^5.4.2", 32 | "vue-tsc": "^2.1.4" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } -------------------------------------------------------------------------------- /public/favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 64 | 65 | -------------------------------------------------------------------------------- /src/assets/vue.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/CaddyConfig.vue: -------------------------------------------------------------------------------- 1 | 236 | 237 | 260 | 261 | -------------------------------------------------------------------------------- /src/components/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 36 | 37 | 42 | -------------------------------------------------------------------------------- /src/components/HostForm.vue: -------------------------------------------------------------------------------- 1 | 106 | 107 | 396 | 397 | -------------------------------------------------------------------------------- /src/components/ImportModal.vue: -------------------------------------------------------------------------------- 1 | 122 | 123 | -------------------------------------------------------------------------------- /src/components/PresetModal.vue: -------------------------------------------------------------------------------- 1 | 59 | 60 | -------------------------------------------------------------------------------- /src/components/PresetSelect.vue: -------------------------------------------------------------------------------- 1 | 39 | 40 | 67 | 68 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import './style.css' 3 | import App from './App.vue' 4 | 5 | createApp(App).mount('#app') 6 | -------------------------------------------------------------------------------- /src/presets.ts: -------------------------------------------------------------------------------- 1 | import type { PresetConfig } from './types/caddy'; 2 | 3 | export const presets: PresetConfig[] = [ 4 | // Media & Streaming 5 | { 6 | name: 'Jellyfin', 7 | port: 8096, 8 | description: 'Open-source media server for movies, TV shows, music, and more. Offers DVR functionality, user management, and a fully featured web client.', 9 | category: 'Media & Streaming', 10 | webLink: 'https://jellyfin.org', 11 | githubLink: 'https://github.com/jellyfin/jellyfin', 12 | logo: '' 13 | }, 14 | { 15 | name: 'Plex', 16 | port: 32400, 17 | description: 'Popular media server for organizing and streaming personal movies, TV shows, music, and photos. Features cloud integration, remote access, and apps for most platforms.', 18 | category: 'Media & Streaming', 19 | webLink: 'https://www.plex.tv', 20 | // Plex has some projects on GitHub, but the core server is closed source: 21 | // githubLink: 'https://github.com/plexinc' 22 | logo: '' 23 | }, 24 | { 25 | name: 'Emby', 26 | port: 8096, 27 | description: 'Media server alternative focusing on live TV, DVR support, and media management. Similar to Plex and Jellyfin but with a proprietary freemium model.', 28 | category: 'Media & Streaming', 29 | webLink: 'https://emby.media', 30 | // Emby is partially closed source; no official GitHub for the server: 31 | // githubLink: 'https://github.com/MediaBrowser/Emby' 32 | logo: '' 33 | }, 34 | { 35 | name: 'Subsonic', 36 | port: 4040, 37 | description: 'Music streaming server designed for easy access to your music library from anywhere. Airsonic is the open-source fork of Subsonic.', 38 | category: 'Media & Streaming', 39 | webLink: 'http://www.subsonic.org', 40 | // If you wish to link the open-source fork (Airsonic): 41 | // githubLink: 'https://github.com/airsonic/airsonic' 42 | }, 43 | 44 | // Downloaders & File Sharing 45 | { 46 | name: 'SABnzbd', 47 | port: 8080, 48 | description: 'A user-friendly Usenet download manager that supports automation, scheduling, and categories for organizing downloaded media.', 49 | category: 'Downloaders & File Sharing', 50 | webLink: 'https://sabnzbd.org', 51 | githubLink: 'https://github.com/sabnzbd/sabnzbd', 52 | logo: '' 53 | }, 54 | { 55 | name: 'NZBGet', 56 | port: 6789, 57 | description: 'Efficient, lightweight Usenet downloader with low resource usage. Focuses on performance and can run on devices with minimal specs (e.g., Raspberry Pi).', 58 | category: 'Downloaders & File Sharing', 59 | webLink: 'https://nzbget.net', 60 | githubLink: 'https://github.com/nzbget/nzbget' 61 | }, 62 | { 63 | name: 'qBittorrent', 64 | port: 8080, 65 | description: 'Popular BitTorrent client with an embedded, user-friendly web interface. Offers features like RSS downloading, remote control, and search.', 66 | category: 'Downloaders & File Sharing', 67 | webLink: 'https://www.qbittorrent.org', 68 | githubLink: 'https://github.com/qbittorrent/qBittorrent', 69 | logo: '' 70 | }, 71 | { 72 | name: 'Transmission', 73 | port: 9091, 74 | description: 'Cross-platform BitTorrent client known for its simplicity and low resource consumption. Features a minimal web interface for remote management.', 75 | category: 'Downloaders & File Sharing', 76 | webLink: 'https://transmissionbt.com', 77 | githubLink: 'https://github.com/transmission/transmission' 78 | }, 79 | { 80 | name: 'Deluge', 81 | port: 8112, 82 | description: 'Flexible BitTorrent client that can be controlled via a standalone desktop client, web UI, or console. Plug-in support for extra functionality.', 83 | category: 'Downloaders & File Sharing', 84 | webLink: 'https://deluge-torrent.org', 85 | githubLink: 'https://github.com/deluge-torrent/deluge' 86 | }, 87 | { 88 | name: 'PyLoad', 89 | port: 8000, 90 | description: 'Lightweight downloader focusing on one-click hosting sites, supporting parallel downloads and link decryption.', 91 | category: 'Downloaders & File Sharing', 92 | webLink: 'https://pyload.net', 93 | githubLink: 'https://github.com/pyload/pyload' 94 | }, 95 | 96 | // Media Management & Automation 97 | { 98 | name: 'Sonarr', 99 | port: 8989, 100 | description: 'TV series management tool that integrates with torrent and Usenet clients. Automatically searches, downloads, and renames TV episodes.', 101 | category: 'Media Management & Automation', 102 | webLink: 'https://sonarr.tv', 103 | githubLink: 'https://github.com/Sonarr/Sonarr' 104 | }, 105 | { 106 | name: 'Radarr', 107 | port: 7878, 108 | description: 'Movie management companion for Sonarr. Automates downloading, sorting, and renaming of movie files.', 109 | category: 'Media Management & Automation', 110 | webLink: 'https://radarr.video', 111 | githubLink: 'https://github.com/Radarr/Radarr' 112 | }, 113 | { 114 | name: 'Lidarr', 115 | port: 8686, 116 | description: 'Music management tool in the same family as Sonarr and Radarr. Automates music downloads and organizes libraries.', 117 | category: 'Media Management & Automation', 118 | webLink: 'https://lidarr.audio', 119 | githubLink: 'https://github.com/Lidarr/Lidarr' 120 | }, 121 | { 122 | name: 'Prowlarr', 123 | port: 9696, 124 | description: 'Indexer manager that integrates with Sonarr, Radarr, Lidarr, and other tools. Provides unified management of torrent and Usenet indexers.', 125 | category: 'Media Management & Automation', 126 | webLink: 'https://prowlarr.com', 127 | githubLink: 'https://github.com/Prowlarr/Prowlarr' 128 | }, 129 | { 130 | name: 'Overseerr', 131 | port:5055, 132 | description: 'Media request management system for Plex, Emby, or Jellyfin libraries. Allows users to request new media content and track requests.', 133 | category: 'Media Management & Automation', 134 | webLink: 'https://overseerr.dev', 135 | githubLink: 'https://github.com/sct/overseerr' 136 | }, 137 | { 138 | name: 'Jackett', 139 | port: 9117, 140 | description: 'Indexer aggregator that translates queries from management apps (Sonarr, Radarr, etc.) into tracker-specific web requests.', 141 | category: 'Media Management & Automation', 142 | webLink: 'https://jackett.dev', 143 | githubLink: 'https://github.com/Jackett/Jackett' 144 | }, 145 | { 146 | name: 'CouchPotato', 147 | port: 5050, 148 | description: 'An older movie automation tool. It\'s largely replaced by Radarr, but still used by some for historical reasons.', 149 | category: 'Media Management & Automation', 150 | webLink: 'https://couchpota.to', 151 | githubLink: 'https://github.com/CouchPotato/CouchPotatoServer' 152 | }, 153 | 154 | // Home Automation & IoT 155 | { 156 | name: 'Home Assistant', 157 | port: 8123, 158 | description: 'Powerful home automation platform with extensive support for integrations (lights, switches, sensors, media players). A central hub for smart home setups.', 159 | category: 'Home Automation & IoT', 160 | webLink: 'https://www.home-assistant.io', 161 | githubLink: 'https://github.com/home-assistant/core' 162 | }, 163 | { 164 | name: 'Node-RED', 165 | port: 1880, 166 | description: 'Flow-based development tool for wiring together hardware devices, APIs, and online services. Great for visual automation and IoT projects.', 167 | category: 'Home Automation & IoT', 168 | webLink: 'https://nodered.org', 169 | githubLink: 'https://github.com/node-red/node-red' 170 | }, 171 | { 172 | name: 'openHAB', 173 | port: 8080, 174 | description: 'Open-source, technology-agnostic home automation platform supporting numerous smart home devices and services.', 175 | category: 'Home Automation & IoT', 176 | webLink: 'https://www.openhab.org', 177 | githubLink: 'https://github.com/openhab/openhab-core' 178 | }, 179 | 180 | // Development & Code Hosting 181 | { 182 | name: 'GitLab', 183 | port: 80, 184 | description: 'Comprehensive self-hosted Git service with built-in CI/CD, issue tracking, wikis, and more. A robust all-in-one DevOps platform.', 185 | category: 'Development & Code Hosting', 186 | webLink: 'https://about.gitlab.com', 187 | // Primary code is hosted at GitLab: 188 | githubLink: 'https://gitlab.com/gitlab-org/gitlab' 189 | }, 190 | { 191 | name: 'Gitea', 192 | port: 3000, 193 | description: 'Lightweight, self-hosted Git service. Ideal for smaller teams or individuals who want a simpler, resource-friendly solution.', 194 | category: 'Development & Code Hosting', 195 | webLink: 'https://gitea.io', 196 | githubLink: 'https://github.com/go-gitea/gitea' 197 | }, 198 | { 199 | name: 'Jenkins', 200 | port: 8080, 201 | description: 'Leading open-source automation server for CI/CD pipelines. Highly extensible with hundreds of plugins.', 202 | category: 'Development & Code Hosting', 203 | webLink: 'https://www.jenkins.io', 204 | githubLink: 'https://github.com/jenkinsci/jenkins' 205 | }, 206 | { 207 | name: 'Drone CI', 208 | port: 8000, 209 | description: 'Container-native CI/CD platform. Integrates tightly with GitHub, GitLab, and Gitea, and emphasizes minimal configuration.', 210 | category: 'Development & Code Hosting', 211 | webLink: 'https://www.drone.io', 212 | githubLink: 'https://github.com/harness/drone' 213 | }, 214 | 215 | // Monitoring & Analytics 216 | { 217 | name: 'Grafana', 218 | port: 3000, 219 | description: 'Analytics and visualization platform, typically used with time-series databases like Prometheus or InfluxDB. Flexible dashboards and alerts.', 220 | category: 'Monitoring & Analytics', 221 | webLink: 'https://grafana.com', 222 | githubLink: 'https://github.com/grafana/grafana' 223 | }, 224 | { 225 | name: 'Prometheus', 226 | port: 9090, 227 | description: 'Monitoring system and time-series database. Gathers metrics via a pull model, often coupled with Grafana for visualization.', 228 | category: 'Monitoring & Analytics', 229 | webLink: 'https://prometheus.io', 230 | githubLink: 'https://github.com/prometheus/prometheus' 231 | }, 232 | { 233 | name: 'Uptime Kuma', 234 | port: 3001, 235 | description: 'Self-hosted uptime monitoring tool with a clean UI, multiple protocol checks (HTTP, TCP, etc.), and alerting features.', 236 | category: 'Monitoring & Analytics', 237 | webLink: 'https://uptime.kuma.pet', 238 | githubLink: 'https://github.com/louislam/uptime-kuma' 239 | }, 240 | { 241 | name: 'Netdata', 242 | port: 19999, 243 | description: 'Real-time performance monitoring for systems and applications, offering interactive visualizations and a minimal configuration process.', 244 | category: 'Monitoring & Analytics', 245 | webLink: 'https://www.netdata.cloud', 246 | githubLink: 'https://github.com/netdata/netdata' 247 | }, 248 | { 249 | name: 'Kibana', 250 | port: 5601, 251 | description: 'Front-end visualization tool for Elasticsearch. Helps analyze logs and metrics via advanced dashboards and searching capabilities.', 252 | category: 'Monitoring & Analytics', 253 | webLink: 'https://www.elastic.co/kibana', 254 | githubLink: 'https://github.com/elastic/kibana' 255 | }, 256 | { 257 | name: 'Loki', 258 | port: 3100, 259 | description: 'Log aggregation system by Grafana Labs. Integrates well with Prometheus and Grafana to provide a cohesive monitoring stack.', 260 | category: 'Monitoring & Analytics', 261 | webLink: 'https://grafana.com/oss/loki', 262 | githubLink: 'https://github.com/grafana/loki' 263 | }, 264 | 265 | // Productivity & Collaboration 266 | { 267 | name: 'Nextcloud', 268 | port: 8080, 269 | description: 'Self-hosted productivity platform that includes file syncing, collaborative document editing, calendar, contacts, and more.', 270 | category: 'Productivity & Collaboration', 271 | webLink: 'https://nextcloud.com', 272 | githubLink: 'https://github.com/nextcloud/server' 273 | }, 274 | { 275 | name: 'OnlyOffice', 276 | port: 8081, 277 | description: 'Self-hosted office suite enabling online editing of text documents, spreadsheets, and presentations. Often paired with Nextcloud.', 278 | category: 'Productivity & Collaboration', 279 | webLink: 'https://www.onlyoffice.com', 280 | githubLink: 'https://github.com/ONLYOFFICE/DocumentServer' 281 | }, 282 | { 283 | name: 'Etherpad', 284 | port: 9001, 285 | description: 'Real-time collaborative text editor. Allows multiple users to edit documents simultaneously and view changes in real time.', 286 | category: 'Productivity & Collaboration', 287 | webLink: 'https://etherpad.org', 288 | githubLink: 'https://github.com/ether/etherpad-lite' 289 | }, 290 | { 291 | name: 'CryptPad', 292 | port: 3002, 293 | description: 'Privacy-first collaboration suite (documents, polls, kanbans) with end-to-end encryption.', 294 | category: 'Productivity & Collaboration', 295 | webLink: 'https://cryptpad.fr', 296 | githubLink: 'https://github.com/xwiki-labs/cryptpad' 297 | }, 298 | { 299 | name: 'BookStack', 300 | port: 80, 301 | description: 'Simple, user-friendly wiki platform for storing notes, documentation, and knowledge bases.', 302 | category: 'Productivity & Collaboration', 303 | webLink: 'https://www.bookstackapp.com', 304 | githubLink: 'https://github.com/BookStackApp/BookStack' 305 | }, 306 | 307 | // Authentication & Identity 308 | { 309 | name: 'Keycloak', 310 | port: 8080, 311 | description: 'Open-source identity and access management solution. Provides single sign-on (SSO), identity brokering, and social login integration.', 312 | category: 'Authentication & Identity', 313 | webLink: 'https://www.keycloak.org', 314 | githubLink: 'https://github.com/keycloak/keycloak' 315 | }, 316 | { 317 | name: 'Authelia', 318 | port: 9091, 319 | description: 'Modern, self-hosted authentication and authorization server for securing reverse proxies. Often used with Traefik, Caddy, or Nginx.', 320 | category: 'Authentication & Identity', 321 | webLink: 'https://www.authelia.com', 322 | githubLink: 'https://github.com/authelia/authelia' 323 | }, 324 | 325 | // Security & Networking 326 | { 327 | name: 'Pi-hole', 328 | port: 80, 329 | description: 'Network-wide ad blocking and DNS management solution that can block ads and trackers at the DNS level.', 330 | category: 'Security & Networking', 331 | webLink: 'https://pi-hole.net', 332 | githubLink: 'https://github.com/pi-hole/pi-hole' 333 | }, 334 | { 335 | name: 'Unifi Controller', 336 | port: 8443, 337 | description: 'Management interface for UniFi network devices (access points, switches, gateways). Provides centralized configuration and monitoring.', 338 | category: 'Security & Networking', 339 | webLink: 'https://unifi.ui.com', 340 | // The UniFi Controller is not fully open source: 341 | // githubLink: 'https://github.com/ubiquiti' 342 | }, 343 | 344 | // Container & Server Management 345 | { 346 | name: 'Portainer', 347 | port: 9000, 348 | description: 'Lightweight container management UI, supporting Docker, Docker Swarm, and Kubernetes. Simplifies container and image management.', 349 | category: 'Container & Server Management', 350 | webLink: 'https://www.portainer.io', 351 | githubLink: 'https://github.com/portainer/portainer' 352 | }, 353 | { 354 | name: 'Docker Registry', 355 | port: 5000, 356 | description: 'Private Docker image registry for storing and distributing container images locally.', 357 | category: 'Container & Server Management', 358 | webLink: 'https://docs.docker.com/registry', 359 | githubLink: 'https://github.com/docker/distribution' 360 | }, 361 | { 362 | name: 'Rancher', 363 | port: 80, 364 | description: 'Kubernetes management platform providing a GUI and centralized controls over multiple Kubernetes clusters.', 365 | category: 'Container & Server Management', 366 | webLink: 'https://rancher.com', 367 | githubLink: 'https://github.com/rancher/rancher' 368 | }, 369 | 370 | // Password & Secrets Management 371 | { 372 | name: 'Vaultwarden', 373 | port: 8080, 374 | description: 'Lightweight, self-hosted Bitwarden-compatible server for password management. Maintains core features with lower resource usage.', 375 | category: 'Password & Secrets Management', 376 | // The main site for the Vaultwarden project is its GitHub page: 377 | webLink: 'https://github.com/dani-garcia/vaultwarden', 378 | githubLink: 'https://github.com/dani-garcia/vaultwarden' 379 | }, 380 | { 381 | name: 'HashiCorp Vault', 382 | port: 8200, 383 | description: 'Secure tool for secrets management, encryption, and access control. Can store API keys, passwords, certificates, and more.', 384 | category: 'Password & Secrets Management', 385 | webLink: 'https://www.vaultproject.io', 386 | githubLink: 'https://github.com/hashicorp/vault' 387 | }, 388 | 389 | // Messaging & Communication 390 | { 391 | name: 'Rocket.Chat', 392 | port: 3000, 393 | description: 'Self-hosted team chat solution, similar to Slack. Supports channels, direct messages, audio/video calls, and screen sharing.', 394 | category: 'Messaging & Communication', 395 | webLink: 'https://rocket.chat', 396 | githubLink: 'https://github.com/RocketChat/Rocket.Chat' 397 | }, 398 | { 399 | name: 'Mattermost', 400 | port: 8065, 401 | description: 'Open-source, self-hosted Slack alternative with integrations, theming, and enterprise features.', 402 | category: 'Messaging & Communication', 403 | webLink: 'https://mattermost.com', 404 | githubLink: 'https://github.com/mattermost/mattermost-server' 405 | }, 406 | { 407 | name: 'The Lounge', 408 | port: 9001, 409 | description: 'Self-hosted web IRC client that stays connected even when you\'re offline. Includes multiple theme and plugin options.', 410 | category: 'Messaging & Communication', 411 | webLink: 'https://thelounge.chat', 412 | githubLink: 'https://github.com/thelounge/thelounge' 413 | } 414 | ]; -------------------------------------------------------------------------------- /src/style.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | :root { 6 | --background: 224 71% 4%; 7 | --foreground: 213 31% 91%; 8 | --muted: 223 47% 11%; 9 | --muted-foreground: 215.4 16.3% 56.9%; 10 | --accent: 216 34% 17%; 11 | --accent-foreground: 210 40% 98%; 12 | --popover: 224 71% 4%; 13 | --popover-foreground: 215 20.2% 65.1%; 14 | --border: 216 34% 17%; 15 | --input: 216 34% 17%; 16 | --card: 224 71% 4%; 17 | --card-foreground: 213 31% 91%; 18 | --primary: 263 70% 50%; 19 | --primary-foreground: 210 40% 98%; 20 | --secondary: 215 25% 27%; 21 | --secondary-foreground: 210 40% 98%; 22 | --destructive: 0 62% 45%; 23 | --destructive-foreground: 210 40% 98%; 24 | --ring: 216 34% 17%; 25 | --radius: 0.5rem; 26 | } 27 | 28 | @layer base { 29 | * { 30 | @apply border-border; 31 | } 32 | body { 33 | @apply bg-background text-foreground; 34 | } 35 | } 36 | 37 | /* Custom scrollbar styles */ 38 | .scrollbar-thin { 39 | scrollbar-width: thin; 40 | scrollbar-color: hsl(var(--primary)/0.3) transparent; 41 | } 42 | 43 | .scrollbar-thin::-webkit-scrollbar { 44 | height: 6px; 45 | width: 6px; 46 | } 47 | 48 | .scrollbar-thin::-webkit-scrollbar-track { 49 | background: transparent; 50 | } 51 | 52 | .scrollbar-thin::-webkit-scrollbar-thumb { 53 | background-color: hsl(var(--primary)/0.3); 54 | border-radius: 3px; 55 | } 56 | 57 | .scrollbar-thin::-webkit-scrollbar-thumb:hover { 58 | background-color: hsl(var(--primary)/0.5); 59 | } 60 | -------------------------------------------------------------------------------- /src/types/caddy.ts: -------------------------------------------------------------------------------- 1 | export interface CaddyHost { 2 | id: string; 3 | domain: string; 4 | fileServer?: { 5 | root: string; 6 | browse: boolean; 7 | php: boolean; 8 | frankenphp: boolean; 9 | hide: string[]; 10 | }; 11 | presetName?: string; 12 | reverseProxy?: string; 13 | tls?: { 14 | email?: string; 15 | selfSigned?: boolean; 16 | certFile?: string; 17 | keyFile?: string; 18 | }; 19 | encode?: boolean; 20 | basicAuth?: { 21 | username: string; 22 | password: string; 23 | }[]; 24 | headers?: { 25 | name: string; 26 | value: string; 27 | }[]; 28 | cors?: { 29 | enabled: boolean; 30 | allowOrigins: string[]; 31 | allowMethods: string[]; 32 | allowHeaders: string[]; 33 | }; 34 | security?: { 35 | ipFilter: { 36 | enabled: boolean; 37 | allow: string[]; 38 | block: string[]; 39 | }; 40 | rateLimit: { 41 | enabled: boolean; 42 | requests: number; 43 | window: string; 44 | }; 45 | cspEnabled: boolean; 46 | csp: string; 47 | forwardAuth: { 48 | enabled: boolean; 49 | url: string; 50 | verifyHeader?: string; 51 | verifyValue?: string; 52 | }; 53 | }; 54 | performance?: { 55 | brotli: boolean; 56 | cacheControlEnabled: boolean; 57 | cacheControl: string; 58 | }; 59 | } 60 | 61 | export interface PresetConfig { 62 | name: string; 63 | port: number; 64 | description: string; 65 | category: 'Media & Streaming' | 'Downloaders & File Sharing' | 'Media Management & Automation' | 66 | 'Home Automation & IoT' | 'Development & Code Hosting' | 'Monitoring & Analytics' | 67 | 'Productivity & Collaboration' | 'Authentication & Identity' | 'Security & Networking' | 68 | 'Container & Server Management' | 'Password & Secrets Management' | 'Messaging & Communication'; 69 | webLink?: string; 70 | githubLink?: string; 71 | logo?: string; 72 | } 73 | -------------------------------------------------------------------------------- /src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | darkMode: ["class"], 4 | content: [ 5 | './pages/**/*.{ts,tsx,vue}', 6 | './components/**/*.{ts,tsx,vue}', 7 | './app/**/*.{ts,tsx,vue}', 8 | './src/**/*.{ts,tsx,vue}', 9 | ], 10 | theme: { 11 | container: { 12 | center: true, 13 | padding: "2rem", 14 | screens: { 15 | "2xl": "1400px", 16 | }, 17 | }, 18 | extend: { 19 | colors: { 20 | border: "hsl(var(--border))", 21 | input: "hsl(var(--input))", 22 | ring: "hsl(var(--ring))", 23 | background: "hsl(var(--background))", 24 | foreground: "hsl(var(--foreground))", 25 | primary: { 26 | DEFAULT: "hsl(var(--primary))", 27 | foreground: "hsl(var(--primary-foreground))", 28 | }, 29 | secondary: { 30 | DEFAULT: "hsl(var(--secondary))", 31 | foreground: "hsl(var(--secondary-foreground))", 32 | }, 33 | destructive: { 34 | DEFAULT: "hsl(var(--destructive))", 35 | foreground: "hsl(var(--destructive-foreground))", 36 | }, 37 | muted: { 38 | DEFAULT: "hsl(var(--muted))", 39 | foreground: "hsl(var(--muted-foreground))", 40 | }, 41 | accent: { 42 | DEFAULT: "hsl(var(--accent))", 43 | foreground: "hsl(var(--accent-foreground))", 44 | }, 45 | popover: { 46 | DEFAULT: "hsl(var(--popover))", 47 | foreground: "hsl(var(--popover-foreground))", 48 | }, 49 | card: { 50 | DEFAULT: "hsl(var(--card))", 51 | foreground: "hsl(var(--card-foreground))", 52 | }, 53 | }, 54 | borderRadius: { 55 | lg: "var(--radius)", 56 | md: "calc(var(--radius) - 2px)", 57 | sm: "calc(var(--radius) - 4px)", 58 | }, 59 | keyframes: { 60 | "accordion-down": { 61 | from: { height: 0 }, 62 | to: { height: "var(--radix-accordion-content-height)" }, 63 | }, 64 | "accordion-up": { 65 | from: { height: "var(--radix-accordion-content-height)" }, 66 | to: { height: 0 }, 67 | }, 68 | }, 69 | animation: { 70 | "accordion-down": "accordion-down 0.2s ease-out", 71 | "accordion-up": "accordion-up 0.2s ease-out", 72 | }, 73 | }, 74 | }, 75 | plugins: [require("tailwindcss-animate")], 76 | } -------------------------------------------------------------------------------- /tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "useDefineForClassFields": true, 5 | "module": "ESNext", 6 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 7 | "skipLibCheck": true, 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "bundler", 11 | "allowImportingTsExtensions": true, 12 | "isolatedModules": true, 13 | "moduleDetection": "force", 14 | "noEmit": true, 15 | "jsx": "preserve", 16 | 17 | /* Linting */ 18 | "strict": true, 19 | "noUnusedLocals": true, 20 | "noUnusedParameters": true, 21 | "noFallthroughCasesInSwitch": true 22 | }, 23 | "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] 24 | } 25 | -------------------------------------------------------------------------------- /tsconfig.app.tsbuildinfo: -------------------------------------------------------------------------------- 1 | {"root":["./src/main.ts","./src/presets.ts","./src/vite-env.d.ts","./src/types/caddy.ts","./src/app.vue","./src/components/caddyconfig.vue","./src/components/helloworld.vue","./src/components/hostform.vue","./src/components/importmodal.vue","./src/components/presetmodal.vue","./src/components/presetselect.vue"],"errors":true,"version":"5.7.2"} -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [ 4 | { "path": "./tsconfig.app.json" }, 5 | { "path": "./tsconfig.node.json" } 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2022", 4 | "lib": ["ES2023"], 5 | "module": "ESNext", 6 | "skipLibCheck": true, 7 | 8 | /* Bundler mode */ 9 | "moduleResolution": "bundler", 10 | "allowImportingTsExtensions": true, 11 | "isolatedModules": true, 12 | "moduleDetection": "force", 13 | "noEmit": true, 14 | 15 | /* Linting */ 16 | "strict": true, 17 | "noUnusedLocals": true, 18 | "noUnusedParameters": true, 19 | "noFallthroughCasesInSwitch": true 20 | }, 21 | "include": ["vite.config.ts"] 22 | } 23 | -------------------------------------------------------------------------------- /tsconfig.node.tsbuildinfo: -------------------------------------------------------------------------------- 1 | {"root":["./vite.config.ts"],"version":"5.7.2"} -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import vue from '@vitejs/plugin-vue' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [vue()], 7 | }) 8 | --------------------------------------------------------------------------------