diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..21f40155 --- /dev/null +++ b/.env.example @@ -0,0 +1,4 @@ +CMS_URL=http://localhost:3000 +TWENTY_AUTH="YOUR_TOKEN" +TWENTY_GRAPHQL_URL="https://twenty.youngvision.work/graphql" +SLACK_TOKEN="YOUR_TOKEN" diff --git a/.gitignore b/.gitignore index 2e01a69b..f38f53ae 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,5 @@ test-results/ # macOS-specific files .DS_Store + +.wrangler \ No newline at end of file diff --git a/astro.config.mjs b/astro.config.mjs index efa1758b..30f2a5be 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -1,3 +1,4 @@ +import cloudflare from '@astrojs/cloudflare'; import node from '@astrojs/node'; import svelte from '@astrojs/svelte'; import tailwindcss from '@tailwindcss/vite'; @@ -10,7 +11,9 @@ const adapter = PREVIEW ? node({ mode: 'standalone', }) - : undefined; + : cloudflare({ + imageService: 'compile', + }); // https://astro.build/config export default defineConfig({ @@ -31,9 +34,12 @@ export default defineConfig({ integrations: [svelte()], output: PREVIEW ? 'server' : 'static', server: ({ command }) => ({ port: command === 'dev' ? 5173 : 4321 }), - trailingSlash: 'never', + trailingSlash: 'ignore', vite: { + define: { + 'process.env': process.env, + }, plugins: [tailwindcss()], }, }); diff --git a/package.json b/package.json index 6fe30f1a..931c25e5 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "version": "0.0.1", "packageManager": "pnpm@10.12.1", "scripts": { - "dev": "CMS_URL='http://localhost:3000' astro dev", + "dev": "astro dev", "start": "astro dev", "build": "astro check && astro build", "preview": "astro preview", @@ -24,12 +24,15 @@ }, "dependencies": { "@astrojs/check": "0.9.4", + "@astrojs/cloudflare": "^12.5.4", "@astrojs/node": "9.2.2", "@astrojs/svelte": "7.0.13", "@astrojs/tailwind": "6.0.2", "@melt-ui/svelte": "0.86.6", "astro": "5.7.14", "clsx": "2.1.1", + "graphql": "^16.11.0", + "graphql-request": "^7.2.0", "qs": "6.14.0", "svelte": "5.34.3", "typescript": "5.8.3" @@ -68,6 +71,7 @@ "svelte-sequential-preprocessor": "2.0.2", "tailwindcss": "4.0.6", "typescript": "5.8.3", - "typescript-eslint": "8.34.0" + "typescript-eslint": "8.34.0", + "wrangler": "^4.20.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 24626333..786aeb78 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: '@astrojs/check': specifier: 0.9.4 version: 0.9.4(prettier-plugin-astro@0.14.1)(prettier@3.5.3)(typescript@5.8.3) + '@astrojs/cloudflare': + specifier: ^12.5.4 + version: 12.5.4(@types/node@22.15.32)(astro@5.7.14(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.40.1)(typescript@5.8.3)(yaml@2.7.0))(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.7.0) '@astrojs/node': specifier: 9.2.2 version: 9.2.2(astro@5.7.14(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.40.1)(typescript@5.8.3)(yaml@2.7.0)) @@ -29,6 +32,12 @@ importers: clsx: specifier: 2.1.1 version: 2.1.1 + graphql: + specifier: ^16.11.0 + version: 16.11.0 + graphql-request: + specifier: ^7.2.0 + version: 7.2.0(graphql@16.11.0) qs: specifier: 6.14.0 version: 6.14.0 @@ -135,6 +144,9 @@ importers: typescript-eslint: specifier: 8.34.0 version: 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + wrangler: + specifier: ^4.20.0 + version: 4.20.0(@cloudflare/workers-types@4.20250612.0) packages: @@ -148,6 +160,11 @@ packages: peerDependencies: typescript: ^5.0.0 + '@astrojs/cloudflare@12.5.4': + resolution: {integrity: sha512-WKUeMP2tIbddEu0tlVEPj8o9m/8CJB6who3a3jupuIyR56ltmW924ZOMYtp/C9uxH7KeDJXrMszRj3LHs9U97w==} + peerDependencies: + astro: ^5.0.0 + '@astrojs/compiler@2.10.3': resolution: {integrity: sha512-bL/O7YBxsFt55YHU021oL+xz+B/9HvGNId3F9xURN16aeqDK9juHGktdkCSXz+U4nqFACq6ZFvWomOzhV+zfPw==} @@ -199,6 +216,9 @@ packages: resolution: {integrity: sha512-SSVM820Jqc6wjsn7qYfV9qfeQvePtVc1nSofhyap7l0/iakUKywj3hfy3UJAOV4sGV4Q/u450RD4AaCaFvNPlg==} engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0} + '@astrojs/underscore-redirects@0.6.1': + resolution: {integrity: sha512-4bMLrs2KW+8/vHEE5Ffv2HbxCbbgXO+2N6MpoCsMXUlUoi7pgEEx8kbkzMXJ2dZtWF3gvwm9lvgjnFeanC2LGg==} + '@astrojs/yaml2ts@0.2.2': resolution: {integrity: sha512-GOfvSr5Nqy2z5XiwqTouBBpy5FyI6DEe+/g/Mk5am9SjILN1S5fOEvYK0GuWHg98yS/dobP4m8qyqw/URW35fQ==} @@ -222,6 +242,56 @@ packages: '@capsizecss/unpack@2.4.0': resolution: {integrity: sha512-GrSU71meACqcmIUxPYOJvGKF0yryjN/L1aCuE9DViCTJI7bfkjgYDPD1zbNDcINJwSSP6UaBZY9GAbYDO7re0Q==} + '@cloudflare/kv-asset-handler@0.4.0': + resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} + engines: {node: '>=18.0.0'} + + '@cloudflare/unenv-preset@2.3.2': + resolution: {integrity: sha512-MtUgNl+QkQyhQvv5bbWP+BpBC1N0me4CHHuP2H4ktmOMKdB/6kkz/lo+zqiA4mEazb4y+1cwyNjVrQ2DWeE4mg==} + peerDependencies: + unenv: 2.0.0-rc.17 + workerd: ^1.20250508.0 + peerDependenciesMeta: + workerd: + optional: true + + '@cloudflare/workerd-darwin-64@1.20250604.0': + resolution: {integrity: sha512-PI6AWAzhHg75KVhYkSWFBf3HKCHstpaKg4nrx6LYZaEvz0TaTz+JQpYU2fNAgGFmVsK5xEzwFTGh3DAVAKONPw==} + engines: {node: '>=16'} + cpu: [x64] + os: [darwin] + + '@cloudflare/workerd-darwin-arm64@1.20250604.0': + resolution: {integrity: sha512-hOiZZSop7QRQgGERtTIy9eU5GvPpIsgE2/BDsUdHMl7OBZ7QLniqvgDzLNDzj0aTkCldm9Yl/Z+C7aUgRdOccw==} + engines: {node: '>=16'} + cpu: [arm64] + os: [darwin] + + '@cloudflare/workerd-linux-64@1.20250604.0': + resolution: {integrity: sha512-S0R9r7U4nv9qejYygQj01hArC4KUbQQ4u29rvegR0MGoXZY8AHIEuJxon0kE7r7aWFJxvl4W3tOH+5hwW51LYw==} + engines: {node: '>=16'} + cpu: [x64] + os: [linux] + + '@cloudflare/workerd-linux-arm64@1.20250604.0': + resolution: {integrity: sha512-BTFU/rXpNy03wpeueI2P7q1vVjbg2V6mCyyFGqDqMn2gSVYXH1G0zFNolV13PQXa0HgaqM6oYnqtAxluqbA+kQ==} + engines: {node: '>=16'} + cpu: [arm64] + os: [linux] + + '@cloudflare/workerd-windows-64@1.20250604.0': + resolution: {integrity: sha512-tW/U9/qDmDZBeoEVcK5skb2uouVAMXMzt7o/uGvaIFLeZsQkOp4NBmvoQQd+nbOc7nVCJIwFoSMokd89AhzCkA==} + engines: {node: '>=16'} + cpu: [x64] + os: [win32] + + '@cloudflare/workers-types@4.20250612.0': + resolution: {integrity: sha512-3VsbEh0nqOWWH+jsJ2W41Ty6qlN1jQ+4R3lBA3gPor0U6LB3e4OA04jg7wyCyJmikBN6KsBcPRp3kj0es/9q2w==} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + '@emmetio/abbreviation@2.3.3': resolution: {integrity: sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==} @@ -252,150 +322,300 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.25.4': + resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.25.0': resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} engines: {node: '>=18'} cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.25.4': + resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.25.0': resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} engines: {node: '>=18'} cpu: [arm] os: [android] + '@esbuild/android-arm@0.25.4': + resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.25.0': resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} engines: {node: '>=18'} cpu: [x64] os: [android] + '@esbuild/android-x64@0.25.4': + resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.25.0': resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.25.4': + resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.25.0': resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.25.4': + resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.25.0': resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.25.4': + resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.25.0': resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.25.4': + resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.25.0': resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.25.4': + resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.25.0': resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} engines: {node: '>=18'} cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.25.4': + resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.25.0': resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.25.4': + resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.25.0': resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} engines: {node: '>=18'} cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.25.4': + resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.25.0': resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.25.4': + resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.25.0': resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.25.4': + resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.25.0': resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.25.4': + resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.25.0': resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} engines: {node: '>=18'} cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.25.4': + resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.25.0': resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.25.4': + resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-arm64@0.25.0': resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-arm64@0.25.4': + resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-x64@0.25.0': resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.4': + resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.25.0': resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.25.4': + resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.25.0': resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.25.4': + resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/sunos-x64@0.25.0': resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} engines: {node: '>=18'} cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.25.4': + resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.25.0': resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} engines: {node: '>=18'} cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.25.4': + resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.25.0': resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.25.4': + resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.25.0': resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} engines: {node: '>=18'} cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.25.4': + resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.4.1': resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -440,6 +660,10 @@ packages: resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + '@floating-ui/core@1.6.9': resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} @@ -449,6 +673,11 @@ packages: '@floating-ui/utils@0.2.9': resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + '@graphql-typed-document-node/core@3.2.0': + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -711,6 +940,9 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@melt-ui/pp@0.3.2': resolution: {integrity: sha512-xKkPvaIAFinklLXcQOpwZ8YSpqAFxykjWf8Y/fSJQwsixV/0rcFs07hJ49hJjPy5vItvw5Qa0uOjzFUbXzBypQ==} peerDependencies: @@ -1167,6 +1399,15 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + acorn@8.14.1: resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} engines: {node: '>=0.4.0'} @@ -1216,6 +1457,9 @@ packages: array-iterate@2.0.1: resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} + as-table@1.0.55: + resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} + astro-eslint-parser@1.2.2: resolution: {integrity: sha512-JepyLROIad6f44uyqMF6HKE2QbunNzp3mYKRcPoDGt0QkxXmH222FAFC64WTyQu2Kg8NNEXHTN/sWuUId9sSxw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1254,6 +1498,9 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + blake3-wasm@2.1.5: + resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} + blob-to-buffer@1.2.9: resolution: {integrity: sha512-BF033y5fN6OCofD3vgHmNtwZWRcq9NLyyxyILx9hfMy1sXYy4ojFl765hJ2lP0YaN2fuxPaLO2Vzzoxy0FLFFA==} @@ -1371,6 +1618,10 @@ packages: cookie-es@1.2.2: resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + cookie@1.0.2: resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} engines: {node: '>=18'} @@ -1398,6 +1649,9 @@ packages: engines: {node: '>=4'} hasBin: true + data-uri-to-buffer@2.0.2: + resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} + debug@4.4.0: resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} @@ -1538,6 +1792,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.25.4: + resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -1660,6 +1919,13 @@ packages: eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + exit-hook@2.2.1: + resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} + engines: {node: '>=6'} + + exsolve@1.0.5: + resolution: {integrity: sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -1758,6 +2024,9 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + get-source@2.0.12: + resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} + git-format-staged@3.1.1: resolution: {integrity: sha512-P749fkktaiAchFZKR7bgdvruzhvbcIDr1uRBrS9/Wdimb7wH1Twchz9gOixj8tUaHVMuXY/ckDojfOwV6AxgPA==} hasBin: true @@ -1773,6 +2042,9 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -1795,6 +2067,15 @@ packages: graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + graphql-request@7.2.0: + resolution: {integrity: sha512-0GR7eQHBFYz372u9lxS16cOtEekFlZYB2qOyq8wDvzRmdRSJ0mgUVX1tzNcIzk3G+4NY+mGtSz411wZdeDF/+A==} + peerDependencies: + graphql: 14 - 16 + + graphql@16.11.0: + resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + h3@1.15.1: resolution: {integrity: sha512-+ORaOBttdUm1E2Uu/obAyCguiI7MbBvsLTndc3gyK3zU+SYLoZXlyCP9Xgy0gikkGufFLTZXCXD6+4BsufnmHA==} @@ -2233,6 +2514,16 @@ packages: resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} engines: {node: '>= 0.6'} + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + + miniflare@4.20250604.1: + resolution: {integrity: sha512-HJQ9YhH0F0fI73Vsdy3PNVau+PfHZYK7trI5WJEcbfl5HzqhMU0DRNtA/G5EXQgiumkjrmbW4Zh1DVTtsqICPg==} + engines: {node: '>=18.0.0'} + hasBin: true + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -2254,6 +2545,10 @@ packages: muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + nanoid@3.3.8: resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -2381,6 +2676,12 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} @@ -2549,6 +2850,9 @@ packages: engines: {node: '>=14'} hasBin: true + printable-characters@1.0.42: + resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} + prismjs@1.29.0: resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} engines: {node: '>=6'} @@ -2746,13 +3050,24 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + stacktracey@2.1.8: + resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} + statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + stoppable@1.1.0: + resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} + engines: {node: '>=4', npm: '>=6'} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -2915,6 +3230,9 @@ packages: ufo@1.5.4: resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + ultrahtml@1.6.0: resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} @@ -2924,6 +3242,13 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici@5.29.0: + resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} + engines: {node: '>=14.0'} + + unenv@2.0.0-rc.17: + resolution: {integrity: sha512-B06u0wXkEd+o5gOCMl/ZHl5cfpYbDZKAT+HWTL+Hws6jWu7dCiqBBXXXzMFcFVJb8D4ytAnYmxJA83uwOQRSsg==} + unicode-properties@1.4.1: resolution: {integrity: sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==} @@ -3083,6 +3408,46 @@ packages: yaml: optional: true + vite@6.3.5: + resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@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.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + vitefu@1.0.6: resolution: {integrity: sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==} peerDependencies: @@ -3223,6 +3588,21 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + workerd@1.20250604.0: + resolution: {integrity: sha512-sHz9R1sxPpnyq3ptrI/5I96sYTMA2+Ljm75oJDbmEcZQwNyezpu9Emerzt3kzzjCJQqtdscGOidWv4RKGZXzAA==} + engines: {node: '>=16'} + hasBin: true + + wrangler@4.20.0: + resolution: {integrity: sha512-gxMLaSnYp3VLdGPZu4fc/9UlB7PnSVwni25v32NM9szG2yTt+gx5RunWzmoLplplIfEMkBuV3wA47vccNu7zcA==} + engines: {node: '>=18.0.0'} + hasBin: true + peerDependencies: + '@cloudflare/workers-types': ^4.20250604.0 + peerDependenciesMeta: + '@cloudflare/workers-types': + optional: true + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -3231,6 +3611,18 @@ packages: resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} engines: {node: '>=18'} + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + xxhash-wasm@1.1.0: resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} @@ -3279,6 +3671,9 @@ packages: resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} engines: {node: '>=18'} + youch@3.3.4: + resolution: {integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==} + zimmerframe@1.1.2: resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} @@ -3293,6 +3688,9 @@ packages: typescript: ^4.9.4 || ^5.0.2 zod: ^3 + zod@3.22.3: + resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==} + zod@3.24.2: resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} @@ -3317,6 +3715,30 @@ snapshots: - prettier - prettier-plugin-astro + '@astrojs/cloudflare@12.5.4(@types/node@22.15.32)(astro@5.7.14(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.40.1)(typescript@5.8.3)(yaml@2.7.0))(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.7.0)': + dependencies: + '@astrojs/internal-helpers': 0.6.1 + '@astrojs/underscore-redirects': 0.6.1 + '@cloudflare/workers-types': 4.20250612.0 + astro: 5.7.14(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.40.1)(typescript@5.8.3)(yaml@2.7.0) + tinyglobby: 0.2.13 + vite: 6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.7.0) + wrangler: 4.20.0(@cloudflare/workers-types@4.20250612.0) + transitivePeerDependencies: + - '@types/node' + - bufferutil + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - utf-8-validate + - yaml + '@astrojs/compiler@2.10.3': {} '@astrojs/compiler@2.11.0': {} @@ -3432,6 +3854,8 @@ snapshots: transitivePeerDependencies: - supports-color + '@astrojs/underscore-redirects@0.6.1': {} + '@astrojs/yaml2ts@0.2.2': dependencies: yaml: 2.7.0 @@ -3457,6 +3881,37 @@ snapshots: transitivePeerDependencies: - encoding + '@cloudflare/kv-asset-handler@0.4.0': + dependencies: + mime: 3.0.0 + + '@cloudflare/unenv-preset@2.3.2(unenv@2.0.0-rc.17)(workerd@1.20250604.0)': + dependencies: + unenv: 2.0.0-rc.17 + optionalDependencies: + workerd: 1.20250604.0 + + '@cloudflare/workerd-darwin-64@1.20250604.0': + optional: true + + '@cloudflare/workerd-darwin-arm64@1.20250604.0': + optional: true + + '@cloudflare/workerd-linux-64@1.20250604.0': + optional: true + + '@cloudflare/workerd-linux-arm64@1.20250604.0': + optional: true + + '@cloudflare/workerd-windows-64@1.20250604.0': + optional: true + + '@cloudflare/workers-types@4.20250612.0': {} + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + '@emmetio/abbreviation@2.3.3': dependencies: '@emmetio/scanner': 1.0.4 @@ -3488,78 +3943,153 @@ snapshots: '@esbuild/aix-ppc64@0.25.0': optional: true + '@esbuild/aix-ppc64@0.25.4': + optional: true + '@esbuild/android-arm64@0.25.0': optional: true + '@esbuild/android-arm64@0.25.4': + optional: true + '@esbuild/android-arm@0.25.0': optional: true + '@esbuild/android-arm@0.25.4': + optional: true + '@esbuild/android-x64@0.25.0': optional: true + '@esbuild/android-x64@0.25.4': + optional: true + '@esbuild/darwin-arm64@0.25.0': optional: true + '@esbuild/darwin-arm64@0.25.4': + optional: true + '@esbuild/darwin-x64@0.25.0': optional: true + '@esbuild/darwin-x64@0.25.4': + optional: true + '@esbuild/freebsd-arm64@0.25.0': optional: true + '@esbuild/freebsd-arm64@0.25.4': + optional: true + '@esbuild/freebsd-x64@0.25.0': optional: true + '@esbuild/freebsd-x64@0.25.4': + optional: true + '@esbuild/linux-arm64@0.25.0': optional: true + '@esbuild/linux-arm64@0.25.4': + optional: true + '@esbuild/linux-arm@0.25.0': optional: true + '@esbuild/linux-arm@0.25.4': + optional: true + '@esbuild/linux-ia32@0.25.0': optional: true + '@esbuild/linux-ia32@0.25.4': + optional: true + '@esbuild/linux-loong64@0.25.0': optional: true + '@esbuild/linux-loong64@0.25.4': + optional: true + '@esbuild/linux-mips64el@0.25.0': optional: true + '@esbuild/linux-mips64el@0.25.4': + optional: true + '@esbuild/linux-ppc64@0.25.0': optional: true + '@esbuild/linux-ppc64@0.25.4': + optional: true + '@esbuild/linux-riscv64@0.25.0': optional: true + '@esbuild/linux-riscv64@0.25.4': + optional: true + '@esbuild/linux-s390x@0.25.0': optional: true + '@esbuild/linux-s390x@0.25.4': + optional: true + '@esbuild/linux-x64@0.25.0': optional: true + '@esbuild/linux-x64@0.25.4': + optional: true + '@esbuild/netbsd-arm64@0.25.0': optional: true + '@esbuild/netbsd-arm64@0.25.4': + optional: true + '@esbuild/netbsd-x64@0.25.0': optional: true + '@esbuild/netbsd-x64@0.25.4': + optional: true + '@esbuild/openbsd-arm64@0.25.0': optional: true + '@esbuild/openbsd-arm64@0.25.4': + optional: true + '@esbuild/openbsd-x64@0.25.0': optional: true + '@esbuild/openbsd-x64@0.25.4': + optional: true + '@esbuild/sunos-x64@0.25.0': optional: true + '@esbuild/sunos-x64@0.25.4': + optional: true + '@esbuild/win32-arm64@0.25.0': optional: true + '@esbuild/win32-arm64@0.25.4': + optional: true + '@esbuild/win32-ia32@0.25.0': optional: true + '@esbuild/win32-ia32@0.25.4': + optional: true + '@esbuild/win32-x64@0.25.0': optional: true + '@esbuild/win32-x64@0.25.4': + optional: true + '@eslint-community/eslint-utils@4.4.1(eslint@9.29.0(jiti@2.4.2))': dependencies: eslint: 9.29.0(jiti@2.4.2) @@ -3609,6 +4139,8 @@ snapshots: '@eslint/core': 0.14.0 levn: 0.4.1 + '@fastify/busboy@2.1.1': {} + '@floating-ui/core@1.6.9': dependencies: '@floating-ui/utils': 0.2.9 @@ -3620,6 +4152,10 @@ snapshots: '@floating-ui/utils@0.2.9': {} + '@graphql-typed-document-node/core@3.2.0(graphql@16.11.0)': + dependencies: + graphql: 16.11.0 + '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.6': @@ -3810,6 +4346,11 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + '@melt-ui/pp@0.3.2(@melt-ui/svelte@0.86.6(svelte@5.34.3))(svelte@5.34.3)': dependencies: '@melt-ui/svelte': 0.86.6(svelte@5.34.3) @@ -4303,6 +4844,10 @@ snapshots: dependencies: acorn: 8.15.0 + acorn-walk@8.3.2: {} + + acorn@8.14.0: {} + acorn@8.14.1: {} acorn@8.15.0: {} @@ -4346,6 +4891,10 @@ snapshots: array-iterate@2.0.1: {} + as-table@1.0.55: + dependencies: + printable-characters: 1.0.42 + astro-eslint-parser@1.2.2: dependencies: '@astrojs/compiler': 2.11.0 @@ -4488,6 +5037,8 @@ snapshots: base64-js@1.5.1: {} + blake3-wasm@2.1.5: {} + blob-to-buffer@1.2.9: {} boxen@8.0.1: @@ -4606,6 +5157,8 @@ snapshots: cookie-es@1.2.2: {} + cookie@0.7.2: {} + cookie@1.0.2: {} cross-fetch@3.2.0: @@ -4636,6 +5189,8 @@ snapshots: cssesc@3.0.0: {} + data-uri-to-buffer@2.0.2: {} + debug@4.4.0: dependencies: ms: 2.1.3 @@ -4762,6 +5317,34 @@ snapshots: '@esbuild/win32-ia32': 0.25.0 '@esbuild/win32-x64': 0.25.0 + esbuild@0.25.4: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.4 + '@esbuild/android-arm': 0.25.4 + '@esbuild/android-arm64': 0.25.4 + '@esbuild/android-x64': 0.25.4 + '@esbuild/darwin-arm64': 0.25.4 + '@esbuild/darwin-x64': 0.25.4 + '@esbuild/freebsd-arm64': 0.25.4 + '@esbuild/freebsd-x64': 0.25.4 + '@esbuild/linux-arm': 0.25.4 + '@esbuild/linux-arm64': 0.25.4 + '@esbuild/linux-ia32': 0.25.4 + '@esbuild/linux-loong64': 0.25.4 + '@esbuild/linux-mips64el': 0.25.4 + '@esbuild/linux-ppc64': 0.25.4 + '@esbuild/linux-riscv64': 0.25.4 + '@esbuild/linux-s390x': 0.25.4 + '@esbuild/linux-x64': 0.25.4 + '@esbuild/netbsd-arm64': 0.25.4 + '@esbuild/netbsd-x64': 0.25.4 + '@esbuild/openbsd-arm64': 0.25.4 + '@esbuild/openbsd-x64': 0.25.4 + '@esbuild/sunos-x64': 0.25.4 + '@esbuild/win32-arm64': 0.25.4 + '@esbuild/win32-ia32': 0.25.4 + '@esbuild/win32-x64': 0.25.4 + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -4919,6 +5502,10 @@ snapshots: eventemitter3@5.0.1: {} + exit-hook@2.2.1: {} + + exsolve@1.0.5: {} + extend@3.0.2: {} fast-deep-equal@3.1.3: {} @@ -5022,6 +5609,11 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + get-source@2.0.12: + dependencies: + data-uri-to-buffer: 2.0.2 + source-map: 0.6.1 + git-format-staged@3.1.1: {} github-slugger@2.0.0: {} @@ -5034,6 +5626,8 @@ snapshots: dependencies: is-glob: 4.0.3 + glob-to-regexp@0.4.1: {} + globals@14.0.0: {} globals@15.15.0: {} @@ -5046,6 +5640,13 @@ snapshots: graphemer@1.4.0: {} + graphql-request@7.2.0(graphql@16.11.0): + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) + graphql: 16.11.0 + + graphql@16.11.0: {} + h3@1.15.1: dependencies: cookie-es: 1.2.2 @@ -5055,7 +5656,7 @@ snapshots: iron-webcrypto: 1.2.1 node-mock-http: 1.0.0 radix3: 1.1.2 - ufo: 1.5.4 + ufo: 1.6.1 uncrypto: 0.1.3 has-flag@4.0.0: {} @@ -5664,6 +6265,26 @@ snapshots: dependencies: mime-db: 1.54.0 + mime@3.0.0: {} + + miniflare@4.20250604.1: + dependencies: + '@cspotcode/source-map-support': 0.8.1 + acorn: 8.14.0 + acorn-walk: 8.3.2 + exit-hook: 2.2.1 + glob-to-regexp: 0.4.1 + sharp: 0.33.5 + stoppable: 1.1.0 + undici: 5.29.0 + workerd: 1.20250604.0 + ws: 8.18.0 + youch: 3.3.4 + zod: 3.22.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -5680,6 +6301,8 @@ snapshots: muggle-string@0.4.1: {} + mustache@4.2.0: {} + nanoid@3.3.8: {} nanoid@5.0.9: {} @@ -5719,7 +6342,7 @@ snapshots: dependencies: destr: 2.0.3 node-fetch-native: 1.6.6 - ufo: 1.5.4 + ufo: 1.6.1 ohash@2.0.11: {} @@ -5796,6 +6419,10 @@ snapshots: path-key@3.1.1: {} + path-to-regexp@6.3.0: {} + + pathe@2.0.3: {} + periscopic@3.1.0: dependencies: '@types/estree': 1.0.7 @@ -5894,6 +6521,8 @@ snapshots: prettier@3.5.3: {} + printable-characters@1.0.42: {} + prismjs@1.29.0: {} prompts@2.4.2: @@ -6123,7 +6752,6 @@ snapshots: '@img/sharp-wasm32': 0.33.5 '@img/sharp-win32-ia32': 0.33.5 '@img/sharp-win32-x64': 0.33.5 - optional: true sharp@0.34.2: dependencies: @@ -6208,10 +6836,19 @@ snapshots: source-map-js@1.2.1: {} + source-map@0.6.1: {} + space-separated-tokens@2.0.2: {} + stacktracey@2.1.8: + dependencies: + as-table: 1.0.55 + get-source: 2.0.12 + statuses@2.0.1: {} + stoppable@1.1.0: {} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -6392,12 +7029,26 @@ snapshots: ufo@1.5.4: {} + ufo@1.6.1: {} + ultrahtml@1.6.0: {} uncrypto@0.1.3: {} undici-types@6.21.0: {} + undici@5.29.0: + dependencies: + '@fastify/busboy': 2.1.1 + + unenv@2.0.0-rc.17: + dependencies: + defu: 6.1.4 + exsolve: 1.0.5 + ohash: 2.0.11 + pathe: 2.0.3 + ufo: 1.6.1 + unicode-properties@1.4.1: dependencies: base64-js: 1.5.1 @@ -6505,7 +7156,22 @@ snapshots: vite@6.3.4(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.7.0): dependencies: - esbuild: 0.25.0 + esbuild: 0.25.4 + fdir: 6.4.4(picomatch@4.0.2) + picomatch: 4.0.2 + postcss: 8.5.3 + rollup: 4.40.1 + tinyglobby: 0.2.13 + optionalDependencies: + '@types/node': 22.15.32 + fsevents: 2.3.3 + jiti: 2.4.2 + lightningcss: 1.29.1 + yaml: 2.7.0 + + vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.7.0): + dependencies: + esbuild: 0.25.4 fdir: 6.4.4(picomatch@4.0.2) picomatch: 4.0.2 postcss: 8.5.3 @@ -6653,6 +7319,31 @@ snapshots: word-wrap@1.2.5: {} + workerd@1.20250604.0: + optionalDependencies: + '@cloudflare/workerd-darwin-64': 1.20250604.0 + '@cloudflare/workerd-darwin-arm64': 1.20250604.0 + '@cloudflare/workerd-linux-64': 1.20250604.0 + '@cloudflare/workerd-linux-arm64': 1.20250604.0 + '@cloudflare/workerd-windows-64': 1.20250604.0 + + wrangler@4.20.0(@cloudflare/workers-types@4.20250612.0): + dependencies: + '@cloudflare/kv-asset-handler': 0.4.0 + '@cloudflare/unenv-preset': 2.3.2(unenv@2.0.0-rc.17)(workerd@1.20250604.0) + blake3-wasm: 2.1.5 + esbuild: 0.25.4 + miniflare: 4.20250604.1 + path-to-regexp: 6.3.0 + unenv: 2.0.0-rc.17 + workerd: 1.20250604.0 + optionalDependencies: + '@cloudflare/workers-types': 4.20250612.0 + fsevents: 2.3.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -6665,6 +7356,8 @@ snapshots: string-width: 7.2.0 strip-ansi: 7.1.0 + ws@8.18.0: {} + xxhash-wasm@1.1.0: {} y18n@5.0.8: {} @@ -6712,6 +7405,12 @@ snapshots: yoctocolors@2.1.1: {} + youch@3.3.4: + dependencies: + cookie: 0.7.2 + mustache: 4.2.0 + stacktracey: 2.1.8 + zimmerframe@1.1.2: {} zod-to-json-schema@3.24.5(zod@3.24.2): @@ -6723,6 +7422,8 @@ snapshots: typescript: 5.8.3 zod: 3.24.2 + zod@3.22.3: {} + zod@3.24.2: {} zwitch@2.0.4: {} diff --git a/src/assets/support-us/Jonas.png b/src/assets/support-us/Jonas.png new file mode 100644 index 00000000..4f393c5d Binary files /dev/null and b/src/assets/support-us/Jonas.png differ diff --git a/src/components/Calendar.svelte b/src/components/Calendar.svelte index e103f32a..56c7f7e3 100644 --- a/src/components/Calendar.svelte +++ b/src/components/Calendar.svelte @@ -1,9 +1,10 @@ @@ -59,7 +65,8 @@ --> {#each events as event, index (event.title)}
  • - + diff --git a/src/components/mockTween.ts b/src/components/mockTween.ts new file mode 100644 index 00000000..3d0b7d7d --- /dev/null +++ b/src/components/mockTween.ts @@ -0,0 +1,19 @@ +export default class Tween { + current: T; + target: T; + + constructor(initial: T) { + this.current = initial; + this.target = initial; + } + + set(target: T) { + this.current = target; + this.target = target; + } + + subscribe(callback: (value: T) => void) { + callback(this.current); + callback(this.target); + } +} diff --git a/src/components/support-us/BecomeSupportingMember.astro b/src/components/support-us/BecomeSupportingMember.astro index 55073ec2..c362a0ab 100644 --- a/src/components/support-us/BecomeSupportingMember.astro +++ b/src/components/support-us/BecomeSupportingMember.astro @@ -1,44 +1,33 @@ --- -import Background from '@assets/support-us/background-supporting-member.png'; -import Button from '@components/Button.astro'; -import { getImage } from 'astro:assets'; +import { getFoundraisingProgress } from '@data/real/fundraising'; -import Disclosure from './Disclosure.svelte'; +import FundraisingInfo from './FundraisingInfo.svelte'; +import FundraisingProgress from './FundraisingProgress.svelte'; +import SupportForm from './SupportForm.svelte'; -const backgroundImage = await getImage({ height: 1080, src: Background, width: 1920 }); +const foundraisingProgress = await getFoundraisingProgress(); --- -
    +

    Werde Fördermitglied

    - Deine Chance uns zu unterstützen und mehr über uns zu erfahren! + Deine Chance, junge Menschen zu unterstützen!

    -

    - Du willst junge Menschen auf ihrer Reise zur persönlichen Entwicklung und zur aktiven - Gestaltung unserer Gesellschaft begleiten? Erfahre hier, wie du uns unterstützen kannst! -

    -
    - - diff --git a/src/components/support-us/DonationMethods.astro b/src/components/support-us/DonationMethods.astro index a49f69a4..c4d0d0fa 100644 --- a/src/components/support-us/DonationMethods.astro +++ b/src/components/support-us/DonationMethods.astro @@ -1,49 +1,31 @@ --- -import JakobPortrait from '@assets/team-members/jakob-portait.jpeg'; +import JonasPortrait from '@assets/support-us/Jonas.png'; import Button from '@components/Button.astro'; -import { getDonationMethods } from '@data/real/donations'; import { Image } from 'astro:assets'; - -import DonationMethodList from './DonationMethodList.svelte'; -import DonationMethodTabs from './DonationMethodTabs.svelte'; - -const possibilities = await getDonationMethods(); --- -
    -
    -

    Weitere Möglichkeiten, uns zu unterstützen

    -

    - Deine Unterstützung ist der Schlüssel, um unsere Mission voranzutreiben und jungen Menschen - transformative Erfahrungen zu ermöglichen. Neben finanziellen Spenden gibt es auch andere - wertvolle Wege, wie du uns unterstützen kannst: -

    - - - -
    - +
    -

    Falls sie Fragen haben!

    +

    Falls du Fragen hast!

    Jakob
    Ansprechpartner
    -
    Jakob Voigt
    +
    Jonas Bulik
    Email
    - jakob.voigt@youngvision.orgjonas@youngvision.org
    diff --git a/src/components/support-us/FundraisingInfo.svelte b/src/components/support-us/FundraisingInfo.svelte new file mode 100644 index 00000000..3423d9d8 --- /dev/null +++ b/src/components/support-us/FundraisingInfo.svelte @@ -0,0 +1,63 @@ + + +
    +

    + Du willst junge Menschen auf ihrer Reise zur persönlichen Entwicklung und zur aktiven Gestaltung + unserer Gesellschaft unterstützen? +

    + {#if $open} +
    +

    + Uns gibt es für alle jungen Menschen aus eurem Leben. Eure Kinder, Enkel und Freund:innen. + Viele von uns fühlen sich orientierungslos, überfordert, einsam und verlieren die Hoffnung + in eine lebenswerte Zukunft. +

    +

    + Mit deiner Hilfe werden wir eine halbe Stelle einrichten. Diese wird unsere Struktur + professionalisieren und uns ermöglichen mehr Menschen mit unserer Arbeit zu erreichen. Wir + werden noch diesen Herbst einen Workshop zum Thema "Purpose" organisieren, um zu + Orientierung in unserem Leben und in Gemeinschaft zu forschen. +

    +
    + {/if} + + +
    diff --git a/src/components/support-us/FundraisingProgress.svelte b/src/components/support-us/FundraisingProgress.svelte new file mode 100644 index 00000000..087e88f5 --- /dev/null +++ b/src/components/support-us/FundraisingProgress.svelte @@ -0,0 +1,255 @@ + + +
    +
    + + {#if !finished} + + + + + + + + + + + + {/if} + + {#if currentProgress <= middleProgress} + + + {middleProgress}€ + {/if} + {currentProgress}€ + +
    +
    +

    + pro Monat
    +

    +

    + Dank {peopleCount} Menschen +

    +
    +
    +
    + +

    Ziele

    +
    = middleProgress ? 'flex-col-reverse' : 'flex-col', // Show next unfulfilled target first + ]} + > +
    = middleProgress && 'text-dark-green', + 'lg:absolute lg:top-[88px] lg:right-1/3 lg:w-48', + ]} + > +

    + {middleProgress}€ / Monat + {#if currentProgress >= middleProgress} + + + {/if} +

    +

    Rebecca kann ihren Job aufhören um ihre Zeit YV zu widmen.

    +
    +
    = targetProgress && 'text-dark-green', + 'lg:absolute lg:top-1/8 lg:right-0 lg:w-48', + ]} + > +

    + {targetProgress}€ / Monat + {#if currentProgress >= targetProgress} + + + {/if} +

    +

    Hiermit muss Rebecca keinen Minijob nebenbei machen.

    +
    +
    +
    diff --git a/src/components/support-us/Hero.astro b/src/components/support-us/Hero.astro index 760e25fd..69d22124 100644 --- a/src/components/support-us/Hero.astro +++ b/src/components/support-us/Hero.astro @@ -5,11 +5,20 @@ import { getImage } from 'astro:assets'; const SupportUsHeroBackgroundUrl = await getImage({ src: SupportUsHeroBackground }); --- -
    -

    Unterstütze Uns

    +
    +

    + Unterstütze Uns +

    diff --git a/src/components/support-us/Spinner.svelte b/src/components/support-us/Spinner.svelte new file mode 100644 index 00000000..708f9c75 --- /dev/null +++ b/src/components/support-us/Spinner.svelte @@ -0,0 +1,16 @@ + diff --git a/src/components/support-us/SupportForm.svelte b/src/components/support-us/SupportForm.svelte new file mode 100644 index 00000000..97742e49 --- /dev/null +++ b/src/components/support-us/SupportForm.svelte @@ -0,0 +1,516 @@ + + +{#if !showForm} +
    + {#if submitResult == 'success'} +

    Vielen Dank für deine Spende ❤️

    + {:else} + + {/if} +
    +{:else} +
    +
    +
    +
    +

    Persönliche Informationen

    + +
    +
    + +
    + +
    +
    + +
    + +
    + +
    +
    + +
    + +
    + +
    +
    + +
    + Bevorzugte Sprache +

    + Diese Sprache wird für alle Kommunikation verwendet.
    This language will be used + for all communication. +

    +
    +
    + + +
    +
    + + +
    +
    + {#if formData.preferredLanguage !== 'GERMAN'} +

    + Sorry for not offering our website in english yet. We are working on it! +

    + {/if} +
    + + +
    +

    Adresse

    +
    +
    + +
    + +
    +
    + +
    + +
    + +
    +
    +
    + +
    + +
    +
    + +
    + +
    + +
    +
    +
    +
    +
    +
    + +
    +

    Förderbeitrag und Bankdaten

    +

    + Bitte gib deine Bankdaten für die Einzugsermächtigung an. +

    + +
    +
    + +
    + {#each contributionOptions as option (option.value)} + + {/each} +
    + { + const newCustomContribution = Number((e.target as HTMLInputElement).value); + if (!(newCustomContribution >= 0)) { + customContribution = false; + customContributionValue = null; + } else { + customContribution = true; + customContributionValue = newCustomContribution; + } + formData.contribution = newCustomContribution; + }} + onfocus={() => { + customContribution = true; + }} + onblur={() => { + if (customContributionValue == null || customContributionValue <= 0) { + customContribution = false; + customContributionValue = null; + } else if ( + contributionOptions.some( + (option) => option.value === customContributionValue, + ) + ) { + customContribution = false; + formData.contribution = customContributionValue; + customContributionValue = null; + } + }} + min="1" + class={[ + 'focus:ring-dark-green block h-full w-full rounded-md border px-4 py-2.5 text-center transition-colors focus:ring-2 focus:ring-offset-2 focus:outline-none', + customContribution + ? 'border-dark-green bg-dark-green text-white' + : 'border-gray-300 bg-white text-gray-700', + ]} + value={customContributionValue} + placeholder="Anderer Betrag" + /> +
    + +
    +
    + +
    + +
    + +
    +
    + +
    + +
    + +

    + (Nur bei ausländischen Konten notwendig) +

    +
    +
    +
    + +
    +

    SEPA Lastschriftmandat

    +

    + Ich ermächtige den Verein YoungVision e.V. wiederkehrend Zahlungen von meinem Konto + mittels Lastschrift einzuziehen. Zugleich weise ich mein Kredit­institut an, die von + der YoungVision e.V. auf mein Konto gezogenen Lastschriften einzulösen. +

    +

    + Gläubiger Identifikationsnummer: DE05ZZZ00001731620 +
    + Mandatsreferenz: wird separat mitgeteilt +

    +
    +
    + +
    +
    + +
    + +

    + Auf unserer Vereinswebsite + würden wir uns gerne bei dir bedanken.
    + Ich bin damit einverstanden, dass ich namentlich genannt werden. +

    +
    +
    + +
    + +
    + +
    +

    + Ich bin damit einverstanden, dass meine Daten von der Organisation "YoungVision + e.V." zum Zweck der Vertragserfüllung im Rahmen der Mitgliedschaft hinterlegt, + verarbeitet und genutzt werden. +

    +

    + Ich bin darauf hingewiesen worden, dass die im Rahmen der vorstehend genannten + Zwecke erhobenen personenbezogenen Daten unter Beachtung der + EU-Datenschutzgrundverordnung erhoben, verarbeitet, genutzt und übermittelt + werden. Ich wurde über meine Rechte als Betroffener unterrichtet. +

    +

    + Die Einverständniserklärung erfolgt auf freiwilliger Basis. Ich wurde darüber + aufgeklärt, dass ich die Einverständniserklärung jederzeit durch schriftliche + Mitteilung für die Zukunft widerrufen kann. +

    +
    +
    +
    +
    +
    + + {#if submitResult == 'error'} +
    +

    + Das hat nicht geklappt 😟 +
    + Bitte versuche es noch einmal oder schreibe uns an + kontakt@youngvision.org +

    +
    + {/if} +
    + +
    +
    +
    +{/if} diff --git a/src/components/support-us/progress.store.ts b/src/components/support-us/progress.store.ts new file mode 100644 index 00000000..4703aebc --- /dev/null +++ b/src/components/support-us/progress.store.ts @@ -0,0 +1,10 @@ +import { writable } from 'svelte/store'; + +const currentProgress = writable<{ + amount: number; + people: number; +}>({ + amount: 0, + people: 0, +}); +export default currentProgress; diff --git a/src/data/real/donations.ts b/src/data/real/donations.ts index 80593d14..2aecdaf1 100644 --- a/src/data/real/donations.ts +++ b/src/data/real/donations.ts @@ -44,7 +44,7 @@ export async function getDonationMethods() { icon: await optimizeImage(HeadLightbulb), image: await optimizeImage(ExpertiseImage), text: 'Du hast Lust YoungVision mit deiner Expertise voranzubringen?', - title: 'Expertise Spenden', + title: 'Expertise teilen', }, { description: 'Du möchtest uns mit einer Sachspende unterszützen?', diff --git a/src/data/real/fundraising.ts b/src/data/real/fundraising.ts new file mode 100644 index 00000000..fe9a255b --- /dev/null +++ b/src/data/real/fundraising.ts @@ -0,0 +1,37 @@ +import { gql, GraphQLClient } from 'graphql-request'; + +export interface FoundraisingProgress { + amount: number; + count: number; +} + +interface ResponseData { + fordermitgliedschaften: { + sumMonatlicherForderbeitragAmountMicros: number; + totalCount: number; + }; +} + +export async function getFoundraisingProgress(): Promise { + const graphQLClient = new GraphQLClient(import.meta.env.TWENTY_GRAPHQL_URL, { + headers: { + Authorization: 'Bearer ' + import.meta.env.TWENTY_AUTH, + 'Content-Type': 'application/json', + }, + }); + //TODO: also count foredermigliedschften that end in the futer + const query = gql` + { + fordermitgliedschaften(filter: { austrittdatum: { is: NULL } }) { + totalCount + sumMonatlicherForderbeitragAmountMicros + } + } + `; + const data = await graphQLClient.request(query); + console.log(data); + return { + amount: data.fordermitgliedschaften.sumMonatlicherForderbeitragAmountMicros / 1000000, + count: data.fordermitgliedschaften.totalCount, + }; +} diff --git a/src/pages/api/support-us.ts b/src/pages/api/support-us.ts new file mode 100644 index 00000000..21ca69e1 --- /dev/null +++ b/src/pages/api/support-us.ts @@ -0,0 +1,160 @@ +export const prerender = false; +import type { APIRoute } from 'astro'; + +import { gql, GraphQLClient } from 'graphql-request'; + +const config = { + SLACK_TOKEN: import.meta.env.SLACK_TOKEN, + TWENTY_AUTH: import.meta.env.TWENTY_AUTH, + TWENTY_GRAPHQL_URL: import.meta.env.TWENTY_GRAPHQL_URL, +}; +const missingConfig = Object.entries(config).filter(([_, v]) => !v); +if (missingConfig.length > 0) { + console.error( + 'Missing environment variables:', + missingConfig.map(([k, _]) => k), + ); + throw new Error('Missing configuration'); +} + +export const POST: APIRoute = async ({ request }) => { + const requiredFields = [ + 'agreement', + 'firstName', + 'lastName', + 'email', + 'streetAddress', + 'city', + 'postalCode', + 'country', + 'iban', + 'contribution', + 'nameMention', + 'preferredLanguage', + ]; + + console.log('Config:', config); + + const graphQLClient = new GraphQLClient(config.TWENTY_GRAPHQL_URL, { + headers: { + Authorization: `Bearer ${config.TWENTY_AUTH}`, + 'Content-Type': 'application/json', + }, + }); + try { + console.log(request.body); + const data = await request.formData(); + console.log('Data: ', data); + + // send form data to slack + const dataObj = Object.fromEntries(data.entries()); + const payload = { + channel: 'C091N6B162E', + text: JSON.stringify(dataObj, null, 2), + }; + const slackApiResponse = await fetch('https://slack.com/api/chat.postMessage', { + body: JSON.stringify(payload), + headers: { + Authorization: `Bearer ${config.SLACK_TOKEN}`, + 'Content-Type': 'application/json; charset=utf-8', + }, + method: 'POST', + }); + + console.log('SlackApiResponse: ', await slackApiResponse.json()); + + // Check if any required fields are missing + const missingFields = requiredFields.filter((field) => data.get(field) === null); + console.log('Missing fields:', missingFields); + if (missingFields.length > 0) { + return new Response( + JSON.stringify({ + fields: missingFields, + message: 'Missing required field(s)', + }), + { + headers: { + 'Content-Type': 'application/json', + }, + status: 400, + }, + ); + } + + const bic = data.get('bic'); + const personData = { + adresse: { + addressCity: data.get('city'), + addressCountry: data.get('country'), + addressPostcode: data.get('postalCode'), + addressStreet1: data.get('streetAddress'), + }, + consentNameMention: data.get('nameMention') === 'true', + emails: { primaryEmail: data.get('email') }, + name: { firstName: data.get('firstName'), lastName: data.get('lastName') }, + preferredLanguage: data.get('preferredLanguage'), + }; + console.log('Person data:', personData); + + const fordermitgliedschaftData = { + fullName: { firstName: data.get('firstName'), lastName: data.get('lastName') }, + iban: data.get('iban'), + monatlicherForderbeitrag: { + amountMicros: Number(data.get('contribution') ?? 0) * 1000000, + currencyCode: 'EUR', + }, + ...(bic ? { bic } : {}), + beitrittsdatum: new Date().toJSON(), + }; + console.log('Fördermitgliedschaft data:', fordermitgliedschaftData); + + // With the replace method the the quotes from the property keys (from JSON) are removed, because graphql requires them unquoted + const mutation = gql` + mutation SupportFromMutation( + $personData: PersonCreateInput + $fordermitgliedschaftData: FordermitgliedschaftCreateInput + ) { + createPerson(data: $personData) { + id + createdAt + } + createFordermitgliedschaft(data: $fordermitgliedschaftData) { + id + createdAt + } + } + `; + console.log(mutation); + const variables = { + fordermitgliedschaftData, + personData, + }; + //TODO: link the Fordermitgliedschaft with the person + interface ResponseData { + createPerson: { + createdAt: string; + id: string; + }; + } + const response = await graphQLClient.request(mutation, variables); + console.log(response); + } catch (error) { + console.error(error); + if (error instanceof Error) { + console.error(error.message); + } + return new Response( + JSON.stringify({ + message: 'error', + }), + { status: 500 }, + ); + } + console.log('Success!'); + return new Response( + JSON.stringify({ + message: 'Success!', + }), + { status: 200 }, + ); +}; diff --git a/src/pages/support-us.astro b/src/pages/support-us.astro index 8c3c4032..ee65bc47 100644 --- a/src/pages/support-us.astro +++ b/src/pages/support-us.astro @@ -3,6 +3,9 @@ import BecomeSupportingMember from '@components/support-us/BecomeSupportingMembe import DonationMethods from '@components/support-us/DonationMethods.astro'; import Hero from '@components/support-us/Hero.astro'; import Layout from '@layouts/Layout.astro'; +export const prerender = false; + +Astro.response.headers.set('Cache-Control', 'public, max-age=1800'); --- diff --git a/src/styles/global.css b/src/styles/global.css index 1f07d3f9..14a517fc 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -9,7 +9,6 @@ 'Segoe UI Symbol', 'Noto Color Emoji'; --font-serif: source-serif-pro, ui-serif, Georgia, Cambria, 'Times New Roman', Times, serif; - --color-*: initial; --color-black: #000; --color-white: #fff;