├── .gitignore ├── .vscode └── extensions.json ├── README.md ├── index.html ├── package-lock.json ├── package.json ├── public └── favicon.ico ├── src ├── App.vue ├── assets │ ├── base.css │ └── main.css ├── components │ ├── CustomMinMaxSlider.vue │ └── CustomSlider.vue ├── composables │ └── custom-slider.js └── main.js └── vite.config.js /.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 | .DS_Store 12 | dist 13 | dist-ssr 14 | coverage 15 | *.local 16 | 17 | /cypress/videos/ 18 | /cypress/screenshots/ 19 | 20 | # Editor directories and files 21 | .vscode/* 22 | !.vscode/extensions.json 23 | .idea 24 | *.suo 25 | *.ntvs* 26 | *.njsproj 27 | *.sln 28 | *.sw? 29 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] 3 | } 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # custom-slider-vue 2 | 3 | [](https://api.gitsponsors.com/api/badge/link?p=Cz1o6DLjMOMLbh+xPnqUpShxxiRHovhrdPlW9W/xh72SNmtus1h3qMP0rSbyNTU1lOEQOfs9Dt+1UieSr3c/g+deuR7Yc7+htl0/sTG0RqrevMfRBMAK1EGDSWdvN+Oqp4SCeb2SfLCdDxvPLlfihg==) 4 | 5 | This template should help get you started developing with Vue 3 in Vite. 6 | 7 | ## Recommended IDE Setup 8 | 9 | [VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin). 10 | 11 | ## Customize configuration 12 | 13 | See [Vite Configuration Reference](https://vitejs.dev/config/). 14 | 15 | ## Project Setup 16 | 17 | ```sh 18 | npm install 19 | ``` 20 | 21 | ### Compile and Hot-Reload for Development 22 | 23 | ```sh 24 | npm run dev 25 | ``` 26 | 27 | ### Compile and Minify for Production 28 | 29 | ```sh 30 | npm run build 31 | ``` 32 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite App 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "custom-slider-vue", 3 | "version": "0.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "custom-slider-vue", 9 | "version": "0.0.0", 10 | "dependencies": { 11 | "vue": "^3.2.45" 12 | }, 13 | "devDependencies": { 14 | "@vitejs/plugin-vue": "^4.0.0", 15 | "vite": "^4.0.0" 16 | } 17 | }, 18 | "node_modules/@babel/parser": { 19 | "version": "7.20.15", 20 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz", 21 | "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==", 22 | "bin": { 23 | "parser": "bin/babel-parser.js" 24 | }, 25 | "engines": { 26 | "node": ">=6.0.0" 27 | } 28 | }, 29 | "node_modules/@esbuild/android-arm": { 30 | "version": "0.17.19", 31 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", 32 | "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", 33 | "cpu": [ 34 | "arm" 35 | ], 36 | "dev": true, 37 | "optional": true, 38 | "os": [ 39 | "android" 40 | ], 41 | "engines": { 42 | "node": ">=12" 43 | } 44 | }, 45 | "node_modules/@esbuild/android-arm64": { 46 | "version": "0.17.19", 47 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", 48 | "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", 49 | "cpu": [ 50 | "arm64" 51 | ], 52 | "dev": true, 53 | "optional": true, 54 | "os": [ 55 | "android" 56 | ], 57 | "engines": { 58 | "node": ">=12" 59 | } 60 | }, 61 | "node_modules/@esbuild/android-x64": { 62 | "version": "0.17.19", 63 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", 64 | "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", 65 | "cpu": [ 66 | "x64" 67 | ], 68 | "dev": true, 69 | "optional": true, 70 | "os": [ 71 | "android" 72 | ], 73 | "engines": { 74 | "node": ">=12" 75 | } 76 | }, 77 | "node_modules/@esbuild/darwin-arm64": { 78 | "version": "0.17.19", 79 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", 80 | "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", 81 | "cpu": [ 82 | "arm64" 83 | ], 84 | "dev": true, 85 | "optional": true, 86 | "os": [ 87 | "darwin" 88 | ], 89 | "engines": { 90 | "node": ">=12" 91 | } 92 | }, 93 | "node_modules/@esbuild/darwin-x64": { 94 | "version": "0.17.19", 95 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", 96 | "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", 97 | "cpu": [ 98 | "x64" 99 | ], 100 | "dev": true, 101 | "optional": true, 102 | "os": [ 103 | "darwin" 104 | ], 105 | "engines": { 106 | "node": ">=12" 107 | } 108 | }, 109 | "node_modules/@esbuild/freebsd-arm64": { 110 | "version": "0.17.19", 111 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", 112 | "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", 113 | "cpu": [ 114 | "arm64" 115 | ], 116 | "dev": true, 117 | "optional": true, 118 | "os": [ 119 | "freebsd" 120 | ], 121 | "engines": { 122 | "node": ">=12" 123 | } 124 | }, 125 | "node_modules/@esbuild/freebsd-x64": { 126 | "version": "0.17.19", 127 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", 128 | "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", 129 | "cpu": [ 130 | "x64" 131 | ], 132 | "dev": true, 133 | "optional": true, 134 | "os": [ 135 | "freebsd" 136 | ], 137 | "engines": { 138 | "node": ">=12" 139 | } 140 | }, 141 | "node_modules/@esbuild/linux-arm": { 142 | "version": "0.17.19", 143 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", 144 | "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", 145 | "cpu": [ 146 | "arm" 147 | ], 148 | "dev": true, 149 | "optional": true, 150 | "os": [ 151 | "linux" 152 | ], 153 | "engines": { 154 | "node": ">=12" 155 | } 156 | }, 157 | "node_modules/@esbuild/linux-arm64": { 158 | "version": "0.17.19", 159 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", 160 | "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", 161 | "cpu": [ 162 | "arm64" 163 | ], 164 | "dev": true, 165 | "optional": true, 166 | "os": [ 167 | "linux" 168 | ], 169 | "engines": { 170 | "node": ">=12" 171 | } 172 | }, 173 | "node_modules/@esbuild/linux-ia32": { 174 | "version": "0.17.19", 175 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", 176 | "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", 177 | "cpu": [ 178 | "ia32" 179 | ], 180 | "dev": true, 181 | "optional": true, 182 | "os": [ 183 | "linux" 184 | ], 185 | "engines": { 186 | "node": ">=12" 187 | } 188 | }, 189 | "node_modules/@esbuild/linux-loong64": { 190 | "version": "0.17.19", 191 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", 192 | "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", 193 | "cpu": [ 194 | "loong64" 195 | ], 196 | "dev": true, 197 | "optional": true, 198 | "os": [ 199 | "linux" 200 | ], 201 | "engines": { 202 | "node": ">=12" 203 | } 204 | }, 205 | "node_modules/@esbuild/linux-mips64el": { 206 | "version": "0.17.19", 207 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", 208 | "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", 209 | "cpu": [ 210 | "mips64el" 211 | ], 212 | "dev": true, 213 | "optional": true, 214 | "os": [ 215 | "linux" 216 | ], 217 | "engines": { 218 | "node": ">=12" 219 | } 220 | }, 221 | "node_modules/@esbuild/linux-ppc64": { 222 | "version": "0.17.19", 223 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", 224 | "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", 225 | "cpu": [ 226 | "ppc64" 227 | ], 228 | "dev": true, 229 | "optional": true, 230 | "os": [ 231 | "linux" 232 | ], 233 | "engines": { 234 | "node": ">=12" 235 | } 236 | }, 237 | "node_modules/@esbuild/linux-riscv64": { 238 | "version": "0.17.19", 239 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", 240 | "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", 241 | "cpu": [ 242 | "riscv64" 243 | ], 244 | "dev": true, 245 | "optional": true, 246 | "os": [ 247 | "linux" 248 | ], 249 | "engines": { 250 | "node": ">=12" 251 | } 252 | }, 253 | "node_modules/@esbuild/linux-s390x": { 254 | "version": "0.17.19", 255 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", 256 | "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", 257 | "cpu": [ 258 | "s390x" 259 | ], 260 | "dev": true, 261 | "optional": true, 262 | "os": [ 263 | "linux" 264 | ], 265 | "engines": { 266 | "node": ">=12" 267 | } 268 | }, 269 | "node_modules/@esbuild/linux-x64": { 270 | "version": "0.17.19", 271 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", 272 | "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", 273 | "cpu": [ 274 | "x64" 275 | ], 276 | "dev": true, 277 | "optional": true, 278 | "os": [ 279 | "linux" 280 | ], 281 | "engines": { 282 | "node": ">=12" 283 | } 284 | }, 285 | "node_modules/@esbuild/netbsd-x64": { 286 | "version": "0.17.19", 287 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", 288 | "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", 289 | "cpu": [ 290 | "x64" 291 | ], 292 | "dev": true, 293 | "optional": true, 294 | "os": [ 295 | "netbsd" 296 | ], 297 | "engines": { 298 | "node": ">=12" 299 | } 300 | }, 301 | "node_modules/@esbuild/openbsd-x64": { 302 | "version": "0.17.19", 303 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", 304 | "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", 305 | "cpu": [ 306 | "x64" 307 | ], 308 | "dev": true, 309 | "optional": true, 310 | "os": [ 311 | "openbsd" 312 | ], 313 | "engines": { 314 | "node": ">=12" 315 | } 316 | }, 317 | "node_modules/@esbuild/sunos-x64": { 318 | "version": "0.17.19", 319 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", 320 | "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", 321 | "cpu": [ 322 | "x64" 323 | ], 324 | "dev": true, 325 | "optional": true, 326 | "os": [ 327 | "sunos" 328 | ], 329 | "engines": { 330 | "node": ">=12" 331 | } 332 | }, 333 | "node_modules/@esbuild/win32-arm64": { 334 | "version": "0.17.19", 335 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", 336 | "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", 337 | "cpu": [ 338 | "arm64" 339 | ], 340 | "dev": true, 341 | "optional": true, 342 | "os": [ 343 | "win32" 344 | ], 345 | "engines": { 346 | "node": ">=12" 347 | } 348 | }, 349 | "node_modules/@esbuild/win32-ia32": { 350 | "version": "0.17.19", 351 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", 352 | "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", 353 | "cpu": [ 354 | "ia32" 355 | ], 356 | "dev": true, 357 | "optional": true, 358 | "os": [ 359 | "win32" 360 | ], 361 | "engines": { 362 | "node": ">=12" 363 | } 364 | }, 365 | "node_modules/@esbuild/win32-x64": { 366 | "version": "0.17.19", 367 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", 368 | "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", 369 | "cpu": [ 370 | "x64" 371 | ], 372 | "dev": true, 373 | "optional": true, 374 | "os": [ 375 | "win32" 376 | ], 377 | "engines": { 378 | "node": ">=12" 379 | } 380 | }, 381 | "node_modules/@vitejs/plugin-vue": { 382 | "version": "4.0.0", 383 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.0.0.tgz", 384 | "integrity": "sha512-e0X4jErIxAB5oLtDqbHvHpJe/uWNkdpYV83AOG2xo2tEVSzCzewgJMtREZM30wXnM5ls90hxiOtAuVU6H5JgbA==", 385 | "dev": true, 386 | "engines": { 387 | "node": "^14.18.0 || >=16.0.0" 388 | }, 389 | "peerDependencies": { 390 | "vite": "^4.0.0", 391 | "vue": "^3.2.25" 392 | } 393 | }, 394 | "node_modules/@vue/compiler-core": { 395 | "version": "3.2.47", 396 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.47.tgz", 397 | "integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==", 398 | "dependencies": { 399 | "@babel/parser": "^7.16.4", 400 | "@vue/shared": "3.2.47", 401 | "estree-walker": "^2.0.2", 402 | "source-map": "^0.6.1" 403 | } 404 | }, 405 | "node_modules/@vue/compiler-dom": { 406 | "version": "3.2.47", 407 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz", 408 | "integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==", 409 | "dependencies": { 410 | "@vue/compiler-core": "3.2.47", 411 | "@vue/shared": "3.2.47" 412 | } 413 | }, 414 | "node_modules/@vue/compiler-sfc": { 415 | "version": "3.2.47", 416 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz", 417 | "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==", 418 | "dependencies": { 419 | "@babel/parser": "^7.16.4", 420 | "@vue/compiler-core": "3.2.47", 421 | "@vue/compiler-dom": "3.2.47", 422 | "@vue/compiler-ssr": "3.2.47", 423 | "@vue/reactivity-transform": "3.2.47", 424 | "@vue/shared": "3.2.47", 425 | "estree-walker": "^2.0.2", 426 | "magic-string": "^0.25.7", 427 | "postcss": "^8.1.10", 428 | "source-map": "^0.6.1" 429 | } 430 | }, 431 | "node_modules/@vue/compiler-ssr": { 432 | "version": "3.2.47", 433 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz", 434 | "integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==", 435 | "dependencies": { 436 | "@vue/compiler-dom": "3.2.47", 437 | "@vue/shared": "3.2.47" 438 | } 439 | }, 440 | "node_modules/@vue/reactivity": { 441 | "version": "3.2.47", 442 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.47.tgz", 443 | "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==", 444 | "dependencies": { 445 | "@vue/shared": "3.2.47" 446 | } 447 | }, 448 | "node_modules/@vue/reactivity-transform": { 449 | "version": "3.2.47", 450 | "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz", 451 | "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==", 452 | "dependencies": { 453 | "@babel/parser": "^7.16.4", 454 | "@vue/compiler-core": "3.2.47", 455 | "@vue/shared": "3.2.47", 456 | "estree-walker": "^2.0.2", 457 | "magic-string": "^0.25.7" 458 | } 459 | }, 460 | "node_modules/@vue/runtime-core": { 461 | "version": "3.2.47", 462 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.47.tgz", 463 | "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==", 464 | "dependencies": { 465 | "@vue/reactivity": "3.2.47", 466 | "@vue/shared": "3.2.47" 467 | } 468 | }, 469 | "node_modules/@vue/runtime-dom": { 470 | "version": "3.2.47", 471 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz", 472 | "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==", 473 | "dependencies": { 474 | "@vue/runtime-core": "3.2.47", 475 | "@vue/shared": "3.2.47", 476 | "csstype": "^2.6.8" 477 | } 478 | }, 479 | "node_modules/@vue/server-renderer": { 480 | "version": "3.2.47", 481 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.47.tgz", 482 | "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==", 483 | "dependencies": { 484 | "@vue/compiler-ssr": "3.2.47", 485 | "@vue/shared": "3.2.47" 486 | }, 487 | "peerDependencies": { 488 | "vue": "3.2.47" 489 | } 490 | }, 491 | "node_modules/@vue/shared": { 492 | "version": "3.2.47", 493 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.47.tgz", 494 | "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==" 495 | }, 496 | "node_modules/csstype": { 497 | "version": "2.6.21", 498 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", 499 | "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" 500 | }, 501 | "node_modules/esbuild": { 502 | "version": "0.17.19", 503 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", 504 | "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", 505 | "dev": true, 506 | "hasInstallScript": true, 507 | "bin": { 508 | "esbuild": "bin/esbuild" 509 | }, 510 | "engines": { 511 | "node": ">=12" 512 | }, 513 | "optionalDependencies": { 514 | "@esbuild/android-arm": "0.17.19", 515 | "@esbuild/android-arm64": "0.17.19", 516 | "@esbuild/android-x64": "0.17.19", 517 | "@esbuild/darwin-arm64": "0.17.19", 518 | "@esbuild/darwin-x64": "0.17.19", 519 | "@esbuild/freebsd-arm64": "0.17.19", 520 | "@esbuild/freebsd-x64": "0.17.19", 521 | "@esbuild/linux-arm": "0.17.19", 522 | "@esbuild/linux-arm64": "0.17.19", 523 | "@esbuild/linux-ia32": "0.17.19", 524 | "@esbuild/linux-loong64": "0.17.19", 525 | "@esbuild/linux-mips64el": "0.17.19", 526 | "@esbuild/linux-ppc64": "0.17.19", 527 | "@esbuild/linux-riscv64": "0.17.19", 528 | "@esbuild/linux-s390x": "0.17.19", 529 | "@esbuild/linux-x64": "0.17.19", 530 | "@esbuild/netbsd-x64": "0.17.19", 531 | "@esbuild/openbsd-x64": "0.17.19", 532 | "@esbuild/sunos-x64": "0.17.19", 533 | "@esbuild/win32-arm64": "0.17.19", 534 | "@esbuild/win32-ia32": "0.17.19", 535 | "@esbuild/win32-x64": "0.17.19" 536 | } 537 | }, 538 | "node_modules/estree-walker": { 539 | "version": "2.0.2", 540 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 541 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" 542 | }, 543 | "node_modules/fsevents": { 544 | "version": "2.3.2", 545 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 546 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 547 | "dev": true, 548 | "hasInstallScript": true, 549 | "optional": true, 550 | "os": [ 551 | "darwin" 552 | ], 553 | "engines": { 554 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 555 | } 556 | }, 557 | "node_modules/magic-string": { 558 | "version": "0.25.9", 559 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", 560 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", 561 | "dependencies": { 562 | "sourcemap-codec": "^1.4.8" 563 | } 564 | }, 565 | "node_modules/nanoid": { 566 | "version": "3.3.6", 567 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", 568 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", 569 | "funding": [ 570 | { 571 | "type": "github", 572 | "url": "https://github.com/sponsors/ai" 573 | } 574 | ], 575 | "bin": { 576 | "nanoid": "bin/nanoid.cjs" 577 | }, 578 | "engines": { 579 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 580 | } 581 | }, 582 | "node_modules/picocolors": { 583 | "version": "1.0.0", 584 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 585 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 586 | }, 587 | "node_modules/postcss": { 588 | "version": "8.4.24", 589 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", 590 | "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", 591 | "funding": [ 592 | { 593 | "type": "opencollective", 594 | "url": "https://opencollective.com/postcss/" 595 | }, 596 | { 597 | "type": "tidelift", 598 | "url": "https://tidelift.com/funding/github/npm/postcss" 599 | }, 600 | { 601 | "type": "github", 602 | "url": "https://github.com/sponsors/ai" 603 | } 604 | ], 605 | "dependencies": { 606 | "nanoid": "^3.3.6", 607 | "picocolors": "^1.0.0", 608 | "source-map-js": "^1.0.2" 609 | }, 610 | "engines": { 611 | "node": "^10 || ^12 || >=14" 612 | } 613 | }, 614 | "node_modules/rollup": { 615 | "version": "3.25.2", 616 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.2.tgz", 617 | "integrity": "sha512-VLnkxZMDr3jpxgtmS8pQZ0UvhslmF4ADq/9w4erkctbgjCqLW9oa89fJuXEs4ZmgyoF7Dm8rMDKSS5b5u2hHUg==", 618 | "dev": true, 619 | "bin": { 620 | "rollup": "dist/bin/rollup" 621 | }, 622 | "engines": { 623 | "node": ">=14.18.0", 624 | "npm": ">=8.0.0" 625 | }, 626 | "optionalDependencies": { 627 | "fsevents": "~2.3.2" 628 | } 629 | }, 630 | "node_modules/source-map": { 631 | "version": "0.6.1", 632 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 633 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 634 | "engines": { 635 | "node": ">=0.10.0" 636 | } 637 | }, 638 | "node_modules/source-map-js": { 639 | "version": "1.0.2", 640 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 641 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 642 | "engines": { 643 | "node": ">=0.10.0" 644 | } 645 | }, 646 | "node_modules/sourcemap-codec": { 647 | "version": "1.4.8", 648 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 649 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 650 | "deprecated": "Please use @jridgewell/sourcemap-codec instead" 651 | }, 652 | "node_modules/vite": { 653 | "version": "4.3.9", 654 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", 655 | "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", 656 | "dev": true, 657 | "dependencies": { 658 | "esbuild": "^0.17.5", 659 | "postcss": "^8.4.23", 660 | "rollup": "^3.21.0" 661 | }, 662 | "bin": { 663 | "vite": "bin/vite.js" 664 | }, 665 | "engines": { 666 | "node": "^14.18.0 || >=16.0.0" 667 | }, 668 | "optionalDependencies": { 669 | "fsevents": "~2.3.2" 670 | }, 671 | "peerDependencies": { 672 | "@types/node": ">= 14", 673 | "less": "*", 674 | "sass": "*", 675 | "stylus": "*", 676 | "sugarss": "*", 677 | "terser": "^5.4.0" 678 | }, 679 | "peerDependenciesMeta": { 680 | "@types/node": { 681 | "optional": true 682 | }, 683 | "less": { 684 | "optional": true 685 | }, 686 | "sass": { 687 | "optional": true 688 | }, 689 | "stylus": { 690 | "optional": true 691 | }, 692 | "sugarss": { 693 | "optional": true 694 | }, 695 | "terser": { 696 | "optional": true 697 | } 698 | } 699 | }, 700 | "node_modules/vue": { 701 | "version": "3.2.47", 702 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.47.tgz", 703 | "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==", 704 | "dependencies": { 705 | "@vue/compiler-dom": "3.2.47", 706 | "@vue/compiler-sfc": "3.2.47", 707 | "@vue/runtime-dom": "3.2.47", 708 | "@vue/server-renderer": "3.2.47", 709 | "@vue/shared": "3.2.47" 710 | } 711 | } 712 | }, 713 | "dependencies": { 714 | "@babel/parser": { 715 | "version": "7.20.15", 716 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz", 717 | "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==" 718 | }, 719 | "@esbuild/android-arm": { 720 | "version": "0.17.19", 721 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", 722 | "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", 723 | "dev": true, 724 | "optional": true 725 | }, 726 | "@esbuild/android-arm64": { 727 | "version": "0.17.19", 728 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", 729 | "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", 730 | "dev": true, 731 | "optional": true 732 | }, 733 | "@esbuild/android-x64": { 734 | "version": "0.17.19", 735 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", 736 | "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", 737 | "dev": true, 738 | "optional": true 739 | }, 740 | "@esbuild/darwin-arm64": { 741 | "version": "0.17.19", 742 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", 743 | "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", 744 | "dev": true, 745 | "optional": true 746 | }, 747 | "@esbuild/darwin-x64": { 748 | "version": "0.17.19", 749 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", 750 | "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", 751 | "dev": true, 752 | "optional": true 753 | }, 754 | "@esbuild/freebsd-arm64": { 755 | "version": "0.17.19", 756 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", 757 | "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", 758 | "dev": true, 759 | "optional": true 760 | }, 761 | "@esbuild/freebsd-x64": { 762 | "version": "0.17.19", 763 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", 764 | "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", 765 | "dev": true, 766 | "optional": true 767 | }, 768 | "@esbuild/linux-arm": { 769 | "version": "0.17.19", 770 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", 771 | "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", 772 | "dev": true, 773 | "optional": true 774 | }, 775 | "@esbuild/linux-arm64": { 776 | "version": "0.17.19", 777 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", 778 | "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", 779 | "dev": true, 780 | "optional": true 781 | }, 782 | "@esbuild/linux-ia32": { 783 | "version": "0.17.19", 784 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", 785 | "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", 786 | "dev": true, 787 | "optional": true 788 | }, 789 | "@esbuild/linux-loong64": { 790 | "version": "0.17.19", 791 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", 792 | "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", 793 | "dev": true, 794 | "optional": true 795 | }, 796 | "@esbuild/linux-mips64el": { 797 | "version": "0.17.19", 798 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", 799 | "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", 800 | "dev": true, 801 | "optional": true 802 | }, 803 | "@esbuild/linux-ppc64": { 804 | "version": "0.17.19", 805 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", 806 | "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", 807 | "dev": true, 808 | "optional": true 809 | }, 810 | "@esbuild/linux-riscv64": { 811 | "version": "0.17.19", 812 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", 813 | "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", 814 | "dev": true, 815 | "optional": true 816 | }, 817 | "@esbuild/linux-s390x": { 818 | "version": "0.17.19", 819 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", 820 | "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", 821 | "dev": true, 822 | "optional": true 823 | }, 824 | "@esbuild/linux-x64": { 825 | "version": "0.17.19", 826 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", 827 | "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", 828 | "dev": true, 829 | "optional": true 830 | }, 831 | "@esbuild/netbsd-x64": { 832 | "version": "0.17.19", 833 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", 834 | "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", 835 | "dev": true, 836 | "optional": true 837 | }, 838 | "@esbuild/openbsd-x64": { 839 | "version": "0.17.19", 840 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", 841 | "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", 842 | "dev": true, 843 | "optional": true 844 | }, 845 | "@esbuild/sunos-x64": { 846 | "version": "0.17.19", 847 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", 848 | "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", 849 | "dev": true, 850 | "optional": true 851 | }, 852 | "@esbuild/win32-arm64": { 853 | "version": "0.17.19", 854 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", 855 | "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", 856 | "dev": true, 857 | "optional": true 858 | }, 859 | "@esbuild/win32-ia32": { 860 | "version": "0.17.19", 861 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", 862 | "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", 863 | "dev": true, 864 | "optional": true 865 | }, 866 | "@esbuild/win32-x64": { 867 | "version": "0.17.19", 868 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", 869 | "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", 870 | "dev": true, 871 | "optional": true 872 | }, 873 | "@vitejs/plugin-vue": { 874 | "version": "4.0.0", 875 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.0.0.tgz", 876 | "integrity": "sha512-e0X4jErIxAB5oLtDqbHvHpJe/uWNkdpYV83AOG2xo2tEVSzCzewgJMtREZM30wXnM5ls90hxiOtAuVU6H5JgbA==", 877 | "dev": true, 878 | "requires": {} 879 | }, 880 | "@vue/compiler-core": { 881 | "version": "3.2.47", 882 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.47.tgz", 883 | "integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==", 884 | "requires": { 885 | "@babel/parser": "^7.16.4", 886 | "@vue/shared": "3.2.47", 887 | "estree-walker": "^2.0.2", 888 | "source-map": "^0.6.1" 889 | } 890 | }, 891 | "@vue/compiler-dom": { 892 | "version": "3.2.47", 893 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz", 894 | "integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==", 895 | "requires": { 896 | "@vue/compiler-core": "3.2.47", 897 | "@vue/shared": "3.2.47" 898 | } 899 | }, 900 | "@vue/compiler-sfc": { 901 | "version": "3.2.47", 902 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz", 903 | "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==", 904 | "requires": { 905 | "@babel/parser": "^7.16.4", 906 | "@vue/compiler-core": "3.2.47", 907 | "@vue/compiler-dom": "3.2.47", 908 | "@vue/compiler-ssr": "3.2.47", 909 | "@vue/reactivity-transform": "3.2.47", 910 | "@vue/shared": "3.2.47", 911 | "estree-walker": "^2.0.2", 912 | "magic-string": "^0.25.7", 913 | "postcss": "^8.1.10", 914 | "source-map": "^0.6.1" 915 | } 916 | }, 917 | "@vue/compiler-ssr": { 918 | "version": "3.2.47", 919 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz", 920 | "integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==", 921 | "requires": { 922 | "@vue/compiler-dom": "3.2.47", 923 | "@vue/shared": "3.2.47" 924 | } 925 | }, 926 | "@vue/reactivity": { 927 | "version": "3.2.47", 928 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.47.tgz", 929 | "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==", 930 | "requires": { 931 | "@vue/shared": "3.2.47" 932 | } 933 | }, 934 | "@vue/reactivity-transform": { 935 | "version": "3.2.47", 936 | "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz", 937 | "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==", 938 | "requires": { 939 | "@babel/parser": "^7.16.4", 940 | "@vue/compiler-core": "3.2.47", 941 | "@vue/shared": "3.2.47", 942 | "estree-walker": "^2.0.2", 943 | "magic-string": "^0.25.7" 944 | } 945 | }, 946 | "@vue/runtime-core": { 947 | "version": "3.2.47", 948 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.47.tgz", 949 | "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==", 950 | "requires": { 951 | "@vue/reactivity": "3.2.47", 952 | "@vue/shared": "3.2.47" 953 | } 954 | }, 955 | "@vue/runtime-dom": { 956 | "version": "3.2.47", 957 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz", 958 | "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==", 959 | "requires": { 960 | "@vue/runtime-core": "3.2.47", 961 | "@vue/shared": "3.2.47", 962 | "csstype": "^2.6.8" 963 | } 964 | }, 965 | "@vue/server-renderer": { 966 | "version": "3.2.47", 967 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.47.tgz", 968 | "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==", 969 | "requires": { 970 | "@vue/compiler-ssr": "3.2.47", 971 | "@vue/shared": "3.2.47" 972 | } 973 | }, 974 | "@vue/shared": { 975 | "version": "3.2.47", 976 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.47.tgz", 977 | "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==" 978 | }, 979 | "csstype": { 980 | "version": "2.6.21", 981 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", 982 | "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" 983 | }, 984 | "esbuild": { 985 | "version": "0.17.19", 986 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", 987 | "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", 988 | "dev": true, 989 | "requires": { 990 | "@esbuild/android-arm": "0.17.19", 991 | "@esbuild/android-arm64": "0.17.19", 992 | "@esbuild/android-x64": "0.17.19", 993 | "@esbuild/darwin-arm64": "0.17.19", 994 | "@esbuild/darwin-x64": "0.17.19", 995 | "@esbuild/freebsd-arm64": "0.17.19", 996 | "@esbuild/freebsd-x64": "0.17.19", 997 | "@esbuild/linux-arm": "0.17.19", 998 | "@esbuild/linux-arm64": "0.17.19", 999 | "@esbuild/linux-ia32": "0.17.19", 1000 | "@esbuild/linux-loong64": "0.17.19", 1001 | "@esbuild/linux-mips64el": "0.17.19", 1002 | "@esbuild/linux-ppc64": "0.17.19", 1003 | "@esbuild/linux-riscv64": "0.17.19", 1004 | "@esbuild/linux-s390x": "0.17.19", 1005 | "@esbuild/linux-x64": "0.17.19", 1006 | "@esbuild/netbsd-x64": "0.17.19", 1007 | "@esbuild/openbsd-x64": "0.17.19", 1008 | "@esbuild/sunos-x64": "0.17.19", 1009 | "@esbuild/win32-arm64": "0.17.19", 1010 | "@esbuild/win32-ia32": "0.17.19", 1011 | "@esbuild/win32-x64": "0.17.19" 1012 | } 1013 | }, 1014 | "estree-walker": { 1015 | "version": "2.0.2", 1016 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 1017 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" 1018 | }, 1019 | "fsevents": { 1020 | "version": "2.3.2", 1021 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1022 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1023 | "dev": true, 1024 | "optional": true 1025 | }, 1026 | "magic-string": { 1027 | "version": "0.25.9", 1028 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", 1029 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", 1030 | "requires": { 1031 | "sourcemap-codec": "^1.4.8" 1032 | } 1033 | }, 1034 | "nanoid": { 1035 | "version": "3.3.6", 1036 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", 1037 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" 1038 | }, 1039 | "picocolors": { 1040 | "version": "1.0.0", 1041 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1042 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 1043 | }, 1044 | "postcss": { 1045 | "version": "8.4.24", 1046 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", 1047 | "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", 1048 | "requires": { 1049 | "nanoid": "^3.3.6", 1050 | "picocolors": "^1.0.0", 1051 | "source-map-js": "^1.0.2" 1052 | } 1053 | }, 1054 | "rollup": { 1055 | "version": "3.25.2", 1056 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.2.tgz", 1057 | "integrity": "sha512-VLnkxZMDr3jpxgtmS8pQZ0UvhslmF4ADq/9w4erkctbgjCqLW9oa89fJuXEs4ZmgyoF7Dm8rMDKSS5b5u2hHUg==", 1058 | "dev": true, 1059 | "requires": { 1060 | "fsevents": "~2.3.2" 1061 | } 1062 | }, 1063 | "source-map": { 1064 | "version": "0.6.1", 1065 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1066 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 1067 | }, 1068 | "source-map-js": { 1069 | "version": "1.0.2", 1070 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1071 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" 1072 | }, 1073 | "sourcemap-codec": { 1074 | "version": "1.4.8", 1075 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 1076 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" 1077 | }, 1078 | "vite": { 1079 | "version": "4.3.9", 1080 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", 1081 | "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", 1082 | "dev": true, 1083 | "requires": { 1084 | "esbuild": "^0.17.5", 1085 | "fsevents": "~2.3.2", 1086 | "postcss": "^8.4.23", 1087 | "rollup": "^3.21.0" 1088 | } 1089 | }, 1090 | "vue": { 1091 | "version": "3.2.47", 1092 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.47.tgz", 1093 | "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==", 1094 | "requires": { 1095 | "@vue/compiler-dom": "3.2.47", 1096 | "@vue/compiler-sfc": "3.2.47", 1097 | "@vue/runtime-dom": "3.2.47", 1098 | "@vue/server-renderer": "3.2.47", 1099 | "@vue/shared": "3.2.47" 1100 | } 1101 | } 1102 | } 1103 | } 1104 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "custom-slider-vue", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "vite", 7 | "build": "vite build", 8 | "preview": "vite preview" 9 | }, 10 | "dependencies": { 11 | "vue": "^3.2.45" 12 | }, 13 | "devDependencies": { 14 | "@vitejs/plugin-vue": "^4.0.0", 15 | "vite": "^4.0.0" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miracleonyenma/custom-vue-range-slider/e3d190833661cd8f27f0e0cb55af472b0400a880/public/favicon.ico -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 2 | 13 | 38 | -------------------------------------------------------------------------------- /src/assets/base.css: -------------------------------------------------------------------------------- 1 | /* color palette from */ 2 | :root { 3 | --vt-c-white: #ffffff; 4 | --vt-c-white-soft: #f8f8f8; 5 | --vt-c-white-mute: #f2f2f2; 6 | 7 | --vt-c-black: #181818; 8 | --vt-c-black-soft: #222222; 9 | --vt-c-black-mute: #282828; 10 | 11 | --vt-c-indigo: #2c3e50; 12 | 13 | --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); 14 | --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); 15 | --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); 16 | --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); 17 | 18 | --vt-c-text-light-1: var(--vt-c-indigo); 19 | --vt-c-text-light-2: rgba(60, 60, 60, 0.66); 20 | --vt-c-text-dark-1: var(--vt-c-white); 21 | --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); 22 | } 23 | 24 | /* semantic color variables for this project */ 25 | :root { 26 | --color-background: var(--vt-c-white); 27 | --color-background-soft: var(--vt-c-white-soft); 28 | --color-background-mute: var(--vt-c-white-mute); 29 | 30 | --color-border: var(--vt-c-divider-light-2); 31 | --color-border-hover: var(--vt-c-divider-light-1); 32 | 33 | --color-heading: var(--vt-c-text-light-1); 34 | --color-text: var(--vt-c-text-light-1); 35 | 36 | --section-gap: 160px; 37 | } 38 | 39 | @media (prefers-color-scheme: dark) { 40 | :root { 41 | --color-background: var(--vt-c-black); 42 | --color-background-soft: var(--vt-c-black-soft); 43 | --color-background-mute: var(--vt-c-black-mute); 44 | 45 | --color-border: var(--vt-c-divider-dark-2); 46 | --color-border-hover: var(--vt-c-divider-dark-1); 47 | 48 | --color-heading: var(--vt-c-text-dark-1); 49 | --color-text: var(--vt-c-text-dark-2); 50 | } 51 | } 52 | 53 | *, 54 | *::before, 55 | *::after { 56 | box-sizing: border-box; 57 | margin: 0; 58 | position: relative; 59 | font-weight: normal; 60 | } 61 | 62 | body { 63 | min-height: 100vh; 64 | color: var(--color-text); 65 | background: var(--color-background); 66 | transition: color 0.5s, background-color 0.5s; 67 | line-height: 1.6; 68 | font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, 69 | Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; 70 | font-size: 15px; 71 | text-rendering: optimizeLegibility; 72 | -webkit-font-smoothing: antialiased; 73 | -moz-osx-font-smoothing: grayscale; 74 | } 75 | -------------------------------------------------------------------------------- /src/assets/main.css: -------------------------------------------------------------------------------- 1 | @import "./base.css"; 2 | 3 | #app { 4 | max-width: 1280px; 5 | margin: 0 auto; 6 | padding: 2rem; 7 | 8 | font-weight: normal; 9 | } 10 | 11 | a, 12 | .green { 13 | text-decoration: none; 14 | color: #00bd7e; 15 | transition: 0.4s; 16 | } 17 | 18 | @media (hover: hover) { 19 | a:hover { 20 | background-color: hsla(160, 100%, 37%, 0.2); 21 | } 22 | } 23 | 24 | .slider-cont { 25 | width: 300px; 26 | } 27 | 28 | .custom-slider { 29 | --trackHeight: 0.35rem; 30 | --thumbRadius: 1rem; 31 | } 32 | 33 | /* style the input element with type "range" */ 34 | .custom-slider input[type="range"] { 35 | position: relative; 36 | appearance: none; 37 | background: none; 38 | border-radius: 999px; 39 | z-index: 0; 40 | height: 100%; 41 | pointer-events: none; 42 | } 43 | 44 | /* ::before element to replace the slider track */ 45 | .custom-slider input[type="range"]::before { 46 | content: ""; 47 | display: block; 48 | position: absolute; 49 | width: var(--ProgressPercent, 100%); 50 | height: 100%; 51 | background: #00865a; 52 | border-radius: 999px; 53 | } 54 | 55 | /* `::-webkit-slider-runnable-track` targets the track (background) of a range slider in chrome and safari browsers. */ 56 | .custom-slider input[type="range"]::-webkit-slider-runnable-track { 57 | appearance: none; 58 | background: #005a3c; 59 | height: var(--trackHeight); 60 | border-radius: 999px; 61 | } 62 | 63 | .custom-slider input[type="range"]::-webkit-slider-thumb { 64 | position: relative; 65 | width: var(--thumbRadius); 66 | height: var(--thumbRadius); 67 | margin-top: calc((var(--trackHeight) - var(--thumbRadius)) / 2); 68 | background: #005a3c; 69 | border: 1px solid #00865a; 70 | border-radius: 999px; 71 | pointer-events: all; 72 | appearance: none; 73 | z-index: 1; 74 | } 75 | 76 | /* `::-moz-range-track` targets the track (background) of a range slider in Mozilla Firefox. */ 77 | .custom-slider.default input[type="range"]::-moz-range-track { 78 | appearance: none; 79 | background: #005a3c; 80 | height: var(--trackHeight); 81 | border-radius: 999px; 82 | } 83 | 84 | .custom-slider input[type="range"]::-moz-range-thumb { 85 | position: relative; 86 | box-sizing: border-box; 87 | width: var(--thumbRadius); 88 | height: var(--thumbRadius); 89 | margin-top: calc((var(--trackHeight) - var(--thumbRadius)) / 2); 90 | background: #005a3c; 91 | border: 1px solid #00865a; 92 | border-radius: 999px; 93 | pointer-events: all; 94 | appearance: none; 95 | z-index: 1; 96 | } 97 | 98 | .custom-slider.minmax { 99 | position: relative; 100 | height: var(--trackHeight); 101 | background: #005a3c; 102 | border-radius: 999px; 103 | margin: 0.5rem 0; 104 | --progressLeft: 0%; 105 | --progressRight: 0%; 106 | } 107 | 108 | .custom-slider .minmax-indicator { 109 | position: absolute; 110 | height: 100%; 111 | pointer-events: none; 112 | left: var(--thumbRadius); 113 | right: var(--thumbRadius); 114 | } 115 | 116 | .custom-slider .minmax-indicator::before { 117 | content: ""; 118 | position: absolute; 119 | background: #00865a; 120 | height: 100%; 121 | left: var(--progressLeft); 122 | right: var(--progressRight); 123 | } 124 | 125 | .custom-slider.minmax input[type="range"] { 126 | position: absolute; 127 | width: calc(100% - var(--thumbRadius)); 128 | } 129 | 130 | .custom-slider.minmax input[type="range"][name="max"] { 131 | left: var(--thumbRadius); 132 | } 133 | 134 | .custom-slider.minmax input[type="range"]::-webkit-slider-runnable-track { 135 | background: none; 136 | } 137 | 138 | .custom-slider.minmax input[type="range"]::before { 139 | display: none; 140 | } 141 | 142 | .minmax-inputs { 143 | display: flex; 144 | justify-content: space-between; 145 | } 146 | 147 | .minmax-inputs input { 148 | width: 50px; 149 | } 150 | -------------------------------------------------------------------------------- /src/components/CustomMinMaxSlider.vue: -------------------------------------------------------------------------------- 1 | 87 | 118 | -------------------------------------------------------------------------------- /src/components/CustomSlider.vue: -------------------------------------------------------------------------------- 1 | 2 | 63 | 86 | 88 | -------------------------------------------------------------------------------- /src/composables/custom-slider.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miracleonyenma/custom-vue-range-slider/e3d190833661cd8f27f0e0cb55af472b0400a880/src/composables/custom-slider.js -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import App from './App.vue' 3 | 4 | import './assets/main.css' 5 | 6 | createApp(App).mount('#app') 7 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { fileURLToPath, URL } from 'node:url' 2 | 3 | import { defineConfig } from 'vite' 4 | import vue from '@vitejs/plugin-vue' 5 | 6 | // https://vitejs.dev/config/ 7 | export default defineConfig({ 8 | plugins: [vue()], 9 | resolve: { 10 | alias: { 11 | '@': fileURLToPath(new URL('./src', import.meta.url)) 12 | } 13 | } 14 | }) 15 | --------------------------------------------------------------------------------