├── .gitignore ├── README.md ├── jsconfig.json ├── package-lock.json ├── package.json ├── public ├── favicon.ico └── index.html ├── src ├── components │ └── forward-slots.ts ├── index.ts ├── shims-vue.d.ts └── vue-forward-slots.d.ts ├── tsconfig.json └── vite.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vue Forward Slots 2 | 3 | Effortlessly forward slots to child components in Vue 3 applications. 4 | 5 | ## Features 6 | 7 | - Easily forward all slots or specific slots to child components 8 | - Simple and declarative syntax 9 | 10 | ## Why Vue Forward Slots? 11 | 12 | In Vue applications, it's common to need to forward slots from a parent component to a child component. However, the 13 | default way of doing this can be verbose and repetitive. Consider the following example: 14 | 15 | ### The Default Way 16 | 17 | ```vue 18 | 30 | ``` 31 | 32 | Verbose and hard to read! 33 | 34 | ### With Vue Forward Slots 35 | 36 | ```vue 37 | 43 | ``` 44 | 45 | Simple and clean! 46 | 47 | ## Installation 48 | 49 | ```bash 50 | npm install vue-forward-slots 51 | ``` 52 | 53 | ### Importing 54 | 55 | You can import it in the component where you want to use it. 56 | 57 | ```vue 58 | 63 | ``` 64 | 65 | ## Usage 66 | 67 | ### Example Usage 68 | 69 | A classic example is that of a table component with multiple levels of nested components. 70 | We can easily define and forward slots to nested components using the `ForwardSlots` component. 71 | 72 | #### Root Component 73 | 74 | We define the slots in the root component. 75 | 76 | ```vue 77 | 91 | ``` 92 | 93 | #### Table Component 94 | 95 | We forward the slots to the child components. 96 | 97 | ```vue 98 | 107 | ``` 108 | 109 | #### TableHead Component 110 | 111 | The TableHeadComponent now has access to the slots defined in the root component. If no slot is provided, it will 112 | default to the text in the slot. 113 | 114 | ```vue 115 | 131 | ``` 132 | 133 | #### TableBody Component 134 | 135 | The TableBodyComponent also has access to the slots defined in the root component. Notice how we also pass the user data. 136 | 137 | ```vue 138 | 154 | ``` 155 | 156 | We could even go a step further and forward the slots to the next level of child components. 157 | 158 | ```vue 159 | 170 | ``` 171 | 172 | In theory, we could keep forwarding slots to as many levels of child components as we need. 173 | 174 | ### Forwarding Only Specific Slots 175 | 176 | ```vue 177 | 188 | ``` 189 | 190 | ### Excluding Specific Slots 191 | 192 | ```vue 193 | 204 | ``` 205 | 206 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "esnext", 5 | "baseUrl": "./", 6 | "moduleResolution": "node", 7 | "paths": { 8 | "@/*": [ 9 | "src/*" 10 | ] 11 | }, 12 | "lib": [ 13 | "esnext", 14 | "dom", 15 | "dom.iterable", 16 | "scripthost" 17 | ] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-forward-slots", 3 | "version": "5.0.4", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "vue-forward-slots", 9 | "version": "5.0.4", 10 | "license": "MIT", 11 | "dependencies": { 12 | "vue": "^3.0.0" 13 | }, 14 | "devDependencies": { 15 | "@rollup/plugin-commonjs": "^25.0.4", 16 | "@rollup/plugin-node-resolve": "^15.1.0", 17 | "@vitejs/plugin-vue": "^4.2.3", 18 | "typescript": "^4.9.5", 19 | "vite": "^4.4.9" 20 | } 21 | }, 22 | "node_modules/@babel/parser": { 23 | "version": "7.22.10", 24 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", 25 | "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", 26 | "bin": { 27 | "parser": "bin/babel-parser.js" 28 | }, 29 | "engines": { 30 | "node": ">=6.0.0" 31 | } 32 | }, 33 | "node_modules/@esbuild/android-arm": { 34 | "version": "0.18.20", 35 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", 36 | "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", 37 | "cpu": [ 38 | "arm" 39 | ], 40 | "dev": true, 41 | "optional": true, 42 | "os": [ 43 | "android" 44 | ], 45 | "engines": { 46 | "node": ">=12" 47 | } 48 | }, 49 | "node_modules/@esbuild/android-arm64": { 50 | "version": "0.18.20", 51 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", 52 | "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", 53 | "cpu": [ 54 | "arm64" 55 | ], 56 | "dev": true, 57 | "optional": true, 58 | "os": [ 59 | "android" 60 | ], 61 | "engines": { 62 | "node": ">=12" 63 | } 64 | }, 65 | "node_modules/@esbuild/android-x64": { 66 | "version": "0.18.20", 67 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", 68 | "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", 69 | "cpu": [ 70 | "x64" 71 | ], 72 | "dev": true, 73 | "optional": true, 74 | "os": [ 75 | "android" 76 | ], 77 | "engines": { 78 | "node": ">=12" 79 | } 80 | }, 81 | "node_modules/@esbuild/darwin-arm64": { 82 | "version": "0.18.20", 83 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", 84 | "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", 85 | "cpu": [ 86 | "arm64" 87 | ], 88 | "dev": true, 89 | "optional": true, 90 | "os": [ 91 | "darwin" 92 | ], 93 | "engines": { 94 | "node": ">=12" 95 | } 96 | }, 97 | "node_modules/@esbuild/darwin-x64": { 98 | "version": "0.18.20", 99 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", 100 | "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", 101 | "cpu": [ 102 | "x64" 103 | ], 104 | "dev": true, 105 | "optional": true, 106 | "os": [ 107 | "darwin" 108 | ], 109 | "engines": { 110 | "node": ">=12" 111 | } 112 | }, 113 | "node_modules/@esbuild/freebsd-arm64": { 114 | "version": "0.18.20", 115 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", 116 | "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", 117 | "cpu": [ 118 | "arm64" 119 | ], 120 | "dev": true, 121 | "optional": true, 122 | "os": [ 123 | "freebsd" 124 | ], 125 | "engines": { 126 | "node": ">=12" 127 | } 128 | }, 129 | "node_modules/@esbuild/freebsd-x64": { 130 | "version": "0.18.20", 131 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", 132 | "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", 133 | "cpu": [ 134 | "x64" 135 | ], 136 | "dev": true, 137 | "optional": true, 138 | "os": [ 139 | "freebsd" 140 | ], 141 | "engines": { 142 | "node": ">=12" 143 | } 144 | }, 145 | "node_modules/@esbuild/linux-arm": { 146 | "version": "0.18.20", 147 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", 148 | "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", 149 | "cpu": [ 150 | "arm" 151 | ], 152 | "dev": true, 153 | "optional": true, 154 | "os": [ 155 | "linux" 156 | ], 157 | "engines": { 158 | "node": ">=12" 159 | } 160 | }, 161 | "node_modules/@esbuild/linux-arm64": { 162 | "version": "0.18.20", 163 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", 164 | "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", 165 | "cpu": [ 166 | "arm64" 167 | ], 168 | "dev": true, 169 | "optional": true, 170 | "os": [ 171 | "linux" 172 | ], 173 | "engines": { 174 | "node": ">=12" 175 | } 176 | }, 177 | "node_modules/@esbuild/linux-ia32": { 178 | "version": "0.18.20", 179 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", 180 | "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", 181 | "cpu": [ 182 | "ia32" 183 | ], 184 | "dev": true, 185 | "optional": true, 186 | "os": [ 187 | "linux" 188 | ], 189 | "engines": { 190 | "node": ">=12" 191 | } 192 | }, 193 | "node_modules/@esbuild/linux-loong64": { 194 | "version": "0.18.20", 195 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", 196 | "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", 197 | "cpu": [ 198 | "loong64" 199 | ], 200 | "dev": true, 201 | "optional": true, 202 | "os": [ 203 | "linux" 204 | ], 205 | "engines": { 206 | "node": ">=12" 207 | } 208 | }, 209 | "node_modules/@esbuild/linux-mips64el": { 210 | "version": "0.18.20", 211 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", 212 | "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", 213 | "cpu": [ 214 | "mips64el" 215 | ], 216 | "dev": true, 217 | "optional": true, 218 | "os": [ 219 | "linux" 220 | ], 221 | "engines": { 222 | "node": ">=12" 223 | } 224 | }, 225 | "node_modules/@esbuild/linux-ppc64": { 226 | "version": "0.18.20", 227 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", 228 | "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", 229 | "cpu": [ 230 | "ppc64" 231 | ], 232 | "dev": true, 233 | "optional": true, 234 | "os": [ 235 | "linux" 236 | ], 237 | "engines": { 238 | "node": ">=12" 239 | } 240 | }, 241 | "node_modules/@esbuild/linux-riscv64": { 242 | "version": "0.18.20", 243 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", 244 | "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", 245 | "cpu": [ 246 | "riscv64" 247 | ], 248 | "dev": true, 249 | "optional": true, 250 | "os": [ 251 | "linux" 252 | ], 253 | "engines": { 254 | "node": ">=12" 255 | } 256 | }, 257 | "node_modules/@esbuild/linux-s390x": { 258 | "version": "0.18.20", 259 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", 260 | "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", 261 | "cpu": [ 262 | "s390x" 263 | ], 264 | "dev": true, 265 | "optional": true, 266 | "os": [ 267 | "linux" 268 | ], 269 | "engines": { 270 | "node": ">=12" 271 | } 272 | }, 273 | "node_modules/@esbuild/linux-x64": { 274 | "version": "0.18.20", 275 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", 276 | "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", 277 | "cpu": [ 278 | "x64" 279 | ], 280 | "dev": true, 281 | "optional": true, 282 | "os": [ 283 | "linux" 284 | ], 285 | "engines": { 286 | "node": ">=12" 287 | } 288 | }, 289 | "node_modules/@esbuild/netbsd-x64": { 290 | "version": "0.18.20", 291 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", 292 | "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", 293 | "cpu": [ 294 | "x64" 295 | ], 296 | "dev": true, 297 | "optional": true, 298 | "os": [ 299 | "netbsd" 300 | ], 301 | "engines": { 302 | "node": ">=12" 303 | } 304 | }, 305 | "node_modules/@esbuild/openbsd-x64": { 306 | "version": "0.18.20", 307 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", 308 | "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", 309 | "cpu": [ 310 | "x64" 311 | ], 312 | "dev": true, 313 | "optional": true, 314 | "os": [ 315 | "openbsd" 316 | ], 317 | "engines": { 318 | "node": ">=12" 319 | } 320 | }, 321 | "node_modules/@esbuild/sunos-x64": { 322 | "version": "0.18.20", 323 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", 324 | "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", 325 | "cpu": [ 326 | "x64" 327 | ], 328 | "dev": true, 329 | "optional": true, 330 | "os": [ 331 | "sunos" 332 | ], 333 | "engines": { 334 | "node": ">=12" 335 | } 336 | }, 337 | "node_modules/@esbuild/win32-arm64": { 338 | "version": "0.18.20", 339 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", 340 | "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", 341 | "cpu": [ 342 | "arm64" 343 | ], 344 | "dev": true, 345 | "optional": true, 346 | "os": [ 347 | "win32" 348 | ], 349 | "engines": { 350 | "node": ">=12" 351 | } 352 | }, 353 | "node_modules/@esbuild/win32-ia32": { 354 | "version": "0.18.20", 355 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", 356 | "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", 357 | "cpu": [ 358 | "ia32" 359 | ], 360 | "dev": true, 361 | "optional": true, 362 | "os": [ 363 | "win32" 364 | ], 365 | "engines": { 366 | "node": ">=12" 367 | } 368 | }, 369 | "node_modules/@esbuild/win32-x64": { 370 | "version": "0.18.20", 371 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", 372 | "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", 373 | "cpu": [ 374 | "x64" 375 | ], 376 | "dev": true, 377 | "optional": true, 378 | "os": [ 379 | "win32" 380 | ], 381 | "engines": { 382 | "node": ">=12" 383 | } 384 | }, 385 | "node_modules/@jridgewell/gen-mapping": { 386 | "version": "0.3.3", 387 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", 388 | "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", 389 | "dev": true, 390 | "optional": true, 391 | "peer": true, 392 | "dependencies": { 393 | "@jridgewell/set-array": "^1.0.1", 394 | "@jridgewell/sourcemap-codec": "^1.4.10", 395 | "@jridgewell/trace-mapping": "^0.3.9" 396 | }, 397 | "engines": { 398 | "node": ">=6.0.0" 399 | } 400 | }, 401 | "node_modules/@jridgewell/resolve-uri": { 402 | "version": "3.1.1", 403 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", 404 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", 405 | "dev": true, 406 | "optional": true, 407 | "peer": true, 408 | "engines": { 409 | "node": ">=6.0.0" 410 | } 411 | }, 412 | "node_modules/@jridgewell/set-array": { 413 | "version": "1.1.2", 414 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 415 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 416 | "dev": true, 417 | "optional": true, 418 | "peer": true, 419 | "engines": { 420 | "node": ">=6.0.0" 421 | } 422 | }, 423 | "node_modules/@jridgewell/source-map": { 424 | "version": "0.3.5", 425 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", 426 | "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", 427 | "dev": true, 428 | "optional": true, 429 | "peer": true, 430 | "dependencies": { 431 | "@jridgewell/gen-mapping": "^0.3.0", 432 | "@jridgewell/trace-mapping": "^0.3.9" 433 | } 434 | }, 435 | "node_modules/@jridgewell/sourcemap-codec": { 436 | "version": "1.4.15", 437 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 438 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" 439 | }, 440 | "node_modules/@jridgewell/trace-mapping": { 441 | "version": "0.3.19", 442 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", 443 | "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", 444 | "dev": true, 445 | "optional": true, 446 | "peer": true, 447 | "dependencies": { 448 | "@jridgewell/resolve-uri": "^3.1.0", 449 | "@jridgewell/sourcemap-codec": "^1.4.14" 450 | } 451 | }, 452 | "node_modules/@rollup/plugin-commonjs": { 453 | "version": "25.0.4", 454 | "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.4.tgz", 455 | "integrity": "sha512-L92Vz9WUZXDnlQQl3EwbypJR4+DM2EbsO+/KOcEkP4Mc6Ct453EeDB2uH9lgRwj4w5yflgNpq9pHOiY8aoUXBQ==", 456 | "dev": true, 457 | "dependencies": { 458 | "@rollup/pluginutils": "^5.0.1", 459 | "commondir": "^1.0.1", 460 | "estree-walker": "^2.0.2", 461 | "glob": "^8.0.3", 462 | "is-reference": "1.2.1", 463 | "magic-string": "^0.27.0" 464 | }, 465 | "engines": { 466 | "node": ">=14.0.0" 467 | }, 468 | "peerDependencies": { 469 | "rollup": "^2.68.0||^3.0.0" 470 | }, 471 | "peerDependenciesMeta": { 472 | "rollup": { 473 | "optional": true 474 | } 475 | } 476 | }, 477 | "node_modules/@rollup/plugin-node-resolve": { 478 | "version": "15.1.0", 479 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", 480 | "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", 481 | "dev": true, 482 | "dependencies": { 483 | "@rollup/pluginutils": "^5.0.1", 484 | "@types/resolve": "1.20.2", 485 | "deepmerge": "^4.2.2", 486 | "is-builtin-module": "^3.2.1", 487 | "is-module": "^1.0.0", 488 | "resolve": "^1.22.1" 489 | }, 490 | "engines": { 491 | "node": ">=14.0.0" 492 | }, 493 | "peerDependencies": { 494 | "rollup": "^2.78.0||^3.0.0" 495 | }, 496 | "peerDependenciesMeta": { 497 | "rollup": { 498 | "optional": true 499 | } 500 | } 501 | }, 502 | "node_modules/@rollup/pluginutils": { 503 | "version": "5.0.3", 504 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.3.tgz", 505 | "integrity": "sha512-hfllNN4a80rwNQ9QCxhxuHCGHMAvabXqxNdaChUSSadMre7t4iEUI6fFAhBOn/eIYTgYVhBv7vCLsAJ4u3lf3g==", 506 | "dev": true, 507 | "dependencies": { 508 | "@types/estree": "^1.0.0", 509 | "estree-walker": "^2.0.2", 510 | "picomatch": "^2.3.1" 511 | }, 512 | "engines": { 513 | "node": ">=14.0.0" 514 | }, 515 | "peerDependencies": { 516 | "rollup": "^1.20.0||^2.0.0||^3.0.0" 517 | }, 518 | "peerDependenciesMeta": { 519 | "rollup": { 520 | "optional": true 521 | } 522 | } 523 | }, 524 | "node_modules/@types/estree": { 525 | "version": "1.0.1", 526 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", 527 | "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", 528 | "dev": true 529 | }, 530 | "node_modules/@types/node": { 531 | "version": "20.5.0", 532 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.0.tgz", 533 | "integrity": "sha512-Mgq7eCtoTjT89FqNoTzzXg2XvCi5VMhRV6+I2aYanc6kQCBImeNaAYRs/DyoVqk1YEUJK5gN9VO7HRIdz4Wo3Q==", 534 | "dev": true, 535 | "optional": true, 536 | "peer": true 537 | }, 538 | "node_modules/@types/resolve": { 539 | "version": "1.20.2", 540 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", 541 | "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", 542 | "dev": true 543 | }, 544 | "node_modules/@vitejs/plugin-vue": { 545 | "version": "4.2.3", 546 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz", 547 | "integrity": "sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==", 548 | "dev": true, 549 | "engines": { 550 | "node": "^14.18.0 || >=16.0.0" 551 | }, 552 | "peerDependencies": { 553 | "vite": "^4.0.0", 554 | "vue": "^3.2.25" 555 | } 556 | }, 557 | "node_modules/@vue/compiler-core": { 558 | "version": "3.3.4", 559 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", 560 | "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", 561 | "dependencies": { 562 | "@babel/parser": "^7.21.3", 563 | "@vue/shared": "3.3.4", 564 | "estree-walker": "^2.0.2", 565 | "source-map-js": "^1.0.2" 566 | } 567 | }, 568 | "node_modules/@vue/compiler-dom": { 569 | "version": "3.3.4", 570 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", 571 | "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", 572 | "dependencies": { 573 | "@vue/compiler-core": "3.3.4", 574 | "@vue/shared": "3.3.4" 575 | } 576 | }, 577 | "node_modules/@vue/compiler-sfc": { 578 | "version": "3.3.4", 579 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", 580 | "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", 581 | "dependencies": { 582 | "@babel/parser": "^7.20.15", 583 | "@vue/compiler-core": "3.3.4", 584 | "@vue/compiler-dom": "3.3.4", 585 | "@vue/compiler-ssr": "3.3.4", 586 | "@vue/reactivity-transform": "3.3.4", 587 | "@vue/shared": "3.3.4", 588 | "estree-walker": "^2.0.2", 589 | "magic-string": "^0.30.0", 590 | "postcss": "^8.1.10", 591 | "source-map-js": "^1.0.2" 592 | } 593 | }, 594 | "node_modules/@vue/compiler-sfc/node_modules/magic-string": { 595 | "version": "0.30.2", 596 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz", 597 | "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==", 598 | "dependencies": { 599 | "@jridgewell/sourcemap-codec": "^1.4.15" 600 | }, 601 | "engines": { 602 | "node": ">=12" 603 | } 604 | }, 605 | "node_modules/@vue/compiler-ssr": { 606 | "version": "3.3.4", 607 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", 608 | "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", 609 | "dependencies": { 610 | "@vue/compiler-dom": "3.3.4", 611 | "@vue/shared": "3.3.4" 612 | } 613 | }, 614 | "node_modules/@vue/reactivity": { 615 | "version": "3.3.4", 616 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz", 617 | "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", 618 | "dependencies": { 619 | "@vue/shared": "3.3.4" 620 | } 621 | }, 622 | "node_modules/@vue/reactivity-transform": { 623 | "version": "3.3.4", 624 | "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", 625 | "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", 626 | "dependencies": { 627 | "@babel/parser": "^7.20.15", 628 | "@vue/compiler-core": "3.3.4", 629 | "@vue/shared": "3.3.4", 630 | "estree-walker": "^2.0.2", 631 | "magic-string": "^0.30.0" 632 | } 633 | }, 634 | "node_modules/@vue/reactivity-transform/node_modules/magic-string": { 635 | "version": "0.30.2", 636 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz", 637 | "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==", 638 | "dependencies": { 639 | "@jridgewell/sourcemap-codec": "^1.4.15" 640 | }, 641 | "engines": { 642 | "node": ">=12" 643 | } 644 | }, 645 | "node_modules/@vue/runtime-core": { 646 | "version": "3.3.4", 647 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz", 648 | "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", 649 | "dependencies": { 650 | "@vue/reactivity": "3.3.4", 651 | "@vue/shared": "3.3.4" 652 | } 653 | }, 654 | "node_modules/@vue/runtime-dom": { 655 | "version": "3.3.4", 656 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", 657 | "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", 658 | "dependencies": { 659 | "@vue/runtime-core": "3.3.4", 660 | "@vue/shared": "3.3.4", 661 | "csstype": "^3.1.1" 662 | } 663 | }, 664 | "node_modules/@vue/server-renderer": { 665 | "version": "3.3.4", 666 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz", 667 | "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", 668 | "dependencies": { 669 | "@vue/compiler-ssr": "3.3.4", 670 | "@vue/shared": "3.3.4" 671 | }, 672 | "peerDependencies": { 673 | "vue": "3.3.4" 674 | } 675 | }, 676 | "node_modules/@vue/shared": { 677 | "version": "3.3.4", 678 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz", 679 | "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==" 680 | }, 681 | "node_modules/acorn": { 682 | "version": "8.10.0", 683 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", 684 | "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", 685 | "dev": true, 686 | "optional": true, 687 | "peer": true, 688 | "bin": { 689 | "acorn": "bin/acorn" 690 | }, 691 | "engines": { 692 | "node": ">=0.4.0" 693 | } 694 | }, 695 | "node_modules/balanced-match": { 696 | "version": "1.0.2", 697 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 698 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 699 | "dev": true 700 | }, 701 | "node_modules/brace-expansion": { 702 | "version": "2.0.1", 703 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 704 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 705 | "dev": true, 706 | "dependencies": { 707 | "balanced-match": "^1.0.0" 708 | } 709 | }, 710 | "node_modules/buffer-from": { 711 | "version": "1.1.2", 712 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 713 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 714 | "dev": true, 715 | "optional": true, 716 | "peer": true 717 | }, 718 | "node_modules/builtin-modules": { 719 | "version": "3.3.0", 720 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", 721 | "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", 722 | "dev": true, 723 | "engines": { 724 | "node": ">=6" 725 | }, 726 | "funding": { 727 | "url": "https://github.com/sponsors/sindresorhus" 728 | } 729 | }, 730 | "node_modules/commondir": { 731 | "version": "1.0.1", 732 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 733 | "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", 734 | "dev": true 735 | }, 736 | "node_modules/csstype": { 737 | "version": "3.1.2", 738 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", 739 | "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" 740 | }, 741 | "node_modules/deepmerge": { 742 | "version": "4.3.1", 743 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", 744 | "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", 745 | "dev": true, 746 | "engines": { 747 | "node": ">=0.10.0" 748 | } 749 | }, 750 | "node_modules/esbuild": { 751 | "version": "0.18.20", 752 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", 753 | "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", 754 | "dev": true, 755 | "hasInstallScript": true, 756 | "bin": { 757 | "esbuild": "bin/esbuild" 758 | }, 759 | "engines": { 760 | "node": ">=12" 761 | }, 762 | "optionalDependencies": { 763 | "@esbuild/android-arm": "0.18.20", 764 | "@esbuild/android-arm64": "0.18.20", 765 | "@esbuild/android-x64": "0.18.20", 766 | "@esbuild/darwin-arm64": "0.18.20", 767 | "@esbuild/darwin-x64": "0.18.20", 768 | "@esbuild/freebsd-arm64": "0.18.20", 769 | "@esbuild/freebsd-x64": "0.18.20", 770 | "@esbuild/linux-arm": "0.18.20", 771 | "@esbuild/linux-arm64": "0.18.20", 772 | "@esbuild/linux-ia32": "0.18.20", 773 | "@esbuild/linux-loong64": "0.18.20", 774 | "@esbuild/linux-mips64el": "0.18.20", 775 | "@esbuild/linux-ppc64": "0.18.20", 776 | "@esbuild/linux-riscv64": "0.18.20", 777 | "@esbuild/linux-s390x": "0.18.20", 778 | "@esbuild/linux-x64": "0.18.20", 779 | "@esbuild/netbsd-x64": "0.18.20", 780 | "@esbuild/openbsd-x64": "0.18.20", 781 | "@esbuild/sunos-x64": "0.18.20", 782 | "@esbuild/win32-arm64": "0.18.20", 783 | "@esbuild/win32-ia32": "0.18.20", 784 | "@esbuild/win32-x64": "0.18.20" 785 | } 786 | }, 787 | "node_modules/estree-walker": { 788 | "version": "2.0.2", 789 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 790 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" 791 | }, 792 | "node_modules/fs.realpath": { 793 | "version": "1.0.0", 794 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 795 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 796 | "dev": true 797 | }, 798 | "node_modules/fsevents": { 799 | "version": "2.3.2", 800 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 801 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 802 | "dev": true, 803 | "hasInstallScript": true, 804 | "optional": true, 805 | "os": [ 806 | "darwin" 807 | ], 808 | "engines": { 809 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 810 | } 811 | }, 812 | "node_modules/function-bind": { 813 | "version": "1.1.1", 814 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 815 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 816 | "dev": true 817 | }, 818 | "node_modules/glob": { 819 | "version": "8.1.0", 820 | "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", 821 | "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", 822 | "dev": true, 823 | "dependencies": { 824 | "fs.realpath": "^1.0.0", 825 | "inflight": "^1.0.4", 826 | "inherits": "2", 827 | "minimatch": "^5.0.1", 828 | "once": "^1.3.0" 829 | }, 830 | "engines": { 831 | "node": ">=12" 832 | }, 833 | "funding": { 834 | "url": "https://github.com/sponsors/isaacs" 835 | } 836 | }, 837 | "node_modules/has": { 838 | "version": "1.0.3", 839 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 840 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 841 | "dev": true, 842 | "dependencies": { 843 | "function-bind": "^1.1.1" 844 | }, 845 | "engines": { 846 | "node": ">= 0.4.0" 847 | } 848 | }, 849 | "node_modules/inflight": { 850 | "version": "1.0.6", 851 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 852 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 853 | "dev": true, 854 | "dependencies": { 855 | "once": "^1.3.0", 856 | "wrappy": "1" 857 | } 858 | }, 859 | "node_modules/inherits": { 860 | "version": "2.0.4", 861 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 862 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 863 | "dev": true 864 | }, 865 | "node_modules/is-builtin-module": { 866 | "version": "3.2.1", 867 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", 868 | "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", 869 | "dev": true, 870 | "dependencies": { 871 | "builtin-modules": "^3.3.0" 872 | }, 873 | "engines": { 874 | "node": ">=6" 875 | }, 876 | "funding": { 877 | "url": "https://github.com/sponsors/sindresorhus" 878 | } 879 | }, 880 | "node_modules/is-core-module": { 881 | "version": "2.13.0", 882 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", 883 | "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", 884 | "dev": true, 885 | "dependencies": { 886 | "has": "^1.0.3" 887 | }, 888 | "funding": { 889 | "url": "https://github.com/sponsors/ljharb" 890 | } 891 | }, 892 | "node_modules/is-module": { 893 | "version": "1.0.0", 894 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 895 | "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", 896 | "dev": true 897 | }, 898 | "node_modules/is-reference": { 899 | "version": "1.2.1", 900 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", 901 | "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", 902 | "dev": true, 903 | "dependencies": { 904 | "@types/estree": "*" 905 | } 906 | }, 907 | "node_modules/magic-string": { 908 | "version": "0.27.0", 909 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", 910 | "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", 911 | "dev": true, 912 | "dependencies": { 913 | "@jridgewell/sourcemap-codec": "^1.4.13" 914 | }, 915 | "engines": { 916 | "node": ">=12" 917 | } 918 | }, 919 | "node_modules/minimatch": { 920 | "version": "5.1.6", 921 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", 922 | "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", 923 | "dev": true, 924 | "dependencies": { 925 | "brace-expansion": "^2.0.1" 926 | }, 927 | "engines": { 928 | "node": ">=10" 929 | } 930 | }, 931 | "node_modules/nanoid": { 932 | "version": "3.3.7", 933 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 934 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 935 | "funding": [ 936 | { 937 | "type": "github", 938 | "url": "https://github.com/sponsors/ai" 939 | } 940 | ], 941 | "bin": { 942 | "nanoid": "bin/nanoid.cjs" 943 | }, 944 | "engines": { 945 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 946 | } 947 | }, 948 | "node_modules/once": { 949 | "version": "1.4.0", 950 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 951 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 952 | "dev": true, 953 | "dependencies": { 954 | "wrappy": "1" 955 | } 956 | }, 957 | "node_modules/path-parse": { 958 | "version": "1.0.7", 959 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 960 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 961 | "dev": true 962 | }, 963 | "node_modules/picocolors": { 964 | "version": "1.0.1", 965 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", 966 | "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" 967 | }, 968 | "node_modules/picomatch": { 969 | "version": "2.3.1", 970 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 971 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 972 | "dev": true, 973 | "engines": { 974 | "node": ">=8.6" 975 | }, 976 | "funding": { 977 | "url": "https://github.com/sponsors/jonschlinkert" 978 | } 979 | }, 980 | "node_modules/postcss": { 981 | "version": "8.4.40", 982 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", 983 | "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", 984 | "funding": [ 985 | { 986 | "type": "opencollective", 987 | "url": "https://opencollective.com/postcss/" 988 | }, 989 | { 990 | "type": "tidelift", 991 | "url": "https://tidelift.com/funding/github/npm/postcss" 992 | }, 993 | { 994 | "type": "github", 995 | "url": "https://github.com/sponsors/ai" 996 | } 997 | ], 998 | "dependencies": { 999 | "nanoid": "^3.3.7", 1000 | "picocolors": "^1.0.1", 1001 | "source-map-js": "^1.2.0" 1002 | }, 1003 | "engines": { 1004 | "node": "^10 || ^12 || >=14" 1005 | } 1006 | }, 1007 | "node_modules/resolve": { 1008 | "version": "1.22.4", 1009 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", 1010 | "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", 1011 | "dev": true, 1012 | "dependencies": { 1013 | "is-core-module": "^2.13.0", 1014 | "path-parse": "^1.0.7", 1015 | "supports-preserve-symlinks-flag": "^1.0.0" 1016 | }, 1017 | "bin": { 1018 | "resolve": "bin/resolve" 1019 | }, 1020 | "funding": { 1021 | "url": "https://github.com/sponsors/ljharb" 1022 | } 1023 | }, 1024 | "node_modules/rollup": { 1025 | "version": "3.28.0", 1026 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.0.tgz", 1027 | "integrity": "sha512-d7zhvo1OUY2SXSM6pfNjgD5+d0Nz87CUp4mt8l/GgVP3oBsPwzNvSzyu1me6BSG9JIgWNTVcafIXBIyM8yQ3yw==", 1028 | "dev": true, 1029 | "bin": { 1030 | "rollup": "dist/bin/rollup" 1031 | }, 1032 | "engines": { 1033 | "node": ">=14.18.0", 1034 | "npm": ">=8.0.0" 1035 | }, 1036 | "optionalDependencies": { 1037 | "fsevents": "~2.3.2" 1038 | } 1039 | }, 1040 | "node_modules/source-map": { 1041 | "version": "0.6.1", 1042 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1043 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1044 | "dev": true, 1045 | "optional": true, 1046 | "peer": true, 1047 | "engines": { 1048 | "node": ">=0.10.0" 1049 | } 1050 | }, 1051 | "node_modules/source-map-js": { 1052 | "version": "1.2.0", 1053 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", 1054 | "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", 1055 | "engines": { 1056 | "node": ">=0.10.0" 1057 | } 1058 | }, 1059 | "node_modules/source-map-support": { 1060 | "version": "0.5.21", 1061 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 1062 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 1063 | "dev": true, 1064 | "optional": true, 1065 | "peer": true, 1066 | "dependencies": { 1067 | "buffer-from": "^1.0.0", 1068 | "source-map": "^0.6.0" 1069 | } 1070 | }, 1071 | "node_modules/supports-preserve-symlinks-flag": { 1072 | "version": "1.0.0", 1073 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1074 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1075 | "dev": true, 1076 | "engines": { 1077 | "node": ">= 0.4" 1078 | }, 1079 | "funding": { 1080 | "url": "https://github.com/sponsors/ljharb" 1081 | } 1082 | }, 1083 | "node_modules/terser": { 1084 | "version": "5.19.2", 1085 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", 1086 | "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", 1087 | "dev": true, 1088 | "optional": true, 1089 | "peer": true, 1090 | "dependencies": { 1091 | "@jridgewell/source-map": "^0.3.3", 1092 | "acorn": "^8.8.2", 1093 | "commander": "^2.20.0", 1094 | "source-map-support": "~0.5.20" 1095 | }, 1096 | "bin": { 1097 | "terser": "bin/terser" 1098 | }, 1099 | "engines": { 1100 | "node": ">=10" 1101 | } 1102 | }, 1103 | "node_modules/terser/node_modules/commander": { 1104 | "version": "2.20.3", 1105 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1106 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 1107 | "dev": true, 1108 | "optional": true, 1109 | "peer": true 1110 | }, 1111 | "node_modules/typescript": { 1112 | "version": "4.9.5", 1113 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", 1114 | "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", 1115 | "dev": true, 1116 | "bin": { 1117 | "tsc": "bin/tsc", 1118 | "tsserver": "bin/tsserver" 1119 | }, 1120 | "engines": { 1121 | "node": ">=4.2.0" 1122 | } 1123 | }, 1124 | "node_modules/vite": { 1125 | "version": "4.5.3", 1126 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz", 1127 | "integrity": "sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==", 1128 | "dev": true, 1129 | "dependencies": { 1130 | "esbuild": "^0.18.10", 1131 | "postcss": "^8.4.27", 1132 | "rollup": "^3.27.1" 1133 | }, 1134 | "bin": { 1135 | "vite": "bin/vite.js" 1136 | }, 1137 | "engines": { 1138 | "node": "^14.18.0 || >=16.0.0" 1139 | }, 1140 | "funding": { 1141 | "url": "https://github.com/vitejs/vite?sponsor=1" 1142 | }, 1143 | "optionalDependencies": { 1144 | "fsevents": "~2.3.2" 1145 | }, 1146 | "peerDependencies": { 1147 | "@types/node": ">= 14", 1148 | "less": "*", 1149 | "lightningcss": "^1.21.0", 1150 | "sass": "*", 1151 | "stylus": "*", 1152 | "sugarss": "*", 1153 | "terser": "^5.4.0" 1154 | }, 1155 | "peerDependenciesMeta": { 1156 | "@types/node": { 1157 | "optional": true 1158 | }, 1159 | "less": { 1160 | "optional": true 1161 | }, 1162 | "lightningcss": { 1163 | "optional": true 1164 | }, 1165 | "sass": { 1166 | "optional": true 1167 | }, 1168 | "stylus": { 1169 | "optional": true 1170 | }, 1171 | "sugarss": { 1172 | "optional": true 1173 | }, 1174 | "terser": { 1175 | "optional": true 1176 | } 1177 | } 1178 | }, 1179 | "node_modules/vue": { 1180 | "version": "3.3.4", 1181 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", 1182 | "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", 1183 | "dependencies": { 1184 | "@vue/compiler-dom": "3.3.4", 1185 | "@vue/compiler-sfc": "3.3.4", 1186 | "@vue/runtime-dom": "3.3.4", 1187 | "@vue/server-renderer": "3.3.4", 1188 | "@vue/shared": "3.3.4" 1189 | } 1190 | }, 1191 | "node_modules/wrappy": { 1192 | "version": "1.0.2", 1193 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1194 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1195 | "dev": true 1196 | } 1197 | }, 1198 | "dependencies": { 1199 | "@babel/parser": { 1200 | "version": "7.22.10", 1201 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", 1202 | "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==" 1203 | }, 1204 | "@esbuild/android-arm": { 1205 | "version": "0.18.20", 1206 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", 1207 | "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", 1208 | "dev": true, 1209 | "optional": true 1210 | }, 1211 | "@esbuild/android-arm64": { 1212 | "version": "0.18.20", 1213 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", 1214 | "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", 1215 | "dev": true, 1216 | "optional": true 1217 | }, 1218 | "@esbuild/android-x64": { 1219 | "version": "0.18.20", 1220 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", 1221 | "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", 1222 | "dev": true, 1223 | "optional": true 1224 | }, 1225 | "@esbuild/darwin-arm64": { 1226 | "version": "0.18.20", 1227 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", 1228 | "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", 1229 | "dev": true, 1230 | "optional": true 1231 | }, 1232 | "@esbuild/darwin-x64": { 1233 | "version": "0.18.20", 1234 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", 1235 | "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", 1236 | "dev": true, 1237 | "optional": true 1238 | }, 1239 | "@esbuild/freebsd-arm64": { 1240 | "version": "0.18.20", 1241 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", 1242 | "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", 1243 | "dev": true, 1244 | "optional": true 1245 | }, 1246 | "@esbuild/freebsd-x64": { 1247 | "version": "0.18.20", 1248 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", 1249 | "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", 1250 | "dev": true, 1251 | "optional": true 1252 | }, 1253 | "@esbuild/linux-arm": { 1254 | "version": "0.18.20", 1255 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", 1256 | "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", 1257 | "dev": true, 1258 | "optional": true 1259 | }, 1260 | "@esbuild/linux-arm64": { 1261 | "version": "0.18.20", 1262 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", 1263 | "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", 1264 | "dev": true, 1265 | "optional": true 1266 | }, 1267 | "@esbuild/linux-ia32": { 1268 | "version": "0.18.20", 1269 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", 1270 | "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", 1271 | "dev": true, 1272 | "optional": true 1273 | }, 1274 | "@esbuild/linux-loong64": { 1275 | "version": "0.18.20", 1276 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", 1277 | "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", 1278 | "dev": true, 1279 | "optional": true 1280 | }, 1281 | "@esbuild/linux-mips64el": { 1282 | "version": "0.18.20", 1283 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", 1284 | "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", 1285 | "dev": true, 1286 | "optional": true 1287 | }, 1288 | "@esbuild/linux-ppc64": { 1289 | "version": "0.18.20", 1290 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", 1291 | "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", 1292 | "dev": true, 1293 | "optional": true 1294 | }, 1295 | "@esbuild/linux-riscv64": { 1296 | "version": "0.18.20", 1297 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", 1298 | "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", 1299 | "dev": true, 1300 | "optional": true 1301 | }, 1302 | "@esbuild/linux-s390x": { 1303 | "version": "0.18.20", 1304 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", 1305 | "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", 1306 | "dev": true, 1307 | "optional": true 1308 | }, 1309 | "@esbuild/linux-x64": { 1310 | "version": "0.18.20", 1311 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", 1312 | "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", 1313 | "dev": true, 1314 | "optional": true 1315 | }, 1316 | "@esbuild/netbsd-x64": { 1317 | "version": "0.18.20", 1318 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", 1319 | "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", 1320 | "dev": true, 1321 | "optional": true 1322 | }, 1323 | "@esbuild/openbsd-x64": { 1324 | "version": "0.18.20", 1325 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", 1326 | "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", 1327 | "dev": true, 1328 | "optional": true 1329 | }, 1330 | "@esbuild/sunos-x64": { 1331 | "version": "0.18.20", 1332 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", 1333 | "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", 1334 | "dev": true, 1335 | "optional": true 1336 | }, 1337 | "@esbuild/win32-arm64": { 1338 | "version": "0.18.20", 1339 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", 1340 | "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", 1341 | "dev": true, 1342 | "optional": true 1343 | }, 1344 | "@esbuild/win32-ia32": { 1345 | "version": "0.18.20", 1346 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", 1347 | "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", 1348 | "dev": true, 1349 | "optional": true 1350 | }, 1351 | "@esbuild/win32-x64": { 1352 | "version": "0.18.20", 1353 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", 1354 | "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", 1355 | "dev": true, 1356 | "optional": true 1357 | }, 1358 | "@jridgewell/gen-mapping": { 1359 | "version": "0.3.3", 1360 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", 1361 | "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", 1362 | "dev": true, 1363 | "optional": true, 1364 | "peer": true, 1365 | "requires": { 1366 | "@jridgewell/set-array": "^1.0.1", 1367 | "@jridgewell/sourcemap-codec": "^1.4.10", 1368 | "@jridgewell/trace-mapping": "^0.3.9" 1369 | } 1370 | }, 1371 | "@jridgewell/resolve-uri": { 1372 | "version": "3.1.1", 1373 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", 1374 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", 1375 | "dev": true, 1376 | "optional": true, 1377 | "peer": true 1378 | }, 1379 | "@jridgewell/set-array": { 1380 | "version": "1.1.2", 1381 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 1382 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 1383 | "dev": true, 1384 | "optional": true, 1385 | "peer": true 1386 | }, 1387 | "@jridgewell/source-map": { 1388 | "version": "0.3.5", 1389 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", 1390 | "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", 1391 | "dev": true, 1392 | "optional": true, 1393 | "peer": true, 1394 | "requires": { 1395 | "@jridgewell/gen-mapping": "^0.3.0", 1396 | "@jridgewell/trace-mapping": "^0.3.9" 1397 | } 1398 | }, 1399 | "@jridgewell/sourcemap-codec": { 1400 | "version": "1.4.15", 1401 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 1402 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" 1403 | }, 1404 | "@jridgewell/trace-mapping": { 1405 | "version": "0.3.19", 1406 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", 1407 | "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", 1408 | "dev": true, 1409 | "optional": true, 1410 | "peer": true, 1411 | "requires": { 1412 | "@jridgewell/resolve-uri": "^3.1.0", 1413 | "@jridgewell/sourcemap-codec": "^1.4.14" 1414 | } 1415 | }, 1416 | "@rollup/plugin-commonjs": { 1417 | "version": "25.0.4", 1418 | "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.4.tgz", 1419 | "integrity": "sha512-L92Vz9WUZXDnlQQl3EwbypJR4+DM2EbsO+/KOcEkP4Mc6Ct453EeDB2uH9lgRwj4w5yflgNpq9pHOiY8aoUXBQ==", 1420 | "dev": true, 1421 | "requires": { 1422 | "@rollup/pluginutils": "^5.0.1", 1423 | "commondir": "^1.0.1", 1424 | "estree-walker": "^2.0.2", 1425 | "glob": "^8.0.3", 1426 | "is-reference": "1.2.1", 1427 | "magic-string": "^0.27.0" 1428 | } 1429 | }, 1430 | "@rollup/plugin-node-resolve": { 1431 | "version": "15.1.0", 1432 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", 1433 | "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", 1434 | "dev": true, 1435 | "requires": { 1436 | "@rollup/pluginutils": "^5.0.1", 1437 | "@types/resolve": "1.20.2", 1438 | "deepmerge": "^4.2.2", 1439 | "is-builtin-module": "^3.2.1", 1440 | "is-module": "^1.0.0", 1441 | "resolve": "^1.22.1" 1442 | } 1443 | }, 1444 | "@rollup/pluginutils": { 1445 | "version": "5.0.3", 1446 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.3.tgz", 1447 | "integrity": "sha512-hfllNN4a80rwNQ9QCxhxuHCGHMAvabXqxNdaChUSSadMre7t4iEUI6fFAhBOn/eIYTgYVhBv7vCLsAJ4u3lf3g==", 1448 | "dev": true, 1449 | "requires": { 1450 | "@types/estree": "^1.0.0", 1451 | "estree-walker": "^2.0.2", 1452 | "picomatch": "^2.3.1" 1453 | } 1454 | }, 1455 | "@types/estree": { 1456 | "version": "1.0.1", 1457 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", 1458 | "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", 1459 | "dev": true 1460 | }, 1461 | "@types/node": { 1462 | "version": "20.5.0", 1463 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.0.tgz", 1464 | "integrity": "sha512-Mgq7eCtoTjT89FqNoTzzXg2XvCi5VMhRV6+I2aYanc6kQCBImeNaAYRs/DyoVqk1YEUJK5gN9VO7HRIdz4Wo3Q==", 1465 | "dev": true, 1466 | "optional": true, 1467 | "peer": true 1468 | }, 1469 | "@types/resolve": { 1470 | "version": "1.20.2", 1471 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", 1472 | "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", 1473 | "dev": true 1474 | }, 1475 | "@vitejs/plugin-vue": { 1476 | "version": "4.2.3", 1477 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz", 1478 | "integrity": "sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==", 1479 | "dev": true, 1480 | "requires": {} 1481 | }, 1482 | "@vue/compiler-core": { 1483 | "version": "3.3.4", 1484 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", 1485 | "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", 1486 | "requires": { 1487 | "@babel/parser": "^7.21.3", 1488 | "@vue/shared": "3.3.4", 1489 | "estree-walker": "^2.0.2", 1490 | "source-map-js": "^1.0.2" 1491 | } 1492 | }, 1493 | "@vue/compiler-dom": { 1494 | "version": "3.3.4", 1495 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", 1496 | "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", 1497 | "requires": { 1498 | "@vue/compiler-core": "3.3.4", 1499 | "@vue/shared": "3.3.4" 1500 | } 1501 | }, 1502 | "@vue/compiler-sfc": { 1503 | "version": "3.3.4", 1504 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", 1505 | "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", 1506 | "requires": { 1507 | "@babel/parser": "^7.20.15", 1508 | "@vue/compiler-core": "3.3.4", 1509 | "@vue/compiler-dom": "3.3.4", 1510 | "@vue/compiler-ssr": "3.3.4", 1511 | "@vue/reactivity-transform": "3.3.4", 1512 | "@vue/shared": "3.3.4", 1513 | "estree-walker": "^2.0.2", 1514 | "magic-string": "^0.30.0", 1515 | "postcss": "^8.1.10", 1516 | "source-map-js": "^1.0.2" 1517 | }, 1518 | "dependencies": { 1519 | "magic-string": { 1520 | "version": "0.30.2", 1521 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz", 1522 | "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==", 1523 | "requires": { 1524 | "@jridgewell/sourcemap-codec": "^1.4.15" 1525 | } 1526 | } 1527 | } 1528 | }, 1529 | "@vue/compiler-ssr": { 1530 | "version": "3.3.4", 1531 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", 1532 | "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", 1533 | "requires": { 1534 | "@vue/compiler-dom": "3.3.4", 1535 | "@vue/shared": "3.3.4" 1536 | } 1537 | }, 1538 | "@vue/reactivity": { 1539 | "version": "3.3.4", 1540 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz", 1541 | "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", 1542 | "requires": { 1543 | "@vue/shared": "3.3.4" 1544 | } 1545 | }, 1546 | "@vue/reactivity-transform": { 1547 | "version": "3.3.4", 1548 | "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", 1549 | "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", 1550 | "requires": { 1551 | "@babel/parser": "^7.20.15", 1552 | "@vue/compiler-core": "3.3.4", 1553 | "@vue/shared": "3.3.4", 1554 | "estree-walker": "^2.0.2", 1555 | "magic-string": "^0.30.0" 1556 | }, 1557 | "dependencies": { 1558 | "magic-string": { 1559 | "version": "0.30.2", 1560 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz", 1561 | "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==", 1562 | "requires": { 1563 | "@jridgewell/sourcemap-codec": "^1.4.15" 1564 | } 1565 | } 1566 | } 1567 | }, 1568 | "@vue/runtime-core": { 1569 | "version": "3.3.4", 1570 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz", 1571 | "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", 1572 | "requires": { 1573 | "@vue/reactivity": "3.3.4", 1574 | "@vue/shared": "3.3.4" 1575 | } 1576 | }, 1577 | "@vue/runtime-dom": { 1578 | "version": "3.3.4", 1579 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", 1580 | "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", 1581 | "requires": { 1582 | "@vue/runtime-core": "3.3.4", 1583 | "@vue/shared": "3.3.4", 1584 | "csstype": "^3.1.1" 1585 | } 1586 | }, 1587 | "@vue/server-renderer": { 1588 | "version": "3.3.4", 1589 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz", 1590 | "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", 1591 | "requires": { 1592 | "@vue/compiler-ssr": "3.3.4", 1593 | "@vue/shared": "3.3.4" 1594 | } 1595 | }, 1596 | "@vue/shared": { 1597 | "version": "3.3.4", 1598 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz", 1599 | "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==" 1600 | }, 1601 | "acorn": { 1602 | "version": "8.10.0", 1603 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", 1604 | "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", 1605 | "dev": true, 1606 | "optional": true, 1607 | "peer": true 1608 | }, 1609 | "balanced-match": { 1610 | "version": "1.0.2", 1611 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1612 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1613 | "dev": true 1614 | }, 1615 | "brace-expansion": { 1616 | "version": "2.0.1", 1617 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 1618 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 1619 | "dev": true, 1620 | "requires": { 1621 | "balanced-match": "^1.0.0" 1622 | } 1623 | }, 1624 | "buffer-from": { 1625 | "version": "1.1.2", 1626 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 1627 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 1628 | "dev": true, 1629 | "optional": true, 1630 | "peer": true 1631 | }, 1632 | "builtin-modules": { 1633 | "version": "3.3.0", 1634 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", 1635 | "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", 1636 | "dev": true 1637 | }, 1638 | "commondir": { 1639 | "version": "1.0.1", 1640 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 1641 | "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", 1642 | "dev": true 1643 | }, 1644 | "csstype": { 1645 | "version": "3.1.2", 1646 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", 1647 | "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" 1648 | }, 1649 | "deepmerge": { 1650 | "version": "4.3.1", 1651 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", 1652 | "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", 1653 | "dev": true 1654 | }, 1655 | "esbuild": { 1656 | "version": "0.18.20", 1657 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", 1658 | "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", 1659 | "dev": true, 1660 | "requires": { 1661 | "@esbuild/android-arm": "0.18.20", 1662 | "@esbuild/android-arm64": "0.18.20", 1663 | "@esbuild/android-x64": "0.18.20", 1664 | "@esbuild/darwin-arm64": "0.18.20", 1665 | "@esbuild/darwin-x64": "0.18.20", 1666 | "@esbuild/freebsd-arm64": "0.18.20", 1667 | "@esbuild/freebsd-x64": "0.18.20", 1668 | "@esbuild/linux-arm": "0.18.20", 1669 | "@esbuild/linux-arm64": "0.18.20", 1670 | "@esbuild/linux-ia32": "0.18.20", 1671 | "@esbuild/linux-loong64": "0.18.20", 1672 | "@esbuild/linux-mips64el": "0.18.20", 1673 | "@esbuild/linux-ppc64": "0.18.20", 1674 | "@esbuild/linux-riscv64": "0.18.20", 1675 | "@esbuild/linux-s390x": "0.18.20", 1676 | "@esbuild/linux-x64": "0.18.20", 1677 | "@esbuild/netbsd-x64": "0.18.20", 1678 | "@esbuild/openbsd-x64": "0.18.20", 1679 | "@esbuild/sunos-x64": "0.18.20", 1680 | "@esbuild/win32-arm64": "0.18.20", 1681 | "@esbuild/win32-ia32": "0.18.20", 1682 | "@esbuild/win32-x64": "0.18.20" 1683 | } 1684 | }, 1685 | "estree-walker": { 1686 | "version": "2.0.2", 1687 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 1688 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" 1689 | }, 1690 | "fs.realpath": { 1691 | "version": "1.0.0", 1692 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1693 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1694 | "dev": true 1695 | }, 1696 | "fsevents": { 1697 | "version": "2.3.2", 1698 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1699 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1700 | "dev": true, 1701 | "optional": true 1702 | }, 1703 | "function-bind": { 1704 | "version": "1.1.1", 1705 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1706 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1707 | "dev": true 1708 | }, 1709 | "glob": { 1710 | "version": "8.1.0", 1711 | "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", 1712 | "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", 1713 | "dev": true, 1714 | "requires": { 1715 | "fs.realpath": "^1.0.0", 1716 | "inflight": "^1.0.4", 1717 | "inherits": "2", 1718 | "minimatch": "^5.0.1", 1719 | "once": "^1.3.0" 1720 | } 1721 | }, 1722 | "has": { 1723 | "version": "1.0.3", 1724 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1725 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1726 | "dev": true, 1727 | "requires": { 1728 | "function-bind": "^1.1.1" 1729 | } 1730 | }, 1731 | "inflight": { 1732 | "version": "1.0.6", 1733 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1734 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1735 | "dev": true, 1736 | "requires": { 1737 | "once": "^1.3.0", 1738 | "wrappy": "1" 1739 | } 1740 | }, 1741 | "inherits": { 1742 | "version": "2.0.4", 1743 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1744 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1745 | "dev": true 1746 | }, 1747 | "is-builtin-module": { 1748 | "version": "3.2.1", 1749 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", 1750 | "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", 1751 | "dev": true, 1752 | "requires": { 1753 | "builtin-modules": "^3.3.0" 1754 | } 1755 | }, 1756 | "is-core-module": { 1757 | "version": "2.13.0", 1758 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", 1759 | "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", 1760 | "dev": true, 1761 | "requires": { 1762 | "has": "^1.0.3" 1763 | } 1764 | }, 1765 | "is-module": { 1766 | "version": "1.0.0", 1767 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 1768 | "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", 1769 | "dev": true 1770 | }, 1771 | "is-reference": { 1772 | "version": "1.2.1", 1773 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", 1774 | "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", 1775 | "dev": true, 1776 | "requires": { 1777 | "@types/estree": "*" 1778 | } 1779 | }, 1780 | "magic-string": { 1781 | "version": "0.27.0", 1782 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", 1783 | "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", 1784 | "dev": true, 1785 | "requires": { 1786 | "@jridgewell/sourcemap-codec": "^1.4.13" 1787 | } 1788 | }, 1789 | "minimatch": { 1790 | "version": "5.1.6", 1791 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", 1792 | "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", 1793 | "dev": true, 1794 | "requires": { 1795 | "brace-expansion": "^2.0.1" 1796 | } 1797 | }, 1798 | "nanoid": { 1799 | "version": "3.3.7", 1800 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 1801 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" 1802 | }, 1803 | "once": { 1804 | "version": "1.4.0", 1805 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1806 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1807 | "dev": true, 1808 | "requires": { 1809 | "wrappy": "1" 1810 | } 1811 | }, 1812 | "path-parse": { 1813 | "version": "1.0.7", 1814 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1815 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1816 | "dev": true 1817 | }, 1818 | "picocolors": { 1819 | "version": "1.0.1", 1820 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", 1821 | "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" 1822 | }, 1823 | "picomatch": { 1824 | "version": "2.3.1", 1825 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1826 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1827 | "dev": true 1828 | }, 1829 | "postcss": { 1830 | "version": "8.4.40", 1831 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", 1832 | "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", 1833 | "requires": { 1834 | "nanoid": "^3.3.7", 1835 | "picocolors": "^1.0.1", 1836 | "source-map-js": "^1.2.0" 1837 | } 1838 | }, 1839 | "resolve": { 1840 | "version": "1.22.4", 1841 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", 1842 | "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", 1843 | "dev": true, 1844 | "requires": { 1845 | "is-core-module": "^2.13.0", 1846 | "path-parse": "^1.0.7", 1847 | "supports-preserve-symlinks-flag": "^1.0.0" 1848 | } 1849 | }, 1850 | "rollup": { 1851 | "version": "3.28.0", 1852 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.0.tgz", 1853 | "integrity": "sha512-d7zhvo1OUY2SXSM6pfNjgD5+d0Nz87CUp4mt8l/GgVP3oBsPwzNvSzyu1me6BSG9JIgWNTVcafIXBIyM8yQ3yw==", 1854 | "dev": true, 1855 | "requires": { 1856 | "fsevents": "~2.3.2" 1857 | } 1858 | }, 1859 | "source-map": { 1860 | "version": "0.6.1", 1861 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1862 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1863 | "dev": true, 1864 | "optional": true, 1865 | "peer": true 1866 | }, 1867 | "source-map-js": { 1868 | "version": "1.2.0", 1869 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", 1870 | "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==" 1871 | }, 1872 | "source-map-support": { 1873 | "version": "0.5.21", 1874 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 1875 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 1876 | "dev": true, 1877 | "optional": true, 1878 | "peer": true, 1879 | "requires": { 1880 | "buffer-from": "^1.0.0", 1881 | "source-map": "^0.6.0" 1882 | } 1883 | }, 1884 | "supports-preserve-symlinks-flag": { 1885 | "version": "1.0.0", 1886 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1887 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1888 | "dev": true 1889 | }, 1890 | "terser": { 1891 | "version": "5.19.2", 1892 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", 1893 | "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", 1894 | "dev": true, 1895 | "optional": true, 1896 | "peer": true, 1897 | "requires": { 1898 | "@jridgewell/source-map": "^0.3.3", 1899 | "acorn": "^8.8.2", 1900 | "commander": "^2.20.0", 1901 | "source-map-support": "~0.5.20" 1902 | }, 1903 | "dependencies": { 1904 | "commander": { 1905 | "version": "2.20.3", 1906 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1907 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 1908 | "dev": true, 1909 | "optional": true, 1910 | "peer": true 1911 | } 1912 | } 1913 | }, 1914 | "typescript": { 1915 | "version": "4.9.5", 1916 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", 1917 | "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", 1918 | "dev": true 1919 | }, 1920 | "vite": { 1921 | "version": "4.5.3", 1922 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz", 1923 | "integrity": "sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==", 1924 | "dev": true, 1925 | "requires": { 1926 | "esbuild": "^0.18.10", 1927 | "fsevents": "~2.3.2", 1928 | "postcss": "^8.4.27", 1929 | "rollup": "^3.27.1" 1930 | } 1931 | }, 1932 | "vue": { 1933 | "version": "3.3.4", 1934 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", 1935 | "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", 1936 | "requires": { 1937 | "@vue/compiler-dom": "3.3.4", 1938 | "@vue/compiler-sfc": "3.3.4", 1939 | "@vue/runtime-dom": "3.3.4", 1940 | "@vue/server-renderer": "3.3.4", 1941 | "@vue/shared": "3.3.4" 1942 | } 1943 | }, 1944 | "wrappy": { 1945 | "version": "1.0.2", 1946 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1947 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1948 | "dev": true 1949 | } 1950 | } 1951 | } 1952 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-forward-slots", 3 | "version": "5.0.4", 4 | "description": "Forward slots to child components", 5 | "author": "Jesse Gall", 6 | "scripts": { 7 | "build": "vite build", 8 | "postbuild": "cp ./src/vue-forward-slots.d.ts ./dist/vue-forward-slots.d.ts && rm ./dist/index.html && rm ./dist/favicon.ico" 9 | }, 10 | "main": "dist/vue-forward-slots.js", 11 | "module": "dist/vue-forward-slots.mjs", 12 | "types": "dist/vue-forward-slots.d.ts", 13 | "files": [ 14 | "dist" 15 | ], 16 | "dependencies": { 17 | "vue": "^3.0.0" 18 | }, 19 | "devDependencies": { 20 | "@rollup/plugin-commonjs": "^25.0.4", 21 | "@rollup/plugin-node-resolve": "^15.1.0", 22 | "@vitejs/plugin-vue": "^4.2.3", 23 | "typescript": "^4.9.5", 24 | "vite": "^4.4.9" 25 | }, 26 | "homepage": "https://github.com/jessegall/vue-forward-slots", 27 | "keywords": [ 28 | "vue", 29 | "vue3", 30 | "forward", 31 | "slots", 32 | "forward-slots" 33 | ], 34 | "license": "MIT", 35 | "repository": { 36 | "type": "git", 37 | "url": "https://github.com/jessegall/vue-forward-slots" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegall/vue-forward-slots/53a84e36c99fe1cc2e97f182aba628f8cbb20717/public/favicon.ico -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <%= htmlWebpackPlugin.options.title %> 9 | 10 | 11 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/components/forward-slots.ts: -------------------------------------------------------------------------------- 1 | import { 2 | computed, 3 | defineComponent, 4 | h, 5 | PropType, 6 | Slot, 7 | VNode, 8 | } from 'vue'; 9 | 10 | type SlotOption = string | string[]; 11 | 12 | type Slots = { 13 | [name: string]: Slot | undefined; 14 | }; 15 | 16 | interface ForwardSlotsProps { 17 | slots: Slots; 18 | only?: SlotOption; 19 | except?: SlotOption; 20 | } 21 | 22 | function isValidSlotOption(value: any): value is SlotOption { 23 | return typeof value === 'string' || Array.isArray(value); 24 | } 25 | 26 | function wrap(input: any): string[] { 27 | if (! Array.isArray(input)) { 28 | input = [input]; 29 | } 30 | 31 | return input.filter(Boolean); 32 | } 33 | 34 | function createSlots(slots: Slots, options: ForwardSlotsProps) { 35 | const include = wrap(options.only); 36 | const exclude = wrap(options.except); 37 | 38 | return Object.entries(slots) 39 | .filter(([slotName]) => shouldIncludeSlot(slotName, include, exclude)) 40 | .reduce((result, [slotName, slotFunction]) => { 41 | result[slotName] = (args: any) => slotFunction(args); 42 | return result; 43 | }, {} as Slots); 44 | } 45 | 46 | function shouldIncludeSlot(key: string, include: string[], exclude: string[]): boolean { 47 | if (include.length && ! include.includes(key)) { 48 | return false 49 | } 50 | 51 | return ! exclude.includes(key); 52 | } 53 | 54 | function createComponent(component: VNode | undefined, options: ForwardSlotsProps, slots: Slots): VNode { 55 | return h(component, {}, createSlots(slots, options)); 56 | } 57 | 58 | export const ForwardSlots = defineComponent({ 59 | name: "ForwardSlots", 60 | props: { 61 | slots: { 62 | type: Object as PropType, 63 | default: () => ({}), 64 | required: true 65 | }, 66 | only: { 67 | type: [String, Array] as PropType, 68 | default: () => [] as SlotOption, 69 | validator: isValidSlotOption, 70 | }, 71 | except: { 72 | type: [String, Array] as PropType, 73 | default: () => [] as SlotOption, 74 | validator: isValidSlotOption, 75 | } 76 | }, 77 | setup(props: ForwardSlotsProps, ctx) { 78 | const children = computed(() => ctx.slots.default?.() || []); 79 | 80 | return () => children.value.map((node: VNode) => { 81 | const slots = Object.assign({}, node.children, props.slots); 82 | return createComponent(node, props, slots) 83 | }); 84 | } 85 | }) 86 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { ForwardSlots } from "./components/forward-slots"; 2 | 3 | export { 4 | ForwardSlots, 5 | } -------------------------------------------------------------------------------- /src/shims-vue.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | declare module '*.vue' { 3 | import type { DefineComponent } from 'vue' 4 | const component: DefineComponent<{}, {}, any> 5 | export default component 6 | } 7 | -------------------------------------------------------------------------------- /src/vue-forward-slots.d.ts: -------------------------------------------------------------------------------- 1 | import { DefineComponent, Slot } from 'vue'; 2 | 3 | export interface ForwardSlotsProps { 4 | slots: { 5 | [name: string]: Slot | undefined; 6 | }; 7 | only?: string | string[]; 8 | except?: string | string[]; 9 | } 10 | 11 | export const ForwardSlots: DefineComponent; -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "esnext", 5 | "jsx": "preserve", 6 | "importHelpers": true, 7 | "moduleResolution": "node", 8 | "allowJs": true, 9 | "esModuleInterop": true, 10 | "allowSyntheticDefaultImports": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "useDefineForClassFields": true, 13 | "sourceMap": true, 14 | "baseUrl": ".", 15 | "declaration": true, 16 | "outDir": "./dist/", 17 | "paths": { 18 | "@/*": [ 19 | "src/*" 20 | ] 21 | }, 22 | "lib": [ 23 | "esnext", 24 | "dom", 25 | "dom.iterable", 26 | "scripthost" 27 | ] 28 | }, 29 | "include": [ 30 | "src/**/*.ts", 31 | "src/**/*.tsx", 32 | "src/**/*.vue", 33 | "tests/**/*.ts", 34 | "tests/**/*.tsx" 35 | ], 36 | "exclude": [ 37 | "node_modules" 38 | ] 39 | } 40 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import vue from '@vitejs/plugin-vue' 3 | import commonjs from '@rollup/plugin-commonjs'; 4 | import { nodeResolve } from '@rollup/plugin-node-resolve'; 5 | 6 | export default defineConfig({ 7 | plugins: [vue()], 8 | build: { 9 | lib: { 10 | entry: 'src/index.ts', 11 | name: 'ForwardSlots', 12 | formats: ['es', 'cjs'], 13 | }, 14 | rollupOptions: { 15 | external: ['vue'], 16 | output: { 17 | globals: { 18 | vue: 'Vue' 19 | } 20 | }, 21 | plugins: [nodeResolve(), commonjs()] 22 | } 23 | } 24 | }) 25 | --------------------------------------------------------------------------------