[READ-ONLY] Mirror of https://github.com/probablykasper/date-picker-svelte. Date and time picker for Svelte date-picker-svelte.kasper.space
calendar date date-picker date-time-picker datepicker package svelte time
0

Configure Feed

Select the types of activity you want to include in your feed.

Switch indentation to tabs

Kasper (Nov 3, 2023, 8:02 AM +0100) e575c779 2edaf75b

+5904 -5903
+29 -29
.eslintrc.cjs
··· 1 1 module.exports = { 2 - root: true, 3 - extends: [ 4 - 'eslint:recommended', 5 - 'plugin:@typescript-eslint/recommended', 6 - 'plugin:svelte/recommended', 7 - 'prettier', 8 - ], 9 - parser: '@typescript-eslint/parser', 10 - plugins: ['@typescript-eslint'], 11 - ignorePatterns: ['*.cjs'], 12 - parserOptions: { 13 - sourceType: 'module', 14 - ecmaVersion: 2020, 15 - extraFileExtensions: ['.svelte'], 16 - }, 17 - env: { 18 - browser: true, 19 - es2017: true, 20 - node: true, 21 - }, 22 - overrides: [ 23 - { 24 - files: ['*.svelte'], 25 - parser: 'svelte-eslint-parser', 26 - parserOptions: { 27 - parser: '@typescript-eslint/parser', 28 - }, 29 - }, 30 - ], 2 + root: true, 3 + extends: [ 4 + 'eslint:recommended', 5 + 'plugin:@typescript-eslint/recommended', 6 + 'plugin:svelte/recommended', 7 + 'prettier', 8 + ], 9 + parser: '@typescript-eslint/parser', 10 + plugins: ['@typescript-eslint'], 11 + ignorePatterns: ['*.cjs'], 12 + parserOptions: { 13 + sourceType: 'module', 14 + ecmaVersion: 2020, 15 + extraFileExtensions: ['.svelte'], 16 + }, 17 + env: { 18 + browser: true, 19 + es2017: true, 20 + node: true, 21 + }, 22 + overrides: [ 23 + { 24 + files: ['*.svelte'], 25 + parser: 'svelte-eslint-parser', 26 + parserOptions: { 27 + parser: '@typescript-eslint/parser', 28 + }, 29 + }, 30 + ], 31 31 }
+11 -11
README.md
··· 28 28 29 29 ```svelte 30 30 <script> 31 - import { DateInput } from 'date-picker-svelte' 32 - let date = new Date() 31 + import { DateInput } from 'date-picker-svelte' 32 + let date = new Date() 33 33 </script> 34 34 35 35 <DateInput bind:value={date} /> ··· 57 57 58 58 1. Update `CHANGELOG.md` 59 59 2. Check for errors 60 - ``` 61 - npm run lint 62 - ``` 60 + ``` 61 + npm run lint 62 + ``` 63 63 3. Bump the version number 64 - ``` 65 - npm version --no-git-tag <version> 66 - ``` 64 + ``` 65 + npm version --no-git-tag <version> 66 + ``` 67 67 4. Publish 68 - ``` 69 - npm publish 70 - ``` 68 + ``` 69 + npm publish 70 + ``` 71 71 5. Commit with a tag in format "v#.#.#" 72 72 6. Create GitHub release with release notes
+3963 -3963
package-lock.json
··· 1 1 { 2 - "name": "date-picker-svelte", 3 - "version": "2.8.0", 4 - "lockfileVersion": 3, 5 - "requires": true, 6 - "packages": { 7 - "": { 8 - "name": "date-picker-svelte", 9 - "version": "2.8.0", 10 - "license": "MIT", 11 - "devDependencies": { 12 - "@sveltejs/adapter-static": "^2.0.3", 13 - "@sveltejs/kit": "^1.25.0", 14 - "@sveltejs/package": "^2.2.2", 15 - "@typescript-eslint/eslint-plugin": "^6.7.2", 16 - "@typescript-eslint/parser": "^6.7.2", 17 - "@vitest/coverage-v8": "^0.34.5", 18 - "date-fns": "^2.30.0", 19 - "eslint": "^8.50.0", 20 - "eslint-config-prettier": "^8.10.0", 21 - "eslint-plugin-svelte": "^2.33.2", 22 - "mdsvex": "^0.11.0", 23 - "prettier": "^2.8.8", 24 - "prettier-plugin-svelte": "^2.10.1", 25 - "sass": "^1.68.0", 26 - "svelte": "^4.2.1", 27 - "svelte-check": "^3.5.2", 28 - "typescript": "^5.2.2", 29 - "vite": "^4.4.9", 30 - "vitest": "^0.34.5" 31 - }, 32 - "peerDependencies": { 33 - "svelte": "^3.24.0 || ^4.0.0" 34 - } 35 - }, 36 - "node_modules/@aashutoshrathi/word-wrap": { 37 - "version": "1.2.6", 38 - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", 39 - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", 40 - "dev": true, 41 - "engines": { 42 - "node": ">=0.10.0" 43 - } 44 - }, 45 - "node_modules/@ampproject/remapping": { 46 - "version": "2.2.1", 47 - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", 48 - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", 49 - "dev": true, 50 - "dependencies": { 51 - "@jridgewell/gen-mapping": "^0.3.0", 52 - "@jridgewell/trace-mapping": "^0.3.9" 53 - }, 54 - "engines": { 55 - "node": ">=6.0.0" 56 - } 57 - }, 58 - "node_modules/@babel/runtime": { 59 - "version": "7.22.15", 60 - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", 61 - "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", 62 - "dev": true, 63 - "dependencies": { 64 - "regenerator-runtime": "^0.14.0" 65 - }, 66 - "engines": { 67 - "node": ">=6.9.0" 68 - } 69 - }, 70 - "node_modules/@bcoe/v8-coverage": { 71 - "version": "0.2.3", 72 - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", 73 - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", 74 - "dev": true 75 - }, 76 - "node_modules/@esbuild/android-arm": { 77 - "version": "0.18.20", 78 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", 79 - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", 80 - "cpu": [ 81 - "arm" 82 - ], 83 - "dev": true, 84 - "optional": true, 85 - "os": [ 86 - "android" 87 - ], 88 - "engines": { 89 - "node": ">=12" 90 - } 91 - }, 92 - "node_modules/@esbuild/android-arm64": { 93 - "version": "0.18.20", 94 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", 95 - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", 96 - "cpu": [ 97 - "arm64" 98 - ], 99 - "dev": true, 100 - "optional": true, 101 - "os": [ 102 - "android" 103 - ], 104 - "engines": { 105 - "node": ">=12" 106 - } 107 - }, 108 - "node_modules/@esbuild/android-x64": { 109 - "version": "0.18.20", 110 - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", 111 - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", 112 - "cpu": [ 113 - "x64" 114 - ], 115 - "dev": true, 116 - "optional": true, 117 - "os": [ 118 - "android" 119 - ], 120 - "engines": { 121 - "node": ">=12" 122 - } 123 - }, 124 - "node_modules/@esbuild/darwin-arm64": { 125 - "version": "0.18.20", 126 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", 127 - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", 128 - "cpu": [ 129 - "arm64" 130 - ], 131 - "dev": true, 132 - "optional": true, 133 - "os": [ 134 - "darwin" 135 - ], 136 - "engines": { 137 - "node": ">=12" 138 - } 139 - }, 140 - "node_modules/@esbuild/darwin-x64": { 141 - "version": "0.18.20", 142 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", 143 - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", 144 - "cpu": [ 145 - "x64" 146 - ], 147 - "dev": true, 148 - "optional": true, 149 - "os": [ 150 - "darwin" 151 - ], 152 - "engines": { 153 - "node": ">=12" 154 - } 155 - }, 156 - "node_modules/@esbuild/freebsd-arm64": { 157 - "version": "0.18.20", 158 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", 159 - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", 160 - "cpu": [ 161 - "arm64" 162 - ], 163 - "dev": true, 164 - "optional": true, 165 - "os": [ 166 - "freebsd" 167 - ], 168 - "engines": { 169 - "node": ">=12" 170 - } 171 - }, 172 - "node_modules/@esbuild/freebsd-x64": { 173 - "version": "0.18.20", 174 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", 175 - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", 176 - "cpu": [ 177 - "x64" 178 - ], 179 - "dev": true, 180 - "optional": true, 181 - "os": [ 182 - "freebsd" 183 - ], 184 - "engines": { 185 - "node": ">=12" 186 - } 187 - }, 188 - "node_modules/@esbuild/linux-arm": { 189 - "version": "0.18.20", 190 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", 191 - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", 192 - "cpu": [ 193 - "arm" 194 - ], 195 - "dev": true, 196 - "optional": true, 197 - "os": [ 198 - "linux" 199 - ], 200 - "engines": { 201 - "node": ">=12" 202 - } 203 - }, 204 - "node_modules/@esbuild/linux-arm64": { 205 - "version": "0.18.20", 206 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", 207 - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", 208 - "cpu": [ 209 - "arm64" 210 - ], 211 - "dev": true, 212 - "optional": true, 213 - "os": [ 214 - "linux" 215 - ], 216 - "engines": { 217 - "node": ">=12" 218 - } 219 - }, 220 - "node_modules/@esbuild/linux-ia32": { 221 - "version": "0.18.20", 222 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", 223 - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", 224 - "cpu": [ 225 - "ia32" 226 - ], 227 - "dev": true, 228 - "optional": true, 229 - "os": [ 230 - "linux" 231 - ], 232 - "engines": { 233 - "node": ">=12" 234 - } 235 - }, 236 - "node_modules/@esbuild/linux-loong64": { 237 - "version": "0.18.20", 238 - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", 239 - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", 240 - "cpu": [ 241 - "loong64" 242 - ], 243 - "dev": true, 244 - "optional": true, 245 - "os": [ 246 - "linux" 247 - ], 248 - "engines": { 249 - "node": ">=12" 250 - } 251 - }, 252 - "node_modules/@esbuild/linux-mips64el": { 253 - "version": "0.18.20", 254 - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", 255 - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", 256 - "cpu": [ 257 - "mips64el" 258 - ], 259 - "dev": true, 260 - "optional": true, 261 - "os": [ 262 - "linux" 263 - ], 264 - "engines": { 265 - "node": ">=12" 266 - } 267 - }, 268 - "node_modules/@esbuild/linux-ppc64": { 269 - "version": "0.18.20", 270 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", 271 - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", 272 - "cpu": [ 273 - "ppc64" 274 - ], 275 - "dev": true, 276 - "optional": true, 277 - "os": [ 278 - "linux" 279 - ], 280 - "engines": { 281 - "node": ">=12" 282 - } 283 - }, 284 - "node_modules/@esbuild/linux-riscv64": { 285 - "version": "0.18.20", 286 - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", 287 - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", 288 - "cpu": [ 289 - "riscv64" 290 - ], 291 - "dev": true, 292 - "optional": true, 293 - "os": [ 294 - "linux" 295 - ], 296 - "engines": { 297 - "node": ">=12" 298 - } 299 - }, 300 - "node_modules/@esbuild/linux-s390x": { 301 - "version": "0.18.20", 302 - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", 303 - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", 304 - "cpu": [ 305 - "s390x" 306 - ], 307 - "dev": true, 308 - "optional": true, 309 - "os": [ 310 - "linux" 311 - ], 312 - "engines": { 313 - "node": ">=12" 314 - } 315 - }, 316 - "node_modules/@esbuild/linux-x64": { 317 - "version": "0.18.20", 318 - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", 319 - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", 320 - "cpu": [ 321 - "x64" 322 - ], 323 - "dev": true, 324 - "optional": true, 325 - "os": [ 326 - "linux" 327 - ], 328 - "engines": { 329 - "node": ">=12" 330 - } 331 - }, 332 - "node_modules/@esbuild/netbsd-x64": { 333 - "version": "0.18.20", 334 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", 335 - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", 336 - "cpu": [ 337 - "x64" 338 - ], 339 - "dev": true, 340 - "optional": true, 341 - "os": [ 342 - "netbsd" 343 - ], 344 - "engines": { 345 - "node": ">=12" 346 - } 347 - }, 348 - "node_modules/@esbuild/openbsd-x64": { 349 - "version": "0.18.20", 350 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", 351 - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", 352 - "cpu": [ 353 - "x64" 354 - ], 355 - "dev": true, 356 - "optional": true, 357 - "os": [ 358 - "openbsd" 359 - ], 360 - "engines": { 361 - "node": ">=12" 362 - } 363 - }, 364 - "node_modules/@esbuild/sunos-x64": { 365 - "version": "0.18.20", 366 - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", 367 - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", 368 - "cpu": [ 369 - "x64" 370 - ], 371 - "dev": true, 372 - "optional": true, 373 - "os": [ 374 - "sunos" 375 - ], 376 - "engines": { 377 - "node": ">=12" 378 - } 379 - }, 380 - "node_modules/@esbuild/win32-arm64": { 381 - "version": "0.18.20", 382 - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", 383 - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", 384 - "cpu": [ 385 - "arm64" 386 - ], 387 - "dev": true, 388 - "optional": true, 389 - "os": [ 390 - "win32" 391 - ], 392 - "engines": { 393 - "node": ">=12" 394 - } 395 - }, 396 - "node_modules/@esbuild/win32-ia32": { 397 - "version": "0.18.20", 398 - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", 399 - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", 400 - "cpu": [ 401 - "ia32" 402 - ], 403 - "dev": true, 404 - "optional": true, 405 - "os": [ 406 - "win32" 407 - ], 408 - "engines": { 409 - "node": ">=12" 410 - } 411 - }, 412 - "node_modules/@esbuild/win32-x64": { 413 - "version": "0.18.20", 414 - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", 415 - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", 416 - "cpu": [ 417 - "x64" 418 - ], 419 - "dev": true, 420 - "optional": true, 421 - "os": [ 422 - "win32" 423 - ], 424 - "engines": { 425 - "node": ">=12" 426 - } 427 - }, 428 - "node_modules/@eslint-community/eslint-utils": { 429 - "version": "4.4.0", 430 - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", 431 - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", 432 - "dev": true, 433 - "dependencies": { 434 - "eslint-visitor-keys": "^3.3.0" 435 - }, 436 - "engines": { 437 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 438 - }, 439 - "peerDependencies": { 440 - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 441 - } 442 - }, 443 - "node_modules/@eslint-community/regexpp": { 444 - "version": "4.8.1", 445 - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", 446 - "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", 447 - "dev": true, 448 - "engines": { 449 - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 450 - } 451 - }, 452 - "node_modules/@eslint/eslintrc": { 453 - "version": "2.1.2", 454 - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", 455 - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", 456 - "dev": true, 457 - "dependencies": { 458 - "ajv": "^6.12.4", 459 - "debug": "^4.3.2", 460 - "espree": "^9.6.0", 461 - "globals": "^13.19.0", 462 - "ignore": "^5.2.0", 463 - "import-fresh": "^3.2.1", 464 - "js-yaml": "^4.1.0", 465 - "minimatch": "^3.1.2", 466 - "strip-json-comments": "^3.1.1" 467 - }, 468 - "engines": { 469 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 470 - }, 471 - "funding": { 472 - "url": "https://opencollective.com/eslint" 473 - } 474 - }, 475 - "node_modules/@eslint/js": { 476 - "version": "8.50.0", 477 - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", 478 - "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", 479 - "dev": true, 480 - "engines": { 481 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 482 - } 483 - }, 484 - "node_modules/@humanwhocodes/config-array": { 485 - "version": "0.11.11", 486 - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", 487 - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", 488 - "dev": true, 489 - "dependencies": { 490 - "@humanwhocodes/object-schema": "^1.2.1", 491 - "debug": "^4.1.1", 492 - "minimatch": "^3.0.5" 493 - }, 494 - "engines": { 495 - "node": ">=10.10.0" 496 - } 497 - }, 498 - "node_modules/@humanwhocodes/module-importer": { 499 - "version": "1.0.1", 500 - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 501 - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 502 - "dev": true, 503 - "engines": { 504 - "node": ">=12.22" 505 - }, 506 - "funding": { 507 - "type": "github", 508 - "url": "https://github.com/sponsors/nzakas" 509 - } 510 - }, 511 - "node_modules/@humanwhocodes/object-schema": { 512 - "version": "1.2.1", 513 - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 514 - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 515 - "dev": true 516 - }, 517 - "node_modules/@istanbuljs/schema": { 518 - "version": "0.1.3", 519 - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", 520 - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", 521 - "dev": true, 522 - "engines": { 523 - "node": ">=8" 524 - } 525 - }, 526 - "node_modules/@jest/schemas": { 527 - "version": "29.6.3", 528 - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", 529 - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", 530 - "dev": true, 531 - "dependencies": { 532 - "@sinclair/typebox": "^0.27.8" 533 - }, 534 - "engines": { 535 - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 536 - } 537 - }, 538 - "node_modules/@jridgewell/gen-mapping": { 539 - "version": "0.3.3", 540 - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", 541 - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", 542 - "dev": true, 543 - "dependencies": { 544 - "@jridgewell/set-array": "^1.0.1", 545 - "@jridgewell/sourcemap-codec": "^1.4.10", 546 - "@jridgewell/trace-mapping": "^0.3.9" 547 - }, 548 - "engines": { 549 - "node": ">=6.0.0" 550 - } 551 - }, 552 - "node_modules/@jridgewell/resolve-uri": { 553 - "version": "3.1.1", 554 - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", 555 - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", 556 - "dev": true, 557 - "engines": { 558 - "node": ">=6.0.0" 559 - } 560 - }, 561 - "node_modules/@jridgewell/set-array": { 562 - "version": "1.1.2", 563 - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 564 - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 565 - "dev": true, 566 - "engines": { 567 - "node": ">=6.0.0" 568 - } 569 - }, 570 - "node_modules/@jridgewell/sourcemap-codec": { 571 - "version": "1.4.15", 572 - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 573 - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 574 - "dev": true 575 - }, 576 - "node_modules/@jridgewell/trace-mapping": { 577 - "version": "0.3.19", 578 - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", 579 - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", 580 - "dev": true, 581 - "dependencies": { 582 - "@jridgewell/resolve-uri": "^3.1.0", 583 - "@jridgewell/sourcemap-codec": "^1.4.14" 584 - } 585 - }, 586 - "node_modules/@nodelib/fs.scandir": { 587 - "version": "2.1.5", 588 - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 589 - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 590 - "dev": true, 591 - "dependencies": { 592 - "@nodelib/fs.stat": "2.0.5", 593 - "run-parallel": "^1.1.9" 594 - }, 595 - "engines": { 596 - "node": ">= 8" 597 - } 598 - }, 599 - "node_modules/@nodelib/fs.stat": { 600 - "version": "2.0.5", 601 - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 602 - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 603 - "dev": true, 604 - "engines": { 605 - "node": ">= 8" 606 - } 607 - }, 608 - "node_modules/@nodelib/fs.walk": { 609 - "version": "1.2.8", 610 - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 611 - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 612 - "dev": true, 613 - "dependencies": { 614 - "@nodelib/fs.scandir": "2.1.5", 615 - "fastq": "^1.6.0" 616 - }, 617 - "engines": { 618 - "node": ">= 8" 619 - } 620 - }, 621 - "node_modules/@polka/url": { 622 - "version": "1.0.0-next.23", 623 - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", 624 - "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==", 625 - "dev": true 626 - }, 627 - "node_modules/@sinclair/typebox": { 628 - "version": "0.27.8", 629 - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", 630 - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", 631 - "dev": true 632 - }, 633 - "node_modules/@sveltejs/adapter-static": { 634 - "version": "2.0.3", 635 - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-2.0.3.tgz", 636 - "integrity": "sha512-VUqTfXsxYGugCpMqQv1U0LIdbR3S5nBkMMDmpjGVJyM6Q2jHVMFtdWJCkeHMySc6mZxJ+0eZK3T7IgmUCDrcUQ==", 637 - "dev": true, 638 - "peerDependencies": { 639 - "@sveltejs/kit": "^1.5.0" 640 - } 641 - }, 642 - "node_modules/@sveltejs/kit": { 643 - "version": "1.25.0", 644 - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.25.0.tgz", 645 - "integrity": "sha512-+VqMWJJYtcLoF8hYkdqY2qs/MPaawrMwA/gNBJW2o2UrcuYdNiy0ZZnjQQuPD33df/VcAulnoeyzF5ZtaajFEw==", 646 - "dev": true, 647 - "hasInstallScript": true, 648 - "dependencies": { 649 - "@sveltejs/vite-plugin-svelte": "^2.4.1", 650 - "@types/cookie": "^0.5.1", 651 - "cookie": "^0.5.0", 652 - "devalue": "^4.3.1", 653 - "esm-env": "^1.0.0", 654 - "kleur": "^4.1.5", 655 - "magic-string": "^0.30.0", 656 - "mime": "^3.0.0", 657 - "sade": "^1.8.1", 658 - "set-cookie-parser": "^2.6.0", 659 - "sirv": "^2.0.2", 660 - "tiny-glob": "^0.2.9", 661 - "undici": "~5.23.0" 662 - }, 663 - "bin": { 664 - "svelte-kit": "svelte-kit.js" 665 - }, 666 - "engines": { 667 - "node": "^16.14 || >=18" 668 - }, 669 - "peerDependencies": { 670 - "svelte": "^3.54.0 || ^4.0.0-next.0", 671 - "vite": "^4.0.0" 672 - } 673 - }, 674 - "node_modules/@sveltejs/package": { 675 - "version": "2.2.2", 676 - "resolved": "https://registry.npmjs.org/@sveltejs/package/-/package-2.2.2.tgz", 677 - "integrity": "sha512-rP3sVv6cAntcdcG4r4KspLU6nZYYUrHJBAX3Arrw0KJFdgxtlsi2iDwN0Jwr/vIkgjcU0ZPWM8kkT5kpZDlWAw==", 678 - "dev": true, 679 - "dependencies": { 680 - "chokidar": "^3.5.3", 681 - "kleur": "^4.1.5", 682 - "sade": "^1.8.1", 683 - "semver": "^7.5.3", 684 - "svelte2tsx": "~0.6.19" 685 - }, 686 - "bin": { 687 - "svelte-package": "svelte-package.js" 688 - }, 689 - "engines": { 690 - "node": "^16.14 || >=18" 691 - }, 692 - "peerDependencies": { 693 - "svelte": "^3.44.0 || ^4.0.0" 694 - } 695 - }, 696 - "node_modules/@sveltejs/vite-plugin-svelte": { 697 - "version": "2.4.6", 698 - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.6.tgz", 699 - "integrity": "sha512-zO79p0+DZnXPnF0ltIigWDx/ux7Ni+HRaFOw720Qeivc1azFUrJxTl0OryXVibYNx1hCboGia1NRV3x8RNv4cA==", 700 - "dev": true, 701 - "dependencies": { 702 - "@sveltejs/vite-plugin-svelte-inspector": "^1.0.4", 703 - "debug": "^4.3.4", 704 - "deepmerge": "^4.3.1", 705 - "kleur": "^4.1.5", 706 - "magic-string": "^0.30.3", 707 - "svelte-hmr": "^0.15.3", 708 - "vitefu": "^0.2.4" 709 - }, 710 - "engines": { 711 - "node": "^14.18.0 || >= 16" 712 - }, 713 - "peerDependencies": { 714 - "svelte": "^3.54.0 || ^4.0.0", 715 - "vite": "^4.0.0" 716 - } 717 - }, 718 - "node_modules/@sveltejs/vite-plugin-svelte-inspector": { 719 - "version": "1.0.4", 720 - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.4.tgz", 721 - "integrity": "sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==", 722 - "dev": true, 723 - "dependencies": { 724 - "debug": "^4.3.4" 725 - }, 726 - "engines": { 727 - "node": "^14.18.0 || >= 16" 728 - }, 729 - "peerDependencies": { 730 - "@sveltejs/vite-plugin-svelte": "^2.2.0", 731 - "svelte": "^3.54.0 || ^4.0.0", 732 - "vite": "^4.0.0" 733 - } 734 - }, 735 - "node_modules/@types/chai": { 736 - "version": "4.3.6", 737 - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz", 738 - "integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==", 739 - "dev": true 740 - }, 741 - "node_modules/@types/chai-subset": { 742 - "version": "1.3.3", 743 - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", 744 - "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", 745 - "dev": true, 746 - "dependencies": { 747 - "@types/chai": "*" 748 - } 749 - }, 750 - "node_modules/@types/cookie": { 751 - "version": "0.5.2", 752 - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.2.tgz", 753 - "integrity": "sha512-DBpRoJGKJZn7RY92dPrgoMew8xCWc2P71beqsjyhEI/Ds9mOyVmBwtekyfhpwFIVt1WrxTonFifiOZ62V8CnNA==", 754 - "dev": true 755 - }, 756 - "node_modules/@types/estree": { 757 - "version": "1.0.2", 758 - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz", 759 - "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==", 760 - "dev": true 761 - }, 762 - "node_modules/@types/istanbul-lib-coverage": { 763 - "version": "2.0.4", 764 - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", 765 - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", 766 - "dev": true 767 - }, 768 - "node_modules/@types/json-schema": { 769 - "version": "7.0.13", 770 - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", 771 - "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", 772 - "dev": true 773 - }, 774 - "node_modules/@types/node": { 775 - "version": "20.6.4", 776 - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.4.tgz", 777 - "integrity": "sha512-nU6d9MPY0NBUMiE/nXd2IIoC4OLvsLpwAjheoAeuzgvDZA1Cb10QYg+91AF6zQiKWRN5i1m07x6sMe0niBznoQ==", 778 - "dev": true 779 - }, 780 - "node_modules/@types/pug": { 781 - "version": "2.0.6", 782 - "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", 783 - "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", 784 - "dev": true 785 - }, 786 - "node_modules/@types/semver": { 787 - "version": "7.5.2", 788 - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.2.tgz", 789 - "integrity": "sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==", 790 - "dev": true 791 - }, 792 - "node_modules/@types/unist": { 793 - "version": "2.0.8", 794 - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.8.tgz", 795 - "integrity": "sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==", 796 - "dev": true 797 - }, 798 - "node_modules/@typescript-eslint/eslint-plugin": { 799 - "version": "6.7.2", 800 - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.2.tgz", 801 - "integrity": "sha512-ooaHxlmSgZTM6CHYAFRlifqh1OAr3PAQEwi7lhYhaegbnXrnh7CDcHmc3+ihhbQC7H0i4JF0psI5ehzkF6Yl6Q==", 802 - "dev": true, 803 - "dependencies": { 804 - "@eslint-community/regexpp": "^4.5.1", 805 - "@typescript-eslint/scope-manager": "6.7.2", 806 - "@typescript-eslint/type-utils": "6.7.2", 807 - "@typescript-eslint/utils": "6.7.2", 808 - "@typescript-eslint/visitor-keys": "6.7.2", 809 - "debug": "^4.3.4", 810 - "graphemer": "^1.4.0", 811 - "ignore": "^5.2.4", 812 - "natural-compare": "^1.4.0", 813 - "semver": "^7.5.4", 814 - "ts-api-utils": "^1.0.1" 815 - }, 816 - "engines": { 817 - "node": "^16.0.0 || >=18.0.0" 818 - }, 819 - "funding": { 820 - "type": "opencollective", 821 - "url": "https://opencollective.com/typescript-eslint" 822 - }, 823 - "peerDependencies": { 824 - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", 825 - "eslint": "^7.0.0 || ^8.0.0" 826 - }, 827 - "peerDependenciesMeta": { 828 - "typescript": { 829 - "optional": true 830 - } 831 - } 832 - }, 833 - "node_modules/@typescript-eslint/parser": { 834 - "version": "6.7.2", 835 - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.2.tgz", 836 - "integrity": "sha512-KA3E4ox0ws+SPyxQf9iSI25R6b4Ne78ORhNHeVKrPQnoYsb9UhieoiRoJgrzgEeKGOXhcY1i8YtOeCHHTDa6Fw==", 837 - "dev": true, 838 - "dependencies": { 839 - "@typescript-eslint/scope-manager": "6.7.2", 840 - "@typescript-eslint/types": "6.7.2", 841 - "@typescript-eslint/typescript-estree": "6.7.2", 842 - "@typescript-eslint/visitor-keys": "6.7.2", 843 - "debug": "^4.3.4" 844 - }, 845 - "engines": { 846 - "node": "^16.0.0 || >=18.0.0" 847 - }, 848 - "funding": { 849 - "type": "opencollective", 850 - "url": "https://opencollective.com/typescript-eslint" 851 - }, 852 - "peerDependencies": { 853 - "eslint": "^7.0.0 || ^8.0.0" 854 - }, 855 - "peerDependenciesMeta": { 856 - "typescript": { 857 - "optional": true 858 - } 859 - } 860 - }, 861 - "node_modules/@typescript-eslint/scope-manager": { 862 - "version": "6.7.2", 863 - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.2.tgz", 864 - "integrity": "sha512-bgi6plgyZjEqapr7u2mhxGR6E8WCzKNUFWNh6fkpVe9+yzRZeYtDTbsIBzKbcxI+r1qVWt6VIoMSNZ4r2A+6Yw==", 865 - "dev": true, 866 - "dependencies": { 867 - "@typescript-eslint/types": "6.7.2", 868 - "@typescript-eslint/visitor-keys": "6.7.2" 869 - }, 870 - "engines": { 871 - "node": "^16.0.0 || >=18.0.0" 872 - }, 873 - "funding": { 874 - "type": "opencollective", 875 - "url": "https://opencollective.com/typescript-eslint" 876 - } 877 - }, 878 - "node_modules/@typescript-eslint/type-utils": { 879 - "version": "6.7.2", 880 - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.2.tgz", 881 - "integrity": "sha512-36F4fOYIROYRl0qj95dYKx6kybddLtsbmPIYNK0OBeXv2j9L5nZ17j9jmfy+bIDHKQgn2EZX+cofsqi8NPATBQ==", 882 - "dev": true, 883 - "dependencies": { 884 - "@typescript-eslint/typescript-estree": "6.7.2", 885 - "@typescript-eslint/utils": "6.7.2", 886 - "debug": "^4.3.4", 887 - "ts-api-utils": "^1.0.1" 888 - }, 889 - "engines": { 890 - "node": "^16.0.0 || >=18.0.0" 891 - }, 892 - "funding": { 893 - "type": "opencollective", 894 - "url": "https://opencollective.com/typescript-eslint" 895 - }, 896 - "peerDependencies": { 897 - "eslint": "^7.0.0 || ^8.0.0" 898 - }, 899 - "peerDependenciesMeta": { 900 - "typescript": { 901 - "optional": true 902 - } 903 - } 904 - }, 905 - "node_modules/@typescript-eslint/types": { 906 - "version": "6.7.2", 907 - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.2.tgz", 908 - "integrity": "sha512-flJYwMYgnUNDAN9/GAI3l8+wTmvTYdv64fcH8aoJK76Y+1FCZ08RtI5zDerM/FYT5DMkAc+19E4aLmd5KqdFyg==", 909 - "dev": true, 910 - "engines": { 911 - "node": "^16.0.0 || >=18.0.0" 912 - }, 913 - "funding": { 914 - "type": "opencollective", 915 - "url": "https://opencollective.com/typescript-eslint" 916 - } 917 - }, 918 - "node_modules/@typescript-eslint/typescript-estree": { 919 - "version": "6.7.2", 920 - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.2.tgz", 921 - "integrity": "sha512-kiJKVMLkoSciGyFU0TOY0fRxnp9qq1AzVOHNeN1+B9erKFCJ4Z8WdjAkKQPP+b1pWStGFqezMLltxO+308dJTQ==", 922 - "dev": true, 923 - "dependencies": { 924 - "@typescript-eslint/types": "6.7.2", 925 - "@typescript-eslint/visitor-keys": "6.7.2", 926 - "debug": "^4.3.4", 927 - "globby": "^11.1.0", 928 - "is-glob": "^4.0.3", 929 - "semver": "^7.5.4", 930 - "ts-api-utils": "^1.0.1" 931 - }, 932 - "engines": { 933 - "node": "^16.0.0 || >=18.0.0" 934 - }, 935 - "funding": { 936 - "type": "opencollective", 937 - "url": "https://opencollective.com/typescript-eslint" 938 - }, 939 - "peerDependenciesMeta": { 940 - "typescript": { 941 - "optional": true 942 - } 943 - } 944 - }, 945 - "node_modules/@typescript-eslint/utils": { 946 - "version": "6.7.2", 947 - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.2.tgz", 948 - "integrity": "sha512-ZCcBJug/TS6fXRTsoTkgnsvyWSiXwMNiPzBUani7hDidBdj1779qwM1FIAmpH4lvlOZNF3EScsxxuGifjpLSWQ==", 949 - "dev": true, 950 - "dependencies": { 951 - "@eslint-community/eslint-utils": "^4.4.0", 952 - "@types/json-schema": "^7.0.12", 953 - "@types/semver": "^7.5.0", 954 - "@typescript-eslint/scope-manager": "6.7.2", 955 - "@typescript-eslint/types": "6.7.2", 956 - "@typescript-eslint/typescript-estree": "6.7.2", 957 - "semver": "^7.5.4" 958 - }, 959 - "engines": { 960 - "node": "^16.0.0 || >=18.0.0" 961 - }, 962 - "funding": { 963 - "type": "opencollective", 964 - "url": "https://opencollective.com/typescript-eslint" 965 - }, 966 - "peerDependencies": { 967 - "eslint": "^7.0.0 || ^8.0.0" 968 - } 969 - }, 970 - "node_modules/@typescript-eslint/visitor-keys": { 971 - "version": "6.7.2", 972 - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.2.tgz", 973 - "integrity": "sha512-uVw9VIMFBUTz8rIeaUT3fFe8xIUx8r4ywAdlQv1ifH+6acn/XF8Y6rwJ7XNmkNMDrTW+7+vxFFPIF40nJCVsMQ==", 974 - "dev": true, 975 - "dependencies": { 976 - "@typescript-eslint/types": "6.7.2", 977 - "eslint-visitor-keys": "^3.4.1" 978 - }, 979 - "engines": { 980 - "node": "^16.0.0 || >=18.0.0" 981 - }, 982 - "funding": { 983 - "type": "opencollective", 984 - "url": "https://opencollective.com/typescript-eslint" 985 - } 986 - }, 987 - "node_modules/@vitest/coverage-v8": { 988 - "version": "0.34.5", 989 - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-0.34.5.tgz", 990 - "integrity": "sha512-97xjhRTSdmeeHCm2nNHhT3hLsMYkAhHXm/rwj6SZ3voka8xiCJrwgtfIjoZIFEL4OO0KezGmVuHWQXcMunULIA==", 991 - "dev": true, 992 - "dependencies": { 993 - "@ampproject/remapping": "^2.2.1", 994 - "@bcoe/v8-coverage": "^0.2.3", 995 - "istanbul-lib-coverage": "^3.2.0", 996 - "istanbul-lib-report": "^3.0.1", 997 - "istanbul-lib-source-maps": "^4.0.1", 998 - "istanbul-reports": "^3.1.5", 999 - "magic-string": "^0.30.1", 1000 - "picocolors": "^1.0.0", 1001 - "std-env": "^3.3.3", 1002 - "test-exclude": "^6.0.0", 1003 - "v8-to-istanbul": "^9.1.0" 1004 - }, 1005 - "funding": { 1006 - "url": "https://opencollective.com/vitest" 1007 - }, 1008 - "peerDependencies": { 1009 - "vitest": ">=0.32.0 <1" 1010 - } 1011 - }, 1012 - "node_modules/@vitest/expect": { 1013 - "version": "0.34.5", 1014 - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.5.tgz", 1015 - "integrity": "sha512-/3RBIV9XEH+nRpRMqDJBufKIOQaYUH2X6bt0rKSCW0MfKhXFLYsR5ivHifeajRSTsln0FwJbitxLKHSQz/Xwkw==", 1016 - "dev": true, 1017 - "dependencies": { 1018 - "@vitest/spy": "0.34.5", 1019 - "@vitest/utils": "0.34.5", 1020 - "chai": "^4.3.7" 1021 - }, 1022 - "funding": { 1023 - "url": "https://opencollective.com/vitest" 1024 - } 1025 - }, 1026 - "node_modules/@vitest/runner": { 1027 - "version": "0.34.5", 1028 - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.5.tgz", 1029 - "integrity": "sha512-RDEE3ViVvl7jFSCbnBRyYuu23XxmvRTSZWW6W4M7eC5dOsK75d5LIf6uhE5Fqf809DQ1+9ICZZNxhIolWHU4og==", 1030 - "dev": true, 1031 - "dependencies": { 1032 - "@vitest/utils": "0.34.5", 1033 - "p-limit": "^4.0.0", 1034 - "pathe": "^1.1.1" 1035 - }, 1036 - "funding": { 1037 - "url": "https://opencollective.com/vitest" 1038 - } 1039 - }, 1040 - "node_modules/@vitest/runner/node_modules/p-limit": { 1041 - "version": "4.0.0", 1042 - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", 1043 - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", 1044 - "dev": true, 1045 - "dependencies": { 1046 - "yocto-queue": "^1.0.0" 1047 - }, 1048 - "engines": { 1049 - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1050 - }, 1051 - "funding": { 1052 - "url": "https://github.com/sponsors/sindresorhus" 1053 - } 1054 - }, 1055 - "node_modules/@vitest/runner/node_modules/yocto-queue": { 1056 - "version": "1.0.0", 1057 - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", 1058 - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", 1059 - "dev": true, 1060 - "engines": { 1061 - "node": ">=12.20" 1062 - }, 1063 - "funding": { 1064 - "url": "https://github.com/sponsors/sindresorhus" 1065 - } 1066 - }, 1067 - "node_modules/@vitest/snapshot": { 1068 - "version": "0.34.5", 1069 - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.5.tgz", 1070 - "integrity": "sha512-+ikwSbhu6z2yOdtKmk/aeoDZ9QPm2g/ZO5rXT58RR9Vmu/kB2MamyDSx77dctqdZfP3Diqv4mbc/yw2kPT8rmA==", 1071 - "dev": true, 1072 - "dependencies": { 1073 - "magic-string": "^0.30.1", 1074 - "pathe": "^1.1.1", 1075 - "pretty-format": "^29.5.0" 1076 - }, 1077 - "funding": { 1078 - "url": "https://opencollective.com/vitest" 1079 - } 1080 - }, 1081 - "node_modules/@vitest/spy": { 1082 - "version": "0.34.5", 1083 - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.5.tgz", 1084 - "integrity": "sha512-epsicsfhvBjRjCMOC/3k00mP/TBGQy8/P0DxOFiWyLt55gnZ99dqCfCiAsKO17BWVjn4eZRIjKvcqNmSz8gvmg==", 1085 - "dev": true, 1086 - "dependencies": { 1087 - "tinyspy": "^2.1.1" 1088 - }, 1089 - "funding": { 1090 - "url": "https://opencollective.com/vitest" 1091 - } 1092 - }, 1093 - "node_modules/@vitest/utils": { 1094 - "version": "0.34.5", 1095 - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.5.tgz", 1096 - "integrity": "sha512-ur6CmmYQoeHMwmGb0v+qwkwN3yopZuZyf4xt1DBBSGBed8Hf9Gmbm/5dEWqgpLPdRx6Av6jcWXrjcKfkTzg/pw==", 1097 - "dev": true, 1098 - "dependencies": { 1099 - "diff-sequences": "^29.4.3", 1100 - "loupe": "^2.3.6", 1101 - "pretty-format": "^29.5.0" 1102 - }, 1103 - "funding": { 1104 - "url": "https://opencollective.com/vitest" 1105 - } 1106 - }, 1107 - "node_modules/acorn": { 1108 - "version": "8.10.0", 1109 - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", 1110 - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", 1111 - "dev": true, 1112 - "bin": { 1113 - "acorn": "bin/acorn" 1114 - }, 1115 - "engines": { 1116 - "node": ">=0.4.0" 1117 - } 1118 - }, 1119 - "node_modules/acorn-jsx": { 1120 - "version": "5.3.2", 1121 - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 1122 - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 1123 - "dev": true, 1124 - "peerDependencies": { 1125 - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 1126 - } 1127 - }, 1128 - "node_modules/acorn-walk": { 1129 - "version": "8.2.0", 1130 - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", 1131 - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", 1132 - "dev": true, 1133 - "engines": { 1134 - "node": ">=0.4.0" 1135 - } 1136 - }, 1137 - "node_modules/ajv": { 1138 - "version": "6.12.6", 1139 - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1140 - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1141 - "dev": true, 1142 - "dependencies": { 1143 - "fast-deep-equal": "^3.1.1", 1144 - "fast-json-stable-stringify": "^2.0.0", 1145 - "json-schema-traverse": "^0.4.1", 1146 - "uri-js": "^4.2.2" 1147 - }, 1148 - "funding": { 1149 - "type": "github", 1150 - "url": "https://github.com/sponsors/epoberezkin" 1151 - } 1152 - }, 1153 - "node_modules/ansi-regex": { 1154 - "version": "5.0.1", 1155 - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1156 - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1157 - "dev": true, 1158 - "engines": { 1159 - "node": ">=8" 1160 - } 1161 - }, 1162 - "node_modules/ansi-styles": { 1163 - "version": "4.3.0", 1164 - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1165 - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1166 - "dev": true, 1167 - "dependencies": { 1168 - "color-convert": "^2.0.1" 1169 - }, 1170 - "engines": { 1171 - "node": ">=8" 1172 - }, 1173 - "funding": { 1174 - "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1175 - } 1176 - }, 1177 - "node_modules/anymatch": { 1178 - "version": "3.1.3", 1179 - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 1180 - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 1181 - "dev": true, 1182 - "dependencies": { 1183 - "normalize-path": "^3.0.0", 1184 - "picomatch": "^2.0.4" 1185 - }, 1186 - "engines": { 1187 - "node": ">= 8" 1188 - } 1189 - }, 1190 - "node_modules/argparse": { 1191 - "version": "2.0.1", 1192 - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1193 - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1194 - "dev": true 1195 - }, 1196 - "node_modules/aria-query": { 1197 - "version": "5.3.0", 1198 - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", 1199 - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", 1200 - "dev": true, 1201 - "dependencies": { 1202 - "dequal": "^2.0.3" 1203 - } 1204 - }, 1205 - "node_modules/array-union": { 1206 - "version": "2.1.0", 1207 - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 1208 - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 1209 - "dev": true, 1210 - "engines": { 1211 - "node": ">=8" 1212 - } 1213 - }, 1214 - "node_modules/assertion-error": { 1215 - "version": "1.1.0", 1216 - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", 1217 - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", 1218 - "dev": true, 1219 - "engines": { 1220 - "node": "*" 1221 - } 1222 - }, 1223 - "node_modules/axobject-query": { 1224 - "version": "3.2.1", 1225 - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", 1226 - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", 1227 - "dev": true, 1228 - "dependencies": { 1229 - "dequal": "^2.0.3" 1230 - } 1231 - }, 1232 - "node_modules/balanced-match": { 1233 - "version": "1.0.2", 1234 - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1235 - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1236 - "dev": true 1237 - }, 1238 - "node_modules/binary-extensions": { 1239 - "version": "2.2.0", 1240 - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 1241 - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 1242 - "dev": true, 1243 - "engines": { 1244 - "node": ">=8" 1245 - } 1246 - }, 1247 - "node_modules/brace-expansion": { 1248 - "version": "1.1.11", 1249 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1250 - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1251 - "dev": true, 1252 - "dependencies": { 1253 - "balanced-match": "^1.0.0", 1254 - "concat-map": "0.0.1" 1255 - } 1256 - }, 1257 - "node_modules/braces": { 1258 - "version": "3.0.2", 1259 - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1260 - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1261 - "dev": true, 1262 - "dependencies": { 1263 - "fill-range": "^7.0.1" 1264 - }, 1265 - "engines": { 1266 - "node": ">=8" 1267 - } 1268 - }, 1269 - "node_modules/buffer-crc32": { 1270 - "version": "0.2.13", 1271 - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 1272 - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", 1273 - "dev": true, 1274 - "engines": { 1275 - "node": "*" 1276 - } 1277 - }, 1278 - "node_modules/busboy": { 1279 - "version": "1.6.0", 1280 - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", 1281 - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", 1282 - "dev": true, 1283 - "dependencies": { 1284 - "streamsearch": "^1.1.0" 1285 - }, 1286 - "engines": { 1287 - "node": ">=10.16.0" 1288 - } 1289 - }, 1290 - "node_modules/cac": { 1291 - "version": "6.7.14", 1292 - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", 1293 - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", 1294 - "dev": true, 1295 - "engines": { 1296 - "node": ">=8" 1297 - } 1298 - }, 1299 - "node_modules/callsites": { 1300 - "version": "3.1.0", 1301 - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1302 - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1303 - "dev": true, 1304 - "engines": { 1305 - "node": ">=6" 1306 - } 1307 - }, 1308 - "node_modules/chai": { 1309 - "version": "4.3.8", 1310 - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", 1311 - "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", 1312 - "dev": true, 1313 - "dependencies": { 1314 - "assertion-error": "^1.1.0", 1315 - "check-error": "^1.0.2", 1316 - "deep-eql": "^4.1.2", 1317 - "get-func-name": "^2.0.0", 1318 - "loupe": "^2.3.1", 1319 - "pathval": "^1.1.1", 1320 - "type-detect": "^4.0.5" 1321 - }, 1322 - "engines": { 1323 - "node": ">=4" 1324 - } 1325 - }, 1326 - "node_modules/chalk": { 1327 - "version": "4.1.2", 1328 - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1329 - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1330 - "dev": true, 1331 - "dependencies": { 1332 - "ansi-styles": "^4.1.0", 1333 - "supports-color": "^7.1.0" 1334 - }, 1335 - "engines": { 1336 - "node": ">=10" 1337 - }, 1338 - "funding": { 1339 - "url": "https://github.com/chalk/chalk?sponsor=1" 1340 - } 1341 - }, 1342 - "node_modules/check-error": { 1343 - "version": "1.0.2", 1344 - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", 1345 - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", 1346 - "dev": true, 1347 - "engines": { 1348 - "node": "*" 1349 - } 1350 - }, 1351 - "node_modules/chokidar": { 1352 - "version": "3.5.3", 1353 - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 1354 - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 1355 - "dev": true, 1356 - "funding": [ 1357 - { 1358 - "type": "individual", 1359 - "url": "https://paulmillr.com/funding/" 1360 - } 1361 - ], 1362 - "dependencies": { 1363 - "anymatch": "~3.1.2", 1364 - "braces": "~3.0.2", 1365 - "glob-parent": "~5.1.2", 1366 - "is-binary-path": "~2.1.0", 1367 - "is-glob": "~4.0.1", 1368 - "normalize-path": "~3.0.0", 1369 - "readdirp": "~3.6.0" 1370 - }, 1371 - "engines": { 1372 - "node": ">= 8.10.0" 1373 - }, 1374 - "optionalDependencies": { 1375 - "fsevents": "~2.3.2" 1376 - } 1377 - }, 1378 - "node_modules/code-red": { 1379 - "version": "1.0.4", 1380 - "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", 1381 - "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", 1382 - "dev": true, 1383 - "dependencies": { 1384 - "@jridgewell/sourcemap-codec": "^1.4.15", 1385 - "@types/estree": "^1.0.1", 1386 - "acorn": "^8.10.0", 1387 - "estree-walker": "^3.0.3", 1388 - "periscopic": "^3.1.0" 1389 - } 1390 - }, 1391 - "node_modules/color-convert": { 1392 - "version": "2.0.1", 1393 - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1394 - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1395 - "dev": true, 1396 - "dependencies": { 1397 - "color-name": "~1.1.4" 1398 - }, 1399 - "engines": { 1400 - "node": ">=7.0.0" 1401 - } 1402 - }, 1403 - "node_modules/color-name": { 1404 - "version": "1.1.4", 1405 - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1406 - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1407 - "dev": true 1408 - }, 1409 - "node_modules/concat-map": { 1410 - "version": "0.0.1", 1411 - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1412 - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1413 - "dev": true 1414 - }, 1415 - "node_modules/convert-source-map": { 1416 - "version": "1.9.0", 1417 - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", 1418 - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", 1419 - "dev": true 1420 - }, 1421 - "node_modules/cookie": { 1422 - "version": "0.5.0", 1423 - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 1424 - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 1425 - "dev": true, 1426 - "engines": { 1427 - "node": ">= 0.6" 1428 - } 1429 - }, 1430 - "node_modules/cross-spawn": { 1431 - "version": "7.0.3", 1432 - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1433 - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1434 - "dev": true, 1435 - "dependencies": { 1436 - "path-key": "^3.1.0", 1437 - "shebang-command": "^2.0.0", 1438 - "which": "^2.0.1" 1439 - }, 1440 - "engines": { 1441 - "node": ">= 8" 1442 - } 1443 - }, 1444 - "node_modules/css-tree": { 1445 - "version": "2.3.1", 1446 - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", 1447 - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", 1448 - "dev": true, 1449 - "dependencies": { 1450 - "mdn-data": "2.0.30", 1451 - "source-map-js": "^1.0.1" 1452 - }, 1453 - "engines": { 1454 - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" 1455 - } 1456 - }, 1457 - "node_modules/cssesc": { 1458 - "version": "3.0.0", 1459 - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 1460 - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 1461 - "dev": true, 1462 - "bin": { 1463 - "cssesc": "bin/cssesc" 1464 - }, 1465 - "engines": { 1466 - "node": ">=4" 1467 - } 1468 - }, 1469 - "node_modules/date-fns": { 1470 - "version": "2.30.0", 1471 - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", 1472 - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", 1473 - "dev": true, 1474 - "dependencies": { 1475 - "@babel/runtime": "^7.21.0" 1476 - }, 1477 - "engines": { 1478 - "node": ">=0.11" 1479 - }, 1480 - "funding": { 1481 - "type": "opencollective", 1482 - "url": "https://opencollective.com/date-fns" 1483 - } 1484 - }, 1485 - "node_modules/debug": { 1486 - "version": "4.3.4", 1487 - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1488 - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1489 - "dev": true, 1490 - "dependencies": { 1491 - "ms": "2.1.2" 1492 - }, 1493 - "engines": { 1494 - "node": ">=6.0" 1495 - }, 1496 - "peerDependenciesMeta": { 1497 - "supports-color": { 1498 - "optional": true 1499 - } 1500 - } 1501 - }, 1502 - "node_modules/dedent-js": { 1503 - "version": "1.0.1", 1504 - "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", 1505 - "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==", 1506 - "dev": true 1507 - }, 1508 - "node_modules/deep-eql": { 1509 - "version": "4.1.3", 1510 - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", 1511 - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", 1512 - "dev": true, 1513 - "dependencies": { 1514 - "type-detect": "^4.0.0" 1515 - }, 1516 - "engines": { 1517 - "node": ">=6" 1518 - } 1519 - }, 1520 - "node_modules/deep-is": { 1521 - "version": "0.1.4", 1522 - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1523 - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 1524 - "dev": true 1525 - }, 1526 - "node_modules/deepmerge": { 1527 - "version": "4.3.1", 1528 - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", 1529 - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", 1530 - "dev": true, 1531 - "engines": { 1532 - "node": ">=0.10.0" 1533 - } 1534 - }, 1535 - "node_modules/dequal": { 1536 - "version": "2.0.3", 1537 - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", 1538 - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", 1539 - "dev": true, 1540 - "engines": { 1541 - "node": ">=6" 1542 - } 1543 - }, 1544 - "node_modules/detect-indent": { 1545 - "version": "6.1.0", 1546 - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", 1547 - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", 1548 - "dev": true, 1549 - "engines": { 1550 - "node": ">=8" 1551 - } 1552 - }, 1553 - "node_modules/devalue": { 1554 - "version": "4.3.2", 1555 - "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.2.tgz", 1556 - "integrity": "sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==", 1557 - "dev": true 1558 - }, 1559 - "node_modules/diff-sequences": { 1560 - "version": "29.6.3", 1561 - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", 1562 - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", 1563 - "dev": true, 1564 - "engines": { 1565 - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 1566 - } 1567 - }, 1568 - "node_modules/dir-glob": { 1569 - "version": "3.0.1", 1570 - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 1571 - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 1572 - "dev": true, 1573 - "dependencies": { 1574 - "path-type": "^4.0.0" 1575 - }, 1576 - "engines": { 1577 - "node": ">=8" 1578 - } 1579 - }, 1580 - "node_modules/doctrine": { 1581 - "version": "3.0.0", 1582 - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 1583 - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 1584 - "dev": true, 1585 - "dependencies": { 1586 - "esutils": "^2.0.2" 1587 - }, 1588 - "engines": { 1589 - "node": ">=6.0.0" 1590 - } 1591 - }, 1592 - "node_modules/es6-promise": { 1593 - "version": "3.3.1", 1594 - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", 1595 - "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", 1596 - "dev": true 1597 - }, 1598 - "node_modules/esbuild": { 1599 - "version": "0.18.20", 1600 - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", 1601 - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", 1602 - "dev": true, 1603 - "hasInstallScript": true, 1604 - "bin": { 1605 - "esbuild": "bin/esbuild" 1606 - }, 1607 - "engines": { 1608 - "node": ">=12" 1609 - }, 1610 - "optionalDependencies": { 1611 - "@esbuild/android-arm": "0.18.20", 1612 - "@esbuild/android-arm64": "0.18.20", 1613 - "@esbuild/android-x64": "0.18.20", 1614 - "@esbuild/darwin-arm64": "0.18.20", 1615 - "@esbuild/darwin-x64": "0.18.20", 1616 - "@esbuild/freebsd-arm64": "0.18.20", 1617 - "@esbuild/freebsd-x64": "0.18.20", 1618 - "@esbuild/linux-arm": "0.18.20", 1619 - "@esbuild/linux-arm64": "0.18.20", 1620 - "@esbuild/linux-ia32": "0.18.20", 1621 - "@esbuild/linux-loong64": "0.18.20", 1622 - "@esbuild/linux-mips64el": "0.18.20", 1623 - "@esbuild/linux-ppc64": "0.18.20", 1624 - "@esbuild/linux-riscv64": "0.18.20", 1625 - "@esbuild/linux-s390x": "0.18.20", 1626 - "@esbuild/linux-x64": "0.18.20", 1627 - "@esbuild/netbsd-x64": "0.18.20", 1628 - "@esbuild/openbsd-x64": "0.18.20", 1629 - "@esbuild/sunos-x64": "0.18.20", 1630 - "@esbuild/win32-arm64": "0.18.20", 1631 - "@esbuild/win32-ia32": "0.18.20", 1632 - "@esbuild/win32-x64": "0.18.20" 1633 - } 1634 - }, 1635 - "node_modules/escape-string-regexp": { 1636 - "version": "4.0.0", 1637 - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1638 - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1639 - "dev": true, 1640 - "engines": { 1641 - "node": ">=10" 1642 - }, 1643 - "funding": { 1644 - "url": "https://github.com/sponsors/sindresorhus" 1645 - } 1646 - }, 1647 - "node_modules/eslint": { 1648 - "version": "8.50.0", 1649 - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", 1650 - "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", 1651 - "dev": true, 1652 - "dependencies": { 1653 - "@eslint-community/eslint-utils": "^4.2.0", 1654 - "@eslint-community/regexpp": "^4.6.1", 1655 - "@eslint/eslintrc": "^2.1.2", 1656 - "@eslint/js": "8.50.0", 1657 - "@humanwhocodes/config-array": "^0.11.11", 1658 - "@humanwhocodes/module-importer": "^1.0.1", 1659 - "@nodelib/fs.walk": "^1.2.8", 1660 - "ajv": "^6.12.4", 1661 - "chalk": "^4.0.0", 1662 - "cross-spawn": "^7.0.2", 1663 - "debug": "^4.3.2", 1664 - "doctrine": "^3.0.0", 1665 - "escape-string-regexp": "^4.0.0", 1666 - "eslint-scope": "^7.2.2", 1667 - "eslint-visitor-keys": "^3.4.3", 1668 - "espree": "^9.6.1", 1669 - "esquery": "^1.4.2", 1670 - "esutils": "^2.0.2", 1671 - "fast-deep-equal": "^3.1.3", 1672 - "file-entry-cache": "^6.0.1", 1673 - "find-up": "^5.0.0", 1674 - "glob-parent": "^6.0.2", 1675 - "globals": "^13.19.0", 1676 - "graphemer": "^1.4.0", 1677 - "ignore": "^5.2.0", 1678 - "imurmurhash": "^0.1.4", 1679 - "is-glob": "^4.0.0", 1680 - "is-path-inside": "^3.0.3", 1681 - "js-yaml": "^4.1.0", 1682 - "json-stable-stringify-without-jsonify": "^1.0.1", 1683 - "levn": "^0.4.1", 1684 - "lodash.merge": "^4.6.2", 1685 - "minimatch": "^3.1.2", 1686 - "natural-compare": "^1.4.0", 1687 - "optionator": "^0.9.3", 1688 - "strip-ansi": "^6.0.1", 1689 - "text-table": "^0.2.0" 1690 - }, 1691 - "bin": { 1692 - "eslint": "bin/eslint.js" 1693 - }, 1694 - "engines": { 1695 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1696 - }, 1697 - "funding": { 1698 - "url": "https://opencollective.com/eslint" 1699 - } 1700 - }, 1701 - "node_modules/eslint-config-prettier": { 1702 - "version": "8.10.0", 1703 - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", 1704 - "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", 1705 - "dev": true, 1706 - "bin": { 1707 - "eslint-config-prettier": "bin/cli.js" 1708 - }, 1709 - "peerDependencies": { 1710 - "eslint": ">=7.0.0" 1711 - } 1712 - }, 1713 - "node_modules/eslint-plugin-svelte": { 1714 - "version": "2.33.2", 1715 - "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.33.2.tgz", 1716 - "integrity": "sha512-knWmauax+E/jvQ9CmuX5dAhQKP9P4eGQZxWa5RMutEJVCcy0wFmiUvOeDND2jR4vUkbDlX4khKjaceY7QzbkYw==", 1717 - "dev": true, 1718 - "dependencies": { 1719 - "@eslint-community/eslint-utils": "^4.2.0", 1720 - "@jridgewell/sourcemap-codec": "^1.4.14", 1721 - "debug": "^4.3.1", 1722 - "esutils": "^2.0.3", 1723 - "known-css-properties": "^0.28.0", 1724 - "postcss": "^8.4.5", 1725 - "postcss-load-config": "^3.1.4", 1726 - "postcss-safe-parser": "^6.0.0", 1727 - "postcss-selector-parser": "^6.0.11", 1728 - "semver": "^7.5.3", 1729 - "svelte-eslint-parser": ">=0.33.0 <1.0.0" 1730 - }, 1731 - "engines": { 1732 - "node": "^14.17.0 || >=16.0.0" 1733 - }, 1734 - "funding": { 1735 - "url": "https://github.com/sponsors/ota-meshi" 1736 - }, 1737 - "peerDependencies": { 1738 - "eslint": "^7.0.0 || ^8.0.0-0", 1739 - "svelte": "^3.37.0 || ^4.0.0" 1740 - }, 1741 - "peerDependenciesMeta": { 1742 - "svelte": { 1743 - "optional": true 1744 - } 1745 - } 1746 - }, 1747 - "node_modules/eslint-scope": { 1748 - "version": "7.2.2", 1749 - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", 1750 - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", 1751 - "dev": true, 1752 - "dependencies": { 1753 - "esrecurse": "^4.3.0", 1754 - "estraverse": "^5.2.0" 1755 - }, 1756 - "engines": { 1757 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1758 - }, 1759 - "funding": { 1760 - "url": "https://opencollective.com/eslint" 1761 - } 1762 - }, 1763 - "node_modules/eslint-visitor-keys": { 1764 - "version": "3.4.3", 1765 - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 1766 - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 1767 - "dev": true, 1768 - "engines": { 1769 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1770 - }, 1771 - "funding": { 1772 - "url": "https://opencollective.com/eslint" 1773 - } 1774 - }, 1775 - "node_modules/eslint/node_modules/glob-parent": { 1776 - "version": "6.0.2", 1777 - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1778 - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1779 - "dev": true, 1780 - "dependencies": { 1781 - "is-glob": "^4.0.3" 1782 - }, 1783 - "engines": { 1784 - "node": ">=10.13.0" 1785 - } 1786 - }, 1787 - "node_modules/esm-env": { 1788 - "version": "1.0.0", 1789 - "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz", 1790 - "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==", 1791 - "dev": true 1792 - }, 1793 - "node_modules/espree": { 1794 - "version": "9.6.1", 1795 - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", 1796 - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", 1797 - "dev": true, 1798 - "dependencies": { 1799 - "acorn": "^8.9.0", 1800 - "acorn-jsx": "^5.3.2", 1801 - "eslint-visitor-keys": "^3.4.1" 1802 - }, 1803 - "engines": { 1804 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1805 - }, 1806 - "funding": { 1807 - "url": "https://opencollective.com/eslint" 1808 - } 1809 - }, 1810 - "node_modules/esquery": { 1811 - "version": "1.5.0", 1812 - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", 1813 - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", 1814 - "dev": true, 1815 - "dependencies": { 1816 - "estraverse": "^5.1.0" 1817 - }, 1818 - "engines": { 1819 - "node": ">=0.10" 1820 - } 1821 - }, 1822 - "node_modules/esrecurse": { 1823 - "version": "4.3.0", 1824 - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1825 - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1826 - "dev": true, 1827 - "dependencies": { 1828 - "estraverse": "^5.2.0" 1829 - }, 1830 - "engines": { 1831 - "node": ">=4.0" 1832 - } 1833 - }, 1834 - "node_modules/estraverse": { 1835 - "version": "5.3.0", 1836 - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1837 - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1838 - "dev": true, 1839 - "engines": { 1840 - "node": ">=4.0" 1841 - } 1842 - }, 1843 - "node_modules/estree-walker": { 1844 - "version": "3.0.3", 1845 - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", 1846 - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", 1847 - "dev": true, 1848 - "dependencies": { 1849 - "@types/estree": "^1.0.0" 1850 - } 1851 - }, 1852 - "node_modules/esutils": { 1853 - "version": "2.0.3", 1854 - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1855 - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1856 - "dev": true, 1857 - "engines": { 1858 - "node": ">=0.10.0" 1859 - } 1860 - }, 1861 - "node_modules/fast-deep-equal": { 1862 - "version": "3.1.3", 1863 - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1864 - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1865 - "dev": true 1866 - }, 1867 - "node_modules/fast-glob": { 1868 - "version": "3.3.1", 1869 - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", 1870 - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", 1871 - "dev": true, 1872 - "dependencies": { 1873 - "@nodelib/fs.stat": "^2.0.2", 1874 - "@nodelib/fs.walk": "^1.2.3", 1875 - "glob-parent": "^5.1.2", 1876 - "merge2": "^1.3.0", 1877 - "micromatch": "^4.0.4" 1878 - }, 1879 - "engines": { 1880 - "node": ">=8.6.0" 1881 - } 1882 - }, 1883 - "node_modules/fast-json-stable-stringify": { 1884 - "version": "2.1.0", 1885 - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1886 - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1887 - "dev": true 1888 - }, 1889 - "node_modules/fast-levenshtein": { 1890 - "version": "2.0.6", 1891 - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1892 - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 1893 - "dev": true 1894 - }, 1895 - "node_modules/fastq": { 1896 - "version": "1.15.0", 1897 - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 1898 - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 1899 - "dev": true, 1900 - "dependencies": { 1901 - "reusify": "^1.0.4" 1902 - } 1903 - }, 1904 - "node_modules/file-entry-cache": { 1905 - "version": "6.0.1", 1906 - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 1907 - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 1908 - "dev": true, 1909 - "dependencies": { 1910 - "flat-cache": "^3.0.4" 1911 - }, 1912 - "engines": { 1913 - "node": "^10.12.0 || >=12.0.0" 1914 - } 1915 - }, 1916 - "node_modules/fill-range": { 1917 - "version": "7.0.1", 1918 - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1919 - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1920 - "dev": true, 1921 - "dependencies": { 1922 - "to-regex-range": "^5.0.1" 1923 - }, 1924 - "engines": { 1925 - "node": ">=8" 1926 - } 1927 - }, 1928 - "node_modules/find-up": { 1929 - "version": "5.0.0", 1930 - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 1931 - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 1932 - "dev": true, 1933 - "dependencies": { 1934 - "locate-path": "^6.0.0", 1935 - "path-exists": "^4.0.0" 1936 - }, 1937 - "engines": { 1938 - "node": ">=10" 1939 - }, 1940 - "funding": { 1941 - "url": "https://github.com/sponsors/sindresorhus" 1942 - } 1943 - }, 1944 - "node_modules/flat-cache": { 1945 - "version": "3.1.0", 1946 - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", 1947 - "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", 1948 - "dev": true, 1949 - "dependencies": { 1950 - "flatted": "^3.2.7", 1951 - "keyv": "^4.5.3", 1952 - "rimraf": "^3.0.2" 1953 - }, 1954 - "engines": { 1955 - "node": ">=12.0.0" 1956 - } 1957 - }, 1958 - "node_modules/flatted": { 1959 - "version": "3.2.9", 1960 - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", 1961 - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", 1962 - "dev": true 1963 - }, 1964 - "node_modules/fs.realpath": { 1965 - "version": "1.0.0", 1966 - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1967 - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1968 - "dev": true 1969 - }, 1970 - "node_modules/fsevents": { 1971 - "version": "2.3.3", 1972 - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1973 - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1974 - "dev": true, 1975 - "hasInstallScript": true, 1976 - "optional": true, 1977 - "os": [ 1978 - "darwin" 1979 - ], 1980 - "engines": { 1981 - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1982 - } 1983 - }, 1984 - "node_modules/get-func-name": { 1985 - "version": "2.0.0", 1986 - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", 1987 - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", 1988 - "dev": true, 1989 - "engines": { 1990 - "node": "*" 1991 - } 1992 - }, 1993 - "node_modules/glob": { 1994 - "version": "7.2.3", 1995 - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1996 - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1997 - "dev": true, 1998 - "dependencies": { 1999 - "fs.realpath": "^1.0.0", 2000 - "inflight": "^1.0.4", 2001 - "inherits": "2", 2002 - "minimatch": "^3.1.1", 2003 - "once": "^1.3.0", 2004 - "path-is-absolute": "^1.0.0" 2005 - }, 2006 - "engines": { 2007 - "node": "*" 2008 - }, 2009 - "funding": { 2010 - "url": "https://github.com/sponsors/isaacs" 2011 - } 2012 - }, 2013 - "node_modules/glob-parent": { 2014 - "version": "5.1.2", 2015 - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2016 - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2017 - "dev": true, 2018 - "dependencies": { 2019 - "is-glob": "^4.0.1" 2020 - }, 2021 - "engines": { 2022 - "node": ">= 6" 2023 - } 2024 - }, 2025 - "node_modules/globals": { 2026 - "version": "13.22.0", 2027 - "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", 2028 - "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", 2029 - "dev": true, 2030 - "dependencies": { 2031 - "type-fest": "^0.20.2" 2032 - }, 2033 - "engines": { 2034 - "node": ">=8" 2035 - }, 2036 - "funding": { 2037 - "url": "https://github.com/sponsors/sindresorhus" 2038 - } 2039 - }, 2040 - "node_modules/globalyzer": { 2041 - "version": "0.1.0", 2042 - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", 2043 - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", 2044 - "dev": true 2045 - }, 2046 - "node_modules/globby": { 2047 - "version": "11.1.0", 2048 - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", 2049 - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", 2050 - "dev": true, 2051 - "dependencies": { 2052 - "array-union": "^2.1.0", 2053 - "dir-glob": "^3.0.1", 2054 - "fast-glob": "^3.2.9", 2055 - "ignore": "^5.2.0", 2056 - "merge2": "^1.4.1", 2057 - "slash": "^3.0.0" 2058 - }, 2059 - "engines": { 2060 - "node": ">=10" 2061 - }, 2062 - "funding": { 2063 - "url": "https://github.com/sponsors/sindresorhus" 2064 - } 2065 - }, 2066 - "node_modules/globrex": { 2067 - "version": "0.1.2", 2068 - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", 2069 - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", 2070 - "dev": true 2071 - }, 2072 - "node_modules/graceful-fs": { 2073 - "version": "4.2.11", 2074 - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 2075 - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 2076 - "dev": true 2077 - }, 2078 - "node_modules/graphemer": { 2079 - "version": "1.4.0", 2080 - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 2081 - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 2082 - "dev": true 2083 - }, 2084 - "node_modules/has-flag": { 2085 - "version": "4.0.0", 2086 - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2087 - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2088 - "dev": true, 2089 - "engines": { 2090 - "node": ">=8" 2091 - } 2092 - }, 2093 - "node_modules/html-escaper": { 2094 - "version": "2.0.2", 2095 - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", 2096 - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", 2097 - "dev": true 2098 - }, 2099 - "node_modules/ignore": { 2100 - "version": "5.2.4", 2101 - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", 2102 - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", 2103 - "dev": true, 2104 - "engines": { 2105 - "node": ">= 4" 2106 - } 2107 - }, 2108 - "node_modules/immutable": { 2109 - "version": "4.3.4", 2110 - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", 2111 - "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", 2112 - "dev": true 2113 - }, 2114 - "node_modules/import-fresh": { 2115 - "version": "3.3.0", 2116 - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 2117 - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 2118 - "dev": true, 2119 - "dependencies": { 2120 - "parent-module": "^1.0.0", 2121 - "resolve-from": "^4.0.0" 2122 - }, 2123 - "engines": { 2124 - "node": ">=6" 2125 - }, 2126 - "funding": { 2127 - "url": "https://github.com/sponsors/sindresorhus" 2128 - } 2129 - }, 2130 - "node_modules/imurmurhash": { 2131 - "version": "0.1.4", 2132 - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 2133 - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 2134 - "dev": true, 2135 - "engines": { 2136 - "node": ">=0.8.19" 2137 - } 2138 - }, 2139 - "node_modules/inflight": { 2140 - "version": "1.0.6", 2141 - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2142 - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 2143 - "dev": true, 2144 - "dependencies": { 2145 - "once": "^1.3.0", 2146 - "wrappy": "1" 2147 - } 2148 - }, 2149 - "node_modules/inherits": { 2150 - "version": "2.0.4", 2151 - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2152 - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 2153 - "dev": true 2154 - }, 2155 - "node_modules/is-binary-path": { 2156 - "version": "2.1.0", 2157 - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 2158 - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 2159 - "dev": true, 2160 - "dependencies": { 2161 - "binary-extensions": "^2.0.0" 2162 - }, 2163 - "engines": { 2164 - "node": ">=8" 2165 - } 2166 - }, 2167 - "node_modules/is-extglob": { 2168 - "version": "2.1.1", 2169 - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2170 - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 2171 - "dev": true, 2172 - "engines": { 2173 - "node": ">=0.10.0" 2174 - } 2175 - }, 2176 - "node_modules/is-glob": { 2177 - "version": "4.0.3", 2178 - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2179 - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2180 - "dev": true, 2181 - "dependencies": { 2182 - "is-extglob": "^2.1.1" 2183 - }, 2184 - "engines": { 2185 - "node": ">=0.10.0" 2186 - } 2187 - }, 2188 - "node_modules/is-number": { 2189 - "version": "7.0.0", 2190 - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2191 - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2192 - "dev": true, 2193 - "engines": { 2194 - "node": ">=0.12.0" 2195 - } 2196 - }, 2197 - "node_modules/is-path-inside": { 2198 - "version": "3.0.3", 2199 - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 2200 - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 2201 - "dev": true, 2202 - "engines": { 2203 - "node": ">=8" 2204 - } 2205 - }, 2206 - "node_modules/is-reference": { 2207 - "version": "3.0.2", 2208 - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", 2209 - "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", 2210 - "dev": true, 2211 - "dependencies": { 2212 - "@types/estree": "*" 2213 - } 2214 - }, 2215 - "node_modules/isexe": { 2216 - "version": "2.0.0", 2217 - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2218 - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 2219 - "dev": true 2220 - }, 2221 - "node_modules/istanbul-lib-coverage": { 2222 - "version": "3.2.0", 2223 - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", 2224 - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", 2225 - "dev": true, 2226 - "engines": { 2227 - "node": ">=8" 2228 - } 2229 - }, 2230 - "node_modules/istanbul-lib-report": { 2231 - "version": "3.0.1", 2232 - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", 2233 - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", 2234 - "dev": true, 2235 - "dependencies": { 2236 - "istanbul-lib-coverage": "^3.0.0", 2237 - "make-dir": "^4.0.0", 2238 - "supports-color": "^7.1.0" 2239 - }, 2240 - "engines": { 2241 - "node": ">=10" 2242 - } 2243 - }, 2244 - "node_modules/istanbul-lib-source-maps": { 2245 - "version": "4.0.1", 2246 - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", 2247 - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", 2248 - "dev": true, 2249 - "dependencies": { 2250 - "debug": "^4.1.1", 2251 - "istanbul-lib-coverage": "^3.0.0", 2252 - "source-map": "^0.6.1" 2253 - }, 2254 - "engines": { 2255 - "node": ">=10" 2256 - } 2257 - }, 2258 - "node_modules/istanbul-reports": { 2259 - "version": "3.1.6", 2260 - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", 2261 - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", 2262 - "dev": true, 2263 - "dependencies": { 2264 - "html-escaper": "^2.0.0", 2265 - "istanbul-lib-report": "^3.0.0" 2266 - }, 2267 - "engines": { 2268 - "node": ">=8" 2269 - } 2270 - }, 2271 - "node_modules/js-yaml": { 2272 - "version": "4.1.0", 2273 - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2274 - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2275 - "dev": true, 2276 - "dependencies": { 2277 - "argparse": "^2.0.1" 2278 - }, 2279 - "bin": { 2280 - "js-yaml": "bin/js-yaml.js" 2281 - } 2282 - }, 2283 - "node_modules/json-buffer": { 2284 - "version": "3.0.1", 2285 - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 2286 - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 2287 - "dev": true 2288 - }, 2289 - "node_modules/json-schema-traverse": { 2290 - "version": "0.4.1", 2291 - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2292 - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2293 - "dev": true 2294 - }, 2295 - "node_modules/json-stable-stringify-without-jsonify": { 2296 - "version": "1.0.1", 2297 - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 2298 - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 2299 - "dev": true 2300 - }, 2301 - "node_modules/jsonc-parser": { 2302 - "version": "3.2.0", 2303 - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", 2304 - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", 2305 - "dev": true 2306 - }, 2307 - "node_modules/keyv": { 2308 - "version": "4.5.3", 2309 - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", 2310 - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", 2311 - "dev": true, 2312 - "dependencies": { 2313 - "json-buffer": "3.0.1" 2314 - } 2315 - }, 2316 - "node_modules/kleur": { 2317 - "version": "4.1.5", 2318 - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", 2319 - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", 2320 - "dev": true, 2321 - "engines": { 2322 - "node": ">=6" 2323 - } 2324 - }, 2325 - "node_modules/known-css-properties": { 2326 - "version": "0.28.0", 2327 - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.28.0.tgz", 2328 - "integrity": "sha512-9pSL5XB4J+ifHP0e0jmmC98OGC1nL8/JjS+fi6mnTlIf//yt/MfVLtKg7S6nCtj/8KTcWX7nRlY0XywoYY1ISQ==", 2329 - "dev": true 2330 - }, 2331 - "node_modules/levn": { 2332 - "version": "0.4.1", 2333 - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 2334 - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 2335 - "dev": true, 2336 - "dependencies": { 2337 - "prelude-ls": "^1.2.1", 2338 - "type-check": "~0.4.0" 2339 - }, 2340 - "engines": { 2341 - "node": ">= 0.8.0" 2342 - } 2343 - }, 2344 - "node_modules/lilconfig": { 2345 - "version": "2.1.0", 2346 - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", 2347 - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", 2348 - "dev": true, 2349 - "engines": { 2350 - "node": ">=10" 2351 - } 2352 - }, 2353 - "node_modules/local-pkg": { 2354 - "version": "0.4.3", 2355 - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", 2356 - "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", 2357 - "dev": true, 2358 - "engines": { 2359 - "node": ">=14" 2360 - }, 2361 - "funding": { 2362 - "url": "https://github.com/sponsors/antfu" 2363 - } 2364 - }, 2365 - "node_modules/locate-character": { 2366 - "version": "3.0.0", 2367 - "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", 2368 - "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", 2369 - "dev": true 2370 - }, 2371 - "node_modules/locate-path": { 2372 - "version": "6.0.0", 2373 - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 2374 - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 2375 - "dev": true, 2376 - "dependencies": { 2377 - "p-locate": "^5.0.0" 2378 - }, 2379 - "engines": { 2380 - "node": ">=10" 2381 - }, 2382 - "funding": { 2383 - "url": "https://github.com/sponsors/sindresorhus" 2384 - } 2385 - }, 2386 - "node_modules/lodash.merge": { 2387 - "version": "4.6.2", 2388 - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 2389 - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 2390 - "dev": true 2391 - }, 2392 - "node_modules/loupe": { 2393 - "version": "2.3.6", 2394 - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", 2395 - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", 2396 - "dev": true, 2397 - "dependencies": { 2398 - "get-func-name": "^2.0.0" 2399 - } 2400 - }, 2401 - "node_modules/lower-case": { 2402 - "version": "2.0.2", 2403 - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", 2404 - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", 2405 - "dev": true, 2406 - "dependencies": { 2407 - "tslib": "^2.0.3" 2408 - } 2409 - }, 2410 - "node_modules/lru-cache": { 2411 - "version": "6.0.0", 2412 - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 2413 - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 2414 - "dev": true, 2415 - "dependencies": { 2416 - "yallist": "^4.0.0" 2417 - }, 2418 - "engines": { 2419 - "node": ">=10" 2420 - } 2421 - }, 2422 - "node_modules/magic-string": { 2423 - "version": "0.30.3", 2424 - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz", 2425 - "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==", 2426 - "dev": true, 2427 - "dependencies": { 2428 - "@jridgewell/sourcemap-codec": "^1.4.15" 2429 - }, 2430 - "engines": { 2431 - "node": ">=12" 2432 - } 2433 - }, 2434 - "node_modules/make-dir": { 2435 - "version": "4.0.0", 2436 - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", 2437 - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", 2438 - "dev": true, 2439 - "dependencies": { 2440 - "semver": "^7.5.3" 2441 - }, 2442 - "engines": { 2443 - "node": ">=10" 2444 - }, 2445 - "funding": { 2446 - "url": "https://github.com/sponsors/sindresorhus" 2447 - } 2448 - }, 2449 - "node_modules/mdn-data": { 2450 - "version": "2.0.30", 2451 - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", 2452 - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", 2453 - "dev": true 2454 - }, 2455 - "node_modules/mdsvex": { 2456 - "version": "0.11.0", 2457 - "resolved": "https://registry.npmjs.org/mdsvex/-/mdsvex-0.11.0.tgz", 2458 - "integrity": "sha512-gJF1s0N2nCmdxcKn8HDn0LKrN8poStqAicp6bBcsKFd/zkUBGLP5e7vnxu+g0pjBbDFOscUyI1mtHz+YK2TCDw==", 2459 - "dev": true, 2460 - "dependencies": { 2461 - "@types/unist": "^2.0.3", 2462 - "prism-svelte": "^0.4.7", 2463 - "prismjs": "^1.17.1", 2464 - "vfile-message": "^2.0.4" 2465 - }, 2466 - "peerDependencies": { 2467 - "svelte": ">=3 <5" 2468 - } 2469 - }, 2470 - "node_modules/merge2": { 2471 - "version": "1.4.1", 2472 - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 2473 - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 2474 - "dev": true, 2475 - "engines": { 2476 - "node": ">= 8" 2477 - } 2478 - }, 2479 - "node_modules/micromatch": { 2480 - "version": "4.0.5", 2481 - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 2482 - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 2483 - "dev": true, 2484 - "dependencies": { 2485 - "braces": "^3.0.2", 2486 - "picomatch": "^2.3.1" 2487 - }, 2488 - "engines": { 2489 - "node": ">=8.6" 2490 - } 2491 - }, 2492 - "node_modules/mime": { 2493 - "version": "3.0.0", 2494 - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", 2495 - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", 2496 - "dev": true, 2497 - "bin": { 2498 - "mime": "cli.js" 2499 - }, 2500 - "engines": { 2501 - "node": ">=10.0.0" 2502 - } 2503 - }, 2504 - "node_modules/min-indent": { 2505 - "version": "1.0.1", 2506 - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", 2507 - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", 2508 - "dev": true, 2509 - "engines": { 2510 - "node": ">=4" 2511 - } 2512 - }, 2513 - "node_modules/minimatch": { 2514 - "version": "3.1.2", 2515 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2516 - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2517 - "dev": true, 2518 - "dependencies": { 2519 - "brace-expansion": "^1.1.7" 2520 - }, 2521 - "engines": { 2522 - "node": "*" 2523 - } 2524 - }, 2525 - "node_modules/minimist": { 2526 - "version": "1.2.8", 2527 - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 2528 - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 2529 - "dev": true, 2530 - "funding": { 2531 - "url": "https://github.com/sponsors/ljharb" 2532 - } 2533 - }, 2534 - "node_modules/mkdirp": { 2535 - "version": "0.5.6", 2536 - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", 2537 - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", 2538 - "dev": true, 2539 - "dependencies": { 2540 - "minimist": "^1.2.6" 2541 - }, 2542 - "bin": { 2543 - "mkdirp": "bin/cmd.js" 2544 - } 2545 - }, 2546 - "node_modules/mlly": { 2547 - "version": "1.4.2", 2548 - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz", 2549 - "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", 2550 - "dev": true, 2551 - "dependencies": { 2552 - "acorn": "^8.10.0", 2553 - "pathe": "^1.1.1", 2554 - "pkg-types": "^1.0.3", 2555 - "ufo": "^1.3.0" 2556 - } 2557 - }, 2558 - "node_modules/mri": { 2559 - "version": "1.2.0", 2560 - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", 2561 - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", 2562 - "dev": true, 2563 - "engines": { 2564 - "node": ">=4" 2565 - } 2566 - }, 2567 - "node_modules/mrmime": { 2568 - "version": "1.0.1", 2569 - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", 2570 - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", 2571 - "dev": true, 2572 - "engines": { 2573 - "node": ">=10" 2574 - } 2575 - }, 2576 - "node_modules/ms": { 2577 - "version": "2.1.2", 2578 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2579 - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2580 - "dev": true 2581 - }, 2582 - "node_modules/nanoid": { 2583 - "version": "3.3.6", 2584 - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", 2585 - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", 2586 - "dev": true, 2587 - "funding": [ 2588 - { 2589 - "type": "github", 2590 - "url": "https://github.com/sponsors/ai" 2591 - } 2592 - ], 2593 - "bin": { 2594 - "nanoid": "bin/nanoid.cjs" 2595 - }, 2596 - "engines": { 2597 - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 2598 - } 2599 - }, 2600 - "node_modules/natural-compare": { 2601 - "version": "1.4.0", 2602 - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2603 - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 2604 - "dev": true 2605 - }, 2606 - "node_modules/no-case": { 2607 - "version": "3.0.4", 2608 - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", 2609 - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", 2610 - "dev": true, 2611 - "dependencies": { 2612 - "lower-case": "^2.0.2", 2613 - "tslib": "^2.0.3" 2614 - } 2615 - }, 2616 - "node_modules/normalize-path": { 2617 - "version": "3.0.0", 2618 - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 2619 - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 2620 - "dev": true, 2621 - "engines": { 2622 - "node": ">=0.10.0" 2623 - } 2624 - }, 2625 - "node_modules/once": { 2626 - "version": "1.4.0", 2627 - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2628 - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2629 - "dev": true, 2630 - "dependencies": { 2631 - "wrappy": "1" 2632 - } 2633 - }, 2634 - "node_modules/optionator": { 2635 - "version": "0.9.3", 2636 - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", 2637 - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", 2638 - "dev": true, 2639 - "dependencies": { 2640 - "@aashutoshrathi/word-wrap": "^1.2.3", 2641 - "deep-is": "^0.1.3", 2642 - "fast-levenshtein": "^2.0.6", 2643 - "levn": "^0.4.1", 2644 - "prelude-ls": "^1.2.1", 2645 - "type-check": "^0.4.0" 2646 - }, 2647 - "engines": { 2648 - "node": ">= 0.8.0" 2649 - } 2650 - }, 2651 - "node_modules/p-limit": { 2652 - "version": "3.1.0", 2653 - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 2654 - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 2655 - "dev": true, 2656 - "dependencies": { 2657 - "yocto-queue": "^0.1.0" 2658 - }, 2659 - "engines": { 2660 - "node": ">=10" 2661 - }, 2662 - "funding": { 2663 - "url": "https://github.com/sponsors/sindresorhus" 2664 - } 2665 - }, 2666 - "node_modules/p-locate": { 2667 - "version": "5.0.0", 2668 - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 2669 - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 2670 - "dev": true, 2671 - "dependencies": { 2672 - "p-limit": "^3.0.2" 2673 - }, 2674 - "engines": { 2675 - "node": ">=10" 2676 - }, 2677 - "funding": { 2678 - "url": "https://github.com/sponsors/sindresorhus" 2679 - } 2680 - }, 2681 - "node_modules/parent-module": { 2682 - "version": "1.0.1", 2683 - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2684 - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2685 - "dev": true, 2686 - "dependencies": { 2687 - "callsites": "^3.0.0" 2688 - }, 2689 - "engines": { 2690 - "node": ">=6" 2691 - } 2692 - }, 2693 - "node_modules/pascal-case": { 2694 - "version": "3.1.2", 2695 - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", 2696 - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", 2697 - "dev": true, 2698 - "dependencies": { 2699 - "no-case": "^3.0.4", 2700 - "tslib": "^2.0.3" 2701 - } 2702 - }, 2703 - "node_modules/path-exists": { 2704 - "version": "4.0.0", 2705 - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2706 - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2707 - "dev": true, 2708 - "engines": { 2709 - "node": ">=8" 2710 - } 2711 - }, 2712 - "node_modules/path-is-absolute": { 2713 - "version": "1.0.1", 2714 - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2715 - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 2716 - "dev": true, 2717 - "engines": { 2718 - "node": ">=0.10.0" 2719 - } 2720 - }, 2721 - "node_modules/path-key": { 2722 - "version": "3.1.1", 2723 - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2724 - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2725 - "dev": true, 2726 - "engines": { 2727 - "node": ">=8" 2728 - } 2729 - }, 2730 - "node_modules/path-type": { 2731 - "version": "4.0.0", 2732 - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 2733 - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 2734 - "dev": true, 2735 - "engines": { 2736 - "node": ">=8" 2737 - } 2738 - }, 2739 - "node_modules/pathe": { 2740 - "version": "1.1.1", 2741 - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", 2742 - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", 2743 - "dev": true 2744 - }, 2745 - "node_modules/pathval": { 2746 - "version": "1.1.1", 2747 - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", 2748 - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", 2749 - "dev": true, 2750 - "engines": { 2751 - "node": "*" 2752 - } 2753 - }, 2754 - "node_modules/periscopic": { 2755 - "version": "3.1.0", 2756 - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", 2757 - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", 2758 - "dev": true, 2759 - "dependencies": { 2760 - "@types/estree": "^1.0.0", 2761 - "estree-walker": "^3.0.0", 2762 - "is-reference": "^3.0.0" 2763 - } 2764 - }, 2765 - "node_modules/picocolors": { 2766 - "version": "1.0.0", 2767 - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 2768 - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 2769 - "dev": true 2770 - }, 2771 - "node_modules/picomatch": { 2772 - "version": "2.3.1", 2773 - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2774 - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2775 - "dev": true, 2776 - "engines": { 2777 - "node": ">=8.6" 2778 - }, 2779 - "funding": { 2780 - "url": "https://github.com/sponsors/jonschlinkert" 2781 - } 2782 - }, 2783 - "node_modules/pkg-types": { 2784 - "version": "1.0.3", 2785 - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", 2786 - "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", 2787 - "dev": true, 2788 - "dependencies": { 2789 - "jsonc-parser": "^3.2.0", 2790 - "mlly": "^1.2.0", 2791 - "pathe": "^1.1.0" 2792 - } 2793 - }, 2794 - "node_modules/postcss": { 2795 - "version": "8.4.30", 2796 - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.30.tgz", 2797 - "integrity": "sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==", 2798 - "dev": true, 2799 - "funding": [ 2800 - { 2801 - "type": "opencollective", 2802 - "url": "https://opencollective.com/postcss/" 2803 - }, 2804 - { 2805 - "type": "tidelift", 2806 - "url": "https://tidelift.com/funding/github/npm/postcss" 2807 - }, 2808 - { 2809 - "type": "github", 2810 - "url": "https://github.com/sponsors/ai" 2811 - } 2812 - ], 2813 - "dependencies": { 2814 - "nanoid": "^3.3.6", 2815 - "picocolors": "^1.0.0", 2816 - "source-map-js": "^1.0.2" 2817 - }, 2818 - "engines": { 2819 - "node": "^10 || ^12 || >=14" 2820 - } 2821 - }, 2822 - "node_modules/postcss-load-config": { 2823 - "version": "3.1.4", 2824 - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", 2825 - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", 2826 - "dev": true, 2827 - "dependencies": { 2828 - "lilconfig": "^2.0.5", 2829 - "yaml": "^1.10.2" 2830 - }, 2831 - "engines": { 2832 - "node": ">= 10" 2833 - }, 2834 - "funding": { 2835 - "type": "opencollective", 2836 - "url": "https://opencollective.com/postcss/" 2837 - }, 2838 - "peerDependencies": { 2839 - "postcss": ">=8.0.9", 2840 - "ts-node": ">=9.0.0" 2841 - }, 2842 - "peerDependenciesMeta": { 2843 - "postcss": { 2844 - "optional": true 2845 - }, 2846 - "ts-node": { 2847 - "optional": true 2848 - } 2849 - } 2850 - }, 2851 - "node_modules/postcss-safe-parser": { 2852 - "version": "6.0.0", 2853 - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", 2854 - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", 2855 - "dev": true, 2856 - "engines": { 2857 - "node": ">=12.0" 2858 - }, 2859 - "funding": { 2860 - "type": "opencollective", 2861 - "url": "https://opencollective.com/postcss/" 2862 - }, 2863 - "peerDependencies": { 2864 - "postcss": "^8.3.3" 2865 - } 2866 - }, 2867 - "node_modules/postcss-scss": { 2868 - "version": "4.0.8", 2869 - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.8.tgz", 2870 - "integrity": "sha512-Cr0X8Eu7xMhE96PJck6ses/uVVXDtE5ghUTKNUYgm8ozgP2TkgV3LWs3WgLV1xaSSLq8ZFiXaUrj0LVgG1fGEA==", 2871 - "dev": true, 2872 - "funding": [ 2873 - { 2874 - "type": "opencollective", 2875 - "url": "https://opencollective.com/postcss/" 2876 - }, 2877 - { 2878 - "type": "tidelift", 2879 - "url": "https://tidelift.com/funding/github/npm/postcss-scss" 2880 - }, 2881 - { 2882 - "type": "github", 2883 - "url": "https://github.com/sponsors/ai" 2884 - } 2885 - ], 2886 - "engines": { 2887 - "node": ">=12.0" 2888 - }, 2889 - "peerDependencies": { 2890 - "postcss": "^8.4.29" 2891 - } 2892 - }, 2893 - "node_modules/postcss-selector-parser": { 2894 - "version": "6.0.13", 2895 - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", 2896 - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", 2897 - "dev": true, 2898 - "dependencies": { 2899 - "cssesc": "^3.0.0", 2900 - "util-deprecate": "^1.0.2" 2901 - }, 2902 - "engines": { 2903 - "node": ">=4" 2904 - } 2905 - }, 2906 - "node_modules/prelude-ls": { 2907 - "version": "1.2.1", 2908 - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 2909 - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 2910 - "dev": true, 2911 - "engines": { 2912 - "node": ">= 0.8.0" 2913 - } 2914 - }, 2915 - "node_modules/prettier": { 2916 - "version": "2.8.8", 2917 - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", 2918 - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", 2919 - "dev": true, 2920 - "bin": { 2921 - "prettier": "bin-prettier.js" 2922 - }, 2923 - "engines": { 2924 - "node": ">=10.13.0" 2925 - }, 2926 - "funding": { 2927 - "url": "https://github.com/prettier/prettier?sponsor=1" 2928 - } 2929 - }, 2930 - "node_modules/prettier-plugin-svelte": { 2931 - "version": "2.10.1", 2932 - "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.10.1.tgz", 2933 - "integrity": "sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==", 2934 - "dev": true, 2935 - "peerDependencies": { 2936 - "prettier": "^1.16.4 || ^2.0.0", 2937 - "svelte": "^3.2.0 || ^4.0.0-next.0" 2938 - } 2939 - }, 2940 - "node_modules/pretty-format": { 2941 - "version": "29.7.0", 2942 - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", 2943 - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", 2944 - "dev": true, 2945 - "dependencies": { 2946 - "@jest/schemas": "^29.6.3", 2947 - "ansi-styles": "^5.0.0", 2948 - "react-is": "^18.0.0" 2949 - }, 2950 - "engines": { 2951 - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2952 - } 2953 - }, 2954 - "node_modules/pretty-format/node_modules/ansi-styles": { 2955 - "version": "5.2.0", 2956 - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", 2957 - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", 2958 - "dev": true, 2959 - "engines": { 2960 - "node": ">=10" 2961 - }, 2962 - "funding": { 2963 - "url": "https://github.com/chalk/ansi-styles?sponsor=1" 2964 - } 2965 - }, 2966 - "node_modules/prism-svelte": { 2967 - "version": "0.4.7", 2968 - "resolved": "https://registry.npmjs.org/prism-svelte/-/prism-svelte-0.4.7.tgz", 2969 - "integrity": "sha512-yABh19CYbM24V7aS7TuPYRNMqthxwbvx6FF/Rw920YbyBWO3tnyPIqRMgHuSVsLmuHkkBS1Akyof463FVdkeDQ==", 2970 - "dev": true 2971 - }, 2972 - "node_modules/prismjs": { 2973 - "version": "1.29.0", 2974 - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", 2975 - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", 2976 - "dev": true, 2977 - "engines": { 2978 - "node": ">=6" 2979 - } 2980 - }, 2981 - "node_modules/punycode": { 2982 - "version": "2.3.0", 2983 - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 2984 - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 2985 - "dev": true, 2986 - "engines": { 2987 - "node": ">=6" 2988 - } 2989 - }, 2990 - "node_modules/queue-microtask": { 2991 - "version": "1.2.3", 2992 - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2993 - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2994 - "dev": true, 2995 - "funding": [ 2996 - { 2997 - "type": "github", 2998 - "url": "https://github.com/sponsors/feross" 2999 - }, 3000 - { 3001 - "type": "patreon", 3002 - "url": "https://www.patreon.com/feross" 3003 - }, 3004 - { 3005 - "type": "consulting", 3006 - "url": "https://feross.org/support" 3007 - } 3008 - ] 3009 - }, 3010 - "node_modules/react-is": { 3011 - "version": "18.2.0", 3012 - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", 3013 - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", 3014 - "dev": true 3015 - }, 3016 - "node_modules/readdirp": { 3017 - "version": "3.6.0", 3018 - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 3019 - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 3020 - "dev": true, 3021 - "dependencies": { 3022 - "picomatch": "^2.2.1" 3023 - }, 3024 - "engines": { 3025 - "node": ">=8.10.0" 3026 - } 3027 - }, 3028 - "node_modules/regenerator-runtime": { 3029 - "version": "0.14.0", 3030 - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", 3031 - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", 3032 - "dev": true 3033 - }, 3034 - "node_modules/resolve-from": { 3035 - "version": "4.0.0", 3036 - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 3037 - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 3038 - "dev": true, 3039 - "engines": { 3040 - "node": ">=4" 3041 - } 3042 - }, 3043 - "node_modules/reusify": { 3044 - "version": "1.0.4", 3045 - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 3046 - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 3047 - "dev": true, 3048 - "engines": { 3049 - "iojs": ">=1.0.0", 3050 - "node": ">=0.10.0" 3051 - } 3052 - }, 3053 - "node_modules/rimraf": { 3054 - "version": "3.0.2", 3055 - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 3056 - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 3057 - "dev": true, 3058 - "dependencies": { 3059 - "glob": "^7.1.3" 3060 - }, 3061 - "bin": { 3062 - "rimraf": "bin.js" 3063 - }, 3064 - "funding": { 3065 - "url": "https://github.com/sponsors/isaacs" 3066 - } 3067 - }, 3068 - "node_modules/rollup": { 3069 - "version": "3.29.2", 3070 - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.2.tgz", 3071 - "integrity": "sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A==", 3072 - "dev": true, 3073 - "bin": { 3074 - "rollup": "dist/bin/rollup" 3075 - }, 3076 - "engines": { 3077 - "node": ">=14.18.0", 3078 - "npm": ">=8.0.0" 3079 - }, 3080 - "optionalDependencies": { 3081 - "fsevents": "~2.3.2" 3082 - } 3083 - }, 3084 - "node_modules/run-parallel": { 3085 - "version": "1.2.0", 3086 - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 3087 - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 3088 - "dev": true, 3089 - "funding": [ 3090 - { 3091 - "type": "github", 3092 - "url": "https://github.com/sponsors/feross" 3093 - }, 3094 - { 3095 - "type": "patreon", 3096 - "url": "https://www.patreon.com/feross" 3097 - }, 3098 - { 3099 - "type": "consulting", 3100 - "url": "https://feross.org/support" 3101 - } 3102 - ], 3103 - "dependencies": { 3104 - "queue-microtask": "^1.2.2" 3105 - } 3106 - }, 3107 - "node_modules/sade": { 3108 - "version": "1.8.1", 3109 - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", 3110 - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", 3111 - "dev": true, 3112 - "dependencies": { 3113 - "mri": "^1.1.0" 3114 - }, 3115 - "engines": { 3116 - "node": ">=6" 3117 - } 3118 - }, 3119 - "node_modules/sander": { 3120 - "version": "0.5.1", 3121 - "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", 3122 - "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", 3123 - "dev": true, 3124 - "dependencies": { 3125 - "es6-promise": "^3.1.2", 3126 - "graceful-fs": "^4.1.3", 3127 - "mkdirp": "^0.5.1", 3128 - "rimraf": "^2.5.2" 3129 - } 3130 - }, 3131 - "node_modules/sander/node_modules/rimraf": { 3132 - "version": "2.7.1", 3133 - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 3134 - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 3135 - "dev": true, 3136 - "dependencies": { 3137 - "glob": "^7.1.3" 3138 - }, 3139 - "bin": { 3140 - "rimraf": "bin.js" 3141 - } 3142 - }, 3143 - "node_modules/sass": { 3144 - "version": "1.68.0", 3145 - "resolved": "https://registry.npmjs.org/sass/-/sass-1.68.0.tgz", 3146 - "integrity": "sha512-Lmj9lM/fef0nQswm1J2HJcEsBUba4wgNx2fea6yJHODREoMFnwRpZydBnX/RjyXw2REIwdkbqE4hrTo4qfDBUA==", 3147 - "dev": true, 3148 - "dependencies": { 3149 - "chokidar": ">=3.0.0 <4.0.0", 3150 - "immutable": "^4.0.0", 3151 - "source-map-js": ">=0.6.2 <2.0.0" 3152 - }, 3153 - "bin": { 3154 - "sass": "sass.js" 3155 - }, 3156 - "engines": { 3157 - "node": ">=14.0.0" 3158 - } 3159 - }, 3160 - "node_modules/semver": { 3161 - "version": "7.5.4", 3162 - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", 3163 - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", 3164 - "dev": true, 3165 - "dependencies": { 3166 - "lru-cache": "^6.0.0" 3167 - }, 3168 - "bin": { 3169 - "semver": "bin/semver.js" 3170 - }, 3171 - "engines": { 3172 - "node": ">=10" 3173 - } 3174 - }, 3175 - "node_modules/set-cookie-parser": { 3176 - "version": "2.6.0", 3177 - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", 3178 - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", 3179 - "dev": true 3180 - }, 3181 - "node_modules/shebang-command": { 3182 - "version": "2.0.0", 3183 - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 3184 - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 3185 - "dev": true, 3186 - "dependencies": { 3187 - "shebang-regex": "^3.0.0" 3188 - }, 3189 - "engines": { 3190 - "node": ">=8" 3191 - } 3192 - }, 3193 - "node_modules/shebang-regex": { 3194 - "version": "3.0.0", 3195 - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 3196 - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 3197 - "dev": true, 3198 - "engines": { 3199 - "node": ">=8" 3200 - } 3201 - }, 3202 - "node_modules/siginfo": { 3203 - "version": "2.0.0", 3204 - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", 3205 - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", 3206 - "dev": true 3207 - }, 3208 - "node_modules/sirv": { 3209 - "version": "2.0.3", 3210 - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", 3211 - "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", 3212 - "dev": true, 3213 - "dependencies": { 3214 - "@polka/url": "^1.0.0-next.20", 3215 - "mrmime": "^1.0.0", 3216 - "totalist": "^3.0.0" 3217 - }, 3218 - "engines": { 3219 - "node": ">= 10" 3220 - } 3221 - }, 3222 - "node_modules/slash": { 3223 - "version": "3.0.0", 3224 - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 3225 - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 3226 - "dev": true, 3227 - "engines": { 3228 - "node": ">=8" 3229 - } 3230 - }, 3231 - "node_modules/sorcery": { 3232 - "version": "0.11.0", 3233 - "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz", 3234 - "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==", 3235 - "dev": true, 3236 - "dependencies": { 3237 - "@jridgewell/sourcemap-codec": "^1.4.14", 3238 - "buffer-crc32": "^0.2.5", 3239 - "minimist": "^1.2.0", 3240 - "sander": "^0.5.0" 3241 - }, 3242 - "bin": { 3243 - "sorcery": "bin/sorcery" 3244 - } 3245 - }, 3246 - "node_modules/source-map": { 3247 - "version": "0.6.1", 3248 - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3249 - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3250 - "dev": true, 3251 - "engines": { 3252 - "node": ">=0.10.0" 3253 - } 3254 - }, 3255 - "node_modules/source-map-js": { 3256 - "version": "1.0.2", 3257 - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 3258 - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 3259 - "dev": true, 3260 - "engines": { 3261 - "node": ">=0.10.0" 3262 - } 3263 - }, 3264 - "node_modules/stackback": { 3265 - "version": "0.0.2", 3266 - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", 3267 - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", 3268 - "dev": true 3269 - }, 3270 - "node_modules/std-env": { 3271 - "version": "3.4.3", 3272 - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.4.3.tgz", 3273 - "integrity": "sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==", 3274 - "dev": true 3275 - }, 3276 - "node_modules/streamsearch": { 3277 - "version": "1.1.0", 3278 - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", 3279 - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", 3280 - "dev": true, 3281 - "engines": { 3282 - "node": ">=10.0.0" 3283 - } 3284 - }, 3285 - "node_modules/strip-ansi": { 3286 - "version": "6.0.1", 3287 - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3288 - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3289 - "dev": true, 3290 - "dependencies": { 3291 - "ansi-regex": "^5.0.1" 3292 - }, 3293 - "engines": { 3294 - "node": ">=8" 3295 - } 3296 - }, 3297 - "node_modules/strip-indent": { 3298 - "version": "3.0.0", 3299 - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", 3300 - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", 3301 - "dev": true, 3302 - "dependencies": { 3303 - "min-indent": "^1.0.0" 3304 - }, 3305 - "engines": { 3306 - "node": ">=8" 3307 - } 3308 - }, 3309 - "node_modules/strip-json-comments": { 3310 - "version": "3.1.1", 3311 - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 3312 - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 3313 - "dev": true, 3314 - "engines": { 3315 - "node": ">=8" 3316 - }, 3317 - "funding": { 3318 - "url": "https://github.com/sponsors/sindresorhus" 3319 - } 3320 - }, 3321 - "node_modules/strip-literal": { 3322 - "version": "1.3.0", 3323 - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", 3324 - "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", 3325 - "dev": true, 3326 - "dependencies": { 3327 - "acorn": "^8.10.0" 3328 - }, 3329 - "funding": { 3330 - "url": "https://github.com/sponsors/antfu" 3331 - } 3332 - }, 3333 - "node_modules/supports-color": { 3334 - "version": "7.2.0", 3335 - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3336 - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3337 - "dev": true, 3338 - "dependencies": { 3339 - "has-flag": "^4.0.0" 3340 - }, 3341 - "engines": { 3342 - "node": ">=8" 3343 - } 3344 - }, 3345 - "node_modules/svelte": { 3346 - "version": "4.2.1", 3347 - "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.1.tgz", 3348 - "integrity": "sha512-LpLqY2Jr7cRxkrTc796/AaaoMLF/1ax7cto8Ot76wrvKQhrPmZ0JgajiWPmg9mTSDqO16SSLiD17r9MsvAPTmw==", 3349 - "dev": true, 3350 - "dependencies": { 3351 - "@ampproject/remapping": "^2.2.1", 3352 - "@jridgewell/sourcemap-codec": "^1.4.15", 3353 - "@jridgewell/trace-mapping": "^0.3.18", 3354 - "acorn": "^8.9.0", 3355 - "aria-query": "^5.3.0", 3356 - "axobject-query": "^3.2.1", 3357 - "code-red": "^1.0.3", 3358 - "css-tree": "^2.3.1", 3359 - "estree-walker": "^3.0.3", 3360 - "is-reference": "^3.0.1", 3361 - "locate-character": "^3.0.0", 3362 - "magic-string": "^0.30.0", 3363 - "periscopic": "^3.1.0" 3364 - }, 3365 - "engines": { 3366 - "node": ">=16" 3367 - } 3368 - }, 3369 - "node_modules/svelte-check": { 3370 - "version": "3.5.2", 3371 - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.5.2.tgz", 3372 - "integrity": "sha512-5a/YWbiH4c+AqAUP+0VneiV5bP8YOk9JL3jwvN+k2PEPLgpu85bjQc5eE67+eIZBBwUEJzmO3I92OqKcqbp3fw==", 3373 - "dev": true, 3374 - "dependencies": { 3375 - "@jridgewell/trace-mapping": "^0.3.17", 3376 - "chokidar": "^3.4.1", 3377 - "fast-glob": "^3.2.7", 3378 - "import-fresh": "^3.2.1", 3379 - "picocolors": "^1.0.0", 3380 - "sade": "^1.7.4", 3381 - "svelte-preprocess": "^5.0.4", 3382 - "typescript": "^5.0.3" 3383 - }, 3384 - "bin": { 3385 - "svelte-check": "bin/svelte-check" 3386 - }, 3387 - "peerDependencies": { 3388 - "svelte": "^3.55.0 || ^4.0.0-next.0 || ^4.0.0" 3389 - } 3390 - }, 3391 - "node_modules/svelte-eslint-parser": { 3392 - "version": "0.33.0", 3393 - "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.33.0.tgz", 3394 - "integrity": "sha512-5awZ6Bs+Tb/zQwa41PSdcLynAVQTwW0HGyCBjtbAQ59taLZqDgQSMzRlDmapjZdDtzERm0oXDZNE0E+PKJ6ryg==", 3395 - "dev": true, 3396 - "dependencies": { 3397 - "eslint-scope": "^7.0.0", 3398 - "eslint-visitor-keys": "^3.0.0", 3399 - "espree": "^9.0.0", 3400 - "postcss": "^8.4.28", 3401 - "postcss-scss": "^4.0.7" 3402 - }, 3403 - "engines": { 3404 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 3405 - }, 3406 - "funding": { 3407 - "url": "https://github.com/sponsors/ota-meshi" 3408 - }, 3409 - "peerDependencies": { 3410 - "svelte": "^3.37.0 || ^4.0.0" 3411 - }, 3412 - "peerDependenciesMeta": { 3413 - "svelte": { 3414 - "optional": true 3415 - } 3416 - } 3417 - }, 3418 - "node_modules/svelte-hmr": { 3419 - "version": "0.15.3", 3420 - "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", 3421 - "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==", 3422 - "dev": true, 3423 - "engines": { 3424 - "node": "^12.20 || ^14.13.1 || >= 16" 3425 - }, 3426 - "peerDependencies": { 3427 - "svelte": "^3.19.0 || ^4.0.0" 3428 - } 3429 - }, 3430 - "node_modules/svelte-preprocess": { 3431 - "version": "5.0.4", 3432 - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.4.tgz", 3433 - "integrity": "sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==", 3434 - "dev": true, 3435 - "hasInstallScript": true, 3436 - "dependencies": { 3437 - "@types/pug": "^2.0.6", 3438 - "detect-indent": "^6.1.0", 3439 - "magic-string": "^0.27.0", 3440 - "sorcery": "^0.11.0", 3441 - "strip-indent": "^3.0.0" 3442 - }, 3443 - "engines": { 3444 - "node": ">= 14.10.0" 3445 - }, 3446 - "peerDependencies": { 3447 - "@babel/core": "^7.10.2", 3448 - "coffeescript": "^2.5.1", 3449 - "less": "^3.11.3 || ^4.0.0", 3450 - "postcss": "^7 || ^8", 3451 - "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0", 3452 - "pug": "^3.0.0", 3453 - "sass": "^1.26.8", 3454 - "stylus": "^0.55.0", 3455 - "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", 3456 - "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0", 3457 - "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0" 3458 - }, 3459 - "peerDependenciesMeta": { 3460 - "@babel/core": { 3461 - "optional": true 3462 - }, 3463 - "coffeescript": { 3464 - "optional": true 3465 - }, 3466 - "less": { 3467 - "optional": true 3468 - }, 3469 - "postcss": { 3470 - "optional": true 3471 - }, 3472 - "postcss-load-config": { 3473 - "optional": true 3474 - }, 3475 - "pug": { 3476 - "optional": true 3477 - }, 3478 - "sass": { 3479 - "optional": true 3480 - }, 3481 - "stylus": { 3482 - "optional": true 3483 - }, 3484 - "sugarss": { 3485 - "optional": true 3486 - }, 3487 - "typescript": { 3488 - "optional": true 3489 - } 3490 - } 3491 - }, 3492 - "node_modules/svelte-preprocess/node_modules/magic-string": { 3493 - "version": "0.27.0", 3494 - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", 3495 - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", 3496 - "dev": true, 3497 - "dependencies": { 3498 - "@jridgewell/sourcemap-codec": "^1.4.13" 3499 - }, 3500 - "engines": { 3501 - "node": ">=12" 3502 - } 3503 - }, 3504 - "node_modules/svelte2tsx": { 3505 - "version": "0.6.22", 3506 - "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.6.22.tgz", 3507 - "integrity": "sha512-eFCfz0juaWeanbwGeQV21kPMwH3LKhfrUYRy1PqRmlieuHvJs8VeK7CaoHJdpBZWCXba2cltHVdywJmwOGhbww==", 3508 - "dev": true, 3509 - "dependencies": { 3510 - "dedent-js": "^1.0.1", 3511 - "pascal-case": "^3.1.1" 3512 - }, 3513 - "peerDependencies": { 3514 - "svelte": "^3.55 || ^4.0.0-next.0 || ^4.0", 3515 - "typescript": "^4.9.4 || ^5.0.0" 3516 - } 3517 - }, 3518 - "node_modules/test-exclude": { 3519 - "version": "6.0.0", 3520 - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", 3521 - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", 3522 - "dev": true, 3523 - "dependencies": { 3524 - "@istanbuljs/schema": "^0.1.2", 3525 - "glob": "^7.1.4", 3526 - "minimatch": "^3.0.4" 3527 - }, 3528 - "engines": { 3529 - "node": ">=8" 3530 - } 3531 - }, 3532 - "node_modules/text-table": { 3533 - "version": "0.2.0", 3534 - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 3535 - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 3536 - "dev": true 3537 - }, 3538 - "node_modules/tiny-glob": { 3539 - "version": "0.2.9", 3540 - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", 3541 - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", 3542 - "dev": true, 3543 - "dependencies": { 3544 - "globalyzer": "0.1.0", 3545 - "globrex": "^0.1.2" 3546 - } 3547 - }, 3548 - "node_modules/tinybench": { 3549 - "version": "2.5.1", 3550 - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", 3551 - "integrity": "sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==", 3552 - "dev": true 3553 - }, 3554 - "node_modules/tinypool": { 3555 - "version": "0.7.0", 3556 - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", 3557 - "integrity": "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==", 3558 - "dev": true, 3559 - "engines": { 3560 - "node": ">=14.0.0" 3561 - } 3562 - }, 3563 - "node_modules/tinyspy": { 3564 - "version": "2.1.1", 3565 - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.1.1.tgz", 3566 - "integrity": "sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==", 3567 - "dev": true, 3568 - "engines": { 3569 - "node": ">=14.0.0" 3570 - } 3571 - }, 3572 - "node_modules/to-regex-range": { 3573 - "version": "5.0.1", 3574 - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3575 - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3576 - "dev": true, 3577 - "dependencies": { 3578 - "is-number": "^7.0.0" 3579 - }, 3580 - "engines": { 3581 - "node": ">=8.0" 3582 - } 3583 - }, 3584 - "node_modules/totalist": { 3585 - "version": "3.0.1", 3586 - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", 3587 - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", 3588 - "dev": true, 3589 - "engines": { 3590 - "node": ">=6" 3591 - } 3592 - }, 3593 - "node_modules/ts-api-utils": { 3594 - "version": "1.0.3", 3595 - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", 3596 - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", 3597 - "dev": true, 3598 - "engines": { 3599 - "node": ">=16.13.0" 3600 - }, 3601 - "peerDependencies": { 3602 - "typescript": ">=4.2.0" 3603 - } 3604 - }, 3605 - "node_modules/tslib": { 3606 - "version": "2.6.2", 3607 - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", 3608 - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", 3609 - "dev": true 3610 - }, 3611 - "node_modules/type-check": { 3612 - "version": "0.4.0", 3613 - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 3614 - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 3615 - "dev": true, 3616 - "dependencies": { 3617 - "prelude-ls": "^1.2.1" 3618 - }, 3619 - "engines": { 3620 - "node": ">= 0.8.0" 3621 - } 3622 - }, 3623 - "node_modules/type-detect": { 3624 - "version": "4.0.8", 3625 - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", 3626 - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", 3627 - "dev": true, 3628 - "engines": { 3629 - "node": ">=4" 3630 - } 3631 - }, 3632 - "node_modules/type-fest": { 3633 - "version": "0.20.2", 3634 - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 3635 - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 3636 - "dev": true, 3637 - "engines": { 3638 - "node": ">=10" 3639 - }, 3640 - "funding": { 3641 - "url": "https://github.com/sponsors/sindresorhus" 3642 - } 3643 - }, 3644 - "node_modules/typescript": { 3645 - "version": "5.2.2", 3646 - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", 3647 - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", 3648 - "dev": true, 3649 - "bin": { 3650 - "tsc": "bin/tsc", 3651 - "tsserver": "bin/tsserver" 3652 - }, 3653 - "engines": { 3654 - "node": ">=14.17" 3655 - } 3656 - }, 3657 - "node_modules/ufo": { 3658 - "version": "1.3.0", 3659 - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.0.tgz", 3660 - "integrity": "sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw==", 3661 - "dev": true 3662 - }, 3663 - "node_modules/undici": { 3664 - "version": "5.23.0", 3665 - "resolved": "https://registry.npmjs.org/undici/-/undici-5.23.0.tgz", 3666 - "integrity": "sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==", 3667 - "dev": true, 3668 - "dependencies": { 3669 - "busboy": "^1.6.0" 3670 - }, 3671 - "engines": { 3672 - "node": ">=14.0" 3673 - } 3674 - }, 3675 - "node_modules/unist-util-stringify-position": { 3676 - "version": "2.0.3", 3677 - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", 3678 - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", 3679 - "dev": true, 3680 - "dependencies": { 3681 - "@types/unist": "^2.0.2" 3682 - }, 3683 - "funding": { 3684 - "type": "opencollective", 3685 - "url": "https://opencollective.com/unified" 3686 - } 3687 - }, 3688 - "node_modules/uri-js": { 3689 - "version": "4.4.1", 3690 - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 3691 - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 3692 - "dev": true, 3693 - "dependencies": { 3694 - "punycode": "^2.1.0" 3695 - } 3696 - }, 3697 - "node_modules/util-deprecate": { 3698 - "version": "1.0.2", 3699 - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3700 - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 3701 - "dev": true 3702 - }, 3703 - "node_modules/v8-to-istanbul": { 3704 - "version": "9.1.0", 3705 - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", 3706 - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", 3707 - "dev": true, 3708 - "dependencies": { 3709 - "@jridgewell/trace-mapping": "^0.3.12", 3710 - "@types/istanbul-lib-coverage": "^2.0.1", 3711 - "convert-source-map": "^1.6.0" 3712 - }, 3713 - "engines": { 3714 - "node": ">=10.12.0" 3715 - } 3716 - }, 3717 - "node_modules/vfile-message": { 3718 - "version": "2.0.4", 3719 - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", 3720 - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", 3721 - "dev": true, 3722 - "dependencies": { 3723 - "@types/unist": "^2.0.0", 3724 - "unist-util-stringify-position": "^2.0.0" 3725 - }, 3726 - "funding": { 3727 - "type": "opencollective", 3728 - "url": "https://opencollective.com/unified" 3729 - } 3730 - }, 3731 - "node_modules/vite": { 3732 - "version": "4.4.9", 3733 - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", 3734 - "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", 3735 - "dev": true, 3736 - "dependencies": { 3737 - "esbuild": "^0.18.10", 3738 - "postcss": "^8.4.27", 3739 - "rollup": "^3.27.1" 3740 - }, 3741 - "bin": { 3742 - "vite": "bin/vite.js" 3743 - }, 3744 - "engines": { 3745 - "node": "^14.18.0 || >=16.0.0" 3746 - }, 3747 - "funding": { 3748 - "url": "https://github.com/vitejs/vite?sponsor=1" 3749 - }, 3750 - "optionalDependencies": { 3751 - "fsevents": "~2.3.2" 3752 - }, 3753 - "peerDependencies": { 3754 - "@types/node": ">= 14", 3755 - "less": "*", 3756 - "lightningcss": "^1.21.0", 3757 - "sass": "*", 3758 - "stylus": "*", 3759 - "sugarss": "*", 3760 - "terser": "^5.4.0" 3761 - }, 3762 - "peerDependenciesMeta": { 3763 - "@types/node": { 3764 - "optional": true 3765 - }, 3766 - "less": { 3767 - "optional": true 3768 - }, 3769 - "lightningcss": { 3770 - "optional": true 3771 - }, 3772 - "sass": { 3773 - "optional": true 3774 - }, 3775 - "stylus": { 3776 - "optional": true 3777 - }, 3778 - "sugarss": { 3779 - "optional": true 3780 - }, 3781 - "terser": { 3782 - "optional": true 3783 - } 3784 - } 3785 - }, 3786 - "node_modules/vite-node": { 3787 - "version": "0.34.5", 3788 - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.5.tgz", 3789 - "integrity": "sha512-RNZ+DwbCvDoI5CbCSQSyRyzDTfFvFauvMs6Yq4ObJROKlIKuat1KgSX/Ako5rlDMfVCyMcpMRMTkJBxd6z8YRA==", 3790 - "dev": true, 3791 - "dependencies": { 3792 - "cac": "^6.7.14", 3793 - "debug": "^4.3.4", 3794 - "mlly": "^1.4.0", 3795 - "pathe": "^1.1.1", 3796 - "picocolors": "^1.0.0", 3797 - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" 3798 - }, 3799 - "bin": { 3800 - "vite-node": "vite-node.mjs" 3801 - }, 3802 - "engines": { 3803 - "node": ">=v14.18.0" 3804 - }, 3805 - "funding": { 3806 - "url": "https://opencollective.com/vitest" 3807 - } 3808 - }, 3809 - "node_modules/vitefu": { 3810 - "version": "0.2.4", 3811 - "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", 3812 - "integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==", 3813 - "dev": true, 3814 - "peerDependencies": { 3815 - "vite": "^3.0.0 || ^4.0.0" 3816 - }, 3817 - "peerDependenciesMeta": { 3818 - "vite": { 3819 - "optional": true 3820 - } 3821 - } 3822 - }, 3823 - "node_modules/vitest": { 3824 - "version": "0.34.5", 3825 - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.5.tgz", 3826 - "integrity": "sha512-CPI68mmnr2DThSB3frSuE5RLm9wo5wU4fbDrDwWQQB1CWgq9jQVoQwnQSzYAjdoBOPoH2UtXpOgHVge/uScfZg==", 3827 - "dev": true, 3828 - "dependencies": { 3829 - "@types/chai": "^4.3.5", 3830 - "@types/chai-subset": "^1.3.3", 3831 - "@types/node": "*", 3832 - "@vitest/expect": "0.34.5", 3833 - "@vitest/runner": "0.34.5", 3834 - "@vitest/snapshot": "0.34.5", 3835 - "@vitest/spy": "0.34.5", 3836 - "@vitest/utils": "0.34.5", 3837 - "acorn": "^8.9.0", 3838 - "acorn-walk": "^8.2.0", 3839 - "cac": "^6.7.14", 3840 - "chai": "^4.3.7", 3841 - "debug": "^4.3.4", 3842 - "local-pkg": "^0.4.3", 3843 - "magic-string": "^0.30.1", 3844 - "pathe": "^1.1.1", 3845 - "picocolors": "^1.0.0", 3846 - "std-env": "^3.3.3", 3847 - "strip-literal": "^1.0.1", 3848 - "tinybench": "^2.5.0", 3849 - "tinypool": "^0.7.0", 3850 - "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", 3851 - "vite-node": "0.34.5", 3852 - "why-is-node-running": "^2.2.2" 3853 - }, 3854 - "bin": { 3855 - "vitest": "vitest.mjs" 3856 - }, 3857 - "engines": { 3858 - "node": ">=v14.18.0" 3859 - }, 3860 - "funding": { 3861 - "url": "https://opencollective.com/vitest" 3862 - }, 3863 - "peerDependencies": { 3864 - "@edge-runtime/vm": "*", 3865 - "@vitest/browser": "*", 3866 - "@vitest/ui": "*", 3867 - "happy-dom": "*", 3868 - "jsdom": "*", 3869 - "playwright": "*", 3870 - "safaridriver": "*", 3871 - "webdriverio": "*" 3872 - }, 3873 - "peerDependenciesMeta": { 3874 - "@edge-runtime/vm": { 3875 - "optional": true 3876 - }, 3877 - "@vitest/browser": { 3878 - "optional": true 3879 - }, 3880 - "@vitest/ui": { 3881 - "optional": true 3882 - }, 3883 - "happy-dom": { 3884 - "optional": true 3885 - }, 3886 - "jsdom": { 3887 - "optional": true 3888 - }, 3889 - "playwright": { 3890 - "optional": true 3891 - }, 3892 - "safaridriver": { 3893 - "optional": true 3894 - }, 3895 - "webdriverio": { 3896 - "optional": true 3897 - } 3898 - } 3899 - }, 3900 - "node_modules/which": { 3901 - "version": "2.0.2", 3902 - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3903 - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3904 - "dev": true, 3905 - "dependencies": { 3906 - "isexe": "^2.0.0" 3907 - }, 3908 - "bin": { 3909 - "node-which": "bin/node-which" 3910 - }, 3911 - "engines": { 3912 - "node": ">= 8" 3913 - } 3914 - }, 3915 - "node_modules/why-is-node-running": { 3916 - "version": "2.2.2", 3917 - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", 3918 - "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", 3919 - "dev": true, 3920 - "dependencies": { 3921 - "siginfo": "^2.0.0", 3922 - "stackback": "0.0.2" 3923 - }, 3924 - "bin": { 3925 - "why-is-node-running": "cli.js" 3926 - }, 3927 - "engines": { 3928 - "node": ">=8" 3929 - } 3930 - }, 3931 - "node_modules/wrappy": { 3932 - "version": "1.0.2", 3933 - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3934 - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 3935 - "dev": true 3936 - }, 3937 - "node_modules/yallist": { 3938 - "version": "4.0.0", 3939 - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 3940 - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 3941 - "dev": true 3942 - }, 3943 - "node_modules/yaml": { 3944 - "version": "1.10.2", 3945 - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", 3946 - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", 3947 - "dev": true, 3948 - "engines": { 3949 - "node": ">= 6" 3950 - } 3951 - }, 3952 - "node_modules/yocto-queue": { 3953 - "version": "0.1.0", 3954 - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 3955 - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 3956 - "dev": true, 3957 - "engines": { 3958 - "node": ">=10" 3959 - }, 3960 - "funding": { 3961 - "url": "https://github.com/sponsors/sindresorhus" 3962 - } 3963 - } 3964 - } 2 + "name": "date-picker-svelte", 3 + "version": "2.8.0", 4 + "lockfileVersion": 3, 5 + "requires": true, 6 + "packages": { 7 + "": { 8 + "name": "date-picker-svelte", 9 + "version": "2.8.0", 10 + "license": "MIT", 11 + "devDependencies": { 12 + "@sveltejs/adapter-static": "^2.0.3", 13 + "@sveltejs/kit": "^1.25.0", 14 + "@sveltejs/package": "^2.2.2", 15 + "@typescript-eslint/eslint-plugin": "^6.7.2", 16 + "@typescript-eslint/parser": "^6.7.2", 17 + "@vitest/coverage-v8": "^0.34.5", 18 + "date-fns": "^2.30.0", 19 + "eslint": "^8.50.0", 20 + "eslint-config-prettier": "^8.10.0", 21 + "eslint-plugin-svelte": "^2.33.2", 22 + "mdsvex": "^0.11.0", 23 + "prettier": "^2.8.8", 24 + "prettier-plugin-svelte": "^2.10.1", 25 + "sass": "^1.68.0", 26 + "svelte": "^4.2.1", 27 + "svelte-check": "^3.5.2", 28 + "typescript": "^5.2.2", 29 + "vite": "^4.4.9", 30 + "vitest": "^0.34.5" 31 + }, 32 + "peerDependencies": { 33 + "svelte": "^3.24.0 || ^4.0.0" 34 + } 35 + }, 36 + "node_modules/@aashutoshrathi/word-wrap": { 37 + "version": "1.2.6", 38 + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", 39 + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", 40 + "dev": true, 41 + "engines": { 42 + "node": ">=0.10.0" 43 + } 44 + }, 45 + "node_modules/@ampproject/remapping": { 46 + "version": "2.2.1", 47 + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", 48 + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", 49 + "dev": true, 50 + "dependencies": { 51 + "@jridgewell/gen-mapping": "^0.3.0", 52 + "@jridgewell/trace-mapping": "^0.3.9" 53 + }, 54 + "engines": { 55 + "node": ">=6.0.0" 56 + } 57 + }, 58 + "node_modules/@babel/runtime": { 59 + "version": "7.22.15", 60 + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", 61 + "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", 62 + "dev": true, 63 + "dependencies": { 64 + "regenerator-runtime": "^0.14.0" 65 + }, 66 + "engines": { 67 + "node": ">=6.9.0" 68 + } 69 + }, 70 + "node_modules/@bcoe/v8-coverage": { 71 + "version": "0.2.3", 72 + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", 73 + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", 74 + "dev": true 75 + }, 76 + "node_modules/@esbuild/android-arm": { 77 + "version": "0.18.20", 78 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", 79 + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", 80 + "cpu": [ 81 + "arm" 82 + ], 83 + "dev": true, 84 + "optional": true, 85 + "os": [ 86 + "android" 87 + ], 88 + "engines": { 89 + "node": ">=12" 90 + } 91 + }, 92 + "node_modules/@esbuild/android-arm64": { 93 + "version": "0.18.20", 94 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", 95 + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", 96 + "cpu": [ 97 + "arm64" 98 + ], 99 + "dev": true, 100 + "optional": true, 101 + "os": [ 102 + "android" 103 + ], 104 + "engines": { 105 + "node": ">=12" 106 + } 107 + }, 108 + "node_modules/@esbuild/android-x64": { 109 + "version": "0.18.20", 110 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", 111 + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", 112 + "cpu": [ 113 + "x64" 114 + ], 115 + "dev": true, 116 + "optional": true, 117 + "os": [ 118 + "android" 119 + ], 120 + "engines": { 121 + "node": ">=12" 122 + } 123 + }, 124 + "node_modules/@esbuild/darwin-arm64": { 125 + "version": "0.18.20", 126 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", 127 + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", 128 + "cpu": [ 129 + "arm64" 130 + ], 131 + "dev": true, 132 + "optional": true, 133 + "os": [ 134 + "darwin" 135 + ], 136 + "engines": { 137 + "node": ">=12" 138 + } 139 + }, 140 + "node_modules/@esbuild/darwin-x64": { 141 + "version": "0.18.20", 142 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", 143 + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", 144 + "cpu": [ 145 + "x64" 146 + ], 147 + "dev": true, 148 + "optional": true, 149 + "os": [ 150 + "darwin" 151 + ], 152 + "engines": { 153 + "node": ">=12" 154 + } 155 + }, 156 + "node_modules/@esbuild/freebsd-arm64": { 157 + "version": "0.18.20", 158 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", 159 + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", 160 + "cpu": [ 161 + "arm64" 162 + ], 163 + "dev": true, 164 + "optional": true, 165 + "os": [ 166 + "freebsd" 167 + ], 168 + "engines": { 169 + "node": ">=12" 170 + } 171 + }, 172 + "node_modules/@esbuild/freebsd-x64": { 173 + "version": "0.18.20", 174 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", 175 + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", 176 + "cpu": [ 177 + "x64" 178 + ], 179 + "dev": true, 180 + "optional": true, 181 + "os": [ 182 + "freebsd" 183 + ], 184 + "engines": { 185 + "node": ">=12" 186 + } 187 + }, 188 + "node_modules/@esbuild/linux-arm": { 189 + "version": "0.18.20", 190 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", 191 + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", 192 + "cpu": [ 193 + "arm" 194 + ], 195 + "dev": true, 196 + "optional": true, 197 + "os": [ 198 + "linux" 199 + ], 200 + "engines": { 201 + "node": ">=12" 202 + } 203 + }, 204 + "node_modules/@esbuild/linux-arm64": { 205 + "version": "0.18.20", 206 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", 207 + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", 208 + "cpu": [ 209 + "arm64" 210 + ], 211 + "dev": true, 212 + "optional": true, 213 + "os": [ 214 + "linux" 215 + ], 216 + "engines": { 217 + "node": ">=12" 218 + } 219 + }, 220 + "node_modules/@esbuild/linux-ia32": { 221 + "version": "0.18.20", 222 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", 223 + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", 224 + "cpu": [ 225 + "ia32" 226 + ], 227 + "dev": true, 228 + "optional": true, 229 + "os": [ 230 + "linux" 231 + ], 232 + "engines": { 233 + "node": ">=12" 234 + } 235 + }, 236 + "node_modules/@esbuild/linux-loong64": { 237 + "version": "0.18.20", 238 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", 239 + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", 240 + "cpu": [ 241 + "loong64" 242 + ], 243 + "dev": true, 244 + "optional": true, 245 + "os": [ 246 + "linux" 247 + ], 248 + "engines": { 249 + "node": ">=12" 250 + } 251 + }, 252 + "node_modules/@esbuild/linux-mips64el": { 253 + "version": "0.18.20", 254 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", 255 + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", 256 + "cpu": [ 257 + "mips64el" 258 + ], 259 + "dev": true, 260 + "optional": true, 261 + "os": [ 262 + "linux" 263 + ], 264 + "engines": { 265 + "node": ">=12" 266 + } 267 + }, 268 + "node_modules/@esbuild/linux-ppc64": { 269 + "version": "0.18.20", 270 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", 271 + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", 272 + "cpu": [ 273 + "ppc64" 274 + ], 275 + "dev": true, 276 + "optional": true, 277 + "os": [ 278 + "linux" 279 + ], 280 + "engines": { 281 + "node": ">=12" 282 + } 283 + }, 284 + "node_modules/@esbuild/linux-riscv64": { 285 + "version": "0.18.20", 286 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", 287 + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", 288 + "cpu": [ 289 + "riscv64" 290 + ], 291 + "dev": true, 292 + "optional": true, 293 + "os": [ 294 + "linux" 295 + ], 296 + "engines": { 297 + "node": ">=12" 298 + } 299 + }, 300 + "node_modules/@esbuild/linux-s390x": { 301 + "version": "0.18.20", 302 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", 303 + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", 304 + "cpu": [ 305 + "s390x" 306 + ], 307 + "dev": true, 308 + "optional": true, 309 + "os": [ 310 + "linux" 311 + ], 312 + "engines": { 313 + "node": ">=12" 314 + } 315 + }, 316 + "node_modules/@esbuild/linux-x64": { 317 + "version": "0.18.20", 318 + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", 319 + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", 320 + "cpu": [ 321 + "x64" 322 + ], 323 + "dev": true, 324 + "optional": true, 325 + "os": [ 326 + "linux" 327 + ], 328 + "engines": { 329 + "node": ">=12" 330 + } 331 + }, 332 + "node_modules/@esbuild/netbsd-x64": { 333 + "version": "0.18.20", 334 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", 335 + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", 336 + "cpu": [ 337 + "x64" 338 + ], 339 + "dev": true, 340 + "optional": true, 341 + "os": [ 342 + "netbsd" 343 + ], 344 + "engines": { 345 + "node": ">=12" 346 + } 347 + }, 348 + "node_modules/@esbuild/openbsd-x64": { 349 + "version": "0.18.20", 350 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", 351 + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", 352 + "cpu": [ 353 + "x64" 354 + ], 355 + "dev": true, 356 + "optional": true, 357 + "os": [ 358 + "openbsd" 359 + ], 360 + "engines": { 361 + "node": ">=12" 362 + } 363 + }, 364 + "node_modules/@esbuild/sunos-x64": { 365 + "version": "0.18.20", 366 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", 367 + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", 368 + "cpu": [ 369 + "x64" 370 + ], 371 + "dev": true, 372 + "optional": true, 373 + "os": [ 374 + "sunos" 375 + ], 376 + "engines": { 377 + "node": ">=12" 378 + } 379 + }, 380 + "node_modules/@esbuild/win32-arm64": { 381 + "version": "0.18.20", 382 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", 383 + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", 384 + "cpu": [ 385 + "arm64" 386 + ], 387 + "dev": true, 388 + "optional": true, 389 + "os": [ 390 + "win32" 391 + ], 392 + "engines": { 393 + "node": ">=12" 394 + } 395 + }, 396 + "node_modules/@esbuild/win32-ia32": { 397 + "version": "0.18.20", 398 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", 399 + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", 400 + "cpu": [ 401 + "ia32" 402 + ], 403 + "dev": true, 404 + "optional": true, 405 + "os": [ 406 + "win32" 407 + ], 408 + "engines": { 409 + "node": ">=12" 410 + } 411 + }, 412 + "node_modules/@esbuild/win32-x64": { 413 + "version": "0.18.20", 414 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", 415 + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", 416 + "cpu": [ 417 + "x64" 418 + ], 419 + "dev": true, 420 + "optional": true, 421 + "os": [ 422 + "win32" 423 + ], 424 + "engines": { 425 + "node": ">=12" 426 + } 427 + }, 428 + "node_modules/@eslint-community/eslint-utils": { 429 + "version": "4.4.0", 430 + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", 431 + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", 432 + "dev": true, 433 + "dependencies": { 434 + "eslint-visitor-keys": "^3.3.0" 435 + }, 436 + "engines": { 437 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 438 + }, 439 + "peerDependencies": { 440 + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 441 + } 442 + }, 443 + "node_modules/@eslint-community/regexpp": { 444 + "version": "4.8.1", 445 + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", 446 + "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", 447 + "dev": true, 448 + "engines": { 449 + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 450 + } 451 + }, 452 + "node_modules/@eslint/eslintrc": { 453 + "version": "2.1.2", 454 + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", 455 + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", 456 + "dev": true, 457 + "dependencies": { 458 + "ajv": "^6.12.4", 459 + "debug": "^4.3.2", 460 + "espree": "^9.6.0", 461 + "globals": "^13.19.0", 462 + "ignore": "^5.2.0", 463 + "import-fresh": "^3.2.1", 464 + "js-yaml": "^4.1.0", 465 + "minimatch": "^3.1.2", 466 + "strip-json-comments": "^3.1.1" 467 + }, 468 + "engines": { 469 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 470 + }, 471 + "funding": { 472 + "url": "https://opencollective.com/eslint" 473 + } 474 + }, 475 + "node_modules/@eslint/js": { 476 + "version": "8.50.0", 477 + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", 478 + "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", 479 + "dev": true, 480 + "engines": { 481 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 482 + } 483 + }, 484 + "node_modules/@humanwhocodes/config-array": { 485 + "version": "0.11.11", 486 + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", 487 + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", 488 + "dev": true, 489 + "dependencies": { 490 + "@humanwhocodes/object-schema": "^1.2.1", 491 + "debug": "^4.1.1", 492 + "minimatch": "^3.0.5" 493 + }, 494 + "engines": { 495 + "node": ">=10.10.0" 496 + } 497 + }, 498 + "node_modules/@humanwhocodes/module-importer": { 499 + "version": "1.0.1", 500 + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 501 + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 502 + "dev": true, 503 + "engines": { 504 + "node": ">=12.22" 505 + }, 506 + "funding": { 507 + "type": "github", 508 + "url": "https://github.com/sponsors/nzakas" 509 + } 510 + }, 511 + "node_modules/@humanwhocodes/object-schema": { 512 + "version": "1.2.1", 513 + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 514 + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 515 + "dev": true 516 + }, 517 + "node_modules/@istanbuljs/schema": { 518 + "version": "0.1.3", 519 + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", 520 + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", 521 + "dev": true, 522 + "engines": { 523 + "node": ">=8" 524 + } 525 + }, 526 + "node_modules/@jest/schemas": { 527 + "version": "29.6.3", 528 + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", 529 + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", 530 + "dev": true, 531 + "dependencies": { 532 + "@sinclair/typebox": "^0.27.8" 533 + }, 534 + "engines": { 535 + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 536 + } 537 + }, 538 + "node_modules/@jridgewell/gen-mapping": { 539 + "version": "0.3.3", 540 + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", 541 + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", 542 + "dev": true, 543 + "dependencies": { 544 + "@jridgewell/set-array": "^1.0.1", 545 + "@jridgewell/sourcemap-codec": "^1.4.10", 546 + "@jridgewell/trace-mapping": "^0.3.9" 547 + }, 548 + "engines": { 549 + "node": ">=6.0.0" 550 + } 551 + }, 552 + "node_modules/@jridgewell/resolve-uri": { 553 + "version": "3.1.1", 554 + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", 555 + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", 556 + "dev": true, 557 + "engines": { 558 + "node": ">=6.0.0" 559 + } 560 + }, 561 + "node_modules/@jridgewell/set-array": { 562 + "version": "1.1.2", 563 + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 564 + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 565 + "dev": true, 566 + "engines": { 567 + "node": ">=6.0.0" 568 + } 569 + }, 570 + "node_modules/@jridgewell/sourcemap-codec": { 571 + "version": "1.4.15", 572 + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 573 + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 574 + "dev": true 575 + }, 576 + "node_modules/@jridgewell/trace-mapping": { 577 + "version": "0.3.19", 578 + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", 579 + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", 580 + "dev": true, 581 + "dependencies": { 582 + "@jridgewell/resolve-uri": "^3.1.0", 583 + "@jridgewell/sourcemap-codec": "^1.4.14" 584 + } 585 + }, 586 + "node_modules/@nodelib/fs.scandir": { 587 + "version": "2.1.5", 588 + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 589 + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 590 + "dev": true, 591 + "dependencies": { 592 + "@nodelib/fs.stat": "2.0.5", 593 + "run-parallel": "^1.1.9" 594 + }, 595 + "engines": { 596 + "node": ">= 8" 597 + } 598 + }, 599 + "node_modules/@nodelib/fs.stat": { 600 + "version": "2.0.5", 601 + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 602 + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 603 + "dev": true, 604 + "engines": { 605 + "node": ">= 8" 606 + } 607 + }, 608 + "node_modules/@nodelib/fs.walk": { 609 + "version": "1.2.8", 610 + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 611 + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 612 + "dev": true, 613 + "dependencies": { 614 + "@nodelib/fs.scandir": "2.1.5", 615 + "fastq": "^1.6.0" 616 + }, 617 + "engines": { 618 + "node": ">= 8" 619 + } 620 + }, 621 + "node_modules/@polka/url": { 622 + "version": "1.0.0-next.23", 623 + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", 624 + "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==", 625 + "dev": true 626 + }, 627 + "node_modules/@sinclair/typebox": { 628 + "version": "0.27.8", 629 + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", 630 + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", 631 + "dev": true 632 + }, 633 + "node_modules/@sveltejs/adapter-static": { 634 + "version": "2.0.3", 635 + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-2.0.3.tgz", 636 + "integrity": "sha512-VUqTfXsxYGugCpMqQv1U0LIdbR3S5nBkMMDmpjGVJyM6Q2jHVMFtdWJCkeHMySc6mZxJ+0eZK3T7IgmUCDrcUQ==", 637 + "dev": true, 638 + "peerDependencies": { 639 + "@sveltejs/kit": "^1.5.0" 640 + } 641 + }, 642 + "node_modules/@sveltejs/kit": { 643 + "version": "1.25.0", 644 + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.25.0.tgz", 645 + "integrity": "sha512-+VqMWJJYtcLoF8hYkdqY2qs/MPaawrMwA/gNBJW2o2UrcuYdNiy0ZZnjQQuPD33df/VcAulnoeyzF5ZtaajFEw==", 646 + "dev": true, 647 + "hasInstallScript": true, 648 + "dependencies": { 649 + "@sveltejs/vite-plugin-svelte": "^2.4.1", 650 + "@types/cookie": "^0.5.1", 651 + "cookie": "^0.5.0", 652 + "devalue": "^4.3.1", 653 + "esm-env": "^1.0.0", 654 + "kleur": "^4.1.5", 655 + "magic-string": "^0.30.0", 656 + "mime": "^3.0.0", 657 + "sade": "^1.8.1", 658 + "set-cookie-parser": "^2.6.0", 659 + "sirv": "^2.0.2", 660 + "tiny-glob": "^0.2.9", 661 + "undici": "~5.23.0" 662 + }, 663 + "bin": { 664 + "svelte-kit": "svelte-kit.js" 665 + }, 666 + "engines": { 667 + "node": "^16.14 || >=18" 668 + }, 669 + "peerDependencies": { 670 + "svelte": "^3.54.0 || ^4.0.0-next.0", 671 + "vite": "^4.0.0" 672 + } 673 + }, 674 + "node_modules/@sveltejs/package": { 675 + "version": "2.2.2", 676 + "resolved": "https://registry.npmjs.org/@sveltejs/package/-/package-2.2.2.tgz", 677 + "integrity": "sha512-rP3sVv6cAntcdcG4r4KspLU6nZYYUrHJBAX3Arrw0KJFdgxtlsi2iDwN0Jwr/vIkgjcU0ZPWM8kkT5kpZDlWAw==", 678 + "dev": true, 679 + "dependencies": { 680 + "chokidar": "^3.5.3", 681 + "kleur": "^4.1.5", 682 + "sade": "^1.8.1", 683 + "semver": "^7.5.3", 684 + "svelte2tsx": "~0.6.19" 685 + }, 686 + "bin": { 687 + "svelte-package": "svelte-package.js" 688 + }, 689 + "engines": { 690 + "node": "^16.14 || >=18" 691 + }, 692 + "peerDependencies": { 693 + "svelte": "^3.44.0 || ^4.0.0" 694 + } 695 + }, 696 + "node_modules/@sveltejs/vite-plugin-svelte": { 697 + "version": "2.4.6", 698 + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.6.tgz", 699 + "integrity": "sha512-zO79p0+DZnXPnF0ltIigWDx/ux7Ni+HRaFOw720Qeivc1azFUrJxTl0OryXVibYNx1hCboGia1NRV3x8RNv4cA==", 700 + "dev": true, 701 + "dependencies": { 702 + "@sveltejs/vite-plugin-svelte-inspector": "^1.0.4", 703 + "debug": "^4.3.4", 704 + "deepmerge": "^4.3.1", 705 + "kleur": "^4.1.5", 706 + "magic-string": "^0.30.3", 707 + "svelte-hmr": "^0.15.3", 708 + "vitefu": "^0.2.4" 709 + }, 710 + "engines": { 711 + "node": "^14.18.0 || >= 16" 712 + }, 713 + "peerDependencies": { 714 + "svelte": "^3.54.0 || ^4.0.0", 715 + "vite": "^4.0.0" 716 + } 717 + }, 718 + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { 719 + "version": "1.0.4", 720 + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.4.tgz", 721 + "integrity": "sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==", 722 + "dev": true, 723 + "dependencies": { 724 + "debug": "^4.3.4" 725 + }, 726 + "engines": { 727 + "node": "^14.18.0 || >= 16" 728 + }, 729 + "peerDependencies": { 730 + "@sveltejs/vite-plugin-svelte": "^2.2.0", 731 + "svelte": "^3.54.0 || ^4.0.0", 732 + "vite": "^4.0.0" 733 + } 734 + }, 735 + "node_modules/@types/chai": { 736 + "version": "4.3.6", 737 + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz", 738 + "integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==", 739 + "dev": true 740 + }, 741 + "node_modules/@types/chai-subset": { 742 + "version": "1.3.3", 743 + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", 744 + "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", 745 + "dev": true, 746 + "dependencies": { 747 + "@types/chai": "*" 748 + } 749 + }, 750 + "node_modules/@types/cookie": { 751 + "version": "0.5.2", 752 + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.2.tgz", 753 + "integrity": "sha512-DBpRoJGKJZn7RY92dPrgoMew8xCWc2P71beqsjyhEI/Ds9mOyVmBwtekyfhpwFIVt1WrxTonFifiOZ62V8CnNA==", 754 + "dev": true 755 + }, 756 + "node_modules/@types/estree": { 757 + "version": "1.0.2", 758 + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz", 759 + "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==", 760 + "dev": true 761 + }, 762 + "node_modules/@types/istanbul-lib-coverage": { 763 + "version": "2.0.4", 764 + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", 765 + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", 766 + "dev": true 767 + }, 768 + "node_modules/@types/json-schema": { 769 + "version": "7.0.13", 770 + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", 771 + "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", 772 + "dev": true 773 + }, 774 + "node_modules/@types/node": { 775 + "version": "20.6.4", 776 + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.4.tgz", 777 + "integrity": "sha512-nU6d9MPY0NBUMiE/nXd2IIoC4OLvsLpwAjheoAeuzgvDZA1Cb10QYg+91AF6zQiKWRN5i1m07x6sMe0niBznoQ==", 778 + "dev": true 779 + }, 780 + "node_modules/@types/pug": { 781 + "version": "2.0.6", 782 + "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", 783 + "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", 784 + "dev": true 785 + }, 786 + "node_modules/@types/semver": { 787 + "version": "7.5.2", 788 + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.2.tgz", 789 + "integrity": "sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==", 790 + "dev": true 791 + }, 792 + "node_modules/@types/unist": { 793 + "version": "2.0.8", 794 + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.8.tgz", 795 + "integrity": "sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==", 796 + "dev": true 797 + }, 798 + "node_modules/@typescript-eslint/eslint-plugin": { 799 + "version": "6.7.2", 800 + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.2.tgz", 801 + "integrity": "sha512-ooaHxlmSgZTM6CHYAFRlifqh1OAr3PAQEwi7lhYhaegbnXrnh7CDcHmc3+ihhbQC7H0i4JF0psI5ehzkF6Yl6Q==", 802 + "dev": true, 803 + "dependencies": { 804 + "@eslint-community/regexpp": "^4.5.1", 805 + "@typescript-eslint/scope-manager": "6.7.2", 806 + "@typescript-eslint/type-utils": "6.7.2", 807 + "@typescript-eslint/utils": "6.7.2", 808 + "@typescript-eslint/visitor-keys": "6.7.2", 809 + "debug": "^4.3.4", 810 + "graphemer": "^1.4.0", 811 + "ignore": "^5.2.4", 812 + "natural-compare": "^1.4.0", 813 + "semver": "^7.5.4", 814 + "ts-api-utils": "^1.0.1" 815 + }, 816 + "engines": { 817 + "node": "^16.0.0 || >=18.0.0" 818 + }, 819 + "funding": { 820 + "type": "opencollective", 821 + "url": "https://opencollective.com/typescript-eslint" 822 + }, 823 + "peerDependencies": { 824 + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", 825 + "eslint": "^7.0.0 || ^8.0.0" 826 + }, 827 + "peerDependenciesMeta": { 828 + "typescript": { 829 + "optional": true 830 + } 831 + } 832 + }, 833 + "node_modules/@typescript-eslint/parser": { 834 + "version": "6.7.2", 835 + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.2.tgz", 836 + "integrity": "sha512-KA3E4ox0ws+SPyxQf9iSI25R6b4Ne78ORhNHeVKrPQnoYsb9UhieoiRoJgrzgEeKGOXhcY1i8YtOeCHHTDa6Fw==", 837 + "dev": true, 838 + "dependencies": { 839 + "@typescript-eslint/scope-manager": "6.7.2", 840 + "@typescript-eslint/types": "6.7.2", 841 + "@typescript-eslint/typescript-estree": "6.7.2", 842 + "@typescript-eslint/visitor-keys": "6.7.2", 843 + "debug": "^4.3.4" 844 + }, 845 + "engines": { 846 + "node": "^16.0.0 || >=18.0.0" 847 + }, 848 + "funding": { 849 + "type": "opencollective", 850 + "url": "https://opencollective.com/typescript-eslint" 851 + }, 852 + "peerDependencies": { 853 + "eslint": "^7.0.0 || ^8.0.0" 854 + }, 855 + "peerDependenciesMeta": { 856 + "typescript": { 857 + "optional": true 858 + } 859 + } 860 + }, 861 + "node_modules/@typescript-eslint/scope-manager": { 862 + "version": "6.7.2", 863 + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.2.tgz", 864 + "integrity": "sha512-bgi6plgyZjEqapr7u2mhxGR6E8WCzKNUFWNh6fkpVe9+yzRZeYtDTbsIBzKbcxI+r1qVWt6VIoMSNZ4r2A+6Yw==", 865 + "dev": true, 866 + "dependencies": { 867 + "@typescript-eslint/types": "6.7.2", 868 + "@typescript-eslint/visitor-keys": "6.7.2" 869 + }, 870 + "engines": { 871 + "node": "^16.0.0 || >=18.0.0" 872 + }, 873 + "funding": { 874 + "type": "opencollective", 875 + "url": "https://opencollective.com/typescript-eslint" 876 + } 877 + }, 878 + "node_modules/@typescript-eslint/type-utils": { 879 + "version": "6.7.2", 880 + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.2.tgz", 881 + "integrity": "sha512-36F4fOYIROYRl0qj95dYKx6kybddLtsbmPIYNK0OBeXv2j9L5nZ17j9jmfy+bIDHKQgn2EZX+cofsqi8NPATBQ==", 882 + "dev": true, 883 + "dependencies": { 884 + "@typescript-eslint/typescript-estree": "6.7.2", 885 + "@typescript-eslint/utils": "6.7.2", 886 + "debug": "^4.3.4", 887 + "ts-api-utils": "^1.0.1" 888 + }, 889 + "engines": { 890 + "node": "^16.0.0 || >=18.0.0" 891 + }, 892 + "funding": { 893 + "type": "opencollective", 894 + "url": "https://opencollective.com/typescript-eslint" 895 + }, 896 + "peerDependencies": { 897 + "eslint": "^7.0.0 || ^8.0.0" 898 + }, 899 + "peerDependenciesMeta": { 900 + "typescript": { 901 + "optional": true 902 + } 903 + } 904 + }, 905 + "node_modules/@typescript-eslint/types": { 906 + "version": "6.7.2", 907 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.2.tgz", 908 + "integrity": "sha512-flJYwMYgnUNDAN9/GAI3l8+wTmvTYdv64fcH8aoJK76Y+1FCZ08RtI5zDerM/FYT5DMkAc+19E4aLmd5KqdFyg==", 909 + "dev": true, 910 + "engines": { 911 + "node": "^16.0.0 || >=18.0.0" 912 + }, 913 + "funding": { 914 + "type": "opencollective", 915 + "url": "https://opencollective.com/typescript-eslint" 916 + } 917 + }, 918 + "node_modules/@typescript-eslint/typescript-estree": { 919 + "version": "6.7.2", 920 + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.2.tgz", 921 + "integrity": "sha512-kiJKVMLkoSciGyFU0TOY0fRxnp9qq1AzVOHNeN1+B9erKFCJ4Z8WdjAkKQPP+b1pWStGFqezMLltxO+308dJTQ==", 922 + "dev": true, 923 + "dependencies": { 924 + "@typescript-eslint/types": "6.7.2", 925 + "@typescript-eslint/visitor-keys": "6.7.2", 926 + "debug": "^4.3.4", 927 + "globby": "^11.1.0", 928 + "is-glob": "^4.0.3", 929 + "semver": "^7.5.4", 930 + "ts-api-utils": "^1.0.1" 931 + }, 932 + "engines": { 933 + "node": "^16.0.0 || >=18.0.0" 934 + }, 935 + "funding": { 936 + "type": "opencollective", 937 + "url": "https://opencollective.com/typescript-eslint" 938 + }, 939 + "peerDependenciesMeta": { 940 + "typescript": { 941 + "optional": true 942 + } 943 + } 944 + }, 945 + "node_modules/@typescript-eslint/utils": { 946 + "version": "6.7.2", 947 + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.2.tgz", 948 + "integrity": "sha512-ZCcBJug/TS6fXRTsoTkgnsvyWSiXwMNiPzBUani7hDidBdj1779qwM1FIAmpH4lvlOZNF3EScsxxuGifjpLSWQ==", 949 + "dev": true, 950 + "dependencies": { 951 + "@eslint-community/eslint-utils": "^4.4.0", 952 + "@types/json-schema": "^7.0.12", 953 + "@types/semver": "^7.5.0", 954 + "@typescript-eslint/scope-manager": "6.7.2", 955 + "@typescript-eslint/types": "6.7.2", 956 + "@typescript-eslint/typescript-estree": "6.7.2", 957 + "semver": "^7.5.4" 958 + }, 959 + "engines": { 960 + "node": "^16.0.0 || >=18.0.0" 961 + }, 962 + "funding": { 963 + "type": "opencollective", 964 + "url": "https://opencollective.com/typescript-eslint" 965 + }, 966 + "peerDependencies": { 967 + "eslint": "^7.0.0 || ^8.0.0" 968 + } 969 + }, 970 + "node_modules/@typescript-eslint/visitor-keys": { 971 + "version": "6.7.2", 972 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.2.tgz", 973 + "integrity": "sha512-uVw9VIMFBUTz8rIeaUT3fFe8xIUx8r4ywAdlQv1ifH+6acn/XF8Y6rwJ7XNmkNMDrTW+7+vxFFPIF40nJCVsMQ==", 974 + "dev": true, 975 + "dependencies": { 976 + "@typescript-eslint/types": "6.7.2", 977 + "eslint-visitor-keys": "^3.4.1" 978 + }, 979 + "engines": { 980 + "node": "^16.0.0 || >=18.0.0" 981 + }, 982 + "funding": { 983 + "type": "opencollective", 984 + "url": "https://opencollective.com/typescript-eslint" 985 + } 986 + }, 987 + "node_modules/@vitest/coverage-v8": { 988 + "version": "0.34.5", 989 + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-0.34.5.tgz", 990 + "integrity": "sha512-97xjhRTSdmeeHCm2nNHhT3hLsMYkAhHXm/rwj6SZ3voka8xiCJrwgtfIjoZIFEL4OO0KezGmVuHWQXcMunULIA==", 991 + "dev": true, 992 + "dependencies": { 993 + "@ampproject/remapping": "^2.2.1", 994 + "@bcoe/v8-coverage": "^0.2.3", 995 + "istanbul-lib-coverage": "^3.2.0", 996 + "istanbul-lib-report": "^3.0.1", 997 + "istanbul-lib-source-maps": "^4.0.1", 998 + "istanbul-reports": "^3.1.5", 999 + "magic-string": "^0.30.1", 1000 + "picocolors": "^1.0.0", 1001 + "std-env": "^3.3.3", 1002 + "test-exclude": "^6.0.0", 1003 + "v8-to-istanbul": "^9.1.0" 1004 + }, 1005 + "funding": { 1006 + "url": "https://opencollective.com/vitest" 1007 + }, 1008 + "peerDependencies": { 1009 + "vitest": ">=0.32.0 <1" 1010 + } 1011 + }, 1012 + "node_modules/@vitest/expect": { 1013 + "version": "0.34.5", 1014 + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.5.tgz", 1015 + "integrity": "sha512-/3RBIV9XEH+nRpRMqDJBufKIOQaYUH2X6bt0rKSCW0MfKhXFLYsR5ivHifeajRSTsln0FwJbitxLKHSQz/Xwkw==", 1016 + "dev": true, 1017 + "dependencies": { 1018 + "@vitest/spy": "0.34.5", 1019 + "@vitest/utils": "0.34.5", 1020 + "chai": "^4.3.7" 1021 + }, 1022 + "funding": { 1023 + "url": "https://opencollective.com/vitest" 1024 + } 1025 + }, 1026 + "node_modules/@vitest/runner": { 1027 + "version": "0.34.5", 1028 + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.5.tgz", 1029 + "integrity": "sha512-RDEE3ViVvl7jFSCbnBRyYuu23XxmvRTSZWW6W4M7eC5dOsK75d5LIf6uhE5Fqf809DQ1+9ICZZNxhIolWHU4og==", 1030 + "dev": true, 1031 + "dependencies": { 1032 + "@vitest/utils": "0.34.5", 1033 + "p-limit": "^4.0.0", 1034 + "pathe": "^1.1.1" 1035 + }, 1036 + "funding": { 1037 + "url": "https://opencollective.com/vitest" 1038 + } 1039 + }, 1040 + "node_modules/@vitest/runner/node_modules/p-limit": { 1041 + "version": "4.0.0", 1042 + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", 1043 + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", 1044 + "dev": true, 1045 + "dependencies": { 1046 + "yocto-queue": "^1.0.0" 1047 + }, 1048 + "engines": { 1049 + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1050 + }, 1051 + "funding": { 1052 + "url": "https://github.com/sponsors/sindresorhus" 1053 + } 1054 + }, 1055 + "node_modules/@vitest/runner/node_modules/yocto-queue": { 1056 + "version": "1.0.0", 1057 + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", 1058 + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", 1059 + "dev": true, 1060 + "engines": { 1061 + "node": ">=12.20" 1062 + }, 1063 + "funding": { 1064 + "url": "https://github.com/sponsors/sindresorhus" 1065 + } 1066 + }, 1067 + "node_modules/@vitest/snapshot": { 1068 + "version": "0.34.5", 1069 + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.5.tgz", 1070 + "integrity": "sha512-+ikwSbhu6z2yOdtKmk/aeoDZ9QPm2g/ZO5rXT58RR9Vmu/kB2MamyDSx77dctqdZfP3Diqv4mbc/yw2kPT8rmA==", 1071 + "dev": true, 1072 + "dependencies": { 1073 + "magic-string": "^0.30.1", 1074 + "pathe": "^1.1.1", 1075 + "pretty-format": "^29.5.0" 1076 + }, 1077 + "funding": { 1078 + "url": "https://opencollective.com/vitest" 1079 + } 1080 + }, 1081 + "node_modules/@vitest/spy": { 1082 + "version": "0.34.5", 1083 + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.5.tgz", 1084 + "integrity": "sha512-epsicsfhvBjRjCMOC/3k00mP/TBGQy8/P0DxOFiWyLt55gnZ99dqCfCiAsKO17BWVjn4eZRIjKvcqNmSz8gvmg==", 1085 + "dev": true, 1086 + "dependencies": { 1087 + "tinyspy": "^2.1.1" 1088 + }, 1089 + "funding": { 1090 + "url": "https://opencollective.com/vitest" 1091 + } 1092 + }, 1093 + "node_modules/@vitest/utils": { 1094 + "version": "0.34.5", 1095 + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.5.tgz", 1096 + "integrity": "sha512-ur6CmmYQoeHMwmGb0v+qwkwN3yopZuZyf4xt1DBBSGBed8Hf9Gmbm/5dEWqgpLPdRx6Av6jcWXrjcKfkTzg/pw==", 1097 + "dev": true, 1098 + "dependencies": { 1099 + "diff-sequences": "^29.4.3", 1100 + "loupe": "^2.3.6", 1101 + "pretty-format": "^29.5.0" 1102 + }, 1103 + "funding": { 1104 + "url": "https://opencollective.com/vitest" 1105 + } 1106 + }, 1107 + "node_modules/acorn": { 1108 + "version": "8.10.0", 1109 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", 1110 + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", 1111 + "dev": true, 1112 + "bin": { 1113 + "acorn": "bin/acorn" 1114 + }, 1115 + "engines": { 1116 + "node": ">=0.4.0" 1117 + } 1118 + }, 1119 + "node_modules/acorn-jsx": { 1120 + "version": "5.3.2", 1121 + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 1122 + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 1123 + "dev": true, 1124 + "peerDependencies": { 1125 + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 1126 + } 1127 + }, 1128 + "node_modules/acorn-walk": { 1129 + "version": "8.2.0", 1130 + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", 1131 + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", 1132 + "dev": true, 1133 + "engines": { 1134 + "node": ">=0.4.0" 1135 + } 1136 + }, 1137 + "node_modules/ajv": { 1138 + "version": "6.12.6", 1139 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1140 + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1141 + "dev": true, 1142 + "dependencies": { 1143 + "fast-deep-equal": "^3.1.1", 1144 + "fast-json-stable-stringify": "^2.0.0", 1145 + "json-schema-traverse": "^0.4.1", 1146 + "uri-js": "^4.2.2" 1147 + }, 1148 + "funding": { 1149 + "type": "github", 1150 + "url": "https://github.com/sponsors/epoberezkin" 1151 + } 1152 + }, 1153 + "node_modules/ansi-regex": { 1154 + "version": "5.0.1", 1155 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1156 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1157 + "dev": true, 1158 + "engines": { 1159 + "node": ">=8" 1160 + } 1161 + }, 1162 + "node_modules/ansi-styles": { 1163 + "version": "4.3.0", 1164 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1165 + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1166 + "dev": true, 1167 + "dependencies": { 1168 + "color-convert": "^2.0.1" 1169 + }, 1170 + "engines": { 1171 + "node": ">=8" 1172 + }, 1173 + "funding": { 1174 + "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1175 + } 1176 + }, 1177 + "node_modules/anymatch": { 1178 + "version": "3.1.3", 1179 + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 1180 + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 1181 + "dev": true, 1182 + "dependencies": { 1183 + "normalize-path": "^3.0.0", 1184 + "picomatch": "^2.0.4" 1185 + }, 1186 + "engines": { 1187 + "node": ">= 8" 1188 + } 1189 + }, 1190 + "node_modules/argparse": { 1191 + "version": "2.0.1", 1192 + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1193 + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1194 + "dev": true 1195 + }, 1196 + "node_modules/aria-query": { 1197 + "version": "5.3.0", 1198 + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", 1199 + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", 1200 + "dev": true, 1201 + "dependencies": { 1202 + "dequal": "^2.0.3" 1203 + } 1204 + }, 1205 + "node_modules/array-union": { 1206 + "version": "2.1.0", 1207 + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 1208 + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 1209 + "dev": true, 1210 + "engines": { 1211 + "node": ">=8" 1212 + } 1213 + }, 1214 + "node_modules/assertion-error": { 1215 + "version": "1.1.0", 1216 + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", 1217 + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", 1218 + "dev": true, 1219 + "engines": { 1220 + "node": "*" 1221 + } 1222 + }, 1223 + "node_modules/axobject-query": { 1224 + "version": "3.2.1", 1225 + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", 1226 + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", 1227 + "dev": true, 1228 + "dependencies": { 1229 + "dequal": "^2.0.3" 1230 + } 1231 + }, 1232 + "node_modules/balanced-match": { 1233 + "version": "1.0.2", 1234 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1235 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1236 + "dev": true 1237 + }, 1238 + "node_modules/binary-extensions": { 1239 + "version": "2.2.0", 1240 + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 1241 + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 1242 + "dev": true, 1243 + "engines": { 1244 + "node": ">=8" 1245 + } 1246 + }, 1247 + "node_modules/brace-expansion": { 1248 + "version": "1.1.11", 1249 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1250 + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1251 + "dev": true, 1252 + "dependencies": { 1253 + "balanced-match": "^1.0.0", 1254 + "concat-map": "0.0.1" 1255 + } 1256 + }, 1257 + "node_modules/braces": { 1258 + "version": "3.0.2", 1259 + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1260 + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1261 + "dev": true, 1262 + "dependencies": { 1263 + "fill-range": "^7.0.1" 1264 + }, 1265 + "engines": { 1266 + "node": ">=8" 1267 + } 1268 + }, 1269 + "node_modules/buffer-crc32": { 1270 + "version": "0.2.13", 1271 + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 1272 + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", 1273 + "dev": true, 1274 + "engines": { 1275 + "node": "*" 1276 + } 1277 + }, 1278 + "node_modules/busboy": { 1279 + "version": "1.6.0", 1280 + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", 1281 + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", 1282 + "dev": true, 1283 + "dependencies": { 1284 + "streamsearch": "^1.1.0" 1285 + }, 1286 + "engines": { 1287 + "node": ">=10.16.0" 1288 + } 1289 + }, 1290 + "node_modules/cac": { 1291 + "version": "6.7.14", 1292 + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", 1293 + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", 1294 + "dev": true, 1295 + "engines": { 1296 + "node": ">=8" 1297 + } 1298 + }, 1299 + "node_modules/callsites": { 1300 + "version": "3.1.0", 1301 + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1302 + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1303 + "dev": true, 1304 + "engines": { 1305 + "node": ">=6" 1306 + } 1307 + }, 1308 + "node_modules/chai": { 1309 + "version": "4.3.8", 1310 + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", 1311 + "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", 1312 + "dev": true, 1313 + "dependencies": { 1314 + "assertion-error": "^1.1.0", 1315 + "check-error": "^1.0.2", 1316 + "deep-eql": "^4.1.2", 1317 + "get-func-name": "^2.0.0", 1318 + "loupe": "^2.3.1", 1319 + "pathval": "^1.1.1", 1320 + "type-detect": "^4.0.5" 1321 + }, 1322 + "engines": { 1323 + "node": ">=4" 1324 + } 1325 + }, 1326 + "node_modules/chalk": { 1327 + "version": "4.1.2", 1328 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1329 + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1330 + "dev": true, 1331 + "dependencies": { 1332 + "ansi-styles": "^4.1.0", 1333 + "supports-color": "^7.1.0" 1334 + }, 1335 + "engines": { 1336 + "node": ">=10" 1337 + }, 1338 + "funding": { 1339 + "url": "https://github.com/chalk/chalk?sponsor=1" 1340 + } 1341 + }, 1342 + "node_modules/check-error": { 1343 + "version": "1.0.2", 1344 + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", 1345 + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", 1346 + "dev": true, 1347 + "engines": { 1348 + "node": "*" 1349 + } 1350 + }, 1351 + "node_modules/chokidar": { 1352 + "version": "3.5.3", 1353 + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 1354 + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 1355 + "dev": true, 1356 + "funding": [ 1357 + { 1358 + "type": "individual", 1359 + "url": "https://paulmillr.com/funding/" 1360 + } 1361 + ], 1362 + "dependencies": { 1363 + "anymatch": "~3.1.2", 1364 + "braces": "~3.0.2", 1365 + "glob-parent": "~5.1.2", 1366 + "is-binary-path": "~2.1.0", 1367 + "is-glob": "~4.0.1", 1368 + "normalize-path": "~3.0.0", 1369 + "readdirp": "~3.6.0" 1370 + }, 1371 + "engines": { 1372 + "node": ">= 8.10.0" 1373 + }, 1374 + "optionalDependencies": { 1375 + "fsevents": "~2.3.2" 1376 + } 1377 + }, 1378 + "node_modules/code-red": { 1379 + "version": "1.0.4", 1380 + "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", 1381 + "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", 1382 + "dev": true, 1383 + "dependencies": { 1384 + "@jridgewell/sourcemap-codec": "^1.4.15", 1385 + "@types/estree": "^1.0.1", 1386 + "acorn": "^8.10.0", 1387 + "estree-walker": "^3.0.3", 1388 + "periscopic": "^3.1.0" 1389 + } 1390 + }, 1391 + "node_modules/color-convert": { 1392 + "version": "2.0.1", 1393 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1394 + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1395 + "dev": true, 1396 + "dependencies": { 1397 + "color-name": "~1.1.4" 1398 + }, 1399 + "engines": { 1400 + "node": ">=7.0.0" 1401 + } 1402 + }, 1403 + "node_modules/color-name": { 1404 + "version": "1.1.4", 1405 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1406 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1407 + "dev": true 1408 + }, 1409 + "node_modules/concat-map": { 1410 + "version": "0.0.1", 1411 + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1412 + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1413 + "dev": true 1414 + }, 1415 + "node_modules/convert-source-map": { 1416 + "version": "1.9.0", 1417 + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", 1418 + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", 1419 + "dev": true 1420 + }, 1421 + "node_modules/cookie": { 1422 + "version": "0.5.0", 1423 + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 1424 + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 1425 + "dev": true, 1426 + "engines": { 1427 + "node": ">= 0.6" 1428 + } 1429 + }, 1430 + "node_modules/cross-spawn": { 1431 + "version": "7.0.3", 1432 + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1433 + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1434 + "dev": true, 1435 + "dependencies": { 1436 + "path-key": "^3.1.0", 1437 + "shebang-command": "^2.0.0", 1438 + "which": "^2.0.1" 1439 + }, 1440 + "engines": { 1441 + "node": ">= 8" 1442 + } 1443 + }, 1444 + "node_modules/css-tree": { 1445 + "version": "2.3.1", 1446 + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", 1447 + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", 1448 + "dev": true, 1449 + "dependencies": { 1450 + "mdn-data": "2.0.30", 1451 + "source-map-js": "^1.0.1" 1452 + }, 1453 + "engines": { 1454 + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" 1455 + } 1456 + }, 1457 + "node_modules/cssesc": { 1458 + "version": "3.0.0", 1459 + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 1460 + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 1461 + "dev": true, 1462 + "bin": { 1463 + "cssesc": "bin/cssesc" 1464 + }, 1465 + "engines": { 1466 + "node": ">=4" 1467 + } 1468 + }, 1469 + "node_modules/date-fns": { 1470 + "version": "2.30.0", 1471 + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", 1472 + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", 1473 + "dev": true, 1474 + "dependencies": { 1475 + "@babel/runtime": "^7.21.0" 1476 + }, 1477 + "engines": { 1478 + "node": ">=0.11" 1479 + }, 1480 + "funding": { 1481 + "type": "opencollective", 1482 + "url": "https://opencollective.com/date-fns" 1483 + } 1484 + }, 1485 + "node_modules/debug": { 1486 + "version": "4.3.4", 1487 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1488 + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1489 + "dev": true, 1490 + "dependencies": { 1491 + "ms": "2.1.2" 1492 + }, 1493 + "engines": { 1494 + "node": ">=6.0" 1495 + }, 1496 + "peerDependenciesMeta": { 1497 + "supports-color": { 1498 + "optional": true 1499 + } 1500 + } 1501 + }, 1502 + "node_modules/dedent-js": { 1503 + "version": "1.0.1", 1504 + "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", 1505 + "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==", 1506 + "dev": true 1507 + }, 1508 + "node_modules/deep-eql": { 1509 + "version": "4.1.3", 1510 + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", 1511 + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", 1512 + "dev": true, 1513 + "dependencies": { 1514 + "type-detect": "^4.0.0" 1515 + }, 1516 + "engines": { 1517 + "node": ">=6" 1518 + } 1519 + }, 1520 + "node_modules/deep-is": { 1521 + "version": "0.1.4", 1522 + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1523 + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 1524 + "dev": true 1525 + }, 1526 + "node_modules/deepmerge": { 1527 + "version": "4.3.1", 1528 + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", 1529 + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", 1530 + "dev": true, 1531 + "engines": { 1532 + "node": ">=0.10.0" 1533 + } 1534 + }, 1535 + "node_modules/dequal": { 1536 + "version": "2.0.3", 1537 + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", 1538 + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", 1539 + "dev": true, 1540 + "engines": { 1541 + "node": ">=6" 1542 + } 1543 + }, 1544 + "node_modules/detect-indent": { 1545 + "version": "6.1.0", 1546 + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", 1547 + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", 1548 + "dev": true, 1549 + "engines": { 1550 + "node": ">=8" 1551 + } 1552 + }, 1553 + "node_modules/devalue": { 1554 + "version": "4.3.2", 1555 + "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.2.tgz", 1556 + "integrity": "sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==", 1557 + "dev": true 1558 + }, 1559 + "node_modules/diff-sequences": { 1560 + "version": "29.6.3", 1561 + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", 1562 + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", 1563 + "dev": true, 1564 + "engines": { 1565 + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 1566 + } 1567 + }, 1568 + "node_modules/dir-glob": { 1569 + "version": "3.0.1", 1570 + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 1571 + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 1572 + "dev": true, 1573 + "dependencies": { 1574 + "path-type": "^4.0.0" 1575 + }, 1576 + "engines": { 1577 + "node": ">=8" 1578 + } 1579 + }, 1580 + "node_modules/doctrine": { 1581 + "version": "3.0.0", 1582 + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 1583 + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 1584 + "dev": true, 1585 + "dependencies": { 1586 + "esutils": "^2.0.2" 1587 + }, 1588 + "engines": { 1589 + "node": ">=6.0.0" 1590 + } 1591 + }, 1592 + "node_modules/es6-promise": { 1593 + "version": "3.3.1", 1594 + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", 1595 + "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", 1596 + "dev": true 1597 + }, 1598 + "node_modules/esbuild": { 1599 + "version": "0.18.20", 1600 + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", 1601 + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", 1602 + "dev": true, 1603 + "hasInstallScript": true, 1604 + "bin": { 1605 + "esbuild": "bin/esbuild" 1606 + }, 1607 + "engines": { 1608 + "node": ">=12" 1609 + }, 1610 + "optionalDependencies": { 1611 + "@esbuild/android-arm": "0.18.20", 1612 + "@esbuild/android-arm64": "0.18.20", 1613 + "@esbuild/android-x64": "0.18.20", 1614 + "@esbuild/darwin-arm64": "0.18.20", 1615 + "@esbuild/darwin-x64": "0.18.20", 1616 + "@esbuild/freebsd-arm64": "0.18.20", 1617 + "@esbuild/freebsd-x64": "0.18.20", 1618 + "@esbuild/linux-arm": "0.18.20", 1619 + "@esbuild/linux-arm64": "0.18.20", 1620 + "@esbuild/linux-ia32": "0.18.20", 1621 + "@esbuild/linux-loong64": "0.18.20", 1622 + "@esbuild/linux-mips64el": "0.18.20", 1623 + "@esbuild/linux-ppc64": "0.18.20", 1624 + "@esbuild/linux-riscv64": "0.18.20", 1625 + "@esbuild/linux-s390x": "0.18.20", 1626 + "@esbuild/linux-x64": "0.18.20", 1627 + "@esbuild/netbsd-x64": "0.18.20", 1628 + "@esbuild/openbsd-x64": "0.18.20", 1629 + "@esbuild/sunos-x64": "0.18.20", 1630 + "@esbuild/win32-arm64": "0.18.20", 1631 + "@esbuild/win32-ia32": "0.18.20", 1632 + "@esbuild/win32-x64": "0.18.20" 1633 + } 1634 + }, 1635 + "node_modules/escape-string-regexp": { 1636 + "version": "4.0.0", 1637 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1638 + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1639 + "dev": true, 1640 + "engines": { 1641 + "node": ">=10" 1642 + }, 1643 + "funding": { 1644 + "url": "https://github.com/sponsors/sindresorhus" 1645 + } 1646 + }, 1647 + "node_modules/eslint": { 1648 + "version": "8.50.0", 1649 + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", 1650 + "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", 1651 + "dev": true, 1652 + "dependencies": { 1653 + "@eslint-community/eslint-utils": "^4.2.0", 1654 + "@eslint-community/regexpp": "^4.6.1", 1655 + "@eslint/eslintrc": "^2.1.2", 1656 + "@eslint/js": "8.50.0", 1657 + "@humanwhocodes/config-array": "^0.11.11", 1658 + "@humanwhocodes/module-importer": "^1.0.1", 1659 + "@nodelib/fs.walk": "^1.2.8", 1660 + "ajv": "^6.12.4", 1661 + "chalk": "^4.0.0", 1662 + "cross-spawn": "^7.0.2", 1663 + "debug": "^4.3.2", 1664 + "doctrine": "^3.0.0", 1665 + "escape-string-regexp": "^4.0.0", 1666 + "eslint-scope": "^7.2.2", 1667 + "eslint-visitor-keys": "^3.4.3", 1668 + "espree": "^9.6.1", 1669 + "esquery": "^1.4.2", 1670 + "esutils": "^2.0.2", 1671 + "fast-deep-equal": "^3.1.3", 1672 + "file-entry-cache": "^6.0.1", 1673 + "find-up": "^5.0.0", 1674 + "glob-parent": "^6.0.2", 1675 + "globals": "^13.19.0", 1676 + "graphemer": "^1.4.0", 1677 + "ignore": "^5.2.0", 1678 + "imurmurhash": "^0.1.4", 1679 + "is-glob": "^4.0.0", 1680 + "is-path-inside": "^3.0.3", 1681 + "js-yaml": "^4.1.0", 1682 + "json-stable-stringify-without-jsonify": "^1.0.1", 1683 + "levn": "^0.4.1", 1684 + "lodash.merge": "^4.6.2", 1685 + "minimatch": "^3.1.2", 1686 + "natural-compare": "^1.4.0", 1687 + "optionator": "^0.9.3", 1688 + "strip-ansi": "^6.0.1", 1689 + "text-table": "^0.2.0" 1690 + }, 1691 + "bin": { 1692 + "eslint": "bin/eslint.js" 1693 + }, 1694 + "engines": { 1695 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1696 + }, 1697 + "funding": { 1698 + "url": "https://opencollective.com/eslint" 1699 + } 1700 + }, 1701 + "node_modules/eslint-config-prettier": { 1702 + "version": "8.10.0", 1703 + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", 1704 + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", 1705 + "dev": true, 1706 + "bin": { 1707 + "eslint-config-prettier": "bin/cli.js" 1708 + }, 1709 + "peerDependencies": { 1710 + "eslint": ">=7.0.0" 1711 + } 1712 + }, 1713 + "node_modules/eslint-plugin-svelte": { 1714 + "version": "2.33.2", 1715 + "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.33.2.tgz", 1716 + "integrity": "sha512-knWmauax+E/jvQ9CmuX5dAhQKP9P4eGQZxWa5RMutEJVCcy0wFmiUvOeDND2jR4vUkbDlX4khKjaceY7QzbkYw==", 1717 + "dev": true, 1718 + "dependencies": { 1719 + "@eslint-community/eslint-utils": "^4.2.0", 1720 + "@jridgewell/sourcemap-codec": "^1.4.14", 1721 + "debug": "^4.3.1", 1722 + "esutils": "^2.0.3", 1723 + "known-css-properties": "^0.28.0", 1724 + "postcss": "^8.4.5", 1725 + "postcss-load-config": "^3.1.4", 1726 + "postcss-safe-parser": "^6.0.0", 1727 + "postcss-selector-parser": "^6.0.11", 1728 + "semver": "^7.5.3", 1729 + "svelte-eslint-parser": ">=0.33.0 <1.0.0" 1730 + }, 1731 + "engines": { 1732 + "node": "^14.17.0 || >=16.0.0" 1733 + }, 1734 + "funding": { 1735 + "url": "https://github.com/sponsors/ota-meshi" 1736 + }, 1737 + "peerDependencies": { 1738 + "eslint": "^7.0.0 || ^8.0.0-0", 1739 + "svelte": "^3.37.0 || ^4.0.0" 1740 + }, 1741 + "peerDependenciesMeta": { 1742 + "svelte": { 1743 + "optional": true 1744 + } 1745 + } 1746 + }, 1747 + "node_modules/eslint-scope": { 1748 + "version": "7.2.2", 1749 + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", 1750 + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", 1751 + "dev": true, 1752 + "dependencies": { 1753 + "esrecurse": "^4.3.0", 1754 + "estraverse": "^5.2.0" 1755 + }, 1756 + "engines": { 1757 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1758 + }, 1759 + "funding": { 1760 + "url": "https://opencollective.com/eslint" 1761 + } 1762 + }, 1763 + "node_modules/eslint-visitor-keys": { 1764 + "version": "3.4.3", 1765 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 1766 + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 1767 + "dev": true, 1768 + "engines": { 1769 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1770 + }, 1771 + "funding": { 1772 + "url": "https://opencollective.com/eslint" 1773 + } 1774 + }, 1775 + "node_modules/eslint/node_modules/glob-parent": { 1776 + "version": "6.0.2", 1777 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1778 + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1779 + "dev": true, 1780 + "dependencies": { 1781 + "is-glob": "^4.0.3" 1782 + }, 1783 + "engines": { 1784 + "node": ">=10.13.0" 1785 + } 1786 + }, 1787 + "node_modules/esm-env": { 1788 + "version": "1.0.0", 1789 + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz", 1790 + "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==", 1791 + "dev": true 1792 + }, 1793 + "node_modules/espree": { 1794 + "version": "9.6.1", 1795 + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", 1796 + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", 1797 + "dev": true, 1798 + "dependencies": { 1799 + "acorn": "^8.9.0", 1800 + "acorn-jsx": "^5.3.2", 1801 + "eslint-visitor-keys": "^3.4.1" 1802 + }, 1803 + "engines": { 1804 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1805 + }, 1806 + "funding": { 1807 + "url": "https://opencollective.com/eslint" 1808 + } 1809 + }, 1810 + "node_modules/esquery": { 1811 + "version": "1.5.0", 1812 + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", 1813 + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", 1814 + "dev": true, 1815 + "dependencies": { 1816 + "estraverse": "^5.1.0" 1817 + }, 1818 + "engines": { 1819 + "node": ">=0.10" 1820 + } 1821 + }, 1822 + "node_modules/esrecurse": { 1823 + "version": "4.3.0", 1824 + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1825 + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1826 + "dev": true, 1827 + "dependencies": { 1828 + "estraverse": "^5.2.0" 1829 + }, 1830 + "engines": { 1831 + "node": ">=4.0" 1832 + } 1833 + }, 1834 + "node_modules/estraverse": { 1835 + "version": "5.3.0", 1836 + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1837 + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1838 + "dev": true, 1839 + "engines": { 1840 + "node": ">=4.0" 1841 + } 1842 + }, 1843 + "node_modules/estree-walker": { 1844 + "version": "3.0.3", 1845 + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", 1846 + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", 1847 + "dev": true, 1848 + "dependencies": { 1849 + "@types/estree": "^1.0.0" 1850 + } 1851 + }, 1852 + "node_modules/esutils": { 1853 + "version": "2.0.3", 1854 + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1855 + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1856 + "dev": true, 1857 + "engines": { 1858 + "node": ">=0.10.0" 1859 + } 1860 + }, 1861 + "node_modules/fast-deep-equal": { 1862 + "version": "3.1.3", 1863 + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1864 + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1865 + "dev": true 1866 + }, 1867 + "node_modules/fast-glob": { 1868 + "version": "3.3.1", 1869 + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", 1870 + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", 1871 + "dev": true, 1872 + "dependencies": { 1873 + "@nodelib/fs.stat": "^2.0.2", 1874 + "@nodelib/fs.walk": "^1.2.3", 1875 + "glob-parent": "^5.1.2", 1876 + "merge2": "^1.3.0", 1877 + "micromatch": "^4.0.4" 1878 + }, 1879 + "engines": { 1880 + "node": ">=8.6.0" 1881 + } 1882 + }, 1883 + "node_modules/fast-json-stable-stringify": { 1884 + "version": "2.1.0", 1885 + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1886 + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1887 + "dev": true 1888 + }, 1889 + "node_modules/fast-levenshtein": { 1890 + "version": "2.0.6", 1891 + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1892 + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 1893 + "dev": true 1894 + }, 1895 + "node_modules/fastq": { 1896 + "version": "1.15.0", 1897 + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 1898 + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 1899 + "dev": true, 1900 + "dependencies": { 1901 + "reusify": "^1.0.4" 1902 + } 1903 + }, 1904 + "node_modules/file-entry-cache": { 1905 + "version": "6.0.1", 1906 + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 1907 + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 1908 + "dev": true, 1909 + "dependencies": { 1910 + "flat-cache": "^3.0.4" 1911 + }, 1912 + "engines": { 1913 + "node": "^10.12.0 || >=12.0.0" 1914 + } 1915 + }, 1916 + "node_modules/fill-range": { 1917 + "version": "7.0.1", 1918 + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1919 + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1920 + "dev": true, 1921 + "dependencies": { 1922 + "to-regex-range": "^5.0.1" 1923 + }, 1924 + "engines": { 1925 + "node": ">=8" 1926 + } 1927 + }, 1928 + "node_modules/find-up": { 1929 + "version": "5.0.0", 1930 + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 1931 + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 1932 + "dev": true, 1933 + "dependencies": { 1934 + "locate-path": "^6.0.0", 1935 + "path-exists": "^4.0.0" 1936 + }, 1937 + "engines": { 1938 + "node": ">=10" 1939 + }, 1940 + "funding": { 1941 + "url": "https://github.com/sponsors/sindresorhus" 1942 + } 1943 + }, 1944 + "node_modules/flat-cache": { 1945 + "version": "3.1.0", 1946 + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", 1947 + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", 1948 + "dev": true, 1949 + "dependencies": { 1950 + "flatted": "^3.2.7", 1951 + "keyv": "^4.5.3", 1952 + "rimraf": "^3.0.2" 1953 + }, 1954 + "engines": { 1955 + "node": ">=12.0.0" 1956 + } 1957 + }, 1958 + "node_modules/flatted": { 1959 + "version": "3.2.9", 1960 + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", 1961 + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", 1962 + "dev": true 1963 + }, 1964 + "node_modules/fs.realpath": { 1965 + "version": "1.0.0", 1966 + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1967 + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1968 + "dev": true 1969 + }, 1970 + "node_modules/fsevents": { 1971 + "version": "2.3.3", 1972 + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1973 + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1974 + "dev": true, 1975 + "hasInstallScript": true, 1976 + "optional": true, 1977 + "os": [ 1978 + "darwin" 1979 + ], 1980 + "engines": { 1981 + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1982 + } 1983 + }, 1984 + "node_modules/get-func-name": { 1985 + "version": "2.0.0", 1986 + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", 1987 + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", 1988 + "dev": true, 1989 + "engines": { 1990 + "node": "*" 1991 + } 1992 + }, 1993 + "node_modules/glob": { 1994 + "version": "7.2.3", 1995 + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1996 + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1997 + "dev": true, 1998 + "dependencies": { 1999 + "fs.realpath": "^1.0.0", 2000 + "inflight": "^1.0.4", 2001 + "inherits": "2", 2002 + "minimatch": "^3.1.1", 2003 + "once": "^1.3.0", 2004 + "path-is-absolute": "^1.0.0" 2005 + }, 2006 + "engines": { 2007 + "node": "*" 2008 + }, 2009 + "funding": { 2010 + "url": "https://github.com/sponsors/isaacs" 2011 + } 2012 + }, 2013 + "node_modules/glob-parent": { 2014 + "version": "5.1.2", 2015 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2016 + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2017 + "dev": true, 2018 + "dependencies": { 2019 + "is-glob": "^4.0.1" 2020 + }, 2021 + "engines": { 2022 + "node": ">= 6" 2023 + } 2024 + }, 2025 + "node_modules/globals": { 2026 + "version": "13.22.0", 2027 + "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", 2028 + "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", 2029 + "dev": true, 2030 + "dependencies": { 2031 + "type-fest": "^0.20.2" 2032 + }, 2033 + "engines": { 2034 + "node": ">=8" 2035 + }, 2036 + "funding": { 2037 + "url": "https://github.com/sponsors/sindresorhus" 2038 + } 2039 + }, 2040 + "node_modules/globalyzer": { 2041 + "version": "0.1.0", 2042 + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", 2043 + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", 2044 + "dev": true 2045 + }, 2046 + "node_modules/globby": { 2047 + "version": "11.1.0", 2048 + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", 2049 + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", 2050 + "dev": true, 2051 + "dependencies": { 2052 + "array-union": "^2.1.0", 2053 + "dir-glob": "^3.0.1", 2054 + "fast-glob": "^3.2.9", 2055 + "ignore": "^5.2.0", 2056 + "merge2": "^1.4.1", 2057 + "slash": "^3.0.0" 2058 + }, 2059 + "engines": { 2060 + "node": ">=10" 2061 + }, 2062 + "funding": { 2063 + "url": "https://github.com/sponsors/sindresorhus" 2064 + } 2065 + }, 2066 + "node_modules/globrex": { 2067 + "version": "0.1.2", 2068 + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", 2069 + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", 2070 + "dev": true 2071 + }, 2072 + "node_modules/graceful-fs": { 2073 + "version": "4.2.11", 2074 + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 2075 + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 2076 + "dev": true 2077 + }, 2078 + "node_modules/graphemer": { 2079 + "version": "1.4.0", 2080 + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 2081 + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 2082 + "dev": true 2083 + }, 2084 + "node_modules/has-flag": { 2085 + "version": "4.0.0", 2086 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2087 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2088 + "dev": true, 2089 + "engines": { 2090 + "node": ">=8" 2091 + } 2092 + }, 2093 + "node_modules/html-escaper": { 2094 + "version": "2.0.2", 2095 + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", 2096 + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", 2097 + "dev": true 2098 + }, 2099 + "node_modules/ignore": { 2100 + "version": "5.2.4", 2101 + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", 2102 + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", 2103 + "dev": true, 2104 + "engines": { 2105 + "node": ">= 4" 2106 + } 2107 + }, 2108 + "node_modules/immutable": { 2109 + "version": "4.3.4", 2110 + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", 2111 + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", 2112 + "dev": true 2113 + }, 2114 + "node_modules/import-fresh": { 2115 + "version": "3.3.0", 2116 + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 2117 + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 2118 + "dev": true, 2119 + "dependencies": { 2120 + "parent-module": "^1.0.0", 2121 + "resolve-from": "^4.0.0" 2122 + }, 2123 + "engines": { 2124 + "node": ">=6" 2125 + }, 2126 + "funding": { 2127 + "url": "https://github.com/sponsors/sindresorhus" 2128 + } 2129 + }, 2130 + "node_modules/imurmurhash": { 2131 + "version": "0.1.4", 2132 + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 2133 + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 2134 + "dev": true, 2135 + "engines": { 2136 + "node": ">=0.8.19" 2137 + } 2138 + }, 2139 + "node_modules/inflight": { 2140 + "version": "1.0.6", 2141 + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2142 + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 2143 + "dev": true, 2144 + "dependencies": { 2145 + "once": "^1.3.0", 2146 + "wrappy": "1" 2147 + } 2148 + }, 2149 + "node_modules/inherits": { 2150 + "version": "2.0.4", 2151 + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2152 + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 2153 + "dev": true 2154 + }, 2155 + "node_modules/is-binary-path": { 2156 + "version": "2.1.0", 2157 + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 2158 + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 2159 + "dev": true, 2160 + "dependencies": { 2161 + "binary-extensions": "^2.0.0" 2162 + }, 2163 + "engines": { 2164 + "node": ">=8" 2165 + } 2166 + }, 2167 + "node_modules/is-extglob": { 2168 + "version": "2.1.1", 2169 + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2170 + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 2171 + "dev": true, 2172 + "engines": { 2173 + "node": ">=0.10.0" 2174 + } 2175 + }, 2176 + "node_modules/is-glob": { 2177 + "version": "4.0.3", 2178 + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2179 + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2180 + "dev": true, 2181 + "dependencies": { 2182 + "is-extglob": "^2.1.1" 2183 + }, 2184 + "engines": { 2185 + "node": ">=0.10.0" 2186 + } 2187 + }, 2188 + "node_modules/is-number": { 2189 + "version": "7.0.0", 2190 + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2191 + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2192 + "dev": true, 2193 + "engines": { 2194 + "node": ">=0.12.0" 2195 + } 2196 + }, 2197 + "node_modules/is-path-inside": { 2198 + "version": "3.0.3", 2199 + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 2200 + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 2201 + "dev": true, 2202 + "engines": { 2203 + "node": ">=8" 2204 + } 2205 + }, 2206 + "node_modules/is-reference": { 2207 + "version": "3.0.2", 2208 + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", 2209 + "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", 2210 + "dev": true, 2211 + "dependencies": { 2212 + "@types/estree": "*" 2213 + } 2214 + }, 2215 + "node_modules/isexe": { 2216 + "version": "2.0.0", 2217 + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2218 + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 2219 + "dev": true 2220 + }, 2221 + "node_modules/istanbul-lib-coverage": { 2222 + "version": "3.2.0", 2223 + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", 2224 + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", 2225 + "dev": true, 2226 + "engines": { 2227 + "node": ">=8" 2228 + } 2229 + }, 2230 + "node_modules/istanbul-lib-report": { 2231 + "version": "3.0.1", 2232 + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", 2233 + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", 2234 + "dev": true, 2235 + "dependencies": { 2236 + "istanbul-lib-coverage": "^3.0.0", 2237 + "make-dir": "^4.0.0", 2238 + "supports-color": "^7.1.0" 2239 + }, 2240 + "engines": { 2241 + "node": ">=10" 2242 + } 2243 + }, 2244 + "node_modules/istanbul-lib-source-maps": { 2245 + "version": "4.0.1", 2246 + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", 2247 + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", 2248 + "dev": true, 2249 + "dependencies": { 2250 + "debug": "^4.1.1", 2251 + "istanbul-lib-coverage": "^3.0.0", 2252 + "source-map": "^0.6.1" 2253 + }, 2254 + "engines": { 2255 + "node": ">=10" 2256 + } 2257 + }, 2258 + "node_modules/istanbul-reports": { 2259 + "version": "3.1.6", 2260 + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", 2261 + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", 2262 + "dev": true, 2263 + "dependencies": { 2264 + "html-escaper": "^2.0.0", 2265 + "istanbul-lib-report": "^3.0.0" 2266 + }, 2267 + "engines": { 2268 + "node": ">=8" 2269 + } 2270 + }, 2271 + "node_modules/js-yaml": { 2272 + "version": "4.1.0", 2273 + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2274 + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2275 + "dev": true, 2276 + "dependencies": { 2277 + "argparse": "^2.0.1" 2278 + }, 2279 + "bin": { 2280 + "js-yaml": "bin/js-yaml.js" 2281 + } 2282 + }, 2283 + "node_modules/json-buffer": { 2284 + "version": "3.0.1", 2285 + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 2286 + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 2287 + "dev": true 2288 + }, 2289 + "node_modules/json-schema-traverse": { 2290 + "version": "0.4.1", 2291 + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2292 + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2293 + "dev": true 2294 + }, 2295 + "node_modules/json-stable-stringify-without-jsonify": { 2296 + "version": "1.0.1", 2297 + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 2298 + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 2299 + "dev": true 2300 + }, 2301 + "node_modules/jsonc-parser": { 2302 + "version": "3.2.0", 2303 + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", 2304 + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", 2305 + "dev": true 2306 + }, 2307 + "node_modules/keyv": { 2308 + "version": "4.5.3", 2309 + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", 2310 + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", 2311 + "dev": true, 2312 + "dependencies": { 2313 + "json-buffer": "3.0.1" 2314 + } 2315 + }, 2316 + "node_modules/kleur": { 2317 + "version": "4.1.5", 2318 + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", 2319 + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", 2320 + "dev": true, 2321 + "engines": { 2322 + "node": ">=6" 2323 + } 2324 + }, 2325 + "node_modules/known-css-properties": { 2326 + "version": "0.28.0", 2327 + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.28.0.tgz", 2328 + "integrity": "sha512-9pSL5XB4J+ifHP0e0jmmC98OGC1nL8/JjS+fi6mnTlIf//yt/MfVLtKg7S6nCtj/8KTcWX7nRlY0XywoYY1ISQ==", 2329 + "dev": true 2330 + }, 2331 + "node_modules/levn": { 2332 + "version": "0.4.1", 2333 + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 2334 + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 2335 + "dev": true, 2336 + "dependencies": { 2337 + "prelude-ls": "^1.2.1", 2338 + "type-check": "~0.4.0" 2339 + }, 2340 + "engines": { 2341 + "node": ">= 0.8.0" 2342 + } 2343 + }, 2344 + "node_modules/lilconfig": { 2345 + "version": "2.1.0", 2346 + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", 2347 + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", 2348 + "dev": true, 2349 + "engines": { 2350 + "node": ">=10" 2351 + } 2352 + }, 2353 + "node_modules/local-pkg": { 2354 + "version": "0.4.3", 2355 + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", 2356 + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", 2357 + "dev": true, 2358 + "engines": { 2359 + "node": ">=14" 2360 + }, 2361 + "funding": { 2362 + "url": "https://github.com/sponsors/antfu" 2363 + } 2364 + }, 2365 + "node_modules/locate-character": { 2366 + "version": "3.0.0", 2367 + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", 2368 + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", 2369 + "dev": true 2370 + }, 2371 + "node_modules/locate-path": { 2372 + "version": "6.0.0", 2373 + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 2374 + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 2375 + "dev": true, 2376 + "dependencies": { 2377 + "p-locate": "^5.0.0" 2378 + }, 2379 + "engines": { 2380 + "node": ">=10" 2381 + }, 2382 + "funding": { 2383 + "url": "https://github.com/sponsors/sindresorhus" 2384 + } 2385 + }, 2386 + "node_modules/lodash.merge": { 2387 + "version": "4.6.2", 2388 + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 2389 + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 2390 + "dev": true 2391 + }, 2392 + "node_modules/loupe": { 2393 + "version": "2.3.6", 2394 + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", 2395 + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", 2396 + "dev": true, 2397 + "dependencies": { 2398 + "get-func-name": "^2.0.0" 2399 + } 2400 + }, 2401 + "node_modules/lower-case": { 2402 + "version": "2.0.2", 2403 + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", 2404 + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", 2405 + "dev": true, 2406 + "dependencies": { 2407 + "tslib": "^2.0.3" 2408 + } 2409 + }, 2410 + "node_modules/lru-cache": { 2411 + "version": "6.0.0", 2412 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 2413 + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 2414 + "dev": true, 2415 + "dependencies": { 2416 + "yallist": "^4.0.0" 2417 + }, 2418 + "engines": { 2419 + "node": ">=10" 2420 + } 2421 + }, 2422 + "node_modules/magic-string": { 2423 + "version": "0.30.3", 2424 + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz", 2425 + "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==", 2426 + "dev": true, 2427 + "dependencies": { 2428 + "@jridgewell/sourcemap-codec": "^1.4.15" 2429 + }, 2430 + "engines": { 2431 + "node": ">=12" 2432 + } 2433 + }, 2434 + "node_modules/make-dir": { 2435 + "version": "4.0.0", 2436 + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", 2437 + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", 2438 + "dev": true, 2439 + "dependencies": { 2440 + "semver": "^7.5.3" 2441 + }, 2442 + "engines": { 2443 + "node": ">=10" 2444 + }, 2445 + "funding": { 2446 + "url": "https://github.com/sponsors/sindresorhus" 2447 + } 2448 + }, 2449 + "node_modules/mdn-data": { 2450 + "version": "2.0.30", 2451 + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", 2452 + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", 2453 + "dev": true 2454 + }, 2455 + "node_modules/mdsvex": { 2456 + "version": "0.11.0", 2457 + "resolved": "https://registry.npmjs.org/mdsvex/-/mdsvex-0.11.0.tgz", 2458 + "integrity": "sha512-gJF1s0N2nCmdxcKn8HDn0LKrN8poStqAicp6bBcsKFd/zkUBGLP5e7vnxu+g0pjBbDFOscUyI1mtHz+YK2TCDw==", 2459 + "dev": true, 2460 + "dependencies": { 2461 + "@types/unist": "^2.0.3", 2462 + "prism-svelte": "^0.4.7", 2463 + "prismjs": "^1.17.1", 2464 + "vfile-message": "^2.0.4" 2465 + }, 2466 + "peerDependencies": { 2467 + "svelte": ">=3 <5" 2468 + } 2469 + }, 2470 + "node_modules/merge2": { 2471 + "version": "1.4.1", 2472 + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 2473 + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 2474 + "dev": true, 2475 + "engines": { 2476 + "node": ">= 8" 2477 + } 2478 + }, 2479 + "node_modules/micromatch": { 2480 + "version": "4.0.5", 2481 + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 2482 + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 2483 + "dev": true, 2484 + "dependencies": { 2485 + "braces": "^3.0.2", 2486 + "picomatch": "^2.3.1" 2487 + }, 2488 + "engines": { 2489 + "node": ">=8.6" 2490 + } 2491 + }, 2492 + "node_modules/mime": { 2493 + "version": "3.0.0", 2494 + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", 2495 + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", 2496 + "dev": true, 2497 + "bin": { 2498 + "mime": "cli.js" 2499 + }, 2500 + "engines": { 2501 + "node": ">=10.0.0" 2502 + } 2503 + }, 2504 + "node_modules/min-indent": { 2505 + "version": "1.0.1", 2506 + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", 2507 + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", 2508 + "dev": true, 2509 + "engines": { 2510 + "node": ">=4" 2511 + } 2512 + }, 2513 + "node_modules/minimatch": { 2514 + "version": "3.1.2", 2515 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2516 + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2517 + "dev": true, 2518 + "dependencies": { 2519 + "brace-expansion": "^1.1.7" 2520 + }, 2521 + "engines": { 2522 + "node": "*" 2523 + } 2524 + }, 2525 + "node_modules/minimist": { 2526 + "version": "1.2.8", 2527 + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 2528 + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 2529 + "dev": true, 2530 + "funding": { 2531 + "url": "https://github.com/sponsors/ljharb" 2532 + } 2533 + }, 2534 + "node_modules/mkdirp": { 2535 + "version": "0.5.6", 2536 + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", 2537 + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", 2538 + "dev": true, 2539 + "dependencies": { 2540 + "minimist": "^1.2.6" 2541 + }, 2542 + "bin": { 2543 + "mkdirp": "bin/cmd.js" 2544 + } 2545 + }, 2546 + "node_modules/mlly": { 2547 + "version": "1.4.2", 2548 + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz", 2549 + "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", 2550 + "dev": true, 2551 + "dependencies": { 2552 + "acorn": "^8.10.0", 2553 + "pathe": "^1.1.1", 2554 + "pkg-types": "^1.0.3", 2555 + "ufo": "^1.3.0" 2556 + } 2557 + }, 2558 + "node_modules/mri": { 2559 + "version": "1.2.0", 2560 + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", 2561 + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", 2562 + "dev": true, 2563 + "engines": { 2564 + "node": ">=4" 2565 + } 2566 + }, 2567 + "node_modules/mrmime": { 2568 + "version": "1.0.1", 2569 + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", 2570 + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", 2571 + "dev": true, 2572 + "engines": { 2573 + "node": ">=10" 2574 + } 2575 + }, 2576 + "node_modules/ms": { 2577 + "version": "2.1.2", 2578 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2579 + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2580 + "dev": true 2581 + }, 2582 + "node_modules/nanoid": { 2583 + "version": "3.3.6", 2584 + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", 2585 + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", 2586 + "dev": true, 2587 + "funding": [ 2588 + { 2589 + "type": "github", 2590 + "url": "https://github.com/sponsors/ai" 2591 + } 2592 + ], 2593 + "bin": { 2594 + "nanoid": "bin/nanoid.cjs" 2595 + }, 2596 + "engines": { 2597 + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 2598 + } 2599 + }, 2600 + "node_modules/natural-compare": { 2601 + "version": "1.4.0", 2602 + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2603 + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 2604 + "dev": true 2605 + }, 2606 + "node_modules/no-case": { 2607 + "version": "3.0.4", 2608 + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", 2609 + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", 2610 + "dev": true, 2611 + "dependencies": { 2612 + "lower-case": "^2.0.2", 2613 + "tslib": "^2.0.3" 2614 + } 2615 + }, 2616 + "node_modules/normalize-path": { 2617 + "version": "3.0.0", 2618 + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 2619 + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 2620 + "dev": true, 2621 + "engines": { 2622 + "node": ">=0.10.0" 2623 + } 2624 + }, 2625 + "node_modules/once": { 2626 + "version": "1.4.0", 2627 + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2628 + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2629 + "dev": true, 2630 + "dependencies": { 2631 + "wrappy": "1" 2632 + } 2633 + }, 2634 + "node_modules/optionator": { 2635 + "version": "0.9.3", 2636 + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", 2637 + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", 2638 + "dev": true, 2639 + "dependencies": { 2640 + "@aashutoshrathi/word-wrap": "^1.2.3", 2641 + "deep-is": "^0.1.3", 2642 + "fast-levenshtein": "^2.0.6", 2643 + "levn": "^0.4.1", 2644 + "prelude-ls": "^1.2.1", 2645 + "type-check": "^0.4.0" 2646 + }, 2647 + "engines": { 2648 + "node": ">= 0.8.0" 2649 + } 2650 + }, 2651 + "node_modules/p-limit": { 2652 + "version": "3.1.0", 2653 + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 2654 + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 2655 + "dev": true, 2656 + "dependencies": { 2657 + "yocto-queue": "^0.1.0" 2658 + }, 2659 + "engines": { 2660 + "node": ">=10" 2661 + }, 2662 + "funding": { 2663 + "url": "https://github.com/sponsors/sindresorhus" 2664 + } 2665 + }, 2666 + "node_modules/p-locate": { 2667 + "version": "5.0.0", 2668 + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 2669 + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 2670 + "dev": true, 2671 + "dependencies": { 2672 + "p-limit": "^3.0.2" 2673 + }, 2674 + "engines": { 2675 + "node": ">=10" 2676 + }, 2677 + "funding": { 2678 + "url": "https://github.com/sponsors/sindresorhus" 2679 + } 2680 + }, 2681 + "node_modules/parent-module": { 2682 + "version": "1.0.1", 2683 + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2684 + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2685 + "dev": true, 2686 + "dependencies": { 2687 + "callsites": "^3.0.0" 2688 + }, 2689 + "engines": { 2690 + "node": ">=6" 2691 + } 2692 + }, 2693 + "node_modules/pascal-case": { 2694 + "version": "3.1.2", 2695 + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", 2696 + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", 2697 + "dev": true, 2698 + "dependencies": { 2699 + "no-case": "^3.0.4", 2700 + "tslib": "^2.0.3" 2701 + } 2702 + }, 2703 + "node_modules/path-exists": { 2704 + "version": "4.0.0", 2705 + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2706 + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2707 + "dev": true, 2708 + "engines": { 2709 + "node": ">=8" 2710 + } 2711 + }, 2712 + "node_modules/path-is-absolute": { 2713 + "version": "1.0.1", 2714 + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2715 + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 2716 + "dev": true, 2717 + "engines": { 2718 + "node": ">=0.10.0" 2719 + } 2720 + }, 2721 + "node_modules/path-key": { 2722 + "version": "3.1.1", 2723 + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2724 + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2725 + "dev": true, 2726 + "engines": { 2727 + "node": ">=8" 2728 + } 2729 + }, 2730 + "node_modules/path-type": { 2731 + "version": "4.0.0", 2732 + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 2733 + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 2734 + "dev": true, 2735 + "engines": { 2736 + "node": ">=8" 2737 + } 2738 + }, 2739 + "node_modules/pathe": { 2740 + "version": "1.1.1", 2741 + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", 2742 + "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", 2743 + "dev": true 2744 + }, 2745 + "node_modules/pathval": { 2746 + "version": "1.1.1", 2747 + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", 2748 + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", 2749 + "dev": true, 2750 + "engines": { 2751 + "node": "*" 2752 + } 2753 + }, 2754 + "node_modules/periscopic": { 2755 + "version": "3.1.0", 2756 + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", 2757 + "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", 2758 + "dev": true, 2759 + "dependencies": { 2760 + "@types/estree": "^1.0.0", 2761 + "estree-walker": "^3.0.0", 2762 + "is-reference": "^3.0.0" 2763 + } 2764 + }, 2765 + "node_modules/picocolors": { 2766 + "version": "1.0.0", 2767 + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 2768 + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 2769 + "dev": true 2770 + }, 2771 + "node_modules/picomatch": { 2772 + "version": "2.3.1", 2773 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2774 + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2775 + "dev": true, 2776 + "engines": { 2777 + "node": ">=8.6" 2778 + }, 2779 + "funding": { 2780 + "url": "https://github.com/sponsors/jonschlinkert" 2781 + } 2782 + }, 2783 + "node_modules/pkg-types": { 2784 + "version": "1.0.3", 2785 + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", 2786 + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", 2787 + "dev": true, 2788 + "dependencies": { 2789 + "jsonc-parser": "^3.2.0", 2790 + "mlly": "^1.2.0", 2791 + "pathe": "^1.1.0" 2792 + } 2793 + }, 2794 + "node_modules/postcss": { 2795 + "version": "8.4.30", 2796 + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.30.tgz", 2797 + "integrity": "sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==", 2798 + "dev": true, 2799 + "funding": [ 2800 + { 2801 + "type": "opencollective", 2802 + "url": "https://opencollective.com/postcss/" 2803 + }, 2804 + { 2805 + "type": "tidelift", 2806 + "url": "https://tidelift.com/funding/github/npm/postcss" 2807 + }, 2808 + { 2809 + "type": "github", 2810 + "url": "https://github.com/sponsors/ai" 2811 + } 2812 + ], 2813 + "dependencies": { 2814 + "nanoid": "^3.3.6", 2815 + "picocolors": "^1.0.0", 2816 + "source-map-js": "^1.0.2" 2817 + }, 2818 + "engines": { 2819 + "node": "^10 || ^12 || >=14" 2820 + } 2821 + }, 2822 + "node_modules/postcss-load-config": { 2823 + "version": "3.1.4", 2824 + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", 2825 + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", 2826 + "dev": true, 2827 + "dependencies": { 2828 + "lilconfig": "^2.0.5", 2829 + "yaml": "^1.10.2" 2830 + }, 2831 + "engines": { 2832 + "node": ">= 10" 2833 + }, 2834 + "funding": { 2835 + "type": "opencollective", 2836 + "url": "https://opencollective.com/postcss/" 2837 + }, 2838 + "peerDependencies": { 2839 + "postcss": ">=8.0.9", 2840 + "ts-node": ">=9.0.0" 2841 + }, 2842 + "peerDependenciesMeta": { 2843 + "postcss": { 2844 + "optional": true 2845 + }, 2846 + "ts-node": { 2847 + "optional": true 2848 + } 2849 + } 2850 + }, 2851 + "node_modules/postcss-safe-parser": { 2852 + "version": "6.0.0", 2853 + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", 2854 + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", 2855 + "dev": true, 2856 + "engines": { 2857 + "node": ">=12.0" 2858 + }, 2859 + "funding": { 2860 + "type": "opencollective", 2861 + "url": "https://opencollective.com/postcss/" 2862 + }, 2863 + "peerDependencies": { 2864 + "postcss": "^8.3.3" 2865 + } 2866 + }, 2867 + "node_modules/postcss-scss": { 2868 + "version": "4.0.8", 2869 + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.8.tgz", 2870 + "integrity": "sha512-Cr0X8Eu7xMhE96PJck6ses/uVVXDtE5ghUTKNUYgm8ozgP2TkgV3LWs3WgLV1xaSSLq8ZFiXaUrj0LVgG1fGEA==", 2871 + "dev": true, 2872 + "funding": [ 2873 + { 2874 + "type": "opencollective", 2875 + "url": "https://opencollective.com/postcss/" 2876 + }, 2877 + { 2878 + "type": "tidelift", 2879 + "url": "https://tidelift.com/funding/github/npm/postcss-scss" 2880 + }, 2881 + { 2882 + "type": "github", 2883 + "url": "https://github.com/sponsors/ai" 2884 + } 2885 + ], 2886 + "engines": { 2887 + "node": ">=12.0" 2888 + }, 2889 + "peerDependencies": { 2890 + "postcss": "^8.4.29" 2891 + } 2892 + }, 2893 + "node_modules/postcss-selector-parser": { 2894 + "version": "6.0.13", 2895 + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", 2896 + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", 2897 + "dev": true, 2898 + "dependencies": { 2899 + "cssesc": "^3.0.0", 2900 + "util-deprecate": "^1.0.2" 2901 + }, 2902 + "engines": { 2903 + "node": ">=4" 2904 + } 2905 + }, 2906 + "node_modules/prelude-ls": { 2907 + "version": "1.2.1", 2908 + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 2909 + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 2910 + "dev": true, 2911 + "engines": { 2912 + "node": ">= 0.8.0" 2913 + } 2914 + }, 2915 + "node_modules/prettier": { 2916 + "version": "2.8.8", 2917 + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", 2918 + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", 2919 + "dev": true, 2920 + "bin": { 2921 + "prettier": "bin-prettier.js" 2922 + }, 2923 + "engines": { 2924 + "node": ">=10.13.0" 2925 + }, 2926 + "funding": { 2927 + "url": "https://github.com/prettier/prettier?sponsor=1" 2928 + } 2929 + }, 2930 + "node_modules/prettier-plugin-svelte": { 2931 + "version": "2.10.1", 2932 + "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.10.1.tgz", 2933 + "integrity": "sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==", 2934 + "dev": true, 2935 + "peerDependencies": { 2936 + "prettier": "^1.16.4 || ^2.0.0", 2937 + "svelte": "^3.2.0 || ^4.0.0-next.0" 2938 + } 2939 + }, 2940 + "node_modules/pretty-format": { 2941 + "version": "29.7.0", 2942 + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", 2943 + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", 2944 + "dev": true, 2945 + "dependencies": { 2946 + "@jest/schemas": "^29.6.3", 2947 + "ansi-styles": "^5.0.0", 2948 + "react-is": "^18.0.0" 2949 + }, 2950 + "engines": { 2951 + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2952 + } 2953 + }, 2954 + "node_modules/pretty-format/node_modules/ansi-styles": { 2955 + "version": "5.2.0", 2956 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", 2957 + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", 2958 + "dev": true, 2959 + "engines": { 2960 + "node": ">=10" 2961 + }, 2962 + "funding": { 2963 + "url": "https://github.com/chalk/ansi-styles?sponsor=1" 2964 + } 2965 + }, 2966 + "node_modules/prism-svelte": { 2967 + "version": "0.4.7", 2968 + "resolved": "https://registry.npmjs.org/prism-svelte/-/prism-svelte-0.4.7.tgz", 2969 + "integrity": "sha512-yABh19CYbM24V7aS7TuPYRNMqthxwbvx6FF/Rw920YbyBWO3tnyPIqRMgHuSVsLmuHkkBS1Akyof463FVdkeDQ==", 2970 + "dev": true 2971 + }, 2972 + "node_modules/prismjs": { 2973 + "version": "1.29.0", 2974 + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", 2975 + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", 2976 + "dev": true, 2977 + "engines": { 2978 + "node": ">=6" 2979 + } 2980 + }, 2981 + "node_modules/punycode": { 2982 + "version": "2.3.0", 2983 + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 2984 + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 2985 + "dev": true, 2986 + "engines": { 2987 + "node": ">=6" 2988 + } 2989 + }, 2990 + "node_modules/queue-microtask": { 2991 + "version": "1.2.3", 2992 + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2993 + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2994 + "dev": true, 2995 + "funding": [ 2996 + { 2997 + "type": "github", 2998 + "url": "https://github.com/sponsors/feross" 2999 + }, 3000 + { 3001 + "type": "patreon", 3002 + "url": "https://www.patreon.com/feross" 3003 + }, 3004 + { 3005 + "type": "consulting", 3006 + "url": "https://feross.org/support" 3007 + } 3008 + ] 3009 + }, 3010 + "node_modules/react-is": { 3011 + "version": "18.2.0", 3012 + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", 3013 + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", 3014 + "dev": true 3015 + }, 3016 + "node_modules/readdirp": { 3017 + "version": "3.6.0", 3018 + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 3019 + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 3020 + "dev": true, 3021 + "dependencies": { 3022 + "picomatch": "^2.2.1" 3023 + }, 3024 + "engines": { 3025 + "node": ">=8.10.0" 3026 + } 3027 + }, 3028 + "node_modules/regenerator-runtime": { 3029 + "version": "0.14.0", 3030 + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", 3031 + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", 3032 + "dev": true 3033 + }, 3034 + "node_modules/resolve-from": { 3035 + "version": "4.0.0", 3036 + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 3037 + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 3038 + "dev": true, 3039 + "engines": { 3040 + "node": ">=4" 3041 + } 3042 + }, 3043 + "node_modules/reusify": { 3044 + "version": "1.0.4", 3045 + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 3046 + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 3047 + "dev": true, 3048 + "engines": { 3049 + "iojs": ">=1.0.0", 3050 + "node": ">=0.10.0" 3051 + } 3052 + }, 3053 + "node_modules/rimraf": { 3054 + "version": "3.0.2", 3055 + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 3056 + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 3057 + "dev": true, 3058 + "dependencies": { 3059 + "glob": "^7.1.3" 3060 + }, 3061 + "bin": { 3062 + "rimraf": "bin.js" 3063 + }, 3064 + "funding": { 3065 + "url": "https://github.com/sponsors/isaacs" 3066 + } 3067 + }, 3068 + "node_modules/rollup": { 3069 + "version": "3.29.2", 3070 + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.2.tgz", 3071 + "integrity": "sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A==", 3072 + "dev": true, 3073 + "bin": { 3074 + "rollup": "dist/bin/rollup" 3075 + }, 3076 + "engines": { 3077 + "node": ">=14.18.0", 3078 + "npm": ">=8.0.0" 3079 + }, 3080 + "optionalDependencies": { 3081 + "fsevents": "~2.3.2" 3082 + } 3083 + }, 3084 + "node_modules/run-parallel": { 3085 + "version": "1.2.0", 3086 + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 3087 + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 3088 + "dev": true, 3089 + "funding": [ 3090 + { 3091 + "type": "github", 3092 + "url": "https://github.com/sponsors/feross" 3093 + }, 3094 + { 3095 + "type": "patreon", 3096 + "url": "https://www.patreon.com/feross" 3097 + }, 3098 + { 3099 + "type": "consulting", 3100 + "url": "https://feross.org/support" 3101 + } 3102 + ], 3103 + "dependencies": { 3104 + "queue-microtask": "^1.2.2" 3105 + } 3106 + }, 3107 + "node_modules/sade": { 3108 + "version": "1.8.1", 3109 + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", 3110 + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", 3111 + "dev": true, 3112 + "dependencies": { 3113 + "mri": "^1.1.0" 3114 + }, 3115 + "engines": { 3116 + "node": ">=6" 3117 + } 3118 + }, 3119 + "node_modules/sander": { 3120 + "version": "0.5.1", 3121 + "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", 3122 + "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", 3123 + "dev": true, 3124 + "dependencies": { 3125 + "es6-promise": "^3.1.2", 3126 + "graceful-fs": "^4.1.3", 3127 + "mkdirp": "^0.5.1", 3128 + "rimraf": "^2.5.2" 3129 + } 3130 + }, 3131 + "node_modules/sander/node_modules/rimraf": { 3132 + "version": "2.7.1", 3133 + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 3134 + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 3135 + "dev": true, 3136 + "dependencies": { 3137 + "glob": "^7.1.3" 3138 + }, 3139 + "bin": { 3140 + "rimraf": "bin.js" 3141 + } 3142 + }, 3143 + "node_modules/sass": { 3144 + "version": "1.68.0", 3145 + "resolved": "https://registry.npmjs.org/sass/-/sass-1.68.0.tgz", 3146 + "integrity": "sha512-Lmj9lM/fef0nQswm1J2HJcEsBUba4wgNx2fea6yJHODREoMFnwRpZydBnX/RjyXw2REIwdkbqE4hrTo4qfDBUA==", 3147 + "dev": true, 3148 + "dependencies": { 3149 + "chokidar": ">=3.0.0 <4.0.0", 3150 + "immutable": "^4.0.0", 3151 + "source-map-js": ">=0.6.2 <2.0.0" 3152 + }, 3153 + "bin": { 3154 + "sass": "sass.js" 3155 + }, 3156 + "engines": { 3157 + "node": ">=14.0.0" 3158 + } 3159 + }, 3160 + "node_modules/semver": { 3161 + "version": "7.5.4", 3162 + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", 3163 + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", 3164 + "dev": true, 3165 + "dependencies": { 3166 + "lru-cache": "^6.0.0" 3167 + }, 3168 + "bin": { 3169 + "semver": "bin/semver.js" 3170 + }, 3171 + "engines": { 3172 + "node": ">=10" 3173 + } 3174 + }, 3175 + "node_modules/set-cookie-parser": { 3176 + "version": "2.6.0", 3177 + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", 3178 + "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", 3179 + "dev": true 3180 + }, 3181 + "node_modules/shebang-command": { 3182 + "version": "2.0.0", 3183 + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 3184 + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 3185 + "dev": true, 3186 + "dependencies": { 3187 + "shebang-regex": "^3.0.0" 3188 + }, 3189 + "engines": { 3190 + "node": ">=8" 3191 + } 3192 + }, 3193 + "node_modules/shebang-regex": { 3194 + "version": "3.0.0", 3195 + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 3196 + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 3197 + "dev": true, 3198 + "engines": { 3199 + "node": ">=8" 3200 + } 3201 + }, 3202 + "node_modules/siginfo": { 3203 + "version": "2.0.0", 3204 + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", 3205 + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", 3206 + "dev": true 3207 + }, 3208 + "node_modules/sirv": { 3209 + "version": "2.0.3", 3210 + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", 3211 + "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", 3212 + "dev": true, 3213 + "dependencies": { 3214 + "@polka/url": "^1.0.0-next.20", 3215 + "mrmime": "^1.0.0", 3216 + "totalist": "^3.0.0" 3217 + }, 3218 + "engines": { 3219 + "node": ">= 10" 3220 + } 3221 + }, 3222 + "node_modules/slash": { 3223 + "version": "3.0.0", 3224 + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 3225 + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 3226 + "dev": true, 3227 + "engines": { 3228 + "node": ">=8" 3229 + } 3230 + }, 3231 + "node_modules/sorcery": { 3232 + "version": "0.11.0", 3233 + "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz", 3234 + "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==", 3235 + "dev": true, 3236 + "dependencies": { 3237 + "@jridgewell/sourcemap-codec": "^1.4.14", 3238 + "buffer-crc32": "^0.2.5", 3239 + "minimist": "^1.2.0", 3240 + "sander": "^0.5.0" 3241 + }, 3242 + "bin": { 3243 + "sorcery": "bin/sorcery" 3244 + } 3245 + }, 3246 + "node_modules/source-map": { 3247 + "version": "0.6.1", 3248 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3249 + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3250 + "dev": true, 3251 + "engines": { 3252 + "node": ">=0.10.0" 3253 + } 3254 + }, 3255 + "node_modules/source-map-js": { 3256 + "version": "1.0.2", 3257 + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 3258 + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 3259 + "dev": true, 3260 + "engines": { 3261 + "node": ">=0.10.0" 3262 + } 3263 + }, 3264 + "node_modules/stackback": { 3265 + "version": "0.0.2", 3266 + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", 3267 + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", 3268 + "dev": true 3269 + }, 3270 + "node_modules/std-env": { 3271 + "version": "3.4.3", 3272 + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.4.3.tgz", 3273 + "integrity": "sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==", 3274 + "dev": true 3275 + }, 3276 + "node_modules/streamsearch": { 3277 + "version": "1.1.0", 3278 + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", 3279 + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", 3280 + "dev": true, 3281 + "engines": { 3282 + "node": ">=10.0.0" 3283 + } 3284 + }, 3285 + "node_modules/strip-ansi": { 3286 + "version": "6.0.1", 3287 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3288 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3289 + "dev": true, 3290 + "dependencies": { 3291 + "ansi-regex": "^5.0.1" 3292 + }, 3293 + "engines": { 3294 + "node": ">=8" 3295 + } 3296 + }, 3297 + "node_modules/strip-indent": { 3298 + "version": "3.0.0", 3299 + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", 3300 + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", 3301 + "dev": true, 3302 + "dependencies": { 3303 + "min-indent": "^1.0.0" 3304 + }, 3305 + "engines": { 3306 + "node": ">=8" 3307 + } 3308 + }, 3309 + "node_modules/strip-json-comments": { 3310 + "version": "3.1.1", 3311 + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 3312 + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 3313 + "dev": true, 3314 + "engines": { 3315 + "node": ">=8" 3316 + }, 3317 + "funding": { 3318 + "url": "https://github.com/sponsors/sindresorhus" 3319 + } 3320 + }, 3321 + "node_modules/strip-literal": { 3322 + "version": "1.3.0", 3323 + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", 3324 + "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", 3325 + "dev": true, 3326 + "dependencies": { 3327 + "acorn": "^8.10.0" 3328 + }, 3329 + "funding": { 3330 + "url": "https://github.com/sponsors/antfu" 3331 + } 3332 + }, 3333 + "node_modules/supports-color": { 3334 + "version": "7.2.0", 3335 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3336 + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3337 + "dev": true, 3338 + "dependencies": { 3339 + "has-flag": "^4.0.0" 3340 + }, 3341 + "engines": { 3342 + "node": ">=8" 3343 + } 3344 + }, 3345 + "node_modules/svelte": { 3346 + "version": "4.2.1", 3347 + "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.1.tgz", 3348 + "integrity": "sha512-LpLqY2Jr7cRxkrTc796/AaaoMLF/1ax7cto8Ot76wrvKQhrPmZ0JgajiWPmg9mTSDqO16SSLiD17r9MsvAPTmw==", 3349 + "dev": true, 3350 + "dependencies": { 3351 + "@ampproject/remapping": "^2.2.1", 3352 + "@jridgewell/sourcemap-codec": "^1.4.15", 3353 + "@jridgewell/trace-mapping": "^0.3.18", 3354 + "acorn": "^8.9.0", 3355 + "aria-query": "^5.3.0", 3356 + "axobject-query": "^3.2.1", 3357 + "code-red": "^1.0.3", 3358 + "css-tree": "^2.3.1", 3359 + "estree-walker": "^3.0.3", 3360 + "is-reference": "^3.0.1", 3361 + "locate-character": "^3.0.0", 3362 + "magic-string": "^0.30.0", 3363 + "periscopic": "^3.1.0" 3364 + }, 3365 + "engines": { 3366 + "node": ">=16" 3367 + } 3368 + }, 3369 + "node_modules/svelte-check": { 3370 + "version": "3.5.2", 3371 + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.5.2.tgz", 3372 + "integrity": "sha512-5a/YWbiH4c+AqAUP+0VneiV5bP8YOk9JL3jwvN+k2PEPLgpu85bjQc5eE67+eIZBBwUEJzmO3I92OqKcqbp3fw==", 3373 + "dev": true, 3374 + "dependencies": { 3375 + "@jridgewell/trace-mapping": "^0.3.17", 3376 + "chokidar": "^3.4.1", 3377 + "fast-glob": "^3.2.7", 3378 + "import-fresh": "^3.2.1", 3379 + "picocolors": "^1.0.0", 3380 + "sade": "^1.7.4", 3381 + "svelte-preprocess": "^5.0.4", 3382 + "typescript": "^5.0.3" 3383 + }, 3384 + "bin": { 3385 + "svelte-check": "bin/svelte-check" 3386 + }, 3387 + "peerDependencies": { 3388 + "svelte": "^3.55.0 || ^4.0.0-next.0 || ^4.0.0" 3389 + } 3390 + }, 3391 + "node_modules/svelte-eslint-parser": { 3392 + "version": "0.33.0", 3393 + "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.33.0.tgz", 3394 + "integrity": "sha512-5awZ6Bs+Tb/zQwa41PSdcLynAVQTwW0HGyCBjtbAQ59taLZqDgQSMzRlDmapjZdDtzERm0oXDZNE0E+PKJ6ryg==", 3395 + "dev": true, 3396 + "dependencies": { 3397 + "eslint-scope": "^7.0.0", 3398 + "eslint-visitor-keys": "^3.0.0", 3399 + "espree": "^9.0.0", 3400 + "postcss": "^8.4.28", 3401 + "postcss-scss": "^4.0.7" 3402 + }, 3403 + "engines": { 3404 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 3405 + }, 3406 + "funding": { 3407 + "url": "https://github.com/sponsors/ota-meshi" 3408 + }, 3409 + "peerDependencies": { 3410 + "svelte": "^3.37.0 || ^4.0.0" 3411 + }, 3412 + "peerDependenciesMeta": { 3413 + "svelte": { 3414 + "optional": true 3415 + } 3416 + } 3417 + }, 3418 + "node_modules/svelte-hmr": { 3419 + "version": "0.15.3", 3420 + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", 3421 + "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==", 3422 + "dev": true, 3423 + "engines": { 3424 + "node": "^12.20 || ^14.13.1 || >= 16" 3425 + }, 3426 + "peerDependencies": { 3427 + "svelte": "^3.19.0 || ^4.0.0" 3428 + } 3429 + }, 3430 + "node_modules/svelte-preprocess": { 3431 + "version": "5.0.4", 3432 + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.4.tgz", 3433 + "integrity": "sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==", 3434 + "dev": true, 3435 + "hasInstallScript": true, 3436 + "dependencies": { 3437 + "@types/pug": "^2.0.6", 3438 + "detect-indent": "^6.1.0", 3439 + "magic-string": "^0.27.0", 3440 + "sorcery": "^0.11.0", 3441 + "strip-indent": "^3.0.0" 3442 + }, 3443 + "engines": { 3444 + "node": ">= 14.10.0" 3445 + }, 3446 + "peerDependencies": { 3447 + "@babel/core": "^7.10.2", 3448 + "coffeescript": "^2.5.1", 3449 + "less": "^3.11.3 || ^4.0.0", 3450 + "postcss": "^7 || ^8", 3451 + "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0", 3452 + "pug": "^3.0.0", 3453 + "sass": "^1.26.8", 3454 + "stylus": "^0.55.0", 3455 + "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", 3456 + "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0", 3457 + "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0" 3458 + }, 3459 + "peerDependenciesMeta": { 3460 + "@babel/core": { 3461 + "optional": true 3462 + }, 3463 + "coffeescript": { 3464 + "optional": true 3465 + }, 3466 + "less": { 3467 + "optional": true 3468 + }, 3469 + "postcss": { 3470 + "optional": true 3471 + }, 3472 + "postcss-load-config": { 3473 + "optional": true 3474 + }, 3475 + "pug": { 3476 + "optional": true 3477 + }, 3478 + "sass": { 3479 + "optional": true 3480 + }, 3481 + "stylus": { 3482 + "optional": true 3483 + }, 3484 + "sugarss": { 3485 + "optional": true 3486 + }, 3487 + "typescript": { 3488 + "optional": true 3489 + } 3490 + } 3491 + }, 3492 + "node_modules/svelte-preprocess/node_modules/magic-string": { 3493 + "version": "0.27.0", 3494 + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", 3495 + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", 3496 + "dev": true, 3497 + "dependencies": { 3498 + "@jridgewell/sourcemap-codec": "^1.4.13" 3499 + }, 3500 + "engines": { 3501 + "node": ">=12" 3502 + } 3503 + }, 3504 + "node_modules/svelte2tsx": { 3505 + "version": "0.6.22", 3506 + "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.6.22.tgz", 3507 + "integrity": "sha512-eFCfz0juaWeanbwGeQV21kPMwH3LKhfrUYRy1PqRmlieuHvJs8VeK7CaoHJdpBZWCXba2cltHVdywJmwOGhbww==", 3508 + "dev": true, 3509 + "dependencies": { 3510 + "dedent-js": "^1.0.1", 3511 + "pascal-case": "^3.1.1" 3512 + }, 3513 + "peerDependencies": { 3514 + "svelte": "^3.55 || ^4.0.0-next.0 || ^4.0", 3515 + "typescript": "^4.9.4 || ^5.0.0" 3516 + } 3517 + }, 3518 + "node_modules/test-exclude": { 3519 + "version": "6.0.0", 3520 + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", 3521 + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", 3522 + "dev": true, 3523 + "dependencies": { 3524 + "@istanbuljs/schema": "^0.1.2", 3525 + "glob": "^7.1.4", 3526 + "minimatch": "^3.0.4" 3527 + }, 3528 + "engines": { 3529 + "node": ">=8" 3530 + } 3531 + }, 3532 + "node_modules/text-table": { 3533 + "version": "0.2.0", 3534 + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 3535 + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 3536 + "dev": true 3537 + }, 3538 + "node_modules/tiny-glob": { 3539 + "version": "0.2.9", 3540 + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", 3541 + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", 3542 + "dev": true, 3543 + "dependencies": { 3544 + "globalyzer": "0.1.0", 3545 + "globrex": "^0.1.2" 3546 + } 3547 + }, 3548 + "node_modules/tinybench": { 3549 + "version": "2.5.1", 3550 + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", 3551 + "integrity": "sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==", 3552 + "dev": true 3553 + }, 3554 + "node_modules/tinypool": { 3555 + "version": "0.7.0", 3556 + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", 3557 + "integrity": "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==", 3558 + "dev": true, 3559 + "engines": { 3560 + "node": ">=14.0.0" 3561 + } 3562 + }, 3563 + "node_modules/tinyspy": { 3564 + "version": "2.1.1", 3565 + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.1.1.tgz", 3566 + "integrity": "sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==", 3567 + "dev": true, 3568 + "engines": { 3569 + "node": ">=14.0.0" 3570 + } 3571 + }, 3572 + "node_modules/to-regex-range": { 3573 + "version": "5.0.1", 3574 + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3575 + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3576 + "dev": true, 3577 + "dependencies": { 3578 + "is-number": "^7.0.0" 3579 + }, 3580 + "engines": { 3581 + "node": ">=8.0" 3582 + } 3583 + }, 3584 + "node_modules/totalist": { 3585 + "version": "3.0.1", 3586 + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", 3587 + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", 3588 + "dev": true, 3589 + "engines": { 3590 + "node": ">=6" 3591 + } 3592 + }, 3593 + "node_modules/ts-api-utils": { 3594 + "version": "1.0.3", 3595 + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", 3596 + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", 3597 + "dev": true, 3598 + "engines": { 3599 + "node": ">=16.13.0" 3600 + }, 3601 + "peerDependencies": { 3602 + "typescript": ">=4.2.0" 3603 + } 3604 + }, 3605 + "node_modules/tslib": { 3606 + "version": "2.6.2", 3607 + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", 3608 + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", 3609 + "dev": true 3610 + }, 3611 + "node_modules/type-check": { 3612 + "version": "0.4.0", 3613 + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 3614 + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 3615 + "dev": true, 3616 + "dependencies": { 3617 + "prelude-ls": "^1.2.1" 3618 + }, 3619 + "engines": { 3620 + "node": ">= 0.8.0" 3621 + } 3622 + }, 3623 + "node_modules/type-detect": { 3624 + "version": "4.0.8", 3625 + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", 3626 + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", 3627 + "dev": true, 3628 + "engines": { 3629 + "node": ">=4" 3630 + } 3631 + }, 3632 + "node_modules/type-fest": { 3633 + "version": "0.20.2", 3634 + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 3635 + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 3636 + "dev": true, 3637 + "engines": { 3638 + "node": ">=10" 3639 + }, 3640 + "funding": { 3641 + "url": "https://github.com/sponsors/sindresorhus" 3642 + } 3643 + }, 3644 + "node_modules/typescript": { 3645 + "version": "5.2.2", 3646 + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", 3647 + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", 3648 + "dev": true, 3649 + "bin": { 3650 + "tsc": "bin/tsc", 3651 + "tsserver": "bin/tsserver" 3652 + }, 3653 + "engines": { 3654 + "node": ">=14.17" 3655 + } 3656 + }, 3657 + "node_modules/ufo": { 3658 + "version": "1.3.0", 3659 + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.0.tgz", 3660 + "integrity": "sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw==", 3661 + "dev": true 3662 + }, 3663 + "node_modules/undici": { 3664 + "version": "5.23.0", 3665 + "resolved": "https://registry.npmjs.org/undici/-/undici-5.23.0.tgz", 3666 + "integrity": "sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==", 3667 + "dev": true, 3668 + "dependencies": { 3669 + "busboy": "^1.6.0" 3670 + }, 3671 + "engines": { 3672 + "node": ">=14.0" 3673 + } 3674 + }, 3675 + "node_modules/unist-util-stringify-position": { 3676 + "version": "2.0.3", 3677 + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", 3678 + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", 3679 + "dev": true, 3680 + "dependencies": { 3681 + "@types/unist": "^2.0.2" 3682 + }, 3683 + "funding": { 3684 + "type": "opencollective", 3685 + "url": "https://opencollective.com/unified" 3686 + } 3687 + }, 3688 + "node_modules/uri-js": { 3689 + "version": "4.4.1", 3690 + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 3691 + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 3692 + "dev": true, 3693 + "dependencies": { 3694 + "punycode": "^2.1.0" 3695 + } 3696 + }, 3697 + "node_modules/util-deprecate": { 3698 + "version": "1.0.2", 3699 + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3700 + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 3701 + "dev": true 3702 + }, 3703 + "node_modules/v8-to-istanbul": { 3704 + "version": "9.1.0", 3705 + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", 3706 + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", 3707 + "dev": true, 3708 + "dependencies": { 3709 + "@jridgewell/trace-mapping": "^0.3.12", 3710 + "@types/istanbul-lib-coverage": "^2.0.1", 3711 + "convert-source-map": "^1.6.0" 3712 + }, 3713 + "engines": { 3714 + "node": ">=10.12.0" 3715 + } 3716 + }, 3717 + "node_modules/vfile-message": { 3718 + "version": "2.0.4", 3719 + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", 3720 + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", 3721 + "dev": true, 3722 + "dependencies": { 3723 + "@types/unist": "^2.0.0", 3724 + "unist-util-stringify-position": "^2.0.0" 3725 + }, 3726 + "funding": { 3727 + "type": "opencollective", 3728 + "url": "https://opencollective.com/unified" 3729 + } 3730 + }, 3731 + "node_modules/vite": { 3732 + "version": "4.4.9", 3733 + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", 3734 + "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", 3735 + "dev": true, 3736 + "dependencies": { 3737 + "esbuild": "^0.18.10", 3738 + "postcss": "^8.4.27", 3739 + "rollup": "^3.27.1" 3740 + }, 3741 + "bin": { 3742 + "vite": "bin/vite.js" 3743 + }, 3744 + "engines": { 3745 + "node": "^14.18.0 || >=16.0.0" 3746 + }, 3747 + "funding": { 3748 + "url": "https://github.com/vitejs/vite?sponsor=1" 3749 + }, 3750 + "optionalDependencies": { 3751 + "fsevents": "~2.3.2" 3752 + }, 3753 + "peerDependencies": { 3754 + "@types/node": ">= 14", 3755 + "less": "*", 3756 + "lightningcss": "^1.21.0", 3757 + "sass": "*", 3758 + "stylus": "*", 3759 + "sugarss": "*", 3760 + "terser": "^5.4.0" 3761 + }, 3762 + "peerDependenciesMeta": { 3763 + "@types/node": { 3764 + "optional": true 3765 + }, 3766 + "less": { 3767 + "optional": true 3768 + }, 3769 + "lightningcss": { 3770 + "optional": true 3771 + }, 3772 + "sass": { 3773 + "optional": true 3774 + }, 3775 + "stylus": { 3776 + "optional": true 3777 + }, 3778 + "sugarss": { 3779 + "optional": true 3780 + }, 3781 + "terser": { 3782 + "optional": true 3783 + } 3784 + } 3785 + }, 3786 + "node_modules/vite-node": { 3787 + "version": "0.34.5", 3788 + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.5.tgz", 3789 + "integrity": "sha512-RNZ+DwbCvDoI5CbCSQSyRyzDTfFvFauvMs6Yq4ObJROKlIKuat1KgSX/Ako5rlDMfVCyMcpMRMTkJBxd6z8YRA==", 3790 + "dev": true, 3791 + "dependencies": { 3792 + "cac": "^6.7.14", 3793 + "debug": "^4.3.4", 3794 + "mlly": "^1.4.0", 3795 + "pathe": "^1.1.1", 3796 + "picocolors": "^1.0.0", 3797 + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" 3798 + }, 3799 + "bin": { 3800 + "vite-node": "vite-node.mjs" 3801 + }, 3802 + "engines": { 3803 + "node": ">=v14.18.0" 3804 + }, 3805 + "funding": { 3806 + "url": "https://opencollective.com/vitest" 3807 + } 3808 + }, 3809 + "node_modules/vitefu": { 3810 + "version": "0.2.4", 3811 + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", 3812 + "integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==", 3813 + "dev": true, 3814 + "peerDependencies": { 3815 + "vite": "^3.0.0 || ^4.0.0" 3816 + }, 3817 + "peerDependenciesMeta": { 3818 + "vite": { 3819 + "optional": true 3820 + } 3821 + } 3822 + }, 3823 + "node_modules/vitest": { 3824 + "version": "0.34.5", 3825 + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.5.tgz", 3826 + "integrity": "sha512-CPI68mmnr2DThSB3frSuE5RLm9wo5wU4fbDrDwWQQB1CWgq9jQVoQwnQSzYAjdoBOPoH2UtXpOgHVge/uScfZg==", 3827 + "dev": true, 3828 + "dependencies": { 3829 + "@types/chai": "^4.3.5", 3830 + "@types/chai-subset": "^1.3.3", 3831 + "@types/node": "*", 3832 + "@vitest/expect": "0.34.5", 3833 + "@vitest/runner": "0.34.5", 3834 + "@vitest/snapshot": "0.34.5", 3835 + "@vitest/spy": "0.34.5", 3836 + "@vitest/utils": "0.34.5", 3837 + "acorn": "^8.9.0", 3838 + "acorn-walk": "^8.2.0", 3839 + "cac": "^6.7.14", 3840 + "chai": "^4.3.7", 3841 + "debug": "^4.3.4", 3842 + "local-pkg": "^0.4.3", 3843 + "magic-string": "^0.30.1", 3844 + "pathe": "^1.1.1", 3845 + "picocolors": "^1.0.0", 3846 + "std-env": "^3.3.3", 3847 + "strip-literal": "^1.0.1", 3848 + "tinybench": "^2.5.0", 3849 + "tinypool": "^0.7.0", 3850 + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", 3851 + "vite-node": "0.34.5", 3852 + "why-is-node-running": "^2.2.2" 3853 + }, 3854 + "bin": { 3855 + "vitest": "vitest.mjs" 3856 + }, 3857 + "engines": { 3858 + "node": ">=v14.18.0" 3859 + }, 3860 + "funding": { 3861 + "url": "https://opencollective.com/vitest" 3862 + }, 3863 + "peerDependencies": { 3864 + "@edge-runtime/vm": "*", 3865 + "@vitest/browser": "*", 3866 + "@vitest/ui": "*", 3867 + "happy-dom": "*", 3868 + "jsdom": "*", 3869 + "playwright": "*", 3870 + "safaridriver": "*", 3871 + "webdriverio": "*" 3872 + }, 3873 + "peerDependenciesMeta": { 3874 + "@edge-runtime/vm": { 3875 + "optional": true 3876 + }, 3877 + "@vitest/browser": { 3878 + "optional": true 3879 + }, 3880 + "@vitest/ui": { 3881 + "optional": true 3882 + }, 3883 + "happy-dom": { 3884 + "optional": true 3885 + }, 3886 + "jsdom": { 3887 + "optional": true 3888 + }, 3889 + "playwright": { 3890 + "optional": true 3891 + }, 3892 + "safaridriver": { 3893 + "optional": true 3894 + }, 3895 + "webdriverio": { 3896 + "optional": true 3897 + } 3898 + } 3899 + }, 3900 + "node_modules/which": { 3901 + "version": "2.0.2", 3902 + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3903 + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3904 + "dev": true, 3905 + "dependencies": { 3906 + "isexe": "^2.0.0" 3907 + }, 3908 + "bin": { 3909 + "node-which": "bin/node-which" 3910 + }, 3911 + "engines": { 3912 + "node": ">= 8" 3913 + } 3914 + }, 3915 + "node_modules/why-is-node-running": { 3916 + "version": "2.2.2", 3917 + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", 3918 + "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", 3919 + "dev": true, 3920 + "dependencies": { 3921 + "siginfo": "^2.0.0", 3922 + "stackback": "0.0.2" 3923 + }, 3924 + "bin": { 3925 + "why-is-node-running": "cli.js" 3926 + }, 3927 + "engines": { 3928 + "node": ">=8" 3929 + } 3930 + }, 3931 + "node_modules/wrappy": { 3932 + "version": "1.0.2", 3933 + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3934 + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 3935 + "dev": true 3936 + }, 3937 + "node_modules/yallist": { 3938 + "version": "4.0.0", 3939 + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 3940 + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 3941 + "dev": true 3942 + }, 3943 + "node_modules/yaml": { 3944 + "version": "1.10.2", 3945 + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", 3946 + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", 3947 + "dev": true, 3948 + "engines": { 3949 + "node": ">= 6" 3950 + } 3951 + }, 3952 + "node_modules/yocto-queue": { 3953 + "version": "0.1.0", 3954 + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 3955 + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 3956 + "dev": true, 3957 + "engines": { 3958 + "node": ">=10" 3959 + }, 3960 + "funding": { 3961 + "url": "https://github.com/sponsors/sindresorhus" 3962 + } 3963 + } 3964 + } 3965 3965 }
+136 -135
package.json
··· 1 1 { 2 - "name": "date-picker-svelte", 3 - "version": "2.8.0", 4 - "description": "Date and time picker for Svelte", 5 - "type": "module", 6 - "scripts": { 7 - "dev": "vite dev", 8 - "build": "vite build && npm run package", 9 - "build:site": "vite build", 10 - "preview": "vite preview", 11 - "package": "svelte-package", 12 - "prepublishOnly": "npm run package", 13 - "lint": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json && eslint src && prettier --check src", 14 - "format": "eslint --fix src && prettier --write src", 15 - "test": "vitest", 16 - "test:coverage": "vitest --coverage" 17 - }, 18 - "devDependencies": { 19 - "@sveltejs/adapter-static": "^2.0.3", 20 - "@sveltejs/kit": "^1.25.0", 21 - "@sveltejs/package": "^2.2.2", 22 - "@typescript-eslint/eslint-plugin": "^6.7.2", 23 - "@typescript-eslint/parser": "^6.7.2", 24 - "@vitest/coverage-v8": "^0.34.5", 25 - "date-fns": "^2.30.0", 26 - "eslint": "^8.50.0", 27 - "eslint-config-prettier": "^8.10.0", 28 - "eslint-plugin-svelte": "^2.33.2", 29 - "mdsvex": "^0.11.0", 30 - "prettier": "^2.8.8", 31 - "prettier-plugin-svelte": "^2.10.1", 32 - "sass": "^1.68.0", 33 - "svelte": "^4.2.1", 34 - "svelte-check": "^3.5.2", 35 - "typescript": "^5.2.2", 36 - "vite": "^4.4.9", 37 - "vitest": "^0.34.5" 38 - }, 39 - "peerDependencies": { 40 - "svelte": "^3.24.0 || ^4.0.0" 41 - }, 42 - "exports": { 43 - "./package.json": "./package.json", 44 - "./DateInput.svelte": { 45 - "types": "./dist/DateInput.svelte.d.ts", 46 - "svelte": "./dist/DateInput.svelte", 47 - "default": "./dist/DateInput.svelte" 48 - }, 49 - "./DatePicker.svelte": { 50 - "types": "./dist/DatePicker.svelte.d.ts", 51 - "svelte": "./dist/DatePicker.svelte", 52 - "default": "./dist/DatePicker.svelte" 53 - }, 54 - "./TimePicker.svelte": { 55 - "types": "./dist/TimePicker.svelte.d.ts", 56 - "svelte": "./dist/TimePicker.svelte", 57 - "default": "./dist/TimePicker.svelte" 58 - }, 59 - "./date-utils": { 60 - "types": "./dist/date-utils.d.ts", 61 - "default": "./dist/date-utils.js" 62 - }, 63 - ".": { 64 - "types": "./dist/index.d.ts", 65 - "svelte": "./dist/index.js", 66 - "default": "./dist/index.js" 67 - }, 68 - "./locale": { 69 - "types": "./dist/locale.d.ts", 70 - "default": "./dist/locale.js" 71 - }, 72 - "./parse": { 73 - "types": "./dist/parse.d.ts", 74 - "default": "./dist/parse.js" 75 - } 76 - }, 77 - "files": [ 78 - "dist", 79 - "!dist/**/*.test.*", 80 - "!dist/**/*.spec.*" 81 - ], 82 - "svelte": "./dist/index.js", 83 - "types": "./dist/index.d.ts", 84 - "typesVersions": { 85 - ">4.0": { 86 - "DateInput.svelte": [ 87 - "./dist/DateInput.svelte.d.ts" 88 - ], 89 - "DatePicker.svelte": [ 90 - "./dist/DatePicker.svelte.d.ts" 91 - ], 92 - "date-utils": [ 93 - "./dist/date-utils.d.ts" 94 - ], 95 - "index": [ 96 - "./dist/index.d.ts" 97 - ], 98 - "locale": [ 99 - "./dist/locale.d.ts" 100 - ], 101 - "parse": [ 102 - "./dist/parse.d.ts" 103 - ] 104 - } 105 - }, 106 - "license": "MIT", 107 - "homepage": "https://date-picker-svelte.kasper.space", 108 - "repository": { 109 - "type": "git", 110 - "url": "git+https://github.com/probablykasper/date-picker-svelte.git" 111 - }, 112 - "bugs": { 113 - "url": "https://github.com/probablykasper/date-picker-svelte/issues" 114 - }, 115 - "author": { 116 - "name": "Kasper Henningsen", 117 - "url": "https://kasper.space" 118 - }, 119 - "keywords": [ 120 - "date", 121 - "time", 122 - "date-picker", 123 - "datepicker", 124 - "date-time-picker", 125 - "calendar", 126 - "svelte", 127 - "front-end" 128 - ], 129 - "prettier": { 130 - "printWidth": 100, 131 - "semi": false, 132 - "singleQuote": true, 133 - "plugins": [ 134 - "prettier-plugin-svelte" 135 - ] 136 - } 2 + "name": "date-picker-svelte", 3 + "version": "2.8.0", 4 + "description": "Date and time picker for Svelte", 5 + "type": "module", 6 + "scripts": { 7 + "dev": "vite dev", 8 + "build": "vite build && npm run package", 9 + "build:site": "vite build", 10 + "preview": "vite preview", 11 + "package": "svelte-package", 12 + "prepublishOnly": "npm run package", 13 + "lint": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json && eslint src && prettier --check src", 14 + "format": "eslint --fix src && prettier --write src", 15 + "test": "vitest", 16 + "test:coverage": "vitest --coverage" 17 + }, 18 + "devDependencies": { 19 + "@sveltejs/adapter-static": "^2.0.3", 20 + "@sveltejs/kit": "^1.25.0", 21 + "@sveltejs/package": "^2.2.2", 22 + "@typescript-eslint/eslint-plugin": "^6.7.2", 23 + "@typescript-eslint/parser": "^6.7.2", 24 + "@vitest/coverage-v8": "^0.34.5", 25 + "date-fns": "^2.30.0", 26 + "eslint": "^8.50.0", 27 + "eslint-config-prettier": "^8.10.0", 28 + "eslint-plugin-svelte": "^2.33.2", 29 + "mdsvex": "^0.11.0", 30 + "prettier": "^2.8.8", 31 + "prettier-plugin-svelte": "^2.10.1", 32 + "sass": "^1.68.0", 33 + "svelte": "^4.2.1", 34 + "svelte-check": "^3.5.2", 35 + "typescript": "^5.2.2", 36 + "vite": "^4.4.9", 37 + "vitest": "^0.34.5" 38 + }, 39 + "peerDependencies": { 40 + "svelte": "^3.24.0 || ^4.0.0" 41 + }, 42 + "exports": { 43 + "./package.json": "./package.json", 44 + "./DateInput.svelte": { 45 + "types": "./dist/DateInput.svelte.d.ts", 46 + "svelte": "./dist/DateInput.svelte", 47 + "default": "./dist/DateInput.svelte" 48 + }, 49 + "./DatePicker.svelte": { 50 + "types": "./dist/DatePicker.svelte.d.ts", 51 + "svelte": "./dist/DatePicker.svelte", 52 + "default": "./dist/DatePicker.svelte" 53 + }, 54 + "./TimePicker.svelte": { 55 + "types": "./dist/TimePicker.svelte.d.ts", 56 + "svelte": "./dist/TimePicker.svelte", 57 + "default": "./dist/TimePicker.svelte" 58 + }, 59 + "./date-utils": { 60 + "types": "./dist/date-utils.d.ts", 61 + "default": "./dist/date-utils.js" 62 + }, 63 + ".": { 64 + "types": "./dist/index.d.ts", 65 + "svelte": "./dist/index.js", 66 + "default": "./dist/index.js" 67 + }, 68 + "./locale": { 69 + "types": "./dist/locale.d.ts", 70 + "default": "./dist/locale.js" 71 + }, 72 + "./parse": { 73 + "types": "./dist/parse.d.ts", 74 + "default": "./dist/parse.js" 75 + } 76 + }, 77 + "files": [ 78 + "dist", 79 + "!dist/**/*.test.*", 80 + "!dist/**/*.spec.*" 81 + ], 82 + "svelte": "./dist/index.js", 83 + "types": "./dist/index.d.ts", 84 + "typesVersions": { 85 + ">4.0": { 86 + "DateInput.svelte": [ 87 + "./dist/DateInput.svelte.d.ts" 88 + ], 89 + "DatePicker.svelte": [ 90 + "./dist/DatePicker.svelte.d.ts" 91 + ], 92 + "date-utils": [ 93 + "./dist/date-utils.d.ts" 94 + ], 95 + "index": [ 96 + "./dist/index.d.ts" 97 + ], 98 + "locale": [ 99 + "./dist/locale.d.ts" 100 + ], 101 + "parse": [ 102 + "./dist/parse.d.ts" 103 + ] 104 + } 105 + }, 106 + "license": "MIT", 107 + "homepage": "https://date-picker-svelte.kasper.space", 108 + "repository": { 109 + "type": "git", 110 + "url": "git+https://github.com/probablykasper/date-picker-svelte.git" 111 + }, 112 + "bugs": { 113 + "url": "https://github.com/probablykasper/date-picker-svelte/issues" 114 + }, 115 + "author": { 116 + "name": "Kasper Henningsen", 117 + "url": "https://kasper.space" 118 + }, 119 + "keywords": [ 120 + "date", 121 + "time", 122 + "date-picker", 123 + "datepicker", 124 + "date-time-picker", 125 + "calendar", 126 + "svelte", 127 + "front-end" 128 + ], 129 + "prettier": { 130 + "useTabs": true, 131 + "printWidth": 100, 132 + "semi": false, 133 + "singleQuote": true, 134 + "plugins": [ 135 + "prettier-plugin-svelte" 136 + ] 137 + } 137 138 }
+4 -4
src/app.d.ts
··· 3 3 // See https://kit.svelte.dev/docs/types#app 4 4 // for information about these interfaces 5 5 declare namespace App { 6 - // interface Locals {} 7 - // interface Platform {} 8 - // interface Session {} 9 - // interface Stuff {} 6 + // interface Locals {} 7 + // interface Platform {} 8 + // interface Session {} 9 + // interface Stuff {} 10 10 }
+32 -32
src/app.html
··· 1 - <!DOCTYPE html> 1 + <!doctype html> 2 2 <html lang="en" data-theme="dark"> 3 - <head> 4 - <meta charset="utf-8" /> 5 - <meta name="viewport" content="width=device-width, initial-scale=1" /> 6 - <script> 7 - function detectTheme() { 8 - var themeOverride = localStorage.getItem('theme') 9 - if (themeOverride == 'dark' || themeOverride === 'light') { 10 - // Override the system theme 11 - return themeOverride 12 - } else if (window.matchMedia('(prefers-color-scheme: light)').matches) { 13 - // Use the system theme 14 - return 'light' 15 - } else { 16 - // Default theme 17 - return 'dark' 18 - } 19 - } 20 - document.documentElement.setAttribute('data-theme', detectTheme()) 21 - </script> 22 - <link rel="preconnect" href="https://fonts.googleapis.com" /> 23 - <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> 24 - <link 25 - href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap" 26 - rel="stylesheet" 27 - /> 28 - <link rel="stylesheet" href="prism-holi-theme.css" /> 29 - %sveltekit.head% 30 - </head> 31 - <body> 32 - <div>%sveltekit.body%</div> 33 - </body> 3 + <head> 4 + <meta charset="utf-8" /> 5 + <meta name="viewport" content="width=device-width, initial-scale=1" /> 6 + <script> 7 + function detectTheme() { 8 + var themeOverride = localStorage.getItem('theme') 9 + if (themeOverride == 'dark' || themeOverride === 'light') { 10 + // Override the system theme 11 + return themeOverride 12 + } else if (window.matchMedia('(prefers-color-scheme: light)').matches) { 13 + // Use the system theme 14 + return 'light' 15 + } else { 16 + // Default theme 17 + return 'dark' 18 + } 19 + } 20 + document.documentElement.setAttribute('data-theme', detectTheme()) 21 + </script> 22 + <link rel="preconnect" href="https://fonts.googleapis.com" /> 23 + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> 24 + <link 25 + href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap" 26 + rel="stylesheet" 27 + /> 28 + <link rel="stylesheet" href="prism-holi-theme.css" /> 29 + %sveltekit.head% 30 + </head> 31 + <body> 32 + <div>%sveltekit.body%</div> 33 + </body> 34 34 </html>
+239 -239
src/lib/DateInput.svelte
··· 1 1 <script lang="ts"> 2 - import { fly } from 'svelte/transition' 3 - import { cubicInOut } from 'svelte/easing' 4 - import { toText } from './date-utils.js' 5 - import type { Locale } from './locale.js' 6 - import { parse, createFormat, type FormatToken } from './parse.js' 7 - import DateTimePicker from './DatePicker.svelte' 8 - import { writable } from 'svelte/store' 9 - import { createEventDispatcher } from 'svelte' 2 + import { fly } from 'svelte/transition' 3 + import { cubicInOut } from 'svelte/easing' 4 + import { toText } from './date-utils.js' 5 + import type { Locale } from './locale.js' 6 + import { parse, createFormat, type FormatToken } from './parse.js' 7 + import DateTimePicker from './DatePicker.svelte' 8 + import { writable } from 'svelte/store' 9 + import { createEventDispatcher } from 'svelte' 10 10 11 - const dispatch = createEventDispatcher<{ 12 - /** Fires when the user selects a new value in the DatePicker by clicking on a date or by pressing enter */ 13 - select: Date 14 - }>() 11 + const dispatch = createEventDispatcher<{ 12 + /** Fires when the user selects a new value in the DatePicker by clicking on a date or by pressing enter */ 13 + select: Date 14 + }>() 15 15 16 - /** Default date to display in picker before value is assigned */ 17 - const defaultDate = new Date() 16 + /** Default date to display in picker before value is assigned */ 17 + const defaultDate = new Date() 18 18 19 - // inner date value store for preventing value updates (and also 20 - // text updates as a result) when date is unchanged 21 - const innerStore = writable(null as Date | null) 22 - const store = (() => { 23 - return { 24 - subscribe: innerStore.subscribe, 25 - set: (date: Date | null) => { 26 - if (date === null || date === undefined) { 27 - innerStore.set(null) 28 - value = date 29 - } else if (date.getTime() !== $innerStore?.getTime()) { 30 - innerStore.set(date) 31 - value = date 32 - } 33 - }, 34 - } 35 - })() 19 + // inner date value store for preventing value updates (and also 20 + // text updates as a result) when date is unchanged 21 + const innerStore = writable(null as Date | null) 22 + const store = (() => { 23 + return { 24 + subscribe: innerStore.subscribe, 25 + set: (date: Date | null) => { 26 + if (date === null || date === undefined) { 27 + innerStore.set(null) 28 + value = date 29 + } else if (date.getTime() !== $innerStore?.getTime()) { 30 + innerStore.set(date) 31 + value = date 32 + } 33 + }, 34 + } 35 + })() 36 36 37 - /** Date value */ 38 - export let value: Date | null = null 39 - $: store.set(value) 37 + /** Date value */ 38 + export let value: Date | null = null 39 + $: store.set(value) 40 40 41 - /** The earliest value the user can select */ 42 - export let min = new Date(defaultDate.getFullYear() - 20, 0, 1) 43 - /** The latest value the user can select */ 44 - export let max = new Date(defaultDate.getFullYear(), 11, 31, 23, 59, 59, 999) 45 - /** Placeholder text to show when input field is empty */ 46 - export let placeholder = '2020-12-31 23:00:00' 47 - /** Whether the text is valid */ 48 - export let valid = true 49 - /** Disable the input **/ 50 - export let disabled = false 51 - /** Pass custom classes */ 52 - let classes = '' 53 - export { classes as class } 41 + /** The earliest value the user can select */ 42 + export let min = new Date(defaultDate.getFullYear() - 20, 0, 1) 43 + /** The latest value the user can select */ 44 + export let max = new Date(defaultDate.getFullYear(), 11, 31, 23, 59, 59, 999) 45 + /** Placeholder text to show when input field is empty */ 46 + export let placeholder = '2020-12-31 23:00:00' 47 + /** Whether the text is valid */ 48 + export let valid = true 49 + /** Disable the input **/ 50 + export let disabled = false 51 + /** Pass custom classes */ 52 + let classes = '' 53 + export { classes as class } 54 54 55 - /** Format string */ 56 - export let format = 'yyyy-MM-dd HH:mm:ss' 57 - let formatTokens = createFormat(format) 58 - $: formatTokens = createFormat(format) 55 + /** Format string */ 56 + export let format = 'yyyy-MM-dd HH:mm:ss' 57 + let formatTokens = createFormat(format) 58 + $: formatTokens = createFormat(format) 59 59 60 - /** Locale object for internationalization */ 61 - export let locale: Locale = {} 60 + /** Locale object for internationalization */ 61 + export let locale: Locale = {} 62 62 63 - function valueUpdate(value: Date | null, formatTokens: FormatToken[]) { 64 - text = toText(value, formatTokens) 65 - } 66 - $: valueUpdate($store, formatTokens) 63 + function valueUpdate(value: Date | null, formatTokens: FormatToken[]) { 64 + text = toText(value, formatTokens) 65 + } 66 + $: valueUpdate($store, formatTokens) 67 67 68 - export let text = toText($store, formatTokens) 68 + export let text = toText($store, formatTokens) 69 69 70 - function textUpdate(text: string, formatTokens: FormatToken[]) { 71 - if (text.length) { 72 - const result = parse(text, formatTokens, $store) 73 - if (result.date !== null) { 74 - valid = true 75 - store.set(result.date) 76 - } else { 77 - valid = false 78 - } 79 - } else { 80 - valid = true // <-- empty string is always valid 81 - // value resets to null if you clear the field 82 - if (value) { 83 - value = null 84 - store.set(null) 85 - } 86 - } 87 - } 88 - $: textUpdate(text, formatTokens) 70 + function textUpdate(text: string, formatTokens: FormatToken[]) { 71 + if (text.length) { 72 + const result = parse(text, formatTokens, $store) 73 + if (result.date !== null) { 74 + valid = true 75 + store.set(result.date) 76 + } else { 77 + valid = false 78 + } 79 + } else { 80 + valid = true // <-- empty string is always valid 81 + // value resets to null if you clear the field 82 + if (value) { 83 + value = null 84 + store.set(null) 85 + } 86 + } 87 + } 88 + $: textUpdate(text, formatTokens) 89 89 90 - /** Whether the date popup is visible */ 91 - export let visible = false 92 - /** Close the date popup when a date is selected */ 93 - export let closeOnSelection = false 94 - /** Wait with updating the date until a date is selected */ 95 - export let browseWithoutSelecting = false 90 + /** Whether the date popup is visible */ 91 + export let visible = false 92 + /** Close the date popup when a date is selected */ 93 + export let closeOnSelection = false 94 + /** Wait with updating the date until a date is selected */ 95 + export let browseWithoutSelecting = false 96 96 97 - /** Show a time picker with the specified precision */ 98 - export let timePrecision: 'minute' | 'second' | 'millisecond' | null = null 97 + /** Show a time picker with the specified precision */ 98 + export let timePrecision: 'minute' | 'second' | 'millisecond' | null = null 99 99 100 - // handle on:focusout for parent element. If the parent element loses 101 - // focus (e.g input element), visible is set to false 102 - function onFocusOut(e: FocusEvent) { 103 - if ( 104 - e?.currentTarget instanceof HTMLElement && 105 - e.relatedTarget && 106 - e.relatedTarget instanceof Node && 107 - e.currentTarget.contains(e.relatedTarget) 108 - ) { 109 - return 110 - } else { 111 - visible = false 112 - } 113 - } 114 - function keydown(e: KeyboardEvent) { 115 - if (e.key === 'Escape' && visible) { 116 - visible = false 117 - e.preventDefault() 118 - // When the date picker is open, we prevent 'Escape' from propagating, 119 - // so for example a parent modal won't be closed 120 - e.stopPropagation() 121 - } else if (e.key === 'Enter') { 122 - visible = !visible 123 - e.preventDefault() 124 - } 125 - } 100 + // handle on:focusout for parent element. If the parent element loses 101 + // focus (e.g input element), visible is set to false 102 + function onFocusOut(e: FocusEvent) { 103 + if ( 104 + e?.currentTarget instanceof HTMLElement && 105 + e.relatedTarget && 106 + e.relatedTarget instanceof Node && 107 + e.currentTarget.contains(e.relatedTarget) 108 + ) { 109 + return 110 + } else { 111 + visible = false 112 + } 113 + } 114 + function keydown(e: KeyboardEvent) { 115 + if (e.key === 'Escape' && visible) { 116 + visible = false 117 + e.preventDefault() 118 + // When the date picker is open, we prevent 'Escape' from propagating, 119 + // so for example a parent modal won't be closed 120 + e.stopPropagation() 121 + } else if (e.key === 'Enter') { 122 + visible = !visible 123 + e.preventDefault() 124 + } 125 + } 126 126 127 - function onSelect(e: CustomEvent<Date>) { 128 - dispatch('select', e.detail) 129 - if (closeOnSelection) { 130 - visible = false 131 - } 132 - } 127 + function onSelect(e: CustomEvent<Date>) { 128 + dispatch('select', e.detail) 129 + if (closeOnSelection) { 130 + visible = false 131 + } 132 + } 133 133 134 - /** Automatically adjust date popup position to not appear outside the screen */ 135 - export let dynamicPositioning = false 134 + /** Automatically adjust date popup position to not appear outside the screen */ 135 + export let dynamicPositioning = false 136 136 137 - let InputElement: HTMLInputElement 138 - let pickerElement: HTMLElement | null 139 - let showAbove = false 140 - let pickerLeftPosition: number | null = null 137 + let InputElement: HTMLInputElement 138 + let pickerElement: HTMLElement | null 139 + let showAbove = false 140 + let pickerLeftPosition: number | null = null 141 141 142 - function setDatePickerPosition() { 143 - // Defaults 144 - showAbove = false 145 - pickerLeftPosition = null 142 + function setDatePickerPosition() { 143 + // Defaults 144 + showAbove = false 145 + pickerLeftPosition = null 146 146 147 - if (visible && pickerElement && dynamicPositioning) { 148 - // The child of the dateField is what is visually seen, all calculations should use this to make sure they line up properly 149 - const inputRect = InputElement.getBoundingClientRect() 150 - const horizontalOverflow = pickerElement.offsetWidth - inputRect.width 147 + if (visible && pickerElement && dynamicPositioning) { 148 + // The child of the dateField is what is visually seen, all calculations should use this to make sure they line up properly 149 + const inputRect = InputElement.getBoundingClientRect() 150 + const horizontalOverflow = pickerElement.offsetWidth - inputRect.width 151 151 152 - const bottomThreshold = inputRect.bottom + pickerElement.offsetHeight + 5 153 - const rightThreshold = inputRect.left + pickerElement.offsetWidth + 5 152 + const bottomThreshold = inputRect.bottom + pickerElement.offsetHeight + 5 153 + const rightThreshold = inputRect.left + pickerElement.offsetWidth + 5 154 154 155 - if (bottomThreshold > window.innerHeight) { 156 - // If .date-time-field is on the bottom half of the screen, open above 157 - showAbove = true 158 - } 159 - if (rightThreshold > window.innerWidth) { 160 - // If date-time-field is on the right of the screen, open to the left 161 - pickerLeftPosition = -horizontalOverflow 155 + if (bottomThreshold > window.innerHeight) { 156 + // If .date-time-field is on the bottom half of the screen, open above 157 + showAbove = true 158 + } 159 + if (rightThreshold > window.innerWidth) { 160 + // If date-time-field is on the right of the screen, open to the left 161 + pickerLeftPosition = -horizontalOverflow 162 162 163 - if (inputRect.left < horizontalOverflow + 5) { 164 - // If it would overflow on the left too, open in the middle of the screen 165 - const windowCenterPos = window.innerWidth / 2 166 - const newPos = windowCenterPos - pickerElement.offsetWidth / 2 167 - pickerLeftPosition = newPos - inputRect.left 168 - } 169 - } 170 - } 171 - } 163 + if (inputRect.left < horizontalOverflow + 5) { 164 + // If it would overflow on the left too, open in the middle of the screen 165 + const windowCenterPos = window.innerWidth / 2 166 + const newPos = windowCenterPos - pickerElement.offsetWidth / 2 167 + pickerLeftPosition = newPos - inputRect.left 168 + } 169 + } 170 + } 171 + } 172 172 173 - function flyAutoPosition(node: HTMLElement) { 174 - setDatePickerPosition() 175 - return fly(node, { 176 - duration: 200, 177 - easing: cubicInOut, 178 - y: showAbove ? 5 : -5, 179 - }) 180 - } 173 + function flyAutoPosition(node: HTMLElement) { 174 + setDatePickerPosition() 175 + return fly(node, { 176 + duration: 200, 177 + easing: cubicInOut, 178 + y: showAbove ? 5 : -5, 179 + }) 180 + } 181 181 </script> 182 182 183 183 <!-- svelte-ignore a11y-no-static-element-interactions --> 184 184 <div class="date-time-field {classes}" on:focusout={onFocusOut} on:keydown={keydown}> 185 - <input 186 - bind:this={InputElement} 187 - class:invalid={!valid} 188 - type="text" 189 - value={text} 190 - {placeholder} 191 - {disabled} 192 - on:focus={() => (visible = true)} 193 - on:mousedown={() => (visible = true)} 194 - on:input={(e) => { 195 - if ( 196 - e instanceof InputEvent && 197 - e.inputType === 'insertText' && 198 - typeof e.data === 'string' && 199 - e.currentTarget.value === text + e.data 200 - ) { 201 - // check for missing punctuation, and add if there is any 202 - let result = parse(text, formatTokens, $store) 203 - if (result.missingPunctuation !== '' && !result.missingPunctuation.startsWith(e.data)) { 204 - text = text + result.missingPunctuation + e.data 205 - return 206 - } 207 - } 208 - text = e.currentTarget.value 209 - }} 210 - /> 211 - {#if visible && !disabled} 212 - <div 213 - class="picker" 214 - class:visible 215 - class:above={showAbove} 216 - transition:flyAutoPosition 217 - bind:this={pickerElement} 218 - style:--picker-left-position="{pickerLeftPosition}px" 219 - > 220 - <DateTimePicker 221 - on:focusout={onFocusOut} 222 - on:select={onSelect} 223 - bind:value={$store} 224 - {min} 225 - {max} 226 - {locale} 227 - {browseWithoutSelecting} 228 - {timePrecision} 229 - /> 230 - </div> 231 - {/if} 185 + <input 186 + bind:this={InputElement} 187 + class:invalid={!valid} 188 + type="text" 189 + value={text} 190 + {placeholder} 191 + {disabled} 192 + on:focus={() => (visible = true)} 193 + on:mousedown={() => (visible = true)} 194 + on:input={(e) => { 195 + if ( 196 + e instanceof InputEvent && 197 + e.inputType === 'insertText' && 198 + typeof e.data === 'string' && 199 + e.currentTarget.value === text + e.data 200 + ) { 201 + // check for missing punctuation, and add if there is any 202 + let result = parse(text, formatTokens, $store) 203 + if (result.missingPunctuation !== '' && !result.missingPunctuation.startsWith(e.data)) { 204 + text = text + result.missingPunctuation + e.data 205 + return 206 + } 207 + } 208 + text = e.currentTarget.value 209 + }} 210 + /> 211 + {#if visible && !disabled} 212 + <div 213 + class="picker" 214 + class:visible 215 + class:above={showAbove} 216 + transition:flyAutoPosition 217 + bind:this={pickerElement} 218 + style:--picker-left-position="{pickerLeftPosition}px" 219 + > 220 + <DateTimePicker 221 + on:focusout={onFocusOut} 222 + on:select={onSelect} 223 + bind:value={$store} 224 + {min} 225 + {max} 226 + {locale} 227 + {browseWithoutSelecting} 228 + {timePrecision} 229 + /> 230 + </div> 231 + {/if} 232 232 </div> 233 233 234 234 <style lang="sass"> 235 - .date-time-field 236 - position: relative 237 - input 238 - color: var(--date-picker-foreground, #000000) 239 - background: var(--date-picker-background, #ffffff) 240 - min-width: 0px 241 - box-sizing: border-box 242 - padding: 4px 6px 243 - margin: 0px 244 - border: 1px solid rgba(103, 113, 137, 0.3) 245 - border-radius: 3px 246 - width: var(--date-input-width, 150px) 247 - outline: none 248 - transition: all 80ms cubic-bezier(0.4, 0.0, 0.2, 1) 249 - &:focus 250 - border-color: var(--date-picker-highlight-border, #0269f7) 251 - box-shadow: 0px 0px 0px 2px var(--date-picker-highlight-shadow, rgba(#0269f7, 0.4)) 252 - &:disabled 253 - opacity: 0.5 254 - .invalid 255 - border: 1px solid rgba(#f92f72, 0.5) 256 - background-color: rgba(#f92f72, 0.1) 257 - &:focus 258 - border-color: #f92f72 259 - box-shadow: 0px 0px 0px 2px rgba(#f92f72, 0.5) 260 - .picker 261 - display: none 262 - position: absolute 263 - padding: 1px 264 - &.above 265 - bottom: 100% 266 - left: var(--picker-left-position) 267 - z-index: 10 268 - &.visible 269 - display: block 235 + .date-time-field 236 + position: relative 237 + input 238 + color: var(--date-picker-foreground, #000000) 239 + background: var(--date-picker-background, #ffffff) 240 + min-width: 0px 241 + box-sizing: border-box 242 + padding: 4px 6px 243 + margin: 0px 244 + border: 1px solid rgba(103, 113, 137, 0.3) 245 + border-radius: 3px 246 + width: var(--date-input-width, 150px) 247 + outline: none 248 + transition: all 80ms cubic-bezier(0.4, 0.0, 0.2, 1) 249 + &:focus 250 + border-color: var(--date-picker-highlight-border, #0269f7) 251 + box-shadow: 0px 0px 0px 2px var(--date-picker-highlight-shadow, rgba(#0269f7, 0.4)) 252 + &:disabled 253 + opacity: 0.5 254 + .invalid 255 + border: 1px solid rgba(#f92f72, 0.5) 256 + background-color: rgba(#f92f72, 0.1) 257 + &:focus 258 + border-color: #f92f72 259 + box-shadow: 0px 0px 0px 2px rgba(#f92f72, 0.5) 260 + .picker 261 + display: none 262 + position: absolute 263 + padding: 1px 264 + &.above 265 + bottom: 100% 266 + left: var(--picker-left-position) 267 + z-index: 10 268 + &.visible 269 + display: block 270 270 </style>
+438 -438
src/lib/DatePicker.svelte
··· 1 1 <script lang="ts"> 2 - import TimePicker from './TimePicker.svelte' 3 - import { getMonthLength, getCalendarDays, type CalendarDay } from './date-utils.js' 4 - import { getInnerLocale, type Locale } from './locale.js' 5 - import { createEventDispatcher } from 'svelte' 2 + import TimePicker from './TimePicker.svelte' 3 + import { getMonthLength, getCalendarDays, type CalendarDay } from './date-utils.js' 4 + import { getInnerLocale, type Locale } from './locale.js' 5 + import { createEventDispatcher } from 'svelte' 6 6 7 - const dispatch = createEventDispatcher<{ 8 - /** Fires when the user selects a new value by clicking on a date or by pressing enter */ 9 - select: Date 10 - }>() 7 + const dispatch = createEventDispatcher<{ 8 + /** Fires when the user selects a new value by clicking on a date or by pressing enter */ 9 + select: Date 10 + }>() 11 11 12 - function cloneDate(d: Date) { 13 - return new Date(d.getTime()) 14 - } 12 + function cloneDate(d: Date) { 13 + return new Date(d.getTime()) 14 + } 15 15 16 - /** Date value. It's `null` if no date is selected */ 17 - export let value: Date | null = null 16 + /** Date value. It's `null` if no date is selected */ 17 + export let value: Date | null = null 18 18 19 - function setValue(d: Date) { 20 - if (d.getTime() !== value?.getTime()) { 21 - browseDate = clamp(d, min, max) 22 - value = cloneDate(browseDate) 23 - } 24 - } 19 + function setValue(d: Date) { 20 + if (d.getTime() !== value?.getTime()) { 21 + browseDate = clamp(d, min, max) 22 + value = cloneDate(browseDate) 23 + } 24 + } 25 25 26 - /** Set the browseDate */ 27 - function browse(d: Date) { 28 - browseDate = clamp(d, min, max) 29 - if (!browseWithoutSelecting && value) { 30 - setValue(browseDate) 31 - } 32 - } 26 + /** Set the browseDate */ 27 + function browse(d: Date) { 28 + browseDate = clamp(d, min, max) 29 + if (!browseWithoutSelecting && value) { 30 + setValue(browseDate) 31 + } 32 + } 33 33 34 - const todayDate = new Date() 34 + const todayDate = new Date() 35 35 36 - /** Default Date to use */ 37 - const defaultDate = new Date() 36 + /** Default Date to use */ 37 + const defaultDate = new Date() 38 38 39 - /** Show a time picker with the specified precision */ 40 - export let timePrecision: 'minute' | 'second' | 'millisecond' | null = null 39 + /** Show a time picker with the specified precision */ 40 + export let timePrecision: 'minute' | 'second' | 'millisecond' | null = null 41 41 42 - /** The earliest year the user can select */ 43 - export let min = new Date(defaultDate.getFullYear() - 20, 0, 1) 44 - /** The latest year the user can select */ 45 - export let max = new Date(defaultDate.getFullYear(), 11, 31, 23, 59, 59, 999) 46 - $: if (value && value > max) { 47 - setValue(max) 48 - } else if (value && value < min) { 49 - setValue(min) 50 - } 51 - function clamp(d: Date, min: Date, max: Date) { 52 - if (d > max) { 53 - return cloneDate(max) 54 - } else if (d < min) { 55 - return cloneDate(min) 56 - } else { 57 - return cloneDate(d) 58 - } 59 - } 42 + /** The earliest year the user can select */ 43 + export let min = new Date(defaultDate.getFullYear() - 20, 0, 1) 44 + /** The latest year the user can select */ 45 + export let max = new Date(defaultDate.getFullYear(), 11, 31, 23, 59, 59, 999) 46 + $: if (value && value > max) { 47 + setValue(max) 48 + } else if (value && value < min) { 49 + setValue(min) 50 + } 51 + function clamp(d: Date, min: Date, max: Date) { 52 + if (d > max) { 53 + return cloneDate(max) 54 + } else if (d < min) { 55 + return cloneDate(min) 56 + } else { 57 + return cloneDate(d) 58 + } 59 + } 60 60 61 - /** The date shown in the popup when none is selected */ 62 - let browseDate = value ? cloneDate(value) : cloneDate(clamp(defaultDate, min, max)) 63 - $: if (browseDate.getTime() !== value?.getTime() && !browseWithoutSelecting) { 64 - browseDate = value ? cloneDate(value) : browseDate 65 - } 61 + /** The date shown in the popup when none is selected */ 62 + let browseDate = value ? cloneDate(value) : cloneDate(clamp(defaultDate, min, max)) 63 + $: if (browseDate.getTime() !== value?.getTime() && !browseWithoutSelecting) { 64 + browseDate = value ? cloneDate(value) : browseDate 65 + } 66 66 67 - let years = getYears(min, max) 68 - $: years = getYears(min, max) 69 - function getYears(min: Date, max: Date) { 70 - let years = [] 71 - for (let i = min.getFullYear(); i <= max.getFullYear(); i++) { 72 - years.push(i) 73 - } 74 - return years 75 - } 67 + let years = getYears(min, max) 68 + $: years = getYears(min, max) 69 + function getYears(min: Date, max: Date) { 70 + let years = [] 71 + for (let i = min.getFullYear(); i <= max.getFullYear(); i++) { 72 + years.push(i) 73 + } 74 + return years 75 + } 76 76 77 - /** Locale object for internationalization */ 78 - export let locale: Locale = {} 79 - $: iLocale = getInnerLocale(locale) 80 - /** Wait with updating the date until a date is selected */ 81 - export let browseWithoutSelecting = false 77 + /** Locale object for internationalization */ 78 + export let locale: Locale = {} 79 + $: iLocale = getInnerLocale(locale) 80 + /** Wait with updating the date until a date is selected */ 81 + export let browseWithoutSelecting = false 82 82 83 - $: browseYear = browseDate.getFullYear() 84 - function setYear(newYear: number) { 85 - browseDate.setFullYear(newYear) 86 - browse(browseDate) 87 - } 83 + $: browseYear = browseDate.getFullYear() 84 + function setYear(newYear: number) { 85 + browseDate.setFullYear(newYear) 86 + browse(browseDate) 87 + } 88 88 89 - $: browseMonth = browseDate.getMonth() 90 - function setMonth(newMonth: number) { 91 - let newYear = browseDate.getFullYear() 92 - if (newMonth === 12) { 93 - newMonth = 0 94 - newYear++ 95 - } else if (newMonth === -1) { 96 - newMonth = 11 97 - newYear-- 98 - } 89 + $: browseMonth = browseDate.getMonth() 90 + function setMonth(newMonth: number) { 91 + let newYear = browseDate.getFullYear() 92 + if (newMonth === 12) { 93 + newMonth = 0 94 + newYear++ 95 + } else if (newMonth === -1) { 96 + newMonth = 11 97 + newYear-- 98 + } 99 99 100 - const maxDate = getMonthLength(newYear, newMonth) 101 - const newDate = Math.min(browseDate.getDate(), maxDate) 102 - browse( 103 - new Date( 104 - newYear, 105 - newMonth, 106 - newDate, 107 - browseDate.getHours(), 108 - browseDate.getMinutes(), 109 - browseDate.getSeconds(), 110 - browseDate.getMilliseconds() 111 - ) 112 - ) 113 - } 100 + const maxDate = getMonthLength(newYear, newMonth) 101 + const newDate = Math.min(browseDate.getDate(), maxDate) 102 + browse( 103 + new Date( 104 + newYear, 105 + newMonth, 106 + newDate, 107 + browseDate.getHours(), 108 + browseDate.getMinutes(), 109 + browseDate.getSeconds(), 110 + browseDate.getMilliseconds(), 111 + ), 112 + ) 113 + } 114 114 115 - $: calendarDays = getCalendarDays(browseDate, iLocale.weekStartsOn) 115 + $: calendarDays = getCalendarDays(browseDate, iLocale.weekStartsOn) 116 116 117 - function selectDay(calendarDay: CalendarDay) { 118 - if (dayIsInRange(calendarDay, min, max)) { 119 - browseDate.setFullYear(0) 120 - browseDate.setMonth(0) 121 - browseDate.setDate(1) 122 - browseDate.setFullYear(calendarDay.year) 123 - browseDate.setMonth(calendarDay.month) 124 - browseDate.setDate(calendarDay.number) 125 - setValue(browseDate) 126 - dispatch('select', cloneDate(browseDate)) 127 - } 128 - } 129 - function dayIsInRange(calendarDay: CalendarDay, min: Date, max: Date) { 130 - const date = new Date(calendarDay.year, calendarDay.month, calendarDay.number) 131 - const minDate = new Date(min.getFullYear(), min.getMonth(), min.getDate()) 132 - const maxDate = new Date(max.getFullYear(), max.getMonth(), max.getDate()) 133 - return date >= minDate && date <= maxDate 134 - } 135 - function shiftKeydown(e: KeyboardEvent) { 136 - if (e.shiftKey && e.key === 'ArrowUp') { 137 - setYear(browseDate.getFullYear() - 1) 138 - } else if (e.shiftKey && e.key === 'ArrowDown') { 139 - setYear(browseDate.getFullYear() + 1) 140 - } else if (e.shiftKey && e.key === 'ArrowLeft') { 141 - setMonth(browseDate.getMonth() - 1) 142 - } else if (e.shiftKey && e.key === 'ArrowRight') { 143 - setMonth(browseDate.getMonth() + 1) 144 - } else { 145 - return false 146 - } 147 - e.preventDefault() 148 - return true 149 - } 150 - function yearKeydown(e: KeyboardEvent) { 151 - let shift = e.shiftKey || e.altKey 152 - if (shift) { 153 - shiftKeydown(e) 154 - return 155 - } else if (e.key === 'ArrowUp') { 156 - setYear(browseDate.getFullYear() - 1) 157 - } else if (e.key === 'ArrowDown') { 158 - setYear(browseDate.getFullYear() + 1) 159 - } else if (e.key === 'ArrowLeft') { 160 - setMonth(browseDate.getMonth() - 1) 161 - } else if (e.key === 'ArrowRight') { 162 - setMonth(browseDate.getMonth() + 1) 163 - } else { 164 - shiftKeydown(e) 165 - return 166 - } 167 - e.preventDefault() 168 - } 169 - function monthKeydown(e: KeyboardEvent) { 170 - let shift = e.shiftKey || e.altKey 171 - if (shift) { 172 - shiftKeydown(e) 173 - return 174 - } else if (e.key === 'ArrowUp' || e.key === 'ArrowLeft') { 175 - setMonth(browseDate.getMonth() - 1) 176 - } else if (e.key === 'ArrowDown' || e.key === 'ArrowRight') { 177 - setMonth(browseDate.getMonth() + 1) 178 - } else { 179 - shiftKeydown(e) 180 - return 181 - } 182 - e.preventDefault() 183 - } 184 - function keydown(e: KeyboardEvent) { 185 - let shift = e.shiftKey || e.altKey 186 - if ( 187 - (e.target as HTMLElement)?.tagName === 'SELECT' || 188 - (e.target as HTMLElement)?.tagName === 'SPAN' 189 - ) { 190 - // Ignore date/month <select> & TimePicker <input> 191 - return 192 - } 193 - if (shift) { 194 - shiftKeydown(e) 195 - return 196 - } else if (e.key === 'ArrowUp') { 197 - browseDate.setDate(browseDate.getDate() - 7) 198 - setValue(browseDate) 199 - } else if (e.key === 'ArrowDown') { 200 - browseDate.setDate(browseDate.getDate() + 7) 201 - setValue(browseDate) 202 - } else if (e.key === 'ArrowLeft') { 203 - browseDate.setDate(browseDate.getDate() - 1) 204 - setValue(browseDate) 205 - } else if (e.key === 'ArrowRight') { 206 - browseDate.setDate(browseDate.getDate() + 1) 207 - setValue(browseDate) 208 - } else if (e.key === 'Enter') { 209 - setValue(browseDate) 210 - dispatch('select', cloneDate(browseDate)) 211 - } else { 212 - return 213 - } 214 - e.preventDefault() 215 - } 117 + function selectDay(calendarDay: CalendarDay) { 118 + if (dayIsInRange(calendarDay, min, max)) { 119 + browseDate.setFullYear(0) 120 + browseDate.setMonth(0) 121 + browseDate.setDate(1) 122 + browseDate.setFullYear(calendarDay.year) 123 + browseDate.setMonth(calendarDay.month) 124 + browseDate.setDate(calendarDay.number) 125 + setValue(browseDate) 126 + dispatch('select', cloneDate(browseDate)) 127 + } 128 + } 129 + function dayIsInRange(calendarDay: CalendarDay, min: Date, max: Date) { 130 + const date = new Date(calendarDay.year, calendarDay.month, calendarDay.number) 131 + const minDate = new Date(min.getFullYear(), min.getMonth(), min.getDate()) 132 + const maxDate = new Date(max.getFullYear(), max.getMonth(), max.getDate()) 133 + return date >= minDate && date <= maxDate 134 + } 135 + function shiftKeydown(e: KeyboardEvent) { 136 + if (e.shiftKey && e.key === 'ArrowUp') { 137 + setYear(browseDate.getFullYear() - 1) 138 + } else if (e.shiftKey && e.key === 'ArrowDown') { 139 + setYear(browseDate.getFullYear() + 1) 140 + } else if (e.shiftKey && e.key === 'ArrowLeft') { 141 + setMonth(browseDate.getMonth() - 1) 142 + } else if (e.shiftKey && e.key === 'ArrowRight') { 143 + setMonth(browseDate.getMonth() + 1) 144 + } else { 145 + return false 146 + } 147 + e.preventDefault() 148 + return true 149 + } 150 + function yearKeydown(e: KeyboardEvent) { 151 + let shift = e.shiftKey || e.altKey 152 + if (shift) { 153 + shiftKeydown(e) 154 + return 155 + } else if (e.key === 'ArrowUp') { 156 + setYear(browseDate.getFullYear() - 1) 157 + } else if (e.key === 'ArrowDown') { 158 + setYear(browseDate.getFullYear() + 1) 159 + } else if (e.key === 'ArrowLeft') { 160 + setMonth(browseDate.getMonth() - 1) 161 + } else if (e.key === 'ArrowRight') { 162 + setMonth(browseDate.getMonth() + 1) 163 + } else { 164 + shiftKeydown(e) 165 + return 166 + } 167 + e.preventDefault() 168 + } 169 + function monthKeydown(e: KeyboardEvent) { 170 + let shift = e.shiftKey || e.altKey 171 + if (shift) { 172 + shiftKeydown(e) 173 + return 174 + } else if (e.key === 'ArrowUp' || e.key === 'ArrowLeft') { 175 + setMonth(browseDate.getMonth() - 1) 176 + } else if (e.key === 'ArrowDown' || e.key === 'ArrowRight') { 177 + setMonth(browseDate.getMonth() + 1) 178 + } else { 179 + shiftKeydown(e) 180 + return 181 + } 182 + e.preventDefault() 183 + } 184 + function keydown(e: KeyboardEvent) { 185 + let shift = e.shiftKey || e.altKey 186 + if ( 187 + (e.target as HTMLElement)?.tagName === 'SELECT' || 188 + (e.target as HTMLElement)?.tagName === 'SPAN' 189 + ) { 190 + // Ignore date/month <select> & TimePicker <input> 191 + return 192 + } 193 + if (shift) { 194 + shiftKeydown(e) 195 + return 196 + } else if (e.key === 'ArrowUp') { 197 + browseDate.setDate(browseDate.getDate() - 7) 198 + setValue(browseDate) 199 + } else if (e.key === 'ArrowDown') { 200 + browseDate.setDate(browseDate.getDate() + 7) 201 + setValue(browseDate) 202 + } else if (e.key === 'ArrowLeft') { 203 + browseDate.setDate(browseDate.getDate() - 1) 204 + setValue(browseDate) 205 + } else if (e.key === 'ArrowRight') { 206 + browseDate.setDate(browseDate.getDate() + 1) 207 + setValue(browseDate) 208 + } else if (e.key === 'Enter') { 209 + setValue(browseDate) 210 + dispatch('select', cloneDate(browseDate)) 211 + } else { 212 + return 213 + } 214 + e.preventDefault() 215 + } 216 216 </script> 217 217 218 218 <!-- svelte-ignore a11y-no-noninteractive-tabindex --> 219 219 <!-- svelte-ignore a11y-no-static-element-interactions --> 220 220 <div class="date-time-picker" on:focusout tabindex="0" on:keydown={keydown}> 221 - <div class="tab-container" tabindex="-1"> 222 - <div class="top"> 223 - <button 224 - type="button" 225 - class="page-button" 226 - tabindex="-1" 227 - on:click={() => setMonth(browseDate.getMonth() - 1)} 228 - > 229 - <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" 230 - ><path 231 - d="M5 3l3.057-3 11.943 12-11.943 12-3.057-3 9-9z" 232 - transform="rotate(180, 12, 12)" 233 - /></svg 234 - > 235 - </button> 236 - <div class="dropdown month"> 237 - <select 238 - value={browseMonth} 239 - on:keydown={monthKeydown} 240 - on:input={(e) => setMonth(parseInt(e.currentTarget.value))} 241 - > 242 - {#each iLocale.months as monthName, i} 243 - <option 244 - disabled={new Date(browseYear, i, getMonthLength(browseYear, i), 23, 59, 59, 999) < 245 - min || new Date(browseYear, i) > max} 246 - value={i}>{monthName}</option 247 - > 248 - {/each} 249 - </select> 250 - <!-- 251 - Here we have use `select.dummy-select` for showing just the <select> button. This 252 - is to style the <select> button without affecting the menu popup 253 - - `option { color: initial }` causes invisible menu in dark mode on Firefox 254 - - `option { color: initial; background-color: initial }` causes invisible menu in Chrome 255 - - `select { background-color: $bg; color: $text }` causes white scrollbar in dark mode on Firefox 256 - --> 257 - <select class="dummy-select" tabindex="-1"> 258 - {#each iLocale.months as monthName, i} 259 - <option value={i} selected={i === browseMonth}>{monthName}</option> 260 - {/each} 261 - </select> 262 - <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" 263 - ><path d="M6 0l12 12-12 12z" transform="rotate(90, 12, 12)" /></svg 264 - > 265 - </div> 266 - <div class="dropdown year"> 267 - <select 268 - value={browseYear} 269 - on:input={(e) => setYear(parseInt(e.currentTarget.value))} 270 - on:keydown={yearKeydown} 271 - > 272 - {#each years as v} 273 - <option value={v}>{v}</option> 274 - {/each} 275 - </select> 276 - <!-- style <select> button without affecting menu popup --> 277 - <select class="dummy-select" tabindex="-1"> 278 - {#each years as v} 279 - <option value={v} selected={v === browseDate.getFullYear()}>{v}</option> 280 - {/each} 281 - </select> 282 - <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" 283 - ><path d="M6 0l12 12-12 12z" transform="rotate(90, 12, 12)" /></svg 284 - > 285 - </div> 286 - <button 287 - type="button" 288 - class="page-button" 289 - tabindex="-1" 290 - on:click={() => setMonth(browseDate.getMonth() + 1)} 291 - > 292 - <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" 293 - ><path d="M5 3l3.057-3 11.943 12-11.943 12-3.057-3 9-9z" /></svg 294 - > 295 - </button> 296 - </div> 297 - <div class="header"> 298 - <!-- eslint-disable-next-line @typescript-eslint/no-unused-vars --> 299 - {#each Array(7) as _, i} 300 - {#if i + iLocale.weekStartsOn < 7} 301 - <div class="header-cell">{iLocale.weekdays[iLocale.weekStartsOn + i]}</div> 302 - {:else} 303 - <div class="header-cell">{iLocale.weekdays[iLocale.weekStartsOn + i - 7]}</div> 304 - {/if} 305 - {/each} 306 - </div> 307 - <!-- eslint-disable-next-line @typescript-eslint/no-unused-vars --> 308 - {#each Array(6) as _, weekIndex} 309 - <div class="week"> 310 - {#each calendarDays.slice(weekIndex * 7, weekIndex * 7 + 7) as calendarDay} 311 - <!-- svelte-ignore a11y-click-events-have-key-events --> 312 - <div 313 - class="cell" 314 - on:click={() => selectDay(calendarDay)} 315 - class:disabled={!dayIsInRange(calendarDay, min, max)} 316 - class:selected={value && 317 - calendarDay.year === value.getFullYear() && 318 - calendarDay.month === value.getMonth() && 319 - calendarDay.number === value.getDate()} 320 - class:today={calendarDay.year === todayDate.getFullYear() && 321 - calendarDay.month === todayDate.getMonth() && 322 - calendarDay.number === todayDate.getDate()} 323 - class:other-month={calendarDay.month !== browseMonth} 324 - > 325 - <span>{calendarDay.number}</span> 326 - </div> 327 - {/each} 328 - </div> 329 - {/each} 221 + <div class="tab-container" tabindex="-1"> 222 + <div class="top"> 223 + <button 224 + type="button" 225 + class="page-button" 226 + tabindex="-1" 227 + on:click={() => setMonth(browseDate.getMonth() - 1)} 228 + > 229 + <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" 230 + ><path 231 + d="M5 3l3.057-3 11.943 12-11.943 12-3.057-3 9-9z" 232 + transform="rotate(180, 12, 12)" 233 + /></svg 234 + > 235 + </button> 236 + <div class="dropdown month"> 237 + <select 238 + value={browseMonth} 239 + on:keydown={monthKeydown} 240 + on:input={(e) => setMonth(parseInt(e.currentTarget.value))} 241 + > 242 + {#each iLocale.months as monthName, i} 243 + <option 244 + disabled={new Date(browseYear, i, getMonthLength(browseYear, i), 23, 59, 59, 999) < 245 + min || new Date(browseYear, i) > max} 246 + value={i}>{monthName}</option 247 + > 248 + {/each} 249 + </select> 250 + <!-- 251 + Here we have use `select.dummy-select` for showing just the <select> button. This 252 + is to style the <select> button without affecting the menu popup 253 + - `option { color: initial }` causes invisible menu in dark mode on Firefox 254 + - `option { color: initial; background-color: initial }` causes invisible menu in Chrome 255 + - `select { background-color: $bg; color: $text }` causes white scrollbar in dark mode on Firefox 256 + --> 257 + <select class="dummy-select" tabindex="-1"> 258 + {#each iLocale.months as monthName, i} 259 + <option value={i} selected={i === browseMonth}>{monthName}</option> 260 + {/each} 261 + </select> 262 + <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" 263 + ><path d="M6 0l12 12-12 12z" transform="rotate(90, 12, 12)" /></svg 264 + > 265 + </div> 266 + <div class="dropdown year"> 267 + <select 268 + value={browseYear} 269 + on:input={(e) => setYear(parseInt(e.currentTarget.value))} 270 + on:keydown={yearKeydown} 271 + > 272 + {#each years as v} 273 + <option value={v}>{v}</option> 274 + {/each} 275 + </select> 276 + <!-- style <select> button without affecting menu popup --> 277 + <select class="dummy-select" tabindex="-1"> 278 + {#each years as v} 279 + <option value={v} selected={v === browseDate.getFullYear()}>{v}</option> 280 + {/each} 281 + </select> 282 + <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" 283 + ><path d="M6 0l12 12-12 12z" transform="rotate(90, 12, 12)" /></svg 284 + > 285 + </div> 286 + <button 287 + type="button" 288 + class="page-button" 289 + tabindex="-1" 290 + on:click={() => setMonth(browseDate.getMonth() + 1)} 291 + > 292 + <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" 293 + ><path d="M5 3l3.057-3 11.943 12-11.943 12-3.057-3 9-9z" /></svg 294 + > 295 + </button> 296 + </div> 297 + <div class="header"> 298 + <!-- eslint-disable-next-line @typescript-eslint/no-unused-vars --> 299 + {#each Array(7) as _, i} 300 + {#if i + iLocale.weekStartsOn < 7} 301 + <div class="header-cell">{iLocale.weekdays[iLocale.weekStartsOn + i]}</div> 302 + {:else} 303 + <div class="header-cell">{iLocale.weekdays[iLocale.weekStartsOn + i - 7]}</div> 304 + {/if} 305 + {/each} 306 + </div> 307 + <!-- eslint-disable-next-line @typescript-eslint/no-unused-vars --> 308 + {#each Array(6) as _, weekIndex} 309 + <div class="week"> 310 + {#each calendarDays.slice(weekIndex * 7, weekIndex * 7 + 7) as calendarDay} 311 + <!-- svelte-ignore a11y-click-events-have-key-events --> 312 + <div 313 + class="cell" 314 + on:click={() => selectDay(calendarDay)} 315 + class:disabled={!dayIsInRange(calendarDay, min, max)} 316 + class:selected={value && 317 + calendarDay.year === value.getFullYear() && 318 + calendarDay.month === value.getMonth() && 319 + calendarDay.number === value.getDate()} 320 + class:today={calendarDay.year === todayDate.getFullYear() && 321 + calendarDay.month === todayDate.getMonth() && 322 + calendarDay.number === todayDate.getDate()} 323 + class:other-month={calendarDay.month !== browseMonth} 324 + > 325 + <span>{calendarDay.number}</span> 326 + </div> 327 + {/each} 328 + </div> 329 + {/each} 330 330 331 - <TimePicker {timePrecision} {browseDate} {browse} /> 332 - </div> 331 + <TimePicker {timePrecision} {browseDate} {browse} /> 332 + </div> 333 333 </div> 334 334 335 335 <style lang="sass"> 336 - .date-time-picker 337 - display: inline-block 338 - color: var(--date-picker-foreground, #000000) 339 - background: var(--date-picker-background, #ffffff) 340 - user-select: none 341 - -webkit-user-select: none 342 - padding: 0.5rem 343 - cursor: default 344 - font-size: 0.75rem 345 - border: 1px solid rgba(103, 113, 137, 0.3) 346 - border-radius: 3px 347 - box-shadow: 0px 2px 6px rgba(#000000,0.08), 0px 2px 6px rgba(#000000,0.11) 348 - outline: none 349 - transition: all 80ms cubic-bezier(0.4, 0.0, 0.2, 1) 350 - &:focus 351 - border-color: var(--date-picker-highlight-border, #0269f7) 352 - box-shadow: 0px 0px 0px 2px var(--date-picker-highlight-shadow, rgba(#0269f7, 0.4)) 353 - .tab-container 354 - outline: none 355 - .top 356 - display: flex 357 - justify-content: center 358 - align-items: center 359 - padding-bottom: 0.5rem 360 - .dropdown 361 - margin-left: 0.25rem 362 - margin-right: 0.25rem 363 - position: relative 364 - display: flex 365 - svg 366 - position: absolute 367 - right: 0px 368 - top: 0px 369 - height: 100% 370 - width: 8px 371 - padding: 0rem 0.5rem 372 - pointer-events: none 373 - box-sizing: content-box 374 - .month 375 - flex-grow: 1 376 - .year 377 - flex-grow: 1 378 - svg 379 - display: block 380 - fill: var(--date-picker-foreground, #000000) 381 - opacity: 0.75 382 - outline: none 383 - .page-button 384 - background-color: transparent 385 - width: 1.5rem 386 - height: 1.5rem 387 - flex-shrink: 0 388 - border-radius: 5px 389 - box-sizing: border-box 390 - border: 1px solid transparent 391 - display: flex 392 - align-items: center 393 - justify-content: center 394 - &:hover 395 - background-color: rgba(#808080, 0.08) 396 - border: 1px solid rgba(#808080, 0.08) 397 - svg 398 - width: 0.68rem 399 - height: 0.68rem 400 - select.dummy-select 401 - position: absolute 402 - width: 100% 403 - pointer-events: none 404 - outline: none 405 - color: var(--date-picker-foreground, #000000) 406 - background-color: var(--date-picker-background, #ffffff) 407 - border-radius: 3px 408 - select:focus + select.dummy-select 409 - border-color: var(--date-picker-highlight-border, #0269f7) 410 - box-shadow: 0px 0px 0px 2px var(--date-picker-highlight-shadow, rgba(#0269f7, 0.4)) 411 - select:not(.dummy-select) 412 - opacity: 0 413 - select 414 - font-size: inherit 415 - font-family: inherit 416 - -webkit-appearance: none 417 - -moz-appearance: none 418 - appearance: none 419 - flex-grow: 1 420 - padding: 0rem 0.35rem 421 - height: 1.5rem 422 - padding-right: 1.3rem 423 - margin: 0px 424 - border: 1px solid rgba(108, 120, 147, 0.3) 425 - outline: none 426 - transition: all 80ms cubic-bezier(0.4, 0.0, 0.2, 1) 427 - background-image: none 336 + .date-time-picker 337 + display: inline-block 338 + color: var(--date-picker-foreground, #000000) 339 + background: var(--date-picker-background, #ffffff) 340 + user-select: none 341 + -webkit-user-select: none 342 + padding: 0.5rem 343 + cursor: default 344 + font-size: 0.75rem 345 + border: 1px solid rgba(103, 113, 137, 0.3) 346 + border-radius: 3px 347 + box-shadow: 0px 2px 6px rgba(#000000,0.08), 0px 2px 6px rgba(#000000,0.11) 348 + outline: none 349 + transition: all 80ms cubic-bezier(0.4, 0.0, 0.2, 1) 350 + &:focus 351 + border-color: var(--date-picker-highlight-border, #0269f7) 352 + box-shadow: 0px 0px 0px 2px var(--date-picker-highlight-shadow, rgba(#0269f7, 0.4)) 353 + .tab-container 354 + outline: none 355 + .top 356 + display: flex 357 + justify-content: center 358 + align-items: center 359 + padding-bottom: 0.5rem 360 + .dropdown 361 + margin-left: 0.25rem 362 + margin-right: 0.25rem 363 + position: relative 364 + display: flex 365 + svg 366 + position: absolute 367 + right: 0px 368 + top: 0px 369 + height: 100% 370 + width: 8px 371 + padding: 0rem 0.5rem 372 + pointer-events: none 373 + box-sizing: content-box 374 + .month 375 + flex-grow: 1 376 + .year 377 + flex-grow: 1 378 + svg 379 + display: block 380 + fill: var(--date-picker-foreground, #000000) 381 + opacity: 0.75 382 + outline: none 383 + .page-button 384 + background-color: transparent 385 + width: 1.5rem 386 + height: 1.5rem 387 + flex-shrink: 0 388 + border-radius: 5px 389 + box-sizing: border-box 390 + border: 1px solid transparent 391 + display: flex 392 + align-items: center 393 + justify-content: center 394 + &:hover 395 + background-color: rgba(#808080, 0.08) 396 + border: 1px solid rgba(#808080, 0.08) 397 + svg 398 + width: 0.68rem 399 + height: 0.68rem 400 + select.dummy-select 401 + position: absolute 402 + width: 100% 403 + pointer-events: none 404 + outline: none 405 + color: var(--date-picker-foreground, #000000) 406 + background-color: var(--date-picker-background, #ffffff) 407 + border-radius: 3px 408 + select:focus + select.dummy-select 409 + border-color: var(--date-picker-highlight-border, #0269f7) 410 + box-shadow: 0px 0px 0px 2px var(--date-picker-highlight-shadow, rgba(#0269f7, 0.4)) 411 + select:not(.dummy-select) 412 + opacity: 0 413 + select 414 + font-size: inherit 415 + font-family: inherit 416 + -webkit-appearance: none 417 + -moz-appearance: none 418 + appearance: none 419 + flex-grow: 1 420 + padding: 0rem 0.35rem 421 + height: 1.5rem 422 + padding-right: 1.3rem 423 + margin: 0px 424 + border: 1px solid rgba(108, 120, 147, 0.3) 425 + outline: none 426 + transition: all 80ms cubic-bezier(0.4, 0.0, 0.2, 1) 427 + background-image: none 428 428 429 - .header 430 - display: flex 431 - font-weight: 600 432 - padding-bottom: 2px 433 - .header-cell 434 - width: 1.875rem 435 - text-align: center 436 - flex-grow: 1 429 + .header 430 + display: flex 431 + font-weight: 600 432 + padding-bottom: 2px 433 + .header-cell 434 + width: 1.875rem 435 + text-align: center 436 + flex-grow: 1 437 437 438 - .week 439 - display: flex 440 - .cell 441 - display: flex 442 - align-items: center 443 - justify-content: center 444 - width: 2rem 445 - height: 1.94rem 446 - flex-grow: 1 447 - border-radius: 5px 448 - box-sizing: border-box 449 - border: 2px solid transparent 450 - &:hover 451 - border: 1px solid rgba(#808080, 0.08) 452 - &.today 453 - font-weight: 600 454 - border: 2px solid var(--date-picker-today-border, rgba(#808080, 0.3)) 455 - &:hover 456 - background-color: rgba(#808080, 0.08) 457 - &.disabled 458 - visibility: hidden 459 - &.disabled:hover 460 - border: none 461 - background-color: transparent 462 - &.other-month span 463 - opacity: 0.4 464 - &.selected 465 - color: var(--date-picker-selected-color, inherit) 466 - background: var(--date-picker-selected-background, rgba(2, 105, 247, 0.2)) 467 - border: 2px solid var(--date-picker-highlight-border, #0269f7) 438 + .week 439 + display: flex 440 + .cell 441 + display: flex 442 + align-items: center 443 + justify-content: center 444 + width: 2rem 445 + height: 1.94rem 446 + flex-grow: 1 447 + border-radius: 5px 448 + box-sizing: border-box 449 + border: 2px solid transparent 450 + &:hover 451 + border: 1px solid rgba(#808080, 0.08) 452 + &.today 453 + font-weight: 600 454 + border: 2px solid var(--date-picker-today-border, rgba(#808080, 0.3)) 455 + &:hover 456 + background-color: rgba(#808080, 0.08) 457 + &.disabled 458 + visibility: hidden 459 + &.disabled:hover 460 + border: none 461 + background-color: transparent 462 + &.other-month span 463 + opacity: 0.4 464 + &.selected 465 + color: var(--date-picker-selected-color, inherit) 466 + background: var(--date-picker-selected-background, rgba(2, 105, 247, 0.2)) 467 + border: 2px solid var(--date-picker-highlight-border, #0269f7) 468 468 </style>
+181 -181
src/lib/TimePicker.svelte
··· 1 1 <script lang="ts"> 2 - export let browseDate: Date 3 - export let timePrecision: 'minute' | 'second' | 'millisecond' | null 4 - export let browse: (d: Date) => void 2 + export let browseDate: Date 3 + export let timePrecision: 'minute' | 'second' | 'millisecond' | null 4 + export let browse: (d: Date) => void 5 5 6 - let fields: (HTMLSpanElement | undefined | null)[] = [] 6 + let fields: (HTMLSpanElement | undefined | null)[] = [] 7 7 8 - function select(node: Node) { 9 - const selection = window.getSelection() 10 - const range = document.createRange() 11 - range.selectNodeContents(node) 12 - selection?.removeAllRanges() 13 - selection?.addRange(range) 14 - } 8 + function select(node: Node) { 9 + const selection = window.getSelection() 10 + const range = document.createRange() 11 + range.selectNodeContents(node) 12 + selection?.removeAllRanges() 13 + selection?.addRange(range) 14 + } 15 15 16 - type SpanEvent = { currentTarget: EventTarget & HTMLSpanElement } 17 - function keydown(e: KeyboardEvent & SpanEvent) { 18 - if (e.key === 'ArrowUp' || e.key === 'ArrowDown') { 19 - const value = get_value(e.currentTarget) 20 - const delta = e.key === 'ArrowUp' ? 1 : -1 21 - set_value(e.currentTarget, value + delta, true) 22 - e.preventDefault() 23 - } else if (e.key === 'ArrowLeft' || e.key === 'ArrowRight' || ':;-,.'.includes(e.key)) { 24 - const field_index = fields.indexOf(e.currentTarget) 25 - const delta = e.key === 'ArrowLeft' ? -1 : 1 26 - const el = fields[field_index + delta] 27 - if (field_index >= 0 && el) { 28 - el.focus() 29 - return 30 - } 31 - e.preventDefault() 32 - } 33 - select(e.currentTarget) 34 - } 16 + type SpanEvent = { currentTarget: EventTarget & HTMLSpanElement } 17 + function keydown(e: KeyboardEvent & SpanEvent) { 18 + if (e.key === 'ArrowUp' || e.key === 'ArrowDown') { 19 + const value = get_value(e.currentTarget) 20 + const delta = e.key === 'ArrowUp' ? 1 : -1 21 + set_value(e.currentTarget, value + delta, true) 22 + e.preventDefault() 23 + } else if (e.key === 'ArrowLeft' || e.key === 'ArrowRight' || ':;-,.'.includes(e.key)) { 24 + const field_index = fields.indexOf(e.currentTarget) 25 + const delta = e.key === 'ArrowLeft' ? -1 : 1 26 + const el = fields[field_index + delta] 27 + if (field_index >= 0 && el) { 28 + el.focus() 29 + return 30 + } 31 + e.preventDefault() 32 + } 33 + select(e.currentTarget) 34 + } 35 35 36 - function get_value(node: HTMLElement) { 37 - const label = get_field(node).label 38 - if (label === 'Hours') { 39 - return browseDate.getHours() 40 - } else if (label === 'Minutes') { 41 - return browseDate.getMinutes() 42 - } else if (label === 'Seconds') { 43 - return browseDate.getSeconds() 44 - } else { 45 - return browseDate.getMilliseconds() 46 - } 47 - } 48 - function clamp(value: number, max: number, loop_around: boolean) { 49 - if (loop_around && value < 0) { 50 - return max 51 - } else if (loop_around && value > max) { 52 - return 0 53 - } else { 54 - return Math.max(0, Math.min(max, value)) 55 - } 56 - } 36 + function get_value(node: HTMLElement) { 37 + const label = get_field(node).label 38 + if (label === 'Hours') { 39 + return browseDate.getHours() 40 + } else if (label === 'Minutes') { 41 + return browseDate.getMinutes() 42 + } else if (label === 'Seconds') { 43 + return browseDate.getSeconds() 44 + } else { 45 + return browseDate.getMilliseconds() 46 + } 47 + } 48 + function clamp(value: number, max: number, loop_around: boolean) { 49 + if (loop_around && value < 0) { 50 + return max 51 + } else if (loop_around && value > max) { 52 + return 0 53 + } else { 54 + return Math.max(0, Math.min(max, value)) 55 + } 56 + } 57 57 58 - function get_field(element: HTMLElement) { 59 - const label = element.getAttribute('aria-label') 60 - if (label === 'Hours') { 61 - return { label, len: 2, max: 23 } as const 62 - } else if (label === 'Minutes') { 63 - return { label, len: 2, max: 59 } as const 64 - } else if (label === 'Seconds') { 65 - return { label, len: 2, max: 59 } as const 66 - } else { 67 - return { label, len: 3, max: 999 } as const 68 - } 69 - } 58 + function get_field(element: HTMLElement) { 59 + const label = element.getAttribute('aria-label') 60 + if (label === 'Hours') { 61 + return { label, len: 2, max: 23 } as const 62 + } else if (label === 'Minutes') { 63 + return { label, len: 2, max: 59 } as const 64 + } else if (label === 'Seconds') { 65 + return { label, len: 2, max: 59 } as const 66 + } else { 67 + return { label, len: 3, max: 999 } as const 68 + } 69 + } 70 70 71 - function set_value(node: HTMLElement, value: number, loop_around = false) { 72 - const field = get_field(node) 73 - value = clamp(value, field.max, loop_around) 74 - if (field.label === 'Hours') { 75 - browseDate.setHours(value) 76 - } else if (field.label === 'Minutes') { 77 - browseDate.setMinutes(value) 78 - } else if (field.label === 'Seconds') { 79 - browseDate.setSeconds(value) 80 - } else if (field.label === 'Milliseconds') { 81 - browseDate.setMilliseconds(value) 82 - } else { 83 - throw new Error('Invalid label ' + field.label) 84 - } 71 + function set_value(node: HTMLElement, value: number, loop_around = false) { 72 + const field = get_field(node) 73 + value = clamp(value, field.max, loop_around) 74 + if (field.label === 'Hours') { 75 + browseDate.setHours(value) 76 + } else if (field.label === 'Minutes') { 77 + browseDate.setMinutes(value) 78 + } else if (field.label === 'Seconds') { 79 + browseDate.setSeconds(value) 80 + } else if (field.label === 'Milliseconds') { 81 + browseDate.setMilliseconds(value) 82 + } else { 83 + throw new Error('Invalid label ' + field.label) 84 + } 85 85 86 - const length = field.label === 'Milliseconds' ? 3 : 2 87 - const text_value = ('000' + value).slice(-length) 88 - if (text_value !== node.innerText) { 89 - node.innerText = text_value 90 - } 91 - browse(browseDate) 92 - } 86 + const length = field.label === 'Milliseconds' ? 3 : 2 87 + const text_value = ('000' + value).slice(-length) 88 + if (text_value !== node.innerText) { 89 + node.innerText = text_value 90 + } 91 + browse(browseDate) 92 + } 93 93 94 - function parse(text: string, length: number) { 95 - return parseInt(text.replace(/[^\d]/g, '').slice(-length)) 96 - } 94 + function parse(text: string, length: number) { 95 + return parseInt(text.replace(/[^\d]/g, '').slice(-length)) 96 + } 97 97 98 - function input(e_unknown: unknown) { 99 - const e = e_unknown as InputEvent & SpanEvent // type error workaround 98 + function input(e_unknown: unknown) { 99 + const e = e_unknown as InputEvent & SpanEvent // type error workaround 100 100 101 - const field = get_field(e.currentTarget) 102 - let new_value: number 101 + const field = get_field(e.currentTarget) 102 + let new_value: number 103 103 104 - if (e.inputType === 'insertText') { 105 - const original_text = '000' + get_value(e.currentTarget) 106 - new_value = parse(original_text + e.currentTarget.innerText, field.len) 107 - if (new_value > field.max && e.data) { 108 - new_value = parse(e.data, field.len) 109 - } 110 - } else { 111 - new_value = parse('000' + e.currentTarget.innerText, field.len) 112 - } 104 + if (e.inputType === 'insertText') { 105 + const original_text = '000' + get_value(e.currentTarget) 106 + new_value = parse(original_text + e.currentTarget.innerText, field.len) 107 + if (new_value > field.max && e.data) { 108 + new_value = parse(e.data, field.len) 109 + } 110 + } else { 111 + new_value = parse('000' + e.currentTarget.innerText, field.len) 112 + } 113 113 114 - set_value(e.currentTarget, new_value) 115 - select(e.currentTarget) 116 - } 114 + set_value(e.currentTarget, new_value) 115 + select(e.currentTarget) 116 + } 117 117 118 - function focus(e: FocusEvent & SpanEvent) { 119 - select(e.currentTarget) 120 - } 118 + function focus(e: FocusEvent & SpanEvent) { 119 + select(e.currentTarget) 120 + } 121 121 </script> 122 122 123 123 {#if timePrecision} 124 - <div 125 - class="time-picker" 126 - role="none" 127 - on:mousedown={(e) => { 128 - if (e.target instanceof HTMLElement && e.target.tagName === 'SPAN') { 129 - e.target.focus() 130 - e.preventDefault() // prevent text dragging 131 - } 132 - }} 133 - > 134 - <span 135 - bind:this={fields[0]} 136 - role="spinbutton" 137 - aria-label="Hours" 138 - tabindex="0" 139 - contenteditable 140 - on:keydown={keydown} 141 - on:input={input} 142 - on:focus={focus}>{('00' + browseDate.getHours()).slice(-2)}</span 143 - >: 144 - <span 145 - bind:this={fields[1]} 146 - role="spinbutton" 147 - aria-label="Minutes" 148 - tabindex="0" 149 - contenteditable 150 - on:keydown={keydown} 151 - on:input={input} 152 - on:focus={focus}>{('00' + browseDate.getMinutes()).slice(-2)}</span 153 - > 154 - {#if timePrecision !== 'minute'} 155 - :<span 156 - bind:this={fields[2]} 157 - role="spinbutton" 158 - aria-label="Seconds" 159 - tabindex="0" 160 - contenteditable 161 - on:keydown={keydown} 162 - on:input={input} 163 - on:focus={focus}>{('00' + browseDate.getSeconds()).slice(-2)}</span 164 - > 165 - {#if timePrecision !== 'second'} 166 - .<span 167 - bind:this={fields[3]} 168 - role="spinbutton" 169 - aria-label="Milliseconds" 170 - tabindex="0" 171 - contenteditable 172 - on:keydown={keydown} 173 - on:input={input} 174 - on:focus={focus}>{('000' + browseDate.getMilliseconds()).slice(-3)}</span 175 - > 176 - {/if} 177 - {/if} 178 - </div> 124 + <div 125 + class="time-picker" 126 + role="none" 127 + on:mousedown={(e) => { 128 + if (e.target instanceof HTMLElement && e.target.tagName === 'SPAN') { 129 + e.target.focus() 130 + e.preventDefault() // prevent text dragging 131 + } 132 + }} 133 + > 134 + <span 135 + bind:this={fields[0]} 136 + role="spinbutton" 137 + aria-label="Hours" 138 + tabindex="0" 139 + contenteditable 140 + on:keydown={keydown} 141 + on:input={input} 142 + on:focus={focus}>{('00' + browseDate.getHours()).slice(-2)}</span 143 + >: 144 + <span 145 + bind:this={fields[1]} 146 + role="spinbutton" 147 + aria-label="Minutes" 148 + tabindex="0" 149 + contenteditable 150 + on:keydown={keydown} 151 + on:input={input} 152 + on:focus={focus}>{('00' + browseDate.getMinutes()).slice(-2)}</span 153 + > 154 + {#if timePrecision !== 'minute'} 155 + :<span 156 + bind:this={fields[2]} 157 + role="spinbutton" 158 + aria-label="Seconds" 159 + tabindex="0" 160 + contenteditable 161 + on:keydown={keydown} 162 + on:input={input} 163 + on:focus={focus}>{('00' + browseDate.getSeconds()).slice(-2)}</span 164 + > 165 + {#if timePrecision !== 'second'} 166 + .<span 167 + bind:this={fields[3]} 168 + role="spinbutton" 169 + aria-label="Milliseconds" 170 + tabindex="0" 171 + contenteditable 172 + on:keydown={keydown} 173 + on:input={input} 174 + on:focus={focus}>{('000' + browseDate.getMilliseconds()).slice(-3)}</span 175 + > 176 + {/if} 177 + {/if} 178 + </div> 179 179 {/if} 180 180 181 181 <style lang="sass"> 182 - .time-picker 183 - font-size: 1.1em 184 - display: flex 185 - align-items: center 186 - width: fit-content 187 - border: 1px solid rgba(108, 120, 147, 0.3) 188 - border-radius: 3px 189 - margin: auto 190 - font-variant-numeric: tabular-nums 191 - margin-top: 6px 192 - span 193 - user-select: all 194 - outline: none 195 - position: relative 196 - z-index: 1 197 - padding: 4px 0px 198 - &:first-child 199 - padding-left: 6px 200 - &:last-child 201 - padding-right: 6px 182 + .time-picker 183 + font-size: 1.1em 184 + display: flex 185 + align-items: center 186 + width: fit-content 187 + border: 1px solid rgba(108, 120, 147, 0.3) 188 + border-radius: 3px 189 + margin: auto 190 + font-variant-numeric: tabular-nums 191 + margin-top: 6px 192 + span 193 + user-select: all 194 + outline: none 195 + position: relative 196 + z-index: 1 197 + padding: 4px 0px 198 + &:first-child 199 + padding-left: 6px 200 + &:last-child 201 + padding-right: 6px 202 202 </style>
+55 -55
src/lib/date-utils.ts
··· 1 1 import type { FormatToken } from './parse.js' 2 2 3 3 export function isLeapYear(year: number): boolean { 4 - return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0 4 + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0 5 5 } 6 6 export function getMonthLength(year: number, month: number): number { 7 - const feb = isLeapYear(year) ? 29 : 28 8 - const monthLengths = [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 9 - return monthLengths[month] 7 + const feb = isLeapYear(year) ? 29 : 28 8 + const monthLengths = [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 9 + return monthLengths[month] 10 10 } 11 11 12 12 export function toText(date: Date | null, formatTokens: FormatToken[]): string { 13 - let text = '' 14 - if (date) { 15 - for (const token of formatTokens) { 16 - if (typeof token === 'string') { 17 - text += token 18 - } else { 19 - text += token.toString(date) 20 - } 21 - } 22 - } 23 - return text 13 + let text = '' 14 + if (date) { 15 + for (const token of formatTokens) { 16 + if (typeof token === 'string') { 17 + text += token 18 + } else { 19 + text += token.toString(date) 20 + } 21 + } 22 + } 23 + return text 24 24 } 25 25 26 26 export type CalendarDay = { 27 - year: number 28 - month: number 29 - number: number 27 + year: number 28 + month: number 29 + number: number 30 30 } 31 31 export function getMonthDays(year: number, month: number): CalendarDay[] { 32 - const monthLength = getMonthLength(year, month) 33 - const days: CalendarDay[] = [] 34 - for (let i = 0; i < monthLength; i++) { 35 - days.push({ 36 - year: year, 37 - month: month, 38 - number: i + 1, 39 - }) 40 - } 41 - return days 32 + const monthLength = getMonthLength(year, month) 33 + const days: CalendarDay[] = [] 34 + for (let i = 0; i < monthLength; i++) { 35 + days.push({ 36 + year: year, 37 + month: month, 38 + number: i + 1, 39 + }) 40 + } 41 + return days 42 42 } 43 43 export function getCalendarDays(value: Date, weekStartsOn: number): CalendarDay[] { 44 - const year = value.getFullYear() 45 - const month = value.getMonth() 46 - const firstWeekday = new Date(year, month, 1).getDay() 44 + const year = value.getFullYear() 45 + const month = value.getMonth() 46 + const firstWeekday = new Date(year, month, 1).getDay() 47 47 48 - let days: CalendarDay[] = [] 48 + let days: CalendarDay[] = [] 49 49 50 - // add last month 51 - const daysBefore = (firstWeekday - weekStartsOn + 7) % 7 52 - if (daysBefore > 0) { 53 - let lastMonth = month - 1 54 - let lastMonthYear = year 55 - if (lastMonth === -1) { 56 - lastMonth = 11 57 - lastMonthYear = year - 1 58 - } 59 - days = getMonthDays(lastMonthYear, lastMonth).slice(-daysBefore) 60 - } 50 + // add last month 51 + const daysBefore = (firstWeekday - weekStartsOn + 7) % 7 52 + if (daysBefore > 0) { 53 + let lastMonth = month - 1 54 + let lastMonthYear = year 55 + if (lastMonth === -1) { 56 + lastMonth = 11 57 + lastMonthYear = year - 1 58 + } 59 + days = getMonthDays(lastMonthYear, lastMonth).slice(-daysBefore) 60 + } 61 61 62 - // add current month 63 - days = days.concat(getMonthDays(year, month)) 62 + // add current month 63 + days = days.concat(getMonthDays(year, month)) 64 64 65 - // add next month 66 - let nextMonth = month + 1 67 - let nextMonthYear = year 68 - if (nextMonth === 12) { 69 - nextMonth = 0 70 - nextMonthYear = year + 1 71 - } 72 - const daysAfter = 42 - days.length 73 - days = days.concat(getMonthDays(nextMonthYear, nextMonth).slice(0, daysAfter)) 65 + // add next month 66 + let nextMonth = month + 1 67 + let nextMonthYear = year 68 + if (nextMonth === 12) { 69 + nextMonth = 0 70 + nextMonthYear = year + 1 71 + } 72 + const daysAfter = 42 - days.length 73 + days = days.concat(getMonthDays(nextMonthYear, nextMonth).slice(0, daysAfter)) 74 74 75 - return days 75 + return days 76 76 }
+52 -52
src/lib/locale.ts
··· 1 1 export type Locale = { 2 - weekdays?: string[] 3 - months?: string[] 4 - weekStartsOn?: number 2 + weekdays?: string[] 3 + months?: string[] 4 + weekStartsOn?: number 5 5 } 6 6 type InnerLocale = { 7 - weekdays: string[] 8 - months: string[] 9 - weekStartsOn: number 7 + weekdays: string[] 8 + months: string[] 9 + weekStartsOn: number 10 10 } 11 11 export function getLocaleDefaults(): InnerLocale { 12 - return { 13 - weekdays: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], 14 - months: [ 15 - 'January', 16 - 'February', 17 - 'March', 18 - 'April', 19 - 'May', 20 - 'June', 21 - 'July', 22 - 'August', 23 - 'September', 24 - 'October', 25 - 'November', 26 - 'December', 27 - ], 28 - weekStartsOn: 1, 29 - } 12 + return { 13 + weekdays: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], 14 + months: [ 15 + 'January', 16 + 'February', 17 + 'March', 18 + 'April', 19 + 'May', 20 + 'June', 21 + 'July', 22 + 'August', 23 + 'September', 24 + 'October', 25 + 'November', 26 + 'December', 27 + ], 28 + weekStartsOn: 1, 29 + } 30 30 } 31 31 export function getInnerLocale(locale: Locale = {}): InnerLocale { 32 - const innerLocale = getLocaleDefaults() 33 - if (typeof locale.weekStartsOn === 'number') { 34 - innerLocale.weekStartsOn = locale.weekStartsOn 35 - } 36 - if (locale.months) innerLocale.months = locale.months 37 - if (locale.weekdays) innerLocale.weekdays = locale.weekdays 38 - return innerLocale 32 + const innerLocale = getLocaleDefaults() 33 + if (typeof locale.weekStartsOn === 'number') { 34 + innerLocale.weekStartsOn = locale.weekStartsOn 35 + } 36 + if (locale.months) innerLocale.months = locale.months 37 + if (locale.weekdays) innerLocale.weekdays = locale.weekdays 38 + return innerLocale 39 39 } 40 40 41 41 type DateFnsLocale = { 42 - options?: { 43 - weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 44 - } 45 - localize?: { 46 - month: (n: number, options?: { width?: string }) => string 47 - day: (i: number, options?: { width?: string }) => string 48 - } 42 + options?: { 43 + weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 44 + } 45 + localize?: { 46 + month: (n: number, options?: { width?: string }) => string 47 + day: (i: number, options?: { width?: string }) => string 48 + } 49 49 } 50 50 /** Create a Locale from a date-fns locale */ 51 51 export function localeFromDateFnsLocale(dateFnsLocale: DateFnsLocale): InnerLocale { 52 - const locale = getLocaleDefaults() 53 - if (typeof dateFnsLocale?.options?.weekStartsOn === 'number') { 54 - locale.weekStartsOn = dateFnsLocale.options.weekStartsOn 55 - } 56 - if (dateFnsLocale.localize) { 57 - for (let i = 0; i < 7; i++) { 58 - // widths: narrow, short, abbreviated, wide, any 59 - locale.weekdays[i] = dateFnsLocale.localize.day(i, { width: 'short' }) 60 - } 52 + const locale = getLocaleDefaults() 53 + if (typeof dateFnsLocale?.options?.weekStartsOn === 'number') { 54 + locale.weekStartsOn = dateFnsLocale.options.weekStartsOn 55 + } 56 + if (dateFnsLocale.localize) { 57 + for (let i = 0; i < 7; i++) { 58 + // widths: narrow, short, abbreviated, wide, any 59 + locale.weekdays[i] = dateFnsLocale.localize.day(i, { width: 'short' }) 60 + } 61 61 62 - for (let i = 0; i < 12; i++) { 63 - locale.months[i] = dateFnsLocale.localize.month(i, { width: 'wide' }) 64 - } 65 - } 66 - return locale 62 + for (let i = 0; i < 12; i++) { 63 + locale.months[i] = dateFnsLocale.localize.month(i, { width: 'wide' }) 64 + } 65 + } 66 + return locale 67 67 }
+131 -131
src/lib/parse.ts
··· 1 1 import { getMonthLength } from './date-utils.js' 2 2 3 3 type RuleToken = { 4 - id: string 5 - toString: (d: Date) => string 4 + id: string 5 + toString: (d: Date) => string 6 6 } 7 7 8 8 export type FormatToken = string | RuleToken 9 9 10 10 type ParseResult = { 11 - date: Date | null 12 - missingPunctuation: string 11 + date: Date | null 12 + missingPunctuation: string 13 13 } 14 14 /** Parse a string according to the supplied format tokens. Returns a date if successful, and the missing punctuation if there is any that should be after the string */ 15 15 export function parse(str: string, tokens: FormatToken[], baseDate: Date | null): ParseResult { 16 - let missingPunctuation = '' 17 - let valid = true 16 + let missingPunctuation = '' 17 + let valid = true 18 18 19 - baseDate = baseDate || new Date(2020, 0, 1, 0, 0, 0, 0) 20 - let year = baseDate.getFullYear() 21 - let month = baseDate.getMonth() 22 - let day = baseDate.getDate() 23 - let hours = baseDate.getHours() 24 - let minutes = baseDate.getMinutes() 25 - let seconds = baseDate.getSeconds() 26 - const ms = baseDate.getMilliseconds() 19 + baseDate = baseDate || new Date(2020, 0, 1, 0, 0, 0, 0) 20 + let year = baseDate.getFullYear() 21 + let month = baseDate.getMonth() 22 + let day = baseDate.getDate() 23 + let hours = baseDate.getHours() 24 + let minutes = baseDate.getMinutes() 25 + let seconds = baseDate.getSeconds() 26 + const ms = baseDate.getMilliseconds() 27 27 28 - function parseString(token: string) { 29 - for (let i = 0; i < token.length; i++) { 30 - if (str.startsWith(token[i])) { 31 - str = str.slice(1) 32 - } else { 33 - valid = false 34 - if (str.length === 0) missingPunctuation = token.slice(i) 35 - return 36 - } 37 - } 38 - } 28 + function parseString(token: string) { 29 + for (let i = 0; i < token.length; i++) { 30 + if (str.startsWith(token[i])) { 31 + str = str.slice(1) 32 + } else { 33 + valid = false 34 + if (str.length === 0) missingPunctuation = token.slice(i) 35 + return 36 + } 37 + } 38 + } 39 39 40 - function parseUint(pattern: RegExp, min: number, max: number) { 41 - const matches = str.match(pattern) 42 - if (matches?.[0]) { 43 - str = str.slice(matches[0].length) 44 - const n = parseInt(matches[0]) 45 - if (n > max || n < min) { 46 - valid = false 47 - return null 48 - } else { 49 - return n 50 - } 51 - } else { 52 - valid = false 53 - return null 54 - } 55 - } 40 + function parseUint(pattern: RegExp, min: number, max: number) { 41 + const matches = str.match(pattern) 42 + if (matches?.[0]) { 43 + str = str.slice(matches[0].length) 44 + const n = parseInt(matches[0]) 45 + if (n > max || n < min) { 46 + valid = false 47 + return null 48 + } else { 49 + return n 50 + } 51 + } else { 52 + valid = false 53 + return null 54 + } 55 + } 56 56 57 - function parseToken(token: FormatToken) { 58 - if (typeof token === 'string') { 59 - parseString(token) 60 - } else if (token.id === 'yy') { 61 - const value = parseUint(/^[0-9]{2}/, 0, 99) 62 - if (value !== null) year = 2000 + value 63 - } else if (token.id === 'yyyy') { 64 - const value = parseUint(/^[0-9]{4}/, 0, 9999) 65 - if (value !== null) year = value 66 - } else if (token.id === 'MM') { 67 - const value = parseUint(/^[0-9]{2}/, 1, 12) 68 - if (value !== null) month = value - 1 69 - } else if (token.id === 'dd') { 70 - const value = parseUint(/^[0-9]{2}/, 1, 31) 71 - if (value !== null) day = value 72 - } else if (token.id === 'HH') { 73 - const value = parseUint(/^[0-9]{2}/, 0, 23) 74 - if (value !== null) hours = value 75 - } else if (token.id === 'mm') { 76 - const value = parseUint(/^[0-9]{2}/, 0, 59) 77 - if (value !== null) minutes = value 78 - } else if (token.id === 'ss') { 79 - const value = parseUint(/^[0-9]{2}/, 0, 59) 80 - if (value !== null) seconds = value 81 - } 82 - } 57 + function parseToken(token: FormatToken) { 58 + if (typeof token === 'string') { 59 + parseString(token) 60 + } else if (token.id === 'yy') { 61 + const value = parseUint(/^[0-9]{2}/, 0, 99) 62 + if (value !== null) year = 2000 + value 63 + } else if (token.id === 'yyyy') { 64 + const value = parseUint(/^[0-9]{4}/, 0, 9999) 65 + if (value !== null) year = value 66 + } else if (token.id === 'MM') { 67 + const value = parseUint(/^[0-9]{2}/, 1, 12) 68 + if (value !== null) month = value - 1 69 + } else if (token.id === 'dd') { 70 + const value = parseUint(/^[0-9]{2}/, 1, 31) 71 + if (value !== null) day = value 72 + } else if (token.id === 'HH') { 73 + const value = parseUint(/^[0-9]{2}/, 0, 23) 74 + if (value !== null) hours = value 75 + } else if (token.id === 'mm') { 76 + const value = parseUint(/^[0-9]{2}/, 0, 59) 77 + if (value !== null) minutes = value 78 + } else if (token.id === 'ss') { 79 + const value = parseUint(/^[0-9]{2}/, 0, 59) 80 + if (value !== null) seconds = value 81 + } 82 + } 83 83 84 - for (const token of tokens) { 85 - parseToken(token) 86 - if (!valid) break 87 - } 84 + for (const token of tokens) { 85 + parseToken(token) 86 + if (!valid) break 87 + } 88 88 89 - const monthLength = getMonthLength(year, month) 90 - if (day > monthLength) { 91 - valid = false 92 - } 89 + const monthLength = getMonthLength(year, month) 90 + if (day > monthLength) { 91 + valid = false 92 + } 93 93 94 - return { 95 - date: valid ? new Date(year, month, day, hours, minutes, seconds, ms) : null, 96 - missingPunctuation: missingPunctuation, 97 - } 94 + return { 95 + date: valid ? new Date(year, month, day, hours, minutes, seconds, ms) : null, 96 + missingPunctuation: missingPunctuation, 97 + } 98 98 } 99 99 100 100 function twoDigit(value: number) { 101 - return ('0' + value.toString()).slice(-2) 101 + return ('0' + value.toString()).slice(-2) 102 102 } 103 103 104 104 const ruleTokens: RuleToken[] = [ 105 - { 106 - id: 'yyyy', 107 - toString: (d: Date) => d.getFullYear().toString(), 108 - }, 109 - { 110 - id: 'yy', 111 - toString: (d: Date) => d.getFullYear().toString().slice(-2), 112 - }, 113 - { 114 - id: 'MM', 115 - toString: (d: Date) => twoDigit(d.getMonth() + 1), 116 - }, 117 - { 118 - id: 'dd', 119 - toString: (d: Date) => twoDigit(d.getDate()), 120 - }, 121 - { 122 - id: 'HH', 123 - toString: (d: Date) => twoDigit(d.getHours()), 124 - }, 125 - { 126 - id: 'mm', 127 - toString: (d: Date) => twoDigit(d.getMinutes()), 128 - }, 129 - { 130 - id: 'ss', 131 - toString: (d: Date) => twoDigit(d.getSeconds()), 132 - }, 105 + { 106 + id: 'yyyy', 107 + toString: (d: Date) => d.getFullYear().toString(), 108 + }, 109 + { 110 + id: 'yy', 111 + toString: (d: Date) => d.getFullYear().toString().slice(-2), 112 + }, 113 + { 114 + id: 'MM', 115 + toString: (d: Date) => twoDigit(d.getMonth() + 1), 116 + }, 117 + { 118 + id: 'dd', 119 + toString: (d: Date) => twoDigit(d.getDate()), 120 + }, 121 + { 122 + id: 'HH', 123 + toString: (d: Date) => twoDigit(d.getHours()), 124 + }, 125 + { 126 + id: 'mm', 127 + toString: (d: Date) => twoDigit(d.getMinutes()), 128 + }, 129 + { 130 + id: 'ss', 131 + toString: (d: Date) => twoDigit(d.getSeconds()), 132 + }, 133 133 ] 134 134 function parseRule(s: string) { 135 - for (const token of ruleTokens) { 136 - if (s.startsWith(token.id)) { 137 - return token 138 - } 139 - } 135 + for (const token of ruleTokens) { 136 + if (s.startsWith(token.id)) { 137 + return token 138 + } 139 + } 140 140 } 141 141 142 142 export function createFormat(s: string): FormatToken[] { 143 - const tokens = [] 144 - while (s.length > 0) { 145 - const token = parseRule(s) 146 - if (token) { 147 - // parsed a token like "yyyy" 148 - tokens.push(token) 149 - s = s.slice(token.id.length) 150 - } else if (typeof tokens[tokens.length - 1] === 'string') { 151 - // last token is a string token, so append to it 152 - tokens[tokens.length - 1] += s[0] 153 - s = s.slice(1) 154 - } else { 155 - // add string token 156 - tokens.push(s[0]) 157 - s = s.slice(1) 158 - } 159 - } 160 - return tokens 143 + const tokens = [] 144 + while (s.length > 0) { 145 + const token = parseRule(s) 146 + if (token) { 147 + // parsed a token like "yyyy" 148 + tokens.push(token) 149 + s = s.slice(token.id.length) 150 + } else if (typeof tokens[tokens.length - 1] === 'string') { 151 + // last token is a string token, so append to it 152 + tokens[tokens.length - 1] += s[0] 153 + s = s.slice(1) 154 + } else { 155 + // add string token 156 + tokens.push(s[0]) 157 + s = s.slice(1) 158 + } 159 + } 160 + return tokens 161 161 }
+142 -142
src/lib/utils.test.ts
··· 5 5 import { getInnerLocale, localeFromDateFnsLocale } from './locale.js' 6 6 7 7 describe('getMonthDays', () => { 8 - it('gets the correct amount of days', () => { 9 - const feb2021 = getMonthDays(2021, 1) 10 - expect(feb2021.length).toEqual(28) 11 - }) 12 - it('works with leap years', () => { 13 - const feb2020 = getMonthDays(2020, 1) 14 - expect(feb2020.length).toEqual(29) 15 - }) 8 + it('gets the correct amount of days', () => { 9 + const feb2021 = getMonthDays(2021, 1) 10 + expect(feb2021.length).toEqual(28) 11 + }) 12 + it('works with leap years', () => { 13 + const feb2020 = getMonthDays(2020, 1) 14 + expect(feb2020.length).toEqual(29) 15 + }) 16 16 }) 17 17 18 18 describe('getCalendarDays', () => { 19 - it('works for all months in 1995-2025', () => { 20 - const weekdayStartsOn = 1 // monday 21 - for (let year = 1995; year < 2025; year++) { 22 - for (let month = 0; month < 11; month++) { 23 - testMonth(year, month) 24 - } 25 - } 26 - function testMonth(year: number, month: number) { 27 - const calDays = getCalendarDays(new Date(year, month, 1), weekdayStartsOn) 28 - expect(calDays.length).toEqual(42) 29 - for (let i = 0; i < calDays.length; i++) { 30 - const calDay = calDays[i] 31 - expect({ 32 - year: calDay.year, 33 - month: calDay.month, 34 - number: calDay.number, 35 - weekday: new Date(calDay.year, calDay.month, calDay.number).getDay(), 36 - }).toEqual({ 37 - year: calDay.year, 38 - month: calDay.month, 39 - number: calDay.number, 40 - weekday: ((i % 7) + weekdayStartsOn) % 7, 41 - }) 42 - } 43 - } 44 - }) 19 + it('works for all months in 1995-2025', () => { 20 + const weekdayStartsOn = 1 // monday 21 + for (let year = 1995; year < 2025; year++) { 22 + for (let month = 0; month < 11; month++) { 23 + testMonth(year, month) 24 + } 25 + } 26 + function testMonth(year: number, month: number) { 27 + const calDays = getCalendarDays(new Date(year, month, 1), weekdayStartsOn) 28 + expect(calDays.length).toEqual(42) 29 + for (let i = 0; i < calDays.length; i++) { 30 + const calDay = calDays[i] 31 + expect({ 32 + year: calDay.year, 33 + month: calDay.month, 34 + number: calDay.number, 35 + weekday: new Date(calDay.year, calDay.month, calDay.number).getDay(), 36 + }).toEqual({ 37 + year: calDay.year, 38 + month: calDay.month, 39 + number: calDay.number, 40 + weekday: ((i % 7) + weekdayStartsOn) % 7, 41 + }) 42 + } 43 + } 44 + }) 45 45 46 - it('gets the correct correct days from the prev/next month', () => { 47 - const jan2020 = new Date(2020, 0, 1, 0, 0, 0, 0) 48 - const jan2020CalDays = getCalendarDays(jan2020, 1) 49 - expect(jan2020CalDays).toEqual([ 50 - { year: 2019, month: 11, number: 30 }, 51 - { year: 2019, month: 11, number: 31 }, 52 - ...getMonthDays(2020, 0), 53 - { year: 2020, month: 1, number: 1 }, 54 - { year: 2020, month: 1, number: 2 }, 55 - { year: 2020, month: 1, number: 3 }, 56 - { year: 2020, month: 1, number: 4 }, 57 - { year: 2020, month: 1, number: 5 }, 58 - { year: 2020, month: 1, number: 6 }, 59 - { year: 2020, month: 1, number: 7 }, 60 - { year: 2020, month: 1, number: 8 }, 61 - { year: 2020, month: 1, number: 9 }, 62 - ]) 46 + it('gets the correct correct days from the prev/next month', () => { 47 + const jan2020 = new Date(2020, 0, 1, 0, 0, 0, 0) 48 + const jan2020CalDays = getCalendarDays(jan2020, 1) 49 + expect(jan2020CalDays).toEqual([ 50 + { year: 2019, month: 11, number: 30 }, 51 + { year: 2019, month: 11, number: 31 }, 52 + ...getMonthDays(2020, 0), 53 + { year: 2020, month: 1, number: 1 }, 54 + { year: 2020, month: 1, number: 2 }, 55 + { year: 2020, month: 1, number: 3 }, 56 + { year: 2020, month: 1, number: 4 }, 57 + { year: 2020, month: 1, number: 5 }, 58 + { year: 2020, month: 1, number: 6 }, 59 + { year: 2020, month: 1, number: 7 }, 60 + { year: 2020, month: 1, number: 8 }, 61 + { year: 2020, month: 1, number: 9 }, 62 + ]) 63 63 64 - const dec2019 = new Date(2019, 11, 1, 0, 0, 0, 0) 65 - const dec2019CalDays = getCalendarDays(dec2019, 1) 66 - expect(dec2019CalDays).toEqual([ 67 - { year: 2019, month: 10, number: 25 }, 68 - { year: 2019, month: 10, number: 26 }, 69 - { year: 2019, month: 10, number: 27 }, 70 - { year: 2019, month: 10, number: 28 }, 71 - { year: 2019, month: 10, number: 29 }, 72 - { year: 2019, month: 10, number: 30 }, 73 - ...getMonthDays(2019, 11), 74 - { year: 2020, month: 0, number: 1 }, 75 - { year: 2020, month: 0, number: 2 }, 76 - { year: 2020, month: 0, number: 3 }, 77 - { year: 2020, month: 0, number: 4 }, 78 - { year: 2020, month: 0, number: 5 }, 79 - ]) 80 - }) 64 + const dec2019 = new Date(2019, 11, 1, 0, 0, 0, 0) 65 + const dec2019CalDays = getCalendarDays(dec2019, 1) 66 + expect(dec2019CalDays).toEqual([ 67 + { year: 2019, month: 10, number: 25 }, 68 + { year: 2019, month: 10, number: 26 }, 69 + { year: 2019, month: 10, number: 27 }, 70 + { year: 2019, month: 10, number: 28 }, 71 + { year: 2019, month: 10, number: 29 }, 72 + { year: 2019, month: 10, number: 30 }, 73 + ...getMonthDays(2019, 11), 74 + { year: 2020, month: 0, number: 1 }, 75 + { year: 2020, month: 0, number: 2 }, 76 + { year: 2020, month: 0, number: 3 }, 77 + { year: 2020, month: 0, number: 4 }, 78 + { year: 2020, month: 0, number: 5 }, 79 + ]) 80 + }) 81 81 }) 82 82 83 83 test('toText', () => { 84 - const format = createFormat('yyyy-MM-dd HH:mm:ss') 85 - const text = toText(new Date(2020, 0, 1, 0, 0, 0, 0), format) 86 - expect(text).toEqual('2020-01-01 00:00:00') 84 + const format = createFormat('yyyy-MM-dd HH:mm:ss') 85 + const text = toText(new Date(2020, 0, 1, 0, 0, 0, 0), format) 86 + expect(text).toEqual('2020-01-01 00:00:00') 87 87 }) 88 88 89 89 describe('Formatting', () => { 90 - const baseDate = new Date(1234, 0, 1, 0, 0, 0, 999) 91 - const format = createFormat('yyyy--MM-dd HH:mm:ss') 90 + const baseDate = new Date(1234, 0, 1, 0, 0, 0, 999) 91 + const format = createFormat('yyyy--MM-dd HH:mm:ss') 92 92 93 - it('works with a basic date', () => { 94 - const result = parse('1234--12-31 23:59:59', format, baseDate) 95 - expect(result).toEqual({ 96 - date: new Date(1234, 11, 31, 23, 59, 59, 999), 97 - missingPunctuation: '', 98 - }) 99 - }) 93 + it('works with a basic date', () => { 94 + const result = parse('1234--12-31 23:59:59', format, baseDate) 95 + expect(result).toEqual({ 96 + date: new Date(1234, 11, 31, 23, 59, 59, 999), 97 + missingPunctuation: '', 98 + }) 99 + }) 100 100 101 - it('handles missing punctuation', () => { 102 - const result = parse('2345', format, baseDate) 103 - expect(result).toEqual({ 104 - date: null, 105 - missingPunctuation: '--', 106 - }) 107 - }) 101 + it('handles missing punctuation', () => { 102 + const result = parse('2345', format, baseDate) 103 + expect(result).toEqual({ 104 + date: null, 105 + missingPunctuation: '--', 106 + }) 107 + }) 108 108 109 - it('fails with too high minute', () => { 110 - const result = parse('1234--12-31 23:99:59', format, baseDate) 111 - expect(result).toEqual({ 112 - date: null, 113 - missingPunctuation: '', 114 - }) 115 - }) 109 + it('fails with too high minute', () => { 110 + const result = parse('1234--12-31 23:99:59', format, baseDate) 111 + expect(result).toEqual({ 112 + date: null, 113 + missingPunctuation: '', 114 + }) 115 + }) 116 116 117 - it('fails with too high date-of-month', () => { 118 - // separate test because some months have less than 31 days 119 - const dayOfMonthOverflow = parse('1234--02-31 23:59:59', format, baseDate) 120 - expect(dayOfMonthOverflow).toEqual({ 121 - date: null, 122 - missingPunctuation: '', 123 - }) 124 - }) 117 + it('fails with too high date-of-month', () => { 118 + // separate test because some months have less than 31 days 119 + const dayOfMonthOverflow = parse('1234--02-31 23:59:59', format, baseDate) 120 + expect(dayOfMonthOverflow).toEqual({ 121 + date: null, 122 + missingPunctuation: '', 123 + }) 124 + }) 125 125 126 - it('fails when the second has a non-numeric character', () => { 127 - const noNumber = parse('1234--02-31 23:59:5d', format, baseDate) 128 - expect(noNumber).toEqual({ 129 - date: null, 130 - missingPunctuation: '', 131 - }) 132 - }) 126 + it('fails when the second has a non-numeric character', () => { 127 + const noNumber = parse('1234--02-31 23:59:5d', format, baseDate) 128 + expect(noNumber).toEqual({ 129 + date: null, 130 + missingPunctuation: '', 131 + }) 132 + }) 133 133 }) 134 134 135 135 describe('locale', () => { 136 - const nbLocale = { 137 - weekdays: ['sø', 'ma', 'ti', 'on', 'to', 'fr', 'lø'], 138 - months: [ 139 - 'januar', 140 - 'februar', 141 - 'mars', 142 - 'april', 143 - 'mai', 144 - 'juni', 145 - 'juli', 146 - 'august', 147 - 'september', 148 - 'oktober', 149 - 'november', 150 - 'desember', 151 - ], 152 - weekStartsOn: 1, 153 - } 136 + const nbLocale = { 137 + weekdays: ['sø', 'ma', 'ti', 'on', 'to', 'fr', 'lø'], 138 + months: [ 139 + 'januar', 140 + 'februar', 141 + 'mars', 142 + 'april', 143 + 'mai', 144 + 'juni', 145 + 'juli', 146 + 'august', 147 + 'september', 148 + 'oktober', 149 + 'november', 150 + 'desember', 151 + ], 152 + weekStartsOn: 1, 153 + } 154 154 155 - test('getInnerLocale', () => { 156 - const locale = getInnerLocale({ 157 - months: nbLocale.months, 158 - weekStartsOn: 4, 159 - }) 155 + test('getInnerLocale', () => { 156 + const locale = getInnerLocale({ 157 + months: nbLocale.months, 158 + weekStartsOn: 4, 159 + }) 160 160 161 - expect(locale).toEqual({ 162 - weekdays: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], 163 - months: nbLocale.months, 164 - weekStartsOn: 4, 165 - }) 166 - }) 161 + expect(locale).toEqual({ 162 + weekdays: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], 163 + months: nbLocale.months, 164 + weekStartsOn: 4, 165 + }) 166 + }) 167 167 168 - test('localeFromDateFnsLocale', () => { 169 - const locale = localeFromDateFnsLocale(nb) 170 - expect(locale).toEqual(nbLocale) 171 - }) 168 + test('localeFromDateFnsLocale', () => { 169 + const locale = localeFromDateFnsLocale(nb) 170 + expect(locale).toEqual(nbLocale) 171 + }) 172 172 })
+201 -201
src/routes/+layout.svelte
··· 1 1 <script lang="ts"> 2 - import { onMount } from 'svelte' 2 + import { onMount } from 'svelte' 3 3 4 - let systemTheme: string | null = null 5 - onMount(() => { 6 - const prefersDarkMQ = matchMedia('(prefers-color-scheme: dark)') 7 - systemTheme = prefersDarkMQ.matches ? 'dark' : 'light' 8 - prefersDarkMQ.onchange = (e) => { 9 - // Keep the systemTheme variable up to date 10 - systemTheme = e.matches ? 'dark' : 'light' 11 - // Update the theme, as long as there's no theme override 12 - if (localStorage.getItem('theme') === null) { 13 - setTheme(systemTheme) 14 - } 15 - } 16 - }) 4 + let systemTheme: string | null = null 5 + onMount(() => { 6 + const prefersDarkMQ = matchMedia('(prefers-color-scheme: dark)') 7 + systemTheme = prefersDarkMQ.matches ? 'dark' : 'light' 8 + prefersDarkMQ.onchange = (e) => { 9 + // Keep the systemTheme variable up to date 10 + systemTheme = e.matches ? 'dark' : 'light' 11 + // Update the theme, as long as there's no theme override 12 + if (localStorage.getItem('theme') === null) { 13 + setTheme(systemTheme) 14 + } 15 + } 16 + }) 17 17 18 - let theme = 'dark' 19 - if (typeof document === 'object') { 20 - theme = document.documentElement.getAttribute('data-theme') || 'dark' 21 - } 22 - function setTheme(newTheme: string) { 23 - document.documentElement.setAttribute('data-theme', newTheme) 24 - theme = newTheme 25 - if (newTheme === systemTheme) { 26 - // Remove override if the user sets the theme to match 27 - localStorage.removeItem('theme') 28 - } else { 29 - localStorage.setItem('theme', newTheme) 30 - } 31 - } 32 - function toggleTheme() { 33 - if (theme === 'dark') { 34 - setTheme('light') 35 - } else { 36 - setTheme('dark') 37 - } 38 - } 18 + let theme = 'dark' 19 + if (typeof document === 'object') { 20 + theme = document.documentElement.getAttribute('data-theme') || 'dark' 21 + } 22 + function setTheme(newTheme: string) { 23 + document.documentElement.setAttribute('data-theme', newTheme) 24 + theme = newTheme 25 + if (newTheme === systemTheme) { 26 + // Remove override if the user sets the theme to match 27 + localStorage.removeItem('theme') 28 + } else { 29 + localStorage.setItem('theme', newTheme) 30 + } 31 + } 32 + function toggleTheme() { 33 + if (theme === 'dark') { 34 + setTheme('light') 35 + } else { 36 + setTheme('dark') 37 + } 38 + } 39 39 </script> 40 40 41 41 <div class="layout"> 42 - <header> 43 - <div class="left"> 44 - <a class="header-title" href="/">Date Picker Svelte</a> 45 - <div class="links"> 46 - <a class="nav-link" href="/demo">Demo</a> 47 - <a class="nav-link" href="/docs">Docs</a> 48 - <a 49 - class="nav-link" 50 - href="https://svelte.dev/repl/044911429c4b4e659362518d9a5deaae?version=3">REPL</a 51 - > 52 - </div> 53 - </div> 54 - <div class="icons"> 55 - <a class="icon github" href="https://github.com/probablykasper/date-picker-svelte"> 56 - <svg height="24" viewBox="-2 -2 28 28" width="24" xmlns="http://www.w3.org/2000/svg" 57 - ><path 58 - d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22" 59 - fill="none" 60 - stroke="#000" 61 - stroke-linecap="round" 62 - stroke-linejoin="round" 63 - stroke-width="2" 64 - /></svg 65 - > 66 - </a> 67 - <button type="button" class="icon theme-toggle" on:click={toggleTheme}> 68 - <svg 69 - xmlns="http://www.w3.org/2000/svg" 70 - enable-background="new 0 0 24 24" 71 - viewBox="0 0 24 24" 72 - height="24px" 73 - width="24px" 74 - ><rect fill="none" height="24" width="24" /><path 75 - d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z" 76 - /></svg 77 - > 78 - </button> 79 - </div> 80 - </header> 81 - <div class="page"> 82 - <slot /> 83 - </div> 42 + <header> 43 + <div class="left"> 44 + <a class="header-title" href="/">Date Picker Svelte</a> 45 + <div class="links"> 46 + <a class="nav-link" href="/demo">Demo</a> 47 + <a class="nav-link" href="/docs">Docs</a> 48 + <a 49 + class="nav-link" 50 + href="https://svelte.dev/repl/044911429c4b4e659362518d9a5deaae?version=3">REPL</a 51 + > 52 + </div> 53 + </div> 54 + <div class="icons"> 55 + <a class="icon github" href="https://github.com/probablykasper/date-picker-svelte"> 56 + <svg height="24" viewBox="-2 -2 28 28" width="24" xmlns="http://www.w3.org/2000/svg" 57 + ><path 58 + d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22" 59 + fill="none" 60 + stroke="#000" 61 + stroke-linecap="round" 62 + stroke-linejoin="round" 63 + stroke-width="2" 64 + /></svg 65 + > 66 + </a> 67 + <button type="button" class="icon theme-toggle" on:click={toggleTheme}> 68 + <svg 69 + xmlns="http://www.w3.org/2000/svg" 70 + enable-background="new 0 0 24 24" 71 + viewBox="0 0 24 24" 72 + height="24px" 73 + width="24px" 74 + ><rect fill="none" height="24" width="24" /><path 75 + d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z" 76 + /></svg 77 + > 78 + </button> 79 + </div> 80 + </header> 81 + <div class="page"> 82 + <slot /> 83 + </div> 84 84 </div> 85 85 86 86 <style lang="sass"> 87 - :global(:root) 88 - --primary: #1a79ff 89 - --input-highlight-border: rgb(2, 105, 247) 90 - --input-highlight-shadow: rgba(2, 105, 247, 0.5) 91 - --input-width: 150px 92 - --date-input-width: var(--input-width) 93 - color: var(--foreground) 94 - transition: background 80ms cubic-bezier(0.4, 0.0, 0.2, 1) 95 - :global([data-theme='dark']) 96 - --foreground: #f7f7f7 97 - --background: #0d0e12 98 - --card-background: var(--background) 99 - --border: #1f2228 100 - --input-background: #1b1e27 101 - --date-picker-background: #1b1e27 102 - --date-picker-foreground: var(--foreground) 103 - --date-picker-highlight-border: var(--input-highlight-border) 104 - --date-picker-highlight-shadow: var(--input-highlight-shadow) 105 - color-scheme: dark 106 - background: var(--background) 107 - :global([data-theme='light']) 108 - --foreground: #0d0e12 109 - --background: #f6f9fe 110 - --card-background: #ffffff 111 - --border: #c6cddd 112 - --input-background: #ffffff 113 - color-scheme: light 114 - background: var(--background) 115 - :global(html) 116 - min-height: 100% 117 - :global(body) 118 - font-family: Inter, sans-serif 119 - margin: 0px 120 - :global(a) 121 - color: #3370ff 122 - text-decoration: none 123 - .layout 124 - transition: all 80ms cubic-bezier(0.4, 0.0, 0.2, 1) 125 - min-height: 100vh 126 - header 127 - display: flex 128 - align-items: center 129 - height: 80px 130 - padding: 5px 30px 131 - margin-bottom: 25px 132 - background-color: hsla(234, 20%, 70%, 0.07) 133 - border-bottom: 1px solid hsla(234, 10%, 50%, 0.1) 134 - @media screen and (min-width: 560px) 135 - height: 60px 136 - .left 137 - display: flex 138 - flex-direction: column 139 - @media screen and (min-width: 560px) 140 - flex-direction: row 141 - .links 142 - display: flex 143 - align-items: center 144 - .icons 145 - display: flex 146 - margin-left: auto 147 - align-items: center 148 - .page 149 - max-width: 800px 150 - margin: auto 151 - padding: 0px 15px 152 - @media (min-width: 400px) 153 - padding: 0px 30px 154 - padding-bottom: 100px 155 - .header-title 156 - color: var(--primary) 157 - font-weight: 500 158 - font-size: 1.5em 159 - margin-right: 20px 160 - padding: 2px 0px 161 - :global(h1) 162 - font-size: 2em 163 - :global(h1, h2) 164 - margin-block-start: 0.9em 165 - margin-block-end: 0.9em 166 - :global(::selection) 167 - background: var(--primary) 168 - color: #ffffff 169 - a 170 - color: inherit 171 - user-select: none 172 - a, button.theme-toggle 173 - -webkit-tap-highlight-color: transparent 174 - -moz-tap-highlight-color: rgba(0, 0, 0, 0) 175 - &:hover 176 - opacity: 0.7 177 - a.nav-link 178 - padding: 5px 2px 179 - margin-right: 16px 180 - transition: all 80ms cubic-bezier(0.4, 0.0, 0.2, 1) 181 - .icon 182 - display: block 183 - border: none 184 - background-color: transparent 185 - padding: 5px 2px 186 - margin: 0px 5px 187 - cursor: pointer 188 - svg 189 - display: block 190 - transition: all 80ms cubic-bezier(0.4, 0.0, 0.2, 1) 191 - &.theme-toggle svg 192 - fill: var(--foreground) 193 - &.github svg > path 194 - transition: all 80ms cubic-bezier(0.4, 0.0, 0.2, 1) 195 - stroke: var(--foreground) 196 - :global(table) 197 - border-collapse: collapse 198 - :global(td), :global(th) 199 - border: 1px solid var(--border) 200 - padding: 6px 9px 201 - :global(code) 202 - background-color: hsla(231, 8%, 70%, 0.2) 203 - border-radius: 6px 204 - padding: .2em .3em 205 - font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace 206 - font-size: 95% 207 - :global(code, p) 208 - line-height: 1.5 209 - :global(li) 210 - margin-top: .25em 87 + :global(:root) 88 + --primary: #1a79ff 89 + --input-highlight-border: rgb(2, 105, 247) 90 + --input-highlight-shadow: rgba(2, 105, 247, 0.5) 91 + --input-width: 150px 92 + --date-input-width: var(--input-width) 93 + color: var(--foreground) 94 + transition: background 80ms cubic-bezier(0.4, 0.0, 0.2, 1) 95 + :global([data-theme='dark']) 96 + --foreground: #f7f7f7 97 + --background: #0d0e12 98 + --card-background: var(--background) 99 + --border: #1f2228 100 + --input-background: #1b1e27 101 + --date-picker-background: #1b1e27 102 + --date-picker-foreground: var(--foreground) 103 + --date-picker-highlight-border: var(--input-highlight-border) 104 + --date-picker-highlight-shadow: var(--input-highlight-shadow) 105 + color-scheme: dark 106 + background: var(--background) 107 + :global([data-theme='light']) 108 + --foreground: #0d0e12 109 + --background: #f6f9fe 110 + --card-background: #ffffff 111 + --border: #c6cddd 112 + --input-background: #ffffff 113 + color-scheme: light 114 + background: var(--background) 115 + :global(html) 116 + min-height: 100% 117 + :global(body) 118 + font-family: Inter, sans-serif 119 + margin: 0px 120 + :global(a) 121 + color: #3370ff 122 + text-decoration: none 123 + .layout 124 + transition: all 80ms cubic-bezier(0.4, 0.0, 0.2, 1) 125 + min-height: 100vh 126 + header 127 + display: flex 128 + align-items: center 129 + height: 80px 130 + padding: 5px 30px 131 + margin-bottom: 25px 132 + background-color: hsla(234, 20%, 70%, 0.07) 133 + border-bottom: 1px solid hsla(234, 10%, 50%, 0.1) 134 + @media screen and (min-width: 560px) 135 + height: 60px 136 + .left 137 + display: flex 138 + flex-direction: column 139 + @media screen and (min-width: 560px) 140 + flex-direction: row 141 + .links 142 + display: flex 143 + align-items: center 144 + .icons 145 + display: flex 146 + margin-left: auto 147 + align-items: center 148 + .page 149 + max-width: 800px 150 + margin: auto 151 + padding: 0px 15px 152 + @media (min-width: 400px) 153 + padding: 0px 30px 154 + padding-bottom: 100px 155 + .header-title 156 + color: var(--primary) 157 + font-weight: 500 158 + font-size: 1.5em 159 + margin-right: 20px 160 + padding: 2px 0px 161 + :global(h1) 162 + font-size: 2em 163 + :global(h1, h2) 164 + margin-block-start: 0.9em 165 + margin-block-end: 0.9em 166 + :global(::selection) 167 + background: var(--primary) 168 + color: #ffffff 169 + a 170 + color: inherit 171 + user-select: none 172 + a, button.theme-toggle 173 + -webkit-tap-highlight-color: transparent 174 + -moz-tap-highlight-color: rgba(0, 0, 0, 0) 175 + &:hover 176 + opacity: 0.7 177 + a.nav-link 178 + padding: 5px 2px 179 + margin-right: 16px 180 + transition: all 80ms cubic-bezier(0.4, 0.0, 0.2, 1) 181 + .icon 182 + display: block 183 + border: none 184 + background-color: transparent 185 + padding: 5px 2px 186 + margin: 0px 5px 187 + cursor: pointer 188 + svg 189 + display: block 190 + transition: all 80ms cubic-bezier(0.4, 0.0, 0.2, 1) 191 + &.theme-toggle svg 192 + fill: var(--foreground) 193 + &.github svg > path 194 + transition: all 80ms cubic-bezier(0.4, 0.0, 0.2, 1) 195 + stroke: var(--foreground) 196 + :global(table) 197 + border-collapse: collapse 198 + :global(td), :global(th) 199 + border: 1px solid var(--border) 200 + padding: 6px 9px 201 + :global(code) 202 + background-color: hsla(231, 8%, 70%, 0.2) 203 + border-radius: 6px 204 + padding: .2em .3em 205 + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace 206 + font-size: 95% 207 + :global(code, p) 208 + line-height: 1.5 209 + :global(li) 210 + margin-top: .25em 211 211 </style>
+11 -11
src/routes/+page.svelte
··· 1 1 <script lang="ts"> 2 - import DatePicker from './DatePicker.svelte' 3 - import DateInput from './DateInput.svelte' 2 + import DatePicker from './DatePicker.svelte' 3 + import DateInput from './DateInput.svelte' 4 4 </script> 5 5 6 6 <svelte:head> 7 - <title>Date Picker Svelte</title> 7 + <title>Date Picker Svelte</title> 8 8 </svelte:head> 9 9 10 10 <p>Date and time picker for Svelte</p> 11 11 12 12 <p>Features:</p> 13 13 <ul> 14 - <li>Theming</li> 15 - <li>Custom formats</li> 16 - <li>Internationalization (i18n)</li> 17 - <li> 18 - Autopunctuation (e.g typing "20201111111111" gives you "2020-11-11 11:11:11" with the default 19 - format) 20 - </li> 21 - <li>Keyboard shortcuts</li> 14 + <li>Theming</li> 15 + <li>Custom formats</li> 16 + <li>Internationalization (i18n)</li> 17 + <li> 18 + Autopunctuation (e.g typing "20201111111111" gives you "2020-11-11 11:11:11" with the default 19 + format) 20 + </li> 21 + <li>Keyboard shortcuts</li> 22 22 </ul> 23 23 24 24 <h2 id="install">Install</h2>
+5 -5
src/routes/404/+page.svelte
··· 1 1 <script lang="ts"> 2 - import { onMount } from 'svelte' 3 - import { goto } from '$app/navigation' 4 - onMount(() => { 5 - goto('/') 6 - }) 2 + import { onMount } from 'svelte' 3 + import { goto } from '$app/navigation' 4 + onMount(() => { 5 + goto('/') 6 + }) 7 7 </script>
+50 -50
src/routes/DateInput.svelte
··· 1 1 <script lang="ts"> 2 - import DateInput from '$lib/DateInput.svelte' 3 - import Prop from './prop.svelte' 4 - import Split from './split.svelte' 2 + import DateInput from '$lib/DateInput.svelte' 3 + import Prop from './prop.svelte' 4 + import Split from './split.svelte' 5 5 6 - let placeholder: string 7 - let value: Date 8 - let min: Date 9 - let max: Date 10 - let valid: boolean 11 - let visible: boolean 12 - let disabled: boolean 13 - let closeOnSelection: boolean 14 - let browseWithoutSelecting: boolean 15 - let format: string 16 - let dynamicPositioning: boolean = true 17 - let timePrecision: 'minute' | 'second' | 'millisecond' | null = null 6 + let placeholder: string 7 + let value: Date 8 + let min: Date 9 + let max: Date 10 + let valid: boolean 11 + let visible: boolean 12 + let disabled: boolean 13 + let closeOnSelection: boolean 14 + let browseWithoutSelecting: boolean 15 + let format: string 16 + let dynamicPositioning: boolean = true 17 + let timePrecision: 'minute' | 'second' | 'millisecond' | null = null 18 18 </script> 19 19 20 20 <Split> 21 - <DateInput 22 - slot="left" 23 - bind:value 24 - bind:min 25 - bind:max 26 - bind:placeholder 27 - bind:valid 28 - bind:format 29 - bind:visible 30 - bind:disabled 31 - bind:closeOnSelection 32 - bind:browseWithoutSelecting 33 - bind:dynamicPositioning 34 - bind:timePrecision 35 - /> 21 + <DateInput 22 + slot="left" 23 + bind:value 24 + bind:min 25 + bind:max 26 + bind:placeholder 27 + bind:valid 28 + bind:format 29 + bind:visible 30 + bind:disabled 31 + bind:closeOnSelection 32 + bind:browseWithoutSelecting 33 + bind:dynamicPositioning 34 + bind:timePrecision 35 + /> 36 36 37 - <svelte:fragment slot="right"> 38 - <h3 class="no-top">Props</h3> 39 - <Prop label="value">{value}</Prop> 40 - <Prop label="min" bind:value={min} /> 41 - <Prop label="max" bind:value={max} /> 42 - <Prop label="placeholder" bind:value={placeholder} /> 43 - <Prop label="valid" bind:value={valid} /> 44 - <Prop label="format" bind:value={format} /> 45 - <Prop label="visible" bind:value={visible} /> 46 - <Prop label="disabled" bind:value={disabled} /> 47 - <Prop label="closeOnSelection" bind:value={closeOnSelection} /> 48 - <Prop label="browseWithoutSelecting" bind:value={browseWithoutSelecting} /> 49 - <Prop label="dynamicPositioning" bind:value={dynamicPositioning} /> 50 - <Prop label="locale">Default</Prop> 51 - <Prop 52 - label="timePrecision" 53 - bind:value={timePrecision} 54 - values={[null, 'minute', 'second', 'millisecond']}>{timePrecision}</Prop 55 - > 56 - </svelte:fragment> 37 + <svelte:fragment slot="right"> 38 + <h3 class="no-top">Props</h3> 39 + <Prop label="value">{value}</Prop> 40 + <Prop label="min" bind:value={min} /> 41 + <Prop label="max" bind:value={max} /> 42 + <Prop label="placeholder" bind:value={placeholder} /> 43 + <Prop label="valid" bind:value={valid} /> 44 + <Prop label="format" bind:value={format} /> 45 + <Prop label="visible" bind:value={visible} /> 46 + <Prop label="disabled" bind:value={disabled} /> 47 + <Prop label="closeOnSelection" bind:value={closeOnSelection} /> 48 + <Prop label="browseWithoutSelecting" bind:value={browseWithoutSelecting} /> 49 + <Prop label="dynamicPositioning" bind:value={dynamicPositioning} /> 50 + <Prop label="locale">Default</Prop> 51 + <Prop 52 + label="timePrecision" 53 + bind:value={timePrecision} 54 + values={[null, 'minute', 'second', 'millisecond']}>{timePrecision}</Prop 55 + > 56 + </svelte:fragment> 57 57 </Split>
+29 -29
src/routes/DatePicker.svelte
··· 1 1 <script lang="ts"> 2 - import DatePicker from '$lib/DatePicker.svelte' 3 - import { localeFromDateFnsLocale } from '$lib/locale.js' 4 - import Prop from './prop.svelte' 5 - import Split from './split.svelte' 2 + import DatePicker from '$lib/DatePicker.svelte' 3 + import { localeFromDateFnsLocale } from '$lib/locale.js' 4 + import Prop from './prop.svelte' 5 + import Split from './split.svelte' 6 6 7 - // had to import it this way to avoid errors 8 - // in `npm run build:site` or `npm run check`: 9 - import hy from 'date-fns/locale/hy/index.js' 10 - let value: Date 11 - let min: Date 12 - let max: Date 13 - let locale = localeFromDateFnsLocale(hy) 14 - let browseWithoutSelecting: boolean 15 - let timePrecision: 'minute' | 'second' | 'millisecond' | null = 'millisecond' 7 + // had to import it this way to avoid errors 8 + // in `npm run build:site` or `npm run check`: 9 + import hy from 'date-fns/locale/hy/index.js' 10 + let value: Date 11 + let min: Date 12 + let max: Date 13 + let locale = localeFromDateFnsLocale(hy) 14 + let browseWithoutSelecting: boolean 15 + let timePrecision: 'minute' | 'second' | 'millisecond' | null = 'millisecond' 16 16 </script> 17 17 18 18 <Split> 19 - <div class="left" slot="left"> 20 - <DatePicker bind:value bind:min bind:max {locale} bind:browseWithoutSelecting {timePrecision} /> 21 - </div> 22 - <div slot="right"> 23 - <h3 class="no-top">Props</h3> 24 - <Prop label="value">{value}</Prop> 25 - <Prop label="min" bind:value={min} /> 26 - <Prop label="max" bind:value={max} /> 27 - <Prop label="locale">date-fns <code>hy</code></Prop> 28 - <Prop label="browseWithoutSelecting" bind:value={browseWithoutSelecting} /> 29 - <Prop 30 - label="timePrecision" 31 - bind:value={timePrecision} 32 - values={[null, 'minute', 'second', 'millisecond']}>{timePrecision}</Prop 33 - > 34 - </div> 19 + <div class="left" slot="left"> 20 + <DatePicker bind:value bind:min bind:max {locale} bind:browseWithoutSelecting {timePrecision} /> 21 + </div> 22 + <div slot="right"> 23 + <h3 class="no-top">Props</h3> 24 + <Prop label="value">{value}</Prop> 25 + <Prop label="min" bind:value={min} /> 26 + <Prop label="max" bind:value={max} /> 27 + <Prop label="locale">date-fns <code>hy</code></Prop> 28 + <Prop label="browseWithoutSelecting" bind:value={browseWithoutSelecting} /> 29 + <Prop 30 + label="timePrecision" 31 + bind:value={timePrecision} 32 + values={[null, 'minute', 'second', 'millisecond']}>{timePrecision}</Prop 33 + > 34 + </div> 35 35 </Split>
+17 -17
src/routes/bug/+page.svelte
··· 1 1 <script lang="ts"> 2 - import DatePicker from '$lib/DatePicker.svelte' 2 + import DatePicker from '$lib/DatePicker.svelte' 3 3 4 - let date: Date | null = null 5 - // let date_string: string | undefined 6 - let is_date_valid: boolean 7 - let max_date = new Date() 4 + let date: Date | null = null 5 + // let date_string: string | undefined 6 + let is_date_valid: boolean 7 + let max_date = new Date() 8 8 9 - // Atleast 14 years old 10 - max_date.setDate(max_date.getDate() - 5110) 9 + // Atleast 14 years old 10 + max_date.setDate(max_date.getDate() - 5110) 11 11 12 - $: if (date && is_date_valid) { 13 - date.setHours(12, 0, 0, 0) 14 - date.toISOString() 15 - // date_string = date.toISOString().slice(0, 10) 16 - } 12 + $: if (date && is_date_valid) { 13 + date.setHours(12, 0, 0, 0) 14 + date.toISOString() 15 + // date_string = date.toISOString().slice(0, 10) 16 + } 17 17 </script> 18 18 19 19 <!-- <input bind:value={date_string} type="date" class="hidden" id="id_birth_date" name="birth_date" /> --> 20 20 <!-- <DateInput 21 - bind:value={date} 22 - bind:valid={is_date_valid} 23 - max={max_date} 24 - format="yyyy-MM-dd" 25 - placeholder="Select a date" 21 + bind:value={date} 22 + bind:valid={is_date_valid} 23 + max={max_date} 24 + format="yyyy-MM-dd" 25 + placeholder="Select a date" 26 26 /> --> 27 27 <DatePicker bind:value={date} max={max_date} />
+3 -3
src/routes/demo/+page.svelte
··· 1 1 <script lang="ts"> 2 - import DatePicker from '../DatePicker.svelte' 3 - import DateInput from '../DateInput.svelte' 2 + import DatePicker from '../DatePicker.svelte' 3 + import DateInput from '../DateInput.svelte' 4 4 </script> 5 5 6 6 <svelte:head> 7 - <title>Demo • Date Picker Svelte</title> 7 + <title>Demo • Date Picker Svelte</title> 8 8 </svelte:head> 9 9 10 10 <!-- svelte-ignore a11y-missing-content -->
+9 -9
src/routes/docs/+page.md
··· 1 1 <svelte:head> 2 2 3 - <title>Docs • Date Picker Svelte</title> 3 + <title>Docs • Date Picker Svelte</title> 4 4 </svelte:head> 5 5 6 6 # Documentation ··· 15 15 16 16 ```svelte 17 17 <script> 18 - import { DateInput } from 'date-picker-svelte' 19 - let date = new Date() 18 + import { DateInput } from 'date-picker-svelte' 19 + let date = new Date() 20 20 </script> 21 21 22 22 <DateInput bind:value={date} /> ··· 91 91 92 92 ```js 93 93 <script> 94 - import { DatePicker, localeFromDateFnsLocale } from 'date-picker-svelte' 95 - import { hy } from 'date-fns/locale' 96 - let date = new Date() 97 - let locale = localeFromDateFnsLocale(hy) 94 + import { DatePicker, localeFromDateFnsLocale } from 'date-picker-svelte' 95 + import { hy } from 'date-fns/locale' 96 + let date = new Date() 97 + let locale = localeFromDateFnsLocale(hy) 98 98 </script> 99 99 100 100 <DatePicker bind:value={date} {locale} /> ··· 119 119 120 120 ```css 121 121 :root { 122 - --date-picker-background: #1b1e27; 123 - --date-picker-foreground: #f7f7f7; 122 + --date-picker-background: #1b1e27; 123 + --date-picker-foreground: #f7f7f7; 124 124 } 125 125 ```
+64 -64
src/routes/prop.svelte
··· 1 1 <script lang="ts"> 2 - import DateInput from '$lib/DateInput.svelte' 2 + import DateInput from '$lib/DateInput.svelte' 3 3 4 - export let value: unknown = undefined 5 - export let values: unknown[] | undefined = undefined 6 - export let label: string 7 - let jsonValue = '' 8 - $: if (value instanceof Object) { 9 - jsonValue = JSON.stringify(value) 10 - } 11 - function jsonInput() { 12 - try { 13 - value = JSON.parse(jsonValue) 14 - } catch (e) { 15 - console.error(e) 16 - } 17 - } 4 + export let value: unknown = undefined 5 + export let values: unknown[] | undefined = undefined 6 + export let label: string 7 + let jsonValue = '' 8 + $: if (value instanceof Object) { 9 + jsonValue = JSON.stringify(value) 10 + } 11 + function jsonInput() { 12 + try { 13 + value = JSON.parse(jsonValue) 14 + } catch (e) { 15 + console.error(e) 16 + } 17 + } 18 18 </script> 19 19 20 20 <div class="prop"> 21 - <div class="label">{label}</div> 22 - {#if values} 23 - <select bind:value> 24 - {#each values as value} 25 - <option {value}>{String(value)}</option> 26 - {/each} 27 - </select> 28 - {:else if typeof value === 'string'} 29 - <input type="text" bind:value /> 30 - {:else if typeof value === 'boolean'} 31 - <input type="checkbox" bind:checked={value} /> 32 - {:else if value instanceof Date} 33 - <DateInput 34 - bind:value 35 - min={new Date(new Date().getFullYear() - 20, 0)} 36 - max={new Date(new Date().getFullYear() + 5, 0)} 37 - dynamicPositioning 38 - /> 39 - {:else if value instanceof Object} 40 - <textarea bind:value={jsonValue} on:input={jsonInput} /> 41 - {:else} 42 - <div> 43 - <slot /> 44 - </div> 45 - {/if} 21 + <div class="label">{label}</div> 22 + {#if values} 23 + <select bind:value> 24 + {#each values as value} 25 + <option {value}>{String(value)}</option> 26 + {/each} 27 + </select> 28 + {:else if typeof value === 'string'} 29 + <input type="text" bind:value /> 30 + {:else if typeof value === 'boolean'} 31 + <input type="checkbox" bind:checked={value} /> 32 + {:else if value instanceof Date} 33 + <DateInput 34 + bind:value 35 + min={new Date(new Date().getFullYear() - 20, 0)} 36 + max={new Date(new Date().getFullYear() + 5, 0)} 37 + dynamicPositioning 38 + /> 39 + {:else if value instanceof Object} 40 + <textarea bind:value={jsonValue} on:input={jsonInput} /> 41 + {:else} 42 + <div> 43 + <slot /> 44 + </div> 45 + {/if} 46 46 </div> 47 47 48 48 <style lang="sass"> 49 - .prop 50 - display: block 51 - @media (min-width: 450px) 52 - display: flex 53 - padding: 5px 0px 54 - align-items: center 55 - .label 56 - width: 195px 57 - flex-shrink: 0 58 - input[type='text'], textarea, select 59 - color: var(--foreground) 60 - background: var(--input-background) 61 - border: 1px solid rgba(103, 113, 137, 0.3) 62 - border-radius: 3px 63 - box-sizing: border-box 64 - padding: 4px 6px 65 - outline: none 66 - transition: 80ms cubic-bezier(0.4, 0.0, 0.2, 1) 67 - transition-property: border-color, box-shadow, background 68 - &:focus 69 - border-color: var(--input-highlight-border) 70 - box-shadow: 0px 0px 0px 2px var(--input-highlight-shadow) 71 - input[type='text'] 72 - width: var(--input-width) 49 + .prop 50 + display: block 51 + @media (min-width: 450px) 52 + display: flex 53 + padding: 5px 0px 54 + align-items: center 55 + .label 56 + width: 195px 57 + flex-shrink: 0 58 + input[type='text'], textarea, select 59 + color: var(--foreground) 60 + background: var(--input-background) 61 + border: 1px solid rgba(103, 113, 137, 0.3) 62 + border-radius: 3px 63 + box-sizing: border-box 64 + padding: 4px 6px 65 + outline: none 66 + transition: 80ms cubic-bezier(0.4, 0.0, 0.2, 1) 67 + transition-property: border-color, box-shadow, background 68 + &:focus 69 + border-color: var(--input-highlight-border) 70 + box-shadow: 0px 0px 0px 2px var(--input-highlight-shadow) 71 + input[type='text'] 72 + width: var(--input-width) 73 73 </style>
+33 -33
src/routes/split.svelte
··· 1 1 <div class="row"> 2 - <section class="left"> 3 - <div class="spacer" /> 4 - <slot name="left" /> 5 - <div class="spacer" /> 6 - </section> 7 - <section class="right"> 8 - <div class="spacer" /> 9 - <slot name="right" /> 10 - <div class="spacer" /> 11 - </section> 2 + <section class="left"> 3 + <div class="spacer" /> 4 + <slot name="left" /> 5 + <div class="spacer" /> 6 + </section> 7 + <section class="right"> 8 + <div class="spacer" /> 9 + <slot name="right" /> 10 + <div class="spacer" /> 11 + </section> 12 12 </div> 13 13 14 14 <style lang="sass"> 15 - .row 16 - display: flex 17 - border: 1px solid hsla(222, 15%, 50%, 0.1) 18 - background: var(--card-background) 19 - transition: background 80ms cubic-bezier(0.4, 0.0, 0.2, 1), box-shadow 300ms cubic-bezier(0.4, 0.0, 0.2, 1) 20 - box-shadow: 0px 1px 3px 0px rgba(#000000, 0.05) 21 - border-radius: 5px 22 - padding: 10px 23 - flex-direction: column 24 - box-shadow: 0px 1px 3px 0px rgba(#000000, 0.05) 25 - @media (min-width: 401px) 26 - padding: 20px 27 - @media (min-width: 701px) 28 - flex-direction: row 29 - @media(max-width: 700px) 30 - @media(min-width: 701px) 31 - section.left 32 - padding-right: 0px 33 - flex-shrink: 0 34 - min-width: 260px 35 - padding-right: 10px 36 - .spacer 37 - margin-top: 20px 15 + .row 16 + display: flex 17 + border: 1px solid hsla(222, 15%, 50%, 0.1) 18 + background: var(--card-background) 19 + transition: background 80ms cubic-bezier(0.4, 0.0, 0.2, 1), box-shadow 300ms cubic-bezier(0.4, 0.0, 0.2, 1) 20 + box-shadow: 0px 1px 3px 0px rgba(#000000, 0.05) 21 + border-radius: 5px 22 + padding: 10px 23 + flex-direction: column 24 + box-shadow: 0px 1px 3px 0px rgba(#000000, 0.05) 25 + @media (min-width: 401px) 26 + padding: 20px 27 + @media (min-width: 701px) 28 + flex-direction: row 29 + @media(max-width: 700px) 30 + @media(min-width: 701px) 31 + section.left 32 + padding-right: 0px 33 + flex-shrink: 0 34 + min-width: 260px 35 + padding-right: 10px 36 + .spacer 37 + margin-top: 20px 38 38 </style>
+43 -43
static/prism-holi-theme.css
··· 7 7 8 8 code[class*='language-'], 9 9 pre[class*='language-'] { 10 - color: #d6e7ff; 11 - background: #14151a; 12 - text-shadow: none; 13 - font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; 14 - font-size: 1em; 15 - line-height: 1.5; 16 - letter-spacing: 0.2px; 17 - white-space: pre; 18 - word-spacing: normal; 19 - word-break: normal; 20 - word-wrap: normal; 21 - text-align: left; 22 - padding: 0px; 10 + color: #d6e7ff; 11 + background: #14151a; 12 + text-shadow: none; 13 + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; 14 + font-size: 1em; 15 + line-height: 1.5; 16 + letter-spacing: 0.2px; 17 + white-space: pre; 18 + word-spacing: normal; 19 + word-break: normal; 20 + word-wrap: normal; 21 + text-align: left; 22 + padding: 0px; 23 23 24 - -moz-tab-size: 4; 25 - -o-tab-size: 4; 26 - tab-size: 4; 24 + -moz-tab-size: 4; 25 + -o-tab-size: 4; 26 + tab-size: 4; 27 27 28 - -webkit-hyphens: none; 29 - -moz-hyphens: none; 30 - -ms-hyphens: none; 31 - hyphens: none; 28 + -webkit-hyphens: none; 29 + -moz-hyphens: none; 30 + -ms-hyphens: none; 31 + hyphens: none; 32 32 } 33 33 34 34 pre[class*='language-']::-moz-selection, ··· 39 39 pre[class*='language-'] ::selection, 40 40 code[class*='language-']::selection, 41 41 code[class*='language-'] ::selection { 42 - color: inherit; 43 - background: #1d3b54; 44 - text-shadow: none; 42 + color: inherit; 43 + background: #1d3b54; 44 + text-shadow: none; 45 45 } 46 46 47 47 pre[class*='language-'] { 48 - border: 1px solid #202227; 49 - border-radius: 5px; 50 - padding: 1.5em 1em; 51 - margin: 1em 0; 52 - overflow: auto; 48 + border: 1px solid #202227; 49 + border-radius: 5px; 50 + padding: 1.5em 1em; 51 + margin: 1em 0; 52 + overflow: auto; 53 53 } 54 54 55 55 :not(pre) > code[class*='language-'] { 56 - color: #f0f6f6; 57 - background: #2a4555; 58 - padding: 0.2em 0.3em; 59 - border-radius: 0.2em; 60 - box-decoration-break: clone; 56 + color: #f0f6f6; 57 + background: #2a4555; 58 + padding: 0.2em 0.3em; 59 + border-radius: 0.2em; 60 + box-decoration-break: clone; 61 61 } 62 62 63 63 .token.comment, 64 64 .token.prolog, 65 65 .token.doctype, 66 66 .token.cdata { 67 - color: #446e69; 67 + color: #446e69; 68 68 } 69 69 70 70 .token.punctuation { 71 - color: #d6b007; 71 + color: #d6b007; 72 72 } 73 73 74 74 .token.property, ··· 78 78 .token.constant, 79 79 .token.symbol, 80 80 .token.deleted { 81 - color: #d6e7ff; 81 + color: #d6e7ff; 82 82 } 83 83 84 84 .token.selector, 85 85 .token.attr-name, 86 86 .token.builtin, 87 87 .token.inserted { 88 - color: #e60067; 88 + color: #e60067; 89 89 } 90 90 91 91 .token.string, 92 92 .token.char { 93 - color: #49c6ec; 93 + color: #49c6ec; 94 94 } 95 95 96 96 .token.operator, ··· 98 98 .token.url, 99 99 .language-css .token.string, 100 100 .style .token.string { 101 - color: #ec8e01; 102 - background: transparent; 101 + color: #ec8e01; 102 + background: transparent; 103 103 } 104 104 105 105 .token.atrule, 106 106 .token.attr-value, 107 107 .token.keyword { 108 - color: #0fe468; 108 + color: #0fe468; 109 109 } 110 110 111 111 .token.function, 112 112 .token.class-name { 113 - color: #78f3e9; 113 + color: #78f3e9; 114 114 } 115 115 116 116 .token.regex, 117 117 .token.important, 118 118 .token.variable { 119 - color: #d6e7ff; 119 + color: #d6e7ff; 120 120 }
+13 -13
svelte.config.js
··· 4 4 5 5 /** @type {import('@sveltejs/kit').Config} */ 6 6 export default { 7 - extensions: ['.svelte', '.md'], 8 - preprocess: [ 9 - vitePreprocess(), 10 - mdsvex({ 11 - extensions: ['.md'], 12 - smartypants: false, 13 - }), 14 - ], 7 + extensions: ['.svelte', '.md'], 8 + preprocess: [ 9 + vitePreprocess(), 10 + mdsvex({ 11 + extensions: ['.md'], 12 + smartypants: false, 13 + }), 14 + ], 15 15 16 - kit: { 17 - adapter: adapter({ 18 - fallback: null, 19 - }), 20 - }, 16 + kit: { 17 + adapter: adapter({ 18 + fallback: null, 19 + }), 20 + }, 21 21 }
+12 -12
tsconfig.json
··· 1 1 { 2 - "extends": "./.svelte-kit/tsconfig.json", 3 - "compilerOptions": { 4 - "allowJs": true, 5 - "checkJs": true, 6 - "esModuleInterop": true, 7 - "forceConsistentCasingInFileNames": true, 8 - "resolveJsonModule": true, 9 - "skipLibCheck": true, 10 - "sourceMap": true, 11 - "strict": true, 12 - "moduleResolution": "NodeNext" 13 - } 2 + "extends": "./.svelte-kit/tsconfig.json", 3 + "compilerOptions": { 4 + "allowJs": true, 5 + "checkJs": true, 6 + "esModuleInterop": true, 7 + "forceConsistentCasingInFileNames": true, 8 + "resolveJsonModule": true, 9 + "skipLibCheck": true, 10 + "sourceMap": true, 11 + "strict": true, 12 + "moduleResolution": "NodeNext" 13 + } 14 14 }
+1 -1
vite.config.ts
··· 2 2 import { defineConfig } from 'vite' 3 3 4 4 export default defineConfig({ 5 - plugins: [sveltekit()], 5 + plugins: [sveltekit()], 6 6 })