[READ-ONLY] Mirror of https://github.com/flo-bit/ui-kit. 🦊 fox ui, svelte 5 and tailwind 4 flo-bit.dev/ui-kit/
svelte tailwindcss ui-components
0

Configure Feed

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

first commit

Florian (Feb 27, 2025, 1:17 AM +0100) 4b8c8f1a

+8908
+23
.gitignore
··· 1 + node_modules 2 + 3 + # Output 4 + .output 5 + .vercel 6 + .netlify 7 + .wrangler 8 + /.svelte-kit 9 + /build 10 + 11 + # OS 12 + .DS_Store 13 + Thumbs.db 14 + 15 + # Env 16 + .env 17 + .env.* 18 + !.env.example 19 + !.env.test 20 + 21 + # Vite 22 + vite.config.js.timestamp-* 23 + vite.config.ts.timestamp-*
+1
.npmrc
··· 1 + engine-strict=true
+4
.prettierignore
··· 1 + # Package Managers 2 + package-lock.json 3 + pnpm-lock.yaml 4 + yarn.lock
+15
.prettierrc
··· 1 + { 2 + "useTabs": true, 3 + "singleQuote": true, 4 + "trailingComma": "none", 5 + "printWidth": 100, 6 + "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"], 7 + "overrides": [ 8 + { 9 + "files": "*.svelte", 10 + "options": { 11 + "parser": "svelte" 12 + } 13 + } 14 + ] 15 + }
+38
README.md
··· 1 + # sv 2 + 3 + Everything you need to build a Svelte project, powered by [`sv`](https://github.com/sveltejs/cli). 4 + 5 + ## Creating a project 6 + 7 + If you're seeing this, you've probably already done this step. Congrats! 8 + 9 + ```bash 10 + # create a new project in the current directory 11 + npx sv create 12 + 13 + # create a new project in my-app 14 + npx sv create my-app 15 + ``` 16 + 17 + ## Developing 18 + 19 + Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: 20 + 21 + ```bash 22 + npm run dev 23 + 24 + # or start the server and open the app in a new browser tab 25 + npm run dev -- --open 26 + ``` 27 + 28 + ## Building 29 + 30 + To create a production version of your app: 31 + 32 + ```bash 33 + npm run build 34 + ``` 35 + 36 + You can preview the production build with `npm run preview`. 37 + 38 + > To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment.
+34
eslint.config.js
··· 1 + import prettier from 'eslint-config-prettier'; 2 + import js from '@eslint/js'; 3 + import { includeIgnoreFile } from '@eslint/compat'; 4 + import svelte from 'eslint-plugin-svelte'; 5 + import globals from 'globals'; 6 + import { fileURLToPath } from 'node:url'; 7 + import ts from 'typescript-eslint'; 8 + const gitignorePath = fileURLToPath(new URL('./.gitignore', import.meta.url)); 9 + 10 + export default ts.config( 11 + includeIgnoreFile(gitignorePath), 12 + js.configs.recommended, 13 + ...ts.configs.recommended, 14 + ...svelte.configs['flat/recommended'], 15 + prettier, 16 + ...svelte.configs['flat/prettier'], 17 + { 18 + languageOptions: { 19 + globals: { 20 + ...globals.browser, 21 + ...globals.node 22 + } 23 + } 24 + }, 25 + { 26 + files: ['**/*.svelte'], 27 + 28 + languageOptions: { 29 + parserOptions: { 30 + parser: ts.parser 31 + } 32 + } 33 + } 34 + );
+5551
package-lock.json
··· 1 + { 2 + "name": "ui-kit-25", 3 + "version": "0.0.1", 4 + "lockfileVersion": 3, 5 + "requires": true, 6 + "packages": { 7 + "": { 8 + "name": "ui-kit-25", 9 + "version": "0.0.1", 10 + "dependencies": { 11 + "@sveltejs/adapter-static": "^3.0.8", 12 + "@threlte/core": "^8.0.1", 13 + "@threlte/extras": "^9.0.1", 14 + "@types/three": "^0.173.0", 15 + "bits-ui": "^1.3.4", 16 + "layerchart": "^1.0.0", 17 + "plyr": "^3.7.8", 18 + "tailwind-variants": "^0.3.1", 19 + "tailwindcss-animate": "^1.0.7", 20 + "three": "^0.173.0", 21 + "tw-colors": "^3.3.2" 22 + }, 23 + "devDependencies": { 24 + "@eslint/compat": "^1.2.5", 25 + "@eslint/js": "^9.18.0", 26 + "@sveltejs/adapter-auto": "^4.0.0", 27 + "@sveltejs/kit": "^2.16.0", 28 + "@sveltejs/vite-plugin-svelte": "^5.0.0", 29 + "@tailwindcss/forms": "^0.5.10", 30 + "@tailwindcss/typography": "^0.5.16", 31 + "autoprefixer": "^10.4.20", 32 + "eslint": "^9.18.0", 33 + "eslint-config-prettier": "^10.0.1", 34 + "eslint-plugin-svelte": "^2.46.1", 35 + "globals": "^15.14.0", 36 + "prettier": "^3.4.2", 37 + "prettier-plugin-svelte": "^3.3.3", 38 + "prettier-plugin-tailwindcss": "^0.6.10", 39 + "svelte": "^5.0.0", 40 + "svelte-check": "^4.0.0", 41 + "tailwindcss": "^3.4.17", 42 + "typescript": "^5.0.0", 43 + "typescript-eslint": "^8.20.0", 44 + "vite": "^6.0.0" 45 + } 46 + }, 47 + "node_modules/@alloc/quick-lru": { 48 + "version": "5.2.0", 49 + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", 50 + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", 51 + "engines": { 52 + "node": ">=10" 53 + }, 54 + "funding": { 55 + "url": "https://github.com/sponsors/sindresorhus" 56 + } 57 + }, 58 + "node_modules/@ampproject/remapping": { 59 + "version": "2.3.0", 60 + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", 61 + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", 62 + "dependencies": { 63 + "@jridgewell/gen-mapping": "^0.3.5", 64 + "@jridgewell/trace-mapping": "^0.3.24" 65 + }, 66 + "engines": { 67 + "node": ">=6.0.0" 68 + } 69 + }, 70 + "node_modules/@colors/colors": { 71 + "version": "1.6.0", 72 + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", 73 + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", 74 + "engines": { 75 + "node": ">=0.1.90" 76 + } 77 + }, 78 + "node_modules/@dabh/diagnostics": { 79 + "version": "2.0.3", 80 + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", 81 + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", 82 + "dependencies": { 83 + "colorspace": "1.1.x", 84 + "enabled": "2.0.x", 85 + "kuler": "^2.0.0" 86 + } 87 + }, 88 + "node_modules/@dagrejs/dagre": { 89 + "version": "1.1.4", 90 + "resolved": "https://registry.npmjs.org/@dagrejs/dagre/-/dagre-1.1.4.tgz", 91 + "integrity": "sha512-QUTc54Cg/wvmlEUxB+uvoPVKFazM1H18kVHBQNmK2NbrDR5ihOCR6CXLnDSZzMcSQKJtabPUWridBOlJM3WkDg==", 92 + "dependencies": { 93 + "@dagrejs/graphlib": "2.2.4" 94 + } 95 + }, 96 + "node_modules/@dagrejs/graphlib": { 97 + "version": "2.2.4", 98 + "resolved": "https://registry.npmjs.org/@dagrejs/graphlib/-/graphlib-2.2.4.tgz", 99 + "integrity": "sha512-mepCf/e9+SKYy1d02/UkvSy6+6MoyXhVxP8lLDfA7BPE1X1d4dR0sZznmbM8/XVJ1GPM+Svnx7Xj6ZweByWUkw==", 100 + "engines": { 101 + "node": ">17.0.0" 102 + } 103 + }, 104 + "node_modules/@esbuild/aix-ppc64": { 105 + "version": "0.25.0", 106 + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", 107 + "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", 108 + "cpu": [ 109 + "ppc64" 110 + ], 111 + "optional": true, 112 + "os": [ 113 + "aix" 114 + ], 115 + "engines": { 116 + "node": ">=18" 117 + } 118 + }, 119 + "node_modules/@esbuild/android-arm": { 120 + "version": "0.25.0", 121 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", 122 + "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", 123 + "cpu": [ 124 + "arm" 125 + ], 126 + "optional": true, 127 + "os": [ 128 + "android" 129 + ], 130 + "engines": { 131 + "node": ">=18" 132 + } 133 + }, 134 + "node_modules/@esbuild/android-arm64": { 135 + "version": "0.25.0", 136 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", 137 + "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", 138 + "cpu": [ 139 + "arm64" 140 + ], 141 + "optional": true, 142 + "os": [ 143 + "android" 144 + ], 145 + "engines": { 146 + "node": ">=18" 147 + } 148 + }, 149 + "node_modules/@esbuild/android-x64": { 150 + "version": "0.25.0", 151 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", 152 + "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", 153 + "cpu": [ 154 + "x64" 155 + ], 156 + "optional": true, 157 + "os": [ 158 + "android" 159 + ], 160 + "engines": { 161 + "node": ">=18" 162 + } 163 + }, 164 + "node_modules/@esbuild/darwin-arm64": { 165 + "version": "0.25.0", 166 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", 167 + "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", 168 + "cpu": [ 169 + "arm64" 170 + ], 171 + "optional": true, 172 + "os": [ 173 + "darwin" 174 + ], 175 + "engines": { 176 + "node": ">=18" 177 + } 178 + }, 179 + "node_modules/@esbuild/darwin-x64": { 180 + "version": "0.25.0", 181 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", 182 + "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", 183 + "cpu": [ 184 + "x64" 185 + ], 186 + "optional": true, 187 + "os": [ 188 + "darwin" 189 + ], 190 + "engines": { 191 + "node": ">=18" 192 + } 193 + }, 194 + "node_modules/@esbuild/freebsd-arm64": { 195 + "version": "0.25.0", 196 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", 197 + "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", 198 + "cpu": [ 199 + "arm64" 200 + ], 201 + "optional": true, 202 + "os": [ 203 + "freebsd" 204 + ], 205 + "engines": { 206 + "node": ">=18" 207 + } 208 + }, 209 + "node_modules/@esbuild/freebsd-x64": { 210 + "version": "0.25.0", 211 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", 212 + "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", 213 + "cpu": [ 214 + "x64" 215 + ], 216 + "optional": true, 217 + "os": [ 218 + "freebsd" 219 + ], 220 + "engines": { 221 + "node": ">=18" 222 + } 223 + }, 224 + "node_modules/@esbuild/linux-arm": { 225 + "version": "0.25.0", 226 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", 227 + "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", 228 + "cpu": [ 229 + "arm" 230 + ], 231 + "optional": true, 232 + "os": [ 233 + "linux" 234 + ], 235 + "engines": { 236 + "node": ">=18" 237 + } 238 + }, 239 + "node_modules/@esbuild/linux-arm64": { 240 + "version": "0.25.0", 241 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", 242 + "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", 243 + "cpu": [ 244 + "arm64" 245 + ], 246 + "optional": true, 247 + "os": [ 248 + "linux" 249 + ], 250 + "engines": { 251 + "node": ">=18" 252 + } 253 + }, 254 + "node_modules/@esbuild/linux-ia32": { 255 + "version": "0.25.0", 256 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", 257 + "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", 258 + "cpu": [ 259 + "ia32" 260 + ], 261 + "optional": true, 262 + "os": [ 263 + "linux" 264 + ], 265 + "engines": { 266 + "node": ">=18" 267 + } 268 + }, 269 + "node_modules/@esbuild/linux-loong64": { 270 + "version": "0.25.0", 271 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", 272 + "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", 273 + "cpu": [ 274 + "loong64" 275 + ], 276 + "optional": true, 277 + "os": [ 278 + "linux" 279 + ], 280 + "engines": { 281 + "node": ">=18" 282 + } 283 + }, 284 + "node_modules/@esbuild/linux-mips64el": { 285 + "version": "0.25.0", 286 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", 287 + "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", 288 + "cpu": [ 289 + "mips64el" 290 + ], 291 + "optional": true, 292 + "os": [ 293 + "linux" 294 + ], 295 + "engines": { 296 + "node": ">=18" 297 + } 298 + }, 299 + "node_modules/@esbuild/linux-ppc64": { 300 + "version": "0.25.0", 301 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", 302 + "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", 303 + "cpu": [ 304 + "ppc64" 305 + ], 306 + "optional": true, 307 + "os": [ 308 + "linux" 309 + ], 310 + "engines": { 311 + "node": ">=18" 312 + } 313 + }, 314 + "node_modules/@esbuild/linux-riscv64": { 315 + "version": "0.25.0", 316 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", 317 + "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", 318 + "cpu": [ 319 + "riscv64" 320 + ], 321 + "optional": true, 322 + "os": [ 323 + "linux" 324 + ], 325 + "engines": { 326 + "node": ">=18" 327 + } 328 + }, 329 + "node_modules/@esbuild/linux-s390x": { 330 + "version": "0.25.0", 331 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", 332 + "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", 333 + "cpu": [ 334 + "s390x" 335 + ], 336 + "optional": true, 337 + "os": [ 338 + "linux" 339 + ], 340 + "engines": { 341 + "node": ">=18" 342 + } 343 + }, 344 + "node_modules/@esbuild/linux-x64": { 345 + "version": "0.25.0", 346 + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", 347 + "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", 348 + "cpu": [ 349 + "x64" 350 + ], 351 + "optional": true, 352 + "os": [ 353 + "linux" 354 + ], 355 + "engines": { 356 + "node": ">=18" 357 + } 358 + }, 359 + "node_modules/@esbuild/netbsd-arm64": { 360 + "version": "0.25.0", 361 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", 362 + "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", 363 + "cpu": [ 364 + "arm64" 365 + ], 366 + "optional": true, 367 + "os": [ 368 + "netbsd" 369 + ], 370 + "engines": { 371 + "node": ">=18" 372 + } 373 + }, 374 + "node_modules/@esbuild/netbsd-x64": { 375 + "version": "0.25.0", 376 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", 377 + "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", 378 + "cpu": [ 379 + "x64" 380 + ], 381 + "optional": true, 382 + "os": [ 383 + "netbsd" 384 + ], 385 + "engines": { 386 + "node": ">=18" 387 + } 388 + }, 389 + "node_modules/@esbuild/openbsd-arm64": { 390 + "version": "0.25.0", 391 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", 392 + "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", 393 + "cpu": [ 394 + "arm64" 395 + ], 396 + "optional": true, 397 + "os": [ 398 + "openbsd" 399 + ], 400 + "engines": { 401 + "node": ">=18" 402 + } 403 + }, 404 + "node_modules/@esbuild/openbsd-x64": { 405 + "version": "0.25.0", 406 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", 407 + "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", 408 + "cpu": [ 409 + "x64" 410 + ], 411 + "optional": true, 412 + "os": [ 413 + "openbsd" 414 + ], 415 + "engines": { 416 + "node": ">=18" 417 + } 418 + }, 419 + "node_modules/@esbuild/sunos-x64": { 420 + "version": "0.25.0", 421 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", 422 + "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", 423 + "cpu": [ 424 + "x64" 425 + ], 426 + "optional": true, 427 + "os": [ 428 + "sunos" 429 + ], 430 + "engines": { 431 + "node": ">=18" 432 + } 433 + }, 434 + "node_modules/@esbuild/win32-arm64": { 435 + "version": "0.25.0", 436 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", 437 + "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", 438 + "cpu": [ 439 + "arm64" 440 + ], 441 + "optional": true, 442 + "os": [ 443 + "win32" 444 + ], 445 + "engines": { 446 + "node": ">=18" 447 + } 448 + }, 449 + "node_modules/@esbuild/win32-ia32": { 450 + "version": "0.25.0", 451 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", 452 + "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", 453 + "cpu": [ 454 + "ia32" 455 + ], 456 + "optional": true, 457 + "os": [ 458 + "win32" 459 + ], 460 + "engines": { 461 + "node": ">=18" 462 + } 463 + }, 464 + "node_modules/@esbuild/win32-x64": { 465 + "version": "0.25.0", 466 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", 467 + "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", 468 + "cpu": [ 469 + "x64" 470 + ], 471 + "optional": true, 472 + "os": [ 473 + "win32" 474 + ], 475 + "engines": { 476 + "node": ">=18" 477 + } 478 + }, 479 + "node_modules/@eslint-community/eslint-utils": { 480 + "version": "4.4.1", 481 + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", 482 + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", 483 + "dev": true, 484 + "dependencies": { 485 + "eslint-visitor-keys": "^3.4.3" 486 + }, 487 + "engines": { 488 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 489 + }, 490 + "funding": { 491 + "url": "https://opencollective.com/eslint" 492 + }, 493 + "peerDependencies": { 494 + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 495 + } 496 + }, 497 + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { 498 + "version": "3.4.3", 499 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 500 + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 501 + "dev": true, 502 + "engines": { 503 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 504 + }, 505 + "funding": { 506 + "url": "https://opencollective.com/eslint" 507 + } 508 + }, 509 + "node_modules/@eslint-community/regexpp": { 510 + "version": "4.12.1", 511 + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", 512 + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", 513 + "dev": true, 514 + "engines": { 515 + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 516 + } 517 + }, 518 + "node_modules/@eslint/compat": { 519 + "version": "1.2.7", 520 + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.2.7.tgz", 521 + "integrity": "sha512-xvv7hJE32yhegJ8xNAnb62ggiAwTYHBpUCWhRxEj/ksvgDJuSXfoDkBcRYaYNFiJ+jH0IE3K16hd+xXzhBgNbg==", 522 + "dev": true, 523 + "engines": { 524 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 525 + }, 526 + "peerDependencies": { 527 + "eslint": "^9.10.0" 528 + }, 529 + "peerDependenciesMeta": { 530 + "eslint": { 531 + "optional": true 532 + } 533 + } 534 + }, 535 + "node_modules/@eslint/config-array": { 536 + "version": "0.19.2", 537 + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", 538 + "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", 539 + "dev": true, 540 + "dependencies": { 541 + "@eslint/object-schema": "^2.1.6", 542 + "debug": "^4.3.1", 543 + "minimatch": "^3.1.2" 544 + }, 545 + "engines": { 546 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 547 + } 548 + }, 549 + "node_modules/@eslint/core": { 550 + "version": "0.12.0", 551 + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", 552 + "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", 553 + "dev": true, 554 + "dependencies": { 555 + "@types/json-schema": "^7.0.15" 556 + }, 557 + "engines": { 558 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 559 + } 560 + }, 561 + "node_modules/@eslint/eslintrc": { 562 + "version": "3.3.0", 563 + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz", 564 + "integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==", 565 + "dev": true, 566 + "dependencies": { 567 + "ajv": "^6.12.4", 568 + "debug": "^4.3.2", 569 + "espree": "^10.0.1", 570 + "globals": "^14.0.0", 571 + "ignore": "^5.2.0", 572 + "import-fresh": "^3.2.1", 573 + "js-yaml": "^4.1.0", 574 + "minimatch": "^3.1.2", 575 + "strip-json-comments": "^3.1.1" 576 + }, 577 + "engines": { 578 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 579 + }, 580 + "funding": { 581 + "url": "https://opencollective.com/eslint" 582 + } 583 + }, 584 + "node_modules/@eslint/eslintrc/node_modules/globals": { 585 + "version": "14.0.0", 586 + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", 587 + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", 588 + "dev": true, 589 + "engines": { 590 + "node": ">=18" 591 + }, 592 + "funding": { 593 + "url": "https://github.com/sponsors/sindresorhus" 594 + } 595 + }, 596 + "node_modules/@eslint/js": { 597 + "version": "9.21.0", 598 + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.21.0.tgz", 599 + "integrity": "sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==", 600 + "dev": true, 601 + "engines": { 602 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 603 + } 604 + }, 605 + "node_modules/@eslint/object-schema": { 606 + "version": "2.1.6", 607 + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", 608 + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", 609 + "dev": true, 610 + "engines": { 611 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 612 + } 613 + }, 614 + "node_modules/@eslint/plugin-kit": { 615 + "version": "0.2.7", 616 + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", 617 + "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", 618 + "dev": true, 619 + "dependencies": { 620 + "@eslint/core": "^0.12.0", 621 + "levn": "^0.4.1" 622 + }, 623 + "engines": { 624 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 625 + } 626 + }, 627 + "node_modules/@floating-ui/core": { 628 + "version": "1.6.9", 629 + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz", 630 + "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==", 631 + "dependencies": { 632 + "@floating-ui/utils": "^0.2.9" 633 + } 634 + }, 635 + "node_modules/@floating-ui/dom": { 636 + "version": "1.6.13", 637 + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz", 638 + "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==", 639 + "dependencies": { 640 + "@floating-ui/core": "^1.6.0", 641 + "@floating-ui/utils": "^0.2.9" 642 + } 643 + }, 644 + "node_modules/@floating-ui/utils": { 645 + "version": "0.2.9", 646 + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", 647 + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==" 648 + }, 649 + "node_modules/@humanfs/core": { 650 + "version": "0.19.1", 651 + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", 652 + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", 653 + "dev": true, 654 + "engines": { 655 + "node": ">=18.18.0" 656 + } 657 + }, 658 + "node_modules/@humanfs/node": { 659 + "version": "0.16.6", 660 + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", 661 + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", 662 + "dev": true, 663 + "dependencies": { 664 + "@humanfs/core": "^0.19.1", 665 + "@humanwhocodes/retry": "^0.3.0" 666 + }, 667 + "engines": { 668 + "node": ">=18.18.0" 669 + } 670 + }, 671 + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { 672 + "version": "0.3.1", 673 + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", 674 + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", 675 + "dev": true, 676 + "engines": { 677 + "node": ">=18.18" 678 + }, 679 + "funding": { 680 + "type": "github", 681 + "url": "https://github.com/sponsors/nzakas" 682 + } 683 + }, 684 + "node_modules/@humanwhocodes/module-importer": { 685 + "version": "1.0.1", 686 + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 687 + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 688 + "dev": true, 689 + "engines": { 690 + "node": ">=12.22" 691 + }, 692 + "funding": { 693 + "type": "github", 694 + "url": "https://github.com/sponsors/nzakas" 695 + } 696 + }, 697 + "node_modules/@humanwhocodes/retry": { 698 + "version": "0.4.2", 699 + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", 700 + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", 701 + "dev": true, 702 + "engines": { 703 + "node": ">=18.18" 704 + }, 705 + "funding": { 706 + "type": "github", 707 + "url": "https://github.com/sponsors/nzakas" 708 + } 709 + }, 710 + "node_modules/@internationalized/date": { 711 + "version": "3.7.0", 712 + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.7.0.tgz", 713 + "integrity": "sha512-VJ5WS3fcVx0bejE/YHfbDKR/yawZgKqn/if+oEeLqNwBtPzVB06olkfcnojTmEMX+gTpH+FlQ69SHNitJ8/erQ==", 714 + "dependencies": { 715 + "@swc/helpers": "^0.5.0" 716 + } 717 + }, 718 + "node_modules/@isaacs/cliui": { 719 + "version": "8.0.2", 720 + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", 721 + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 722 + "dependencies": { 723 + "string-width": "^5.1.2", 724 + "string-width-cjs": "npm:string-width@^4.2.0", 725 + "strip-ansi": "^7.0.1", 726 + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 727 + "wrap-ansi": "^8.1.0", 728 + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 729 + }, 730 + "engines": { 731 + "node": ">=12" 732 + } 733 + }, 734 + "node_modules/@jridgewell/gen-mapping": { 735 + "version": "0.3.8", 736 + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", 737 + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", 738 + "dependencies": { 739 + "@jridgewell/set-array": "^1.2.1", 740 + "@jridgewell/sourcemap-codec": "^1.4.10", 741 + "@jridgewell/trace-mapping": "^0.3.24" 742 + }, 743 + "engines": { 744 + "node": ">=6.0.0" 745 + } 746 + }, 747 + "node_modules/@jridgewell/resolve-uri": { 748 + "version": "3.1.2", 749 + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 750 + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 751 + "engines": { 752 + "node": ">=6.0.0" 753 + } 754 + }, 755 + "node_modules/@jridgewell/set-array": { 756 + "version": "1.2.1", 757 + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 758 + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 759 + "engines": { 760 + "node": ">=6.0.0" 761 + } 762 + }, 763 + "node_modules/@jridgewell/sourcemap-codec": { 764 + "version": "1.5.0", 765 + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 766 + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" 767 + }, 768 + "node_modules/@jridgewell/trace-mapping": { 769 + "version": "0.3.25", 770 + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 771 + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 772 + "dependencies": { 773 + "@jridgewell/resolve-uri": "^3.1.0", 774 + "@jridgewell/sourcemap-codec": "^1.4.14" 775 + } 776 + }, 777 + "node_modules/@layerstack/svelte-actions": { 778 + "version": "1.0.0", 779 + "resolved": "https://registry.npmjs.org/@layerstack/svelte-actions/-/svelte-actions-1.0.0.tgz", 780 + "integrity": "sha512-cnVxMbcc+xYta9hwHnLja4a7bR7cfX/QW9jDY4ZCI8RIt+3lKNRE+u2XzWoGp4Qsx7A0/nGUIiLWpDBgO1ihsQ==", 781 + "dependencies": { 782 + "@floating-ui/dom": "^1.6.13", 783 + "@layerstack/utils": "1.0.0", 784 + "d3-array": "^3.2.4", 785 + "d3-scale": "^4.0.2", 786 + "date-fns": "^4.1.0", 787 + "lodash-es": "^4.17.21" 788 + } 789 + }, 790 + "node_modules/@layerstack/svelte-stores": { 791 + "version": "1.0.0", 792 + "resolved": "https://registry.npmjs.org/@layerstack/svelte-stores/-/svelte-stores-1.0.0.tgz", 793 + "integrity": "sha512-SPH6mjEtHLRBMFYrGUNpGsNsCAGRClYZ9nGQHa1OZdLgziBys/5+7Z3tpJ0K6kODR1ZM1bv16P9n1IfRyEjzpg==", 794 + "dependencies": { 795 + "@layerstack/utils": "1.0.0", 796 + "d3-array": "^3.2.4", 797 + "date-fns": "^4.1.0", 798 + "immer": "^10.1.1", 799 + "lodash-es": "^4.17.21", 800 + "zod": "^3.24.2" 801 + } 802 + }, 803 + "node_modules/@layerstack/tailwind": { 804 + "version": "1.0.0", 805 + "resolved": "https://registry.npmjs.org/@layerstack/tailwind/-/tailwind-1.0.0.tgz", 806 + "integrity": "sha512-xV2M6KRNBmbhV9XAvTHiw/BJSTIh5eby+Hj1iXXkMr88fObZHn4s1G2BILEDbdwjZl6Ivu1Du0gO9Vz3lzflUA==", 807 + "dependencies": { 808 + "@layerstack/utils": "^1.0.0", 809 + "clsx": "^2.1.1", 810 + "culori": "^4.0.1", 811 + "d3-array": "^3.2.4", 812 + "date-fns": "^4.1.0", 813 + "lodash-es": "^4.17.21", 814 + "tailwind-merge": "^2.5.4", 815 + "tailwindcss": "^3.4.15" 816 + } 817 + }, 818 + "node_modules/@layerstack/utils": { 819 + "version": "1.0.0", 820 + "resolved": "https://registry.npmjs.org/@layerstack/utils/-/utils-1.0.0.tgz", 821 + "integrity": "sha512-kIH8lo4MEzPGtdxQRacy8RsSVhMQwe62ckuev62xQDE5QcUJ4wB9EMaRWaQK8CfEOpUERGPgkMPMbMqPhdp0gw==", 822 + "dependencies": { 823 + "d3-array": "^3.2.4", 824 + "date-fns": "^4.1.0", 825 + "lodash-es": "^4.17.21" 826 + } 827 + }, 828 + "node_modules/@nodelib/fs.scandir": { 829 + "version": "2.1.5", 830 + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 831 + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 832 + "dependencies": { 833 + "@nodelib/fs.stat": "2.0.5", 834 + "run-parallel": "^1.1.9" 835 + }, 836 + "engines": { 837 + "node": ">= 8" 838 + } 839 + }, 840 + "node_modules/@nodelib/fs.stat": { 841 + "version": "2.0.5", 842 + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 843 + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 844 + "engines": { 845 + "node": ">= 8" 846 + } 847 + }, 848 + "node_modules/@nodelib/fs.walk": { 849 + "version": "1.2.8", 850 + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 851 + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 852 + "dependencies": { 853 + "@nodelib/fs.scandir": "2.1.5", 854 + "fastq": "^1.6.0" 855 + }, 856 + "engines": { 857 + "node": ">= 8" 858 + } 859 + }, 860 + "node_modules/@pkgjs/parseargs": { 861 + "version": "0.11.0", 862 + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 863 + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 864 + "optional": true, 865 + "engines": { 866 + "node": ">=14" 867 + } 868 + }, 869 + "node_modules/@polka/url": { 870 + "version": "1.0.0-next.28", 871 + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", 872 + "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==" 873 + }, 874 + "node_modules/@rollup/rollup-android-arm-eabi": { 875 + "version": "4.34.8", 876 + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz", 877 + "integrity": "sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==", 878 + "cpu": [ 879 + "arm" 880 + ], 881 + "optional": true, 882 + "os": [ 883 + "android" 884 + ] 885 + }, 886 + "node_modules/@rollup/rollup-android-arm64": { 887 + "version": "4.34.8", 888 + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.8.tgz", 889 + "integrity": "sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==", 890 + "cpu": [ 891 + "arm64" 892 + ], 893 + "optional": true, 894 + "os": [ 895 + "android" 896 + ] 897 + }, 898 + "node_modules/@rollup/rollup-darwin-arm64": { 899 + "version": "4.34.8", 900 + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.8.tgz", 901 + "integrity": "sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==", 902 + "cpu": [ 903 + "arm64" 904 + ], 905 + "optional": true, 906 + "os": [ 907 + "darwin" 908 + ] 909 + }, 910 + "node_modules/@rollup/rollup-darwin-x64": { 911 + "version": "4.34.8", 912 + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.8.tgz", 913 + "integrity": "sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==", 914 + "cpu": [ 915 + "x64" 916 + ], 917 + "optional": true, 918 + "os": [ 919 + "darwin" 920 + ] 921 + }, 922 + "node_modules/@rollup/rollup-freebsd-arm64": { 923 + "version": "4.34.8", 924 + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.8.tgz", 925 + "integrity": "sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==", 926 + "cpu": [ 927 + "arm64" 928 + ], 929 + "optional": true, 930 + "os": [ 931 + "freebsd" 932 + ] 933 + }, 934 + "node_modules/@rollup/rollup-freebsd-x64": { 935 + "version": "4.34.8", 936 + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.8.tgz", 937 + "integrity": "sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==", 938 + "cpu": [ 939 + "x64" 940 + ], 941 + "optional": true, 942 + "os": [ 943 + "freebsd" 944 + ] 945 + }, 946 + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 947 + "version": "4.34.8", 948 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.8.tgz", 949 + "integrity": "sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==", 950 + "cpu": [ 951 + "arm" 952 + ], 953 + "optional": true, 954 + "os": [ 955 + "linux" 956 + ] 957 + }, 958 + "node_modules/@rollup/rollup-linux-arm-musleabihf": { 959 + "version": "4.34.8", 960 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.8.tgz", 961 + "integrity": "sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==", 962 + "cpu": [ 963 + "arm" 964 + ], 965 + "optional": true, 966 + "os": [ 967 + "linux" 968 + ] 969 + }, 970 + "node_modules/@rollup/rollup-linux-arm64-gnu": { 971 + "version": "4.34.8", 972 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.8.tgz", 973 + "integrity": "sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==", 974 + "cpu": [ 975 + "arm64" 976 + ], 977 + "optional": true, 978 + "os": [ 979 + "linux" 980 + ] 981 + }, 982 + "node_modules/@rollup/rollup-linux-arm64-musl": { 983 + "version": "4.34.8", 984 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.8.tgz", 985 + "integrity": "sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==", 986 + "cpu": [ 987 + "arm64" 988 + ], 989 + "optional": true, 990 + "os": [ 991 + "linux" 992 + ] 993 + }, 994 + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { 995 + "version": "4.34.8", 996 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.8.tgz", 997 + "integrity": "sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==", 998 + "cpu": [ 999 + "loong64" 1000 + ], 1001 + "optional": true, 1002 + "os": [ 1003 + "linux" 1004 + ] 1005 + }, 1006 + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 1007 + "version": "4.34.8", 1008 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.8.tgz", 1009 + "integrity": "sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==", 1010 + "cpu": [ 1011 + "ppc64" 1012 + ], 1013 + "optional": true, 1014 + "os": [ 1015 + "linux" 1016 + ] 1017 + }, 1018 + "node_modules/@rollup/rollup-linux-riscv64-gnu": { 1019 + "version": "4.34.8", 1020 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.8.tgz", 1021 + "integrity": "sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==", 1022 + "cpu": [ 1023 + "riscv64" 1024 + ], 1025 + "optional": true, 1026 + "os": [ 1027 + "linux" 1028 + ] 1029 + }, 1030 + "node_modules/@rollup/rollup-linux-s390x-gnu": { 1031 + "version": "4.34.8", 1032 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.8.tgz", 1033 + "integrity": "sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==", 1034 + "cpu": [ 1035 + "s390x" 1036 + ], 1037 + "optional": true, 1038 + "os": [ 1039 + "linux" 1040 + ] 1041 + }, 1042 + "node_modules/@rollup/rollup-linux-x64-gnu": { 1043 + "version": "4.34.8", 1044 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.8.tgz", 1045 + "integrity": "sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==", 1046 + "cpu": [ 1047 + "x64" 1048 + ], 1049 + "optional": true, 1050 + "os": [ 1051 + "linux" 1052 + ] 1053 + }, 1054 + "node_modules/@rollup/rollup-linux-x64-musl": { 1055 + "version": "4.34.8", 1056 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.8.tgz", 1057 + "integrity": "sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==", 1058 + "cpu": [ 1059 + "x64" 1060 + ], 1061 + "optional": true, 1062 + "os": [ 1063 + "linux" 1064 + ] 1065 + }, 1066 + "node_modules/@rollup/rollup-win32-arm64-msvc": { 1067 + "version": "4.34.8", 1068 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.8.tgz", 1069 + "integrity": "sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==", 1070 + "cpu": [ 1071 + "arm64" 1072 + ], 1073 + "optional": true, 1074 + "os": [ 1075 + "win32" 1076 + ] 1077 + }, 1078 + "node_modules/@rollup/rollup-win32-ia32-msvc": { 1079 + "version": "4.34.8", 1080 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.8.tgz", 1081 + "integrity": "sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==", 1082 + "cpu": [ 1083 + "ia32" 1084 + ], 1085 + "optional": true, 1086 + "os": [ 1087 + "win32" 1088 + ] 1089 + }, 1090 + "node_modules/@rollup/rollup-win32-x64-msvc": { 1091 + "version": "4.34.8", 1092 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.8.tgz", 1093 + "integrity": "sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==", 1094 + "cpu": [ 1095 + "x64" 1096 + ], 1097 + "optional": true, 1098 + "os": [ 1099 + "win32" 1100 + ] 1101 + }, 1102 + "node_modules/@sveltejs/adapter-auto": { 1103 + "version": "4.0.0", 1104 + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-4.0.0.tgz", 1105 + "integrity": "sha512-kmuYSQdD2AwThymQF0haQhM8rE5rhutQXG4LNbnbShwhMO4qQGnKaaTy+88DuNSuoQDi58+thpq8XpHc1+oEKQ==", 1106 + "dev": true, 1107 + "dependencies": { 1108 + "import-meta-resolve": "^4.1.0" 1109 + }, 1110 + "peerDependencies": { 1111 + "@sveltejs/kit": "^2.0.0" 1112 + } 1113 + }, 1114 + "node_modules/@sveltejs/adapter-static": { 1115 + "version": "3.0.8", 1116 + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.8.tgz", 1117 + "integrity": "sha512-YaDrquRpZwfcXbnlDsSrBQNCChVOT9MGuSg+dMAyfsAa1SmiAhrA5jUYUiIMC59G92kIbY/AaQOWcBdq+lh+zg==", 1118 + "peerDependencies": { 1119 + "@sveltejs/kit": "^2.0.0" 1120 + } 1121 + }, 1122 + "node_modules/@sveltejs/kit": { 1123 + "version": "2.17.3", 1124 + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.17.3.tgz", 1125 + "integrity": "sha512-GcNaPDr0ti4O/TonPewkML2DG7UVXkSxPN3nPMlpmx0Rs4b2kVP4gymz98WEHlfzPXdd4uOOT1Js26DtieTNBQ==", 1126 + "dependencies": { 1127 + "@types/cookie": "^0.6.0", 1128 + "cookie": "^0.6.0", 1129 + "devalue": "^5.1.0", 1130 + "esm-env": "^1.2.2", 1131 + "import-meta-resolve": "^4.1.0", 1132 + "kleur": "^4.1.5", 1133 + "magic-string": "^0.30.5", 1134 + "mrmime": "^2.0.0", 1135 + "sade": "^1.8.1", 1136 + "set-cookie-parser": "^2.6.0", 1137 + "sirv": "^3.0.0" 1138 + }, 1139 + "bin": { 1140 + "svelte-kit": "svelte-kit.js" 1141 + }, 1142 + "engines": { 1143 + "node": ">=18.13" 1144 + }, 1145 + "peerDependencies": { 1146 + "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0", 1147 + "svelte": "^4.0.0 || ^5.0.0-next.0", 1148 + "vite": "^5.0.3 || ^6.0.0" 1149 + } 1150 + }, 1151 + "node_modules/@sveltejs/vite-plugin-svelte": { 1152 + "version": "5.0.3", 1153 + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-5.0.3.tgz", 1154 + "integrity": "sha512-MCFS6CrQDu1yGwspm4qtli0e63vaPCehf6V7pIMP15AsWgMKrqDGCPFF/0kn4SP0ii4aySu4Pa62+fIRGFMjgw==", 1155 + "dependencies": { 1156 + "@sveltejs/vite-plugin-svelte-inspector": "^4.0.1", 1157 + "debug": "^4.4.0", 1158 + "deepmerge": "^4.3.1", 1159 + "kleur": "^4.1.5", 1160 + "magic-string": "^0.30.15", 1161 + "vitefu": "^1.0.4" 1162 + }, 1163 + "engines": { 1164 + "node": "^18.0.0 || ^20.0.0 || >=22" 1165 + }, 1166 + "peerDependencies": { 1167 + "svelte": "^5.0.0", 1168 + "vite": "^6.0.0" 1169 + } 1170 + }, 1171 + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { 1172 + "version": "4.0.1", 1173 + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-4.0.1.tgz", 1174 + "integrity": "sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==", 1175 + "dependencies": { 1176 + "debug": "^4.3.7" 1177 + }, 1178 + "engines": { 1179 + "node": "^18.0.0 || ^20.0.0 || >=22" 1180 + }, 1181 + "peerDependencies": { 1182 + "@sveltejs/vite-plugin-svelte": "^5.0.0", 1183 + "svelte": "^5.0.0", 1184 + "vite": "^6.0.0" 1185 + } 1186 + }, 1187 + "node_modules/@swc/helpers": { 1188 + "version": "0.5.15", 1189 + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", 1190 + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", 1191 + "dependencies": { 1192 + "tslib": "^2.8.0" 1193 + } 1194 + }, 1195 + "node_modules/@tailwindcss/forms": { 1196 + "version": "0.5.10", 1197 + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz", 1198 + "integrity": "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==", 1199 + "dev": true, 1200 + "dependencies": { 1201 + "mini-svg-data-uri": "^1.2.3" 1202 + }, 1203 + "peerDependencies": { 1204 + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" 1205 + } 1206 + }, 1207 + "node_modules/@tailwindcss/typography": { 1208 + "version": "0.5.16", 1209 + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz", 1210 + "integrity": "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==", 1211 + "dev": true, 1212 + "dependencies": { 1213 + "lodash.castarray": "^4.4.0", 1214 + "lodash.isplainobject": "^4.0.6", 1215 + "lodash.merge": "^4.6.2", 1216 + "postcss-selector-parser": "6.0.10" 1217 + }, 1218 + "peerDependencies": { 1219 + "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" 1220 + } 1221 + }, 1222 + "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": { 1223 + "version": "6.0.10", 1224 + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", 1225 + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", 1226 + "dev": true, 1227 + "dependencies": { 1228 + "cssesc": "^3.0.0", 1229 + "util-deprecate": "^1.0.2" 1230 + }, 1231 + "engines": { 1232 + "node": ">=4" 1233 + } 1234 + }, 1235 + "node_modules/@threejs-kit/instanced-sprite-mesh": { 1236 + "version": "2.5.0", 1237 + "resolved": "https://registry.npmjs.org/@threejs-kit/instanced-sprite-mesh/-/instanced-sprite-mesh-2.5.0.tgz", 1238 + "integrity": "sha512-W4cRK7f1o15GtacvLi8h1022ySiMM5218eZJQYWHbVGKqpRezmj8hscdzgp4JFSCkRoAIdyIdLZg5U0Mtmcu/w==", 1239 + "dependencies": { 1240 + "diet-sprite": "^0.0.1", 1241 + "earcut": "^2.2.4", 1242 + "maath": "^0.10.7", 1243 + "three-instanced-uniforms-mesh": "^0.52.0", 1244 + "troika-three-utils": "^0.52.0" 1245 + }, 1246 + "peerDependencies": { 1247 + "three": ">=0.170.0" 1248 + } 1249 + }, 1250 + "node_modules/@threlte/core": { 1251 + "version": "8.0.1", 1252 + "resolved": "https://registry.npmjs.org/@threlte/core/-/core-8.0.1.tgz", 1253 + "integrity": "sha512-vy1xRQppJFNmfPTeiRQue+KmYFsbPgVhwuYXRTvVrwPeD2oYz43gxUeOpe1FACeGKxrxZykeKJF5ebVvl7gBxw==", 1254 + "dependencies": { 1255 + "mitt": "^3.0.1" 1256 + }, 1257 + "peerDependencies": { 1258 + "svelte": ">=5", 1259 + "three": ">=0.155" 1260 + } 1261 + }, 1262 + "node_modules/@threlte/extras": { 1263 + "version": "9.0.1", 1264 + "resolved": "https://registry.npmjs.org/@threlte/extras/-/extras-9.0.1.tgz", 1265 + "integrity": "sha512-xI0s5a/9NdBbUSaYCnTHfnVl44kZQUTuTPfzwv4gmMM2r2HewM5QsMDBBwBTcuVcYqkM9aUKl+5MWa20LnH/mg==", 1266 + "dependencies": { 1267 + "@threejs-kit/instanced-sprite-mesh": "^2.5.0", 1268 + "camera-controls": "^2.9.0", 1269 + "three-mesh-bvh": "^0.7.4", 1270 + "three-perf": "github:jerzakm/three-perf#three-kit-threlte-fork", 1271 + "three-viewport-gizmo": "^2.0.2", 1272 + "troika-three-text": "^0.50.3" 1273 + }, 1274 + "peerDependencies": { 1275 + "svelte": ">=5", 1276 + "three": ">=0.155" 1277 + } 1278 + }, 1279 + "node_modules/@tweenjs/tween.js": { 1280 + "version": "23.1.3", 1281 + "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-23.1.3.tgz", 1282 + "integrity": "sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==" 1283 + }, 1284 + "node_modules/@types/cookie": { 1285 + "version": "0.6.0", 1286 + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", 1287 + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" 1288 + }, 1289 + "node_modules/@types/estree": { 1290 + "version": "1.0.6", 1291 + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", 1292 + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" 1293 + }, 1294 + "node_modules/@types/json-schema": { 1295 + "version": "7.0.15", 1296 + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", 1297 + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", 1298 + "dev": true 1299 + }, 1300 + "node_modules/@types/stats.js": { 1301 + "version": "0.17.3", 1302 + "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.3.tgz", 1303 + "integrity": "sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==" 1304 + }, 1305 + "node_modules/@types/three": { 1306 + "version": "0.173.0", 1307 + "resolved": "https://registry.npmjs.org/@types/three/-/three-0.173.0.tgz", 1308 + "integrity": "sha512-KtNjfI/CRB6JVKIVeZM1R3GYDX2wkoV2itNcQu2j4d7qkhjGOuB+s2oF6jl9mztycDLGMtrAnJQYxInC8Bb20A==", 1309 + "dependencies": { 1310 + "@tweenjs/tween.js": "~23.1.3", 1311 + "@types/stats.js": "*", 1312 + "@types/webxr": "*", 1313 + "@webgpu/types": "*", 1314 + "fflate": "~0.8.2", 1315 + "meshoptimizer": "~0.18.1" 1316 + } 1317 + }, 1318 + "node_modules/@types/triple-beam": { 1319 + "version": "1.3.5", 1320 + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", 1321 + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" 1322 + }, 1323 + "node_modules/@types/webxr": { 1324 + "version": "0.5.21", 1325 + "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.21.tgz", 1326 + "integrity": "sha512-geZIAtLzjGmgY2JUi6VxXdCrTb99A7yP49lxLr2Nm/uIK0PkkxcEi4OGhoGDO4pxCf3JwGz2GiJL2Ej4K2bKaA==" 1327 + }, 1328 + "node_modules/@typescript-eslint/eslint-plugin": { 1329 + "version": "8.25.0", 1330 + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.25.0.tgz", 1331 + "integrity": "sha512-VM7bpzAe7JO/BFf40pIT1lJqS/z1F8OaSsUB3rpFJucQA4cOSuH2RVVVkFULN+En0Djgr29/jb4EQnedUo95KA==", 1332 + "dev": true, 1333 + "dependencies": { 1334 + "@eslint-community/regexpp": "^4.10.0", 1335 + "@typescript-eslint/scope-manager": "8.25.0", 1336 + "@typescript-eslint/type-utils": "8.25.0", 1337 + "@typescript-eslint/utils": "8.25.0", 1338 + "@typescript-eslint/visitor-keys": "8.25.0", 1339 + "graphemer": "^1.4.0", 1340 + "ignore": "^5.3.1", 1341 + "natural-compare": "^1.4.0", 1342 + "ts-api-utils": "^2.0.1" 1343 + }, 1344 + "engines": { 1345 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1346 + }, 1347 + "funding": { 1348 + "type": "opencollective", 1349 + "url": "https://opencollective.com/typescript-eslint" 1350 + }, 1351 + "peerDependencies": { 1352 + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", 1353 + "eslint": "^8.57.0 || ^9.0.0", 1354 + "typescript": ">=4.8.4 <5.8.0" 1355 + } 1356 + }, 1357 + "node_modules/@typescript-eslint/parser": { 1358 + "version": "8.25.0", 1359 + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.25.0.tgz", 1360 + "integrity": "sha512-4gbs64bnbSzu4FpgMiQ1A+D+urxkoJk/kqlDJ2W//5SygaEiAP2B4GoS7TEdxgwol2el03gckFV9lJ4QOMiiHg==", 1361 + "dev": true, 1362 + "dependencies": { 1363 + "@typescript-eslint/scope-manager": "8.25.0", 1364 + "@typescript-eslint/types": "8.25.0", 1365 + "@typescript-eslint/typescript-estree": "8.25.0", 1366 + "@typescript-eslint/visitor-keys": "8.25.0", 1367 + "debug": "^4.3.4" 1368 + }, 1369 + "engines": { 1370 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1371 + }, 1372 + "funding": { 1373 + "type": "opencollective", 1374 + "url": "https://opencollective.com/typescript-eslint" 1375 + }, 1376 + "peerDependencies": { 1377 + "eslint": "^8.57.0 || ^9.0.0", 1378 + "typescript": ">=4.8.4 <5.8.0" 1379 + } 1380 + }, 1381 + "node_modules/@typescript-eslint/scope-manager": { 1382 + "version": "8.25.0", 1383 + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.25.0.tgz", 1384 + "integrity": "sha512-6PPeiKIGbgStEyt4NNXa2ru5pMzQ8OYKO1hX1z53HMomrmiSB+R5FmChgQAP1ro8jMtNawz+TRQo/cSXrauTpg==", 1385 + "dev": true, 1386 + "dependencies": { 1387 + "@typescript-eslint/types": "8.25.0", 1388 + "@typescript-eslint/visitor-keys": "8.25.0" 1389 + }, 1390 + "engines": { 1391 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1392 + }, 1393 + "funding": { 1394 + "type": "opencollective", 1395 + "url": "https://opencollective.com/typescript-eslint" 1396 + } 1397 + }, 1398 + "node_modules/@typescript-eslint/type-utils": { 1399 + "version": "8.25.0", 1400 + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.25.0.tgz", 1401 + "integrity": "sha512-d77dHgHWnxmXOPJuDWO4FDWADmGQkN5+tt6SFRZz/RtCWl4pHgFl3+WdYCn16+3teG09DY6XtEpf3gGD0a186g==", 1402 + "dev": true, 1403 + "dependencies": { 1404 + "@typescript-eslint/typescript-estree": "8.25.0", 1405 + "@typescript-eslint/utils": "8.25.0", 1406 + "debug": "^4.3.4", 1407 + "ts-api-utils": "^2.0.1" 1408 + }, 1409 + "engines": { 1410 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1411 + }, 1412 + "funding": { 1413 + "type": "opencollective", 1414 + "url": "https://opencollective.com/typescript-eslint" 1415 + }, 1416 + "peerDependencies": { 1417 + "eslint": "^8.57.0 || ^9.0.0", 1418 + "typescript": ">=4.8.4 <5.8.0" 1419 + } 1420 + }, 1421 + "node_modules/@typescript-eslint/types": { 1422 + "version": "8.25.0", 1423 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.25.0.tgz", 1424 + "integrity": "sha512-+vUe0Zb4tkNgznQwicsvLUJgZIRs6ITeWSCclX1q85pR1iOiaj+4uZJIUp//Z27QWu5Cseiw3O3AR8hVpax7Aw==", 1425 + "dev": true, 1426 + "engines": { 1427 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1428 + }, 1429 + "funding": { 1430 + "type": "opencollective", 1431 + "url": "https://opencollective.com/typescript-eslint" 1432 + } 1433 + }, 1434 + "node_modules/@typescript-eslint/typescript-estree": { 1435 + "version": "8.25.0", 1436 + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.25.0.tgz", 1437 + "integrity": "sha512-ZPaiAKEZ6Blt/TPAx5Ot0EIB/yGtLI2EsGoY6F7XKklfMxYQyvtL+gT/UCqkMzO0BVFHLDlzvFqQzurYahxv9Q==", 1438 + "dev": true, 1439 + "dependencies": { 1440 + "@typescript-eslint/types": "8.25.0", 1441 + "@typescript-eslint/visitor-keys": "8.25.0", 1442 + "debug": "^4.3.4", 1443 + "fast-glob": "^3.3.2", 1444 + "is-glob": "^4.0.3", 1445 + "minimatch": "^9.0.4", 1446 + "semver": "^7.6.0", 1447 + "ts-api-utils": "^2.0.1" 1448 + }, 1449 + "engines": { 1450 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1451 + }, 1452 + "funding": { 1453 + "type": "opencollective", 1454 + "url": "https://opencollective.com/typescript-eslint" 1455 + }, 1456 + "peerDependencies": { 1457 + "typescript": ">=4.8.4 <5.8.0" 1458 + } 1459 + }, 1460 + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { 1461 + "version": "2.0.1", 1462 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 1463 + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 1464 + "dev": true, 1465 + "dependencies": { 1466 + "balanced-match": "^1.0.0" 1467 + } 1468 + }, 1469 + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { 1470 + "version": "9.0.5", 1471 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 1472 + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 1473 + "dev": true, 1474 + "dependencies": { 1475 + "brace-expansion": "^2.0.1" 1476 + }, 1477 + "engines": { 1478 + "node": ">=16 || 14 >=14.17" 1479 + }, 1480 + "funding": { 1481 + "url": "https://github.com/sponsors/isaacs" 1482 + } 1483 + }, 1484 + "node_modules/@typescript-eslint/utils": { 1485 + "version": "8.25.0", 1486 + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.25.0.tgz", 1487 + "integrity": "sha512-syqRbrEv0J1wywiLsK60XzHnQe/kRViI3zwFALrNEgnntn1l24Ra2KvOAWwWbWZ1lBZxZljPDGOq967dsl6fkA==", 1488 + "dev": true, 1489 + "dependencies": { 1490 + "@eslint-community/eslint-utils": "^4.4.0", 1491 + "@typescript-eslint/scope-manager": "8.25.0", 1492 + "@typescript-eslint/types": "8.25.0", 1493 + "@typescript-eslint/typescript-estree": "8.25.0" 1494 + }, 1495 + "engines": { 1496 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1497 + }, 1498 + "funding": { 1499 + "type": "opencollective", 1500 + "url": "https://opencollective.com/typescript-eslint" 1501 + }, 1502 + "peerDependencies": { 1503 + "eslint": "^8.57.0 || ^9.0.0", 1504 + "typescript": ">=4.8.4 <5.8.0" 1505 + } 1506 + }, 1507 + "node_modules/@typescript-eslint/visitor-keys": { 1508 + "version": "8.25.0", 1509 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.25.0.tgz", 1510 + "integrity": "sha512-kCYXKAum9CecGVHGij7muybDfTS2sD3t0L4bJsEZLkyrXUImiCTq1M3LG2SRtOhiHFwMR9wAFplpT6XHYjTkwQ==", 1511 + "dev": true, 1512 + "dependencies": { 1513 + "@typescript-eslint/types": "8.25.0", 1514 + "eslint-visitor-keys": "^4.2.0" 1515 + }, 1516 + "engines": { 1517 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1518 + }, 1519 + "funding": { 1520 + "type": "opencollective", 1521 + "url": "https://opencollective.com/typescript-eslint" 1522 + } 1523 + }, 1524 + "node_modules/@webgpu/types": { 1525 + "version": "0.1.54", 1526 + "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.54.tgz", 1527 + "integrity": "sha512-81oaalC8LFrXjhsczomEQ0u3jG+TqE6V9QHLA8GNZq/Rnot0KDugu3LhSYSlie8tSdooAN1Hov05asrUUp9qgg==" 1528 + }, 1529 + "node_modules/acorn": { 1530 + "version": "8.14.0", 1531 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", 1532 + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", 1533 + "bin": { 1534 + "acorn": "bin/acorn" 1535 + }, 1536 + "engines": { 1537 + "node": ">=0.4.0" 1538 + } 1539 + }, 1540 + "node_modules/acorn-jsx": { 1541 + "version": "5.3.2", 1542 + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 1543 + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 1544 + "dev": true, 1545 + "peerDependencies": { 1546 + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 1547 + } 1548 + }, 1549 + "node_modules/acorn-typescript": { 1550 + "version": "1.4.13", 1551 + "resolved": "https://registry.npmjs.org/acorn-typescript/-/acorn-typescript-1.4.13.tgz", 1552 + "integrity": "sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==", 1553 + "peerDependencies": { 1554 + "acorn": ">=8.9.0" 1555 + } 1556 + }, 1557 + "node_modules/ajv": { 1558 + "version": "6.12.6", 1559 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1560 + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1561 + "dev": true, 1562 + "dependencies": { 1563 + "fast-deep-equal": "^3.1.1", 1564 + "fast-json-stable-stringify": "^2.0.0", 1565 + "json-schema-traverse": "^0.4.1", 1566 + "uri-js": "^4.2.2" 1567 + }, 1568 + "funding": { 1569 + "type": "github", 1570 + "url": "https://github.com/sponsors/epoberezkin" 1571 + } 1572 + }, 1573 + "node_modules/ansi-regex": { 1574 + "version": "6.1.0", 1575 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 1576 + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 1577 + "engines": { 1578 + "node": ">=12" 1579 + }, 1580 + "funding": { 1581 + "url": "https://github.com/chalk/ansi-regex?sponsor=1" 1582 + } 1583 + }, 1584 + "node_modules/ansi-styles": { 1585 + "version": "4.3.0", 1586 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1587 + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1588 + "dependencies": { 1589 + "color-convert": "^2.0.1" 1590 + }, 1591 + "engines": { 1592 + "node": ">=8" 1593 + }, 1594 + "funding": { 1595 + "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1596 + } 1597 + }, 1598 + "node_modules/any-promise": { 1599 + "version": "1.3.0", 1600 + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 1601 + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" 1602 + }, 1603 + "node_modules/anymatch": { 1604 + "version": "3.1.3", 1605 + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 1606 + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 1607 + "dependencies": { 1608 + "normalize-path": "^3.0.0", 1609 + "picomatch": "^2.0.4" 1610 + }, 1611 + "engines": { 1612 + "node": ">= 8" 1613 + } 1614 + }, 1615 + "node_modules/anymatch/node_modules/picomatch": { 1616 + "version": "2.3.1", 1617 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1618 + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1619 + "engines": { 1620 + "node": ">=8.6" 1621 + }, 1622 + "funding": { 1623 + "url": "https://github.com/sponsors/jonschlinkert" 1624 + } 1625 + }, 1626 + "node_modules/arg": { 1627 + "version": "5.0.2", 1628 + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 1629 + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" 1630 + }, 1631 + "node_modules/argparse": { 1632 + "version": "2.0.1", 1633 + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1634 + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1635 + "dev": true 1636 + }, 1637 + "node_modules/aria-query": { 1638 + "version": "5.3.2", 1639 + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", 1640 + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", 1641 + "engines": { 1642 + "node": ">= 0.4" 1643 + } 1644 + }, 1645 + "node_modules/array-source": { 1646 + "version": "0.0.4", 1647 + "resolved": "https://registry.npmjs.org/array-source/-/array-source-0.0.4.tgz", 1648 + "integrity": "sha512-frNdc+zBn80vipY+GdcJkLEbMWj3xmzArYApmUGxoiV8uAu/ygcs9icPdsGdA26h0MkHUMW6EN2piIvVx+M5Mw==" 1649 + }, 1650 + "node_modules/async": { 1651 + "version": "3.2.6", 1652 + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", 1653 + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" 1654 + }, 1655 + "node_modules/audit": { 1656 + "version": "0.0.6", 1657 + "resolved": "https://registry.npmjs.org/audit/-/audit-0.0.6.tgz", 1658 + "integrity": "sha512-xgv3Y3RIYE00N2/xk10VLlwFd1kjc7FRaX1vC8+CsOfDRe53a06vOSkp91BOSNijZfddYum47a1Fvju/2+JPcw==", 1659 + "engines": { 1660 + "node": ">= 0.5.0" 1661 + } 1662 + }, 1663 + "node_modules/autoprefixer": { 1664 + "version": "10.4.20", 1665 + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", 1666 + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", 1667 + "dev": true, 1668 + "funding": [ 1669 + { 1670 + "type": "opencollective", 1671 + "url": "https://opencollective.com/postcss/" 1672 + }, 1673 + { 1674 + "type": "tidelift", 1675 + "url": "https://tidelift.com/funding/github/npm/autoprefixer" 1676 + }, 1677 + { 1678 + "type": "github", 1679 + "url": "https://github.com/sponsors/ai" 1680 + } 1681 + ], 1682 + "dependencies": { 1683 + "browserslist": "^4.23.3", 1684 + "caniuse-lite": "^1.0.30001646", 1685 + "fraction.js": "^4.3.7", 1686 + "normalize-range": "^0.1.2", 1687 + "picocolors": "^1.0.1", 1688 + "postcss-value-parser": "^4.2.0" 1689 + }, 1690 + "bin": { 1691 + "autoprefixer": "bin/autoprefixer" 1692 + }, 1693 + "engines": { 1694 + "node": "^10 || ^12 || >=14" 1695 + }, 1696 + "peerDependencies": { 1697 + "postcss": "^8.1.0" 1698 + } 1699 + }, 1700 + "node_modules/axobject-query": { 1701 + "version": "4.1.0", 1702 + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", 1703 + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", 1704 + "engines": { 1705 + "node": ">= 0.4" 1706 + } 1707 + }, 1708 + "node_modules/balanced-match": { 1709 + "version": "1.0.2", 1710 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1711 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 1712 + }, 1713 + "node_modules/bidi-js": { 1714 + "version": "1.0.3", 1715 + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", 1716 + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", 1717 + "dependencies": { 1718 + "require-from-string": "^2.0.2" 1719 + } 1720 + }, 1721 + "node_modules/binary-extensions": { 1722 + "version": "2.3.0", 1723 + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", 1724 + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", 1725 + "engines": { 1726 + "node": ">=8" 1727 + }, 1728 + "funding": { 1729 + "url": "https://github.com/sponsors/sindresorhus" 1730 + } 1731 + }, 1732 + "node_modules/bits-ui": { 1733 + "version": "1.3.4", 1734 + "resolved": "https://registry.npmjs.org/bits-ui/-/bits-ui-1.3.4.tgz", 1735 + "integrity": "sha512-hmrYbmb5D3ecRHP9GWTlkoo/9IGsPwMCmy3dAPKAfztG/NhWk49JcpuPbWi/eIggetVnv5nYrFp3N8zWscePCA==", 1736 + "dependencies": { 1737 + "@floating-ui/core": "^1.6.4", 1738 + "@floating-ui/dom": "^1.6.7", 1739 + "@internationalized/date": "^3.5.6", 1740 + "esm-env": "^1.1.2", 1741 + "runed": "^0.23.2", 1742 + "svelte-toolbelt": "^0.7.1", 1743 + "tabbable": "^6.2.0" 1744 + }, 1745 + "engines": { 1746 + "node": ">=18", 1747 + "pnpm": ">=8.7.0" 1748 + }, 1749 + "funding": { 1750 + "url": "https://github.com/sponsors/huntabyte" 1751 + }, 1752 + "peerDependencies": { 1753 + "svelte": "^5.11.0" 1754 + } 1755 + }, 1756 + "node_modules/brace-expansion": { 1757 + "version": "1.1.11", 1758 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1759 + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1760 + "dev": true, 1761 + "dependencies": { 1762 + "balanced-match": "^1.0.0", 1763 + "concat-map": "0.0.1" 1764 + } 1765 + }, 1766 + "node_modules/braces": { 1767 + "version": "3.0.3", 1768 + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 1769 + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 1770 + "dependencies": { 1771 + "fill-range": "^7.1.1" 1772 + }, 1773 + "engines": { 1774 + "node": ">=8" 1775 + } 1776 + }, 1777 + "node_modules/browserslist": { 1778 + "version": "4.24.4", 1779 + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", 1780 + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", 1781 + "dev": true, 1782 + "funding": [ 1783 + { 1784 + "type": "opencollective", 1785 + "url": "https://opencollective.com/browserslist" 1786 + }, 1787 + { 1788 + "type": "tidelift", 1789 + "url": "https://tidelift.com/funding/github/npm/browserslist" 1790 + }, 1791 + { 1792 + "type": "github", 1793 + "url": "https://github.com/sponsors/ai" 1794 + } 1795 + ], 1796 + "dependencies": { 1797 + "caniuse-lite": "^1.0.30001688", 1798 + "electron-to-chromium": "^1.5.73", 1799 + "node-releases": "^2.0.19", 1800 + "update-browserslist-db": "^1.1.1" 1801 + }, 1802 + "bin": { 1803 + "browserslist": "cli.js" 1804 + }, 1805 + "engines": { 1806 + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 1807 + } 1808 + }, 1809 + "node_modules/build": { 1810 + "version": "0.1.4", 1811 + "resolved": "https://registry.npmjs.org/build/-/build-0.1.4.tgz", 1812 + "integrity": "sha512-KwbDJ/zrsU8KZRRMfoURG14cKIAStUlS8D5jBDvtrZbwO5FEkYqc3oB8HIhRiyD64A48w1lc+sOmQ+mmBw5U/Q==", 1813 + "dependencies": { 1814 + "cssmin": "0.3.x", 1815 + "jsmin": "1.x", 1816 + "jxLoader": "*", 1817 + "moo-server": "*", 1818 + "promised-io": "*", 1819 + "timespan": "2.x", 1820 + "uglify-js": "1.x", 1821 + "walker": "1.x", 1822 + "winston": "*", 1823 + "wrench": "1.3.x" 1824 + }, 1825 + "engines": { 1826 + "node": ">v0.4.12" 1827 + } 1828 + }, 1829 + "node_modules/callsites": { 1830 + "version": "3.1.0", 1831 + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1832 + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1833 + "dev": true, 1834 + "engines": { 1835 + "node": ">=6" 1836 + } 1837 + }, 1838 + "node_modules/camelcase-css": { 1839 + "version": "2.0.1", 1840 + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 1841 + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 1842 + "engines": { 1843 + "node": ">= 6" 1844 + } 1845 + }, 1846 + "node_modules/camera-controls": { 1847 + "version": "2.10.0", 1848 + "resolved": "https://registry.npmjs.org/camera-controls/-/camera-controls-2.10.0.tgz", 1849 + "integrity": "sha512-vBQ5Daxv4KRsn07U/VqkPxoqD8U+S++0oq5NLf4HevMuh/BDta3rg49e/P564AMzFPBePQeXDKOkiIezRgyDwg==", 1850 + "peerDependencies": { 1851 + "three": ">=0.126.1" 1852 + } 1853 + }, 1854 + "node_modules/caniuse-lite": { 1855 + "version": "1.0.30001701", 1856 + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001701.tgz", 1857 + "integrity": "sha512-faRs/AW3jA9nTwmJBSO1PQ6L/EOgsB5HMQQq4iCu5zhPgVVgO/pZRHlmatwijZKetFw8/Pr4q6dEN8sJuq8qTw==", 1858 + "dev": true, 1859 + "funding": [ 1860 + { 1861 + "type": "opencollective", 1862 + "url": "https://opencollective.com/browserslist" 1863 + }, 1864 + { 1865 + "type": "tidelift", 1866 + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 1867 + }, 1868 + { 1869 + "type": "github", 1870 + "url": "https://github.com/sponsors/ai" 1871 + } 1872 + ] 1873 + }, 1874 + "node_modules/chalk": { 1875 + "version": "4.1.2", 1876 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1877 + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1878 + "dev": true, 1879 + "dependencies": { 1880 + "ansi-styles": "^4.1.0", 1881 + "supports-color": "^7.1.0" 1882 + }, 1883 + "engines": { 1884 + "node": ">=10" 1885 + }, 1886 + "funding": { 1887 + "url": "https://github.com/chalk/chalk?sponsor=1" 1888 + } 1889 + }, 1890 + "node_modules/chokidar": { 1891 + "version": "4.0.3", 1892 + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", 1893 + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", 1894 + "dev": true, 1895 + "dependencies": { 1896 + "readdirp": "^4.0.1" 1897 + }, 1898 + "engines": { 1899 + "node": ">= 14.16.0" 1900 + }, 1901 + "funding": { 1902 + "url": "https://paulmillr.com/funding/" 1903 + } 1904 + }, 1905 + "node_modules/clsx": { 1906 + "version": "2.1.1", 1907 + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", 1908 + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", 1909 + "engines": { 1910 + "node": ">=6" 1911 + } 1912 + }, 1913 + "node_modules/color": { 1914 + "version": "4.2.3", 1915 + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", 1916 + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", 1917 + "dependencies": { 1918 + "color-convert": "^2.0.1", 1919 + "color-string": "^1.9.0" 1920 + }, 1921 + "engines": { 1922 + "node": ">=12.5.0" 1923 + } 1924 + }, 1925 + "node_modules/color-convert": { 1926 + "version": "2.0.1", 1927 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1928 + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1929 + "dependencies": { 1930 + "color-name": "~1.1.4" 1931 + }, 1932 + "engines": { 1933 + "node": ">=7.0.0" 1934 + } 1935 + }, 1936 + "node_modules/color-name": { 1937 + "version": "1.1.4", 1938 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1939 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 1940 + }, 1941 + "node_modules/color-string": { 1942 + "version": "1.9.1", 1943 + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", 1944 + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", 1945 + "dependencies": { 1946 + "color-name": "^1.0.0", 1947 + "simple-swizzle": "^0.2.2" 1948 + } 1949 + }, 1950 + "node_modules/colorspace": { 1951 + "version": "1.1.4", 1952 + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", 1953 + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", 1954 + "dependencies": { 1955 + "color": "^3.1.3", 1956 + "text-hex": "1.0.x" 1957 + } 1958 + }, 1959 + "node_modules/colorspace/node_modules/color": { 1960 + "version": "3.2.1", 1961 + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", 1962 + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", 1963 + "dependencies": { 1964 + "color-convert": "^1.9.3", 1965 + "color-string": "^1.6.0" 1966 + } 1967 + }, 1968 + "node_modules/colorspace/node_modules/color-convert": { 1969 + "version": "1.9.3", 1970 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1971 + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1972 + "dependencies": { 1973 + "color-name": "1.1.3" 1974 + } 1975 + }, 1976 + "node_modules/colorspace/node_modules/color-name": { 1977 + "version": "1.1.3", 1978 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1979 + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" 1980 + }, 1981 + "node_modules/commander": { 1982 + "version": "4.1.1", 1983 + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", 1984 + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", 1985 + "engines": { 1986 + "node": ">= 6" 1987 + } 1988 + }, 1989 + "node_modules/concat-map": { 1990 + "version": "0.0.1", 1991 + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1992 + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1993 + "dev": true 1994 + }, 1995 + "node_modules/cookie": { 1996 + "version": "0.6.0", 1997 + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", 1998 + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", 1999 + "engines": { 2000 + "node": ">= 0.6" 2001 + } 2002 + }, 2003 + "node_modules/core-js": { 2004 + "version": "3.40.0", 2005 + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.40.0.tgz", 2006 + "integrity": "sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ==", 2007 + "hasInstallScript": true, 2008 + "funding": { 2009 + "type": "opencollective", 2010 + "url": "https://opencollective.com/core-js" 2011 + } 2012 + }, 2013 + "node_modules/cross-spawn": { 2014 + "version": "7.0.6", 2015 + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 2016 + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 2017 + "dependencies": { 2018 + "path-key": "^3.1.0", 2019 + "shebang-command": "^2.0.0", 2020 + "which": "^2.0.1" 2021 + }, 2022 + "engines": { 2023 + "node": ">= 8" 2024 + } 2025 + }, 2026 + "node_modules/cssesc": { 2027 + "version": "3.0.0", 2028 + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 2029 + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 2030 + "bin": { 2031 + "cssesc": "bin/cssesc" 2032 + }, 2033 + "engines": { 2034 + "node": ">=4" 2035 + } 2036 + }, 2037 + "node_modules/cssmin": { 2038 + "version": "0.3.2", 2039 + "resolved": "https://registry.npmjs.org/cssmin/-/cssmin-0.3.2.tgz", 2040 + "integrity": "sha512-bynxGIAJ8ybrnFobjsQotIjA8HFDDgPwbeUWNXXXfR+B4f9kkxdcUyagJoQCSUOfMV+ZZ6bMn8bvbozlCzUGwQ==", 2041 + "bin": { 2042 + "cssmin": "bin/cssmin" 2043 + } 2044 + }, 2045 + "node_modules/culori": { 2046 + "version": "4.0.1", 2047 + "resolved": "https://registry.npmjs.org/culori/-/culori-4.0.1.tgz", 2048 + "integrity": "sha512-LSnjA6HuIUOlkfKVbzi2OlToZE8OjFi667JWN9qNymXVXzGDmvuP60SSgC+e92sd7B7158f7Fy3Mb6rXS5EDPw==", 2049 + "engines": { 2050 + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 2051 + } 2052 + }, 2053 + "node_modules/custom-event-polyfill": { 2054 + "version": "1.0.7", 2055 + "resolved": "https://registry.npmjs.org/custom-event-polyfill/-/custom-event-polyfill-1.0.7.tgz", 2056 + "integrity": "sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w==" 2057 + }, 2058 + "node_modules/d3-array": { 2059 + "version": "3.2.4", 2060 + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", 2061 + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", 2062 + "dependencies": { 2063 + "internmap": "1 - 2" 2064 + }, 2065 + "engines": { 2066 + "node": ">=12" 2067 + } 2068 + }, 2069 + "node_modules/d3-color": { 2070 + "version": "3.1.0", 2071 + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", 2072 + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", 2073 + "engines": { 2074 + "node": ">=12" 2075 + } 2076 + }, 2077 + "node_modules/d3-delaunay": { 2078 + "version": "6.0.4", 2079 + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", 2080 + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", 2081 + "dependencies": { 2082 + "delaunator": "5" 2083 + }, 2084 + "engines": { 2085 + "node": ">=12" 2086 + } 2087 + }, 2088 + "node_modules/d3-dispatch": { 2089 + "version": "3.0.1", 2090 + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", 2091 + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", 2092 + "engines": { 2093 + "node": ">=12" 2094 + } 2095 + }, 2096 + "node_modules/d3-dsv": { 2097 + "version": "3.0.1", 2098 + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", 2099 + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", 2100 + "dependencies": { 2101 + "commander": "7", 2102 + "iconv-lite": "0.6", 2103 + "rw": "1" 2104 + }, 2105 + "bin": { 2106 + "csv2json": "bin/dsv2json.js", 2107 + "csv2tsv": "bin/dsv2dsv.js", 2108 + "dsv2dsv": "bin/dsv2dsv.js", 2109 + "dsv2json": "bin/dsv2json.js", 2110 + "json2csv": "bin/json2dsv.js", 2111 + "json2dsv": "bin/json2dsv.js", 2112 + "json2tsv": "bin/json2dsv.js", 2113 + "tsv2csv": "bin/dsv2dsv.js", 2114 + "tsv2json": "bin/dsv2json.js" 2115 + }, 2116 + "engines": { 2117 + "node": ">=12" 2118 + } 2119 + }, 2120 + "node_modules/d3-dsv/node_modules/commander": { 2121 + "version": "7.2.0", 2122 + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", 2123 + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", 2124 + "engines": { 2125 + "node": ">= 10" 2126 + } 2127 + }, 2128 + "node_modules/d3-force": { 2129 + "version": "3.0.0", 2130 + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", 2131 + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", 2132 + "dependencies": { 2133 + "d3-dispatch": "1 - 3", 2134 + "d3-quadtree": "1 - 3", 2135 + "d3-timer": "1 - 3" 2136 + }, 2137 + "engines": { 2138 + "node": ">=12" 2139 + } 2140 + }, 2141 + "node_modules/d3-format": { 2142 + "version": "3.1.0", 2143 + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", 2144 + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", 2145 + "engines": { 2146 + "node": ">=12" 2147 + } 2148 + }, 2149 + "node_modules/d3-geo": { 2150 + "version": "3.1.1", 2151 + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", 2152 + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", 2153 + "dependencies": { 2154 + "d3-array": "2.5.0 - 3" 2155 + }, 2156 + "engines": { 2157 + "node": ">=12" 2158 + } 2159 + }, 2160 + "node_modules/d3-geo-voronoi": { 2161 + "version": "2.1.0", 2162 + "resolved": "https://registry.npmjs.org/d3-geo-voronoi/-/d3-geo-voronoi-2.1.0.tgz", 2163 + "integrity": "sha512-kqE4yYuOjPbKdBXG0xztCacPwkVSK2REF1opSNrnqqtXJmNcM++UbwQ8SxvwP6IQTj9RvIjjK4qeiVsEfj0Z2Q==", 2164 + "dependencies": { 2165 + "d3-array": "3", 2166 + "d3-delaunay": "6", 2167 + "d3-geo": "3", 2168 + "d3-tricontour": "1" 2169 + }, 2170 + "engines": { 2171 + "node": ">=12" 2172 + } 2173 + }, 2174 + "node_modules/d3-hierarchy": { 2175 + "version": "3.1.2", 2176 + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", 2177 + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", 2178 + "engines": { 2179 + "node": ">=12" 2180 + } 2181 + }, 2182 + "node_modules/d3-interpolate": { 2183 + "version": "3.0.1", 2184 + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", 2185 + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", 2186 + "dependencies": { 2187 + "d3-color": "1 - 3" 2188 + }, 2189 + "engines": { 2190 + "node": ">=12" 2191 + } 2192 + }, 2193 + "node_modules/d3-interpolate-path": { 2194 + "version": "2.3.0", 2195 + "resolved": "https://registry.npmjs.org/d3-interpolate-path/-/d3-interpolate-path-2.3.0.tgz", 2196 + "integrity": "sha512-tZYtGXxBmbgHsIc9Wms6LS5u4w6KbP8C09a4/ZYc4KLMYYqub57rRBUgpUr2CIarIrJEpdAWWxWQvofgaMpbKQ==" 2197 + }, 2198 + "node_modules/d3-path": { 2199 + "version": "3.1.0", 2200 + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", 2201 + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", 2202 + "engines": { 2203 + "node": ">=12" 2204 + } 2205 + }, 2206 + "node_modules/d3-quadtree": { 2207 + "version": "3.0.1", 2208 + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", 2209 + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", 2210 + "engines": { 2211 + "node": ">=12" 2212 + } 2213 + }, 2214 + "node_modules/d3-random": { 2215 + "version": "3.0.1", 2216 + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", 2217 + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", 2218 + "engines": { 2219 + "node": ">=12" 2220 + } 2221 + }, 2222 + "node_modules/d3-sankey": { 2223 + "version": "0.12.3", 2224 + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", 2225 + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", 2226 + "dependencies": { 2227 + "d3-array": "1 - 2", 2228 + "d3-shape": "^1.2.0" 2229 + } 2230 + }, 2231 + "node_modules/d3-sankey/node_modules/d3-array": { 2232 + "version": "2.12.1", 2233 + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", 2234 + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", 2235 + "dependencies": { 2236 + "internmap": "^1.0.0" 2237 + } 2238 + }, 2239 + "node_modules/d3-sankey/node_modules/d3-path": { 2240 + "version": "1.0.9", 2241 + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", 2242 + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" 2243 + }, 2244 + "node_modules/d3-sankey/node_modules/d3-shape": { 2245 + "version": "1.3.7", 2246 + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", 2247 + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", 2248 + "dependencies": { 2249 + "d3-path": "1" 2250 + } 2251 + }, 2252 + "node_modules/d3-sankey/node_modules/internmap": { 2253 + "version": "1.0.1", 2254 + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", 2255 + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" 2256 + }, 2257 + "node_modules/d3-scale": { 2258 + "version": "4.0.2", 2259 + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", 2260 + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", 2261 + "dependencies": { 2262 + "d3-array": "2.10.0 - 3", 2263 + "d3-format": "1 - 3", 2264 + "d3-interpolate": "1.2.0 - 3", 2265 + "d3-time": "2.1.1 - 3", 2266 + "d3-time-format": "2 - 4" 2267 + }, 2268 + "engines": { 2269 + "node": ">=12" 2270 + } 2271 + }, 2272 + "node_modules/d3-scale-chromatic": { 2273 + "version": "3.1.0", 2274 + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", 2275 + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", 2276 + "dependencies": { 2277 + "d3-color": "1 - 3", 2278 + "d3-interpolate": "1 - 3" 2279 + }, 2280 + "engines": { 2281 + "node": ">=12" 2282 + } 2283 + }, 2284 + "node_modules/d3-shape": { 2285 + "version": "3.2.0", 2286 + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", 2287 + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", 2288 + "dependencies": { 2289 + "d3-path": "^3.1.0" 2290 + }, 2291 + "engines": { 2292 + "node": ">=12" 2293 + } 2294 + }, 2295 + "node_modules/d3-tile": { 2296 + "version": "1.0.0", 2297 + "resolved": "https://registry.npmjs.org/d3-tile/-/d3-tile-1.0.0.tgz", 2298 + "integrity": "sha512-79fnTKpPMPDS5xQ0xuS9ir0165NEwwkFpe/DSOmc2Gl9ldYzKKRDWogmTTE8wAJ8NA7PMapNfEcyKhI9Lxdu5Q==" 2299 + }, 2300 + "node_modules/d3-time": { 2301 + "version": "3.1.0", 2302 + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", 2303 + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", 2304 + "dependencies": { 2305 + "d3-array": "2 - 3" 2306 + }, 2307 + "engines": { 2308 + "node": ">=12" 2309 + } 2310 + }, 2311 + "node_modules/d3-time-format": { 2312 + "version": "4.1.0", 2313 + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", 2314 + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", 2315 + "dependencies": { 2316 + "d3-time": "1 - 3" 2317 + }, 2318 + "engines": { 2319 + "node": ">=12" 2320 + } 2321 + }, 2322 + "node_modules/d3-timer": { 2323 + "version": "3.0.1", 2324 + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", 2325 + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", 2326 + "engines": { 2327 + "node": ">=12" 2328 + } 2329 + }, 2330 + "node_modules/d3-tricontour": { 2331 + "version": "1.0.2", 2332 + "resolved": "https://registry.npmjs.org/d3-tricontour/-/d3-tricontour-1.0.2.tgz", 2333 + "integrity": "sha512-HIRxHzHagPtUPNabjOlfcyismJYIsc+Xlq4mlsts4e8eAcwyq9Tgk/sYdyhlBpQ0MHwVquc/8j+e29YjXnmxeA==", 2334 + "dependencies": { 2335 + "d3-delaunay": "6", 2336 + "d3-scale": "4" 2337 + }, 2338 + "engines": { 2339 + "node": ">=12" 2340 + } 2341 + }, 2342 + "node_modules/date-fns": { 2343 + "version": "4.1.0", 2344 + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", 2345 + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", 2346 + "funding": { 2347 + "type": "github", 2348 + "url": "https://github.com/sponsors/kossnocorp" 2349 + } 2350 + }, 2351 + "node_modules/debug": { 2352 + "version": "4.4.0", 2353 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", 2354 + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", 2355 + "dependencies": { 2356 + "ms": "^2.1.3" 2357 + }, 2358 + "engines": { 2359 + "node": ">=6.0" 2360 + }, 2361 + "peerDependenciesMeta": { 2362 + "supports-color": { 2363 + "optional": true 2364 + } 2365 + } 2366 + }, 2367 + "node_modules/deep-is": { 2368 + "version": "0.1.4", 2369 + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 2370 + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 2371 + "dev": true 2372 + }, 2373 + "node_modules/deepmerge": { 2374 + "version": "4.3.1", 2375 + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", 2376 + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", 2377 + "engines": { 2378 + "node": ">=0.10.0" 2379 + } 2380 + }, 2381 + "node_modules/delaunator": { 2382 + "version": "5.0.1", 2383 + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", 2384 + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", 2385 + "dependencies": { 2386 + "robust-predicates": "^3.0.2" 2387 + } 2388 + }, 2389 + "node_modules/devalue": { 2390 + "version": "5.1.1", 2391 + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz", 2392 + "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==" 2393 + }, 2394 + "node_modules/didyoumean": { 2395 + "version": "1.2.2", 2396 + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 2397 + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" 2398 + }, 2399 + "node_modules/diet-sprite": { 2400 + "version": "0.0.1", 2401 + "resolved": "https://registry.npmjs.org/diet-sprite/-/diet-sprite-0.0.1.tgz", 2402 + "integrity": "sha512-zSHI2WDAn1wJqJYxcmjWfJv3Iw8oL9reQIbEyx2x2/EZ4/qmUTIo8/5qOCurnAcq61EwtJJaZ0XTy2NRYqpB5A==" 2403 + }, 2404 + "node_modules/dlv": { 2405 + "version": "1.1.3", 2406 + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 2407 + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" 2408 + }, 2409 + "node_modules/earcut": { 2410 + "version": "2.2.4", 2411 + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", 2412 + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" 2413 + }, 2414 + "node_modules/eastasianwidth": { 2415 + "version": "0.2.0", 2416 + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 2417 + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" 2418 + }, 2419 + "node_modules/electron-to-chromium": { 2420 + "version": "1.5.105", 2421 + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.105.tgz", 2422 + "integrity": "sha512-ccp7LocdXx3yBhwiG0qTQ7XFrK48Ua2pxIxBdJO8cbddp/MvbBtPFzvnTchtyHQTsgqqczO8cdmAIbpMa0u2+g==", 2423 + "dev": true 2424 + }, 2425 + "node_modules/emoji-regex": { 2426 + "version": "9.2.2", 2427 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 2428 + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" 2429 + }, 2430 + "node_modules/enabled": { 2431 + "version": "2.0.0", 2432 + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", 2433 + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" 2434 + }, 2435 + "node_modules/esbuild": { 2436 + "version": "0.25.0", 2437 + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", 2438 + "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", 2439 + "hasInstallScript": true, 2440 + "bin": { 2441 + "esbuild": "bin/esbuild" 2442 + }, 2443 + "engines": { 2444 + "node": ">=18" 2445 + }, 2446 + "optionalDependencies": { 2447 + "@esbuild/aix-ppc64": "0.25.0", 2448 + "@esbuild/android-arm": "0.25.0", 2449 + "@esbuild/android-arm64": "0.25.0", 2450 + "@esbuild/android-x64": "0.25.0", 2451 + "@esbuild/darwin-arm64": "0.25.0", 2452 + "@esbuild/darwin-x64": "0.25.0", 2453 + "@esbuild/freebsd-arm64": "0.25.0", 2454 + "@esbuild/freebsd-x64": "0.25.0", 2455 + "@esbuild/linux-arm": "0.25.0", 2456 + "@esbuild/linux-arm64": "0.25.0", 2457 + "@esbuild/linux-ia32": "0.25.0", 2458 + "@esbuild/linux-loong64": "0.25.0", 2459 + "@esbuild/linux-mips64el": "0.25.0", 2460 + "@esbuild/linux-ppc64": "0.25.0", 2461 + "@esbuild/linux-riscv64": "0.25.0", 2462 + "@esbuild/linux-s390x": "0.25.0", 2463 + "@esbuild/linux-x64": "0.25.0", 2464 + "@esbuild/netbsd-arm64": "0.25.0", 2465 + "@esbuild/netbsd-x64": "0.25.0", 2466 + "@esbuild/openbsd-arm64": "0.25.0", 2467 + "@esbuild/openbsd-x64": "0.25.0", 2468 + "@esbuild/sunos-x64": "0.25.0", 2469 + "@esbuild/win32-arm64": "0.25.0", 2470 + "@esbuild/win32-ia32": "0.25.0", 2471 + "@esbuild/win32-x64": "0.25.0" 2472 + } 2473 + }, 2474 + "node_modules/escalade": { 2475 + "version": "3.2.0", 2476 + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 2477 + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 2478 + "dev": true, 2479 + "engines": { 2480 + "node": ">=6" 2481 + } 2482 + }, 2483 + "node_modules/escape-string-regexp": { 2484 + "version": "4.0.0", 2485 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 2486 + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 2487 + "dev": true, 2488 + "engines": { 2489 + "node": ">=10" 2490 + }, 2491 + "funding": { 2492 + "url": "https://github.com/sponsors/sindresorhus" 2493 + } 2494 + }, 2495 + "node_modules/eslint": { 2496 + "version": "9.21.0", 2497 + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.21.0.tgz", 2498 + "integrity": "sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==", 2499 + "dev": true, 2500 + "dependencies": { 2501 + "@eslint-community/eslint-utils": "^4.2.0", 2502 + "@eslint-community/regexpp": "^4.12.1", 2503 + "@eslint/config-array": "^0.19.2", 2504 + "@eslint/core": "^0.12.0", 2505 + "@eslint/eslintrc": "^3.3.0", 2506 + "@eslint/js": "9.21.0", 2507 + "@eslint/plugin-kit": "^0.2.7", 2508 + "@humanfs/node": "^0.16.6", 2509 + "@humanwhocodes/module-importer": "^1.0.1", 2510 + "@humanwhocodes/retry": "^0.4.2", 2511 + "@types/estree": "^1.0.6", 2512 + "@types/json-schema": "^7.0.15", 2513 + "ajv": "^6.12.4", 2514 + "chalk": "^4.0.0", 2515 + "cross-spawn": "^7.0.6", 2516 + "debug": "^4.3.2", 2517 + "escape-string-regexp": "^4.0.0", 2518 + "eslint-scope": "^8.2.0", 2519 + "eslint-visitor-keys": "^4.2.0", 2520 + "espree": "^10.3.0", 2521 + "esquery": "^1.5.0", 2522 + "esutils": "^2.0.2", 2523 + "fast-deep-equal": "^3.1.3", 2524 + "file-entry-cache": "^8.0.0", 2525 + "find-up": "^5.0.0", 2526 + "glob-parent": "^6.0.2", 2527 + "ignore": "^5.2.0", 2528 + "imurmurhash": "^0.1.4", 2529 + "is-glob": "^4.0.0", 2530 + "json-stable-stringify-without-jsonify": "^1.0.1", 2531 + "lodash.merge": "^4.6.2", 2532 + "minimatch": "^3.1.2", 2533 + "natural-compare": "^1.4.0", 2534 + "optionator": "^0.9.3" 2535 + }, 2536 + "bin": { 2537 + "eslint": "bin/eslint.js" 2538 + }, 2539 + "engines": { 2540 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2541 + }, 2542 + "funding": { 2543 + "url": "https://eslint.org/donate" 2544 + }, 2545 + "peerDependencies": { 2546 + "jiti": "*" 2547 + }, 2548 + "peerDependenciesMeta": { 2549 + "jiti": { 2550 + "optional": true 2551 + } 2552 + } 2553 + }, 2554 + "node_modules/eslint-compat-utils": { 2555 + "version": "0.5.1", 2556 + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", 2557 + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", 2558 + "dev": true, 2559 + "dependencies": { 2560 + "semver": "^7.5.4" 2561 + }, 2562 + "engines": { 2563 + "node": ">=12" 2564 + }, 2565 + "peerDependencies": { 2566 + "eslint": ">=6.0.0" 2567 + } 2568 + }, 2569 + "node_modules/eslint-config-prettier": { 2570 + "version": "10.0.1", 2571 + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.0.1.tgz", 2572 + "integrity": "sha512-lZBts941cyJyeaooiKxAtzoPHTN+GbQTJFAIdQbRhA4/8whaAraEh47Whw/ZFfrjNSnlAxqfm9i0XVAEkULjCw==", 2573 + "dev": true, 2574 + "bin": { 2575 + "eslint-config-prettier": "build/bin/cli.js" 2576 + }, 2577 + "peerDependencies": { 2578 + "eslint": ">=7.0.0" 2579 + } 2580 + }, 2581 + "node_modules/eslint-plugin-svelte": { 2582 + "version": "2.46.1", 2583 + "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.46.1.tgz", 2584 + "integrity": "sha512-7xYr2o4NID/f9OEYMqxsEQsCsj4KaMy4q5sANaKkAb6/QeCjYFxRmDm2S3YC3A3pl1kyPZ/syOx/i7LcWYSbIw==", 2585 + "dev": true, 2586 + "dependencies": { 2587 + "@eslint-community/eslint-utils": "^4.4.0", 2588 + "@jridgewell/sourcemap-codec": "^1.4.15", 2589 + "eslint-compat-utils": "^0.5.1", 2590 + "esutils": "^2.0.3", 2591 + "known-css-properties": "^0.35.0", 2592 + "postcss": "^8.4.38", 2593 + "postcss-load-config": "^3.1.4", 2594 + "postcss-safe-parser": "^6.0.0", 2595 + "postcss-selector-parser": "^6.1.0", 2596 + "semver": "^7.6.2", 2597 + "svelte-eslint-parser": "^0.43.0" 2598 + }, 2599 + "engines": { 2600 + "node": "^14.17.0 || >=16.0.0" 2601 + }, 2602 + "funding": { 2603 + "url": "https://github.com/sponsors/ota-meshi" 2604 + }, 2605 + "peerDependencies": { 2606 + "eslint": "^7.0.0 || ^8.0.0-0 || ^9.0.0-0", 2607 + "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0" 2608 + }, 2609 + "peerDependenciesMeta": { 2610 + "svelte": { 2611 + "optional": true 2612 + } 2613 + } 2614 + }, 2615 + "node_modules/eslint-scope": { 2616 + "version": "8.2.0", 2617 + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", 2618 + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", 2619 + "dev": true, 2620 + "dependencies": { 2621 + "esrecurse": "^4.3.0", 2622 + "estraverse": "^5.2.0" 2623 + }, 2624 + "engines": { 2625 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2626 + }, 2627 + "funding": { 2628 + "url": "https://opencollective.com/eslint" 2629 + } 2630 + }, 2631 + "node_modules/eslint-visitor-keys": { 2632 + "version": "4.2.0", 2633 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", 2634 + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", 2635 + "dev": true, 2636 + "engines": { 2637 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2638 + }, 2639 + "funding": { 2640 + "url": "https://opencollective.com/eslint" 2641 + } 2642 + }, 2643 + "node_modules/esm-env": { 2644 + "version": "1.2.2", 2645 + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", 2646 + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==" 2647 + }, 2648 + "node_modules/espree": { 2649 + "version": "10.3.0", 2650 + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", 2651 + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", 2652 + "dev": true, 2653 + "dependencies": { 2654 + "acorn": "^8.14.0", 2655 + "acorn-jsx": "^5.3.2", 2656 + "eslint-visitor-keys": "^4.2.0" 2657 + }, 2658 + "engines": { 2659 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2660 + }, 2661 + "funding": { 2662 + "url": "https://opencollective.com/eslint" 2663 + } 2664 + }, 2665 + "node_modules/esquery": { 2666 + "version": "1.6.0", 2667 + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", 2668 + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", 2669 + "dev": true, 2670 + "dependencies": { 2671 + "estraverse": "^5.1.0" 2672 + }, 2673 + "engines": { 2674 + "node": ">=0.10" 2675 + } 2676 + }, 2677 + "node_modules/esrap": { 2678 + "version": "1.4.5", 2679 + "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.4.5.tgz", 2680 + "integrity": "sha512-CjNMjkBWWZeHn+VX+gS8YvFwJ5+NDhg8aWZBSFJPR8qQduDNjbJodA2WcwCm7uQa5Rjqj+nZvVmceg1RbHFB9g==", 2681 + "dependencies": { 2682 + "@jridgewell/sourcemap-codec": "^1.4.15" 2683 + } 2684 + }, 2685 + "node_modules/esrecurse": { 2686 + "version": "4.3.0", 2687 + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 2688 + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 2689 + "dev": true, 2690 + "dependencies": { 2691 + "estraverse": "^5.2.0" 2692 + }, 2693 + "engines": { 2694 + "node": ">=4.0" 2695 + } 2696 + }, 2697 + "node_modules/estraverse": { 2698 + "version": "5.3.0", 2699 + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 2700 + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 2701 + "dev": true, 2702 + "engines": { 2703 + "node": ">=4.0" 2704 + } 2705 + }, 2706 + "node_modules/esutils": { 2707 + "version": "2.0.3", 2708 + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 2709 + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 2710 + "dev": true, 2711 + "engines": { 2712 + "node": ">=0.10.0" 2713 + } 2714 + }, 2715 + "node_modules/fast-deep-equal": { 2716 + "version": "3.1.3", 2717 + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 2718 + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 2719 + "dev": true 2720 + }, 2721 + "node_modules/fast-glob": { 2722 + "version": "3.3.3", 2723 + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", 2724 + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", 2725 + "dependencies": { 2726 + "@nodelib/fs.stat": "^2.0.2", 2727 + "@nodelib/fs.walk": "^1.2.3", 2728 + "glob-parent": "^5.1.2", 2729 + "merge2": "^1.3.0", 2730 + "micromatch": "^4.0.8" 2731 + }, 2732 + "engines": { 2733 + "node": ">=8.6.0" 2734 + } 2735 + }, 2736 + "node_modules/fast-glob/node_modules/glob-parent": { 2737 + "version": "5.1.2", 2738 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2739 + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2740 + "dependencies": { 2741 + "is-glob": "^4.0.1" 2742 + }, 2743 + "engines": { 2744 + "node": ">= 6" 2745 + } 2746 + }, 2747 + "node_modules/fast-json-stable-stringify": { 2748 + "version": "2.1.0", 2749 + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 2750 + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 2751 + "dev": true 2752 + }, 2753 + "node_modules/fast-levenshtein": { 2754 + "version": "2.0.6", 2755 + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 2756 + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 2757 + "dev": true 2758 + }, 2759 + "node_modules/fastq": { 2760 + "version": "1.19.1", 2761 + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", 2762 + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", 2763 + "dependencies": { 2764 + "reusify": "^1.0.4" 2765 + } 2766 + }, 2767 + "node_modules/fdir": { 2768 + "version": "6.4.3", 2769 + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", 2770 + "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", 2771 + "dev": true, 2772 + "peerDependencies": { 2773 + "picomatch": "^3 || ^4" 2774 + }, 2775 + "peerDependenciesMeta": { 2776 + "picomatch": { 2777 + "optional": true 2778 + } 2779 + } 2780 + }, 2781 + "node_modules/fecha": { 2782 + "version": "4.2.3", 2783 + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", 2784 + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" 2785 + }, 2786 + "node_modules/fflate": { 2787 + "version": "0.8.2", 2788 + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", 2789 + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==" 2790 + }, 2791 + "node_modules/file-entry-cache": { 2792 + "version": "8.0.0", 2793 + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", 2794 + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", 2795 + "dev": true, 2796 + "dependencies": { 2797 + "flat-cache": "^4.0.0" 2798 + }, 2799 + "engines": { 2800 + "node": ">=16.0.0" 2801 + } 2802 + }, 2803 + "node_modules/file-source": { 2804 + "version": "0.6.1", 2805 + "resolved": "https://registry.npmjs.org/file-source/-/file-source-0.6.1.tgz", 2806 + "integrity": "sha512-1R1KneL7eTXmXfKxC10V/9NeGOdbsAXJ+lQ//fvvcHUgtaZcZDWNJNblxAoVOyV1cj45pOtUrR3vZTBwqcW8XA==", 2807 + "dependencies": { 2808 + "stream-source": "0.3" 2809 + } 2810 + }, 2811 + "node_modules/fill-range": { 2812 + "version": "7.1.1", 2813 + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 2814 + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 2815 + "dependencies": { 2816 + "to-regex-range": "^5.0.1" 2817 + }, 2818 + "engines": { 2819 + "node": ">=8" 2820 + } 2821 + }, 2822 + "node_modules/find-up": { 2823 + "version": "5.0.0", 2824 + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 2825 + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 2826 + "dev": true, 2827 + "dependencies": { 2828 + "locate-path": "^6.0.0", 2829 + "path-exists": "^4.0.0" 2830 + }, 2831 + "engines": { 2832 + "node": ">=10" 2833 + }, 2834 + "funding": { 2835 + "url": "https://github.com/sponsors/sindresorhus" 2836 + } 2837 + }, 2838 + "node_modules/flat": { 2839 + "version": "5.0.2", 2840 + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 2841 + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 2842 + "bin": { 2843 + "flat": "cli.js" 2844 + } 2845 + }, 2846 + "node_modules/flat-cache": { 2847 + "version": "4.0.1", 2848 + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", 2849 + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", 2850 + "dev": true, 2851 + "dependencies": { 2852 + "flatted": "^3.2.9", 2853 + "keyv": "^4.5.4" 2854 + }, 2855 + "engines": { 2856 + "node": ">=16" 2857 + } 2858 + }, 2859 + "node_modules/flatted": { 2860 + "version": "3.3.3", 2861 + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", 2862 + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", 2863 + "dev": true 2864 + }, 2865 + "node_modules/fn.name": { 2866 + "version": "1.1.0", 2867 + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", 2868 + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" 2869 + }, 2870 + "node_modules/foreground-child": { 2871 + "version": "3.3.1", 2872 + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", 2873 + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", 2874 + "dependencies": { 2875 + "cross-spawn": "^7.0.6", 2876 + "signal-exit": "^4.0.1" 2877 + }, 2878 + "engines": { 2879 + "node": ">=14" 2880 + }, 2881 + "funding": { 2882 + "url": "https://github.com/sponsors/isaacs" 2883 + } 2884 + }, 2885 + "node_modules/fraction.js": { 2886 + "version": "4.3.7", 2887 + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", 2888 + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", 2889 + "dev": true, 2890 + "engines": { 2891 + "node": "*" 2892 + }, 2893 + "funding": { 2894 + "type": "patreon", 2895 + "url": "https://github.com/sponsors/rawify" 2896 + } 2897 + }, 2898 + "node_modules/fsevents": { 2899 + "version": "2.3.3", 2900 + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 2901 + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 2902 + "hasInstallScript": true, 2903 + "optional": true, 2904 + "os": [ 2905 + "darwin" 2906 + ], 2907 + "engines": { 2908 + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 2909 + } 2910 + }, 2911 + "node_modules/function-bind": { 2912 + "version": "1.1.2", 2913 + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 2914 + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 2915 + "funding": { 2916 + "url": "https://github.com/sponsors/ljharb" 2917 + } 2918 + }, 2919 + "node_modules/glob": { 2920 + "version": "10.4.5", 2921 + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", 2922 + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", 2923 + "dependencies": { 2924 + "foreground-child": "^3.1.0", 2925 + "jackspeak": "^3.1.2", 2926 + "minimatch": "^9.0.4", 2927 + "minipass": "^7.1.2", 2928 + "package-json-from-dist": "^1.0.0", 2929 + "path-scurry": "^1.11.1" 2930 + }, 2931 + "bin": { 2932 + "glob": "dist/esm/bin.mjs" 2933 + }, 2934 + "funding": { 2935 + "url": "https://github.com/sponsors/isaacs" 2936 + } 2937 + }, 2938 + "node_modules/glob-parent": { 2939 + "version": "6.0.2", 2940 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 2941 + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 2942 + "dependencies": { 2943 + "is-glob": "^4.0.3" 2944 + }, 2945 + "engines": { 2946 + "node": ">=10.13.0" 2947 + } 2948 + }, 2949 + "node_modules/glob/node_modules/brace-expansion": { 2950 + "version": "2.0.1", 2951 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 2952 + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 2953 + "dependencies": { 2954 + "balanced-match": "^1.0.0" 2955 + } 2956 + }, 2957 + "node_modules/glob/node_modules/minimatch": { 2958 + "version": "9.0.5", 2959 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 2960 + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 2961 + "dependencies": { 2962 + "brace-expansion": "^2.0.1" 2963 + }, 2964 + "engines": { 2965 + "node": ">=16 || 14 >=14.17" 2966 + }, 2967 + "funding": { 2968 + "url": "https://github.com/sponsors/isaacs" 2969 + } 2970 + }, 2971 + "node_modules/globals": { 2972 + "version": "15.15.0", 2973 + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", 2974 + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", 2975 + "dev": true, 2976 + "engines": { 2977 + "node": ">=18" 2978 + }, 2979 + "funding": { 2980 + "url": "https://github.com/sponsors/sindresorhus" 2981 + } 2982 + }, 2983 + "node_modules/graphemer": { 2984 + "version": "1.4.0", 2985 + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 2986 + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 2987 + "dev": true 2988 + }, 2989 + "node_modules/has-flag": { 2990 + "version": "4.0.0", 2991 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2992 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2993 + "dev": true, 2994 + "engines": { 2995 + "node": ">=8" 2996 + } 2997 + }, 2998 + "node_modules/hasown": { 2999 + "version": "2.0.2", 3000 + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 3001 + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 3002 + "dependencies": { 3003 + "function-bind": "^1.1.2" 3004 + }, 3005 + "engines": { 3006 + "node": ">= 0.4" 3007 + } 3008 + }, 3009 + "node_modules/iconv-lite": { 3010 + "version": "0.6.3", 3011 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 3012 + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 3013 + "dependencies": { 3014 + "safer-buffer": ">= 2.1.2 < 3.0.0" 3015 + }, 3016 + "engines": { 3017 + "node": ">=0.10.0" 3018 + } 3019 + }, 3020 + "node_modules/ignore": { 3021 + "version": "5.3.2", 3022 + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", 3023 + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", 3024 + "dev": true, 3025 + "engines": { 3026 + "node": ">= 4" 3027 + } 3028 + }, 3029 + "node_modules/immer": { 3030 + "version": "10.1.1", 3031 + "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz", 3032 + "integrity": "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==", 3033 + "funding": { 3034 + "type": "opencollective", 3035 + "url": "https://opencollective.com/immer" 3036 + } 3037 + }, 3038 + "node_modules/import-fresh": { 3039 + "version": "3.3.1", 3040 + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", 3041 + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", 3042 + "dev": true, 3043 + "dependencies": { 3044 + "parent-module": "^1.0.0", 3045 + "resolve-from": "^4.0.0" 3046 + }, 3047 + "engines": { 3048 + "node": ">=6" 3049 + }, 3050 + "funding": { 3051 + "url": "https://github.com/sponsors/sindresorhus" 3052 + } 3053 + }, 3054 + "node_modules/import-meta-resolve": { 3055 + "version": "4.1.0", 3056 + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", 3057 + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", 3058 + "funding": { 3059 + "type": "github", 3060 + "url": "https://github.com/sponsors/wooorm" 3061 + } 3062 + }, 3063 + "node_modules/imurmurhash": { 3064 + "version": "0.1.4", 3065 + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 3066 + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 3067 + "dev": true, 3068 + "engines": { 3069 + "node": ">=0.8.19" 3070 + } 3071 + }, 3072 + "node_modules/inherits": { 3073 + "version": "2.0.4", 3074 + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 3075 + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 3076 + }, 3077 + "node_modules/inline-style-parser": { 3078 + "version": "0.2.4", 3079 + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", 3080 + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==" 3081 + }, 3082 + "node_modules/internmap": { 3083 + "version": "2.0.3", 3084 + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", 3085 + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", 3086 + "engines": { 3087 + "node": ">=12" 3088 + } 3089 + }, 3090 + "node_modules/is-arrayish": { 3091 + "version": "0.3.2", 3092 + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", 3093 + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" 3094 + }, 3095 + "node_modules/is-binary-path": { 3096 + "version": "2.1.0", 3097 + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 3098 + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 3099 + "dependencies": { 3100 + "binary-extensions": "^2.0.0" 3101 + }, 3102 + "engines": { 3103 + "node": ">=8" 3104 + } 3105 + }, 3106 + "node_modules/is-core-module": { 3107 + "version": "2.16.1", 3108 + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", 3109 + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", 3110 + "dependencies": { 3111 + "hasown": "^2.0.2" 3112 + }, 3113 + "engines": { 3114 + "node": ">= 0.4" 3115 + }, 3116 + "funding": { 3117 + "url": "https://github.com/sponsors/ljharb" 3118 + } 3119 + }, 3120 + "node_modules/is-extglob": { 3121 + "version": "2.1.1", 3122 + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 3123 + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 3124 + "engines": { 3125 + "node": ">=0.10.0" 3126 + } 3127 + }, 3128 + "node_modules/is-fullwidth-code-point": { 3129 + "version": "3.0.0", 3130 + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 3131 + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 3132 + "engines": { 3133 + "node": ">=8" 3134 + } 3135 + }, 3136 + "node_modules/is-glob": { 3137 + "version": "4.0.3", 3138 + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 3139 + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 3140 + "dependencies": { 3141 + "is-extglob": "^2.1.1" 3142 + }, 3143 + "engines": { 3144 + "node": ">=0.10.0" 3145 + } 3146 + }, 3147 + "node_modules/is-number": { 3148 + "version": "7.0.0", 3149 + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 3150 + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 3151 + "engines": { 3152 + "node": ">=0.12.0" 3153 + } 3154 + }, 3155 + "node_modules/is-reference": { 3156 + "version": "3.0.3", 3157 + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", 3158 + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", 3159 + "dependencies": { 3160 + "@types/estree": "^1.0.6" 3161 + } 3162 + }, 3163 + "node_modules/is-stream": { 3164 + "version": "2.0.1", 3165 + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 3166 + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 3167 + "engines": { 3168 + "node": ">=8" 3169 + }, 3170 + "funding": { 3171 + "url": "https://github.com/sponsors/sindresorhus" 3172 + } 3173 + }, 3174 + "node_modules/isexe": { 3175 + "version": "2.0.0", 3176 + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 3177 + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" 3178 + }, 3179 + "node_modules/jackspeak": { 3180 + "version": "3.4.3", 3181 + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", 3182 + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", 3183 + "dependencies": { 3184 + "@isaacs/cliui": "^8.0.2" 3185 + }, 3186 + "funding": { 3187 + "url": "https://github.com/sponsors/isaacs" 3188 + }, 3189 + "optionalDependencies": { 3190 + "@pkgjs/parseargs": "^0.11.0" 3191 + } 3192 + }, 3193 + "node_modules/jiti": { 3194 + "version": "1.21.7", 3195 + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", 3196 + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", 3197 + "bin": { 3198 + "jiti": "bin/jiti.js" 3199 + } 3200 + }, 3201 + "node_modules/js-yaml": { 3202 + "version": "4.1.0", 3203 + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 3204 + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 3205 + "dev": true, 3206 + "dependencies": { 3207 + "argparse": "^2.0.1" 3208 + }, 3209 + "bin": { 3210 + "js-yaml": "bin/js-yaml.js" 3211 + } 3212 + }, 3213 + "node_modules/jsmin": { 3214 + "version": "1.0.1", 3215 + "resolved": "https://registry.npmjs.org/jsmin/-/jsmin-1.0.1.tgz", 3216 + "integrity": "sha512-OPuL5X/bFKgVdMvEIX3hnpx3jbVpFCrEM8pKPXjFkZUqg521r41ijdyTz7vACOhW6o1neVlcLyd+wkbK5fNHRg==", 3217 + "bin": { 3218 + "jsmin": "bin/jsmin" 3219 + }, 3220 + "engines": { 3221 + "node": ">=0.1.93" 3222 + } 3223 + }, 3224 + "node_modules/json-buffer": { 3225 + "version": "3.0.1", 3226 + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 3227 + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 3228 + "dev": true 3229 + }, 3230 + "node_modules/json-schema-traverse": { 3231 + "version": "0.4.1", 3232 + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 3233 + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 3234 + "dev": true 3235 + }, 3236 + "node_modules/json-stable-stringify-without-jsonify": { 3237 + "version": "1.0.1", 3238 + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 3239 + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 3240 + "dev": true 3241 + }, 3242 + "node_modules/jxLoader": { 3243 + "version": "0.1.1", 3244 + "resolved": "https://registry.npmjs.org/jxLoader/-/jxLoader-0.1.1.tgz", 3245 + "integrity": "sha512-ClEvAj3K68y8uKhub3RgTmcRPo5DfIWvtxqrKQdDPyZ1UVHIIKvVvjrAsJFSVL5wjv0rt5iH9SMCZ0XRKNzeUA==", 3246 + "dependencies": { 3247 + "js-yaml": "0.3.x", 3248 + "moo-server": "1.3.x", 3249 + "promised-io": "*", 3250 + "walker": "1.x" 3251 + }, 3252 + "engines": { 3253 + "node": ">v0.4.10" 3254 + } 3255 + }, 3256 + "node_modules/jxLoader/node_modules/js-yaml": { 3257 + "version": "0.3.7", 3258 + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-0.3.7.tgz", 3259 + "integrity": "sha512-/7PsVDNP2tVe2Z1cF9kTEkjamIwz4aooDpRKmN1+g/9eePCgcxsv4QDvEbxO0EH+gdDD7MLyDoR6BASo3hH51g==", 3260 + "engines": { 3261 + "node": "> 0.4.11" 3262 + } 3263 + }, 3264 + "node_modules/keyv": { 3265 + "version": "4.5.4", 3266 + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 3267 + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 3268 + "dev": true, 3269 + "dependencies": { 3270 + "json-buffer": "3.0.1" 3271 + } 3272 + }, 3273 + "node_modules/kleur": { 3274 + "version": "4.1.5", 3275 + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", 3276 + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", 3277 + "engines": { 3278 + "node": ">=6" 3279 + } 3280 + }, 3281 + "node_modules/known-css-properties": { 3282 + "version": "0.35.0", 3283 + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz", 3284 + "integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==", 3285 + "dev": true 3286 + }, 3287 + "node_modules/kuler": { 3288 + "version": "2.0.0", 3289 + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", 3290 + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" 3291 + }, 3292 + "node_modules/layercake": { 3293 + "version": "8.4.2", 3294 + "resolved": "https://registry.npmjs.org/layercake/-/layercake-8.4.2.tgz", 3295 + "integrity": "sha512-ZVjdl6ryjz7F4jXX8Dh871nN/Nv6o3m7gLI7KrMPNGiy3Mg5BuA9j0UeucrmK/uLe20XpDyG6X4v/iYJYSPLrg==", 3296 + "dependencies": { 3297 + "d3-array": "^3.2.4", 3298 + "d3-color": "^3.1.0", 3299 + "d3-scale": "^4.0.2", 3300 + "d3-shape": "^3.2.0" 3301 + }, 3302 + "peerDependencies": { 3303 + "svelte": "3 - 5 || >=5.0.0-next.120", 3304 + "typescript": "^5.0.2" 3305 + } 3306 + }, 3307 + "node_modules/layerchart": { 3308 + "version": "1.0.0", 3309 + "resolved": "https://registry.npmjs.org/layerchart/-/layerchart-1.0.0.tgz", 3310 + "integrity": "sha512-Y+71HighPBfmOs4ARyNJJXhang2KC1S3/dDSCHiXznGDcK0X9wg8MIO3RkjsXCacHkLG+8z1iS+fvVGC9J7a5Q==", 3311 + "dependencies": { 3312 + "@dagrejs/dagre": "^1.1.4", 3313 + "@layerstack/svelte-actions": "^1.0.0", 3314 + "@layerstack/svelte-stores": "^1.0.0", 3315 + "@layerstack/tailwind": "^1.0.0", 3316 + "@layerstack/utils": "^1.0.0", 3317 + "d3-array": "^3.2.4", 3318 + "d3-color": "^3.1.0", 3319 + "d3-delaunay": "^6.0.4", 3320 + "d3-dsv": "^3.0.1", 3321 + "d3-force": "^3.0.0", 3322 + "d3-geo": "^3.1.1", 3323 + "d3-geo-voronoi": "^2.1.0", 3324 + "d3-hierarchy": "^3.1.2", 3325 + "d3-interpolate": "^3.0.1", 3326 + "d3-interpolate-path": "^2.3.0", 3327 + "d3-path": "^3.1.0", 3328 + "d3-quadtree": "^3.0.1", 3329 + "d3-random": "^3.0.1", 3330 + "d3-sankey": "^0.12.3", 3331 + "d3-scale": "^4.0.2", 3332 + "d3-scale-chromatic": "^3.1.0", 3333 + "d3-shape": "^3.2.0", 3334 + "d3-tile": "^1.0.0", 3335 + "d3-time": "^3.1.0", 3336 + "date-fns": "^4.1.0", 3337 + "layercake": "^8.4.2", 3338 + "lodash-es": "^4.17.21", 3339 + "shapefile": "^0.6.6", 3340 + "topojson-client": "^3.1.0" 3341 + }, 3342 + "peerDependencies": { 3343 + "svelte": "^3.56.0 || ^4.0.0 || ^5.0.0" 3344 + } 3345 + }, 3346 + "node_modules/levn": { 3347 + "version": "0.4.1", 3348 + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 3349 + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 3350 + "dev": true, 3351 + "dependencies": { 3352 + "prelude-ls": "^1.2.1", 3353 + "type-check": "~0.4.0" 3354 + }, 3355 + "engines": { 3356 + "node": ">= 0.8.0" 3357 + } 3358 + }, 3359 + "node_modules/lilconfig": { 3360 + "version": "2.1.0", 3361 + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", 3362 + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", 3363 + "dev": true, 3364 + "engines": { 3365 + "node": ">=10" 3366 + } 3367 + }, 3368 + "node_modules/lines-and-columns": { 3369 + "version": "1.2.4", 3370 + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 3371 + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" 3372 + }, 3373 + "node_modules/loadjs": { 3374 + "version": "4.3.0", 3375 + "resolved": "https://registry.npmjs.org/loadjs/-/loadjs-4.3.0.tgz", 3376 + "integrity": "sha512-vNX4ZZLJBeDEOBvdr2v/F+0aN5oMuPu7JTqrMwp+DtgK+AryOlpy6Xtm2/HpNr+azEa828oQjOtWsB6iDtSfSQ==" 3377 + }, 3378 + "node_modules/locate-character": { 3379 + "version": "3.0.0", 3380 + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", 3381 + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" 3382 + }, 3383 + "node_modules/locate-path": { 3384 + "version": "6.0.0", 3385 + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 3386 + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 3387 + "dev": true, 3388 + "dependencies": { 3389 + "p-locate": "^5.0.0" 3390 + }, 3391 + "engines": { 3392 + "node": ">=10" 3393 + }, 3394 + "funding": { 3395 + "url": "https://github.com/sponsors/sindresorhus" 3396 + } 3397 + }, 3398 + "node_modules/lodash-es": { 3399 + "version": "4.17.21", 3400 + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", 3401 + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" 3402 + }, 3403 + "node_modules/lodash.castarray": { 3404 + "version": "4.4.0", 3405 + "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", 3406 + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", 3407 + "dev": true 3408 + }, 3409 + "node_modules/lodash.foreach": { 3410 + "version": "4.5.0", 3411 + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", 3412 + "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==" 3413 + }, 3414 + "node_modules/lodash.isplainobject": { 3415 + "version": "4.0.6", 3416 + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", 3417 + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", 3418 + "dev": true 3419 + }, 3420 + "node_modules/lodash.merge": { 3421 + "version": "4.6.2", 3422 + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 3423 + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 3424 + "dev": true 3425 + }, 3426 + "node_modules/logform": { 3427 + "version": "2.7.0", 3428 + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", 3429 + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", 3430 + "dependencies": { 3431 + "@colors/colors": "1.6.0", 3432 + "@types/triple-beam": "^1.3.2", 3433 + "fecha": "^4.2.0", 3434 + "ms": "^2.1.1", 3435 + "safe-stable-stringify": "^2.3.1", 3436 + "triple-beam": "^1.3.0" 3437 + }, 3438 + "engines": { 3439 + "node": ">= 12.0.0" 3440 + } 3441 + }, 3442 + "node_modules/lru-cache": { 3443 + "version": "10.4.3", 3444 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", 3445 + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" 3446 + }, 3447 + "node_modules/maath": { 3448 + "version": "0.10.8", 3449 + "resolved": "https://registry.npmjs.org/maath/-/maath-0.10.8.tgz", 3450 + "integrity": "sha512-tRvbDF0Pgqz+9XUa4jjfgAQ8/aPKmQdWXilFu2tMy4GWj4NOsx99HlULO4IeREfbO3a0sA145DZYyvXPkybm0g==", 3451 + "peerDependencies": { 3452 + "@types/three": ">=0.134.0", 3453 + "three": ">=0.134.0" 3454 + } 3455 + }, 3456 + "node_modules/magic-string": { 3457 + "version": "0.30.17", 3458 + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", 3459 + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", 3460 + "dependencies": { 3461 + "@jridgewell/sourcemap-codec": "^1.5.0" 3462 + } 3463 + }, 3464 + "node_modules/makeerror": { 3465 + "version": "1.0.12", 3466 + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", 3467 + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", 3468 + "dependencies": { 3469 + "tmpl": "1.0.5" 3470 + } 3471 + }, 3472 + "node_modules/merge2": { 3473 + "version": "1.4.1", 3474 + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 3475 + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 3476 + "engines": { 3477 + "node": ">= 8" 3478 + } 3479 + }, 3480 + "node_modules/meshoptimizer": { 3481 + "version": "0.18.1", 3482 + "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.18.1.tgz", 3483 + "integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==" 3484 + }, 3485 + "node_modules/micromatch": { 3486 + "version": "4.0.8", 3487 + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", 3488 + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", 3489 + "dependencies": { 3490 + "braces": "^3.0.3", 3491 + "picomatch": "^2.3.1" 3492 + }, 3493 + "engines": { 3494 + "node": ">=8.6" 3495 + } 3496 + }, 3497 + "node_modules/micromatch/node_modules/picomatch": { 3498 + "version": "2.3.1", 3499 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 3500 + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 3501 + "engines": { 3502 + "node": ">=8.6" 3503 + }, 3504 + "funding": { 3505 + "url": "https://github.com/sponsors/jonschlinkert" 3506 + } 3507 + }, 3508 + "node_modules/mini-svg-data-uri": { 3509 + "version": "1.4.4", 3510 + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", 3511 + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", 3512 + "dev": true, 3513 + "bin": { 3514 + "mini-svg-data-uri": "cli.js" 3515 + } 3516 + }, 3517 + "node_modules/minimatch": { 3518 + "version": "3.1.2", 3519 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 3520 + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 3521 + "dev": true, 3522 + "dependencies": { 3523 + "brace-expansion": "^1.1.7" 3524 + }, 3525 + "engines": { 3526 + "node": "*" 3527 + } 3528 + }, 3529 + "node_modules/minipass": { 3530 + "version": "7.1.2", 3531 + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", 3532 + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", 3533 + "engines": { 3534 + "node": ">=16 || 14 >=14.17" 3535 + } 3536 + }, 3537 + "node_modules/mitt": { 3538 + "version": "3.0.1", 3539 + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", 3540 + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" 3541 + }, 3542 + "node_modules/moo-server": { 3543 + "version": "1.3.0", 3544 + "resolved": "https://registry.npmjs.org/moo-server/-/moo-server-1.3.0.tgz", 3545 + "integrity": "sha512-9A8/eor2DXwpv1+a4pZAAydqLFVrWoKoO1fzdzqLUhYVXAO1Kgd1FR2gFZi7YdHzF0s4W8cDNwCfKJQrvLqxDw==", 3546 + "engines": { 3547 + "node": ">v0.4.10" 3548 + } 3549 + }, 3550 + "node_modules/mri": { 3551 + "version": "1.2.0", 3552 + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", 3553 + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", 3554 + "engines": { 3555 + "node": ">=4" 3556 + } 3557 + }, 3558 + "node_modules/mrmime": { 3559 + "version": "2.0.1", 3560 + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", 3561 + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", 3562 + "engines": { 3563 + "node": ">=10" 3564 + } 3565 + }, 3566 + "node_modules/ms": { 3567 + "version": "2.1.3", 3568 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 3569 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 3570 + }, 3571 + "node_modules/mz": { 3572 + "version": "2.7.0", 3573 + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", 3574 + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", 3575 + "dependencies": { 3576 + "any-promise": "^1.0.0", 3577 + "object-assign": "^4.0.1", 3578 + "thenify-all": "^1.0.0" 3579 + } 3580 + }, 3581 + "node_modules/nanoid": { 3582 + "version": "3.3.8", 3583 + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", 3584 + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", 3585 + "funding": [ 3586 + { 3587 + "type": "github", 3588 + "url": "https://github.com/sponsors/ai" 3589 + } 3590 + ], 3591 + "bin": { 3592 + "nanoid": "bin/nanoid.cjs" 3593 + }, 3594 + "engines": { 3595 + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 3596 + } 3597 + }, 3598 + "node_modules/natural-compare": { 3599 + "version": "1.4.0", 3600 + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 3601 + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 3602 + "dev": true 3603 + }, 3604 + "node_modules/node-releases": { 3605 + "version": "2.0.19", 3606 + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", 3607 + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", 3608 + "dev": true 3609 + }, 3610 + "node_modules/normalize-path": { 3611 + "version": "3.0.0", 3612 + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 3613 + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 3614 + "engines": { 3615 + "node": ">=0.10.0" 3616 + } 3617 + }, 3618 + "node_modules/normalize-range": { 3619 + "version": "0.1.2", 3620 + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", 3621 + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", 3622 + "dev": true, 3623 + "engines": { 3624 + "node": ">=0.10.0" 3625 + } 3626 + }, 3627 + "node_modules/object-assign": { 3628 + "version": "4.1.1", 3629 + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 3630 + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 3631 + "engines": { 3632 + "node": ">=0.10.0" 3633 + } 3634 + }, 3635 + "node_modules/object-hash": { 3636 + "version": "3.0.0", 3637 + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", 3638 + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", 3639 + "engines": { 3640 + "node": ">= 6" 3641 + } 3642 + }, 3643 + "node_modules/one-time": { 3644 + "version": "1.0.0", 3645 + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", 3646 + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", 3647 + "dependencies": { 3648 + "fn.name": "1.x.x" 3649 + } 3650 + }, 3651 + "node_modules/optionator": { 3652 + "version": "0.9.4", 3653 + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", 3654 + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", 3655 + "dev": true, 3656 + "dependencies": { 3657 + "deep-is": "^0.1.3", 3658 + "fast-levenshtein": "^2.0.6", 3659 + "levn": "^0.4.1", 3660 + "prelude-ls": "^1.2.1", 3661 + "type-check": "^0.4.0", 3662 + "word-wrap": "^1.2.5" 3663 + }, 3664 + "engines": { 3665 + "node": ">= 0.8.0" 3666 + } 3667 + }, 3668 + "node_modules/p-limit": { 3669 + "version": "3.1.0", 3670 + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 3671 + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 3672 + "dev": true, 3673 + "dependencies": { 3674 + "yocto-queue": "^0.1.0" 3675 + }, 3676 + "engines": { 3677 + "node": ">=10" 3678 + }, 3679 + "funding": { 3680 + "url": "https://github.com/sponsors/sindresorhus" 3681 + } 3682 + }, 3683 + "node_modules/p-locate": { 3684 + "version": "5.0.0", 3685 + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 3686 + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 3687 + "dev": true, 3688 + "dependencies": { 3689 + "p-limit": "^3.0.2" 3690 + }, 3691 + "engines": { 3692 + "node": ">=10" 3693 + }, 3694 + "funding": { 3695 + "url": "https://github.com/sponsors/sindresorhus" 3696 + } 3697 + }, 3698 + "node_modules/package-json-from-dist": { 3699 + "version": "1.0.1", 3700 + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", 3701 + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" 3702 + }, 3703 + "node_modules/parent-module": { 3704 + "version": "1.0.1", 3705 + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 3706 + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 3707 + "dev": true, 3708 + "dependencies": { 3709 + "callsites": "^3.0.0" 3710 + }, 3711 + "engines": { 3712 + "node": ">=6" 3713 + } 3714 + }, 3715 + "node_modules/path-exists": { 3716 + "version": "4.0.0", 3717 + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 3718 + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 3719 + "dev": true, 3720 + "engines": { 3721 + "node": ">=8" 3722 + } 3723 + }, 3724 + "node_modules/path-key": { 3725 + "version": "3.1.1", 3726 + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 3727 + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 3728 + "engines": { 3729 + "node": ">=8" 3730 + } 3731 + }, 3732 + "node_modules/path-parse": { 3733 + "version": "1.0.7", 3734 + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 3735 + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 3736 + }, 3737 + "node_modules/path-scurry": { 3738 + "version": "1.11.1", 3739 + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", 3740 + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", 3741 + "dependencies": { 3742 + "lru-cache": "^10.2.0", 3743 + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" 3744 + }, 3745 + "engines": { 3746 + "node": ">=16 || 14 >=14.18" 3747 + }, 3748 + "funding": { 3749 + "url": "https://github.com/sponsors/isaacs" 3750 + } 3751 + }, 3752 + "node_modules/path-source": { 3753 + "version": "0.1.3", 3754 + "resolved": "https://registry.npmjs.org/path-source/-/path-source-0.1.3.tgz", 3755 + "integrity": "sha512-dWRHm5mIw5kw0cs3QZLNmpUWty48f5+5v9nWD2dw3Y0Hf+s01Ag8iJEWV0Sm0kocE8kK27DrIowha03e1YR+Qw==", 3756 + "dependencies": { 3757 + "array-source": "0.0", 3758 + "file-source": "0.6" 3759 + } 3760 + }, 3761 + "node_modules/picocolors": { 3762 + "version": "1.1.1", 3763 + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 3764 + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" 3765 + }, 3766 + "node_modules/picomatch": { 3767 + "version": "4.0.2", 3768 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", 3769 + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", 3770 + "dev": true, 3771 + "optional": true, 3772 + "peer": true, 3773 + "engines": { 3774 + "node": ">=12" 3775 + }, 3776 + "funding": { 3777 + "url": "https://github.com/sponsors/jonschlinkert" 3778 + } 3779 + }, 3780 + "node_modules/pify": { 3781 + "version": "2.3.0", 3782 + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 3783 + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 3784 + "engines": { 3785 + "node": ">=0.10.0" 3786 + } 3787 + }, 3788 + "node_modules/pirates": { 3789 + "version": "4.0.6", 3790 + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", 3791 + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", 3792 + "engines": { 3793 + "node": ">= 6" 3794 + } 3795 + }, 3796 + "node_modules/plyr": { 3797 + "version": "3.7.8", 3798 + "resolved": "https://registry.npmjs.org/plyr/-/plyr-3.7.8.tgz", 3799 + "integrity": "sha512-yG/EHDobwbB/uP+4Bm6eUpJ93f8xxHjjk2dYcD1Oqpe1EcuQl5tzzw9Oq+uVAzd2lkM11qZfydSiyIpiB8pgdA==", 3800 + "dependencies": { 3801 + "core-js": "^3.26.1", 3802 + "custom-event-polyfill": "^1.0.7", 3803 + "loadjs": "^4.2.0", 3804 + "rangetouch": "^2.0.1", 3805 + "url-polyfill": "^1.1.12" 3806 + } 3807 + }, 3808 + "node_modules/postcss": { 3809 + "version": "8.5.3", 3810 + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", 3811 + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", 3812 + "funding": [ 3813 + { 3814 + "type": "opencollective", 3815 + "url": "https://opencollective.com/postcss/" 3816 + }, 3817 + { 3818 + "type": "tidelift", 3819 + "url": "https://tidelift.com/funding/github/npm/postcss" 3820 + }, 3821 + { 3822 + "type": "github", 3823 + "url": "https://github.com/sponsors/ai" 3824 + } 3825 + ], 3826 + "dependencies": { 3827 + "nanoid": "^3.3.8", 3828 + "picocolors": "^1.1.1", 3829 + "source-map-js": "^1.2.1" 3830 + }, 3831 + "engines": { 3832 + "node": "^10 || ^12 || >=14" 3833 + } 3834 + }, 3835 + "node_modules/postcss-import": { 3836 + "version": "15.1.0", 3837 + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", 3838 + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", 3839 + "dependencies": { 3840 + "postcss-value-parser": "^4.0.0", 3841 + "read-cache": "^1.0.0", 3842 + "resolve": "^1.1.7" 3843 + }, 3844 + "engines": { 3845 + "node": ">=14.0.0" 3846 + }, 3847 + "peerDependencies": { 3848 + "postcss": "^8.0.0" 3849 + } 3850 + }, 3851 + "node_modules/postcss-js": { 3852 + "version": "4.0.1", 3853 + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", 3854 + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", 3855 + "dependencies": { 3856 + "camelcase-css": "^2.0.1" 3857 + }, 3858 + "engines": { 3859 + "node": "^12 || ^14 || >= 16" 3860 + }, 3861 + "funding": { 3862 + "type": "opencollective", 3863 + "url": "https://opencollective.com/postcss/" 3864 + }, 3865 + "peerDependencies": { 3866 + "postcss": "^8.4.21" 3867 + } 3868 + }, 3869 + "node_modules/postcss-load-config": { 3870 + "version": "3.1.4", 3871 + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", 3872 + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", 3873 + "dev": true, 3874 + "dependencies": { 3875 + "lilconfig": "^2.0.5", 3876 + "yaml": "^1.10.2" 3877 + }, 3878 + "engines": { 3879 + "node": ">= 10" 3880 + }, 3881 + "funding": { 3882 + "type": "opencollective", 3883 + "url": "https://opencollective.com/postcss/" 3884 + }, 3885 + "peerDependencies": { 3886 + "postcss": ">=8.0.9", 3887 + "ts-node": ">=9.0.0" 3888 + }, 3889 + "peerDependenciesMeta": { 3890 + "postcss": { 3891 + "optional": true 3892 + }, 3893 + "ts-node": { 3894 + "optional": true 3895 + } 3896 + } 3897 + }, 3898 + "node_modules/postcss-load-config/node_modules/yaml": { 3899 + "version": "1.10.2", 3900 + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", 3901 + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", 3902 + "dev": true, 3903 + "engines": { 3904 + "node": ">= 6" 3905 + } 3906 + }, 3907 + "node_modules/postcss-nested": { 3908 + "version": "6.2.0", 3909 + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", 3910 + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", 3911 + "funding": [ 3912 + { 3913 + "type": "opencollective", 3914 + "url": "https://opencollective.com/postcss/" 3915 + }, 3916 + { 3917 + "type": "github", 3918 + "url": "https://github.com/sponsors/ai" 3919 + } 3920 + ], 3921 + "dependencies": { 3922 + "postcss-selector-parser": "^6.1.1" 3923 + }, 3924 + "engines": { 3925 + "node": ">=12.0" 3926 + }, 3927 + "peerDependencies": { 3928 + "postcss": "^8.2.14" 3929 + } 3930 + }, 3931 + "node_modules/postcss-safe-parser": { 3932 + "version": "6.0.0", 3933 + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", 3934 + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", 3935 + "dev": true, 3936 + "engines": { 3937 + "node": ">=12.0" 3938 + }, 3939 + "funding": { 3940 + "type": "opencollective", 3941 + "url": "https://opencollective.com/postcss/" 3942 + }, 3943 + "peerDependencies": { 3944 + "postcss": "^8.3.3" 3945 + } 3946 + }, 3947 + "node_modules/postcss-scss": { 3948 + "version": "4.0.9", 3949 + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", 3950 + "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", 3951 + "dev": true, 3952 + "funding": [ 3953 + { 3954 + "type": "opencollective", 3955 + "url": "https://opencollective.com/postcss/" 3956 + }, 3957 + { 3958 + "type": "tidelift", 3959 + "url": "https://tidelift.com/funding/github/npm/postcss-scss" 3960 + }, 3961 + { 3962 + "type": "github", 3963 + "url": "https://github.com/sponsors/ai" 3964 + } 3965 + ], 3966 + "engines": { 3967 + "node": ">=12.0" 3968 + }, 3969 + "peerDependencies": { 3970 + "postcss": "^8.4.29" 3971 + } 3972 + }, 3973 + "node_modules/postcss-selector-parser": { 3974 + "version": "6.1.2", 3975 + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", 3976 + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", 3977 + "dependencies": { 3978 + "cssesc": "^3.0.0", 3979 + "util-deprecate": "^1.0.2" 3980 + }, 3981 + "engines": { 3982 + "node": ">=4" 3983 + } 3984 + }, 3985 + "node_modules/postcss-value-parser": { 3986 + "version": "4.2.0", 3987 + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 3988 + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" 3989 + }, 3990 + "node_modules/prelude-ls": { 3991 + "version": "1.2.1", 3992 + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 3993 + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 3994 + "dev": true, 3995 + "engines": { 3996 + "node": ">= 0.8.0" 3997 + } 3998 + }, 3999 + "node_modules/prettier": { 4000 + "version": "3.5.2", 4001 + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.2.tgz", 4002 + "integrity": "sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==", 4003 + "dev": true, 4004 + "bin": { 4005 + "prettier": "bin/prettier.cjs" 4006 + }, 4007 + "engines": { 4008 + "node": ">=14" 4009 + }, 4010 + "funding": { 4011 + "url": "https://github.com/prettier/prettier?sponsor=1" 4012 + } 4013 + }, 4014 + "node_modules/prettier-plugin-svelte": { 4015 + "version": "3.3.3", 4016 + "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.3.3.tgz", 4017 + "integrity": "sha512-yViK9zqQ+H2qZD1w/bH7W8i+bVfKrD8GIFjkFe4Thl6kCT9SlAsXVNmt3jCvQOCsnOhcvYgsoVlRV/Eu6x5nNw==", 4018 + "dev": true, 4019 + "peerDependencies": { 4020 + "prettier": "^3.0.0", 4021 + "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" 4022 + } 4023 + }, 4024 + "node_modules/prettier-plugin-tailwindcss": { 4025 + "version": "0.6.11", 4026 + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.11.tgz", 4027 + "integrity": "sha512-YxaYSIvZPAqhrrEpRtonnrXdghZg1irNg4qrjboCXrpybLWVs55cW2N3juhspVJiO0JBvYJT8SYsJpc8OQSnsA==", 4028 + "dev": true, 4029 + "engines": { 4030 + "node": ">=14.21.3" 4031 + }, 4032 + "peerDependencies": { 4033 + "@ianvs/prettier-plugin-sort-imports": "*", 4034 + "@prettier/plugin-pug": "*", 4035 + "@shopify/prettier-plugin-liquid": "*", 4036 + "@trivago/prettier-plugin-sort-imports": "*", 4037 + "@zackad/prettier-plugin-twig": "*", 4038 + "prettier": "^3.0", 4039 + "prettier-plugin-astro": "*", 4040 + "prettier-plugin-css-order": "*", 4041 + "prettier-plugin-import-sort": "*", 4042 + "prettier-plugin-jsdoc": "*", 4043 + "prettier-plugin-marko": "*", 4044 + "prettier-plugin-multiline-arrays": "*", 4045 + "prettier-plugin-organize-attributes": "*", 4046 + "prettier-plugin-organize-imports": "*", 4047 + "prettier-plugin-sort-imports": "*", 4048 + "prettier-plugin-style-order": "*", 4049 + "prettier-plugin-svelte": "*" 4050 + }, 4051 + "peerDependenciesMeta": { 4052 + "@ianvs/prettier-plugin-sort-imports": { 4053 + "optional": true 4054 + }, 4055 + "@prettier/plugin-pug": { 4056 + "optional": true 4057 + }, 4058 + "@shopify/prettier-plugin-liquid": { 4059 + "optional": true 4060 + }, 4061 + "@trivago/prettier-plugin-sort-imports": { 4062 + "optional": true 4063 + }, 4064 + "@zackad/prettier-plugin-twig": { 4065 + "optional": true 4066 + }, 4067 + "prettier-plugin-astro": { 4068 + "optional": true 4069 + }, 4070 + "prettier-plugin-css-order": { 4071 + "optional": true 4072 + }, 4073 + "prettier-plugin-import-sort": { 4074 + "optional": true 4075 + }, 4076 + "prettier-plugin-jsdoc": { 4077 + "optional": true 4078 + }, 4079 + "prettier-plugin-marko": { 4080 + "optional": true 4081 + }, 4082 + "prettier-plugin-multiline-arrays": { 4083 + "optional": true 4084 + }, 4085 + "prettier-plugin-organize-attributes": { 4086 + "optional": true 4087 + }, 4088 + "prettier-plugin-organize-imports": { 4089 + "optional": true 4090 + }, 4091 + "prettier-plugin-sort-imports": { 4092 + "optional": true 4093 + }, 4094 + "prettier-plugin-style-order": { 4095 + "optional": true 4096 + }, 4097 + "prettier-plugin-svelte": { 4098 + "optional": true 4099 + } 4100 + } 4101 + }, 4102 + "node_modules/promised-io": { 4103 + "version": "0.3.6", 4104 + "resolved": "https://registry.npmjs.org/promised-io/-/promised-io-0.3.6.tgz", 4105 + "integrity": "sha512-bNwZusuNIW4m0SPR8jooSyndD35ggirHlxVl/UhIaZD/F0OBv9ebfc6tNmbpZts3QXHggkjIBH8lvtnzhtcz0A==" 4106 + }, 4107 + "node_modules/punycode": { 4108 + "version": "2.3.1", 4109 + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 4110 + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 4111 + "dev": true, 4112 + "engines": { 4113 + "node": ">=6" 4114 + } 4115 + }, 4116 + "node_modules/queue-microtask": { 4117 + "version": "1.2.3", 4118 + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 4119 + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 4120 + "funding": [ 4121 + { 4122 + "type": "github", 4123 + "url": "https://github.com/sponsors/feross" 4124 + }, 4125 + { 4126 + "type": "patreon", 4127 + "url": "https://www.patreon.com/feross" 4128 + }, 4129 + { 4130 + "type": "consulting", 4131 + "url": "https://feross.org/support" 4132 + } 4133 + ] 4134 + }, 4135 + "node_modules/rangetouch": { 4136 + "version": "2.0.1", 4137 + "resolved": "https://registry.npmjs.org/rangetouch/-/rangetouch-2.0.1.tgz", 4138 + "integrity": "sha512-sln+pNSc8NGaHoLzwNBssFSf/rSYkqeBXzX1AtJlkJiUaVSJSbRAWJk+4omsXkN+EJalzkZhWQ3th1m0FpR5xA==" 4139 + }, 4140 + "node_modules/read-cache": { 4141 + "version": "1.0.0", 4142 + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", 4143 + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", 4144 + "dependencies": { 4145 + "pify": "^2.3.0" 4146 + } 4147 + }, 4148 + "node_modules/readable-stream": { 4149 + "version": "3.6.2", 4150 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 4151 + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 4152 + "dependencies": { 4153 + "inherits": "^2.0.3", 4154 + "string_decoder": "^1.1.1", 4155 + "util-deprecate": "^1.0.1" 4156 + }, 4157 + "engines": { 4158 + "node": ">= 6" 4159 + } 4160 + }, 4161 + "node_modules/readdirp": { 4162 + "version": "4.1.2", 4163 + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", 4164 + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", 4165 + "dev": true, 4166 + "engines": { 4167 + "node": ">= 14.18.0" 4168 + }, 4169 + "funding": { 4170 + "type": "individual", 4171 + "url": "https://paulmillr.com/funding/" 4172 + } 4173 + }, 4174 + "node_modules/require-from-string": { 4175 + "version": "2.0.2", 4176 + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 4177 + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 4178 + "engines": { 4179 + "node": ">=0.10.0" 4180 + } 4181 + }, 4182 + "node_modules/resolve": { 4183 + "version": "1.22.10", 4184 + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", 4185 + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", 4186 + "dependencies": { 4187 + "is-core-module": "^2.16.0", 4188 + "path-parse": "^1.0.7", 4189 + "supports-preserve-symlinks-flag": "^1.0.0" 4190 + }, 4191 + "bin": { 4192 + "resolve": "bin/resolve" 4193 + }, 4194 + "engines": { 4195 + "node": ">= 0.4" 4196 + }, 4197 + "funding": { 4198 + "url": "https://github.com/sponsors/ljharb" 4199 + } 4200 + }, 4201 + "node_modules/resolve-from": { 4202 + "version": "4.0.0", 4203 + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 4204 + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 4205 + "dev": true, 4206 + "engines": { 4207 + "node": ">=4" 4208 + } 4209 + }, 4210 + "node_modules/reusify": { 4211 + "version": "1.1.0", 4212 + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", 4213 + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", 4214 + "engines": { 4215 + "iojs": ">=1.0.0", 4216 + "node": ">=0.10.0" 4217 + } 4218 + }, 4219 + "node_modules/robust-predicates": { 4220 + "version": "3.0.2", 4221 + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", 4222 + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" 4223 + }, 4224 + "node_modules/rollup": { 4225 + "version": "4.34.8", 4226 + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.8.tgz", 4227 + "integrity": "sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==", 4228 + "dependencies": { 4229 + "@types/estree": "1.0.6" 4230 + }, 4231 + "bin": { 4232 + "rollup": "dist/bin/rollup" 4233 + }, 4234 + "engines": { 4235 + "node": ">=18.0.0", 4236 + "npm": ">=8.0.0" 4237 + }, 4238 + "optionalDependencies": { 4239 + "@rollup/rollup-android-arm-eabi": "4.34.8", 4240 + "@rollup/rollup-android-arm64": "4.34.8", 4241 + "@rollup/rollup-darwin-arm64": "4.34.8", 4242 + "@rollup/rollup-darwin-x64": "4.34.8", 4243 + "@rollup/rollup-freebsd-arm64": "4.34.8", 4244 + "@rollup/rollup-freebsd-x64": "4.34.8", 4245 + "@rollup/rollup-linux-arm-gnueabihf": "4.34.8", 4246 + "@rollup/rollup-linux-arm-musleabihf": "4.34.8", 4247 + "@rollup/rollup-linux-arm64-gnu": "4.34.8", 4248 + "@rollup/rollup-linux-arm64-musl": "4.34.8", 4249 + "@rollup/rollup-linux-loongarch64-gnu": "4.34.8", 4250 + "@rollup/rollup-linux-powerpc64le-gnu": "4.34.8", 4251 + "@rollup/rollup-linux-riscv64-gnu": "4.34.8", 4252 + "@rollup/rollup-linux-s390x-gnu": "4.34.8", 4253 + "@rollup/rollup-linux-x64-gnu": "4.34.8", 4254 + "@rollup/rollup-linux-x64-musl": "4.34.8", 4255 + "@rollup/rollup-win32-arm64-msvc": "4.34.8", 4256 + "@rollup/rollup-win32-ia32-msvc": "4.34.8", 4257 + "@rollup/rollup-win32-x64-msvc": "4.34.8", 4258 + "fsevents": "~2.3.2" 4259 + } 4260 + }, 4261 + "node_modules/run-parallel": { 4262 + "version": "1.2.0", 4263 + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 4264 + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 4265 + "funding": [ 4266 + { 4267 + "type": "github", 4268 + "url": "https://github.com/sponsors/feross" 4269 + }, 4270 + { 4271 + "type": "patreon", 4272 + "url": "https://www.patreon.com/feross" 4273 + }, 4274 + { 4275 + "type": "consulting", 4276 + "url": "https://feross.org/support" 4277 + } 4278 + ], 4279 + "dependencies": { 4280 + "queue-microtask": "^1.2.2" 4281 + } 4282 + }, 4283 + "node_modules/runed": { 4284 + "version": "0.23.4", 4285 + "resolved": "https://registry.npmjs.org/runed/-/runed-0.23.4.tgz", 4286 + "integrity": "sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA==", 4287 + "funding": [ 4288 + "https://github.com/sponsors/huntabyte", 4289 + "https://github.com/sponsors/tglide" 4290 + ], 4291 + "dependencies": { 4292 + "esm-env": "^1.0.0" 4293 + }, 4294 + "peerDependencies": { 4295 + "svelte": "^5.7.0" 4296 + } 4297 + }, 4298 + "node_modules/rw": { 4299 + "version": "1.3.3", 4300 + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", 4301 + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" 4302 + }, 4303 + "node_modules/sade": { 4304 + "version": "1.8.1", 4305 + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", 4306 + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", 4307 + "dependencies": { 4308 + "mri": "^1.1.0" 4309 + }, 4310 + "engines": { 4311 + "node": ">=6" 4312 + } 4313 + }, 4314 + "node_modules/safe-buffer": { 4315 + "version": "5.2.1", 4316 + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 4317 + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 4318 + "funding": [ 4319 + { 4320 + "type": "github", 4321 + "url": "https://github.com/sponsors/feross" 4322 + }, 4323 + { 4324 + "type": "patreon", 4325 + "url": "https://www.patreon.com/feross" 4326 + }, 4327 + { 4328 + "type": "consulting", 4329 + "url": "https://feross.org/support" 4330 + } 4331 + ] 4332 + }, 4333 + "node_modules/safe-stable-stringify": { 4334 + "version": "2.5.0", 4335 + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", 4336 + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", 4337 + "engines": { 4338 + "node": ">=10" 4339 + } 4340 + }, 4341 + "node_modules/safer-buffer": { 4342 + "version": "2.1.2", 4343 + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 4344 + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 4345 + }, 4346 + "node_modules/semver": { 4347 + "version": "7.7.1", 4348 + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", 4349 + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", 4350 + "dev": true, 4351 + "bin": { 4352 + "semver": "bin/semver.js" 4353 + }, 4354 + "engines": { 4355 + "node": ">=10" 4356 + } 4357 + }, 4358 + "node_modules/set-cookie-parser": { 4359 + "version": "2.7.1", 4360 + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", 4361 + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==" 4362 + }, 4363 + "node_modules/shapefile": { 4364 + "version": "0.6.6", 4365 + "resolved": "https://registry.npmjs.org/shapefile/-/shapefile-0.6.6.tgz", 4366 + "integrity": "sha512-rLGSWeK2ufzCVx05wYd+xrWnOOdSV7xNUW5/XFgx3Bc02hBkpMlrd2F1dDII7/jhWzv0MSyBFh5uJIy9hLdfuw==", 4367 + "dependencies": { 4368 + "array-source": "0.0", 4369 + "commander": "2", 4370 + "path-source": "0.1", 4371 + "slice-source": "0.4", 4372 + "stream-source": "0.3", 4373 + "text-encoding": "^0.6.4" 4374 + }, 4375 + "bin": { 4376 + "dbf2json": "bin/dbf2json", 4377 + "shp2json": "bin/shp2json" 4378 + } 4379 + }, 4380 + "node_modules/shapefile/node_modules/commander": { 4381 + "version": "2.20.3", 4382 + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 4383 + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" 4384 + }, 4385 + "node_modules/shebang-command": { 4386 + "version": "2.0.0", 4387 + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 4388 + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 4389 + "dependencies": { 4390 + "shebang-regex": "^3.0.0" 4391 + }, 4392 + "engines": { 4393 + "node": ">=8" 4394 + } 4395 + }, 4396 + "node_modules/shebang-regex": { 4397 + "version": "3.0.0", 4398 + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 4399 + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 4400 + "engines": { 4401 + "node": ">=8" 4402 + } 4403 + }, 4404 + "node_modules/signal-exit": { 4405 + "version": "4.1.0", 4406 + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 4407 + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 4408 + "engines": { 4409 + "node": ">=14" 4410 + }, 4411 + "funding": { 4412 + "url": "https://github.com/sponsors/isaacs" 4413 + } 4414 + }, 4415 + "node_modules/simple-swizzle": { 4416 + "version": "0.2.2", 4417 + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", 4418 + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", 4419 + "dependencies": { 4420 + "is-arrayish": "^0.3.1" 4421 + } 4422 + }, 4423 + "node_modules/sirv": { 4424 + "version": "3.0.1", 4425 + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz", 4426 + "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==", 4427 + "dependencies": { 4428 + "@polka/url": "^1.0.0-next.24", 4429 + "mrmime": "^2.0.0", 4430 + "totalist": "^3.0.0" 4431 + }, 4432 + "engines": { 4433 + "node": ">=18" 4434 + } 4435 + }, 4436 + "node_modules/slice-source": { 4437 + "version": "0.4.1", 4438 + "resolved": "https://registry.npmjs.org/slice-source/-/slice-source-0.4.1.tgz", 4439 + "integrity": "sha512-YiuPbxpCj4hD9Qs06hGAz/OZhQ0eDuALN0lRWJez0eD/RevzKqGdUx1IOMUnXgpr+sXZLq3g8ERwbAH0bCb8vg==" 4440 + }, 4441 + "node_modules/source-map-js": { 4442 + "version": "1.2.1", 4443 + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 4444 + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 4445 + "engines": { 4446 + "node": ">=0.10.0" 4447 + } 4448 + }, 4449 + "node_modules/stack-trace": { 4450 + "version": "0.0.10", 4451 + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", 4452 + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", 4453 + "engines": { 4454 + "node": "*" 4455 + } 4456 + }, 4457 + "node_modules/stream-source": { 4458 + "version": "0.3.5", 4459 + "resolved": "https://registry.npmjs.org/stream-source/-/stream-source-0.3.5.tgz", 4460 + "integrity": "sha512-ZuEDP9sgjiAwUVoDModftG0JtYiLUV8K4ljYD1VyUMRWtbVf92474o4kuuul43iZ8t/hRuiDAx1dIJSvirrK/g==" 4461 + }, 4462 + "node_modules/string_decoder": { 4463 + "version": "1.3.0", 4464 + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 4465 + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 4466 + "dependencies": { 4467 + "safe-buffer": "~5.2.0" 4468 + } 4469 + }, 4470 + "node_modules/string-width": { 4471 + "version": "5.1.2", 4472 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 4473 + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 4474 + "dependencies": { 4475 + "eastasianwidth": "^0.2.0", 4476 + "emoji-regex": "^9.2.2", 4477 + "strip-ansi": "^7.0.1" 4478 + }, 4479 + "engines": { 4480 + "node": ">=12" 4481 + }, 4482 + "funding": { 4483 + "url": "https://github.com/sponsors/sindresorhus" 4484 + } 4485 + }, 4486 + "node_modules/string-width-cjs": { 4487 + "name": "string-width", 4488 + "version": "4.2.3", 4489 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 4490 + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 4491 + "dependencies": { 4492 + "emoji-regex": "^8.0.0", 4493 + "is-fullwidth-code-point": "^3.0.0", 4494 + "strip-ansi": "^6.0.1" 4495 + }, 4496 + "engines": { 4497 + "node": ">=8" 4498 + } 4499 + }, 4500 + "node_modules/string-width-cjs/node_modules/ansi-regex": { 4501 + "version": "5.0.1", 4502 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 4503 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 4504 + "engines": { 4505 + "node": ">=8" 4506 + } 4507 + }, 4508 + "node_modules/string-width-cjs/node_modules/emoji-regex": { 4509 + "version": "8.0.0", 4510 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 4511 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 4512 + }, 4513 + "node_modules/string-width-cjs/node_modules/strip-ansi": { 4514 + "version": "6.0.1", 4515 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 4516 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 4517 + "dependencies": { 4518 + "ansi-regex": "^5.0.1" 4519 + }, 4520 + "engines": { 4521 + "node": ">=8" 4522 + } 4523 + }, 4524 + "node_modules/strip-ansi": { 4525 + "version": "7.1.0", 4526 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 4527 + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 4528 + "dependencies": { 4529 + "ansi-regex": "^6.0.1" 4530 + }, 4531 + "engines": { 4532 + "node": ">=12" 4533 + }, 4534 + "funding": { 4535 + "url": "https://github.com/chalk/strip-ansi?sponsor=1" 4536 + } 4537 + }, 4538 + "node_modules/strip-ansi-cjs": { 4539 + "name": "strip-ansi", 4540 + "version": "6.0.1", 4541 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 4542 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 4543 + "dependencies": { 4544 + "ansi-regex": "^5.0.1" 4545 + }, 4546 + "engines": { 4547 + "node": ">=8" 4548 + } 4549 + }, 4550 + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { 4551 + "version": "5.0.1", 4552 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 4553 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 4554 + "engines": { 4555 + "node": ">=8" 4556 + } 4557 + }, 4558 + "node_modules/strip-json-comments": { 4559 + "version": "3.1.1", 4560 + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 4561 + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 4562 + "dev": true, 4563 + "engines": { 4564 + "node": ">=8" 4565 + }, 4566 + "funding": { 4567 + "url": "https://github.com/sponsors/sindresorhus" 4568 + } 4569 + }, 4570 + "node_modules/style-to-object": { 4571 + "version": "1.0.8", 4572 + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", 4573 + "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", 4574 + "dependencies": { 4575 + "inline-style-parser": "0.2.4" 4576 + } 4577 + }, 4578 + "node_modules/sucrase": { 4579 + "version": "3.35.0", 4580 + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", 4581 + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", 4582 + "dependencies": { 4583 + "@jridgewell/gen-mapping": "^0.3.2", 4584 + "commander": "^4.0.0", 4585 + "glob": "^10.3.10", 4586 + "lines-and-columns": "^1.1.6", 4587 + "mz": "^2.7.0", 4588 + "pirates": "^4.0.1", 4589 + "ts-interface-checker": "^0.1.9" 4590 + }, 4591 + "bin": { 4592 + "sucrase": "bin/sucrase", 4593 + "sucrase-node": "bin/sucrase-node" 4594 + }, 4595 + "engines": { 4596 + "node": ">=16 || 14 >=14.17" 4597 + } 4598 + }, 4599 + "node_modules/supports-color": { 4600 + "version": "7.2.0", 4601 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 4602 + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 4603 + "dev": true, 4604 + "dependencies": { 4605 + "has-flag": "^4.0.0" 4606 + }, 4607 + "engines": { 4608 + "node": ">=8" 4609 + } 4610 + }, 4611 + "node_modules/supports-preserve-symlinks-flag": { 4612 + "version": "1.0.0", 4613 + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 4614 + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 4615 + "engines": { 4616 + "node": ">= 0.4" 4617 + }, 4618 + "funding": { 4619 + "url": "https://github.com/sponsors/ljharb" 4620 + } 4621 + }, 4622 + "node_modules/svelte": { 4623 + "version": "5.20.4", 4624 + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.20.4.tgz", 4625 + "integrity": "sha512-2Mo/AfObaw9zuD0u1JJ7sOVzRCGcpETEyDkLbtkcctWpCMCIyT0iz83xD8JT29SR7O4SgswuPRIDYReYF/607A==", 4626 + "dependencies": { 4627 + "@ampproject/remapping": "^2.3.0", 4628 + "@jridgewell/sourcemap-codec": "^1.5.0", 4629 + "@types/estree": "^1.0.5", 4630 + "acorn": "^8.12.1", 4631 + "acorn-typescript": "^1.4.13", 4632 + "aria-query": "^5.3.1", 4633 + "axobject-query": "^4.1.0", 4634 + "clsx": "^2.1.1", 4635 + "esm-env": "^1.2.1", 4636 + "esrap": "^1.4.3", 4637 + "is-reference": "^3.0.3", 4638 + "locate-character": "^3.0.0", 4639 + "magic-string": "^0.30.11", 4640 + "zimmerframe": "^1.1.2" 4641 + }, 4642 + "engines": { 4643 + "node": ">=18" 4644 + } 4645 + }, 4646 + "node_modules/svelte-check": { 4647 + "version": "4.1.4", 4648 + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.1.4.tgz", 4649 + "integrity": "sha512-v0j7yLbT29MezzaQJPEDwksybTE2Ups9rUxEXy92T06TiA0cbqcO8wAOwNUVkFW6B0hsYHA+oAX3BS8b/2oHtw==", 4650 + "dev": true, 4651 + "dependencies": { 4652 + "@jridgewell/trace-mapping": "^0.3.25", 4653 + "chokidar": "^4.0.1", 4654 + "fdir": "^6.2.0", 4655 + "picocolors": "^1.0.0", 4656 + "sade": "^1.7.4" 4657 + }, 4658 + "bin": { 4659 + "svelte-check": "bin/svelte-check" 4660 + }, 4661 + "engines": { 4662 + "node": ">= 18.0.0" 4663 + }, 4664 + "peerDependencies": { 4665 + "svelte": "^4.0.0 || ^5.0.0-next.0", 4666 + "typescript": ">=5.0.0" 4667 + } 4668 + }, 4669 + "node_modules/svelte-eslint-parser": { 4670 + "version": "0.43.0", 4671 + "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.43.0.tgz", 4672 + "integrity": "sha512-GpU52uPKKcVnh8tKN5P4UZpJ/fUDndmq7wfsvoVXsyP+aY0anol7Yqo01fyrlaWGMFfm4av5DyrjlaXdLRJvGA==", 4673 + "dev": true, 4674 + "dependencies": { 4675 + "eslint-scope": "^7.2.2", 4676 + "eslint-visitor-keys": "^3.4.3", 4677 + "espree": "^9.6.1", 4678 + "postcss": "^8.4.39", 4679 + "postcss-scss": "^4.0.9" 4680 + }, 4681 + "engines": { 4682 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 4683 + }, 4684 + "funding": { 4685 + "url": "https://github.com/sponsors/ota-meshi" 4686 + }, 4687 + "peerDependencies": { 4688 + "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0" 4689 + }, 4690 + "peerDependenciesMeta": { 4691 + "svelte": { 4692 + "optional": true 4693 + } 4694 + } 4695 + }, 4696 + "node_modules/svelte-eslint-parser/node_modules/eslint-scope": { 4697 + "version": "7.2.2", 4698 + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", 4699 + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", 4700 + "dev": true, 4701 + "dependencies": { 4702 + "esrecurse": "^4.3.0", 4703 + "estraverse": "^5.2.0" 4704 + }, 4705 + "engines": { 4706 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 4707 + }, 4708 + "funding": { 4709 + "url": "https://opencollective.com/eslint" 4710 + } 4711 + }, 4712 + "node_modules/svelte-eslint-parser/node_modules/eslint-visitor-keys": { 4713 + "version": "3.4.3", 4714 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 4715 + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 4716 + "dev": true, 4717 + "engines": { 4718 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 4719 + }, 4720 + "funding": { 4721 + "url": "https://opencollective.com/eslint" 4722 + } 4723 + }, 4724 + "node_modules/svelte-eslint-parser/node_modules/espree": { 4725 + "version": "9.6.1", 4726 + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", 4727 + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", 4728 + "dev": true, 4729 + "dependencies": { 4730 + "acorn": "^8.9.0", 4731 + "acorn-jsx": "^5.3.2", 4732 + "eslint-visitor-keys": "^3.4.1" 4733 + }, 4734 + "engines": { 4735 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 4736 + }, 4737 + "funding": { 4738 + "url": "https://opencollective.com/eslint" 4739 + } 4740 + }, 4741 + "node_modules/svelte-toolbelt": { 4742 + "version": "0.7.1", 4743 + "resolved": "https://registry.npmjs.org/svelte-toolbelt/-/svelte-toolbelt-0.7.1.tgz", 4744 + "integrity": "sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ==", 4745 + "funding": [ 4746 + "https://github.com/sponsors/huntabyte" 4747 + ], 4748 + "dependencies": { 4749 + "clsx": "^2.1.1", 4750 + "runed": "^0.23.2", 4751 + "style-to-object": "^1.0.8" 4752 + }, 4753 + "engines": { 4754 + "node": ">=18", 4755 + "pnpm": ">=8.7.0" 4756 + }, 4757 + "peerDependencies": { 4758 + "svelte": "^5.0.0" 4759 + } 4760 + }, 4761 + "node_modules/tabbable": { 4762 + "version": "6.2.0", 4763 + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", 4764 + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" 4765 + }, 4766 + "node_modules/tailwind-merge": { 4767 + "version": "2.5.4", 4768 + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.4.tgz", 4769 + "integrity": "sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==", 4770 + "funding": { 4771 + "type": "github", 4772 + "url": "https://github.com/sponsors/dcastil" 4773 + } 4774 + }, 4775 + "node_modules/tailwind-variants": { 4776 + "version": "0.3.1", 4777 + "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-0.3.1.tgz", 4778 + "integrity": "sha512-krn67M3FpPwElg4FsZrOQd0U26o7UDH/QOkK8RNaiCCrr052f6YJPBUfNKnPo/s/xRzNPtv1Mldlxsg8Tb46BQ==", 4779 + "dependencies": { 4780 + "tailwind-merge": "2.5.4" 4781 + }, 4782 + "engines": { 4783 + "node": ">=16.x", 4784 + "pnpm": ">=7.x" 4785 + }, 4786 + "peerDependencies": { 4787 + "tailwindcss": "*" 4788 + } 4789 + }, 4790 + "node_modules/tailwindcss": { 4791 + "version": "3.4.17", 4792 + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", 4793 + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", 4794 + "dependencies": { 4795 + "@alloc/quick-lru": "^5.2.0", 4796 + "arg": "^5.0.2", 4797 + "chokidar": "^3.6.0", 4798 + "didyoumean": "^1.2.2", 4799 + "dlv": "^1.1.3", 4800 + "fast-glob": "^3.3.2", 4801 + "glob-parent": "^6.0.2", 4802 + "is-glob": "^4.0.3", 4803 + "jiti": "^1.21.6", 4804 + "lilconfig": "^3.1.3", 4805 + "micromatch": "^4.0.8", 4806 + "normalize-path": "^3.0.0", 4807 + "object-hash": "^3.0.0", 4808 + "picocolors": "^1.1.1", 4809 + "postcss": "^8.4.47", 4810 + "postcss-import": "^15.1.0", 4811 + "postcss-js": "^4.0.1", 4812 + "postcss-load-config": "^4.0.2", 4813 + "postcss-nested": "^6.2.0", 4814 + "postcss-selector-parser": "^6.1.2", 4815 + "resolve": "^1.22.8", 4816 + "sucrase": "^3.35.0" 4817 + }, 4818 + "bin": { 4819 + "tailwind": "lib/cli.js", 4820 + "tailwindcss": "lib/cli.js" 4821 + }, 4822 + "engines": { 4823 + "node": ">=14.0.0" 4824 + } 4825 + }, 4826 + "node_modules/tailwindcss-animate": { 4827 + "version": "1.0.7", 4828 + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", 4829 + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", 4830 + "peerDependencies": { 4831 + "tailwindcss": ">=3.0.0 || insiders" 4832 + } 4833 + }, 4834 + "node_modules/tailwindcss/node_modules/chokidar": { 4835 + "version": "3.6.0", 4836 + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", 4837 + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", 4838 + "dependencies": { 4839 + "anymatch": "~3.1.2", 4840 + "braces": "~3.0.2", 4841 + "glob-parent": "~5.1.2", 4842 + "is-binary-path": "~2.1.0", 4843 + "is-glob": "~4.0.1", 4844 + "normalize-path": "~3.0.0", 4845 + "readdirp": "~3.6.0" 4846 + }, 4847 + "engines": { 4848 + "node": ">= 8.10.0" 4849 + }, 4850 + "funding": { 4851 + "url": "https://paulmillr.com/funding/" 4852 + }, 4853 + "optionalDependencies": { 4854 + "fsevents": "~2.3.2" 4855 + } 4856 + }, 4857 + "node_modules/tailwindcss/node_modules/chokidar/node_modules/glob-parent": { 4858 + "version": "5.1.2", 4859 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 4860 + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 4861 + "dependencies": { 4862 + "is-glob": "^4.0.1" 4863 + }, 4864 + "engines": { 4865 + "node": ">= 6" 4866 + } 4867 + }, 4868 + "node_modules/tailwindcss/node_modules/lilconfig": { 4869 + "version": "3.1.3", 4870 + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", 4871 + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", 4872 + "engines": { 4873 + "node": ">=14" 4874 + }, 4875 + "funding": { 4876 + "url": "https://github.com/sponsors/antonk52" 4877 + } 4878 + }, 4879 + "node_modules/tailwindcss/node_modules/picomatch": { 4880 + "version": "2.3.1", 4881 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 4882 + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 4883 + "engines": { 4884 + "node": ">=8.6" 4885 + }, 4886 + "funding": { 4887 + "url": "https://github.com/sponsors/jonschlinkert" 4888 + } 4889 + }, 4890 + "node_modules/tailwindcss/node_modules/postcss-load-config": { 4891 + "version": "4.0.2", 4892 + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", 4893 + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", 4894 + "funding": [ 4895 + { 4896 + "type": "opencollective", 4897 + "url": "https://opencollective.com/postcss/" 4898 + }, 4899 + { 4900 + "type": "github", 4901 + "url": "https://github.com/sponsors/ai" 4902 + } 4903 + ], 4904 + "dependencies": { 4905 + "lilconfig": "^3.0.0", 4906 + "yaml": "^2.3.4" 4907 + }, 4908 + "engines": { 4909 + "node": ">= 14" 4910 + }, 4911 + "peerDependencies": { 4912 + "postcss": ">=8.0.9", 4913 + "ts-node": ">=9.0.0" 4914 + }, 4915 + "peerDependenciesMeta": { 4916 + "postcss": { 4917 + "optional": true 4918 + }, 4919 + "ts-node": { 4920 + "optional": true 4921 + } 4922 + } 4923 + }, 4924 + "node_modules/tailwindcss/node_modules/readdirp": { 4925 + "version": "3.6.0", 4926 + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 4927 + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 4928 + "dependencies": { 4929 + "picomatch": "^2.2.1" 4930 + }, 4931 + "engines": { 4932 + "node": ">=8.10.0" 4933 + } 4934 + }, 4935 + "node_modules/text-encoding": { 4936 + "version": "0.6.4", 4937 + "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", 4938 + "integrity": "sha512-hJnc6Qg3dWoOMkqP53F0dzRIgtmsAge09kxUIqGrEUS4qr5rWLckGYaQAVr+opBrIMRErGgy6f5aPnyPpyGRfg==", 4939 + "deprecated": "no longer maintained" 4940 + }, 4941 + "node_modules/text-hex": { 4942 + "version": "1.0.0", 4943 + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", 4944 + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" 4945 + }, 4946 + "node_modules/thenify": { 4947 + "version": "3.3.1", 4948 + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", 4949 + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", 4950 + "dependencies": { 4951 + "any-promise": "^1.0.0" 4952 + } 4953 + }, 4954 + "node_modules/thenify-all": { 4955 + "version": "1.6.0", 4956 + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", 4957 + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", 4958 + "dependencies": { 4959 + "thenify": ">= 3.1.0 < 4" 4960 + }, 4961 + "engines": { 4962 + "node": ">=0.8" 4963 + } 4964 + }, 4965 + "node_modules/three": { 4966 + "version": "0.173.0", 4967 + "resolved": "https://registry.npmjs.org/three/-/three-0.173.0.tgz", 4968 + "integrity": "sha512-AUwVmViIEUgBwxJJ7stnF0NkPpZxx1aZ6WiAbQ/Qq61h6I9UR4grXtZDmO8mnlaNORhHnIBlXJ1uBxILEKuVyw==" 4969 + }, 4970 + "node_modules/three-instanced-uniforms-mesh": { 4971 + "version": "0.52.0", 4972 + "resolved": "https://registry.npmjs.org/three-instanced-uniforms-mesh/-/three-instanced-uniforms-mesh-0.52.0.tgz", 4973 + "integrity": "sha512-YuJigan74qBmt2X8XX4DCxGl42GQXQZWSyy8jos1kqjPyzR7IVl9Jk4HvOGEzb5pI7phVcaArImhaW2FZH3zpA==", 4974 + "dependencies": { 4975 + "troika-three-utils": "^0.52.0" 4976 + }, 4977 + "peerDependencies": { 4978 + "three": ">=0.125.0" 4979 + } 4980 + }, 4981 + "node_modules/three-mesh-bvh": { 4982 + "version": "0.7.6", 4983 + "resolved": "https://registry.npmjs.org/three-mesh-bvh/-/three-mesh-bvh-0.7.6.tgz", 4984 + "integrity": "sha512-rCjsnxEqR9r1/C/lCqzGLS67NDty/S/eT6rAJfDvsanrIctTWdNoR4ZOGWewCB13h1QkVo2BpmC0wakj1+0m8A==", 4985 + "peerDependencies": { 4986 + "three": ">= 0.151.0" 4987 + } 4988 + }, 4989 + "node_modules/three-perf": { 4990 + "version": "1.0.10", 4991 + "resolved": "git+ssh://git@github.com/jerzakm/three-perf.git#322d7d38a17069f2b6e9734913edad0fc4a29169", 4992 + "license": "MIT", 4993 + "dependencies": { 4994 + "troika-three-text": "^0.52.0", 4995 + "tweakpane": "^3.1.10" 4996 + }, 4997 + "peerDependencies": { 4998 + "three": ">=0.170" 4999 + } 5000 + }, 5001 + "node_modules/three-perf/node_modules/troika-three-text": { 5002 + "version": "0.52.3", 5003 + "resolved": "https://registry.npmjs.org/troika-three-text/-/troika-three-text-0.52.3.tgz", 5004 + "integrity": "sha512-jLhiwgV8kEkwWjvK12f2fHVpbOC75p7SgPQ0cgcz+IMtN5Bdyg4EuFdwuTOVu9ga8UeYdKBpzd1AxviyixtYTQ==", 5005 + "dependencies": { 5006 + "bidi-js": "^1.0.2", 5007 + "troika-three-utils": "^0.52.0", 5008 + "troika-worker-utils": "^0.52.0", 5009 + "webgl-sdf-generator": "1.1.1" 5010 + }, 5011 + "peerDependencies": { 5012 + "three": ">=0.125.0" 5013 + } 5014 + }, 5015 + "node_modules/three-perf/node_modules/troika-worker-utils": { 5016 + "version": "0.52.0", 5017 + "resolved": "https://registry.npmjs.org/troika-worker-utils/-/troika-worker-utils-0.52.0.tgz", 5018 + "integrity": "sha512-W1CpvTHykaPH5brv5VHLfQo9D1OYuo0cSBEUQFFT/nBUzM8iD6Lq2/tgG/f1OelbAS1WtaTPQzE5uM49egnngw==" 5019 + }, 5020 + "node_modules/three-viewport-gizmo": { 5021 + "version": "2.1.0", 5022 + "resolved": "https://registry.npmjs.org/three-viewport-gizmo/-/three-viewport-gizmo-2.1.0.tgz", 5023 + "integrity": "sha512-z7AMqAzONzAEOgoLa9gtakANvdbjdKgpzdWqHWinnx6ZAHblo//Wcqbl4h8y8vdNjKvxZiOVzPy1y5FI6VZQww==", 5024 + "dependencies": { 5025 + "audit": "^0.0.6", 5026 + "build": "^0.1.4" 5027 + }, 5028 + "peerDependencies": { 5029 + "three": ">=0.162.0 <1.0.0" 5030 + } 5031 + }, 5032 + "node_modules/timespan": { 5033 + "version": "2.3.0", 5034 + "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz", 5035 + "integrity": "sha512-0Jq9+58T2wbOyLth0EU+AUb6JMGCLaTWIykJFa7hyAybjVH9gpVMTfUAwo5fWAvtFt2Tjh/Elg8JtgNpnMnM8g==", 5036 + "engines": { 5037 + "node": ">= 0.2.0" 5038 + } 5039 + }, 5040 + "node_modules/tmpl": { 5041 + "version": "1.0.5", 5042 + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", 5043 + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" 5044 + }, 5045 + "node_modules/to-regex-range": { 5046 + "version": "5.0.1", 5047 + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 5048 + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 5049 + "dependencies": { 5050 + "is-number": "^7.0.0" 5051 + }, 5052 + "engines": { 5053 + "node": ">=8.0" 5054 + } 5055 + }, 5056 + "node_modules/topojson-client": { 5057 + "version": "3.1.0", 5058 + "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", 5059 + "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", 5060 + "dependencies": { 5061 + "commander": "2" 5062 + }, 5063 + "bin": { 5064 + "topo2geo": "bin/topo2geo", 5065 + "topomerge": "bin/topomerge", 5066 + "topoquantize": "bin/topoquantize" 5067 + } 5068 + }, 5069 + "node_modules/topojson-client/node_modules/commander": { 5070 + "version": "2.20.3", 5071 + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 5072 + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" 5073 + }, 5074 + "node_modules/totalist": { 5075 + "version": "3.0.1", 5076 + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", 5077 + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", 5078 + "engines": { 5079 + "node": ">=6" 5080 + } 5081 + }, 5082 + "node_modules/triple-beam": { 5083 + "version": "1.4.1", 5084 + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", 5085 + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", 5086 + "engines": { 5087 + "node": ">= 14.0.0" 5088 + } 5089 + }, 5090 + "node_modules/troika-three-text": { 5091 + "version": "0.50.3", 5092 + "resolved": "https://registry.npmjs.org/troika-three-text/-/troika-three-text-0.50.3.tgz", 5093 + "integrity": "sha512-UzbIrgV3fOFmFbFfWIBcBEXEyQovs+LLu15E5xGpSQbo1oZH49A+J9bul4H8H0xLtaLkRTO+LqEsmkaeDtZQfg==", 5094 + "dependencies": { 5095 + "bidi-js": "^1.0.2", 5096 + "troika-three-utils": "^0.50.3", 5097 + "troika-worker-utils": "^0.50.0", 5098 + "webgl-sdf-generator": "1.1.1" 5099 + }, 5100 + "peerDependencies": { 5101 + "three": ">=0.125.0" 5102 + } 5103 + }, 5104 + "node_modules/troika-three-text/node_modules/troika-three-utils": { 5105 + "version": "0.50.3", 5106 + "resolved": "https://registry.npmjs.org/troika-three-utils/-/troika-three-utils-0.50.3.tgz", 5107 + "integrity": "sha512-asQWCESikU58y9cz4OgIjCRlITkDTwf7ds8T9IyWxn7OB2A7XItg2UbHjfexwooTefM+BYbEC4ZKxOUBfbNVLA==", 5108 + "peerDependencies": { 5109 + "three": ">=0.125.0" 5110 + } 5111 + }, 5112 + "node_modules/troika-three-utils": { 5113 + "version": "0.52.0", 5114 + "resolved": "https://registry.npmjs.org/troika-three-utils/-/troika-three-utils-0.52.0.tgz", 5115 + "integrity": "sha512-00oxqIIehtEKInOTQekgyknBuRUj1POfOUE2q1OmL+Xlpp4gIu+S0oA0schTyXsDS4d9DkR04iqCdD40rF5R6w==", 5116 + "peerDependencies": { 5117 + "three": ">=0.125.0" 5118 + } 5119 + }, 5120 + "node_modules/troika-worker-utils": { 5121 + "version": "0.50.0", 5122 + "resolved": "https://registry.npmjs.org/troika-worker-utils/-/troika-worker-utils-0.50.0.tgz", 5123 + "integrity": "sha512-BxNk0w6+d9NYd7El/3RzlzH/F2vovJI1FX9Zb+D7fArVM1EsUXj6+wVwJSrfucy6/HYhfbZPu/lD6Miiw9Byiw==" 5124 + }, 5125 + "node_modules/ts-api-utils": { 5126 + "version": "2.0.1", 5127 + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", 5128 + "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", 5129 + "dev": true, 5130 + "engines": { 5131 + "node": ">=18.12" 5132 + }, 5133 + "peerDependencies": { 5134 + "typescript": ">=4.8.4" 5135 + } 5136 + }, 5137 + "node_modules/ts-interface-checker": { 5138 + "version": "0.1.13", 5139 + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", 5140 + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" 5141 + }, 5142 + "node_modules/tslib": { 5143 + "version": "2.8.1", 5144 + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 5145 + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" 5146 + }, 5147 + "node_modules/tw-colors": { 5148 + "version": "3.3.2", 5149 + "resolved": "https://registry.npmjs.org/tw-colors/-/tw-colors-3.3.2.tgz", 5150 + "integrity": "sha512-TosYI43Jec/KO4NPzDoBlccPPtPMYholoRUSVYGmzCGa1Zek9exDQIQ+6UViHqqK6Nti/4wBzEGyRTxMSNnSXQ==", 5151 + "dependencies": { 5152 + "color": "^4.2.3", 5153 + "flat": "^5.0.2", 5154 + "lodash.foreach": "^4.5.0" 5155 + }, 5156 + "peerDependencies": { 5157 + "tailwindcss": ">=3.0.0" 5158 + } 5159 + }, 5160 + "node_modules/tweakpane": { 5161 + "version": "3.1.10", 5162 + "resolved": "https://registry.npmjs.org/tweakpane/-/tweakpane-3.1.10.tgz", 5163 + "integrity": "sha512-rqwnl/pUa7+inhI2E9ayGTqqP0EPOOn/wVvSWjZsRbZUItzNShny7pzwL3hVlaN4m9t/aZhsP0aFQ9U5VVR2VQ==", 5164 + "funding": { 5165 + "url": "https://github.com/sponsors/cocopon" 5166 + } 5167 + }, 5168 + "node_modules/type-check": { 5169 + "version": "0.4.0", 5170 + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 5171 + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 5172 + "dev": true, 5173 + "dependencies": { 5174 + "prelude-ls": "^1.2.1" 5175 + }, 5176 + "engines": { 5177 + "node": ">= 0.8.0" 5178 + } 5179 + }, 5180 + "node_modules/typescript": { 5181 + "version": "5.7.3", 5182 + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", 5183 + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", 5184 + "bin": { 5185 + "tsc": "bin/tsc", 5186 + "tsserver": "bin/tsserver" 5187 + }, 5188 + "engines": { 5189 + "node": ">=14.17" 5190 + } 5191 + }, 5192 + "node_modules/typescript-eslint": { 5193 + "version": "8.25.0", 5194 + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.25.0.tgz", 5195 + "integrity": "sha512-TxRdQQLH4g7JkoFlYG3caW5v1S6kEkz8rqt80iQJZUYPq1zD1Ra7HfQBJJ88ABRaMvHAXnwRvRB4V+6sQ9xN5Q==", 5196 + "dev": true, 5197 + "dependencies": { 5198 + "@typescript-eslint/eslint-plugin": "8.25.0", 5199 + "@typescript-eslint/parser": "8.25.0", 5200 + "@typescript-eslint/utils": "8.25.0" 5201 + }, 5202 + "engines": { 5203 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 5204 + }, 5205 + "funding": { 5206 + "type": "opencollective", 5207 + "url": "https://opencollective.com/typescript-eslint" 5208 + }, 5209 + "peerDependencies": { 5210 + "eslint": "^8.57.0 || ^9.0.0", 5211 + "typescript": ">=4.8.4 <5.8.0" 5212 + } 5213 + }, 5214 + "node_modules/uglify-js": { 5215 + "version": "1.3.5", 5216 + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.3.5.tgz", 5217 + "integrity": "sha512-YPX1DjKtom8l9XslmPFQnqWzTBkvI4N0pbkzLuPZZ4QTyig0uQqvZz9NgUdfEV+qccJzi7fVcGWdESvRIjWptQ==", 5218 + "bin": { 5219 + "uglifyjs": "bin/uglifyjs" 5220 + } 5221 + }, 5222 + "node_modules/update-browserslist-db": { 5223 + "version": "1.1.2", 5224 + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", 5225 + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", 5226 + "dev": true, 5227 + "funding": [ 5228 + { 5229 + "type": "opencollective", 5230 + "url": "https://opencollective.com/browserslist" 5231 + }, 5232 + { 5233 + "type": "tidelift", 5234 + "url": "https://tidelift.com/funding/github/npm/browserslist" 5235 + }, 5236 + { 5237 + "type": "github", 5238 + "url": "https://github.com/sponsors/ai" 5239 + } 5240 + ], 5241 + "dependencies": { 5242 + "escalade": "^3.2.0", 5243 + "picocolors": "^1.1.1" 5244 + }, 5245 + "bin": { 5246 + "update-browserslist-db": "cli.js" 5247 + }, 5248 + "peerDependencies": { 5249 + "browserslist": ">= 4.21.0" 5250 + } 5251 + }, 5252 + "node_modules/uri-js": { 5253 + "version": "4.4.1", 5254 + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 5255 + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 5256 + "dev": true, 5257 + "dependencies": { 5258 + "punycode": "^2.1.0" 5259 + } 5260 + }, 5261 + "node_modules/url-polyfill": { 5262 + "version": "1.1.13", 5263 + "resolved": "https://registry.npmjs.org/url-polyfill/-/url-polyfill-1.1.13.tgz", 5264 + "integrity": "sha512-tXzkojrv2SujumYthZ/WjF7jaSfNhSXlYMpE5AYdL2I3D7DCeo+mch8KtW2rUuKjDg+3VXODXHVgipt8yGY/eQ==" 5265 + }, 5266 + "node_modules/util-deprecate": { 5267 + "version": "1.0.2", 5268 + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 5269 + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 5270 + }, 5271 + "node_modules/vite": { 5272 + "version": "6.2.0", 5273 + "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.0.tgz", 5274 + "integrity": "sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==", 5275 + "dependencies": { 5276 + "esbuild": "^0.25.0", 5277 + "postcss": "^8.5.3", 5278 + "rollup": "^4.30.1" 5279 + }, 5280 + "bin": { 5281 + "vite": "bin/vite.js" 5282 + }, 5283 + "engines": { 5284 + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" 5285 + }, 5286 + "funding": { 5287 + "url": "https://github.com/vitejs/vite?sponsor=1" 5288 + }, 5289 + "optionalDependencies": { 5290 + "fsevents": "~2.3.3" 5291 + }, 5292 + "peerDependencies": { 5293 + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", 5294 + "jiti": ">=1.21.0", 5295 + "less": "*", 5296 + "lightningcss": "^1.21.0", 5297 + "sass": "*", 5298 + "sass-embedded": "*", 5299 + "stylus": "*", 5300 + "sugarss": "*", 5301 + "terser": "^5.16.0", 5302 + "tsx": "^4.8.1", 5303 + "yaml": "^2.4.2" 5304 + }, 5305 + "peerDependenciesMeta": { 5306 + "@types/node": { 5307 + "optional": true 5308 + }, 5309 + "jiti": { 5310 + "optional": true 5311 + }, 5312 + "less": { 5313 + "optional": true 5314 + }, 5315 + "lightningcss": { 5316 + "optional": true 5317 + }, 5318 + "sass": { 5319 + "optional": true 5320 + }, 5321 + "sass-embedded": { 5322 + "optional": true 5323 + }, 5324 + "stylus": { 5325 + "optional": true 5326 + }, 5327 + "sugarss": { 5328 + "optional": true 5329 + }, 5330 + "terser": { 5331 + "optional": true 5332 + }, 5333 + "tsx": { 5334 + "optional": true 5335 + }, 5336 + "yaml": { 5337 + "optional": true 5338 + } 5339 + } 5340 + }, 5341 + "node_modules/vitefu": { 5342 + "version": "1.0.6", 5343 + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.0.6.tgz", 5344 + "integrity": "sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==", 5345 + "peerDependencies": { 5346 + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" 5347 + }, 5348 + "peerDependenciesMeta": { 5349 + "vite": { 5350 + "optional": true 5351 + } 5352 + } 5353 + }, 5354 + "node_modules/walker": { 5355 + "version": "1.0.8", 5356 + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", 5357 + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", 5358 + "dependencies": { 5359 + "makeerror": "1.0.12" 5360 + } 5361 + }, 5362 + "node_modules/webgl-sdf-generator": { 5363 + "version": "1.1.1", 5364 + "resolved": "https://registry.npmjs.org/webgl-sdf-generator/-/webgl-sdf-generator-1.1.1.tgz", 5365 + "integrity": "sha512-9Z0JcMTFxeE+b2x1LJTdnaT8rT8aEp7MVxkNwoycNmJWwPdzoXzMh0BjJSh/AEFP+KPYZUli814h8bJZFIZ2jA==" 5366 + }, 5367 + "node_modules/which": { 5368 + "version": "2.0.2", 5369 + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 5370 + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 5371 + "dependencies": { 5372 + "isexe": "^2.0.0" 5373 + }, 5374 + "bin": { 5375 + "node-which": "bin/node-which" 5376 + }, 5377 + "engines": { 5378 + "node": ">= 8" 5379 + } 5380 + }, 5381 + "node_modules/winston": { 5382 + "version": "3.17.0", 5383 + "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", 5384 + "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", 5385 + "dependencies": { 5386 + "@colors/colors": "^1.6.0", 5387 + "@dabh/diagnostics": "^2.0.2", 5388 + "async": "^3.2.3", 5389 + "is-stream": "^2.0.0", 5390 + "logform": "^2.7.0", 5391 + "one-time": "^1.0.0", 5392 + "readable-stream": "^3.4.0", 5393 + "safe-stable-stringify": "^2.3.1", 5394 + "stack-trace": "0.0.x", 5395 + "triple-beam": "^1.3.0", 5396 + "winston-transport": "^4.9.0" 5397 + }, 5398 + "engines": { 5399 + "node": ">= 12.0.0" 5400 + } 5401 + }, 5402 + "node_modules/winston-transport": { 5403 + "version": "4.9.0", 5404 + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", 5405 + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", 5406 + "dependencies": { 5407 + "logform": "^2.7.0", 5408 + "readable-stream": "^3.6.2", 5409 + "triple-beam": "^1.3.0" 5410 + }, 5411 + "engines": { 5412 + "node": ">= 12.0.0" 5413 + } 5414 + }, 5415 + "node_modules/word-wrap": { 5416 + "version": "1.2.5", 5417 + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", 5418 + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", 5419 + "dev": true, 5420 + "engines": { 5421 + "node": ">=0.10.0" 5422 + } 5423 + }, 5424 + "node_modules/wrap-ansi": { 5425 + "version": "8.1.0", 5426 + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 5427 + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 5428 + "dependencies": { 5429 + "ansi-styles": "^6.1.0", 5430 + "string-width": "^5.0.1", 5431 + "strip-ansi": "^7.0.1" 5432 + }, 5433 + "engines": { 5434 + "node": ">=12" 5435 + }, 5436 + "funding": { 5437 + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 5438 + } 5439 + }, 5440 + "node_modules/wrap-ansi-cjs": { 5441 + "name": "wrap-ansi", 5442 + "version": "7.0.0", 5443 + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 5444 + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 5445 + "dependencies": { 5446 + "ansi-styles": "^4.0.0", 5447 + "string-width": "^4.1.0", 5448 + "strip-ansi": "^6.0.0" 5449 + }, 5450 + "engines": { 5451 + "node": ">=10" 5452 + }, 5453 + "funding": { 5454 + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 5455 + } 5456 + }, 5457 + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { 5458 + "version": "5.0.1", 5459 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 5460 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 5461 + "engines": { 5462 + "node": ">=8" 5463 + } 5464 + }, 5465 + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { 5466 + "version": "8.0.0", 5467 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 5468 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 5469 + }, 5470 + "node_modules/wrap-ansi-cjs/node_modules/string-width": { 5471 + "version": "4.2.3", 5472 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 5473 + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 5474 + "dependencies": { 5475 + "emoji-regex": "^8.0.0", 5476 + "is-fullwidth-code-point": "^3.0.0", 5477 + "strip-ansi": "^6.0.1" 5478 + }, 5479 + "engines": { 5480 + "node": ">=8" 5481 + } 5482 + }, 5483 + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { 5484 + "version": "6.0.1", 5485 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 5486 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 5487 + "dependencies": { 5488 + "ansi-regex": "^5.0.1" 5489 + }, 5490 + "engines": { 5491 + "node": ">=8" 5492 + } 5493 + }, 5494 + "node_modules/wrap-ansi/node_modules/ansi-styles": { 5495 + "version": "6.2.1", 5496 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 5497 + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 5498 + "engines": { 5499 + "node": ">=12" 5500 + }, 5501 + "funding": { 5502 + "url": "https://github.com/chalk/ansi-styles?sponsor=1" 5503 + } 5504 + }, 5505 + "node_modules/wrench": { 5506 + "version": "1.3.9", 5507 + "resolved": "https://registry.npmjs.org/wrench/-/wrench-1.3.9.tgz", 5508 + "integrity": "sha512-srTJQmLTP5YtW+F5zDuqjMEZqLLr/eJOZfDI5ibfPfRMeDh3oBUefAscuH0q5wBKE339ptH/S/0D18ZkfOfmKQ==", 5509 + "deprecated": "wrench.js is deprecated! You should check out fs-extra (https://github.com/jprichardson/node-fs-extra) for any operations you were using wrench for. Thanks for all the usage over the years.", 5510 + "engines": { 5511 + "node": ">=0.1.97" 5512 + } 5513 + }, 5514 + "node_modules/yaml": { 5515 + "version": "2.7.0", 5516 + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", 5517 + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", 5518 + "bin": { 5519 + "yaml": "bin.mjs" 5520 + }, 5521 + "engines": { 5522 + "node": ">= 14" 5523 + } 5524 + }, 5525 + "node_modules/yocto-queue": { 5526 + "version": "0.1.0", 5527 + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 5528 + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 5529 + "dev": true, 5530 + "engines": { 5531 + "node": ">=10" 5532 + }, 5533 + "funding": { 5534 + "url": "https://github.com/sponsors/sindresorhus" 5535 + } 5536 + }, 5537 + "node_modules/zimmerframe": { 5538 + "version": "1.1.2", 5539 + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz", 5540 + "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==" 5541 + }, 5542 + "node_modules/zod": { 5543 + "version": "3.24.2", 5544 + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", 5545 + "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==", 5546 + "funding": { 5547 + "url": "https://github.com/sponsors/colinhacks" 5548 + } 5549 + } 5550 + } 5551 + }
+52
package.json
··· 1 + { 2 + "name": "ui-kit-25", 3 + "private": true, 4 + "version": "0.0.1", 5 + "type": "module", 6 + "scripts": { 7 + "dev": "vite dev", 8 + "build": "vite build", 9 + "preview": "vite preview", 10 + "prepare": "svelte-kit sync || echo ''", 11 + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", 12 + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", 13 + "format": "prettier --write .", 14 + "lint": "prettier --check . && eslint ." 15 + }, 16 + "devDependencies": { 17 + "@eslint/compat": "^1.2.5", 18 + "@eslint/js": "^9.18.0", 19 + "@sveltejs/adapter-auto": "^4.0.0", 20 + "@sveltejs/kit": "^2.16.0", 21 + "@sveltejs/vite-plugin-svelte": "^5.0.0", 22 + "@tailwindcss/forms": "^0.5.10", 23 + "@tailwindcss/typography": "^0.5.16", 24 + "autoprefixer": "^10.4.20", 25 + "eslint": "^9.18.0", 26 + "eslint-config-prettier": "^10.0.1", 27 + "eslint-plugin-svelte": "^2.46.1", 28 + "globals": "^15.14.0", 29 + "prettier": "^3.4.2", 30 + "prettier-plugin-svelte": "^3.3.3", 31 + "prettier-plugin-tailwindcss": "^0.6.10", 32 + "svelte": "^5.0.0", 33 + "svelte-check": "^4.0.0", 34 + "tailwindcss": "^3.4.17", 35 + "typescript": "^5.0.0", 36 + "typescript-eslint": "^8.20.0", 37 + "vite": "^6.0.0" 38 + }, 39 + "dependencies": { 40 + "@sveltejs/adapter-static": "^3.0.8", 41 + "@threlte/core": "^8.0.1", 42 + "@threlte/extras": "^9.0.1", 43 + "@types/three": "^0.173.0", 44 + "bits-ui": "^1.3.4", 45 + "layerchart": "^1.0.0", 46 + "plyr": "^3.7.8", 47 + "tailwind-variants": "^0.3.1", 48 + "tailwindcss-animate": "^1.0.7", 49 + "three": "^0.173.0", 50 + "tw-colors": "^3.3.2" 51 + } 52 + }
+6
postcss.config.js
··· 1 + export default { 2 + plugins: { 3 + tailwindcss: {}, 4 + autoprefixer: {} 5 + } 6 + };
+21
svelte.config.js
··· 1 + import adapter from '@sveltejs/adapter-static'; 2 + import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; 3 + 4 + /** @type {import('@sveltejs/kit').Config} */ 5 + const config = { 6 + // Consult https://svelte.dev/docs/kit/integrations 7 + // for more information about preprocessors 8 + preprocess: vitePreprocess(), 9 + 10 + kit: { 11 + // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list. 12 + // If your environment is not supported, or you settled on a specific environment, switch out the adapter. 13 + // See https://svelte.dev/docs/kit/adapters for more information about adapters. 14 + adapter: adapter(), 15 + paths: { 16 + base: '/ui-kit' 17 + } 18 + } 19 + }; 20 + 21 + export default config;
+98
tailwind.config.ts
··· 1 + import forms from '@tailwindcss/forms'; 2 + import typography from '@tailwindcss/typography'; 3 + import type { Config } from 'tailwindcss'; 4 + import { createThemes } from 'tw-colors'; 5 + 6 + import colors from 'tailwindcss/colors'; 7 + import tailwindcssAnimate from 'tailwindcss-animate'; 8 + 9 + export default { 10 + content: ['./src/**/*.{html,js,svelte,ts}'], 11 + 12 + theme: { 13 + extend: {} 14 + }, 15 + 16 + darkMode: 'class', 17 + 18 + plugins: [ 19 + typography, 20 + forms, 21 + tailwindcssAnimate, 22 + createThemes( 23 + { 24 + red: { 25 + accent: colors.red 26 + }, 27 + orange: { 28 + accent: colors.orange 29 + }, 30 + amber: { 31 + accent: colors.amber 32 + }, 33 + yellow: { 34 + accent: colors.yellow 35 + }, 36 + lime: { 37 + accent: colors.lime 38 + }, 39 + green: { 40 + accent: colors.green 41 + }, 42 + emerald: { 43 + accent: colors.emerald 44 + }, 45 + teal: { 46 + accent: colors.teal 47 + }, 48 + cyan: { 49 + accent: colors.cyan 50 + }, 51 + sky: { 52 + accent: colors.sky 53 + }, 54 + blue: { 55 + accent: colors.blue 56 + }, 57 + indigo: { 58 + accent: colors.indigo 59 + }, 60 + violet: { 61 + accent: colors.violet 62 + }, 63 + purple: { 64 + accent: colors.purple 65 + }, 66 + fuchsia: { 67 + accent: colors.fuchsia 68 + }, 69 + pink: { 70 + accent: colors.pink 71 + }, 72 + rose: { 73 + accent: colors.rose 74 + }, 75 + slate: { 76 + base: colors.slate 77 + }, 78 + gray: { 79 + base: colors.gray 80 + }, 81 + zinc: { 82 + base: colors.zinc 83 + }, 84 + neutral: { 85 + base: colors.neutral 86 + }, 87 + stone: { 88 + base: colors.stone 89 + } 90 + }, 91 + { 92 + produceCssVariable: (colorName) => { 93 + return `--${colorName}`; 94 + } 95 + } 96 + ) 97 + ] 98 + } satisfies Config;
+19
tsconfig.json
··· 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": "bundler" 13 + } 14 + // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias 15 + // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files 16 + // 17 + // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes 18 + // from the referenced tsconfig.json - TypeScript does not merge them in 19 + }
+6
vite.config.ts
··· 1 + import { sveltekit } from '@sveltejs/kit/vite'; 2 + import { defineConfig } from 'vite'; 3 + 4 + export default defineConfig({ 5 + plugins: [sveltekit()] 6 + });
+3
src/app.css
··· 1 + @import 'tailwindcss/base'; 2 + @import 'tailwindcss/components'; 3 + @import 'tailwindcss/utilities';
+13
src/app.d.ts
··· 1 + // See https://svelte.dev/docs/kit/types#app.d.ts 2 + // for information about these interfaces 3 + declare global { 4 + namespace App { 5 + // interface Error {} 6 + // interface Locals {} 7 + // interface PageData {} 8 + // interface PageState {} 9 + // interface Platform {} 10 + } 11 + } 12 + 13 + export {};
+52
src/app.html
··· 1 + <!doctype html> 2 + <html lang="en" class="dark"> 3 + <head> 4 + <meta charset="utf-8" /> 5 + <meta name="viewport" content="width=device-width, initial-scale=1" /> 6 + %sveltekit.head% 7 + 8 + <link 9 + rel="icon" 10 + href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>😊</text></svg>" 11 + /> 12 + 13 + <title>my ui kit</title> 14 + 15 + <script> 16 + let dark = localStorage.getItem('darkMode'); 17 + if (dark) { 18 + dark = JSON.parse(dark); 19 + } else { 20 + dark = window.matchMedia('(prefers-color-scheme: dark)').matches; 21 + } 22 + 23 + var root = document.getElementsByTagName('html')[0]; 24 + if (dark) { 25 + root.classList.add('dark'); 26 + } else { 27 + root.classList.remove('dark'); 28 + } 29 + 30 + // get accent color from local storage 31 + let accentColor = localStorage.getItem('accentColor'); 32 + if (accentColor) { 33 + accentColor = JSON.parse(accentColor); 34 + } else { 35 + accentColor = 'red'; 36 + } 37 + root.classList.add(accentColor); 38 + 39 + // get base color from local storage 40 + let baseColor = localStorage.getItem('baseColor'); 41 + if (baseColor) { 42 + baseColor = JSON.parse(baseColor); 43 + } else { 44 + baseColor = 'stone'; 45 + } 46 + root.classList.add(baseColor); 47 + </script> 48 + </head> 49 + <body data-sveltekit-preload-data="hover" class="bg-base-50 transition-colors dark:bg-base-950"> 50 + <div style="display: contents">%sveltekit.body%</div> 51 + </body> 52 + </html>
+50
.github/workflows/deploy_gh_pages.yml
··· 1 + name: Deploy to GitHub Pages 2 + 3 + on: 4 + push: 5 + branches: 6 + - main 7 + 8 + jobs: 9 + build_site: 10 + runs-on: ubuntu-latest 11 + steps: 12 + - name: Checkout 13 + uses: actions/checkout@v4 14 + 15 + - name: Install Node.js 16 + uses: actions/setup-node@v4 17 + with: 18 + node-version: 18 19 + cache: npm 20 + 21 + - name: Install dependencies 22 + run: npm ci 23 + 24 + - name: build 25 + env: 26 + BASE_PATH: '/${{ github.event.repository.name }}' 27 + run: | 28 + npm run build 29 + 30 + - name: Upload Artifacts 31 + uses: actions/upload-pages-artifact@v3 32 + with: 33 + path: 'build/' 34 + 35 + deploy: 36 + needs: build_site 37 + runs-on: ubuntu-latest 38 + 39 + permissions: 40 + pages: write 41 + id-token: write 42 + 43 + environment: 44 + name: github-pages 45 + url: ${{ steps.deployment.outputs.page_url }} 46 + 47 + steps: 48 + - name: Deploy 49 + id: deployment 50 + uses: actions/deploy-pages@v4
+1
src/lib/index.ts
··· 1 + // place files you want to import through the `$lib` alias in this folder.
+58
src/routes/+layout.svelte
··· 1 + <script lang="ts"> 2 + import { base } from '$app/paths'; 3 + import { Button } from '$lib/components/button'; 4 + import GithubCorner from '$lib/components/github-corner/GithubCorner.svelte'; 5 + import Navbar from '$lib/components/navbar/Navbar.svelte'; 6 + import Sidebar from '$lib/components/sidebar/Sidebar.svelte'; 7 + import { ThemeToggle } from '$lib/components/theme-toggle'; 8 + import '../app.css'; 9 + let { children } = $props(); 10 + </script> 11 + 12 + <Navbar hasSidebar> 13 + <div> 14 + <Button variant="link" class="block font-normal lg:hidden" popovertarget="mobile-menu"> 15 + <svg 16 + xmlns="http://www.w3.org/2000/svg" 17 + viewBox="0 0 24 24" 18 + fill="currentColor" 19 + class="!size-6" 20 + > 21 + <path 22 + fill-rule="evenodd" 23 + d="M3 9a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H3.75A.75.75 0 0 1 3 9Zm0 6.75a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H3.75a.75.75 0 0 1-.75-.75Z" 24 + clip-rule="evenodd" 25 + ></path> 26 + </svg> 27 + </Button> 28 + </div> 29 + <ThemeToggle /> 30 + </Navbar> 31 + 32 + {@render children()} 33 + 34 + <Sidebar> 35 + <div class="flex flex-col items-start gap-1 p-4"> 36 + <Button variant="link" href="{base}/">All</Button> 37 + 38 + <Button variant="link" href="{base}/theme" class="mb-8">Theme</Button> 39 + 40 + <Button variant="link" href="{base}/alert">Alerts</Button> 41 + <Button variant="link" href="{base}/avatar">Avatars</Button> 42 + <Button variant="link" href="{base}/badge">Badges</Button> 43 + <Button variant="link" href="{base}/button">Buttons</Button> 44 + <Button variant="link" href="{base}/checkbox">Checkboxes</Button> 45 + <Button variant="link" href="{base}/color-select">Color Select</Button> 46 + <Button variant="link" href="{base}/depth-3d">Depth 3D</Button> 47 + <Button variant="link" href="{base}/github-corner">Github Corner</Button> 48 + <Button variant="link" href="{base}/heatmap">Heatmap</Button> 49 + <Button variant="link" href="{base}/input">Input</Button> 50 + <Button variant="link" href="{base}/phone">Phone</Button> 51 + <Button variant="link" href="{base}/piechart">Pie Chart</Button> 52 + <Button variant="link" href="{base}/progress">Progress</Button> 53 + <Button variant="link" href="{base}/star-rating">Star Rating</Button> 54 + <Button variant="link" href="{base}/textarea">Textarea</Button> 55 + <Button variant="link" href="{base}/tooltip">Tooltip</Button> 56 + <Button variant="link" href="{base}/video-player">Video Player</Button> 57 + </div> 58 + </Sidebar>
+1
src/routes/+layout.ts
··· 1 + export const prerender = true;
+79
src/routes/+page.svelte
··· 1 + <script> 2 + import { Heading } from '$lib/components/heading'; 3 + import AlertPreview from '$lib/preview/AlertPreview.svelte'; 4 + import AvatarPreview from '$lib/preview/AvatarPreview.svelte'; 5 + import BadgesPreview from '$lib/preview/BadgesPreview.svelte'; 6 + import ButtonsPreview from '$lib/preview/ButtonsPreview.svelte'; 7 + import CheckboxPreview from '$lib/preview/CheckboxPreview.svelte'; 8 + import ColorSelectPreview from '$lib/preview/ColorSelectPreview.svelte'; 9 + import Container from '$lib/preview/Container.svelte'; 10 + import Depth3DPreview from '$lib/preview/Depth3DPreview.svelte'; 11 + import GithubCornerPreview from '$lib/preview/GithubCornerPreview.svelte'; 12 + import HeatmapPreview from '$lib/preview/HeatmapPreview.svelte'; 13 + import InputPreview from '$lib/preview/InputPreview.svelte'; 14 + import PhonePreview from '$lib/preview/PhonePreview.svelte'; 15 + import PieChartPreview from '$lib/preview/PieChartPreview.svelte'; 16 + import ProgressPreview from '$lib/preview/ProgressPreview.svelte'; 17 + import StarRatingPreview from '$lib/preview/StarRatingPreview.svelte'; 18 + import TextareaPreview from '$lib/preview/TextareaPreview.svelte'; 19 + import TooltipPreview from '$lib/preview/TooltipPreview.svelte'; 20 + import VideoPlayerPreview from '$lib/preview/VideoPlayerPreview.svelte'; 21 + </script> 22 + 23 + <Container> 24 + <Heading class="mb-8">All</Heading> 25 + 26 + <div class="flex w-full flex-col divide-y divide-base-200 dark:divide-base-900"> 27 + <div class="flex flex-col gap-4 py-8"> 28 + <AlertPreview></AlertPreview> 29 + </div> 30 + <div class="flex flex-col gap-4 py-8"> 31 + <AvatarPreview></AvatarPreview> 32 + </div> 33 + <div class="flex flex-col gap-4 py-8"> 34 + <BadgesPreview></BadgesPreview> 35 + </div> 36 + <div class="flex flex-col gap-4 py-8"> 37 + <ButtonsPreview></ButtonsPreview> 38 + </div> 39 + <div class="flex flex-col gap-4 py-8"> 40 + <CheckboxPreview></CheckboxPreview> 41 + </div> 42 + <div class="flex flex-col gap-4 py-8"> 43 + <ColorSelectPreview></ColorSelectPreview> 44 + </div> 45 + <div class="flex flex-col gap-4 py-8"> 46 + <Depth3DPreview></Depth3DPreview> 47 + </div> 48 + <div class="flex flex-col gap-4 py-8"> 49 + <GithubCornerPreview></GithubCornerPreview> 50 + </div> 51 + <div class="flex flex-col gap-4 py-8"> 52 + <HeatmapPreview></HeatmapPreview> 53 + </div> 54 + <div class="flex flex-col gap-4 py-8"> 55 + <InputPreview></InputPreview> 56 + </div> 57 + <div class="flex flex-col gap-4 py-8"> 58 + <PhonePreview></PhonePreview> 59 + </div> 60 + <div class="flex flex-col gap-4 py-8"> 61 + <PieChartPreview></PieChartPreview> 62 + </div> 63 + <div class="flex flex-col gap-4 py-8"> 64 + <ProgressPreview></ProgressPreview> 65 + </div> 66 + <div class="flex flex-col gap-4 py-8"> 67 + <StarRatingPreview></StarRatingPreview> 68 + </div> 69 + <div class="flex flex-col gap-4 py-8"> 70 + <TextareaPreview></TextareaPreview> 71 + </div> 72 + <div class="flex flex-col gap-4 py-8"> 73 + <TooltipPreview></TooltipPreview> 74 + </div> 75 + <div class="flex flex-col items-start gap-4 py-8"> 76 + <VideoPlayerPreview></VideoPlayerPreview> 77 + </div> 78 + </div> 79 + </Container>
+59
src/lib/preview/AlertPreview.svelte
··· 1 + <script> 2 + import { Subheading } from '$lib/components/heading'; 3 + import { Text } from '$lib/components/text'; 4 + import { Alert, AlertDescription, AlertTitle } from '$lib/components/alert'; 5 + </script> 6 + 7 + <Subheading>Alerts</Subheading> 8 + 9 + <Text class="mb-2 mt-4">Default Alert</Text> 10 + 11 + <Alert> 12 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> 13 + <path 14 + d="M11.7 2.805a.75.75 0 0 1 .6 0A60.65 60.65 0 0 1 22.83 8.72a.75.75 0 0 1-.231 1.337 49.948 49.948 0 0 0-9.902 3.912l-.003.002c-.114.06-.227.119-.34.18a.75.75 0 0 1-.707 0A50.88 50.88 0 0 0 7.5 12.173v-.224c0-.131.067-.248.172-.311a54.615 54.615 0 0 1 4.653-2.52.75.75 0 0 0-.65-1.352 56.123 56.123 0 0 0-4.78 2.589 1.858 1.858 0 0 0-.859 1.228 49.803 49.803 0 0 0-4.634-1.527.75.75 0 0 1-.231-1.337A60.653 60.653 0 0 1 11.7 2.805Z" 15 + /> 16 + <path 17 + d="M13.06 15.473a48.45 48.45 0 0 1 7.666-3.282c.134 1.414.22 2.843.255 4.284a.75.75 0 0 1-.46.711 47.87 47.87 0 0 0-8.105 4.342.75.75 0 0 1-.832 0 47.87 47.87 0 0 0-8.104-4.342.75.75 0 0 1-.461-.71c.035-1.442.121-2.87.255-4.286.921.304 1.83.634 2.726.99v1.27a1.5 1.5 0 0 0-.14 2.508c-.09.38-.222.753-.397 1.11.452.213.901.434 1.346.66a6.727 6.727 0 0 0 .551-1.607 1.5 1.5 0 0 0 .14-2.67v-.645a48.549 48.549 0 0 1 3.44 1.667 2.25 2.25 0 0 0 2.12 0Z" 18 + /> 19 + <path 20 + d="M4.462 19.462c.42-.419.753-.89 1-1.395.453.214.902.435 1.347.662a6.742 6.742 0 0 1-1.286 1.794.75.75 0 0 1-1.06-1.06Z" 21 + /> 22 + </svg> 23 + <AlertTitle class="text-rose-500 dark:text-rose-500">Alert Title</AlertTitle> 24 + <AlertDescription>Alert Description</AlertDescription> 25 + </Alert> 26 + 27 + <Alert variant="secondary"> 28 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> 29 + <path 30 + d="M11.7 2.805a.75.75 0 0 1 .6 0A60.65 60.65 0 0 1 22.83 8.72a.75.75 0 0 1-.231 1.337 49.948 49.948 0 0 0-9.902 3.912l-.003.002c-.114.06-.227.119-.34.18a.75.75 0 0 1-.707 0A50.88 50.88 0 0 0 7.5 12.173v-.224c0-.131.067-.248.172-.311a54.615 54.615 0 0 1 4.653-2.52.75.75 0 0 0-.65-1.352 56.123 56.123 0 0 0-4.78 2.589 1.858 1.858 0 0 0-.859 1.228 49.803 49.803 0 0 0-4.634-1.527.75.75 0 0 1-.231-1.337A60.653 60.653 0 0 1 11.7 2.805Z" 31 + /> 32 + <path 33 + d="M13.06 15.473a48.45 48.45 0 0 1 7.666-3.282c.134 1.414.22 2.843.255 4.284a.75.75 0 0 1-.46.711 47.87 47.87 0 0 0-8.105 4.342.75.75 0 0 1-.832 0 47.87 47.87 0 0 0-8.104-4.342.75.75 0 0 1-.461-.71c.035-1.442.121-2.87.255-4.286.921.304 1.83.634 2.726.99v1.27a1.5 1.5 0 0 0-.14 2.508c-.09.38-.222.753-.397 1.11.452.213.901.434 1.346.66a6.727 6.727 0 0 0 .551-1.607 1.5 1.5 0 0 0 .14-2.67v-.645a48.549 48.549 0 0 1 3.44 1.667 2.25 2.25 0 0 0 2.12 0Z" 34 + /> 35 + <path 36 + d="M4.462 19.462c.42-.419.753-.89 1-1.395.453.214.902.435 1.347.662a6.742 6.742 0 0 1-1.286 1.794.75.75 0 0 1-1.06-1.06Z" 37 + /> 38 + </svg> 39 + <AlertTitle>Alert Title</AlertTitle> 40 + <AlertDescription>Alert Description</AlertDescription> 41 + </Alert> 42 + 43 + <Text class="mb-2 mt-4">Preset Alerts</Text> 44 + 45 + <Alert title="Warning alert" type="warning"> 46 + <span>Alert Description</span> 47 + </Alert> 48 + 49 + <Alert title="Error alert" type="error"> 50 + <span>Alert Description</span> 51 + </Alert> 52 + 53 + <Alert title="Success alert" type="success"> 54 + <span>Alert Description</span> 55 + </Alert> 56 + 57 + <Alert title="Info alert" type="info"> 58 + <span>Alert Description</span> 59 + </Alert>
+36
src/lib/preview/AvatarPreview.svelte
··· 1 + <script> 2 + import { Subheading } from '$lib/components/heading'; 3 + import { Text } from '$lib/components/text'; 4 + import { Avatar, AvatarGroup } from '$lib/components/avatar/'; 5 + </script> 6 + 7 + <Subheading>Avatar</Subheading> 8 + 9 + <Text class="mb-2 mt-4">Single Avatar</Text> 10 + 11 + <div class="flex items-center gap-2"> 12 + <Avatar fallback="AB" /> 13 + <Avatar src="https://github.com/flo-bit.png" alt="flo-bit" fallback="FB" /> 14 + </div> 15 + 16 + <Text class="mb-2 mt-4">Avatars Group</Text> 17 + 18 + <AvatarGroup 19 + users={[ 20 + { 21 + src: 'https://github.com/flo-bit.png', 22 + alt: 'flo-bit', 23 + fallback: 'FB' 24 + }, 25 + { 26 + src: 'https://github.com/rich-harris.png', 27 + alt: 'rich-harris', 28 + fallback: 'RH' 29 + }, 30 + { 31 + src: 'https://github.com/huntabyte.png', 32 + alt: 'huntabyte', 33 + fallback: 'HB' 34 + } 35 + ]} 36 + />
+79
src/lib/preview/BadgesPreview.svelte
··· 1 + <script> 2 + import { Subheading } from '$lib/components/heading'; 3 + import Badge from '$lib/components/badge/Badge.svelte'; 4 + import { Text } from '$lib/components/text'; 5 + </script> 6 + 7 + <Subheading>Badges</Subheading> 8 + 9 + <Text class="mb-2 mt-4">Primary</Text> 10 + <div class="flex items-center gap-2"> 11 + <Badge size="sm" 12 + ><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> 13 + <path 14 + d="M11.7 2.805a.75.75 0 0 1 .6 0A60.65 60.65 0 0 1 22.83 8.72a.75.75 0 0 1-.231 1.337 49.948 49.948 0 0 0-9.902 3.912l-.003.002c-.114.06-.227.119-.34.18a.75.75 0 0 1-.707 0A50.88 50.88 0 0 0 7.5 12.173v-.224c0-.131.067-.248.172-.311a54.615 54.615 0 0 1 4.653-2.52.75.75 0 0 0-.65-1.352 56.123 56.123 0 0 0-4.78 2.589 1.858 1.858 0 0 0-.859 1.228 49.803 49.803 0 0 0-4.634-1.527.75.75 0 0 1-.231-1.337A60.653 60.653 0 0 1 11.7 2.805Z" 15 + /> 16 + <path 17 + d="M13.06 15.473a48.45 48.45 0 0 1 7.666-3.282c.134 1.414.22 2.843.255 4.284a.75.75 0 0 1-.46.711 47.87 47.87 0 0 0-8.105 4.342.75.75 0 0 1-.832 0 47.87 47.87 0 0 0-8.104-4.342.75.75 0 0 1-.461-.71c.035-1.442.121-2.87.255-4.286.921.304 1.83.634 2.726.99v1.27a1.5 1.5 0 0 0-.14 2.508c-.09.38-.222.753-.397 1.11.452.213.901.434 1.346.66a6.727 6.727 0 0 0 .551-1.607 1.5 1.5 0 0 0 .14-2.67v-.645a48.549 48.549 0 0 1 3.44 1.667 2.25 2.25 0 0 0 2.12 0Z" 18 + /> 19 + <path 20 + d="M4.462 19.462c.42-.419.753-.89 1-1.395.453.214.902.435 1.347.662a6.742 6.742 0 0 1-1.286 1.794.75.75 0 0 1-1.06-1.06Z" 21 + /> 22 + </svg>Badge</Badge 23 + > 24 + <Badge size="md" 25 + ><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> 26 + <path 27 + d="M11.7 2.805a.75.75 0 0 1 .6 0A60.65 60.65 0 0 1 22.83 8.72a.75.75 0 0 1-.231 1.337 49.948 49.948 0 0 0-9.902 3.912l-.003.002c-.114.06-.227.119-.34.18a.75.75 0 0 1-.707 0A50.88 50.88 0 0 0 7.5 12.173v-.224c0-.131.067-.248.172-.311a54.615 54.615 0 0 1 4.653-2.52.75.75 0 0 0-.65-1.352 56.123 56.123 0 0 0-4.78 2.589 1.858 1.858 0 0 0-.859 1.228 49.803 49.803 0 0 0-4.634-1.527.75.75 0 0 1-.231-1.337A60.653 60.653 0 0 1 11.7 2.805Z" 28 + /> 29 + <path 30 + d="M13.06 15.473a48.45 48.45 0 0 1 7.666-3.282c.134 1.414.22 2.843.255 4.284a.75.75 0 0 1-.46.711 47.87 47.87 0 0 0-8.105 4.342.75.75 0 0 1-.832 0 47.87 47.87 0 0 0-8.104-4.342.75.75 0 0 1-.461-.71c.035-1.442.121-2.87.255-4.286.921.304 1.83.634 2.726.99v1.27a1.5 1.5 0 0 0-.14 2.508c-.09.38-.222.753-.397 1.11.452.213.901.434 1.346.66a6.727 6.727 0 0 0 .551-1.607 1.5 1.5 0 0 0 .14-2.67v-.645a48.549 48.549 0 0 1 3.44 1.667 2.25 2.25 0 0 0 2.12 0Z" 31 + /> 32 + <path 33 + d="M4.462 19.462c.42-.419.753-.89 1-1.395.453.214.902.435 1.347.662a6.742 6.742 0 0 1-1.286 1.794.75.75 0 0 1-1.06-1.06Z" 34 + /> 35 + </svg>Badge</Badge 36 + > 37 + <Badge size="lg" 38 + ><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> 39 + <path 40 + d="M11.7 2.805a.75.75 0 0 1 .6 0A60.65 60.65 0 0 1 22.83 8.72a.75.75 0 0 1-.231 1.337 49.948 49.948 0 0 0-9.902 3.912l-.003.002c-.114.06-.227.119-.34.18a.75.75 0 0 1-.707 0A50.88 50.88 0 0 0 7.5 12.173v-.224c0-.131.067-.248.172-.311a54.615 54.615 0 0 1 4.653-2.52.75.75 0 0 0-.65-1.352 56.123 56.123 0 0 0-4.78 2.589 1.858 1.858 0 0 0-.859 1.228 49.803 49.803 0 0 0-4.634-1.527.75.75 0 0 1-.231-1.337A60.653 60.653 0 0 1 11.7 2.805Z" 41 + /> 42 + <path 43 + d="M13.06 15.473a48.45 48.45 0 0 1 7.666-3.282c.134 1.414.22 2.843.255 4.284a.75.75 0 0 1-.46.711 47.87 47.87 0 0 0-8.105 4.342.75.75 0 0 1-.832 0 47.87 47.87 0 0 0-8.104-4.342.75.75 0 0 1-.461-.71c.035-1.442.121-2.87.255-4.286.921.304 1.83.634 2.726.99v1.27a1.5 1.5 0 0 0-.14 2.508c-.09.38-.222.753-.397 1.11.452.213.901.434 1.346.66a6.727 6.727 0 0 0 .551-1.607 1.5 1.5 0 0 0 .14-2.67v-.645a48.549 48.549 0 0 1 3.44 1.667 2.25 2.25 0 0 0 2.12 0Z" 44 + /> 45 + <path 46 + d="M4.462 19.462c.42-.419.753-.89 1-1.395.453.214.902.435 1.347.662a6.742 6.742 0 0 1-1.286 1.794.75.75 0 0 1-1.06-1.06Z" 47 + /> 48 + </svg>Badge</Badge 49 + > 50 + </div> 51 + 52 + <Text class="mb-2 mt-4">Secondary</Text> 53 + <div class="flex items-center gap-2"> 54 + <Badge size="sm" variant="secondary">Badge</Badge> 55 + <Badge size="md" variant="secondary">Badge</Badge> 56 + <Badge size="lg" variant="secondary">Badge</Badge> 57 + </div> 58 + 59 + <Text class="mb-2 mt-4">Colors</Text> 60 + 61 + <div class="flex flex-wrap items-center gap-2"> 62 + <Badge variant="red">Red</Badge> 63 + <Badge variant="yellow">Yellow</Badge> 64 + <Badge variant="green">Green</Badge> 65 + <Badge variant="blue">Blue</Badge> 66 + <Badge variant="indigo">Indigo</Badge> 67 + <Badge variant="violet">Violet</Badge> 68 + <Badge variant="purple">Purple</Badge> 69 + <Badge variant="fuchsia">Fuchsia</Badge> 70 + <Badge variant="pink">Pink</Badge> 71 + <Badge variant="rose">Rose</Badge> 72 + <Badge variant="orange">Orange</Badge> 73 + <Badge variant="amber">Amber</Badge> 74 + <Badge variant="lime">Lime</Badge> 75 + <Badge variant="emerald">Emerald</Badge> 76 + <Badge variant="teal">Teal</Badge> 77 + <Badge variant="cyan">Cyan</Badge> 78 + <Badge variant="sky">Sky</Badge> 79 + </div>
+169
src/lib/preview/ButtonsPreview.svelte
··· 1 + <script> 2 + import { Button } from '$lib/components/button'; 3 + import { Subheading } from '$lib/components/heading'; 4 + import { Text } from '$lib/components/text'; 5 + </script> 6 + 7 + <Subheading>Buttons</Subheading> 8 + 9 + <Text class="mt-4">Primary</Text> 10 + <div class="flex items-center gap-2"> 11 + <Button size="sm" 12 + ><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> 13 + <path 14 + d="M11.7 2.805a.75.75 0 0 1 .6 0A60.65 60.65 0 0 1 22.83 8.72a.75.75 0 0 1-.231 1.337 49.948 49.948 0 0 0-9.902 3.912l-.003.002c-.114.06-.227.119-.34.18a.75.75 0 0 1-.707 0A50.88 50.88 0 0 0 7.5 12.173v-.224c0-.131.067-.248.172-.311a54.615 54.615 0 0 1 4.653-2.52.75.75 0 0 0-.65-1.352 56.123 56.123 0 0 0-4.78 2.589 1.858 1.858 0 0 0-.859 1.228 49.803 49.803 0 0 0-4.634-1.527.75.75 0 0 1-.231-1.337A60.653 60.653 0 0 1 11.7 2.805Z" 15 + /> 16 + <path 17 + d="M13.06 15.473a48.45 48.45 0 0 1 7.666-3.282c.134 1.414.22 2.843.255 4.284a.75.75 0 0 1-.46.711 47.87 47.87 0 0 0-8.105 4.342.75.75 0 0 1-.832 0 47.87 47.87 0 0 0-8.104-4.342.75.75 0 0 1-.461-.71c.035-1.442.121-2.87.255-4.286.921.304 1.83.634 2.726.99v1.27a1.5 1.5 0 0 0-.14 2.508c-.09.38-.222.753-.397 1.11.452.213.901.434 1.346.66a6.727 6.727 0 0 0 .551-1.607 1.5 1.5 0 0 0 .14-2.67v-.645a48.549 48.549 0 0 1 3.44 1.667 2.25 2.25 0 0 0 2.12 0Z" 18 + /> 19 + <path 20 + d="M4.462 19.462c.42-.419.753-.89 1-1.395.453.214.902.435 1.347.662a6.742 6.742 0 0 1-1.286 1.794.75.75 0 0 1-1.06-1.06Z" 21 + /> 22 + </svg>small</Button 23 + > 24 + 25 + <Button 26 + ><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> 27 + <path 28 + d="M11.7 2.805a.75.75 0 0 1 .6 0A60.65 60.65 0 0 1 22.83 8.72a.75.75 0 0 1-.231 1.337 49.948 49.948 0 0 0-9.902 3.912l-.003.002c-.114.06-.227.119-.34.18a.75.75 0 0 1-.707 0A50.88 50.88 0 0 0 7.5 12.173v-.224c0-.131.067-.248.172-.311a54.615 54.615 0 0 1 4.653-2.52.75.75 0 0 0-.65-1.352 56.123 56.123 0 0 0-4.78 2.589 1.858 1.858 0 0 0-.859 1.228 49.803 49.803 0 0 0-4.634-1.527.75.75 0 0 1-.231-1.337A60.653 60.653 0 0 1 11.7 2.805Z" 29 + /> 30 + <path 31 + d="M13.06 15.473a48.45 48.45 0 0 1 7.666-3.282c.134 1.414.22 2.843.255 4.284a.75.75 0 0 1-.46.711 47.87 47.87 0 0 0-8.105 4.342.75.75 0 0 1-.832 0 47.87 47.87 0 0 0-8.104-4.342.75.75 0 0 1-.461-.71c.035-1.442.121-2.87.255-4.286.921.304 1.83.634 2.726.99v1.27a1.5 1.5 0 0 0-.14 2.508c-.09.38-.222.753-.397 1.11.452.213.901.434 1.346.66a6.727 6.727 0 0 0 .551-1.607 1.5 1.5 0 0 0 .14-2.67v-.645a48.549 48.549 0 0 1 3.44 1.667 2.25 2.25 0 0 0 2.12 0Z" 32 + /> 33 + <path 34 + d="M4.462 19.462c.42-.419.753-.89 1-1.395.453.214.902.435 1.347.662a6.742 6.742 0 0 1-1.286 1.794.75.75 0 0 1-1.06-1.06Z" 35 + /> 36 + </svg>normal</Button 37 + > 38 + 39 + <Button size="lg" 40 + ><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> 41 + <path 42 + d="M11.7 2.805a.75.75 0 0 1 .6 0A60.65 60.65 0 0 1 22.83 8.72a.75.75 0 0 1-.231 1.337 49.948 49.948 0 0 0-9.902 3.912l-.003.002c-.114.06-.227.119-.34.18a.75.75 0 0 1-.707 0A50.88 50.88 0 0 0 7.5 12.173v-.224c0-.131.067-.248.172-.311a54.615 54.615 0 0 1 4.653-2.52.75.75 0 0 0-.65-1.352 56.123 56.123 0 0 0-4.78 2.589 1.858 1.858 0 0 0-.859 1.228 49.803 49.803 0 0 0-4.634-1.527.75.75 0 0 1-.231-1.337A60.653 60.653 0 0 1 11.7 2.805Z" 43 + /> 44 + <path 45 + d="M13.06 15.473a48.45 48.45 0 0 1 7.666-3.282c.134 1.414.22 2.843.255 4.284a.75.75 0 0 1-.46.711 47.87 47.87 0 0 0-8.105 4.342.75.75 0 0 1-.832 0 47.87 47.87 0 0 0-8.104-4.342.75.75 0 0 1-.461-.71c.035-1.442.121-2.87.255-4.286.921.304 1.83.634 2.726.99v1.27a1.5 1.5 0 0 0-.14 2.508c-.09.38-.222.753-.397 1.11.452.213.901.434 1.346.66a6.727 6.727 0 0 0 .551-1.607 1.5 1.5 0 0 0 .14-2.67v-.645a48.549 48.549 0 0 1 3.44 1.667 2.25 2.25 0 0 0 2.12 0Z" 46 + /> 47 + <path 48 + d="M4.462 19.462c.42-.419.753-.89 1-1.395.453.214.902.435 1.347.662a6.742 6.742 0 0 1-1.286 1.794.75.75 0 0 1-1.06-1.06Z" 49 + /> 50 + </svg>large</Button 51 + > 52 + </div> 53 + 54 + <Text class="mt-6">Secondary</Text> 55 + 56 + <div class="flex items-center gap-2"> 57 + <Button variant="secondary" size="sm">small</Button> 58 + <Button variant="secondary">normal</Button> 59 + <Button variant="secondary" size="lg">large</Button> 60 + </div> 61 + 62 + <Text class="mt-6">Link</Text> 63 + <div class="flex items-center gap-2"> 64 + <Button variant="link" size="sm" 65 + ><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> 66 + <path 67 + d="M11.7 2.805a.75.75 0 0 1 .6 0A60.65 60.65 0 0 1 22.83 8.72a.75.75 0 0 1-.231 1.337 49.948 49.948 0 0 0-9.902 3.912l-.003.002c-.114.06-.227.119-.34.18a.75.75 0 0 1-.707 0A50.88 50.88 0 0 0 7.5 12.173v-.224c0-.131.067-.248.172-.311a54.615 54.615 0 0 1 4.653-2.52.75.75 0 0 0-.65-1.352 56.123 56.123 0 0 0-4.78 2.589 1.858 1.858 0 0 0-.859 1.228 49.803 49.803 0 0 0-4.634-1.527.75.75 0 0 1-.231-1.337A60.653 60.653 0 0 1 11.7 2.805Z" 68 + /> 69 + <path 70 + d="M13.06 15.473a48.45 48.45 0 0 1 7.666-3.282c.134 1.414.22 2.843.255 4.284a.75.75 0 0 1-.46.711 47.87 47.87 0 0 0-8.105 4.342.75.75 0 0 1-.832 0 47.87 47.87 0 0 0-8.104-4.342.75.75 0 0 1-.461-.71c.035-1.442.121-2.87.255-4.286.921.304 1.83.634 2.726.99v1.27a1.5 1.5 0 0 0-.14 2.508c-.09.38-.222.753-.397 1.11.452.213.901.434 1.346.66a6.727 6.727 0 0 0 .551-1.607 1.5 1.5 0 0 0 .14-2.67v-.645a48.549 48.549 0 0 1 3.44 1.667 2.25 2.25 0 0 0 2.12 0Z" 71 + /> 72 + <path 73 + d="M4.462 19.462c.42-.419.753-.89 1-1.395.453.214.902.435 1.347.662a6.742 6.742 0 0 1-1.286 1.794.75.75 0 0 1-1.06-1.06Z" 74 + /> 75 + </svg>small</Button 76 + > 77 + <Button variant="link" 78 + ><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> 79 + <path 80 + d="M11.7 2.805a.75.75 0 0 1 .6 0A60.65 60.65 0 0 1 22.83 8.72a.75.75 0 0 1-.231 1.337 49.948 49.948 0 0 0-9.902 3.912l-.003.002c-.114.06-.227.119-.34.18a.75.75 0 0 1-.707 0A50.88 50.88 0 0 0 7.5 12.173v-.224c0-.131.067-.248.172-.311a54.615 54.615 0 0 1 4.653-2.52.75.75 0 0 0-.65-1.352 56.123 56.123 0 0 0-4.78 2.589 1.858 1.858 0 0 0-.859 1.228 49.803 49.803 0 0 0-4.634-1.527.75.75 0 0 1-.231-1.337A60.653 60.653 0 0 1 11.7 2.805Z" 81 + /> 82 + <path 83 + d="M13.06 15.473a48.45 48.45 0 0 1 7.666-3.282c.134 1.414.22 2.843.255 4.284a.75.75 0 0 1-.46.711 47.87 47.87 0 0 0-8.105 4.342.75.75 0 0 1-.832 0 47.87 47.87 0 0 0-8.104-4.342.75.75 0 0 1-.461-.71c.035-1.442.121-2.87.255-4.286.921.304 1.83.634 2.726.99v1.27a1.5 1.5 0 0 0-.14 2.508c-.09.38-.222.753-.397 1.11.452.213.901.434 1.346.66a6.727 6.727 0 0 0 .551-1.607 1.5 1.5 0 0 0 .14-2.67v-.645a48.549 48.549 0 0 1 3.44 1.667 2.25 2.25 0 0 0 2.12 0Z" 84 + /> 85 + <path 86 + d="M4.462 19.462c.42-.419.753-.89 1-1.395.453.214.902.435 1.347.662a6.742 6.742 0 0 1-1.286 1.794.75.75 0 0 1-1.06-1.06Z" 87 + /> 88 + </svg>normal</Button 89 + > 90 + <Button variant="link" size="lg" 91 + ><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> 92 + <path 93 + d="M11.7 2.805a.75.75 0 0 1 .6 0A60.65 60.65 0 0 1 22.83 8.72a.75.75 0 0 1-.231 1.337 49.948 49.948 0 0 0-9.902 3.912l-.003.002c-.114.06-.227.119-.34.18a.75.75 0 0 1-.707 0A50.88 50.88 0 0 0 7.5 12.173v-.224c0-.131.067-.248.172-.311a54.615 54.615 0 0 1 4.653-2.52.75.75 0 0 0-.65-1.352 56.123 56.123 0 0 0-4.78 2.589 1.858 1.858 0 0 0-.859 1.228 49.803 49.803 0 0 0-4.634-1.527.75.75 0 0 1-.231-1.337A60.653 60.653 0 0 1 11.7 2.805Z" 94 + /> 95 + <path 96 + d="M13.06 15.473a48.45 48.45 0 0 1 7.666-3.282c.134 1.414.22 2.843.255 4.284a.75.75 0 0 1-.46.711 47.87 47.87 0 0 0-8.105 4.342.75.75 0 0 1-.832 0 47.87 47.87 0 0 0-8.104-4.342.75.75 0 0 1-.461-.71c.035-1.442.121-2.87.255-4.286.921.304 1.83.634 2.726.99v1.27a1.5 1.5 0 0 0-.14 2.508c-.09.38-.222.753-.397 1.11.452.213.901.434 1.346.66a6.727 6.727 0 0 0 .551-1.607 1.5 1.5 0 0 0 .14-2.67v-.645a48.549 48.549 0 0 1 3.44 1.667 2.25 2.25 0 0 0 2.12 0Z" 97 + /> 98 + <path 99 + d="M4.462 19.462c.42-.419.753-.89 1-1.395.453.214.902.435 1.347.662a6.742 6.742 0 0 1-1.286 1.794.75.75 0 0 1-1.06-1.06Z" 100 + /> 101 + </svg>large</Button 102 + > 103 + </div> 104 + 105 + <Text class="mt-6">Icons</Text> 106 + <div> 107 + <Button size="iconSm" 108 + ><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> 109 + <path 110 + d="M11.7 2.805a.75.75 0 0 1 .6 0A60.65 60.65 0 0 1 22.83 8.72a.75.75 0 0 1-.231 1.337 49.948 49.948 0 0 0-9.902 3.912l-.003.002c-.114.06-.227.119-.34.18a.75.75 0 0 1-.707 0A50.88 50.88 0 0 0 7.5 12.173v-.224c0-.131.067-.248.172-.311a54.615 54.615 0 0 1 4.653-2.52.75.75 0 0 0-.65-1.352 56.123 56.123 0 0 0-4.78 2.589 1.858 1.858 0 0 0-.859 1.228 49.803 49.803 0 0 0-4.634-1.527.75.75 0 0 1-.231-1.337A60.653 60.653 0 0 1 11.7 2.805Z" 111 + /> 112 + <path 113 + d="M13.06 15.473a48.45 48.45 0 0 1 7.666-3.282c.134 1.414.22 2.843.255 4.284a.75.75 0 0 1-.46.711 47.87 47.87 0 0 0-8.105 4.342.75.75 0 0 1-.832 0 47.87 47.87 0 0 0-8.104-4.342.75.75 0 0 1-.461-.71c.035-1.442.121-2.87.255-4.286.921.304 1.83.634 2.726.99v1.27a1.5 1.5 0 0 0-.14 2.508c-.09.38-.222.753-.397 1.11.452.213.901.434 1.346.66a6.727 6.727 0 0 0 .551-1.607 1.5 1.5 0 0 0 .14-2.67v-.645a48.549 48.549 0 0 1 3.44 1.667 2.25 2.25 0 0 0 2.12 0Z" 114 + /> 115 + <path 116 + d="M4.462 19.462c.42-.419.753-.89 1-1.395.453.214.902.435 1.347.662a6.742 6.742 0 0 1-1.286 1.794.75.75 0 0 1-1.06-1.06Z" 117 + /> 118 + </svg></Button 119 + > 120 + 121 + <Button size="icon" 122 + ><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> 123 + <path 124 + d="M11.7 2.805a.75.75 0 0 1 .6 0A60.65 60.65 0 0 1 22.83 8.72a.75.75 0 0 1-.231 1.337 49.948 49.948 0 0 0-9.902 3.912l-.003.002c-.114.06-.227.119-.34.18a.75.75 0 0 1-.707 0A50.88 50.88 0 0 0 7.5 12.173v-.224c0-.131.067-.248.172-.311a54.615 54.615 0 0 1 4.653-2.52.75.75 0 0 0-.65-1.352 56.123 56.123 0 0 0-4.78 2.589 1.858 1.858 0 0 0-.859 1.228 49.803 49.803 0 0 0-4.634-1.527.75.75 0 0 1-.231-1.337A60.653 60.653 0 0 1 11.7 2.805Z" 125 + /> 126 + <path 127 + d="M13.06 15.473a48.45 48.45 0 0 1 7.666-3.282c.134 1.414.22 2.843.255 4.284a.75.75 0 0 1-.46.711 47.87 47.87 0 0 0-8.105 4.342.75.75 0 0 1-.832 0 47.87 47.87 0 0 0-8.104-4.342.75.75 0 0 1-.461-.71c.035-1.442.121-2.87.255-4.286.921.304 1.83.634 2.726.99v1.27a1.5 1.5 0 0 0-.14 2.508c-.09.38-.222.753-.397 1.11.452.213.901.434 1.346.66a6.727 6.727 0 0 0 .551-1.607 1.5 1.5 0 0 0 .14-2.67v-.645a48.549 48.549 0 0 1 3.44 1.667 2.25 2.25 0 0 0 2.12 0Z" 128 + /> 129 + <path 130 + d="M4.462 19.462c.42-.419.753-.89 1-1.395.453.214.902.435 1.347.662a6.742 6.742 0 0 1-1.286 1.794.75.75 0 0 1-1.06-1.06Z" 131 + /> 132 + </svg></Button 133 + > 134 + 135 + <Button size="iconLg" 136 + ><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> 137 + <path 138 + d="M11.7 2.805a.75.75 0 0 1 .6 0A60.65 60.65 0 0 1 22.83 8.72a.75.75 0 0 1-.231 1.337 49.948 49.948 0 0 0-9.902 3.912l-.003.002c-.114.06-.227.119-.34.18a.75.75 0 0 1-.707 0A50.88 50.88 0 0 0 7.5 12.173v-.224c0-.131.067-.248.172-.311a54.615 54.615 0 0 1 4.653-2.52.75.75 0 0 0-.65-1.352 56.123 56.123 0 0 0-4.78 2.589 1.858 1.858 0 0 0-.859 1.228 49.803 49.803 0 0 0-4.634-1.527.75.75 0 0 1-.231-1.337A60.653 60.653 0 0 1 11.7 2.805Z" 139 + /> 140 + <path 141 + d="M13.06 15.473a48.45 48.45 0 0 1 7.666-3.282c.134 1.414.22 2.843.255 4.284a.75.75 0 0 1-.46.711 47.87 47.87 0 0 0-8.105 4.342.75.75 0 0 1-.832 0 47.87 47.87 0 0 0-8.104-4.342.75.75 0 0 1-.461-.71c.035-1.442.121-2.87.255-4.286.921.304 1.83.634 2.726.99v1.27a1.5 1.5 0 0 0-.14 2.508c-.09.38-.222.753-.397 1.11.452.213.901.434 1.346.66a6.727 6.727 0 0 0 .551-1.607 1.5 1.5 0 0 0 .14-2.67v-.645a48.549 48.549 0 0 1 3.44 1.667 2.25 2.25 0 0 0 2.12 0Z" 142 + /> 143 + <path 144 + d="M4.462 19.462c.42-.419.753-.89 1-1.395.453.214.902.435 1.347.662a6.742 6.742 0 0 1-1.286 1.794.75.75 0 0 1-1.06-1.06Z" 145 + /> 146 + </svg></Button 147 + > 148 + </div> 149 + 150 + <Text class="mt-6">Colors</Text> 151 + <div class="flex flex-wrap items-center gap-2"> 152 + <Button variant="red">Red</Button> 153 + <Button variant="yellow">Yellow</Button> 154 + <Button variant="green">Green</Button> 155 + <Button variant="blue">Blue</Button> 156 + <Button variant="indigo">Indigo</Button> 157 + <Button variant="violet">Violet</Button> 158 + <Button variant="purple">Purple</Button> 159 + <Button variant="fuchsia">Fuchsia</Button> 160 + <Button variant="pink">Pink</Button> 161 + <Button variant="rose">Rose</Button> 162 + <Button variant="orange">Orange</Button> 163 + <Button variant="amber">Amber</Button> 164 + <Button variant="lime">Lime</Button> 165 + <Button variant="emerald">Emerald</Button> 166 + <Button variant="teal">Teal</Button> 167 + <Button variant="cyan">Cyan</Button> 168 + <Button variant="sky">Sky</Button> 169 + </div>
+34
src/lib/preview/CheckboxPreview.svelte
··· 1 + <script> 2 + import { Subheading } from '$lib/components/heading'; 3 + import { Text } from '$lib/components/text'; 4 + import { Checkbox } from '$lib/components/checkbox'; 5 + import { Label } from '$lib/components/label'; 6 + </script> 7 + 8 + <Subheading>Checkboxes</Subheading> 9 + 10 + <Text class="mb-2 mt-4">Primary</Text> 11 + <div class="flex items-center gap-2"> 12 + <Checkbox sizeVariant="sm" variant="primary" /> 13 + <Checkbox sizeVariant="default" variant="primary" /> 14 + <Checkbox sizeVariant="lg" variant="primary" /> 15 + </div> 16 + 17 + <Text class="mb-2 mt-4">Secondary</Text> 18 + <div class="flex items-center gap-2"> 19 + <Checkbox sizeVariant="sm" variant="secondary" /> 20 + <Checkbox sizeVariant="default" variant="secondary" /> 21 + <Checkbox sizeVariant="lg" variant="secondary" /> 22 + </div> 23 + 24 + <Text class="mb-2 mt-4">With Label</Text> 25 + <div class="flex items-center space-x-2"> 26 + <Checkbox id="terms" aria-labelledby="terms-label" variant="secondary" /> 27 + <Label 28 + id="terms-label" 29 + for="terms" 30 + class="text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70" 31 + > 32 + Yes, I agree to the terms and sell my soul (and no I didn't read the terms) 33 + </Label> 34 + </div>
+27
src/lib/preview/ColorSelectPreview.svelte
··· 1 + <script> 2 + import ColorSelect from '$lib/components/color-select/ColorSelect.svelte'; 3 + import Subheading from '$lib/components/heading/Subheading.svelte'; 4 + import Text from '$lib/components/text/Text.svelte'; 5 + </script> 6 + 7 + <Subheading>Color Select</Subheading> 8 + 9 + <Text class="mb-2 mt-4">Tailwind Classes</Text> 10 + <ColorSelect 11 + colors={[ 12 + { class: 'bg-red-500', label: 'red' }, 13 + { class: 'bg-green-500', label: 'green' }, 14 + { class: 'bg-blue-500', label: 'blue' }, 15 + { class: 'bg-yellow-500', label: 'yellow' } 16 + ]} 17 + /> 18 + 19 + <Text class="mb-2 mt-4">Custom Colors</Text> 20 + <ColorSelect 21 + colors={[ 22 + { value: '#690B22', label: 'red' }, 23 + { value: '#E07A5F', label: 'green' }, 24 + { value: '#F1E3D3', label: 'blue' }, 25 + { value: '#1B4D3E', label: 'yellow' } 26 + ]} 27 + />
+9
src/lib/preview/Container.svelte
··· 1 + <script lang="ts"> 2 + let { children } = $props(); 3 + </script> 4 + 5 + <div class="px-4 py-24 lg:ml-72 xl:ml-80"> 6 + <div class="mx-auto flex w-full max-w-xl flex-col items-start gap-2"> 7 + {@render children?.()} 8 + </div> 9 + </div>
+19
src/lib/preview/Depth3DPreview.svelte
··· 1 + <script lang="ts"> 2 + import { base } from '$app/paths'; 3 + import Depth3D from '$lib/components/depth3d'; 4 + import Subheading from '$lib/components/heading/Subheading.svelte'; 5 + </script> 6 + 7 + <Subheading class="mb-6">Depth 3D</Subheading> 8 + 9 + <div class="flex w-full items-center justify-center"> 10 + <Depth3D 11 + sceneProps={{ 12 + image: { 13 + image: base + '/images/depth3d/image.webp', 14 + depth: base + '/images/depth3d/depth.webp' 15 + }, 16 + mouseMovement: false 17 + }} 18 + /> 19 + </div>
+15
src/lib/preview/GithubCornerPreview.svelte
··· 1 + <script lang="ts"> 2 + import GithubCorner from '$lib/components/github-corner/GithubCorner.svelte'; 3 + import { Subheading } from '$lib/components/heading'; 4 + </script> 5 + 6 + <Subheading>Github Corner</Subheading> 7 + 8 + <div 9 + class="relative mt-6 h-96 w-full overflow-hidden rounded-2xl border border-base-300 p-6 dark:border-base-900" 10 + > 11 + <div class="text-pretty pr-52 text-7xl font-bold text-base-950 dark:text-base-50"> 12 + My cool github project 13 + </div> 14 + <GithubCorner class="absolute" /> 15 + </div>
+12
src/lib/preview/HeatmapPreview.svelte
··· 1 + <script lang="ts"> 2 + import { Subheading } from '$lib/components/heading'; 3 + import Heatmap from '$lib/components/heatmap/Heatmap.svelte'; 4 + 5 + const heatmapData = Array.from({ length: 34 }, () => 6 + Array.from({ length: 7 }, () => Math.floor(Math.random() * 5)) 7 + ) as (0 | 1 | 2 | 3 | 4)[][]; 8 + </script> 9 + 10 + <Subheading class="mb-6">Heatmap</Subheading> 11 + 12 + <Heatmap data={heatmapData} />
+19
src/lib/preview/InputPreview.svelte
··· 1 + <script> 2 + import { Subheading } from '$lib/components/heading'; 3 + import { Input } from '$lib/components/input'; 4 + import { Text } from '$lib/components/text'; 5 + </script> 6 + 7 + <Subheading>Input</Subheading> 8 + 9 + <Text class="mb-2 mt-4">Primary</Text> 10 + 11 + <Input sizeVariant="sm" placeholder="Enter text here (small)" /> 12 + <Input placeholder="Enter text here (default)" /> 13 + <Input sizeVariant="lg" placeholder="Enter text here (large)" /> 14 + 15 + <Text class="mb-2 mt-4">Secondary</Text> 16 + 17 + <Input variant="secondary" sizeVariant="sm" placeholder="Enter text here (small)" /> 18 + <Input variant="secondary" placeholder="Enter text here (default)" /> 19 + <Input variant="secondary" sizeVariant="lg" placeholder="Enter text here (large)" />
+23
src/lib/preview/LoadersPreview.svelte
··· 1 + <script> 2 + import { Subheading } from '$lib/components/heading'; 3 + import { Progress } from '$lib/components/progress'; 4 + import { PulseLoader } from '$lib/components/pulse-loader'; 5 + import { Text } from '$lib/components/text'; 6 + 7 + let progress = $state(20); 8 + 9 + $effect(() => { 10 + setInterval(() => { 11 + progress = progress > 100 ? 0 : progress + Math.random() * 40; 12 + }, 500); 13 + }); 14 + </script> 15 + 16 + <Subheading class="mb-2">Loader</Subheading> 17 + <Text class="mb-2 mt-4">Bar Loader</Text> 18 + 19 + <Progress {progress} /> 20 + 21 + <Text class="mb-2 mt-4">Pulse Loader</Text> 22 + 23 + <PulseLoader />
+12
src/lib/preview/PhonePreview.svelte
··· 1 + <script> 2 + import { Subheading } from '$lib/components/heading'; 3 + import Phone from '$lib/components/phone/Phone.svelte'; 4 + </script> 5 + 6 + <Subheading class="mb-4">Phone</Subheading> 7 + 8 + <Phone> 9 + <div class="flex h-full w-full items-center justify-center bg-accent-200 p-8"> 10 + <div class="text-3xl font-bold text-black">Hello there</div> 11 + </div> 12 + </Phone>
+8
src/lib/preview/PieChartPreview.svelte
··· 1 + <script> 2 + import { Subheading } from '$lib/components/heading'; 3 + import PieChart from '$lib/components/piechart/PieChart.svelte'; 4 + </script> 5 + 6 + <Subheading class="mb-4">Pie Chart</Subheading> 7 + 8 + <PieChart />
+16
src/lib/preview/ProgressPreview.svelte
··· 1 + <script> 2 + import { Subheading } from '$lib/components/heading'; 3 + import { Progress } from '$lib/components/progress'; 4 + 5 + let progress = $state(20); 6 + 7 + $effect(() => { 8 + setInterval(() => { 9 + progress = progress > 100 ? 0 : progress + Math.random() * 40; 10 + }, 1000); 11 + }); 12 + </script> 13 + 14 + <Subheading class="mb-8">Progress</Subheading> 15 + 16 + <Progress {progress} />
+86
src/lib/preview/SelectTheme.svelte
··· 1 + <script> 2 + import ColorSelect from '$lib/components/color-select/ColorSelect.svelte'; 3 + import Subheading from '$lib/components/heading/Subheading.svelte'; 4 + import Text from '$lib/components/text/Text.svelte'; 5 + import { onMount, tick } from 'svelte'; 6 + 7 + let accentColor = $state({ 8 + class: '', 9 + label: '' 10 + }); 11 + 12 + let baseColor = $state({ 13 + class: '', 14 + label: '' 15 + }); 16 + 17 + let accentColors = [ 18 + { class: 'bg-red-500', label: 'red' }, 19 + { class: 'bg-orange-500', label: 'orange' }, 20 + { class: 'bg-amber-500', label: 'amber' }, 21 + { class: 'bg-yellow-500', label: 'yellow' }, 22 + { class: 'bg-lime-500', label: 'lime' }, 23 + { class: 'bg-green-500', label: 'green' }, 24 + { class: 'bg-emerald-500', label: 'emerald' }, 25 + { class: 'bg-teal-500', label: 'teal' }, 26 + { class: 'bg-cyan-500', label: 'cyan' }, 27 + { class: 'bg-sky-500', label: 'sky' }, 28 + { class: 'bg-blue-500', label: 'blue' }, 29 + { class: 'bg-indigo-500', label: 'indigo' }, 30 + { class: 'bg-violet-500', label: 'violet' }, 31 + { class: 'bg-purple-500', label: 'purple' }, 32 + { class: 'bg-fuchsia-500', label: 'fuchsia' }, 33 + { class: 'bg-pink-500', label: 'pink' }, 34 + { class: 'bg-rose-500', label: 'rose' } 35 + ]; 36 + 37 + let baseColors = [ 38 + { class: 'bg-gray-500', label: 'gray' }, 39 + { class: 'bg-stone-500', label: 'stone' }, 40 + { class: 'bg-zinc-500', label: 'zinc' }, 41 + { class: 'bg-neutral-500', label: 'neutral' }, 42 + { class: 'bg-slate-500', label: 'slate' } 43 + ]; 44 + 45 + onMount(async () => { 46 + await tick(); 47 + let root = document.getElementsByTagName('html')[0]; 48 + // check if one of the accent colors is already in the document body 49 + const color = accentColors.find((color) => root.classList.contains(color.label.toLowerCase())); 50 + if (color) { 51 + accentColor.label = color.label; 52 + } 53 + console.log(document.getElementsByTagName('html')[0]); 54 + 55 + const bColor = baseColors.find((color) => root.classList.contains(color.label.toLowerCase())); 56 + if (bColor) { 57 + baseColor.label = bColor.label; 58 + } 59 + }); 60 + </script> 61 + 62 + <Subheading>Select Theme</Subheading> 63 + 64 + <Text class="mb-2 mt-4">Accent Color</Text> 65 + <ColorSelect 66 + bind:selected={accentColor} 67 + colors={accentColors} 68 + onselected={(color, previous) => { 69 + document.body.classList.remove(previous.label.toLowerCase()); 70 + document.body.classList.add(color.label.toLowerCase()); 71 + 72 + localStorage.setItem('accentColor', JSON.stringify(color.label)); 73 + }} 74 + /> 75 + 76 + <Text class="mb-2 mt-4">Base Color</Text> 77 + <ColorSelect 78 + bind:selected={baseColor} 79 + colors={baseColors} 80 + onselected={(color, previous) => { 81 + document.documentElement.classList.remove(previous.label.toLowerCase()); 82 + document.documentElement.classList.add(color.label.toLowerCase()); 83 + 84 + localStorage.setItem('baseColor', JSON.stringify(color.label)); 85 + }} 86 + />
+8
src/lib/preview/StarRatingPreview.svelte
··· 1 + <script> 2 + import { Subheading } from '$lib/components/heading'; 3 + import { StarRating } from '$lib/components/star-rating'; 4 + </script> 5 + 6 + <Subheading>Star Rating</Subheading> 7 + 8 + <StarRating class="mt-4" rating={3} />
+19
src/lib/preview/TextareaPreview.svelte
··· 1 + <script> 2 + import { Subheading } from '$lib/components/heading'; 3 + import { Text } from '$lib/components/text'; 4 + import { Textarea } from '$lib/components/textarea'; 5 + </script> 6 + 7 + <Subheading>Textarea</Subheading> 8 + 9 + <Text class="mb-2 mt-4">Primary</Text> 10 + 11 + <Textarea placeholder="Enter text here (default)" sizeVariant="sm" /> 12 + <Textarea placeholder="Enter text here (default)" /> 13 + <Textarea placeholder="Enter text here (default)" sizeVariant="lg" /> 14 + 15 + <Text class="mb-2 mt-4">Secondary</Text> 16 + 17 + <Textarea placeholder="Enter text here (default)" variant="secondary" sizeVariant="sm" /> 18 + <Textarea placeholder="Enter text here (default)" variant="secondary" /> 19 + <Textarea placeholder="Enter text here (default)" variant="secondary" sizeVariant="lg" />
+17
src/lib/preview/TooltipPreview.svelte
··· 1 + <script> 2 + import { Subheading } from '$lib/components/heading'; 3 + import { Tooltip } from '$lib/components/tooltip'; 4 + import { Text } from '$lib/components/text'; 5 + </script> 6 + 7 + <Subheading>Tooltip</Subheading> 8 + 9 + <Text class="mb-2 mt-4">Primary</Text> 10 + <div class="flex w-full flex-col items-start gap-2 py-12"> 11 + <Tooltip triggerText="Hover me" triggerVariant="primary" withContext>Hello there!</Tooltip> 12 + </div> 13 + 14 + <Text class="mb-2 mt-4">Secondary</Text> 15 + <div class="flex w-full flex-col items-start gap-2 py-12"> 16 + <Tooltip triggerText="Hover me" triggerVariant="secondary" withContext>Hello there!</Tooltip> 17 + </div>
+22
src/lib/preview/VideoPlayerPreview.svelte
··· 1 + <script lang="ts"> 2 + import { Button } from '$lib/components/button'; 3 + import Subheading from '$lib/components/heading/Subheading.svelte'; 4 + import Text from '$lib/components/text/Text.svelte'; 5 + import FullscreenVideoPlayer, { 6 + videoPlayer 7 + } from '$lib/components/video-player/FullscreenVideoPlayer.svelte'; 8 + import VideoPlayer from '$lib/components/video-player/VideoPlayer.svelte'; 9 + </script> 10 + 11 + <Subheading>Video Player</Subheading> 12 + 13 + <Text class="mb-4 mt-4">Fullscreen Video Player</Text> 14 + <Button onclick={() => videoPlayer.show('https://www.youtube.com/watch?v=u1ZB_rGFyeU')} 15 + >Show Video</Button 16 + > 17 + 18 + <Text class="mb-4 mt-8">Inline Video Player</Text> 19 + 20 + <VideoPlayer id="https://www.youtube.com/watch?v=u1ZB_rGFyeU" /> 21 + 22 + <FullscreenVideoPlayer />
+8
src/routes/alert/+page.svelte
··· 1 + <script> 2 + import AlertPreview from '$lib/preview/AlertPreview.svelte'; 3 + import Container from '$lib/preview/Container.svelte'; 4 + </script> 5 + 6 + <Container> 7 + <AlertPreview /> 8 + </Container>
+8
src/routes/avatar/+page.svelte
··· 1 + <script> 2 + import AvatarPreview from '$lib/preview/AvatarPreview.svelte'; 3 + import Container from '$lib/preview/Container.svelte'; 4 + </script> 5 + 6 + <Container> 7 + <AvatarPreview /> 8 + </Container>
+8
src/routes/badge/+page.svelte
··· 1 + <script> 2 + import BadgesPreview from '$lib/preview/BadgesPreview.svelte'; 3 + import Container from '$lib/preview/Container.svelte'; 4 + </script> 5 + 6 + <Container> 7 + <BadgesPreview /> 8 + </Container>
+8
src/routes/button/+page.svelte
··· 1 + <script> 2 + import ButtonsPreview from '$lib/preview/ButtonsPreview.svelte'; 3 + import Container from '$lib/preview/Container.svelte'; 4 + </script> 5 + 6 + <Container> 7 + <ButtonsPreview /> 8 + </Container>
+8
src/routes/checkbox/+page.svelte
··· 1 + <script> 2 + import CheckboxPreview from '$lib/preview/CheckboxPreview.svelte'; 3 + import Container from '$lib/preview/Container.svelte'; 4 + </script> 5 + 6 + <Container> 7 + <CheckboxPreview /> 8 + </Container>
+8
src/routes/color-select/+page.svelte
··· 1 + <script> 2 + import ColorSelectPreview from '$lib/preview/ColorSelectPreview.svelte'; 3 + import Container from '$lib/preview/Container.svelte'; 4 + </script> 5 + 6 + <Container> 7 + <ColorSelectPreview /> 8 + </Container>
+8
src/routes/depth-3d/+page.svelte
··· 1 + <script> 2 + import Container from '$lib/preview/Container.svelte'; 3 + import Depth3DPreview from '$lib/preview/Depth3DPreview.svelte'; 4 + </script> 5 + 6 + <Container> 7 + <Depth3DPreview /> 8 + </Container>
+8
src/routes/github-corner/+page.svelte
··· 1 + <script> 2 + import Container from '$lib/preview/Container.svelte'; 3 + import GithubCornerPreview from '$lib/preview/GithubCornerPreview.svelte'; 4 + </script> 5 + 6 + <Container> 7 + <GithubCornerPreview /> 8 + </Container>
+8
src/routes/heatmap/+page.svelte
··· 1 + <script> 2 + import Container from '$lib/preview/Container.svelte'; 3 + import HeatmapPreview from '$lib/preview/HeatmapPreview.svelte'; 4 + </script> 5 + 6 + <Container> 7 + <HeatmapPreview /> 8 + </Container>
+8
src/routes/input/+page.svelte
··· 1 + <script> 2 + import Container from '$lib/preview/Container.svelte'; 3 + import InputPreview from '$lib/preview/InputPreview.svelte'; 4 + </script> 5 + 6 + <Container> 7 + <InputPreview /> 8 + </Container>
+8
src/routes/phone/+page.svelte
··· 1 + <script> 2 + import Container from '$lib/preview/Container.svelte'; 3 + import PhonePreview from '$lib/preview/PhonePreview.svelte'; 4 + </script> 5 + 6 + <Container> 7 + <PhonePreview /> 8 + </Container>
+8
src/routes/piechart/+page.svelte
··· 1 + <script> 2 + import Container from '$lib/preview/Container.svelte'; 3 + import PieChartPreview from '$lib/preview/PieChartPreview.svelte'; 4 + </script> 5 + 6 + <Container> 7 + <PieChartPreview /> 8 + </Container>
+8
src/routes/progress/+page.svelte
··· 1 + <script> 2 + import Container from '$lib/preview/Container.svelte'; 3 + import ProgressPreview from '$lib/preview/ProgressPreview.svelte'; 4 + </script> 5 + 6 + <Container> 7 + <ProgressPreview /> 8 + </Container>
+8
src/routes/star-rating/+page.svelte
··· 1 + <script> 2 + import Container from '$lib/preview/Container.svelte'; 3 + import StarRatingPreview from '$lib/preview/StarRatingPreview.svelte'; 4 + </script> 5 + 6 + <Container> 7 + <StarRatingPreview /> 8 + </Container>
+8
src/routes/textarea/+page.svelte
··· 1 + <script> 2 + import Container from '$lib/preview/Container.svelte'; 3 + import TextareaPreview from '$lib/preview/TextareaPreview.svelte'; 4 + </script> 5 + 6 + <Container> 7 + <TextareaPreview /> 8 + </Container>
+8
src/routes/theme/+page.svelte
··· 1 + <script> 2 + import Container from '$lib/preview/Container.svelte'; 3 + import SelectTheme from '$lib/preview/SelectTheme.svelte'; 4 + </script> 5 + 6 + <Container> 7 + <SelectTheme /> 8 + </Container>
+8
src/routes/tooltip/+page.svelte
··· 1 + <script> 2 + import Container from '$lib/preview/Container.svelte'; 3 + import TooltipPreview from '$lib/preview/TooltipPreview.svelte'; 4 + </script> 5 + 6 + <Container> 7 + <TooltipPreview /> 8 + </Container>
+8
src/routes/video-player/+page.svelte
··· 1 + <script> 2 + import Container from '$lib/preview/Container.svelte'; 3 + import VideoPlayerPreview from '$lib/preview/VideoPlayerPreview.svelte'; 4 + </script> 5 + 6 + <Container> 7 + <VideoPlayerPreview /> 8 + </Container>
static/images/depth3d/depth.webp

This is a binary file and will not be displayed.

static/images/depth3d/image.webp

This is a binary file and will not be displayed.

+15
src/lib/components/alert/alert-description.svelte
··· 1 + <script lang="ts"> 2 + import type { WithElementRef } from 'bits-ui'; 3 + import type { HTMLAttributes } from 'svelte/elements'; 4 + 5 + let { 6 + ref = $bindable(null), 7 + class: className, 8 + children, 9 + ...restProps 10 + }: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props(); 11 + </script> 12 + 13 + <div bind:this={ref} class={['text-xs', className]} {...restProps}> 14 + {@render children?.()} 15 + </div>
+24
src/lib/components/alert/alert-title.svelte
··· 1 + <script lang="ts"> 2 + import type { HTMLAttributes } from 'svelte/elements'; 3 + import type { WithElementRef } from 'bits-ui'; 4 + 5 + let { 6 + ref = $bindable(null), 7 + class: className, 8 + level = 5, 9 + children, 10 + ...restProps 11 + }: WithElementRef<HTMLAttributes<HTMLDivElement>> & { 12 + level?: 1 | 2 | 3 | 4 | 5 | 6; 13 + } = $props(); 14 + </script> 15 + 16 + <div 17 + role="heading" 18 + aria-level={level} 19 + bind:this={ref} 20 + class={['mb-2 text-sm font-medium leading-none last:mb-0', className]} 21 + {...restProps} 22 + > 23 + {@render children?.()} 24 + </div>
+116
src/lib/components/alert/alert.svelte
··· 1 + <script lang="ts" module> 2 + import { type VariantProps, tv } from 'tailwind-variants'; 3 + 4 + export const alertVariants = tv({ 5 + base: 'text-xs relative w-full rounded-2xl border p-4 [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:size-4 [&>svg~*]:pl-7 ', 6 + variants: { 7 + variant: { 8 + default: 9 + 'bg-accent-500/10 [&>div:first-of-type]:text-accent-700 [&>svg]:text-accent-600 dark:[&>svg]:text-accent-500 dark:[&>div:first-of-type]:text-accent-500 dark:bg-accent-500/5 text-accent-600 dark:text-accent-400 border-accent-500/20 dark:border-accent-500/10', 10 + secondary: 11 + 'bg-base-500/10 [&>div:first-of-type]:text-base-700 [&>svg]:text-base-600 dark:[&>svg]:text-base-400 dark:[&>div:first-of-type]:text-base-300 dark:bg-base-500/5 text-base-600 dark:text-base-400 border-base-500/20 dark:border-base-500/10', 12 + red: 'bg-red-500/10 [&>div:first-of-type]:text-red-700 [&>svg]:text-red-600 dark:[&>svg]:text-red-500 dark:[&>div:first-of-type]:text-red-500 dark:bg-red-500/5 text-red-600 dark:text-red-400 border-red-500/20 dark:border-red-500/10', 13 + orange: 14 + 'bg-orange-500/10 [&>div:first-of-type]:text-orange-700 [&>svg]:text-orange-600 dark:[&>svg]:text-orange-500 dark:[&>div:first-of-type]:text-orange-500 dark:bg-orange-500/5 text-orange-600 dark:text-orange-400 border-orange-500/20 dark:border-orange-500/10', 15 + amber: 16 + 'bg-amber-500/10 [&>div:first-of-type]:text-amber-700 [&>svg]:text-amber-600 dark:[&>svg]:text-amber-500 dark:[&>div:first-of-type]:text-amber-500 dark:bg-amber-500/5 text-amber-600 dark:text-amber-400 border-amber-500/20 dark:border-amber-500/10', 17 + yellow: 18 + 'bg-yellow-500/10 [&>div:first-of-type]:text-yellow-700 [&>svg]:text-yellow-600 dark:[&>svg]:text-yellow-500 dark:[&>div:first-of-type]:text-yellow-500 dark:bg-yellow-500/5 text-yellow-600 dark:text-yellow-400 border-yellow-500/20 dark:border-yellow-500/10', 19 + lime: 'bg-lime-500/10 [&>div:first-of-type]:text-lime-700 [&>svg]:text-lime-600 dark:[&>svg]:text-lime-500 dark:[&>div:first-of-type]:text-lime-500 dark:bg-lime-500/5 text-lime-600 dark:text-lime-400 border-lime-500/20 dark:border-lime-500/10', 20 + green: 21 + 'bg-green-500/10 [&>div:first-of-type]:text-green-700 [&>svg]:text-green-600 dark:[&>svg]:text-green-500 dark:[&>div:first-of-type]:text-green-500 dark:bg-green-500/5 text-green-600 dark:text-green-400 border-green-500/20 dark:border-green-500/10', 22 + emerald: 23 + 'bg-emerald-500/10 [&>div:first-of-type]:text-emerald-700 [&>svg]:text-emerald-600 dark:[&>svg]:text-emerald-500 dark:[&>div:first-of-type]:text-emerald-500 dark:bg-emerald-500/5 text-emerald-600 dark:text-emerald-400 border-emerald-500/20 dark:border-emerald-500/10', 24 + teal: 'bg-teal-500/10 [&>div:first-of-type]:text-teal-700 [&>svg]:text-teal-600 dark:[&>svg]:text-teal-500 dark:[&>div:first-of-type]:text-teal-500 dark:bg-teal-500/5 text-teal-600 dark:text-teal-400 border-teal-500/20 dark:border-teal-500/10', 25 + cyan: 'bg-cyan-500/10 [&>div:first-of-type]:text-cyan-700 [&>svg]:text-cyan-600 dark:[&>svg]:text-cyan-500 dark:[&>div:first-of-type]:text-cyan-500 dark:bg-cyan-500/5 text-cyan-600 dark:text-cyan-400 border-cyan-500/20 dark:border-cyan-500/10', 26 + sky: 'bg-sky-500/10 [&>div:first-of-type]:text-sky-700 [&>svg]:text-sky-600 dark:[&>svg]:text-sky-500 dark:[&>div:first-of-type]:text-sky-500 dark:bg-sky-500/5 text-sky-600 dark:text-sky-400 border-sky-500/20 dark:border-sky-500/10', 27 + blue: 'bg-blue-500/10 [&>div:first-of-type]:text-blue-700 [&>svg]:text-blue-600 dark:[&>svg]:text-blue-500 dark:[&>div:first-of-type]:text-blue-500 dark:bg-blue-500/5 text-blue-600 dark:text-blue-400 border-blue-500/20 dark:border-blue-500/10', 28 + indigo: 29 + 'bg-indigo-500/10 [&>div:first-of-type]:text-indigo-700 [&>svg]:text-indigo-600 dark:[&>svg]:text-indigo-500 dark:[&>div:first-of-type]:text-indigo-500 dark:bg-indigo-500/5 text-indigo-600 dark:text-indigo-400 border-indigo-500/20 dark:border-indigo-500/10', 30 + violet: 31 + 'bg-violet-500/10 [&>div:first-of-type]:text-violet-700 [&>svg]:text-violet-600 dark:[&>svg]:text-violet-500 dark:[&>div:first-of-type]:text-violet-500 dark:bg-violet-500/5 text-violet-600 dark:text-violet-400 border-violet-500/20 dark:border-violet-500/10', 32 + purple: 33 + 'bg-purple-500/10 [&>div:first-of-type]:text-purple-700 [&>svg]:text-purple-600 dark:[&>svg]:text-purple-500 dark:[&>div:first-of-type]:text-purple-500 dark:bg-purple-500/5 text-purple-600 dark:text-purple-400 border-purple-500/20 dark:border-purple-500/10', 34 + fuchsia: 35 + 'bg-fuchsia-500/10 [&>div:first-of-type]:text-fuchsia-700 [&>svg]:text-fuchsia-600 dark:[&>svg]:text-fuchsia-500 dark:[&>div:first-of-type]:text-fuchsia-500 dark:bg-fuchsia-500/5 text-fuchsia-600 dark:text-fuchsia-400 border-fuchsia-500/20 dark:border-fuchsia-500/10', 36 + pink: 'bg-pink-500/10 [&>div:first-of-type]:text-pink-700 [&>svg]:text-pink-600 dark:[&>svg]:text-pink-500 dark:[&>div:first-of-type]:text-pink-500 dark:bg-pink-500/5 text-pink-600 dark:text-pink-400 border-pink-500/20 dark:border-pink-500/10', 37 + rose: 'bg-rose-500/10 [&>div:first-of-type]:text-rose-700 [&>svg]:text-rose-600 dark:[&>svg]:text-rose-500 dark:[&>div:first-of-type]:text-rose-500 dark:bg-rose-500/5 text-rose-600 dark:text-rose-400 border-rose-500/20 dark:border-rose-500/10' 38 + } 39 + }, 40 + defaultVariants: { 41 + variant: 'default' 42 + } 43 + }); 44 + 45 + export type AlertVariant = VariantProps<typeof alertVariants>['variant']; 46 + </script> 47 + 48 + <script lang="ts"> 49 + import type { HTMLAttributes } from 'svelte/elements'; 50 + import type { WithElementRef } from 'bits-ui'; 51 + import { AlertTitle } from '.'; 52 + 53 + let { 54 + ref = $bindable(null), 55 + class: className, 56 + variant = 'default', 57 + title, 58 + type, 59 + children, 60 + ...restProps 61 + }: WithElementRef<HTMLAttributes<HTMLDivElement>> & { 62 + variant?: AlertVariant; 63 + title?: string; 64 + type?: 'info' | 'warning' | 'success' | 'error'; 65 + } = $props(); 66 + 67 + if (type === 'warning' && variant === 'default') { 68 + variant = 'amber'; 69 + } else if (type === 'error' && variant === 'default') { 70 + variant = 'red'; 71 + } else if (type === 'success' && variant === 'default') { 72 + variant = 'green'; 73 + } else if (type === 'info' && variant === 'default') { 74 + variant = 'sky'; 75 + } 76 + </script> 77 + 78 + <div bind:this={ref} class={[alertVariants({ variant }), className]} {...restProps} role="alert"> 79 + {#if type === 'warning'} 80 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="size-6"> 81 + <path 82 + fill-rule="evenodd" 83 + d="M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003ZM12 8.25a.75.75 0 0 1 .75.75v3.75a.75.75 0 0 1-1.5 0V9a.75.75 0 0 1 .75-.75Zm0 8.25a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z" 84 + clip-rule="evenodd" 85 + /> 86 + </svg> 87 + {:else if type === 'success'} 88 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="size-6"> 89 + <path 90 + fill-rule="evenodd" 91 + d="M8.603 3.799A4.49 4.49 0 0 1 12 2.25c1.357 0 2.573.6 3.397 1.549a4.49 4.49 0 0 1 3.498 1.307 4.491 4.491 0 0 1 1.307 3.497A4.49 4.49 0 0 1 21.75 12a4.49 4.49 0 0 1-1.549 3.397 4.491 4.491 0 0 1-1.307 3.497 4.491 4.491 0 0 1-3.497 1.307A4.49 4.49 0 0 1 12 21.75a4.49 4.49 0 0 1-3.397-1.549 4.49 4.49 0 0 1-3.498-1.306 4.491 4.491 0 0 1-1.307-3.498A4.49 4.49 0 0 1 2.25 12c0-1.357.6-2.573 1.549-3.397a4.49 4.49 0 0 1 1.307-3.497 4.49 4.49 0 0 1 3.497-1.307Zm7.007 6.387a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z" 92 + clip-rule="evenodd" 93 + /> 94 + </svg> 95 + {:else if type === 'info'} 96 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="size-6"> 97 + <path 98 + fill-rule="evenodd" 99 + d="M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm8.706-1.442c1.146-.573 2.437.463 2.126 1.706l-.709 2.836.042-.02a.75.75 0 0 1 .67 1.34l-.04.022c-1.147.573-2.438-.463-2.127-1.706l.71-2.836-.042.02a.75.75 0 1 1-.671-1.34l.041-.022ZM12 9a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z" 100 + clip-rule="evenodd" 101 + /> 102 + </svg> 103 + {:else if type === 'error'} 104 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="size-6"> 105 + <path 106 + fill-rule="evenodd" 107 + d="M12 2.25c-5.385 0-9.75 4.365-9.75 9.75s4.365 9.75 9.75 9.75 9.75-4.365 9.75-9.75S17.385 2.25 12 2.25Zm-1.72 6.97a.75.75 0 1 0-1.06 1.06L10.94 12l-1.72 1.72a.75.75 0 1 0 1.06 1.06L12 13.06l1.72 1.72a.75.75 0 1 0 1.06-1.06L13.06 12l1.72-1.72a.75.75 0 1 0-1.06-1.06L12 10.94l-1.72-1.72Z" 108 + clip-rule="evenodd" 109 + /> 110 + </svg> 111 + {/if} 112 + {#if title} 113 + <AlertTitle class="text-accent-500 dark:text-accent-500">{title}</AlertTitle> 114 + {/if} 115 + {@render children?.()} 116 + </div>
+14
src/lib/components/alert/index.ts
··· 1 + import Root from "./alert.svelte"; 2 + import Description from "./alert-description.svelte"; 3 + import Title from "./alert-title.svelte"; 4 + export { alertVariants, type AlertVariant } from "./alert.svelte"; 5 + 6 + export { 7 + Root, 8 + Description, 9 + Title, 10 + // 11 + Root as Alert, 12 + Description as AlertDescription, 13 + Title as AlertTitle, 14 + };
+55
src/lib/components/avatar/Avatar.svelte
··· 1 + <script lang="ts"> 2 + import { Avatar as AvatarPrimitive, type WithoutChildrenOrChild } from 'bits-ui'; 3 + 4 + let { 5 + src, 6 + alt, 7 + fallback, 8 + ref = $bindable(null), 9 + 10 + imageRef = $bindable(null), 11 + imageClass, 12 + 13 + fallbackRef = $bindable(null), 14 + fallbackClass, 15 + 16 + class: className, 17 + ...restProps 18 + }: WithoutChildrenOrChild<AvatarPrimitive.RootProps> & { 19 + fallback?: string; 20 + imageRef?: HTMLImageElement | null; 21 + imageClass?: string; 22 + fallbackRef?: HTMLElement | null; 23 + fallbackClass?: string; 24 + 25 + src?: string; 26 + alt?: string; 27 + } = $props(); 28 + </script> 29 + 30 + <AvatarPrimitive.Root 31 + class={[ 32 + 'relative flex size-10 shrink-0 overflow-hidden rounded-full border border-base-200 bg-base-100 text-base-900 dark:border-base-800 dark:bg-base-900 dark:text-base-50', 33 + className 34 + ]} 35 + {...restProps} 36 + bind:ref 37 + > 38 + {#if src} 39 + <AvatarPrimitive.Image 40 + class={['aspect-square size-full', imageClass]} 41 + {src} 42 + {alt} 43 + bind:ref={imageRef} 44 + /> 45 + {/if} 46 + 47 + {#if fallback} 48 + <AvatarPrimitive.Fallback 49 + bind:ref={fallbackRef} 50 + class={['flex size-full items-center justify-center', fallbackClass]} 51 + > 52 + {fallback} 53 + </AvatarPrimitive.Fallback> 54 + {/if} 55 + </AvatarPrimitive.Root>
+42
src/lib/components/avatar/AvatarGroup.svelte
··· 1 + <script lang="ts"> 2 + import type { WithElementRef } from 'bits-ui'; 3 + import type { HTMLAttributes } from 'svelte/elements'; 4 + import { Avatar } from '.'; 5 + 6 + let { 7 + users, 8 + ref = $bindable(null), 9 + 10 + avatarClass, 11 + imageClass, 12 + fallbackClass, 13 + 14 + class: className, 15 + ...restProps 16 + }: WithElementRef<HTMLAttributes<HTMLDivElement>> & { 17 + avatarClass?: string; 18 + imageClass?: string; 19 + fallbackClass?: string; 20 + 21 + users: { 22 + src?: string; 23 + alt?: string; 24 + fallback?: string; 25 + }[]; 26 + 27 + class?: string; 28 + } = $props(); 29 + </script> 30 + 31 + <div class={['flex -space-x-2 overflow-hidden', className]} bind:this={ref} {...restProps}> 32 + {#each users as user} 33 + <Avatar 34 + src={user.src} 35 + alt={user.alt} 36 + fallback={user.fallback} 37 + class={['border-50 border-2 dark:border-base-950', avatarClass]} 38 + {imageClass} 39 + {fallbackClass} 40 + /> 41 + {/each} 42 + </div>
+4
src/lib/components/avatar/index.ts
··· 1 + import Avatar from './Avatar.svelte'; 2 + import AvatarGroup from './AvatarGroup.svelte'; 3 + 4 + export { Avatar, AvatarGroup };
+75
src/lib/components/badge/Badge.svelte
··· 1 + <script lang="ts" module> 2 + import { type VariantProps, tv } from 'tailwind-variants'; 3 + 4 + export const badgeVariants = tv({ 5 + base: 'inline-flex items-center justify-center whitespace-nowrap rounded-2xl text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 duration-300 active:duration-100 [&_svg]:pointer-events-none [&_svg]:shrink-0', 6 + variants: { 7 + variant: { 8 + primary: 9 + 'border border-accent-500/20 dark:border-accent-500/20 bg-accent-500/10 dark:bg-accent-500/10 text-accent-700 dark:text-accent-400', 10 + secondary: 11 + 'bg-base-100 dark:bg-base-900 text-base-900 dark:text-base-50 border border-base-200 dark:border-base-800', 12 + 13 + red: 'border border-red-500/20 dark:border-red-500/20 bg-red-500/10 dark:bg-red-500/10 text-red-700 dark:text-red-400', 14 + yellow: 15 + 'border border-yellow-500/20 dark:border-yellow-500/20 bg-yellow-500/10 dark:bg-yellow-500/10 text-yellow-700 dark:text-yellow-400', 16 + green: 17 + 'border border-green-500/20 dark:border-green-500/20 bg-green-500/10 dark:bg-green-500/10 text-green-700 dark:text-green-400', 18 + blue: 'border border-blue-500/20 dark:border-blue-500/20 bg-blue-500/10 dark:bg-blue-500/10 text-blue-700 dark:text-blue-400', 19 + indigo: 20 + 'border border-indigo-500/20 dark:border-indigo-500/20 bg-indigo-500/10 dark:bg-indigo-500/10 text-indigo-700 dark:text-indigo-400', 21 + violet: 22 + 'border border-violet-500/20 dark:border-violet-500/20 bg-violet-500/10 dark:bg-violet-500/10 text-violet-700 dark:text-violet-400', 23 + purple: 24 + 'border border-purple-500/20 dark:border-purple-500/20 bg-purple-500/10 dark:bg-purple-500/10 text-purple-700 dark:text-purple-400', 25 + fuchsia: 26 + 'border border-fuchsia-500/20 dark:border-fuchsia-500/20 bg-fuchsia-500/10 dark:bg-fuchsia-500/10 text-fuchsia-700 dark:text-fuchsia-400', 27 + pink: 'border border-pink-500/20 dark:border-pink-500/20 bg-pink-500/10 dark:bg-pink-500/10 text-pink-700 dark:text-pink-400', 28 + rose: 'border border-rose-500/20 dark:border-rose-500/20 bg-rose-500/10 dark:bg-rose-500/10 text-rose-700 dark:text-rose-400', 29 + orange: 30 + 'border border-orange-500/20 dark:border-orange-500/20 bg-orange-500/10 dark:bg-orange-500/10 text-orange-700 dark:text-orange-400', 31 + amber: 32 + 'border border-amber-500/20 dark:border-amber-500/20 bg-amber-500/10 dark:bg-amber-500/10 text-amber-700 dark:text-amber-400', 33 + lime: 'border border-lime-500/20 dark:border-lime-500/20 bg-lime-500/10 dark:bg-lime-500/10 text-lime-700 dark:text-lime-400', 34 + emerald: 35 + 'border border-emerald-500/20 dark:border-emerald-500/20 bg-emerald-500/10 dark:bg-emerald-500/10 text-emerald-700 dark:text-emerald-400', 36 + teal: 'border border-teal-500/20 dark:border-teal-500/20 bg-teal-500/10 dark:bg-teal-500/10 text-teal-700 dark:text-teal-400', 37 + cyan: 'border border-cyan-500/20 dark:border-cyan-500/20 bg-cyan-500/10 dark:bg-cyan-500/10 text-cyan-700 dark:text-cyan-400', 38 + sky: 'border border-sky-500/20 dark:border-sky-500/20 bg-sky-500/10 dark:bg-sky-500/10 text-sky-700 dark:text-sky-400' 39 + }, 40 + size: { 41 + sm: 'px-2 text-xs py-0.5 [&_svg]:size-3 gap-1.5', 42 + md: 'px-3 py-1 [&_svg]:size-4 gap-2', 43 + lg: 'px-4 text-lg py-1.5 [&_svg]:size-5 gap-2.5' 44 + } 45 + }, 46 + defaultVariants: { 47 + variant: 'primary', 48 + size: 'sm' 49 + } 50 + }); 51 + 52 + export type BadgeVariant = VariantProps<typeof badgeVariants>['variant']; 53 + export type BadgeSize = VariantProps<typeof badgeVariants>['size']; 54 + </script> 55 + 56 + <script lang="ts"> 57 + import type { WithElementRef } from 'bits-ui'; 58 + import type { HTMLAttributes } from 'svelte/elements'; 59 + 60 + let { 61 + ref = $bindable(null), 62 + class: className, 63 + variant = 'primary', 64 + size = 'sm', 65 + children, 66 + ...restProps 67 + }: WithElementRef<HTMLAttributes<HTMLSpanElement>> & { 68 + variant?: BadgeVariant; 69 + size?: BadgeSize; 70 + } = $props(); 71 + </script> 72 + 73 + <span bind:this={ref} class={[badgeVariants({ variant, size }), className]} {...restProps}> 74 + {@render children?.()} 75 + </span>
+1
src/lib/components/badge/index.ts
··· 1 + export { default as Badge, badgeVariants, type BadgeVariant } from './Badge.svelte';
+94
src/lib/components/button/Button.svelte
··· 1 + <script lang="ts" module> 2 + import type { WithElementRef } from 'bits-ui'; 3 + import type { HTMLAnchorAttributes, HTMLButtonAttributes } from 'svelte/elements'; 4 + import { type VariantProps, tv } from 'tailwind-variants'; 5 + 6 + export const buttonVariants = tv({ 7 + base: 'focus-visible:outline focus-visible:transition-transform focus-visible:outline-2 outline-offset-2 inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-2xl active:scale-95 text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 duration-300 active:duration-100 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', 8 + variants: { 9 + variant: { 10 + primary: 11 + 'focus-visible:outline-accent-500 border border-accent-500/20 dark:border-accent-500/20 hover:bg-accent-500/20 dark:hover:bg-accent-500/20 bg-accent-500/10 dark:bg-accent-500/10 text-accent-700 dark:text-accent-400', 12 + secondary: 13 + 'focus-visible:outline-base-800 dark:focus-visible:outline-base-200 bg-base-100 dark:bg-base-900 text-base-900 dark:text-base-50 hover:bg-base-200 dark:hover:bg-base-800 border border-base-200 dark:border-base-800', 14 + link: 'focus-visible:outline-base-900 dark:focus-visible:outline-base-50 text-base-800 dark:text-base-200 font-semibold hover:text-accent-600 dark:hover:text-accent-400', 15 + 16 + red: 'focus-visible:outline-red-500 border border-red-500/20 dark:border-red-500/20 hover:bg-red-500/20 dark:hover:bg-red-500/20 bg-red-500/10 dark:bg-red-500/10 text-red-700 dark:text-red-400', 17 + yellow: 18 + 'focus-visible:outline-yellow-500 border border-yellow-500/20 dark:border-yellow-500/20 hover:bg-yellow-500/20 dark:hover:bg-yellow-500/20 bg-yellow-500/10 dark:bg-yellow-500/10 text-yellow-700 dark:text-yellow-400', 19 + green: 20 + 'focus-visible:outline-green-500 border border-green-500/20 dark:border-green-500/20 hover:bg-green-500/20 dark:hover:bg-green-500/20 bg-green-500/10 dark:bg-green-500/10 text-green-700 dark:text-green-400', 21 + blue: 'focus-visible:outline-blue-500 border border-blue-500/20 dark:border-blue-500/20 hover:bg-blue-500/20 dark:hover:bg-blue-500/20 bg-blue-500/10 dark:bg-blue-500/10 text-blue-700 dark:text-blue-400', 22 + indigo: 23 + 'focus-visible:outline-indigo-500 border border-indigo-500/20 dark:border-indigo-500/20 hover:bg-indigo-500/20 dark:hover:bg-indigo-500/20 bg-indigo-500/10 dark:bg-indigo-500/10 text-indigo-700 dark:text-indigo-400', 24 + violet: 25 + 'focus-visible:outline-violet-500 border border-violet-500/20 dark:border-violet-500/20 hover:bg-violet-500/20 dark:hover:bg-violet-500/20 bg-violet-500/10 dark:bg-violet-500/10 text-violet-700 dark:text-violet-400', 26 + purple: 27 + 'focus-visible:outline-purple-500 border border-purple-500/20 dark:border-purple-500/20 hover:bg-purple-500/20 dark:hover:bg-purple-500/20 bg-purple-500/10 dark:bg-purple-500/10 text-purple-700 dark:text-purple-400', 28 + fuchsia: 29 + 'focus-visible:outline-fuchsia-500 border border-fuchsia-500/20 dark:border-fuchsia-500/20 hover:bg-fuchsia-500/20 dark:hover:bg-fuchsia-500/20 bg-fuchsia-500/10 dark:bg-fuchsia-500/10 text-fuchsia-700 dark:text-fuchsia-400', 30 + pink: 'focus-visible:outline-pink-500 border border-pink-500/20 dark:border-pink-500/20 hover:bg-pink-500/20 dark:hover:bg-pink-500/20 bg-pink-500/10 dark:bg-pink-500/10 text-pink-700 dark:text-pink-400', 31 + rose: 'focus-visible:outline-rose-500 border border-rose-500/20 dark:border-rose-500/20 hover:bg-rose-500/20 dark:hover:bg-rose-500/20 bg-rose-500/10 dark:bg-rose-500/10 text-rose-700 dark:text-rose-400', 32 + orange: 33 + 'focus-visible:outline-orange-500 border border-orange-500/20 dark:border-orange-500/20 hover:bg-orange-500/20 dark:hover:bg-orange-500/20 bg-orange-500/10 dark:bg-orange-500/10 text-orange-700 dark:text-orange-400', 34 + amber: 35 + 'focus-visible:outline-amber-500 border border-amber-500/20 dark:border-amber-500/20 hover:bg-amber-500/20 dark:hover:bg-amber-500/20 bg-amber-500/10 dark:bg-amber-500/10 text-amber-700 dark:text-amber-400', 36 + lime: 'focus-visible:outline-lime-500 border border-lime-500/20 dark:border-lime-500/20 hover:bg-lime-500/20 dark:hover:bg-lime-500/20 bg-lime-500/10 dark:bg-lime-500/10 text-lime-700 dark:text-lime-400', 37 + emerald: 38 + 'focus-visible:outline-emerald-500 border border-emerald-500/20 dark:border-emerald-500/20 hover:bg-emerald-500/20 dark:hover:bg-emerald-500/20 bg-emerald-500/10 dark:bg-emerald-500/10 text-emerald-700 dark:text-emerald-400', 39 + teal: 'focus-visible:outline-teal-500 border border-teal-500/20 dark:border-teal-500/20 hover:bg-teal-500/20 dark:hover:bg-teal-500/20 bg-teal-500/10 dark:bg-teal-500/10 text-teal-700 dark:text-teal-400', 40 + cyan: 'focus-visible:outline-cyan-500 border border-cyan-500/20 dark:border-cyan-500/20 hover:bg-cyan-500/20 dark:hover:bg-cyan-500/20 bg-cyan-500/10 dark:bg-cyan-500/10 text-cyan-700 dark:text-cyan-400', 41 + sky: 'focus-visible:outline-sky-500 border border-sky-500/20 dark:border-sky-500/20 hover:bg-sky-500/20 dark:hover:bg-sky-500/20 bg-sky-500/10 dark:bg-sky-500/10 text-sky-700 dark:text-sky-400' 42 + }, 43 + size: { 44 + default: 'px-3 py-1.5', 45 + sm: 'px-2 text-xs py-1 font-base [&_svg]:size-3 gap-1.5', 46 + lg: 'px-4 gap-2.5 text-lg py-2 font-semibold [&_svg]:size-5 gap-2.5', 47 + icon: 'p-2', 48 + iconSm: 'p-1.5 [&_svg]:size-3', 49 + iconLg: 'p-3 [&_svg]:size-5' 50 + } 51 + }, 52 + defaultVariants: { 53 + variant: 'primary', 54 + size: 'default' 55 + } 56 + }); 57 + 58 + export type ButtonVariant = VariantProps<typeof buttonVariants>['variant']; 59 + export type ButtonSize = VariantProps<typeof buttonVariants>['size']; 60 + 61 + export type ButtonProps = WithElementRef<HTMLButtonAttributes> & 62 + WithElementRef<HTMLAnchorAttributes> & { 63 + variant?: ButtonVariant; 64 + size?: ButtonSize; 65 + }; 66 + </script> 67 + 68 + <script lang="ts"> 69 + let { 70 + class: className, 71 + variant = 'primary', 72 + size = 'default', 73 + ref = $bindable(null), 74 + href = undefined, 75 + type = 'button', 76 + children, 77 + ...restProps 78 + }: ButtonProps = $props(); 79 + </script> 80 + 81 + {#if href} 82 + <a bind:this={ref} class={[buttonVariants({ variant, size }), className]} {href} {...restProps}> 83 + {@render children?.()} 84 + </a> 85 + {:else} 86 + <button 87 + bind:this={ref} 88 + class={[buttonVariants({ variant, size }), className]} 89 + {type} 90 + {...restProps} 91 + > 92 + {@render children?.()} 93 + </button> 94 + {/if}
+16
src/lib/components/button/index.ts
··· 1 + import Root, { 2 + type ButtonProps, 3 + type ButtonSize, 4 + type ButtonVariant, 5 + buttonVariants 6 + } from './Button.svelte'; 7 + 8 + export { 9 + Root, 10 + type ButtonProps as Props, 11 + Root as Button, 12 + buttonVariants, 13 + type ButtonProps, 14 + type ButtonSize, 15 + type ButtonVariant 16 + };
+90
src/lib/components/checkbox/checkbox.svelte
··· 1 + <script lang="ts" module> 2 + import { Checkbox as CheckboxPrimitive, type WithoutChildrenOrChild } from 'bits-ui'; 3 + import { type VariantProps, tv } from 'tailwind-variants'; 4 + 5 + export const checkboxVariants = tv({ 6 + base: 'peer box-content size-4 shrink-0 inline-flex items-center justify-center rounded-2xl border outline-offset-2 focus-visible:outline focus-visible:outline-2 focus-visible:outline-accent-500 focus-visible:outline-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[disabled=true]:cursor-not-allowed data-[disabled=true]:opacity-50', 7 + variants: { 8 + variant: { 9 + primary: 10 + 'border-accent-200 bg-accent-100 focus-visible:outline-accent-500 data-[state=checked]:border-accent-300 data-[state=checked]:bg-accent-200 data-[state=checked]:text-accent-600 dark:border-accent-500/20 dark:bg-accent-500/5 dark:text-accent-500 dark:data-[state=checked]:border-accent-500/30 dark:data-[state=checked]:bg-accent-500/20 dark:data-[state=checked]:text-accent-500', 11 + secondary: 12 + 'border-base-300 bg-base-100 focus-visible:outline-base-900 dark:focus-visible:outline-base-100 data-[state=checked]:border-base-400 data-[state=checked]:bg-base-200 data-[state=checked]:text-base-900 dark:border-base-700 dark:bg-base-900 dark:text-base-50 dark:data-[state=checked]:border-base-500/80 dark:data-[state=checked]:bg-base-500/30 dark:data-[state=checked]:text-base-100' 13 + }, 14 + sizeVariant: { 15 + default: 'size-5', 16 + sm: 'size-4', 17 + lg: 'size-6' 18 + } 19 + }, 20 + defaultVariants: { 21 + variant: 'primary', 22 + sizeVariant: 'default' 23 + } 24 + }); 25 + 26 + export type CheckboxVariant = VariantProps<typeof checkboxVariants>['variant']; 27 + export type CheckboxSize = VariantProps<typeof checkboxVariants>['sizeVariant']; 28 + 29 + export type CheckboxProps = WithoutChildrenOrChild<CheckboxPrimitive.RootProps> & { 30 + variant?: CheckboxVariant; 31 + sizeVariant?: CheckboxSize; 32 + }; 33 + </script> 34 + 35 + <script lang="ts"> 36 + let { 37 + ref = $bindable(null), 38 + checked = $bindable(false), 39 + indeterminate = $bindable(false), 40 + variant = $bindable('primary'), 41 + sizeVariant = $bindable('default'), 42 + class: className, 43 + ...restProps 44 + }: CheckboxProps = $props(); 45 + </script> 46 + 47 + <CheckboxPrimitive.Root 48 + bind:ref 49 + class={[checkboxVariants({ variant, sizeVariant }), className]} 50 + bind:checked 51 + bind:indeterminate 52 + {...restProps} 53 + > 54 + {#snippet children({ checked, indeterminate })} 55 + <div class="flex size-4 items-center justify-center text-current"> 56 + {#if indeterminate} 57 + <svg 58 + xmlns="http://www.w3.org/2000/svg" 59 + fill="none" 60 + viewBox="0 0 24 24" 61 + stroke-width="2.5" 62 + stroke="currentColor" 63 + class={[ 64 + sizeVariant === 'sm' && 'size-3.5', 65 + sizeVariant === 'default' && 'size-4', 66 + sizeVariant === 'lg' && 'size-4.5' 67 + ]} 68 + > 69 + <path stroke-linecap="round" stroke-linejoin="round" d="M5 12h14" /> 70 + </svg> 71 + {:else} 72 + <svg 73 + xmlns="http://www.w3.org/2000/svg" 74 + fill="none" 75 + viewBox="0 0 24 24" 76 + stroke-width="2.5" 77 + stroke="currentColor" 78 + class={[ 79 + sizeVariant === 'sm' && 'size-3.5', 80 + sizeVariant === 'default' && 'size-4', 81 + sizeVariant === 'lg' && 'size-4.5', 82 + !checked && 'text-transparent' 83 + ]} 84 + > 85 + <path stroke-linecap="round" stroke-linejoin="round" d="m4.5 12.75 6 6 9-13.5" /> 86 + </svg> 87 + {/if} 88 + </div> 89 + {/snippet} 90 + </CheckboxPrimitive.Root>
+6
src/lib/components/checkbox/index.ts
··· 1 + import Root from "./checkbox.svelte"; 2 + export { 3 + Root, 4 + // 5 + Root as Checkbox, 6 + };
+56
src/lib/components/color-select/ColorSelect.svelte
··· 1 + <script lang="ts"> 2 + import type { WithElementRef, WithoutChildrenOrChild } from 'bits-ui'; 3 + import type { HTMLAttributes } from 'svelte/elements'; 4 + 5 + type Color = { class?: string; label: string; value?: string }; 6 + 7 + let { 8 + ref = $bindable(null), 9 + 10 + class: className, 11 + colorsClass, 12 + colors = $bindable([]), 13 + selected = $bindable(colors[0]), 14 + 15 + onselected, 16 + ...restProps 17 + }: WithElementRef<WithoutChildrenOrChild<HTMLAttributes<HTMLDivElement>>> & { 18 + colors: Color[]; 19 + 20 + selected?: Color; 21 + 22 + colorsClass?: string; 23 + 24 + onselected?: (color: Color, previous: Color) => void; 25 + } = $props(); 26 + </script> 27 + 28 + <div 29 + class={['group flex flex-wrap items-center gap-2.5', className]} 30 + {...restProps} 31 + bind:this={ref} 32 + > 33 + {#each colors as color} 34 + <button 35 + class={[ 36 + 'peer cursor-pointer items-center justify-center rounded-full p-0.5 outline-offset-2 outline-base-900 transition-all duration-100 focus:outline focus:outline-2 focus:outline-offset-2 focus:outline-base-900 dark:outline-base-100 dark:focus:outline-base-100', 37 + 'size-8 rounded-full border border-black border-opacity-30 transition-all dark:border-white dark:border-opacity-30', 38 + selected.label === color.label 39 + ? 'bg-opacity-100 outline outline-2 group-focus-within:outline-base-500 group-focus-within:focus:outline-base-900 dark:group-focus-within:outline-base-400 dark:group-focus-within:focus:outline-base-100' 40 + : 'bg-opacity-60 outline-0 hover:bg-opacity-100 focus:bg-opacity-100', 41 + colorsClass, 42 + color.class 43 + ]} 44 + style={color.value ? `background-color: ${color.value}` : undefined} 45 + onclick={() => { 46 + if (selected === color) return; 47 + let previous = selected; 48 + selected = color; 49 + 50 + if (onselected) onselected(color, previous); 51 + }} 52 + > 53 + <span class="sr-only">{color.label}</span> 54 + </button> 55 + {/each} 56 + </div>
+1
src/lib/components/color-select/index.ts
··· 1 + export { default as ColorSelect } from './ColorSelect.svelte';
+37
src/lib/components/depth3d/Depth3D.svelte
··· 1 + <script lang="ts"> 2 + import { Canvas } from '@threlte/core'; 3 + import Scene, { type Props } from './Scene.svelte'; 4 + import type { WithElementRef, WithoutChildrenOrChild } from 'bits-ui'; 5 + import type { HTMLAttributes } from 'svelte/elements'; 6 + 7 + const { 8 + class: className, 9 + sceneProps, 10 + ...restProps 11 + }: WithElementRef<WithoutChildrenOrChild<HTMLAttributes<HTMLDivElement>>> & { 12 + sceneProps: Props; 13 + } = $props(); 14 + </script> 15 + 16 + <div id="depth3d" class={['h-80 w-80', className]} {...restProps}> 17 + <Canvas> 18 + <Scene {...sceneProps} /> 19 + </Canvas> 20 + </div> 21 + 22 + <noscript> 23 + <style> 24 + #depth3d { 25 + display: none; 26 + } 27 + </style> 28 + 29 + <img 30 + src={sceneProps.image.image} 31 + alt="" 32 + class={[ 33 + 'h-80 w-80 rounded-2xl border border-base-400 bg-base-100 object-cover dark:border-base-700 dark:bg-base-900', 34 + className 35 + ]} 36 + /> 37 + </noscript>
+156
src/lib/components/depth3d/Scene.svelte
··· 1 + <script lang="ts" module> 2 + export type Props = { 3 + image: { 4 + image: string; 5 + depth: string; 6 + }; 7 + rounded?: number; 8 + cameraPosition?: [number, number, number]; 9 + rotationScale?: number; 10 + rotationSpeed?: number; 11 + detail?: number; 12 + depthScale?: number; 13 + mouseMovement?: boolean; 14 + }; 15 + </script> 16 + 17 + <script lang="ts"> 18 + import { T, useTask } from '@threlte/core'; 19 + import { useTexture, Align } from '@threlte/extras'; 20 + import { Spring } from 'svelte/motion'; 21 + 22 + import { Vector2, ShaderMaterial, PlaneGeometry, LinearSRGBColorSpace } from 'three'; 23 + 24 + const { 25 + image, 26 + rounded = 0.2, 27 + cameraPosition = [0, 0, 10], 28 + rotationScale = 0.2, 29 + rotationSpeed = 2, 30 + detail = 200, 31 + depthScale = 1.5, 32 + mouseMovement = true 33 + }: Props = $props(); 34 + 35 + const rotation = new Vector2(0.5, 0.5); 36 + 37 + const geometry = new PlaneGeometry(7, 7, detail, detail); 38 + 39 + let rotationX = new Spring(0); 40 + let rotationY = new Spring(0); 41 + 42 + let time = 0; 43 + let mouseMoved = -1; 44 + 45 + const map = useTexture(image.image, { 46 + transform: (texture) => { 47 + texture.colorSpace = LinearSRGBColorSpace; 48 + return texture; 49 + } 50 + }); 51 + const depthMap = useTexture(image.depth, { 52 + transform: (texture) => { 53 + return texture; 54 + } 55 + }); 56 + 57 + const uniforms = { 58 + uTexture: { type: 't', value: map }, 59 + depthMap: { type: 't', value: depthMap } 60 + }; 61 + const material = new ShaderMaterial({ 62 + uniforms: uniforms, 63 + vertexShader: ` 64 + varying vec2 vUv; 65 + uniform sampler2D depthMap; 66 + 67 + void main() { 68 + vUv = uv; 69 + // move z position based on the depth map 70 + float depth = texture2D(depthMap, vUv).r; 71 + vec3 newPosition = position + vec3(0.0, 0.0, depth * ${depthScale.toFixed(1)}); 72 + gl_Position = projectionMatrix * modelViewMatrix * vec4(newPosition, 1.0); 73 + }`, 74 + fragmentShader: ` 75 + uniform sampler2D uTexture; 76 + varying vec2 vUv; 77 + 78 + float sdRoundedRect(vec2 p, vec2 b, float r) { 79 + vec2 q = abs(p) - b + vec2(r); 80 + return length(max(q, 0.0)) - r; 81 + } 82 + ${ 83 + rounded > 0.01 84 + ? ` 85 + void main() { 86 + vec2 uv = (vUv * 2.0) - 1.0; 87 + 88 + // Size of the rectangle (half-size) 89 + vec2 rectSize = vec2(1, 1); 90 + 91 + // Calculate distance to the edge of the rounded rectangle 92 + float d = sdRoundedRect(uv, rectSize, ${rounded.toFixed(4)}); 93 + 94 + // Smooth transition for anti-aliasing 95 + float aa = fwidth(d); 96 + float alpha = smoothstep(0.0, aa, -d); 97 + 98 + gl_FragColor = texture2D(uTexture, vUv) * alpha; 99 + } 100 + ` 101 + : ` 102 + 103 + void main() { 104 + vec2 uv = (vUv * 2.0) - 1.0; 105 + gl_FragColor = texture2D(uTexture, vUv); 106 + }` 107 + } 108 + ` 109 + }); 110 + 111 + useTask((dt) => { 112 + if (mouseMoved > 0) { 113 + mouseMoved -= dt; 114 + } else { 115 + time += dt * rotationSpeed; 116 + rotationX.set(Math.sin(time) * 0.5); 117 + rotationY.set(Math.cos(time) * 0.5); 118 + } 119 + }); 120 + 121 + function onDocumentMouseMove(event: MouseEvent) { 122 + if (!mouseMovement) return; 123 + 124 + // convert to [-0.5, 0.5] 125 + rotationX.set((event.clientX / window.innerWidth - 0.5) * 2); 126 + rotationY.set((event.clientY / window.innerHeight - 0.5) * 2); 127 + 128 + mouseMoved = 1; 129 + } 130 + </script> 131 + 132 + <svelte:window onmousemove={onDocumentMouseMove} /> 133 + 134 + <T.PerspectiveCamera makeDefault position={cameraPosition}></T.PerspectiveCamera> 135 + 136 + {#await map then mapValue} 137 + {#await depthMap then depthValue} 138 + <Align> 139 + <T.Mesh 140 + rotation.x={rotationY.current * rotationScale} 141 + rotation.y={rotationX.current * rotationScale} 142 + scale.x={mapValue.image.width / mapValue.image.height} 143 + > 144 + <T is={geometry} /> 145 + <T 146 + is={material} 147 + uniforms={{ 148 + depthMap: { value: depthValue }, 149 + uTexture: { value: mapValue }, 150 + mouse: { value: rotation } 151 + }} 152 + /> 153 + </T.Mesh> 154 + </Align> 155 + {/await} 156 + {/await}
+2
src/lib/components/depth3d/index.ts
··· 1 + export { default as Depth3D } from './Depth3D.svelte'; 2 + export { default } from './Depth3D.svelte';
+61
src/lib/components/github-corner/GithubCorner.svelte
··· 1 + <script lang="ts"> 2 + import type { HTMLAnchorAttributes } from 'svelte/elements'; 3 + 4 + type Props = HTMLAnchorAttributes; 5 + let { target = '_blank', class: className, ...restProps }: Props = $props(); 6 + </script> 7 + 8 + <a 9 + {target} 10 + class={[ 11 + 'github-corner fixed -right-1 -top-1 z-50 fill-accent-600 text-base-50 dark:fill-accent-500 dark:text-base-950', 12 + className 13 + ]} 14 + {...restProps} 15 + > 16 + <svg width="80" height="80" viewBox="0 0 250 250" aria-hidden="true"> 17 + <path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path> 18 + <path 19 + d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" 20 + fill="currentColor" 21 + style="transform-origin: 130px 106px;" 22 + class="octo-arm" 23 + ></path> 24 + <path 25 + d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" 26 + fill="currentColor" 27 + class="octo-body" 28 + ></path> 29 + </svg> 30 + <span class="sr-only">View source on GitHub</span> 31 + </a> 32 + 33 + <style> 34 + .github-corner:hover .octo-arm { 35 + animation: octocat-wave 560ms ease-in-out; 36 + } 37 + 38 + @keyframes octocat-wave { 39 + 0%, 40 + 100% { 41 + transform: rotate(0); 42 + } 43 + 20%, 44 + 60% { 45 + transform: rotate(-25deg); 46 + } 47 + 40%, 48 + 80% { 49 + transform: rotate(10deg); 50 + } 51 + } 52 + 53 + @media (max-width: 500px) { 54 + .github-corner:hover .octo-arm { 55 + animation: none; 56 + } 57 + .github-corner .octo-arm { 58 + animation: octocat-wave 560ms ease-in-out; 59 + } 60 + } 61 + </style>
+23
src/lib/components/heading/Heading.svelte
··· 1 + <script lang="ts"> 2 + import type { WithElementRef } from 'bits-ui'; 3 + import type { HTMLBaseAttributes } from 'svelte/elements'; 4 + 5 + let { 6 + ref = $bindable(null), 7 + class: className, 8 + level = 1, 9 + children, 10 + ...restProps 11 + }: WithElementRef<HTMLBaseAttributes> & { 12 + level?: 1 | 2 | 3 | 4 | 5 | 6; 13 + } = $props(); 14 + </script> 15 + 16 + <svelte:element 17 + this={'h' + level} 18 + bind:this={ref} 19 + class={['text-2xl font-semibold text-base-900 dark:text-base-50', className]} 20 + {...restProps} 21 + > 22 + {@render children?.()} 23 + </svelte:element>
+23
src/lib/components/heading/Subheading.svelte
··· 1 + <script lang="ts"> 2 + import type { WithElementRef } from 'bits-ui'; 3 + import type { HTMLBaseAttributes } from 'svelte/elements'; 4 + 5 + let { 6 + ref = $bindable(null), 7 + class: className, 8 + level = 2, 9 + children, 10 + ...restProps 11 + }: WithElementRef<HTMLBaseAttributes> & { 12 + level?: 1 | 2 | 3 | 4 | 5 | 6; 13 + } = $props(); 14 + </script> 15 + 16 + <svelte:element 17 + this={'h' + level} 18 + bind:this={ref} 19 + class={['text-base font-semibold text-base-900 dark:text-base-50 sm:text-lg', className]} 20 + {...restProps} 21 + > 22 + {@render children?.()} 23 + </svelte:element>
+4
src/lib/components/heading/index.ts
··· 1 + import Heading from './Heading.svelte'; 2 + import Subheading from './Subheading.svelte'; 3 + 4 + export { Heading, Subheading };
+25
src/lib/components/heatmap/Heatmap.svelte
··· 1 + <script lang="ts"> 2 + let colors = [ 3 + 'bg-accent-950/30', 4 + 'bg-accent-800/70', 5 + 'bg-accent-700', 6 + 'bg-accent-600', 7 + 'bg-accent-500' 8 + ]; 9 + 10 + const { 11 + data 12 + }: { 13 + data: (0 | 1 | 2 | 3 | 4)[][]; 14 + } = $props(); 15 + </script> 16 + 17 + <div class="flex max-w-full gap-0.5 overflow-scroll sm:gap-1"> 18 + {#each data as week} 19 + <div class="flex w-full flex-col gap-0.5 sm:gap-1"> 20 + {#each week as day} 21 + <div class="size-2 rounded-sm sm:size-3 {colors[day]}"></div> 22 + {/each} 23 + </div> 24 + {/each} 25 + </div>
+59
src/lib/components/input/Input.svelte
··· 1 + <script lang="ts" module> 2 + import type { WithElementRef } from 'bits-ui'; 3 + import { type VariantProps, tv } from 'tailwind-variants'; 4 + 5 + import type { HTMLInputAttributes, HTMLInputTypeAttribute } from 'svelte/elements'; 6 + 7 + export const inputVariants = tv({ 8 + base: 'focus:ring-2 ring-1 ring-inset border-0 focus:transition-transform rounded-2xl text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed duration-300 active:duration-100', 9 + variants: { 10 + variant: { 11 + primary: 12 + 'focus:ring-accent-500 dark:focus:ring-accent-500 ring-accent-500/30 dark:ring-accent-500/20 bg-accent-400/5 dark:bg-accent-600/5 text-accent-700 dark:text-accent-400 placeholder:text-accent-700/50 dark:placeholder:text-accent-400/50', 13 + secondary: 14 + 'focus:ring-base-800 dark:focus:ring-base-200 bg-base-100/50 dark:bg-base-900/50 text-base-900 dark:text-base-50 ring-base-200 dark:ring-base-800 placeholder:text-base-900/50 dark:placeholder:text-base-50/50' 15 + }, 16 + sizeVariant: { 17 + default: 'px-3 py-1.5', 18 + sm: 'px-3 text-xs py-1.5 font-base', 19 + lg: 'px-4 text-lg py-2 font-semibold' 20 + } 21 + }, 22 + defaultVariants: { 23 + variant: 'primary', 24 + sizeVariant: 'default' 25 + } 26 + }); 27 + 28 + export type InputVariant = VariantProps<typeof inputVariants>['variant']; 29 + export type InputSize = VariantProps<typeof inputVariants>['sizeVariant']; 30 + 31 + type InputType = Exclude<HTMLInputTypeAttribute, 'file'>; 32 + 33 + export type InputProps = WithElementRef< 34 + Omit<HTMLInputAttributes, 'type'> & { type?: InputType } 35 + > & { 36 + variant?: InputVariant; 37 + sizeVariant?: InputSize; 38 + }; 39 + </script> 40 + 41 + <script lang="ts"> 42 + let { 43 + ref = $bindable(null), 44 + value = $bindable(), 45 + type, 46 + class: className, 47 + variant = 'primary', 48 + sizeVariant = 'default', 49 + ...restProps 50 + }: InputProps = $props(); 51 + </script> 52 + 53 + <input 54 + bind:this={ref} 55 + class={[inputVariants({ variant, sizeVariant }), className]} 56 + {type} 57 + bind:value 58 + {...restProps} 59 + />
+16
src/lib/components/input/index.ts
··· 1 + import Root, { 2 + type InputProps, 3 + type InputSize, 4 + type InputVariant, 5 + inputVariants 6 + } from './Input.svelte'; 7 + 8 + export { 9 + Root, 10 + type InputProps as Props, 11 + Root as Input, 12 + inputVariants, 13 + type InputProps, 14 + type InputSize, 15 + type InputVariant 16 + };
+18
src/lib/components/label/Label.svelte
··· 1 + <script lang="ts"> 2 + import { Label as LabelPrimitive } from 'bits-ui'; 3 + 4 + let { 5 + ref = $bindable(null), 6 + class: className, 7 + ...restProps 8 + }: LabelPrimitive.RootProps = $props(); 9 + </script> 10 + 11 + <LabelPrimitive.Root 12 + bind:ref 13 + class={[ 14 + 'text-sm font-medium leading-none text-base-900 peer-disabled:cursor-not-allowed peer-disabled:opacity-70 dark:text-base-50', 15 + className 16 + ]} 17 + {...restProps} 18 + />
+7
src/lib/components/label/index.ts
··· 1 + import Root from './Label.svelte'; 2 + 3 + export { 4 + Root, 5 + // 6 + Root as Label 7 + };
+62
src/lib/components/navbar/Navbar.svelte
··· 1 + <script lang="ts"> 2 + import type { WithElementRef } from 'bits-ui'; 3 + import type { HTMLAttributes } from 'svelte/elements'; 4 + 5 + const { 6 + class: className, 7 + children, 8 + hasSidebar = false, 9 + ...restProps 10 + }: WithElementRef<HTMLAttributes<HTMLDivElement>> & { hasSidebar?: boolean } = $props(); 11 + </script> 12 + 13 + <div 14 + class={[ 15 + 'header z-3 fixed left-0 right-0 top-0 z-50 flex h-16 items-center justify-between p-2', 16 + hasSidebar ? 'lg:left-72 xl:left-80' : '', 17 + className 18 + ]} 19 + {...restProps} 20 + > 21 + {@render children?.()} 22 + <div 23 + class="backdrop pointer-events-none absolute inset-0 -z-10 bg-gradient-to-b from-base-50/90 via-base-50/0 backdrop-blur-md dark:from-base-950/90 dark:via-base-950/0" 24 + ></div> 25 + 26 + <div 27 + class="backdrop-edge pointer-events-none absolute bottom-0 left-0 right-0 -z-10 translate-y-full bg-base-900/10 backdrop-blur dark:bg-base-500/10" 28 + ></div> 29 + </div> 30 + 31 + <style> 32 + /** better frosted glass effect adopted from https://www.joshwcomeau.com/css/backdrop-filter/ */ 33 + .header { 34 + --thickness: 1px; 35 + } 36 + 37 + @supports (mask-image: none) or (-webkit-mask-image: none) { 38 + .backdrop { 39 + height: 200%; 40 + -webkit-mask-image: linear-gradient(to bottom, black 0% 50%, transparent 50% 100%); 41 + mask-image: linear-gradient(to bottom, black 0% 50%, transparent 50% 100%); 42 + } 43 + .backdrop-edge { 44 + height: 100%; 45 + inset: 0; 46 + -webkit-mask-image: linear-gradient( 47 + to bottom, 48 + black 0, 49 + black var(--thickness), 50 + transparent var(--thickness) 51 + ); 52 + mask-image: linear-gradient( 53 + to bottom, 54 + black 0, 55 + black var(--thickness), 56 + transparent var(--thickness) 57 + ); 58 + 59 + filter: brightness(1.5); 60 + } 61 + } 62 + </style>
+22
src/lib/components/phone/Phone.svelte
··· 1 + <script lang="ts"> 2 + const { children } = $props(); 3 + </script> 4 + 5 + <div class="relative mx-auto h-[712px] w-[350px] max-w-full rounded-[60px] bg-accent-500"> 6 + <div class="absolute -left-0.5 top-20 h-8 w-3 rounded-sm bg-accent-500"></div> 7 + <div class="absolute -left-[3px] top-[140px] h-14 w-3 rounded-sm bg-accent-500"></div> 8 + <div class="absolute -left-[3px] top-[210px] h-14 w-3 rounded-sm bg-accent-500"></div> 9 + <div class="absolute -right-[3px] top-[180px] h-20 w-3 rounded-sm bg-accent-500"></div> 10 + 11 + <div class="absolute top-[18px] z-10 flex w-full justify-center"> 12 + <div class="h-7 w-24 rounded-full bg-black"></div> 13 + </div> 14 + 15 + <div class="absolute -right-[3px] top-[180px] h-20 w-3 rounded-sm bg-accent-500"></div> 16 + 17 + <div class="absolute inset-0 h-full w-full p-3"> 18 + <div class="relative h-full w-full overflow-hidden rounded-[50px] bg-accent-200"> 19 + {@render children?.()} 20 + </div> 21 + </div> 22 + </div>
+57
src/lib/components/piechart/PieChart.svelte
··· 1 + <script lang="ts"> 2 + import { PieChart, Tooltip } from 'layerchart'; 3 + 4 + let languages: { name: string; size: number }[] = [ 5 + { 6 + name: 'Svelte', 7 + size: 40 8 + }, 9 + { 10 + name: 'TypeScript', 11 + size: 30 12 + }, 13 + { 14 + name: 'HTML', 15 + size: 20 16 + }, 17 + { 18 + name: 'JavaScript', 19 + size: 10 20 + } 21 + ]; 22 + </script> 23 + 24 + <div class="h-80 w-full gap-2 overflow-auto"> 25 + <PieChart 26 + data={languages} 27 + key="name" 28 + value="size" 29 + innerRadius={-20} 30 + cornerRadius={16} 31 + padAngle={0.025} 32 + series={[ 33 + { key: 0, color: 'hsl(var(--accent-800))' }, 34 + { key: 1, color: 'hsl(var(--accent-600))' }, 35 + { key: 2, color: 'hsl(var(--accent-400))' }, 36 + { key: 3, color: 'hsl(var(--accent-200))' } 37 + ]} 38 + > 39 + <div slot="tooltip"> 40 + <Tooltip.Root 41 + let:data 42 + class="rounded-2xl border border-base-300 bg-base-200/80 py-2 backdrop-blur-sm dark:border-base-800 dark:bg-base-900/80" 43 + > 44 + <Tooltip.Header class="border-b-0 text-xs font-medium text-accent-700 dark:text-accent-600" 45 + >{data?.name}</Tooltip.Header 46 + > 47 + <Tooltip.List> 48 + <Tooltip.Item 49 + label="" 50 + value={data?.size + ' %'} 51 + class="flex gap-2 font-bold text-accent-600 dark:text-accent-500" 52 + /> 53 + </Tooltip.List> 54 + </Tooltip.Root> 55 + </div> 56 + </PieChart> 57 + </div>
+54
src/lib/components/progress/Progress.svelte
··· 1 + <script lang="ts"> 2 + import { Progress as ProgressPrimitive, type WithoutChildrenOrChild } from 'bits-ui'; 3 + 4 + import type { HTMLAttributes } from 'svelte/elements'; 5 + import { Progress } from 'bits-ui'; 6 + 7 + let { 8 + ref = $bindable(null), 9 + progress = $bindable(0), 10 + value = $bindable(0), 11 + max = $bindable(100), 12 + 13 + class: className, 14 + backgroundClass, 15 + progressClass, 16 + ...restProps 17 + }: WithoutChildrenOrChild<ProgressPrimitive.RootProps> & { 18 + progress?: number; 19 + 20 + backgroundClass?: string; 21 + 22 + value?: number; 23 + max?: number; 24 + 25 + progressClass?: string; 26 + } = $props(); 27 + </script> 28 + 29 + <ProgressPrimitive.Root 30 + bind:ref 31 + class={[ 32 + 'relative h-2 w-full overflow-hidden rounded-2xl bg-base-100 dark:bg-base-900', 33 + className 34 + ]} 35 + {value} 36 + {max} 37 + {...restProps} 38 + > 39 + <div 40 + class={[ 41 + 'absolute h-full w-full rounded-2xl border border-base-300 dark:border-base-800', 42 + backgroundClass 43 + ]} 44 + ></div> 45 + 46 + <div 47 + class={[ 48 + 'absolute h-full w-full rounded-2xl border-accent-600/50 bg-accent-500/50 transition-all duration-300 ease-in-out dark:border-accent-600/50 dark:bg-accent-900/70', 49 + progress > 0 ? 'border' : '', 50 + progressClass 51 + ]} 52 + style="width: {Math.min(progress, max)}%" 53 + ></div> 54 + </ProgressPrimitive.Root>
+1
src/lib/components/progress/index.ts
··· 1 + export { default as Progress } from './Progress.svelte';
+19
src/lib/components/pulse-loader/PulseLoader.svelte
··· 1 + <script lang="ts"> 2 + import type { WithElementRef, WithoutChildrenOrChild } from 'bits-ui'; 3 + import type { HTMLAttributes } from 'svelte/elements'; 4 + 5 + let { 6 + ref = $bindable(null), 7 + 8 + class: className, 9 + ...restProps 10 + }: WithElementRef<WithoutChildrenOrChild<HTMLAttributes<HTMLDivElement>>> = $props(); 11 + </script> 12 + 13 + <div class={['relative inline-flex size-3', className]} {...restProps} bind:this={ref}> 14 + <div class="-z-10 h-full w-full rounded-full border border-accent-600/40 bg-accent-600/40"></div> 15 + <div class="absolute inset-0 h-full w-full animate-ping rounded-full bg-accent-500/50"></div> 16 + <div 17 + class="absolute inset-0 z-10 h-full w-full animate-pulse rounded-full border border-accent-500/50 bg-accent-500/50" 18 + ></div> 19 + </div>
+1
src/lib/components/pulse-loader/index.ts
··· 1 + export { default as PulseLoader } from './PulseLoader.svelte';
+44
src/lib/components/sidebar/Sidebar.svelte
··· 1 + <script lang="ts"> 2 + import type { WithElementRef } from 'bits-ui'; 3 + import type { HTMLAttributes } from 'svelte/elements'; 4 + 5 + const { 6 + class: className, 7 + children, 8 + ...restProps 9 + }: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props(); 10 + </script> 11 + 12 + <div 13 + popover="auto" 14 + id="mobile-menu" 15 + class="mobileMenuPopover inset-auto left-0 top-0 block h-[100dvh] w-72 border-r border-base-200 bg-base-50 shadow-lg dark:border-base-300/10 dark:bg-base-950" 16 + > 17 + {@render children?.()} 18 + </div> 19 + 20 + <div 21 + class="fixed bottom-0 left-0 top-0 z-40 h-full -translate-x-72 overflow-y-auto border-r border-base-200 bg-base-50 dark:border-base-300/10 dark:bg-base-950 lg:w-72 lg:translate-x-0 xl:w-80" 22 + > 23 + {@render children?.()} 24 + </div> 25 + 26 + <style> 27 + .mobileMenuPopover { 28 + /* Closed state transformed off the screen */ 29 + transform: translateX(-110%); 30 + transition: 31 + transform 0.1s, 32 + overlay 0.1s ease-out; 33 + 34 + /* Styles while the menu is open */ 35 + &:popover-open { 36 + transform: translateX(0); 37 + } 38 + 39 + /* Backdrop that overlays other content */ 40 + &::backdrop { 41 + background-color: rgba(0, 0, 0, 0.5); 42 + } 43 + } 44 + </style>
+92
src/lib/components/star-rating/StarRating.svelte
··· 1 + <script lang="ts"> 2 + import type { WithElementRef, WithoutChildrenOrChild } from 'bits-ui'; 3 + import type { HTMLAttributes } from 'svelte/elements'; 4 + 5 + let { 6 + rating = $bindable(), 7 + size = 'size-8', 8 + changeable = true, 9 + class: className, 10 + ref = $bindable(null), 11 + strokeWidth = 0.8, 12 + ...restProps 13 + }: WithElementRef<WithoutChildrenOrChild<HTMLAttributes<HTMLDivElement>>> & { 14 + rating: number; 15 + size?: string; 16 + changeable?: boolean; 17 + 18 + strokeWidth?: number; 19 + } = $props(); 20 + 21 + let hoverRating = $state(rating); 22 + 23 + $effect(() => { 24 + hoverRating = rating; 25 + }); 26 + </script> 27 + 28 + <div class={['flex items-center', className]} {...restProps} bind:this={ref}> 29 + {#if changeable} 30 + {#each Array.from({ length: 5 }).map((_, i) => i + 1) as i} 31 + <button 32 + class="group rounded-xl focus-visible:outline focus-visible:outline-2 focus-visible:outline-base-900 dark:focus-visible:outline-base-100" 33 + onclick={() => (rating = i)} 34 + onfocus={() => (hoverRating = i)} 35 + onblur={() => (hoverRating = rating)} 36 + onmouseenter={() => (hoverRating = i)} 37 + onmouseleave={() => (hoverRating = rating)} 38 + > 39 + <svg 40 + class={[ 41 + size, 42 + 'shrink-0', 43 + i > rating && 44 + i > hoverRating && 45 + 'stroke-base-400 text-base-100 dark:stroke-base-700/70 dark:text-base-900', 46 + i <= rating && 47 + i <= hoverRating && 48 + 'stroke-accent-600 text-accent-400 dark:stroke-accent-500/80 dark:text-accent-500/40', 49 + 50 + ((i > rating && i <= hoverRating) || (i > hoverRating && i <= rating)) && 51 + 'stroke-accent-600/50 text-accent-400/50 dark:stroke-accent-500/40 dark:text-accent-500/20' 52 + ]} 53 + viewBox="0 0 24 24" 54 + fill="currentColor" 55 + aria-hidden="true" 56 + stroke-width={strokeWidth} 57 + data-slot="icon" 58 + > 59 + <path 60 + fill-rule="evenodd" 61 + d="M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.006 5.404.434c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.434 2.082-5.005Z" 62 + clip-rule="evenodd" 63 + /> 64 + </svg> 65 + 66 + <span class="sr-only">rate {i} stars</span> 67 + </button> 68 + {/each} 69 + {:else} 70 + {#each Array.from({ length: 5 }).map((_, i) => i + 1) as i} 71 + <svg 72 + class={[ 73 + size, 74 + 'shrink-0 stroke-base-400 text-base-100 dark:stroke-base-700 dark:text-base-800', 75 + i <= rating && 76 + 'stroke-accent-600 text-accent-400 dark:stroke-accent-500/80 dark:text-accent-500/50' 77 + ]} 78 + viewBox="0 0 24 24" 79 + fill="currentColor" 80 + aria-hidden="true" 81 + stroke-width={strokeWidth} 82 + data-slot="icon" 83 + > 84 + <path 85 + fill-rule="evenodd" 86 + d="M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.006 5.404.434c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.434 2.082-5.005Z" 87 + clip-rule="evenodd" 88 + /> 89 + </svg> 90 + {/each} 91 + {/if} 92 + </div>
+7
src/lib/components/star-rating/index.ts
··· 1 + import Root from './StarRating.svelte'; 2 + 3 + export { 4 + Root, 5 + // 6 + Root as StarRating 7 + };
+19
src/lib/components/text/Text.svelte
··· 1 + <script lang="ts"> 2 + import type { WithElementRef } from 'bits-ui'; 3 + import type { HTMLAttributes } from 'svelte/elements'; 4 + 5 + let { 6 + ref = $bindable(null), 7 + class: className, 8 + children, 9 + ...restProps 10 + }: WithElementRef<HTMLAttributes<HTMLParagraphElement>> = $props(); 11 + </script> 12 + 13 + <p 14 + bind:this={ref} 15 + class={['text-sm font-medium text-base-700 dark:text-base-200', className]} 16 + {...restProps} 17 + > 18 + {@render children?.()} 19 + </p>
+3
src/lib/components/text/index.ts
··· 1 + import Text from './Text.svelte'; 2 + 3 + export { Text };
+28
src/lib/components/textarea/index.ts
··· 1 + import Root from "./textarea.svelte"; 2 + 3 + type FormTextareaEvent<T extends Event = Event> = T & { 4 + currentTarget: EventTarget & HTMLTextAreaElement; 5 + }; 6 + 7 + type TextareaEvents = { 8 + blur: FormTextareaEvent<FocusEvent>; 9 + change: FormTextareaEvent<Event>; 10 + click: FormTextareaEvent<MouseEvent>; 11 + focus: FormTextareaEvent<FocusEvent>; 12 + keydown: FormTextareaEvent<KeyboardEvent>; 13 + keypress: FormTextareaEvent<KeyboardEvent>; 14 + keyup: FormTextareaEvent<KeyboardEvent>; 15 + mouseover: FormTextareaEvent<MouseEvent>; 16 + mouseenter: FormTextareaEvent<MouseEvent>; 17 + mouseleave: FormTextareaEvent<MouseEvent>; 18 + paste: FormTextareaEvent<ClipboardEvent>; 19 + input: FormTextareaEvent<InputEvent>; 20 + }; 21 + 22 + export { 23 + Root, 24 + // 25 + Root as Textarea, 26 + type TextareaEvents, 27 + type FormTextareaEvent, 28 + };
+56
src/lib/components/textarea/textarea.svelte
··· 1 + <script lang="ts" module> 2 + import type { WithElementRef, WithoutChildren } from 'bits-ui'; 3 + import { type VariantProps, tv } from 'tailwind-variants'; 4 + 5 + import type { HTMLTextareaAttributes } from 'svelte/elements'; 6 + 7 + export const inputVariants = tv({ 8 + base: 'focus:ring-2 ring-1 resize-none ring-inset border-0 focus:transition-transform rounded-2xl text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed duration-300 active:duration-100', 9 + variants: { 10 + variant: { 11 + primary: 12 + 'focus:ring-accent-500 dark:focus:ring-accent-500 ring-accent-500/30 dark:ring-accent-500/20 bg-accent-400/5 dark:bg-accent-600/5 text-accent-700 dark:text-accent-400 placeholder:text-accent-700/70 dark:placeholder:text-accent-400/70', 13 + secondary: 14 + 'focus:ring-base-800 dark:focus:ring-base-200 bg-base-100/50 dark:bg-base-900/50 text-base-900 dark:text-base-50 ring-base-200 dark:ring-base-800' 15 + }, 16 + sizeVariant: { 17 + default: 'px-3 py-1.5 min-h-[80px]', 18 + sm: 'px-3 text-xs py-1.5 font-base min-h-[60px]', 19 + lg: 'px-4 text-lg py-2 font-semibold min-h-[100px]' 20 + } 21 + }, 22 + defaultVariants: { 23 + variant: 'primary', 24 + sizeVariant: 'default' 25 + } 26 + }); 27 + 28 + export type InputVariant = VariantProps<typeof inputVariants>['variant']; 29 + export type InputSize = VariantProps<typeof inputVariants>['sizeVariant']; 30 + 31 + export type InputProps = WithElementRef<HTMLTextareaAttributes> & { 32 + variant?: InputVariant; 33 + sizeVariant?: InputSize; 34 + }; 35 + </script> 36 + 37 + <script lang="ts"> 38 + let { 39 + ref = $bindable(null), 40 + value = $bindable(), 41 + class: className, 42 + variant = 'primary', 43 + sizeVariant = 'default', 44 + ...restProps 45 + }: WithoutChildren<WithElementRef<HTMLTextareaAttributes>> & { 46 + variant?: InputVariant; 47 + sizeVariant?: InputSize; 48 + } = $props(); 49 + </script> 50 + 51 + <textarea 52 + bind:this={ref} 53 + class={[inputVariants({ variant, sizeVariant }), className]} 54 + bind:value 55 + {...restProps} 56 + ></textarea>
+102
src/lib/components/theme-toggle/ThemeToggle.svelte
··· 1 + <script lang="ts" module> 2 + export const theme = $state({ 3 + dark: false 4 + }); 5 + </script> 6 + 7 + <script lang="ts"> 8 + import { onMount } from 'svelte'; 9 + import Button, { type ButtonProps } from '../button/Button.svelte'; 10 + 11 + onMount(() => { 12 + // load from local storage 13 + const savedDarkMode = localStorage.getItem('darkMode'); 14 + if (savedDarkMode) { 15 + theme.dark = JSON.parse(savedDarkMode); 16 + } else { 17 + // prefers color scheme? 18 + theme.dark = window.matchMedia('(prefers-color-scheme: dark)').matches; 19 + } 20 + 21 + // remove local storage 22 + // localStorage.removeItem("darkMode"); 23 + setTheme(theme.dark); 24 + 25 + // recommended method for newer browsers: specify event-type as first argument 26 + window 27 + .matchMedia('(prefers-color-scheme: dark)') 28 + .addEventListener('change', (e) => e.matches && toggleTheme()); 29 + 30 + window 31 + .matchMedia('(prefers-color-scheme: light)') 32 + .addEventListener('change', (e) => e.matches && toggleTheme()); 33 + }); 34 + 35 + function setTheme(dark: Boolean) { 36 + var root = document.getElementsByTagName('html')[0]; 37 + 38 + if (dark) { 39 + root.classList.add('dark'); 40 + } else { 41 + root.classList.remove('dark'); 42 + } 43 + } 44 + 45 + function toggleTheme() { 46 + theme.dark = !theme.dark; 47 + // save to local storage 48 + localStorage.setItem('darkMode', JSON.stringify(theme.dark)); 49 + setTheme(theme.dark); 50 + } 51 + 52 + const { class: className, ...restProps }: ButtonProps = $props(); 53 + </script> 54 + 55 + <Button 56 + variant="link" 57 + onclick={toggleTheme} 58 + class={[ 59 + 'theme-toggle flex items-center justify-center rounded-lg focus-visible:outline focus-visible:outline-2 focus-visible:outline-base-900 dark:focus-visible:outline-base-100', 60 + className 61 + ]} 62 + {...restProps} 63 + > 64 + <svg 65 + xmlns="http://www.w3.org/2000/svg" 66 + fill="none" 67 + viewBox="0 0 24 24" 68 + stroke-width="1.5" 69 + stroke="currentColor" 70 + class="block !size-6 transition-colors duration-500 dark:hidden" 71 + > 72 + <path 73 + stroke-linecap="round" 74 + stroke-linejoin="round" 75 + d="M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z" 76 + /> 77 + </svg> 78 + <svg 79 + xmlns="http://www.w3.org/2000/svg" 80 + fill="none" 81 + viewBox="0 0 24 24" 82 + stroke-width="1.5" 83 + stroke="currentColor" 84 + class="hidden !size-6 transition-colors duration-500 dark:block dark:text-white" 85 + > 86 + <path 87 + stroke-linecap="round" 88 + stroke-linejoin="round" 89 + d="M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z" 90 + /> 91 + </svg> 92 + 93 + <span class="sr-only">Toggle theme</span> 94 + </Button> 95 + 96 + <noscript> 97 + <style> 98 + .theme-toggle { 99 + display: none; 100 + } 101 + </style> 102 + </noscript>
+7
src/lib/components/theme-toggle/index.ts
··· 1 + import Root from './ThemeToggle.svelte'; 2 + 3 + export { 4 + Root, 5 + // 6 + Root as ThemeToggle 7 + };
+20
src/lib/components/tooltip/index.ts
··· 1 + import { Tooltip as TooltipPrimitive } from 'bits-ui'; 2 + import Content from './tooltip-content.svelte'; 3 + import Tooltip from './tooltip.svelte'; 4 + 5 + const Root = TooltipPrimitive.Root; 6 + const Trigger = TooltipPrimitive.Trigger; 7 + const Provider = TooltipPrimitive.Provider; 8 + 9 + export { 10 + Root, 11 + Trigger, 12 + Content, 13 + Provider, 14 + // 15 + Content as TooltipContent, 16 + Trigger as TooltipTrigger, 17 + Provider as TooltipProvider, 18 + // 19 + Tooltip 20 + };
+20
src/lib/components/tooltip/tooltip-content.svelte
··· 1 + <script lang="ts"> 2 + import { Tooltip as TooltipPrimitive } from 'bits-ui'; 3 + 4 + let { 5 + ref = $bindable(null), 6 + class: className, 7 + sideOffset = 4, 8 + ...restProps 9 + }: TooltipPrimitive.ContentProps = $props(); 10 + </script> 11 + 12 + <TooltipPrimitive.Content 13 + bind:ref 14 + {sideOffset} 15 + class={[ 16 + 'animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 overflow-hidden rounded-2xl border border-base-200 bg-base-100 px-3 py-1.5 text-sm text-base-900 dark:border-base-800 dark:bg-base-900 dark:text-base-50', 17 + className 18 + ]} 19 + {...restProps} 20 + />
+63
src/lib/components/tooltip/tooltip.svelte
··· 1 + <script lang="ts"> 2 + import { Tooltip } from 'bits-ui'; 3 + import { type Snippet } from 'svelte'; 4 + import { buttonVariants, type ButtonSize, type ButtonVariant } from '../button'; 5 + import { TooltipContent } from '.'; 6 + 7 + type Props = Tooltip.RootProps & { 8 + trigger?: Snippet; 9 + 10 + triggerText?: string; 11 + triggerVariant?: ButtonVariant; 12 + triggerSize?: ButtonSize; 13 + triggerClass?: string; 14 + 15 + withContext?: boolean; 16 + 17 + triggerProps?: Tooltip.TriggerProps; 18 + }; 19 + 20 + let { 21 + open = $bindable(false), 22 + children, 23 + trigger, 24 + triggerText, 25 + triggerVariant = 'primary', 26 + triggerSize = 'default', 27 + triggerClass, 28 + 29 + withContext = false, 30 + 31 + triggerProps = {}, 32 + ...restProps 33 + }: Props = $props(); 34 + </script> 35 + 36 + {#snippet root()} 37 + <Tooltip.Root bind:open {...restProps}> 38 + {#if trigger} 39 + <Tooltip.Trigger {...triggerProps}> 40 + {@render trigger()} 41 + </Tooltip.Trigger> 42 + {:else} 43 + <Tooltip.Trigger 44 + class={[buttonVariants({ variant: triggerVariant, size: triggerSize }), triggerClass]} 45 + > 46 + {triggerText} 47 + </Tooltip.Trigger> 48 + {/if} 49 + <Tooltip.Portal> 50 + <TooltipContent sideOffset={10}> 51 + {@render children?.()} 52 + </TooltipContent> 53 + </Tooltip.Portal> 54 + </Tooltip.Root> 55 + {/snippet} 56 + 57 + {#if withContext} 58 + <Tooltip.Provider> 59 + {@render root()} 60 + </Tooltip.Provider> 61 + {:else} 62 + {@render root()} 63 + {/if}
+152
src/lib/components/video-player/FullscreenVideoPlayer.svelte
··· 1 + <script lang="ts" module> 2 + export const videoPlayer: { 3 + showing: boolean; 4 + id: string | undefined; 5 + 6 + show: (id: string) => void; 7 + hide: () => void; 8 + } = $state({ 9 + showing: false, 10 + id: undefined, 11 + 12 + show: (id: string) => { 13 + videoPlayer.id = id; 14 + videoPlayer.showing = true; 15 + }, 16 + 17 + hide: () => { 18 + videoPlayer.id = undefined; 19 + videoPlayer.showing = false; 20 + } 21 + }); 22 + </script> 23 + 24 + <script lang="ts"> 25 + import { Portal } from 'bits-ui'; 26 + import Plyr from 'plyr'; 27 + 28 + const { class: className }: { class?: string } = $props(); 29 + 30 + $effect(() => { 31 + const player = new Plyr('.js-player', { 32 + settings: ['captions', 'quality', 'loop', 'speed'], 33 + controls: [ 34 + 'play-large', 35 + 'play', 36 + 'progress', 37 + 'current-time', 38 + 'volume', 39 + 'download', 40 + 'fullscreen' 41 + ] 42 + }); 43 + 44 + // set the video player to the id 45 + if (videoPlayer.id) { 46 + player.source = { 47 + type: 'video', 48 + sources: [ 49 + { 50 + src: videoPlayer.id, 51 + type: 'video/youtube' 52 + } 53 + ] 54 + }; 55 + } 56 + 57 + // when loaded play the video and go fullscreen 58 + player.on('ready', () => { 59 + player.play(); 60 + //player.fullscreen.enter(); 61 + }); 62 + 63 + return () => { 64 + player.destroy(); 65 + }; 66 + }); 67 + 68 + let glow = 40; 69 + </script> 70 + 71 + <svelte:head> 72 + <link rel="stylesheet" href="https://cdn.plyr.io/3.7.8/plyr.css" /> 73 + </svelte:head> 74 + 75 + <svelte:window 76 + onkeydown={(e) => { 77 + if (e.key === 'Escape' && videoPlayer.showing) { 78 + videoPlayer.hide(); 79 + } 80 + }} 81 + /> 82 + 83 + {#key videoPlayer.id} 84 + {#if videoPlayer.showing && videoPlayer.id} 85 + <Portal> 86 + <div class="fixed inset-0 z-[100] flex h-[100dvh] w-screen items-center justify-center"> 87 + <button 88 + onclick={() => videoPlayer.hide()} 89 + class="absolute inset-0 cursor-default bg-white/70 backdrop-blur-sm dark:bg-black/70" 90 + > 91 + <span class="sr-only">Close</span> 92 + </button> 93 + 94 + <div 95 + class={[ 96 + 'relative mx-4 aspect-video max-h-screen w-full overflow-hidden rounded-xl border border-base-400 bg-white object-cover dark:border-white/10 dark:bg-white/5 sm:mx-20', 97 + className 98 + ]} 99 + style="filter: url(#blur); width: 100%;" 100 + > 101 + <div 102 + id="player" 103 + class="h-full w-full overflow-hidden rounded-xl object-cover font-semibold text-black dark:text-white" 104 + > 105 + <div 106 + class="js-player plyr__video-embed" 107 + id="player" 108 + data-plyr-provider="youtube" 109 + data-plyr-embed-id={videoPlayer.id} 110 + ></div> 111 + </div> 112 + </div> 113 + 114 + <button 115 + onclick={() => { 116 + videoPlayer.hide(); 117 + }} 118 + class="absolute right-2 top-2 z-20 p-2 text-base-900 backdrop-blur-sm dark:text-base-50" 119 + > 120 + <svg 121 + xmlns="http://www.w3.org/2000/svg" 122 + viewBox="0 0 24 24" 123 + fill="currentColor" 124 + class="size-6" 125 + > 126 + <path 127 + fill-rule="evenodd" 128 + d="M5.47 5.47a.75.75 0 0 1 1.06 0L12 10.94l5.47-5.47a.75.75 0 1 1 1.06 1.06L13.06 12l5.47 5.47a.75.75 0 1 1-1.06 1.06L12 13.06l-5.47 5.47a.75.75 0 0 1-1.06-1.06L10.94 12 5.47 6.53a.75.75 0 0 1 0-1.06Z" 129 + clip-rule="evenodd" 130 + /> 131 + </svg> 132 + 133 + <span class="sr-only">Close</span> 134 + </button> 135 + </div> 136 + </Portal> 137 + {/if} 138 + {/key} 139 + 140 + <svg width="0" height="0"> 141 + <filter id="blur" y="-50%" x="-50%" width="200%" height="200%"> 142 + <feGaussianBlur in="SourceGraphic" stdDeviation={glow} result="blurred" /> 143 + <feColorMatrix type="saturate" in="blurred" values="3" /> 144 + <feComposite in="SourceGraphic" operator="over" /> 145 + </filter> 146 + </svg> 147 + 148 + <style> 149 + * { 150 + --plyr-color-main: hsl(var(--accent-500)); 151 + } 152 + </style>
+81
src/lib/components/video-player/VideoPlayer.svelte
··· 1 + <script lang="ts"> 2 + import Plyr from 'plyr'; 3 + 4 + const { class: className, id }: { class?: string; id?: string } = $props(); 5 + 6 + $effect(() => { 7 + const player = new Plyr('.js-player', { 8 + settings: ['captions', 'quality', 'loop', 'speed'], 9 + controls: [ 10 + 'play-large', 11 + 'play', 12 + 'progress', 13 + 'current-time', 14 + 'volume', 15 + 'download', 16 + 'fullscreen' 17 + ] 18 + }); 19 + 20 + // set the video player to the id 21 + if (id) { 22 + player.source = { 23 + type: 'video', 24 + sources: [ 25 + { 26 + src: id, 27 + type: 'video/youtube' 28 + } 29 + ] 30 + }; 31 + } 32 + 33 + return () => { 34 + player.destroy(); 35 + }; 36 + }); 37 + 38 + let glow = 15; 39 + </script> 40 + 41 + <svelte:head> 42 + <link rel="stylesheet" href="https://cdn.plyr.io/3.7.8/plyr.css" /> 43 + </svelte:head> 44 + 45 + {#key id} 46 + {#if id} 47 + <div 48 + class={[ 49 + 'relative aspect-video w-full overflow-hidden rounded-2xl border border-base-400 bg-white object-cover dark:border-white/10 dark:bg-white/5', 50 + className 51 + ]} 52 + style="filter: url(#blur-fullscreen); width: 100%;" 53 + > 54 + <div 55 + id="player" 56 + class="h-full w-full overflow-hidden rounded-xl object-cover font-semibold text-black dark:text-white" 57 + > 58 + <div 59 + class="js-player plyr__video-embed" 60 + id="player" 61 + data-plyr-provider="youtube" 62 + data-plyr-embed-id={id} 63 + ></div> 64 + </div> 65 + </div> 66 + {/if} 67 + {/key} 68 + 69 + <svg width="0" height="0"> 70 + <filter id="blur-fullscreen" y="-50%" x="-50%" width="200%" height="200%"> 71 + <feGaussianBlur in="SourceGraphic" stdDeviation={glow} result="blurred" /> 72 + <feColorMatrix type="saturate" in="blurred" values="2" /> 73 + <feComposite in="SourceGraphic" operator="over" /> 74 + </filter> 75 + </svg> 76 + 77 + <style> 78 + * { 79 + --plyr-color-main: hsl(var(--accent-500)); 80 + } 81 + </style>