From ecbde8a190c7248c29da7d2d405bdf0fdb3e696e Mon Sep 17 00:00:00 2001 From: Marius Wilms Date: Mon, 8 Jan 2024 22:12:46 +0100 Subject: [PATCH] Feature/UI decoupling (#104) * Plugin view decoupling * Improved frontend quality * Improved frontend quality * Restructuring; formatting * Switch to pnpm * Merged multiple branches --- frontend/package.json.md5 | 1 + frontend/pnpm-lock.yaml | 534 +++++++++--------- frontend/postcss.config.js | 10 +- frontend/src/components/Progressbar.svelte | 14 +- .../lib/components/catalog/PluginRow.svelte | 73 +++ .../lib/components/plugins/PluginRow.svelte | 54 ++ frontend/src/lib/entities/plugin.ts | 22 +- frontend/src/lib/entities/settings.ts | 2 +- frontend/src/lib/wailsjs/go/models.ts | 107 ++++ frontend/src/routes/+layout.svelte | 42 +- frontend/src/routes/+layout.ts | 2 +- frontend/src/routes/+page.svelte | 248 ++------ frontend/src/routes/+page.ts | 8 + frontend/src/routes/about/+page.svelte | 26 +- frontend/src/routes/catalog/+page.svelte | 147 ++--- frontend/src/routes/catalog/+page.ts | 8 + frontend/src/routes/interactions.ts | 43 ++ frontend/src/routes/settings/+page.svelte | 27 +- frontend/tailwind.config.js | 39 +- internal/entities/plugin.go | 34 +- internal/models/remotePlugin.go | 3 +- wails.json | 6 +- 22 files changed, 816 insertions(+), 634 deletions(-) create mode 100644 frontend/package.json.md5 create mode 100644 frontend/src/lib/components/catalog/PluginRow.svelte create mode 100644 frontend/src/lib/components/plugins/PluginRow.svelte create mode 100644 frontend/src/routes/+page.ts create mode 100644 frontend/src/routes/catalog/+page.ts create mode 100644 frontend/src/routes/interactions.ts diff --git a/frontend/package.json.md5 b/frontend/package.json.md5 new file mode 100644 index 0000000..6308749 --- /dev/null +++ b/frontend/package.json.md5 @@ -0,0 +1 @@ +5109d246275fc52633d8a498a1726efb \ No newline at end of file diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 5828580..cba68ba 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -10,22 +10,22 @@ devDependencies: version: 1.40.1 '@sveltejs/adapter-static': specifier: ^3.0.0 - version: 3.0.1(@sveltejs/kit@2.0.6) + version: 3.0.1(@sveltejs/kit@2.0.8) '@sveltejs/kit': specifier: ^2.0.0 - version: 2.0.6(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.10) + version: 2.0.8(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.11) '@sveltejs/vite-plugin-svelte': specifier: ^3.0.0 - version: 3.0.1(svelte@4.2.8)(vite@5.0.10) + version: 3.0.1(svelte@4.2.8)(vite@5.0.11) '@typescript-eslint/eslint-plugin': specifier: ^6.0.0 - version: 6.16.0(@typescript-eslint/parser@6.16.0)(eslint@8.56.0)(typescript@5.3.3) + version: 6.18.0(@typescript-eslint/parser@6.18.0)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': specifier: ^6.0.0 - version: 6.16.0(eslint@8.56.0)(typescript@5.3.3) + version: 6.18.0(eslint@8.56.0)(typescript@5.3.3) autoprefixer: specifier: ^10.4.16 - version: 10.4.16(postcss@8.4.32) + version: 10.4.16(postcss@8.4.33) eslint: specifier: ^8.28.0 version: 8.56.0 @@ -37,7 +37,7 @@ devDependencies: version: 2.35.1(eslint@8.56.0)(svelte@4.2.8) postcss: specifier: ^8.4.32 - version: 8.4.32 + version: 8.4.33 prettier: specifier: ^3.0.0 version: 3.1.1 @@ -49,10 +49,10 @@ devDependencies: version: 4.2.8 svelte-check: specifier: ^3.6.0 - version: 3.6.2(postcss@8.4.32)(svelte@4.2.8) + version: 3.6.2(postcss@8.4.33)(svelte@4.2.8) tailwindcss: specifier: ^3.3.6 - version: 3.4.0 + version: 3.4.1 tslib: specifier: ^2.4.1 version: 2.6.2 @@ -61,10 +61,10 @@ devDependencies: version: 5.3.3 vite: specifier: ^5.0.0 - version: 5.0.10 + version: 5.0.11 vitest: specifier: ^1.0.0 - version: 1.1.0 + version: 1.1.3 packages: @@ -86,8 +86,8 @@ packages: '@jridgewell/trace-mapping': 0.3.20 dev: true - /@esbuild/aix-ppc64@0.19.10: - resolution: {integrity: sha512-Q+mk96KJ+FZ30h9fsJl+67IjNJm3x2eX+GBWGmocAKgzp27cowCOOqSdscX80s0SpdFXZnIv/+1xD1EctFx96Q==} + /@esbuild/aix-ppc64@0.19.11: + resolution: { integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g== } engines: {node: '>=12'} cpu: [ppc64] os: [aix] @@ -95,8 +95,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.19.10: - resolution: {integrity: sha512-1X4CClKhDgC3by7k8aOWZeBXQX8dHT5QAMCAQDArCLaYfkppoARvh0fit3X2Qs+MXDngKcHv6XXyQCpY0hkK1Q==} + /@esbuild/android-arm64@0.19.11: + resolution: { integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q== } engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -104,8 +104,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.19.10: - resolution: {integrity: sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w==} + /@esbuild/android-arm@0.19.11: + resolution: { integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw== } engines: {node: '>=12'} cpu: [arm] os: [android] @@ -113,8 +113,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.19.10: - resolution: {integrity: sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw==} + /@esbuild/android-x64@0.19.11: + resolution: { integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg== } engines: {node: '>=12'} cpu: [x64] os: [android] @@ -122,8 +122,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.19.10: - resolution: {integrity: sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==} + /@esbuild/darwin-arm64@0.19.11: + resolution: { integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ== } engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -131,8 +131,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.19.10: - resolution: {integrity: sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA==} + /@esbuild/darwin-x64@0.19.11: + resolution: { integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g== } engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -140,8 +140,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.19.10: - resolution: {integrity: sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg==} + /@esbuild/freebsd-arm64@0.19.11: + resolution: { integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA== } engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -149,8 +149,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.19.10: - resolution: {integrity: sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag==} + /@esbuild/freebsd-x64@0.19.11: + resolution: { integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw== } engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -158,8 +158,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.19.10: - resolution: {integrity: sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==} + /@esbuild/linux-arm64@0.19.11: + resolution: { integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg== } engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -167,8 +167,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.19.10: - resolution: {integrity: sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg==} + /@esbuild/linux-arm@0.19.11: + resolution: { integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q== } engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -176,8 +176,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.19.10: - resolution: {integrity: sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg==} + /@esbuild/linux-ia32@0.19.11: + resolution: { integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA== } engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -185,8 +185,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.19.10: - resolution: {integrity: sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA==} + /@esbuild/linux-loong64@0.19.11: + resolution: { integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg== } engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -194,8 +194,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.19.10: - resolution: {integrity: sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A==} + /@esbuild/linux-mips64el@0.19.11: + resolution: { integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg== } engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -203,8 +203,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.19.10: - resolution: {integrity: sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ==} + /@esbuild/linux-ppc64@0.19.11: + resolution: { integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA== } engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -212,8 +212,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.19.10: - resolution: {integrity: sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA==} + /@esbuild/linux-riscv64@0.19.11: + resolution: { integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ== } engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -221,8 +221,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.19.10: - resolution: {integrity: sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA==} + /@esbuild/linux-s390x@0.19.11: + resolution: { integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q== } engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -230,8 +230,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.19.10: - resolution: {integrity: sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA==} + /@esbuild/linux-x64@0.19.11: + resolution: { integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA== } engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -239,8 +239,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.19.10: - resolution: {integrity: sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q==} + /@esbuild/netbsd-x64@0.19.11: + resolution: { integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ== } engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -248,8 +248,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.19.10: - resolution: {integrity: sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg==} + /@esbuild/openbsd-x64@0.19.11: + resolution: { integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw== } engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -257,8 +257,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.19.10: - resolution: {integrity: sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA==} + /@esbuild/sunos-x64@0.19.11: + resolution: { integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ== } engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -266,8 +266,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.19.10: - resolution: {integrity: sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw==} + /@esbuild/win32-arm64@0.19.11: + resolution: { integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ== } engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -275,8 +275,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.19.10: - resolution: {integrity: sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ==} + /@esbuild/win32-ia32@0.19.11: + resolution: { integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg== } engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -284,8 +284,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.19.10: - resolution: {integrity: sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==} + /@esbuild/win32-x64@0.19.11: + resolution: { integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw== } engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -439,104 +439,104 @@ packages: resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==} dev: true - /@rollup/rollup-android-arm-eabi@4.9.1: - resolution: {integrity: sha512-6vMdBZqtq1dVQ4CWdhFwhKZL6E4L1dV6jUjuBvsavvNJSppzi6dLBbuV+3+IyUREaj9ZFvQefnQm28v4OCXlig==} + /@rollup/rollup-android-arm-eabi@4.9.4: + resolution: { integrity: sha512-ub/SN3yWqIv5CWiAZPHVS1DloyZsJbtXmX4HxUTIpS0BHm9pW5iYBo2mIZi+hE3AeiTzHz33blwSnhdUo+9NpA== } cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-android-arm64@4.9.1: - resolution: {integrity: sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==} + /@rollup/rollup-android-arm64@4.9.4: + resolution: { integrity: sha512-ehcBrOR5XTl0W0t2WxfTyHCR/3Cq2jfb+I4W+Ch8Y9b5G+vbAecVv0Fx/J1QKktOrgUYsIKxWAKgIpvw56IFNA== } cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-arm64@4.9.1: - resolution: {integrity: sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==} + /@rollup/rollup-darwin-arm64@4.9.4: + resolution: { integrity: sha512-1fzh1lWExwSTWy8vJPnNbNM02WZDS8AW3McEOb7wW+nPChLKf3WG2aG7fhaUmfX5FKw9zhsF5+MBwArGyNM7NA== } cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-x64@4.9.1: - resolution: {integrity: sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==} + /@rollup/rollup-darwin-x64@4.9.4: + resolution: { integrity: sha512-Gc6cukkF38RcYQ6uPdiXi70JB0f29CwcQ7+r4QpfNpQFVHXRd0DfWFidoGxjSx1DwOETM97JPz1RXL5ISSB0pA== } cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.9.1: - resolution: {integrity: sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==} + /@rollup/rollup-linux-arm-gnueabihf@4.9.4: + resolution: { integrity: sha512-g21RTeFzoTl8GxosHbnQZ0/JkuFIB13C3T7Y0HtKzOXmoHhewLbVTFBQZu+z5m9STH6FZ7L/oPgU4Nm5ErN2fw== } cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.9.1: - resolution: {integrity: sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==} + /@rollup/rollup-linux-arm64-gnu@4.9.4: + resolution: { integrity: sha512-TVYVWD/SYwWzGGnbfTkrNpdE4HON46orgMNHCivlXmlsSGQOx/OHHYiQcMIOx38/GWgwr/po2LBn7wypkWw/Mg== } cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.9.1: - resolution: {integrity: sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==} + /@rollup/rollup-linux-arm64-musl@4.9.4: + resolution: { integrity: sha512-XcKvuendwizYYhFxpvQ3xVpzje2HHImzg33wL9zvxtj77HvPStbSGI9czrdbfrf8DGMcNNReH9pVZv8qejAQ5A== } cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.9.1: - resolution: {integrity: sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==} + /@rollup/rollup-linux-riscv64-gnu@4.9.4: + resolution: { integrity: sha512-LFHS/8Q+I9YA0yVETyjonMJ3UA+DczeBd/MqNEzsGSTdNvSJa1OJZcSH8GiXLvcizgp9AlHs2walqRcqzjOi3A== } cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.9.1: - resolution: {integrity: sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==} + /@rollup/rollup-linux-x64-gnu@4.9.4: + resolution: { integrity: sha512-dIYgo+j1+yfy81i0YVU5KnQrIJZE8ERomx17ReU4GREjGtDW4X+nvkBak2xAUpyqLs4eleDSj3RrV72fQos7zw== } cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.9.1: - resolution: {integrity: sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==} + /@rollup/rollup-linux-x64-musl@4.9.4: + resolution: { integrity: sha512-RoaYxjdHQ5TPjaPrLsfKqR3pakMr3JGqZ+jZM0zP2IkDtsGa4CqYaWSfQmZVgFUCgLrTnzX+cnHS3nfl+kB6ZQ== } cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.9.1: - resolution: {integrity: sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==} + /@rollup/rollup-win32-arm64-msvc@4.9.4: + resolution: { integrity: sha512-T8Q3XHV+Jjf5e49B4EAaLKV74BbX7/qYBRQ8Wop/+TyyU0k+vSjiLVSHNWdVd1goMjZcbhDmYZUYW5RFqkBNHQ== } cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.9.1: - resolution: {integrity: sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==} + /@rollup/rollup-win32-ia32-msvc@4.9.4: + resolution: { integrity: sha512-z+JQ7JirDUHAsMecVydnBPWLwJjbppU+7LZjffGf+Jvrxq+dVjIE7By163Sc9DKc3ADSU50qPVw0KonBS+a+HQ== } cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.9.1: - resolution: {integrity: sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==} + /@rollup/rollup-win32-x64-msvc@4.9.4: + resolution: { integrity: sha512-LfdGXCV9rdEify1oxlN9eamvDSjv9md9ZVMAbNHA87xqIfFCxImxan9qZ8+Un54iK2nnqPlbnSi4R54ONtbWBw== } cpu: [x64] os: [win32] requiresBuild: true @@ -547,16 +547,16 @@ packages: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true - /@sveltejs/adapter-static@3.0.1(@sveltejs/kit@2.0.6): + /@sveltejs/adapter-static@3.0.1(@sveltejs/kit@2.0.8): resolution: {integrity: sha512-6lMvf7xYEJ+oGeR5L8DFJJrowkefTK6ZgA4JiMqoClMkKq0s6yvsd3FZfCFvX1fQ0tpCD7fkuRVHsnUVgsHyNg==} peerDependencies: '@sveltejs/kit': ^2.0.0 dependencies: - '@sveltejs/kit': 2.0.6(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.10) + '@sveltejs/kit': 2.0.8(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.11) dev: true - /@sveltejs/kit@2.0.6(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.10): - resolution: {integrity: sha512-dnHtyjBLGXx+hrZQ9GuqLlSfTBixewJaByUVWai7LmB4dgV3FwkK155OltEgONDQW6KW64hLNS/uojdx3uC2/g==} + /@sveltejs/kit@2.0.8(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.11): + resolution: { integrity: sha512-44F3uE5NLwYoqDnfmX5s3cZf2SssyHpUh9vokJ3YKzf7N7nDiPZPE3sdSelLc6RT7DUr7X4HKAu72wKpw2eonw== } engines: {node: '>=18.13'} hasBin: true requiresBuild: true @@ -565,11 +565,12 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.3 dependencies: - '@sveltejs/vite-plugin-svelte': 3.0.1(svelte@4.2.8)(vite@5.0.10) + '@sveltejs/vite-plugin-svelte': 3.0.1(svelte@4.2.8)(vite@5.0.11) '@types/cookie': 0.6.0 cookie: 0.6.0 devalue: 4.3.2 esm-env: 1.0.0 + import-meta-resolve: 4.0.0 kleur: 4.1.5 magic-string: 0.30.5 mrmime: 2.0.0 @@ -578,10 +579,10 @@ packages: sirv: 2.0.4 svelte: 4.2.8 tiny-glob: 0.2.9 - vite: 5.0.10 + vite: 5.0.11 dev: true - /@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.10): + /@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.11): resolution: {integrity: sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==} engines: {node: ^18.0.0 || >=20} peerDependencies: @@ -589,30 +590,30 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 3.0.1(svelte@4.2.8)(vite@5.0.10) + '@sveltejs/vite-plugin-svelte': 3.0.1(svelte@4.2.8)(vite@5.0.11) debug: 4.3.4 svelte: 4.2.8 - vite: 5.0.10 + vite: 5.0.11 transitivePeerDependencies: - supports-color dev: true - /@sveltejs/vite-plugin-svelte@3.0.1(svelte@4.2.8)(vite@5.0.10): + /@sveltejs/vite-plugin-svelte@3.0.1(svelte@4.2.8)(vite@5.0.11): resolution: {integrity: sha512-CGURX6Ps+TkOovK6xV+Y2rn8JKa8ZPUHPZ/NKgCxAmgBrXReavzFl8aOSCj3kQ1xqT7yGJj53hjcV/gqwDAaWA==} engines: {node: ^18.0.0 || >=20} peerDependencies: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.0 dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.10) + '@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.11) debug: 4.3.4 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.5 svelte: 4.2.8 svelte-hmr: 0.15.3(svelte@4.2.8) - vite: 5.0.10 - vitefu: 0.2.5(vite@5.0.10) + vite: 5.0.11 + vitefu: 0.2.5(vite@5.0.11) transitivePeerDependencies: - supports-color dev: true @@ -637,8 +638,8 @@ packages: resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} dev: true - /@typescript-eslint/eslint-plugin@6.16.0(@typescript-eslint/parser@6.16.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-O5f7Kv5o4dLWQtPX4ywPPa+v9G+1q1x8mz0Kr0pXUtKsevo+gIJHLkGc8RxaZWtP8RrhwhSNIWThnW42K9/0rQ==} + /@typescript-eslint/eslint-plugin@6.18.0(@typescript-eslint/parser@6.18.0)(eslint@8.56.0)(typescript@5.3.3): + resolution: { integrity: sha512-3lqEvQUdCozi6d1mddWqd+kf8KxmGq2Plzx36BlkjuQe3rSTm/O98cLf0A4uDO+a5N1KD2SeEEl6fW97YHY+6w== } engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -649,11 +650,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.16.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.16.0 - '@typescript-eslint/type-utils': 6.16.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.16.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.16.0 + '@typescript-eslint/parser': 6.18.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.18.0 + '@typescript-eslint/type-utils': 6.18.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.18.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.18.0 debug: 4.3.4 eslint: 8.56.0 graphemer: 1.4.0 @@ -666,8 +667,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.16.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-H2GM3eUo12HpKZU9njig3DF5zJ58ja6ahj1GoHEHOgQvYxzoFJJEvC1MQ7T2l9Ha+69ZSOn7RTxOdpC/y3ikMw==} + /@typescript-eslint/parser@6.18.0(eslint@8.56.0)(typescript@5.3.3): + resolution: { integrity: sha512-v6uR68SFvqhNQT41frCMCQpsP+5vySy6IdgjlzUWoo7ALCnpaWYcz/Ij2k4L8cEsL0wkvOviCMpjmtRtHNOKzA== } engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -676,10 +677,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.16.0 - '@typescript-eslint/types': 6.16.0 - '@typescript-eslint/typescript-estree': 6.16.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.16.0 + '@typescript-eslint/scope-manager': 6.18.0 + '@typescript-eslint/types': 6.18.0 + '@typescript-eslint/typescript-estree': 6.18.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.18.0 debug: 4.3.4 eslint: 8.56.0 typescript: 5.3.3 @@ -687,16 +688,16 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager@6.16.0: - resolution: {integrity: sha512-0N7Y9DSPdaBQ3sqSCwlrm9zJwkpOuc6HYm7LpzLAPqBL7dmzAUimr4M29dMkOP/tEwvOCC/Cxo//yOfJD3HUiw==} + /@typescript-eslint/scope-manager@6.18.0: + resolution: { integrity: sha512-o/UoDT2NgOJ2VfHpfr+KBY2ErWvCySNUIX/X7O9g8Zzt/tXdpfEU43qbNk8LVuWUT2E0ptzTWXh79i74PP0twA== } engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.16.0 - '@typescript-eslint/visitor-keys': 6.16.0 + '@typescript-eslint/types': 6.18.0 + '@typescript-eslint/visitor-keys': 6.18.0 dev: true - /@typescript-eslint/type-utils@6.16.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-ThmrEOcARmOnoyQfYkHw/DX2SEYBalVECmoldVuH6qagKROp/jMnfXpAU/pAIWub9c4YTxga+XwgAkoA0pxfmg==} + /@typescript-eslint/type-utils@6.18.0(eslint@8.56.0)(typescript@5.3.3): + resolution: { integrity: sha512-ZeMtrXnGmTcHciJN1+u2CigWEEXgy1ufoxtWcHORt5kGvpjjIlK9MUhzHm4RM8iVy6dqSaZA/6PVkX6+r+ChjQ== } engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -705,8 +706,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.16.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.16.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.18.0(typescript@5.3.3) + '@typescript-eslint/utils': 6.18.0(eslint@8.56.0)(typescript@5.3.3) debug: 4.3.4 eslint: 8.56.0 ts-api-utils: 1.0.3(typescript@5.3.3) @@ -715,13 +716,13 @@ packages: - supports-color dev: true - /@typescript-eslint/types@6.16.0: - resolution: {integrity: sha512-hvDFpLEvTJoHutVl87+MG/c5C8I6LOgEx05zExTSJDEVU7hhR3jhV8M5zuggbdFCw98+HhZWPHZeKS97kS3JoQ==} + /@typescript-eslint/types@6.18.0: + resolution: { integrity: sha512-/RFVIccwkwSdW/1zeMx3hADShWbgBxBnV/qSrex6607isYjj05t36P6LyONgqdUrNLl5TYU8NIKdHUYpFvExkA== } engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.16.0(typescript@5.3.3): - resolution: {integrity: sha512-VTWZuixh/vr7nih6CfrdpmFNLEnoVBF1skfjdyGnNwXOH1SLeHItGdZDHhhAIzd3ACazyY2Fg76zuzOVTaknGA==} + /@typescript-eslint/typescript-estree@6.18.0(typescript@5.3.3): + resolution: { integrity: sha512-klNvl+Ql4NsBNGB4W9TZ2Od03lm7aGvTbs0wYaFYsplVPhr+oeXjlPZCDI4U9jgJIDK38W1FKhacCFzCC+nbIg== } engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -729,8 +730,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.16.0 - '@typescript-eslint/visitor-keys': 6.16.0 + '@typescript-eslint/types': 6.18.0 + '@typescript-eslint/visitor-keys': 6.18.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -742,8 +743,8 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.16.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-T83QPKrBm6n//q9mv7oiSvy/Xq/7Hyw9SzSEhMHJwznEmQayfBM87+oAlkNAMEO7/MjIwKyOHgBJbxB0s7gx2A==} + /@typescript-eslint/utils@6.18.0(eslint@8.56.0)(typescript@5.3.3): + resolution: { integrity: sha512-wiKKCbUeDPGaYEYQh1S580dGxJ/V9HI7K5sbGAVklyf+o5g3O+adnS4UNJajplF4e7z2q0uVBaTdT/yLb4XAVA== } engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -751,9 +752,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.16.0 - '@typescript-eslint/types': 6.16.0 - '@typescript-eslint/typescript-estree': 6.16.0(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.18.0 + '@typescript-eslint/types': 6.18.0 + '@typescript-eslint/typescript-estree': 6.18.0(typescript@5.3.3) eslint: 8.56.0 semver: 7.5.4 transitivePeerDependencies: @@ -761,11 +762,11 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@6.16.0: - resolution: {integrity: sha512-QSFQLruk7fhs91a/Ep/LqRdbJCZ1Rq03rqBdKT5Ky17Sz8zRLUksqIe9DW0pKtg/Z35/ztbLQ6qpOCN6rOC11A==} + /@typescript-eslint/visitor-keys@6.18.0: + resolution: { integrity: sha512-1wetAlSZpewRDb2h9p/Q8kRjdGuqdTAQbkJIOUMLug2LBLG+QOjiWoSj6/3B/hA9/tVTFFdtiKvAYoYnSRW/RA== } engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.16.0 + '@typescript-eslint/types': 6.18.0 eslint-visitor-keys: 3.4.3 dev: true @@ -773,50 +774,51 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vitest/expect@1.1.0: - resolution: {integrity: sha512-9IE2WWkcJo2BR9eqtY5MIo3TPmS50Pnwpm66A6neb2hvk/QSLfPXBz2qdiwUOQkwyFuuXEUj5380CbwfzW4+/w==} + /@vitest/expect@1.1.3: + resolution: { integrity: sha512-MnJqsKc1Ko04lksF9XoRJza0bGGwTtqfbyrsYv5on4rcEkdo+QgUdITenBQBUltKzdxW7K3rWh+nXRULwsdaVg== } dependencies: - '@vitest/spy': 1.1.0 - '@vitest/utils': 1.1.0 - chai: 4.3.10 + '@vitest/spy': 1.1.3 + '@vitest/utils': 1.1.3 + chai: 4.4.0 dev: true - /@vitest/runner@1.1.0: - resolution: {integrity: sha512-zdNLJ00pm5z/uhbWF6aeIJCGMSyTyWImy3Fcp9piRGvueERFlQFbUwCpzVce79OLm2UHk9iwaMSOaU9jVHgNVw==} + /@vitest/runner@1.1.3: + resolution: { integrity: sha512-Va2XbWMnhSdDEh/OFxyUltgQuuDRxnarK1hW5QNN4URpQrqq6jtt8cfww/pQQ4i0LjoYxh/3bYWvDFlR9tU73g== } dependencies: - '@vitest/utils': 1.1.0 + '@vitest/utils': 1.1.3 p-limit: 5.0.0 pathe: 1.1.1 dev: true - /@vitest/snapshot@1.1.0: - resolution: {integrity: sha512-5O/wyZg09V5qmNmAlUgCBqflvn2ylgsWJRRuPrnHEfDNT6tQpQ8O1isNGgo+VxofISHqz961SG3iVvt3SPK/QQ==} + /@vitest/snapshot@1.1.3: + resolution: { integrity: sha512-U0r8pRXsLAdxSVAyGNcqOU2H3Z4Y2dAAGGelL50O0QRMdi1WWeYHdrH/QWpN1e8juWfVKsb8B+pyJwTC+4Gy9w== } dependencies: magic-string: 0.30.5 pathe: 1.1.1 pretty-format: 29.7.0 dev: true - /@vitest/spy@1.1.0: - resolution: {integrity: sha512-sNOVSU/GE+7+P76qYo+VXdXhXffzWZcYIPQfmkiRxaNCSPiLANvQx5Mx6ZURJ/ndtEkUJEpvKLXqAYTKEY+lTg==} + /@vitest/spy@1.1.3: + resolution: { integrity: sha512-Ec0qWyGS5LhATFQtldvChPTAHv08yHIOZfiNcjwRQbFPHpkih0md9KAbs7TfeIfL7OFKoe7B/6ukBTqByubXkQ== } dependencies: tinyspy: 2.2.0 dev: true - /@vitest/utils@1.1.0: - resolution: {integrity: sha512-z+s510fKmYz4Y41XhNs3vcuFTFhcij2YF7F8VQfMEYAAUfqQh0Zfg7+w9xdgFGhPf3tX3TicAe+8BDITk6ampQ==} + /@vitest/utils@1.1.3: + resolution: { integrity: sha512-Dyt3UMcdElTll2H75vhxfpZu03uFpXRCHxWnzcrFjZxT1kTbq8ALUYIeBgGolo1gldVdI0YSlQRacsqxTwNqwg== } dependencies: diff-sequences: 29.6.3 + estree-walker: 3.0.3 loupe: 2.3.7 pretty-format: 29.7.0 dev: true - /acorn-jsx@5.3.2(acorn@8.11.2): + /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.11.2 + acorn: 8.11.3 dev: true /acorn-walk@8.3.1: @@ -824,8 +826,8 @@ packages: engines: {node: '>=0.4.0'} dev: true - /acorn@8.11.2: - resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + /acorn@8.11.3: + resolution: { integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== } engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -901,7 +903,7 @@ packages: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true - /autoprefixer@10.4.16(postcss@8.4.32): + /autoprefixer@10.4.16(postcss@8.4.33): resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} engines: {node: ^10 || ^12 || >=14} hasBin: true @@ -909,11 +911,11 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.22.2 - caniuse-lite: 1.0.30001571 + caniuse-lite: 1.0.30001576 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.32 + postcss: 8.4.33 postcss-value-parser: 4.2.0 dev: true @@ -957,8 +959,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001571 - electron-to-chromium: 1.4.616 + caniuse-lite: 1.0.30001576 + electron-to-chromium: 1.4.624 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.2) dev: true @@ -982,12 +984,12 @@ packages: engines: {node: '>= 6'} dev: true - /caniuse-lite@1.0.30001571: - resolution: {integrity: sha512-tYq/6MoXhdezDLFZuCO/TKboTzuQ/xR5cFdgXPfDtM7/kchBO3b4VWghE/OAi/DV7tTdhmLjZiZBZi1fA/GheQ==} + /caniuse-lite@1.0.30001576: + resolution: { integrity: sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg== } dev: true - /chai@4.3.10: - resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} + /chai@4.4.0: + resolution: { integrity: sha512-x9cHNq1uvkCdU+5xTkNh5WtgD4e4yDFCsp9jVc7N7qVeKeftv3gO/ZrviX5d+3ZfxdYnZXZYujjRInu1RogU6A== } engines: {node: '>=4'} dependencies: assertion-error: 1.1.0 @@ -1033,7 +1035,7 @@ packages: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 '@types/estree': 1.0.5 - acorn: 8.11.2 + acorn: 8.11.3 estree-walker: 3.0.3 periscopic: 3.1.0 dev: true @@ -1159,8 +1161,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.616: - resolution: {integrity: sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==} + /electron-to-chromium@1.4.624: + resolution: { integrity: sha512-w9niWuheXjz23vezH3w90n9KKcHe0UkhTfJ+rXJkuGGogHyQbQ7KS1x0a8ER4LbI3ljFS/gqxKh1TidNXDMHOg== } dev: true /emoji-regex@8.0.0: @@ -1175,35 +1177,35 @@ packages: resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} dev: true - /esbuild@0.19.10: - resolution: {integrity: sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==} + /esbuild@0.19.11: + resolution: { integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA== } engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/aix-ppc64': 0.19.10 - '@esbuild/android-arm': 0.19.10 - '@esbuild/android-arm64': 0.19.10 - '@esbuild/android-x64': 0.19.10 - '@esbuild/darwin-arm64': 0.19.10 - '@esbuild/darwin-x64': 0.19.10 - '@esbuild/freebsd-arm64': 0.19.10 - '@esbuild/freebsd-x64': 0.19.10 - '@esbuild/linux-arm': 0.19.10 - '@esbuild/linux-arm64': 0.19.10 - '@esbuild/linux-ia32': 0.19.10 - '@esbuild/linux-loong64': 0.19.10 - '@esbuild/linux-mips64el': 0.19.10 - '@esbuild/linux-ppc64': 0.19.10 - '@esbuild/linux-riscv64': 0.19.10 - '@esbuild/linux-s390x': 0.19.10 - '@esbuild/linux-x64': 0.19.10 - '@esbuild/netbsd-x64': 0.19.10 - '@esbuild/openbsd-x64': 0.19.10 - '@esbuild/sunos-x64': 0.19.10 - '@esbuild/win32-arm64': 0.19.10 - '@esbuild/win32-ia32': 0.19.10 - '@esbuild/win32-x64': 0.19.10 + '@esbuild/aix-ppc64': 0.19.11 + '@esbuild/android-arm': 0.19.11 + '@esbuild/android-arm64': 0.19.11 + '@esbuild/android-x64': 0.19.11 + '@esbuild/darwin-arm64': 0.19.11 + '@esbuild/darwin-x64': 0.19.11 + '@esbuild/freebsd-arm64': 0.19.11 + '@esbuild/freebsd-x64': 0.19.11 + '@esbuild/linux-arm': 0.19.11 + '@esbuild/linux-arm64': 0.19.11 + '@esbuild/linux-ia32': 0.19.11 + '@esbuild/linux-loong64': 0.19.11 + '@esbuild/linux-mips64el': 0.19.11 + '@esbuild/linux-ppc64': 0.19.11 + '@esbuild/linux-riscv64': 0.19.11 + '@esbuild/linux-s390x': 0.19.11 + '@esbuild/linux-x64': 0.19.11 + '@esbuild/netbsd-x64': 0.19.11 + '@esbuild/openbsd-x64': 0.19.11 + '@esbuild/sunos-x64': 0.19.11 + '@esbuild/win32-arm64': 0.19.11 + '@esbuild/win32-ia32': 0.19.11 + '@esbuild/win32-x64': 0.19.11 dev: true /escalade@3.1.1: @@ -1251,10 +1253,10 @@ packages: eslint-compat-utils: 0.1.2(eslint@8.56.0) esutils: 2.0.3 known-css-properties: 0.29.0 - postcss: 8.4.32 - postcss-load-config: 3.1.4(postcss@8.4.32) - postcss-safe-parser: 6.0.0(postcss@8.4.32) - postcss-selector-parser: 6.0.14 + postcss: 8.4.33 + postcss-load-config: 3.1.4(postcss@8.4.33) + postcss-safe-parser: 6.0.0(postcss@8.4.33) + postcss-selector-parser: 6.0.15 semver: 7.5.4 svelte: 4.2.8 svelte-eslint-parser: 0.33.1(svelte@4.2.8) @@ -1331,8 +1333,8 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) eslint-visitor-keys: 3.4.3 dev: true @@ -1592,6 +1594,10 @@ packages: resolve-from: 4.0.0 dev: true + /import-meta-resolve@4.0.0: + resolution: { integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA== } + dev: true + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -1848,7 +1854,7 @@ packages: /mlly@1.4.2: resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} dependencies: - acorn: 8.11.2 + acorn: 8.11.3 pathe: 1.1.1 pkg-types: 1.0.3 ufo: 1.3.2 @@ -2066,29 +2072,29 @@ packages: fsevents: 2.3.2 dev: true - /postcss-import@15.1.0(postcss@8.4.32): + /postcss-import@15.1.0(postcss@8.4.33): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 dev: true - /postcss-js@4.0.1(postcss@8.4.32): + /postcss-js@4.0.1(postcss@8.4.33): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 dependencies: camelcase-css: 2.0.1 - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /postcss-load-config@3.1.4(postcss@8.4.32): + /postcss-load-config@3.1.4(postcss@8.4.33): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -2101,11 +2107,11 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - postcss: 8.4.32 + postcss: 8.4.33 yaml: 1.10.2 dev: true - /postcss-load-config@4.0.2(postcss@8.4.32): + /postcss-load-config@4.0.2(postcss@8.4.33): resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} engines: {node: '>= 14'} peerDependencies: @@ -2118,40 +2124,40 @@ packages: optional: true dependencies: lilconfig: 3.0.0 - postcss: 8.4.32 + postcss: 8.4.33 yaml: 2.3.4 dev: true - /postcss-nested@6.0.1(postcss@8.4.32): + /postcss-nested@6.0.1(postcss@8.4.33): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.14 + postcss: 8.4.33 + postcss-selector-parser: 6.0.15 dev: true - /postcss-safe-parser@6.0.0(postcss@8.4.32): + /postcss-safe-parser@6.0.0(postcss@8.4.33): resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.3.3 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /postcss-scss@4.0.9(postcss@8.4.32): + /postcss-scss@4.0.9(postcss@8.4.33): resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.4.29 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /postcss-selector-parser@6.0.14: - resolution: {integrity: sha512-65xXYsT40i9GyWzlHQ5ShZoK7JZdySeOozi/tz2EezDo6c04q6+ckYMeoY7idaie1qp2dT5KoYQ2yky6JuoHnA==} + /postcss-selector-parser@6.0.15: + resolution: { integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw== } engines: {node: '>=4'} dependencies: cssesc: 3.0.0 @@ -2162,8 +2168,8 @@ packages: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true - /postcss@8.4.32: - resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} + /postcss@8.4.33: + resolution: { integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg== } engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 @@ -2260,24 +2266,26 @@ packages: glob: 7.2.3 dev: true - /rollup@4.9.1: - resolution: {integrity: sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==} + /rollup@4.9.4: + resolution: { integrity: sha512-2ztU7pY/lrQyXSCnnoU4ICjT/tCG9cdH3/G25ERqE3Lst6vl2BCM5hL2Nw+sslAvAf+ccKsAq1SkKQALyqhR7g== } engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + dependencies: + '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.9.1 - '@rollup/rollup-android-arm64': 4.9.1 - '@rollup/rollup-darwin-arm64': 4.9.1 - '@rollup/rollup-darwin-x64': 4.9.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.9.1 - '@rollup/rollup-linux-arm64-gnu': 4.9.1 - '@rollup/rollup-linux-arm64-musl': 4.9.1 - '@rollup/rollup-linux-riscv64-gnu': 4.9.1 - '@rollup/rollup-linux-x64-gnu': 4.9.1 - '@rollup/rollup-linux-x64-musl': 4.9.1 - '@rollup/rollup-win32-arm64-msvc': 4.9.1 - '@rollup/rollup-win32-ia32-msvc': 4.9.1 - '@rollup/rollup-win32-x64-msvc': 4.9.1 + '@rollup/rollup-android-arm-eabi': 4.9.4 + '@rollup/rollup-android-arm64': 4.9.4 + '@rollup/rollup-darwin-arm64': 4.9.4 + '@rollup/rollup-darwin-x64': 4.9.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.9.4 + '@rollup/rollup-linux-arm64-gnu': 4.9.4 + '@rollup/rollup-linux-arm64-musl': 4.9.4 + '@rollup/rollup-linux-riscv64-gnu': 4.9.4 + '@rollup/rollup-linux-x64-gnu': 4.9.4 + '@rollup/rollup-linux-x64-musl': 4.9.4 + '@rollup/rollup-win32-arm64-msvc': 4.9.4 + '@rollup/rollup-win32-ia32-msvc': 4.9.4 + '@rollup/rollup-win32-x64-msvc': 4.9.4 fsevents: 2.3.3 dev: true @@ -2425,7 +2433,7 @@ packages: /strip-literal@1.3.0: resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} dependencies: - acorn: 8.11.2 + acorn: 8.11.3 dev: true /sucrase@3.35.0: @@ -2454,7 +2462,7 @@ packages: engines: {node: '>= 0.4'} dev: true - /svelte-check@3.6.2(postcss@8.4.32)(svelte@4.2.8): + /svelte-check@3.6.2(postcss@8.4.33)(svelte@4.2.8): resolution: {integrity: sha512-E6iFh4aUCGJLRz6QZXH3gcN/VFfkzwtruWSRmlKrLWQTiO6VzLsivR6q02WYLGNAGecV3EocqZuCDrC2uttZ0g==} hasBin: true peerDependencies: @@ -2467,7 +2475,7 @@ packages: picocolors: 1.0.0 sade: 1.8.1 svelte: 4.2.8 - svelte-preprocess: 5.1.3(postcss@8.4.32)(svelte@4.2.8)(typescript@5.3.3) + svelte-preprocess: 5.1.3(postcss@8.4.33)(svelte@4.2.8)(typescript@5.3.3) typescript: 5.3.3 transitivePeerDependencies: - '@babel/core' @@ -2493,8 +2501,8 @@ packages: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - postcss: 8.4.32 - postcss-scss: 4.0.9(postcss@8.4.32) + postcss: 8.4.33 + postcss-scss: 4.0.9(postcss@8.4.33) svelte: 4.2.8 dev: true @@ -2507,7 +2515,7 @@ packages: svelte: 4.2.8 dev: true - /svelte-preprocess@5.1.3(postcss@8.4.32)(svelte@4.2.8)(typescript@5.3.3): + /svelte-preprocess@5.1.3(postcss@8.4.33)(svelte@4.2.8)(typescript@5.3.3): resolution: {integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==} engines: {node: '>= 16.0.0', pnpm: ^8.0.0} requiresBuild: true @@ -2548,7 +2556,7 @@ packages: '@types/pug': 2.0.10 detect-indent: 6.1.0 magic-string: 0.30.5 - postcss: 8.4.32 + postcss: 8.4.33 sorcery: 0.11.0 strip-indent: 3.0.0 svelte: 4.2.8 @@ -2562,7 +2570,7 @@ packages: '@ampproject/remapping': 2.2.1 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.20 - acorn: 8.11.2 + acorn: 8.11.3 aria-query: 5.3.0 axobject-query: 3.2.1 code-red: 1.0.4 @@ -2574,8 +2582,8 @@ packages: periscopic: 3.1.0 dev: true - /tailwindcss@3.4.0: - resolution: {integrity: sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==} + /tailwindcss@3.4.1: + resolution: { integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA== } engines: {node: '>=14.0.0'} hasBin: true dependencies: @@ -2593,12 +2601,12 @@ packages: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.32 - postcss-import: 15.1.0(postcss@8.4.32) - postcss-js: 4.0.1(postcss@8.4.32) - postcss-load-config: 4.0.2(postcss@8.4.32) - postcss-nested: 6.0.1(postcss@8.4.32) - postcss-selector-parser: 6.0.14 + postcss: 8.4.33 + postcss-import: 15.1.0(postcss@8.4.33) + postcss-js: 4.0.1(postcss@8.4.33) + postcss-load-config: 4.0.2(postcss@8.4.33) + postcss-nested: 6.0.1(postcss@8.4.33) + postcss-selector-parser: 6.0.15 resolve: 1.22.8 sucrase: 3.35.0 transitivePeerDependencies: @@ -2720,8 +2728,8 @@ packages: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /vite-node@1.1.0: - resolution: {integrity: sha512-jV48DDUxGLEBdHCQvxL1mEh7+naVy+nhUUUaPAZLd3FJgXuxQiewHcfeZebbJ6onDqNGkP4r3MhQ342PRlG81Q==} + /vite-node@1.1.3: + resolution: { integrity: sha512-BLSO72YAkIUuNrOx+8uznYICJfTEbvBAmWClY3hpath5+h1mbPS5OMn42lrTxXuyCazVyZoDkSRnju78GiVCqA== } engines: {node: ^18.0.0 || >=20.0.0} hasBin: true dependencies: @@ -2729,7 +2737,7 @@ packages: debug: 4.3.4 pathe: 1.1.1 picocolors: 1.0.0 - vite: 5.0.10 + vite: 5.0.11 transitivePeerDependencies: - '@types/node' - less @@ -2741,8 +2749,8 @@ packages: - terser dev: true - /vite@5.0.10: - resolution: {integrity: sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==} + /vite@5.0.11: + resolution: { integrity: sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA== } engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -2769,14 +2777,14 @@ packages: terser: optional: true dependencies: - esbuild: 0.19.10 - postcss: 8.4.32 - rollup: 4.9.1 + esbuild: 0.19.11 + postcss: 8.4.33 + rollup: 4.9.4 optionalDependencies: fsevents: 2.3.3 dev: true - /vitefu@0.2.5(vite@5.0.10): + /vitefu@0.2.5(vite@5.0.11): resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} peerDependencies: vite: ^3.0.0 || ^4.0.0 || ^5.0.0 @@ -2784,11 +2792,11 @@ packages: vite: optional: true dependencies: - vite: 5.0.10 + vite: 5.0.11 dev: true - /vitest@1.1.0: - resolution: {integrity: sha512-oDFiCrw7dd3Jf06HoMtSRARivvyjHJaTxikFxuqJjO76U436PqlVw1uLn7a8OSPrhSfMGVaRakKpA2lePdw79A==} + /vitest@1.1.3: + resolution: { integrity: sha512-2l8om1NOkiA90/Y207PsEvJLYygddsOyr81wLQ20Ra8IlLKbyQncWsGZjnbkyG2KwwuTXLQjEPOJuxGMG8qJBQ== } engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -2812,14 +2820,14 @@ packages: jsdom: optional: true dependencies: - '@vitest/expect': 1.1.0 - '@vitest/runner': 1.1.0 - '@vitest/snapshot': 1.1.0 - '@vitest/spy': 1.1.0 - '@vitest/utils': 1.1.0 + '@vitest/expect': 1.1.3 + '@vitest/runner': 1.1.3 + '@vitest/snapshot': 1.1.3 + '@vitest/spy': 1.1.3 + '@vitest/utils': 1.1.3 acorn-walk: 8.3.1 cac: 6.7.14 - chai: 4.3.10 + chai: 4.4.0 debug: 4.3.4 execa: 8.0.1 local-pkg: 0.5.0 @@ -2830,8 +2838,8 @@ packages: strip-literal: 1.3.0 tinybench: 2.5.1 tinypool: 0.8.1 - vite: 5.0.10 - vite-node: 1.1.0 + vite: 5.0.11 + vite-node: 1.1.3 why-is-node-running: 2.2.2 transitivePeerDependencies: - less diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js index 2e7af2b..0f77216 100644 --- a/frontend/postcss.config.js +++ b/frontend/postcss.config.js @@ -1,6 +1,6 @@ export default { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -} + plugins: { + tailwindcss: {}, + autoprefixer: {} + } +}; diff --git a/frontend/src/components/Progressbar.svelte b/frontend/src/components/Progressbar.svelte index 899830a..2358fe2 100644 --- a/frontend/src/components/Progressbar.svelte +++ b/frontend/src/components/Progressbar.svelte @@ -1,10 +1,10 @@
- - - - - - -
\ No newline at end of file + + + + + + + diff --git a/frontend/src/lib/components/catalog/PluginRow.svelte b/frontend/src/lib/components/catalog/PluginRow.svelte new file mode 100644 index 0000000..45680b7 --- /dev/null +++ b/frontend/src/lib/components/catalog/PluginRow.svelte @@ -0,0 +1,73 @@ + + +
  • +
    +

    { + openUrl(plugin.base.infoUrl); + }} + > + {plugin.base.name} +

    +
    +

    { + openUrl(plugin.base.infoUrl); + }} + > + {plugin.base.latestVersion} +

    +

    { + openUrl(plugin.base.infoUrl); + }} + > + {plugin.base.author} +

    +

    { + openUrl(plugin.base.infoUrl); + }} + > + {plugin.downloads} +

    +

    { + openUrl(plugin.base.infoUrl); + }} + > + {plugin.updatedTimestamp} +

    + {#if plugin.isInstalled && plugin.base.latestVersion !== plugin.base.currentVersion} +

    + Update +

    + {:else if plugin.isInstalled && plugin.base.latestVersion === plugin.base.currentVersion} +

    Installed

    + {:else} +

    installPlugin(plugin)} + > + Install +

    + {/if} +
    +
    +
  • diff --git a/frontend/src/lib/components/plugins/PluginRow.svelte b/frontend/src/lib/components/plugins/PluginRow.svelte new file mode 100644 index 0000000..67c298c --- /dev/null +++ b/frontend/src/lib/components/plugins/PluginRow.svelte @@ -0,0 +1,54 @@ + + +
  • +
    toggle(index)}> +

    {plugin.base.name}

    +
    +

    {plugin.base.currentVersion}

    +

    {plugin.base.latestVersion}

    + {#if plugin.base.currentVersion !== plugin.base.latestVersion} +

    + +

    + {:else} +

    + +

    + {/if} +
    +
    + + +
  • diff --git a/frontend/src/lib/entities/plugin.ts b/frontend/src/lib/entities/plugin.ts index 193e32e..537ce6e 100644 --- a/frontend/src/lib/entities/plugin.ts +++ b/frontend/src/lib/entities/plugin.ts @@ -8,7 +8,16 @@ export class BasePlugin { infoUrl: string; downloadUrl: string; - constructor(id: number, name: string, author: string, description: string, currentVersion: string, latestVersion: string, infoUrl: string, downloadUrl: string) { + constructor( + id: number, + name: string, + author: string, + description: string, + currentVersion: string, + latestVersion: string, + infoUrl: string, + downloadUrl: string + ) { this.id = id; this.name = name; this.author = author; @@ -36,7 +45,14 @@ export class RemotePlugin { isInstalled: boolean; lastUpdated: string; - constructor(base: BasePlugin, totalDownloads: number, category: string, filename: string, isInstalled: boolean, lastUpdated: string) { + constructor( + base: BasePlugin, + totalDownloads: number, + category: string, + filename: string, + isInstalled: boolean, + lastUpdated: string + ) { this.base = base; this.totalDownloads = totalDownloads; this.category = category; @@ -44,4 +60,4 @@ export class RemotePlugin { this.isInstalled = isInstalled; this.lastUpdated = lastUpdated; } -} \ No newline at end of file +} diff --git a/frontend/src/lib/entities/settings.ts b/frontend/src/lib/entities/settings.ts index 3376f3d..7364448 100644 --- a/frontend/src/lib/entities/settings.ts +++ b/frontend/src/lib/entities/settings.ts @@ -8,4 +8,4 @@ export class Settings { this.dataDirectory = dataDirectory; this.infoUrl = infoUrl; } -} \ No newline at end of file +} diff --git a/frontend/src/lib/wailsjs/go/models.ts b/frontend/src/lib/wailsjs/go/models.ts index 4a0e636..08ffce7 100755 --- a/frontend/src/lib/wailsjs/go/models.ts +++ b/frontend/src/lib/wailsjs/go/models.ts @@ -1,3 +1,110 @@ +export namespace entities { + + export class BasePluginEntity { + id: number; + name: string; + description: string; + author: string; + currentVersion: string; + latestVersion: string; + infoUrl: string; + downloadUrl: string; + + constructor(source: any = {}) { + if ('string' === typeof source) source = JSON.parse(source); + this.id = source['id']; + this.name = source['name']; + this.description = source['description']; + this.author = source['author']; + this.currentVersion = source['currentVersion']; + this.latestVersion = source['latestVersion']; + this.infoUrl = source['infoUrl']; + this.downloadUrl = source['downloadUrl']; + } + + static createFrom(source: any = {}) { + return new BasePluginEntity(source); + } + } + + export class LocalPluginEntity { + base: BasePluginEntity; + descriptors: string[]; + dependencies: number[]; + + constructor(source: any = {}) { + if ('string' === typeof source) source = JSON.parse(source); + this.base = this.convertValues(source['base'], BasePluginEntity); + this.descriptors = source['descriptors']; + this.dependencies = source['dependencies']; + } + + static createFrom(source: any = {}) { + return new LocalPluginEntity(source); + } + + convertValues(a: any, classs: any, asMap: boolean = false): any { + if (!a) { + return a; + } + if (a.slice) { + return (a as any[]).map(elem => this.convertValues(elem, classs)); + } else if ('object' === typeof a) { + if (asMap) { + for (const key of Object.keys(a)) { + a[key] = new classs(a[key]); + } + return a; + } + return new classs(a); + } + return a; + } + } + + export class RemotePluginEntity { + base: BasePluginEntity; + isInstalled: boolean; + updatedTimestamp: string; + downloads: number; + category: string; + file_name: string; + + constructor(source: any = {}) { + if ('string' === typeof source) source = JSON.parse(source); + this.base = this.convertValues(source['base'], BasePluginEntity); + this.isInstalled = source['isInstalled']; + this.updatedTimestamp = source['updatedTimestamp']; + this.downloads = source['downloads']; + this.category = source['category']; + this.file_name = source['file_name']; + } + + static createFrom(source: any = {}) { + return new RemotePluginEntity(source); + } + + convertValues(a: any, classs: any, asMap: boolean = false): any { + if (!a) { + return a; + } + if (a.slice) { + return (a as any[]).map(elem => this.convertValues(elem, classs)); + } else if ('object' === typeof a) { + if (asMap) { + for (const key of Object.keys(a)) { + a[key] = new classs(a[key]); + } + return a; + } + return new classs(a); + } + return a; + } + } + +} + export namespace settings { export class Settings { diff --git a/frontend/src/routes/+layout.svelte b/frontend/src/routes/+layout.svelte index 4ede496..8dd3a62 100644 --- a/frontend/src/routes/+layout.svelte +++ b/frontend/src/routes/+layout.svelte @@ -84,22 +84,41 @@

    Lembas

    @@ -107,5 +126,4 @@
    - - \ No newline at end of file + diff --git a/frontend/src/routes/+layout.ts b/frontend/src/routes/+layout.ts index d2c0be2..ceccaaf 100644 --- a/frontend/src/routes/+layout.ts +++ b/frontend/src/routes/+layout.ts @@ -1,2 +1,2 @@ export const prerender = true; -export const ssr = false; \ No newline at end of file +export const ssr = false; diff --git a/frontend/src/routes/+page.svelte b/frontend/src/routes/+page.svelte index 4508691..416ca81 100644 --- a/frontend/src/routes/+page.svelte +++ b/frontend/src/routes/+page.svelte @@ -1,111 +1,55 @@
    - -
    -

    {amountInstalledPlugins} plugins installed

    +

    {amountPlugins} plugins installed

    - +
    @@ -164,78 +95,21 @@
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    \ No newline at end of file + diff --git a/frontend/src/routes/+page.ts b/frontend/src/routes/+page.ts new file mode 100644 index 0000000..e3f9626 --- /dev/null +++ b/frontend/src/routes/+page.ts @@ -0,0 +1,8 @@ +import type { entities } from '$lib/wailsjs/go/models'; + +export function load(): { plugins: entities.LocalPluginEntity[]; amountPlugins: number } { + return { + plugins: [], + amountPlugins: 0 + }; +} diff --git a/frontend/src/routes/about/+page.svelte b/frontend/src/routes/about/+page.svelte index 60a6216..021f378 100644 --- a/frontend/src/routes/about/+page.svelte +++ b/frontend/src/routes/about/+page.svelte @@ -4,12 +4,22 @@

    Welcome to Lembas

    -

    Lembas is a completely free project that tries to make the plugin install process in LotRO as - easy as possible.\n - It's open source and shouldn't be used commercialized in any way. The project is heavily inspired by {BrowserOpenURL("https://github.com/ajour/ajour")}}>Ajour - which is, in my opinion, the best addon manager for WoW which was ever built.

    - -
    \ No newline at end of file + diff --git a/frontend/src/routes/catalog/+page.svelte b/frontend/src/routes/catalog/+page.svelte index 62e2f19..7389d8f 100644 --- a/frontend/src/routes/catalog/+page.svelte +++ b/frontend/src/routes/catalog/+page.svelte @@ -2,102 +2,61 @@ import '../../app.css'; import { GetRemotePlugins, InstallPlugin, SearchRemote } from '$lib/wailsjs/go/main/App'; import { BrowserOpenURL } from '$lib/wailsjs/runtime'; - import { BasePlugin, RemotePlugin } from '$lib/entities/plugin'; + import type { entities } from '$lib/wailsjs/go/models'; + import PluginRow from '$lib/components/catalog/PluginRow.svelte'; - let amountPlugins = 0; - let modifiedPlugins: RemotePlugin[]; - $: modifiedPlugins = []; - $: { - getRemotePlugin().then((v => { - modifiedPlugins = v; - })); - } + export let data: { plugins: entities.RemotePluginEntity[]; amountPlugins: number }; + let plugins = data.plugins; + let amountPlugins = data.amountPlugins; let searchInput = ''; - $: search(searchInput); - - function search(input: string) { - searchPlugins(input).then((v => { - modifiedPlugins = v; - })); - } + $: searchPlugins(searchInput); const searchPlugins = async (input: string) => { - const fetchedPlugins = await SearchRemote(input); - - let tmpArray: RemotePlugin[] = []; - - for (let i = 0; i < fetchedPlugins.length; i++) { - const element = fetchedPlugins[i]; - const time = new Date(element.UpdatedTimestamp * 1000).toLocaleDateString(); - - const basePlugin = new BasePlugin(element.Base.Id, element.Base.Name, element.Base.Author, element.Base.Description, element.Base.CurrentVersion, element.Base.LatestVersion, element.Base.InfoUrl, element.Base.DownloadUrl); - tmpArray.push(new RemotePlugin(basePlugin, element.Downloads, element.Category, element.FileName, element.IsInstalled, time)); - } - - amountPlugins = tmpArray.length; - - return tmpArray; + plugins = await SearchRemote(input); }; - const installPlugin = async (plugin: RemotePlugin) => { + const installPlugin = async (plugin: entities.RemotePluginEntity) => { if (!plugin.isInstalled) { - let fetchedPlugins = await InstallPlugin(plugin.base.downloadUrl); - if (fetchedPlugins === null) { - fetchedPlugins = []; - } - - let tmpArray: RemotePlugin[] = []; + const fetchedPlugins = await InstallPlugin(plugin.base.downloadUrl); - for (let i = 0; i < fetchedPlugins.length; i++) { - const element = fetchedPlugins[i]; - const time = new Date(element.UpdatedTimestamp * 1000).toLocaleDateString(); - - const basePlugin = new BasePlugin(element.Base.Id, element.Base.Name, element.Base.Author, element.Base.Description, element.Base.CurrentVersion, element.Base.LatestVersion, element.Base.InfoUrl, element.Base.DownloadUrl); - tmpArray.push(new RemotePlugin(basePlugin, element.Downloads, element.Category, element.FileName, element.IsInstalled, time)); - } - modifiedPlugins = tmpArray; + amountPlugins = fetchedPlugins.length; + plugins = fetchedPlugins; } }; const getRemotePlugin = async () => { const fetchedPlugins = await GetRemotePlugins(); - let tmpArray: RemotePlugin[] = []; - - for (let i = 0; i < fetchedPlugins.length; i++) { - const element = fetchedPlugins[i]; - const time = new Date(element.UpdatedTimestamp * 1000).toLocaleDateString(); - - const basePlugin = new BasePlugin(element.Base.Id, element.Base.Name, element.Base.Author, element.Base.Description, element.Base.CurrentVersion, element.Base.LatestVersion, element.Base.InfoUrl, element.Base.DownloadUrl); - tmpArray.push(new RemotePlugin(basePlugin, element.Downloads, element.Category, element.FileName, element.IsInstalled, time)); - } - - amountPlugins = tmpArray.length; - - return tmpArray; - }; - getRemotePlugin().then(() => { const labelDocument = document.getElementById('plugin-labels')!; const pluginListDocument = document.getElementById('plugin-list')!; - labelDocument.style.paddingRight = pluginListDocument.offsetWidth - pluginListDocument.clientWidth + 'px'; - }); + labelDocument.style.paddingRight = + pluginListDocument.offsetWidth - pluginListDocument.clientWidth + 'px'; + + amountPlugins = fetchedPlugins.length; + plugins = fetchedPlugins; + }; const openUrl = (url: string) => { BrowserOpenURL(url); }; - const UpdatePlugin = () => { + const updatePlugin = () => { console.log('Update'); }; + + getRemotePlugin();
    - +

    {amountPlugins} plugins found

    @@ -113,34 +72,32 @@
    - - \ No newline at end of file + diff --git a/frontend/src/routes/catalog/+page.ts b/frontend/src/routes/catalog/+page.ts new file mode 100644 index 0000000..e0094b9 --- /dev/null +++ b/frontend/src/routes/catalog/+page.ts @@ -0,0 +1,8 @@ +import type { entities } from '$lib/wailsjs/go/models'; + +export function load(): { plugins: entities.RemotePluginEntity[]; amountPlugins: number } { + return { + plugins: [], + amountPlugins: 0 + }; +} diff --git a/frontend/src/routes/interactions.ts b/frontend/src/routes/interactions.ts new file mode 100644 index 0000000..6ebfa04 --- /dev/null +++ b/frontend/src/routes/interactions.ts @@ -0,0 +1,43 @@ +export class ToggleState { + toggledItemId; + isToggled = false; + + constructor(itemId: string) { + this.toggledItemId = itemId; + } + + public toggle(index: number) { + if (this.isToggled) { + if (`details-${index}` !== this.toggledItemId) { + this.toggledItemId = `details-${index}`; + this.isToggled = false; + + this.show() + } else { + this.hide() + } + } else { + if ( + `details-${index}` !== this.toggledItemId || + (`details-${index}` === this.toggledItemId && !this.isToggled) + ) { + this.toggledItemId = `details-${index}`; + this.isToggled = false; + + this.show() + } + } + }; + + private hide() { + const element = document.getElementById(this.toggledItemId)!; + element.classList.add('hidden'); + this.isToggled = false; + } + + private show() { + const element = document.getElementById(this.toggledItemId)!; + element.classList.remove('hidden'); + this.isToggled = true; + } +} \ No newline at end of file diff --git a/frontend/src/routes/settings/+page.svelte b/frontend/src/routes/settings/+page.svelte index 2f4a1dc..5b89aba 100644 --- a/frontend/src/routes/settings/+page.svelte +++ b/frontend/src/routes/settings/+page.svelte @@ -14,23 +14,24 @@ function onChange(settings: Settings) { SaveSettings({ - 'pluginPath': settings.pluginPath, - 'dataDirectory': settings.dataDirectory, - 'infoUrl': settings.infoUrl + pluginPath: settings.pluginPath, + dataDirectory: settings.dataDirectory, + infoUrl: settings.infoUrl }); } getSettings(); - -
    - +
    @@ -39,7 +40,11 @@
    - +
    -
    \ No newline at end of file + diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js index 1366c7e..2fbf754 100644 --- a/frontend/tailwind.config.js +++ b/frontend/tailwind.config.js @@ -1,22 +1,21 @@ /** @type {import('tailwindcss').Config} */ export default { - content: ['./src/**/*.{html,js,svelte,ts}'], - theme: { - extend: {}, - borderWidth: { - "0": "0px", - "1": "1px" - }, - colors: { - "black": "#000000", - "primary": "#9FC200", - "primary-transparent": "rgba(159,194,0,0.2)", - "gold": "#EEA900", - "gold-transparent": "rgba(238,169,0,0.2)", - "light-brown": "#371f19", - "dark-brown": "rgb(36, 21, 18)" - } - }, - plugins: [], -} - + content: ['./src/**/*.{html,js,svelte,ts}'], + theme: { + extend: {}, + borderWidth: { + 0: '0px', + 1: '1px' + }, + colors: { + black: '#000000', + primary: '#9FC200', + 'primary-transparent': 'rgba(159,194,0,0.2)', + gold: '#EEA900', + 'gold-transparent': 'rgba(238,169,0,0.2)', + 'light-brown': '#371f19', + 'dark-brown': 'rgb(36, 21, 18)' + } + }, + plugins: [] +}; diff --git a/internal/entities/plugin.go b/internal/entities/plugin.go index 3f7a07c..c6814fa 100644 --- a/internal/entities/plugin.go +++ b/internal/entities/plugin.go @@ -1,27 +1,27 @@ package entities type BasePluginEntity struct { - Id int - Name string - Description string - Author string - CurrentVersion string - LatestVersion string - InfoUrl string - DownloadUrl string + Id int `json:"id"` + Name string `json:"name"` + Description string `json:"description"` + Author string `json:"author"` + CurrentVersion string `json:"currentVersion"` + LatestVersion string `json:"latestVersion"` + InfoUrl string `json:"infoUrl"` + DownloadUrl string `json:"downloadUrl"` } type LocalPluginEntity struct { - Base BasePluginEntity - Descriptors []string - Dependencies []int + Base BasePluginEntity `json:"base"` + Descriptors []string `json:"descriptors"` + Dependencies []int `json:"dependencies"` } type RemotePluginEntity struct { - Base BasePluginEntity - IsInstalled bool - UpdatedTimestamp int - Downloads int - Category string - FileName string + Base BasePluginEntity `json:"base"` + IsInstalled bool `json:"isInstalled"` + UpdatedTimestamp string `json:"updatedTimestamp"` + Downloads int `json:"downloads"` + Category string `json:"category"` + FileName string `json:"file_name"` } diff --git a/internal/models/remotePlugin.go b/internal/models/remotePlugin.go index 6ef659d..9517c13 100644 --- a/internal/models/remotePlugin.go +++ b/internal/models/remotePlugin.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/xml" "github.com/mawilms/lembas/internal/entities" + "time" ) type RemotePluginModel struct { @@ -41,7 +42,7 @@ func ParseFeed(content []byte) ([]entities.RemotePluginEntity, error) { Downloads: plugin.Downloads, Category: plugin.Category, FileName: plugin.FileName, - UpdatedTimestamp: plugin.UpdatedTimestamp, + UpdatedTimestamp: time.Unix(int64(plugin.UpdatedTimestamp), 0).Format("2006-01-02"), } plugins = append(plugins, remotePlugin) diff --git a/wails.json b/wails.json index 045eeb9..5f699ce 100644 --- a/wails.json +++ b/wails.json @@ -2,9 +2,9 @@ "$schema": "https://wails.io/schemas/config.v2.json", "name": "lembas", "outputfilename": "lembas", - "frontend:install": "npm install", - "frontend:build": "npm run build", - "frontend:dev:watcher": "npm run dev", + "frontend:install": "pnpm install", + "frontend:build": "pnpm run build", + "frontend:dev:watcher": "pnpm run dev", "frontend:dev:serverUrl": "auto", "wailsjsdir": "./frontend/src/lib", "author": {