diff --git a/package.json b/package.json index a2b0a3c..0d4b735 100644 --- a/package.json +++ b/package.json @@ -20,16 +20,16 @@ "@dicebear/collection": "^9.2.2", "@dicebear/core": "^9.2.2", "@floating-ui/dom": "^1.6.12", - "@iconify/svelte": "^4.0.2", + "@iconify/svelte": "^4.2.0", "@lezer/highlight": "^1.2.1", "@polar-sh/checkout": "^0.1.6", "@polar-sh/sdk": "^0.18.0", "@rodrigodagostino/svelte-sortable-list": "^0.10.8", "@skeletonlabs/skeleton": "^2.10.3", "@skeletonlabs/tw-plugin": "^0.4.0", - "@sveltejs/adapter-node": "^5.2.9", - "@sveltejs/kit": "^2.8.5", - "@sveltejs/vite-plugin-svelte": "4.0.0-next.6", + "@sveltejs/adapter-node": "^5.2.12", + "@sveltejs/kit": "^2.16.1", + "@sveltejs/vite-plugin-svelte": "5.0.3", "@tailwindcss/forms": "^0.5.9", "@tailwindcss/typography": "^0.5.15", "@types/canvas-confetti": "^1.6.4", @@ -45,6 +45,7 @@ "@typescript-eslint/eslint-plugin": "^7.18.0", "@typescript-eslint/parser": "^7.18.0", "autoprefixer": "^10.4.20", + "base64-js": "^1.5.1", "canvas-confetti": "^1.9.3", "codemirror": "^6.0.1", "cookie": "^0.6.0", @@ -89,7 +90,7 @@ "typescript": "^5.7.2", "underscore": "^1.13.7", "undici": "^6.21.0", - "vite": "^5.4.11", + "vite": "^6.0.11", "vite-plugin-top-level-await": "^1.4.4", "vite-plugin-wasm": "^3.3.0", "vitest": "^2.1.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eef1171..31456f5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -42,8 +42,8 @@ importers: specifier: ^1.6.12 version: 1.6.12 '@iconify/svelte': - specifier: ^4.0.2 - version: 4.0.2(svelte@5.2.9) + specifier: ^4.2.0 + version: 4.2.0(svelte@5.2.9) '@lezer/highlight': specifier: ^1.2.1 version: 1.2.1 @@ -63,14 +63,14 @@ importers: specifier: ^0.4.0 version: 0.4.0(tailwindcss@3.4.15) '@sveltejs/adapter-node': - specifier: ^5.2.9 - version: 5.2.9(@sveltejs/kit@2.8.5(@sveltejs/vite-plugin-svelte@4.0.0-next.6(svelte@5.2.9)(vite@5.4.11(@types/node@20.17.8)))(svelte@5.2.9)(vite@5.4.11(@types/node@20.17.8))) + specifier: ^5.2.12 + version: 5.2.12(@sveltejs/kit@2.16.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.2.9)(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1)))(svelte@5.2.9)(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1))) '@sveltejs/kit': - specifier: ^2.8.5 - version: 2.8.5(@sveltejs/vite-plugin-svelte@4.0.0-next.6(svelte@5.2.9)(vite@5.4.11(@types/node@20.17.8)))(svelte@5.2.9)(vite@5.4.11(@types/node@20.17.8)) + specifier: ^2.16.1 + version: 2.16.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.2.9)(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1)))(svelte@5.2.9)(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1)) '@sveltejs/vite-plugin-svelte': - specifier: 4.0.0-next.6 - version: 4.0.0-next.6(svelte@5.2.9)(vite@5.4.11(@types/node@20.17.8)) + specifier: 5.0.3 + version: 5.0.3(svelte@5.2.9)(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1)) '@tailwindcss/forms': specifier: ^0.5.9 version: 0.5.9(tailwindcss@3.4.15) @@ -116,6 +116,9 @@ importers: autoprefixer: specifier: ^10.4.20 version: 10.4.20(postcss@8.4.49) + base64-js: + specifier: ^1.5.1 + version: 1.5.1 canvas-confetti: specifier: ^1.9.3 version: 1.9.3 @@ -249,17 +252,17 @@ importers: specifier: ^6.21.0 version: 6.21.0 vite: - specifier: ^5.4.11 - version: 5.4.11(@types/node@20.17.8) + specifier: ^6.0.11 + version: 6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1) vite-plugin-top-level-await: specifier: ^1.4.4 - version: 1.4.4(rollup@4.27.4)(vite@5.4.11(@types/node@20.17.8)) + version: 1.4.4(rollup@4.27.4)(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1)) vite-plugin-wasm: specifier: ^3.3.0 - version: 3.3.0(vite@5.4.11(@types/node@20.17.8)) + version: 3.3.0(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1)) vitest: specifier: ^2.1.6 - version: 2.1.6(@types/node@20.17.8)(jsdom@25.0.1) + version: 2.1.6(@types/node@20.17.8)(jiti@1.21.6)(jsdom@25.0.1)(yaml@2.6.1) ws: specifier: ^8.18.0 version: 8.18.0 @@ -573,141 +576,153 @@ packages: '@emnapi/runtime@1.3.1': resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} + '@esbuild/aix-ppc64@0.24.2': + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} + engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} + '@esbuild/android-arm64@0.24.2': + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} + engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} + '@esbuild/android-arm@0.24.2': + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} + engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} + '@esbuild/android-x64@0.24.2': + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} + engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} + '@esbuild/darwin-arm64@0.24.2': + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} + engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} + '@esbuild/darwin-x64@0.24.2': + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} + engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} + '@esbuild/freebsd-arm64@0.24.2': + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} + engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} + '@esbuild/freebsd-x64@0.24.2': + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} + engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} + '@esbuild/linux-arm64@0.24.2': + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} + engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} + '@esbuild/linux-arm@0.24.2': + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} + engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} + '@esbuild/linux-ia32@0.24.2': + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} + engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} + '@esbuild/linux-loong64@0.24.2': + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} + engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} + '@esbuild/linux-mips64el@0.24.2': + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} + engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} + '@esbuild/linux-ppc64@0.24.2': + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} + engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} + '@esbuild/linux-riscv64@0.24.2': + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} + engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} + '@esbuild/linux-s390x@0.24.2': + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} + engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} + '@esbuild/linux-x64@0.24.2': + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} + engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} + '@esbuild/netbsd-arm64@0.24.2': + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.24.2': + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} + engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} + '@esbuild/openbsd-arm64@0.24.2': + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.24.2': + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} + engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} + '@esbuild/sunos-x64@0.24.2': + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} + engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} + '@esbuild/win32-arm64@0.24.2': + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} + engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} + '@esbuild/win32-ia32@0.24.2': + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} + engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} + '@esbuild/win32-x64@0.24.2': + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} + engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -751,8 +766,8 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead - '@iconify/svelte@4.0.2': - resolution: {integrity: sha512-6BSrU85FzGfhQD3bTXpnkCCvBAglEt8T9QednVnXAYm4C+d3464y+pYMzhQNJm5mPId2cuiw+2wXlDflXllHDw==} + '@iconify/svelte@4.2.0': + resolution: {integrity: sha512-fEl0T7SAPonK7xk6xUlRPDmFDZVDe2Z7ZstlqeDS/sS8ve2uyU+Qa8rTWbIqzZJlRvONkK5kVXiUf9nIc+6OOQ==} peerDependencies: svelte: '>4.0.0' @@ -993,8 +1008,8 @@ packages: rollup: optional: true - '@rollup/plugin-node-resolve@15.3.0': - resolution: {integrity: sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==} + '@rollup/plugin-node-resolve@16.0.0': + resolution: {integrity: sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.78.0||^3.0.0||^4.0.0 @@ -1150,34 +1165,34 @@ packages: '@stablelib/base64@1.0.1': resolution: {integrity: sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==} - '@sveltejs/adapter-node@5.2.9': - resolution: {integrity: sha512-51euNrx0AcaTu8//wDfVh7xmqQSVgU52rfinE/MwvGkJa4nHPJMHmzv6+OIpmxg7gZaF6+5NVlxnieCzxLD59g==} + '@sveltejs/adapter-node@5.2.12': + resolution: {integrity: sha512-0bp4Yb3jKIEcZWVcJC/L1xXp9zzJS4hDwfb4VITAkfT4OVdkspSHsx7YhqJDbb2hgLl6R9Vs7VQR+fqIVOxPUQ==} peerDependencies: '@sveltejs/kit': ^2.4.0 - '@sveltejs/kit@2.8.5': - resolution: {integrity: sha512-5ry1jPd4r9knsphDK2eTYUFPhFZMqF0PHFfa8MdMQCqWaKwLSXdFMU/Vevih1I7C1/VNB5MvTuFl1kXu5vx8UA==} + '@sveltejs/kit@2.16.1': + resolution: {integrity: sha512-2pF5sgGJx9brYZ/9nNDYnh5KX0JguPF14dnvvtf/MqrvlWrDj/e7Rk3LBJPecFLLK1GRs6ZniD24gFPqZm/NFw==} engines: {node: '>=18.13'} hasBin: true peerDependencies: - '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 + '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 svelte: ^4.0.0 || ^5.0.0-next.0 - vite: ^5.0.3 + vite: ^5.0.3 || ^6.0.0 - '@sveltejs/vite-plugin-svelte-inspector@3.0.1': - resolution: {integrity: sha512-2CKypmj1sM4GE7HjllT7UKmo4Q6L5xFRd7VMGEWhYnZ+wc6AUVU01IBd7yUi6WnFndEwWoMNOd6e8UjoN0nbvQ==} + '@sveltejs/vite-plugin-svelte-inspector@4.0.1': + resolution: {integrity: sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==} engines: {node: ^18.0.0 || ^20.0.0 || >=22} peerDependencies: - '@sveltejs/vite-plugin-svelte': ^4.0.0-next.0||^4.0.0 - svelte: ^5.0.0-next.96 || ^5.0.0 - vite: ^5.0.0 + '@sveltejs/vite-plugin-svelte': ^5.0.0 + svelte: ^5.0.0 + vite: ^6.0.0 - '@sveltejs/vite-plugin-svelte@4.0.0-next.6': - resolution: {integrity: sha512-7+bEFN5F9pthG6nOEHNz9yioHxNXK6yl+0GnTy9WOfxN/SvPykkH/Hs6MqTGjo47a9G2q3QXQnzuxG5WXNX4Tg==} + '@sveltejs/vite-plugin-svelte@5.0.3': + resolution: {integrity: sha512-MCFS6CrQDu1yGwspm4qtli0e63vaPCehf6V7pIMP15AsWgMKrqDGCPFF/0kn4SP0ii4aySu4Pa62+fIRGFMjgw==} engines: {node: ^18.0.0 || ^20.0.0 || >=22} peerDependencies: - svelte: ^5.0.0-next.96 || ^5.0.0 - vite: ^5.0.0 + svelte: ^5.0.0 + vite: ^6.0.0 '@swc/core-darwin-arm64@1.9.3': resolution: {integrity: sha512-hGfl/KTic/QY4tB9DkTbNuxy5cV4IeejpPD4zo+Lzt4iLlDWIeANL4Fkg67FiVceNJboqg48CUX+APhDHO5G1w==} @@ -1703,6 +1718,15 @@ packages: supports-color: optional: true + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} @@ -1815,9 +1839,9 @@ packages: es6-promise@3.3.1: resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} + esbuild@0.24.2: + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} + engines: {node: '>=18'} hasBin: true escalade@3.2.0: @@ -1875,6 +1899,9 @@ packages: esm-env@1.1.4: resolution: {integrity: sha512-oO82nKPHKkzIj/hbtuDYy/JHqBHFlMIW36SDiPCVsj87ntDLcWN+sJ1erdVryd4NxODacFTsdrIE3b7IamqbOg==} + esm-env@1.2.2: + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} + espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2017,16 +2044,10 @@ packages: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} - globalyzer@0.1.0: - resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} - globrex@0.1.2: - resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -2273,6 +2294,9 @@ packages: magic-string@0.30.14: resolution: {integrity: sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==} + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + markdown-it@14.1.0: resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} hasBin: true @@ -2984,9 +3008,6 @@ packages: timeago.js@4.0.2: resolution: {integrity: sha512-a7wPxPdVlQL7lqvitHGGRsofhdwtkoSXPGATFuSOA2i1ZNQEPLrGnj68vOp2sOJTCFAQVXPeNMX/GctBaO9L2w==} - tiny-glob@0.2.9: - resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} - tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -3152,22 +3173,27 @@ packages: peerDependencies: vite: ^2 || ^3 || ^4 || ^5 - vite@5.4.11: - resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} - engines: {node: ^18.0.0 || >=20.0.0} + vite@6.0.11: + resolution: {integrity: sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' less: '*' lightningcss: ^1.21.0 sass: '*' sass-embedded: '*' stylus: '*' sugarss: '*' - terser: ^5.4.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 peerDependenciesMeta: '@types/node': optional: true + jiti: + optional: true less: optional: true lightningcss: @@ -3182,11 +3208,15 @@ packages: optional: true terser: optional: true + tsx: + optional: true + yaml: + optional: true - vitefu@0.2.5: - resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} + vitefu@1.0.5: + resolution: {integrity: sha512-h4Vflt9gxODPFNGPwp4zAMZRpZR7eslzwH2c5hn5kNZ5rhnKyRJ50U+yGCdc2IRaBs8O4haIgLNGrV5CrpMsCA==} peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 peerDependenciesMeta: vite: optional: true @@ -3653,73 +3683,79 @@ snapshots: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.21.5': + '@esbuild/aix-ppc64@0.24.2': + optional: true + + '@esbuild/android-arm64@0.24.2': + optional: true + + '@esbuild/android-arm@0.24.2': optional: true - '@esbuild/android-arm64@0.21.5': + '@esbuild/android-x64@0.24.2': optional: true - '@esbuild/android-arm@0.21.5': + '@esbuild/darwin-arm64@0.24.2': optional: true - '@esbuild/android-x64@0.21.5': + '@esbuild/darwin-x64@0.24.2': optional: true - '@esbuild/darwin-arm64@0.21.5': + '@esbuild/freebsd-arm64@0.24.2': optional: true - '@esbuild/darwin-x64@0.21.5': + '@esbuild/freebsd-x64@0.24.2': optional: true - '@esbuild/freebsd-arm64@0.21.5': + '@esbuild/linux-arm64@0.24.2': optional: true - '@esbuild/freebsd-x64@0.21.5': + '@esbuild/linux-arm@0.24.2': optional: true - '@esbuild/linux-arm64@0.21.5': + '@esbuild/linux-ia32@0.24.2': optional: true - '@esbuild/linux-arm@0.21.5': + '@esbuild/linux-loong64@0.24.2': optional: true - '@esbuild/linux-ia32@0.21.5': + '@esbuild/linux-mips64el@0.24.2': optional: true - '@esbuild/linux-loong64@0.21.5': + '@esbuild/linux-ppc64@0.24.2': optional: true - '@esbuild/linux-mips64el@0.21.5': + '@esbuild/linux-riscv64@0.24.2': optional: true - '@esbuild/linux-ppc64@0.21.5': + '@esbuild/linux-s390x@0.24.2': optional: true - '@esbuild/linux-riscv64@0.21.5': + '@esbuild/linux-x64@0.24.2': optional: true - '@esbuild/linux-s390x@0.21.5': + '@esbuild/netbsd-arm64@0.24.2': optional: true - '@esbuild/linux-x64@0.21.5': + '@esbuild/netbsd-x64@0.24.2': optional: true - '@esbuild/netbsd-x64@0.21.5': + '@esbuild/openbsd-arm64@0.24.2': optional: true - '@esbuild/openbsd-x64@0.21.5': + '@esbuild/openbsd-x64@0.24.2': optional: true - '@esbuild/sunos-x64@0.21.5': + '@esbuild/sunos-x64@0.24.2': optional: true - '@esbuild/win32-arm64@0.21.5': + '@esbuild/win32-arm64@0.24.2': optional: true - '@esbuild/win32-ia32@0.21.5': + '@esbuild/win32-ia32@0.24.2': optional: true - '@esbuild/win32-x64@0.21.5': + '@esbuild/win32-x64@0.24.2': optional: true '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': @@ -3768,7 +3804,7 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} - '@iconify/svelte@4.0.2(svelte@5.2.9)': + '@iconify/svelte@4.2.0(svelte@5.2.9)': dependencies: '@iconify/types': 2.0.0 svelte: 5.2.9 @@ -3985,7 +4021,7 @@ snapshots: optionalDependencies: rollup: 4.27.4 - '@rollup/plugin-node-resolve@15.3.0(rollup@4.27.4)': + '@rollup/plugin-node-resolve@16.0.0(rollup@4.27.4)': dependencies: '@rollup/pluginutils': 5.1.3(rollup@4.27.4) '@types/resolve': 1.20.2 @@ -4108,21 +4144,21 @@ snapshots: '@stablelib/base64@1.0.1': {} - '@sveltejs/adapter-node@5.2.9(@sveltejs/kit@2.8.5(@sveltejs/vite-plugin-svelte@4.0.0-next.6(svelte@5.2.9)(vite@5.4.11(@types/node@20.17.8)))(svelte@5.2.9)(vite@5.4.11(@types/node@20.17.8)))': + '@sveltejs/adapter-node@5.2.12(@sveltejs/kit@2.16.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.2.9)(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1)))(svelte@5.2.9)(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1)))': dependencies: '@rollup/plugin-commonjs': 28.0.1(rollup@4.27.4) '@rollup/plugin-json': 6.1.0(rollup@4.27.4) - '@rollup/plugin-node-resolve': 15.3.0(rollup@4.27.4) - '@sveltejs/kit': 2.8.5(@sveltejs/vite-plugin-svelte@4.0.0-next.6(svelte@5.2.9)(vite@5.4.11(@types/node@20.17.8)))(svelte@5.2.9)(vite@5.4.11(@types/node@20.17.8)) + '@rollup/plugin-node-resolve': 16.0.0(rollup@4.27.4) + '@sveltejs/kit': 2.16.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.2.9)(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1)))(svelte@5.2.9)(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1)) rollup: 4.27.4 - '@sveltejs/kit@2.8.5(@sveltejs/vite-plugin-svelte@4.0.0-next.6(svelte@5.2.9)(vite@5.4.11(@types/node@20.17.8)))(svelte@5.2.9)(vite@5.4.11(@types/node@20.17.8))': + '@sveltejs/kit@2.16.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.2.9)(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1)))(svelte@5.2.9)(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1))': dependencies: - '@sveltejs/vite-plugin-svelte': 4.0.0-next.6(svelte@5.2.9)(vite@5.4.11(@types/node@20.17.8)) + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.2.9)(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1)) '@types/cookie': 0.6.0 cookie: 0.6.0 devalue: 5.1.1 - esm-env: 1.1.4 + esm-env: 1.2.2 import-meta-resolve: 4.1.0 kleur: 4.1.5 magic-string: 0.30.14 @@ -4131,28 +4167,27 @@ snapshots: set-cookie-parser: 2.7.1 sirv: 3.0.0 svelte: 5.2.9 - tiny-glob: 0.2.9 - vite: 5.4.11(@types/node@20.17.8) + vite: 6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1) - '@sveltejs/vite-plugin-svelte-inspector@3.0.1(@sveltejs/vite-plugin-svelte@4.0.0-next.6(svelte@5.2.9)(vite@5.4.11(@types/node@20.17.8)))(svelte@5.2.9)(vite@5.4.11(@types/node@20.17.8))': + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.2.9)(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1)))(svelte@5.2.9)(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1))': dependencies: - '@sveltejs/vite-plugin-svelte': 4.0.0-next.6(svelte@5.2.9)(vite@5.4.11(@types/node@20.17.8)) - debug: 4.3.7 + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.2.9)(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1)) + debug: 4.4.0 svelte: 5.2.9 - vite: 5.4.11(@types/node@20.17.8) + vite: 6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@4.0.0-next.6(svelte@5.2.9)(vite@5.4.11(@types/node@20.17.8))': + '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.2.9)(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 3.0.1(@sveltejs/vite-plugin-svelte@4.0.0-next.6(svelte@5.2.9)(vite@5.4.11(@types/node@20.17.8)))(svelte@5.2.9)(vite@5.4.11(@types/node@20.17.8)) - debug: 4.3.7 + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.2.9)(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1)))(svelte@5.2.9)(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1)) + debug: 4.4.0 deepmerge: 4.3.1 kleur: 4.1.5 - magic-string: 0.30.14 + magic-string: 0.30.17 svelte: 5.2.9 - vite: 5.4.11(@types/node@20.17.8) - vitefu: 0.2.5(vite@5.4.11(@types/node@20.17.8)) + vite: 6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1) + vitefu: 1.0.5(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1)) transitivePeerDependencies: - supports-color @@ -4381,13 +4416,13 @@ snapshots: chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.6(vite@5.4.11(@types/node@20.17.8))': + '@vitest/mocker@2.1.6(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1))': dependencies: '@vitest/spy': 2.1.6 estree-walker: 3.0.3 magic-string: 0.30.14 optionalDependencies: - vite: 5.4.11(@types/node@20.17.8) + vite: 6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1) '@vitest/pretty-format@2.1.6': dependencies: @@ -4694,6 +4729,10 @@ snapshots: dependencies: ms: 2.1.3 + debug@4.4.0: + dependencies: + ms: 2.1.3 + decimal.js@10.4.3: optional: true @@ -4806,31 +4845,33 @@ snapshots: es6-promise@3.3.1: {} - esbuild@0.21.5: + esbuild@0.24.2: optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 + '@esbuild/aix-ppc64': 0.24.2 + '@esbuild/android-arm': 0.24.2 + '@esbuild/android-arm64': 0.24.2 + '@esbuild/android-x64': 0.24.2 + '@esbuild/darwin-arm64': 0.24.2 + '@esbuild/darwin-x64': 0.24.2 + '@esbuild/freebsd-arm64': 0.24.2 + '@esbuild/freebsd-x64': 0.24.2 + '@esbuild/linux-arm': 0.24.2 + '@esbuild/linux-arm64': 0.24.2 + '@esbuild/linux-ia32': 0.24.2 + '@esbuild/linux-loong64': 0.24.2 + '@esbuild/linux-mips64el': 0.24.2 + '@esbuild/linux-ppc64': 0.24.2 + '@esbuild/linux-riscv64': 0.24.2 + '@esbuild/linux-s390x': 0.24.2 + '@esbuild/linux-x64': 0.24.2 + '@esbuild/netbsd-arm64': 0.24.2 + '@esbuild/netbsd-x64': 0.24.2 + '@esbuild/openbsd-arm64': 0.24.2 + '@esbuild/openbsd-x64': 0.24.2 + '@esbuild/sunos-x64': 0.24.2 + '@esbuild/win32-arm64': 0.24.2 + '@esbuild/win32-ia32': 0.24.2 + '@esbuild/win32-x64': 0.24.2 escalade@3.2.0: {} @@ -4926,6 +4967,8 @@ snapshots: esm-env@1.1.4: {} + esm-env@1.2.2: {} + espree@9.6.1: dependencies: acorn: 8.14.0 @@ -5076,8 +5119,6 @@ snapshots: dependencies: type-fest: 0.20.2 - globalyzer@0.1.0: {} - globby@11.1.0: dependencies: array-union: 2.1.0 @@ -5087,8 +5128,6 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 - globrex@0.1.2: {} - graceful-fs@4.2.11: {} graphemer@1.4.0: {} @@ -5347,6 +5386,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + markdown-it@14.1.0: dependencies: argparse: 2.0.1 @@ -6100,11 +6143,6 @@ snapshots: timeago.js@4.0.2: {} - tiny-glob@0.2.9: - dependencies: - globalyzer: 0.1.0 - globrex: 0.1.2 - tinybench@2.9.0: {} tinyexec@0.3.1: {} @@ -6237,15 +6275,16 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@2.1.6(@types/node@20.17.8): + vite-node@2.1.6(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1): dependencies: cac: 6.7.14 debug: 4.3.7 es-module-lexer: 1.5.4 pathe: 1.1.2 - vite: 5.4.11(@types/node@20.17.8) + vite: 6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1) transitivePeerDependencies: - '@types/node' + - jiti - less - lightningcss - sass @@ -6254,38 +6293,42 @@ snapshots: - sugarss - supports-color - terser + - tsx + - yaml - vite-plugin-top-level-await@1.4.4(rollup@4.27.4)(vite@5.4.11(@types/node@20.17.8)): + vite-plugin-top-level-await@1.4.4(rollup@4.27.4)(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1)): dependencies: '@rollup/plugin-virtual': 3.0.2(rollup@4.27.4) '@swc/core': 1.9.3 uuid: 10.0.0 - vite: 5.4.11(@types/node@20.17.8) + vite: 6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1) transitivePeerDependencies: - '@swc/helpers' - rollup - vite-plugin-wasm@3.3.0(vite@5.4.11(@types/node@20.17.8)): + vite-plugin-wasm@3.3.0(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1)): dependencies: - vite: 5.4.11(@types/node@20.17.8) + vite: 6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1) - vite@5.4.11(@types/node@20.17.8): + vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1): dependencies: - esbuild: 0.21.5 + esbuild: 0.24.2 postcss: 8.4.49 rollup: 4.27.4 optionalDependencies: '@types/node': 20.17.8 fsevents: 2.3.3 + jiti: 1.21.6 + yaml: 2.6.1 - vitefu@0.2.5(vite@5.4.11(@types/node@20.17.8)): + vitefu@1.0.5(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1)): optionalDependencies: - vite: 5.4.11(@types/node@20.17.8) + vite: 6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1) - vitest@2.1.6(@types/node@20.17.8)(jsdom@25.0.1): + vitest@2.1.6(@types/node@20.17.8)(jiti@1.21.6)(jsdom@25.0.1)(yaml@2.6.1): dependencies: '@vitest/expect': 2.1.6 - '@vitest/mocker': 2.1.6(vite@5.4.11(@types/node@20.17.8)) + '@vitest/mocker': 2.1.6(vite@6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1)) '@vitest/pretty-format': 2.1.6 '@vitest/runner': 2.1.6 '@vitest/snapshot': 2.1.6 @@ -6301,13 +6344,14 @@ snapshots: tinyexec: 0.3.1 tinypool: 1.0.2 tinyrainbow: 1.2.0 - vite: 5.4.11(@types/node@20.17.8) - vite-node: 2.1.6(@types/node@20.17.8) + vite: 6.0.11(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1) + vite-node: 2.1.6(@types/node@20.17.8)(jiti@1.21.6)(yaml@2.6.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.17.8 jsdom: 25.0.1 transitivePeerDependencies: + - jiti - less - lightningcss - msw @@ -6317,6 +6361,8 @@ snapshots: - sugarss - supports-color - terser + - tsx + - yaml w3c-keyname@2.2.8: {} diff --git a/src/lib/components/editors/SocialLinksEditor/SocialLinkInput.svelte b/src/lib/components/editors/SocialLinksEditor/SocialLinkInput.svelte index d23c3e6..de65f34 100644 --- a/src/lib/components/editors/SocialLinksEditor/SocialLinkInput.svelte +++ b/src/lib/components/editors/SocialLinksEditor/SocialLinkInput.svelte @@ -1,11 +1,8 @@ + +icon (imageLoaded = true)} + onerror={() => (imageLoaded = false)} +/> + + + diff --git a/src/lib/utils/social-links.ts b/src/lib/utils/social-links.ts index 7a2dd84..3260a29 100644 --- a/src/lib/utils/social-links.ts +++ b/src/lib/utils/social-links.ts @@ -1,3 +1,8 @@ +import { limitedFetch } from '$lib/limited-fetch'; +import { parseHTML } from 'linkedom'; +import { fromByteArray as encodeBase64 } from 'base64-js'; +import { browser } from '$app/environment'; + type SocialMediaConfigEntry = { icon: string; class: string; @@ -68,6 +73,92 @@ export function getSocialMediaDetails(url: string): SocialMediaConfigEntry { ); } +export async function getSocialMediaDetailsWithFallbackFaviconUrl( + url: string +): Promise { + const details = getSocialMediaDetails(url); + let fallbackIcon; + // If this is the generic fallback icon + if (details.icon == 'mdi:web') { + if (browser) { + fallbackIcon = await clientGetFaviconDataUri(url); + } else { + fallbackIcon = await getFaviconDataUri(url); + } + } + return { ...details, fallbackIcon }; +} + +const toDataUri = async (blob: Blob): Promise => { + return `data:${blob.type};base64,${encodeBase64(await blob.bytes())}`; +}; +export async function getFaviconDataUri(url: string): Promise { + try { + const timeout = { timeout: 3000, maxSize: 1024 * 1024 * 3 }; + type Link = { href: string; type?: string; size?: [number, number] }; + const rootUrl = new URL(url); + rootUrl.pathname = '/'; + const resp = await limitedFetch(timeout, rootUrl, { redirect: 'follow' }); + if (!resp.ok) return; + const html = await resp.text(); + const htmlParsed = parseHTML(html); + const icons: Link[] = []; + for await (const link of htmlParsed.document.querySelectorAll('link[rel=icon]').values()) { + const type = link.attributes.getNamedItem('type')?.value; + let href = link.attributes.getNamedItem('href')?.value; + const sizes = link.attributes.getNamedItem('sizes')?.value; + const parsedSizes = sizes + ? sizes.split(' ').map((x) => x.split('x').map((x) => parseInt(x))) + : undefined; + parsedSizes?.sort((a, b) => a[0] - b[0]); + if (!href) continue; + try { + new URL(href); + } catch (_) { + const hrefUrl = new URL(rootUrl); + hrefUrl.pathname = href; + href = hrefUrl.href; + } + icons.push({ + href, + size: parsedSizes?.[0] as [number, number] | undefined, + type + }); + } + const goodType = (x: Link) => x.type?.includes('svg'); + const goodSize = (x: Link) => x.size?.[0] && x.size?.[0] < 64; + icons.sort((a, b) => { + if (goodType(a) && !goodType(b)) { + return 1; + } else if (goodType(b) && !goodType(a)) { + return -1; + } else if (goodSize(a) && !goodSize(b)) { + return 1; + } else if (goodSize(b) && !goodSize(a)) { + return -1; + } else if (goodSize(a) && goodSize(b)) { + return (a.size?.[0] || 0) - (b.size?.[0] || 0); + } else { + return -1; + } + }); + const icon = icons[icons.length - 1]; + if (!icon) return; + const iconResp = await limitedFetch(timeout, icon.href); + return toDataUri(await iconResp.blob()); + } catch (e) { + console.log(e); + } +} +export async function clientGetFaviconDataUri(url: string): Promise { + try { + const resp = await fetch(`/__internal__/favicon/${encodeURIComponent(url)}`); + return await resp.text(); + } catch (e) { + console.error(e); + } +} + export function getFeaturedSocialMediaDetails(url: string): SocialMediaConfigEntry | null { const domain = getDomain(url); const socialMedia = domain ? featuredSocialMediaConfig[domain] : null; diff --git a/src/routes/(app)/[username]/theme-editor/minimalProfileTheme.html.j2 b/src/routes/(app)/[username]/theme-editor/minimalProfileTheme.html.j2 index 0932d9d..343dcef 100644 --- a/src/routes/(app)/[username]/theme-editor/minimalProfileTheme.html.j2 +++ b/src/routes/(app)/[username]/theme-editor/minimalProfileTheme.html.j2 @@ -12,9 +12,23 @@ background-color: lightgray } - img { + .avatar { width: 5em; } + + .social-icons { + display: flex; + gap: 0.5em; + } + + .social-icons a { + text-decoration: none; + } + + .social-icon { + width: 25px; + height: 25px; + } @@ -22,11 +36,23 @@
- {{display_name}} avatar + {{display_name}} avatar

{{display_name}}

+ + {% if bio %} {{bio | markdown}} @@ -54,13 +80,6 @@ Weird - {% for link in social_links %} -
  • - - {{link.label or link.url}} - -
  • - {% endfor %} {% for link in links %}
  • @@ -89,4 +108,4 @@
  • - \ No newline at end of file + diff --git a/src/routes/(internal)/__internal__/favicon/[u]/+server.ts b/src/routes/(internal)/__internal__/favicon/[u]/+server.ts new file mode 100644 index 0000000..5ba24a1 --- /dev/null +++ b/src/routes/(internal)/__internal__/favicon/[u]/+server.ts @@ -0,0 +1,6 @@ +// Uncommenting this line breaks it!!!! +// import { redis } from "$lib/redis" +import { type RequestHandler } from '@sveltejs/kit'; +export const GET: RequestHandler = async ({ params }) => { + return new Response(); +};