diff --git a/package.json b/package.json index 31b218229b..343078b119 100644 --- a/package.json +++ b/package.json @@ -20,18 +20,20 @@ }, "devDependencies": { "@melt-ui/pp": "^0.1.4", - "@melt-ui/svelte": "^0.60.2", + "@melt-ui/svelte": "^0.65.0", "@playwright/test": "^1.40.0", "@sveltejs/adapter-node": "^1.3.1", "@sveltejs/adapter-static": "^2.0.3", + "@sveltejs/adapter-vercel": "^4.0.3", "@sveltejs/enhanced-img": "^0.1.2", - "@sveltejs/kit": "^1.27.6", + "@sveltejs/kit": "^1.27.7", "@types/compression": "^1.7.5", "@types/glob": "^8.1.0", "@types/markdown-it": "^13.0.7", "@types/morgan": "^1.9.9", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", + "appwrite": "^13.0.1", "eslint": "^8.54.0", "eslint-config-prettier": "^8.10.0", "eslint-plugin-svelte": "^2.35.1", @@ -45,6 +47,7 @@ "svelte-check": "^3.6.0", "svelte-markdoc-preprocess": "^1.1.3", "svelte-sequential-preprocessor": "^2.0.1", + "sveltekit-search-params": "^1.0.16", "svgo": "^3.0.4", "svgtofont": "^4.0.0", "tslib": "^2.6.2", @@ -60,12 +63,15 @@ "@appwrite.io/pink-icons": "0.1.0-next.9", "@appwrite.io/repo": "github:appwrite/appwrite#main", "@splinetool/viewer": "0.9.455", + "ai": "^2.2.27", "compression": "^1.7.4", "express": "^4.18.2", "highlight.js": "^11.9.0", "markdown-it": "^13.0.2", "meilisearch": "^0.35.1", "motion": "^10.16.4", - "sharp": "^0.32.6" + "openai": "^4.20.1", + "sharp": "^0.32.6", + "svelte-markdown": "^0.4.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 654ea7d0c6..879c431764 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,6 +17,9 @@ dependencies: '@splinetool/viewer': specifier: 0.9.455 version: 0.9.455 + ai: + specifier: ^2.2.27 + version: 2.2.30(react@18.2.0)(solid-js@1.8.7)(svelte@4.2.7)(vue@3.4.3) compression: specifier: ^1.7.4 version: 1.7.4 @@ -35,32 +38,41 @@ dependencies: motion: specifier: ^10.16.4 version: 10.16.4 + openai: + specifier: ^4.20.1 + version: 4.24.1 sharp: specifier: ^0.32.6 version: 0.32.6 + svelte-markdown: + specifier: ^0.4.0 + version: 0.4.1(svelte@4.2.7) devDependencies: '@melt-ui/pp': specifier: ^0.1.4 - version: 0.1.4(@melt-ui/svelte@0.60.2)(svelte@4.2.7) + version: 0.1.4(@melt-ui/svelte@0.65.2)(svelte@4.2.7) '@melt-ui/svelte': - specifier: ^0.60.2 - version: 0.60.2(svelte@4.2.7) + specifier: ^0.65.0 + version: 0.65.2(svelte@4.2.7) '@playwright/test': specifier: ^1.40.0 version: 1.40.0 '@sveltejs/adapter-node': specifier: ^1.3.1 - version: 1.3.1(@sveltejs/kit@1.27.6) + version: 1.3.1(@sveltejs/kit@1.30.3) '@sveltejs/adapter-static': specifier: ^2.0.3 - version: 2.0.3(@sveltejs/kit@1.27.6) + version: 2.0.3(@sveltejs/kit@1.30.3) + '@sveltejs/adapter-vercel': + specifier: ^4.0.3 + version: 4.0.3(@sveltejs/kit@1.30.3) '@sveltejs/enhanced-img': specifier: ^0.1.2 version: 0.1.5(svelte@4.2.7) '@sveltejs/kit': - specifier: ^1.27.6 - version: 1.27.6(svelte@4.2.7)(vite@4.5.1) + specifier: ^1.27.7 + version: 1.30.3(svelte@4.2.7)(vite@4.5.1) '@types/compression': specifier: ^1.7.5 version: 1.7.5 @@ -79,6 +91,9 @@ devDependencies: '@typescript-eslint/parser': specifier: ^5.62.0 version: 5.62.0(eslint@8.54.0)(typescript@5.3.2) + appwrite: + specifier: ^13.0.1 + version: 13.0.1 eslint: specifier: ^8.54.0 version: 8.54.0 @@ -114,10 +129,13 @@ devDependencies: version: 3.6.0(postcss@8.4.31)(sass@1.69.5)(svelte@4.2.7) svelte-markdoc-preprocess: specifier: ^1.1.3 - version: 1.1.3 + version: 1.1.3(react@18.2.0) svelte-sequential-preprocessor: specifier: ^2.0.1 version: 2.0.1 + sveltekit-search-params: + specifier: ^1.0.16 + version: 1.1.1(@sveltejs/kit@1.30.3)(svelte@4.2.7) svgo: specifier: ^3.0.4 version: 3.0.4 @@ -156,7 +174,6 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.20 - dev: true /@appwrite.io/pink-icons@0.1.0-next.9: resolution: {integrity: sha512-6t4Pqt/xugjpJQyaMx1u/7Gt9CkW5iItDAgUKcIMm84E4NbDJq8ZdAhhvctGQQppKUgHDPi+6x1XveUUd7tdbg==} @@ -174,6 +191,24 @@ packages: resolution: {integrity: sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==} dev: true + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/parser@7.23.6: + resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.6 + dev: false + /@babel/runtime@7.23.4: resolution: {integrity: sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg==} engines: {node: '>=6.9.0'} @@ -181,6 +216,24 @@ packages: regenerator-runtime: 0.14.0 dev: true + /@babel/types@7.23.6: + resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: false + + /@esbuild/aix-ppc64@0.19.11: + resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm64@0.18.20: resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} @@ -190,6 +243,15 @@ packages: dev: true optional: true + /@esbuild/android-arm64@0.19.11: + resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm@0.18.20: resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} @@ -199,6 +261,15 @@ packages: dev: true optional: true + /@esbuild/android-arm@0.19.11: + resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-x64@0.18.20: resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} @@ -208,6 +279,15 @@ packages: dev: true optional: true + /@esbuild/android-x64@0.19.11: + resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-arm64@0.18.20: resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} @@ -217,6 +297,15 @@ packages: dev: true optional: true + /@esbuild/darwin-arm64@0.19.11: + resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-x64@0.18.20: resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} @@ -226,6 +315,15 @@ packages: dev: true optional: true + /@esbuild/darwin-x64@0.19.11: + resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-arm64@0.18.20: resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} @@ -235,6 +333,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-arm64@0.19.11: + resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-x64@0.18.20: resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} @@ -244,6 +351,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-x64@0.19.11: + resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm64@0.18.20: resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} @@ -253,6 +369,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm64@0.19.11: + resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm@0.18.20: resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} @@ -262,6 +387,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm@0.19.11: + resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ia32@0.18.20: resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} @@ -271,6 +405,15 @@ packages: dev: true optional: true + /@esbuild/linux-ia32@0.19.11: + resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-loong64@0.18.20: resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} @@ -280,6 +423,15 @@ packages: dev: true optional: true + /@esbuild/linux-loong64@0.19.11: + resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-mips64el@0.18.20: resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} @@ -289,6 +441,15 @@ packages: dev: true optional: true + /@esbuild/linux-mips64el@0.19.11: + resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ppc64@0.18.20: resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} @@ -298,6 +459,15 @@ packages: dev: true optional: true + /@esbuild/linux-ppc64@0.19.11: + resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-riscv64@0.18.20: resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} @@ -307,6 +477,15 @@ packages: dev: true optional: true + /@esbuild/linux-riscv64@0.19.11: + resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-s390x@0.18.20: resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} @@ -316,6 +495,15 @@ packages: dev: true optional: true + /@esbuild/linux-s390x@0.19.11: + resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-x64@0.18.20: resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} @@ -325,6 +513,15 @@ packages: dev: true optional: true + /@esbuild/linux-x64@0.19.11: + resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/netbsd-x64@0.18.20: resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} @@ -334,6 +531,15 @@ packages: dev: true optional: true + /@esbuild/netbsd-x64@0.19.11: + resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/openbsd-x64@0.18.20: resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} @@ -343,6 +549,15 @@ packages: dev: true optional: true + /@esbuild/openbsd-x64@0.19.11: + resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/sunos-x64@0.18.20: resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} @@ -352,6 +567,15 @@ packages: dev: true optional: true + /@esbuild/sunos-x64@0.19.11: + resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-arm64@0.18.20: resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} @@ -361,6 +585,15 @@ packages: dev: true optional: true + /@esbuild/win32-arm64@0.19.11: + resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-ia32@0.18.20: resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} @@ -370,6 +603,15 @@ packages: dev: true optional: true + /@esbuild/win32-ia32@0.19.11: + resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-x64@0.18.20: resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} @@ -379,6 +621,15 @@ packages: dev: true optional: true + /@esbuild/win32-x64@0.19.11: + resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.54.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -462,6 +713,12 @@ packages: resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} dev: true + /@internationalized/date@3.5.1: + resolution: {integrity: sha512-LUQIfwU9e+Fmutc/DpRTGXSdgYZLBegi4wygCWDSVmUdLTaMHsQyASDiJtREwanwKuQLq0hY76fCJ9J/9I2xOQ==} + dependencies: + '@swc/helpers': 0.5.3 + dev: true + /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -863,28 +1120,23 @@ packages: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.20 - dev: true /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true /@jridgewell/trace-mapping@0.3.20: resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - dev: true /@lit-labs/ssr-dom-shim@1.1.2: resolution: {integrity: sha512-jnOD+/+dSrfTWYfSXBXlo5l5f0q1UuJo3tkbMDCYA2lKUYq79jaxqtGEvnRoh049nt1vdo1+45RinipU6FGY2g==} @@ -896,7 +1148,25 @@ packages: '@lit-labs/ssr-dom-shim': 1.1.2 dev: false - /@markdoc/markdoc@0.3.5: + /@mapbox/node-pre-gyp@1.0.11: + resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} + hasBin: true + dependencies: + detect-libc: 2.0.2 + https-proxy-agent: 5.0.1 + make-dir: 3.1.0 + node-fetch: 2.7.0 + nopt: 5.0.0 + npmlog: 5.0.1 + rimraf: 3.0.2 + semver: 7.5.4 + tar: 6.2.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@markdoc/markdoc@0.3.5(react@18.2.0): resolution: {integrity: sha512-Z3agu2wnodoOYd5kzKbtwZduSfX19Kbsg/FlK0TeMn29cTTEEVPJtjfgKSMTN/Wq+kUQXnPtOEhHRgke5d/Xiw==} engines: {node: '>=14.7.0'} peerDependencies: @@ -907,29 +1177,32 @@ packages: optional: true react: optional: true + dependencies: + react: 18.2.0 optionalDependencies: '@types/markdown-it': 12.2.3 dev: true - /@melt-ui/pp@0.1.4(@melt-ui/svelte@0.60.2)(svelte@4.2.7): + /@melt-ui/pp@0.1.4(@melt-ui/svelte@0.65.2)(svelte@4.2.7): resolution: {integrity: sha512-zR+Kl3CZJPJBHW8V7YcdQCMI/dVcnW9Ct3yGbVaIywYVStVRS7F9uEDOea3xLLT2WTGodQePzPlUn53yKFu87g==} engines: {pnpm: '>=8.6.3'} peerDependencies: '@melt-ui/svelte': '>= 0.29.0' svelte: ^3.55.0 || ^4.0.0 || ^5.0.0-next.1 dependencies: - '@melt-ui/svelte': 0.60.2(svelte@4.2.7) + '@melt-ui/svelte': 0.65.2(svelte@4.2.7) estree-walker: 3.0.3 svelte: 4.2.7 dev: true - /@melt-ui/svelte@0.60.2(svelte@4.2.7): - resolution: {integrity: sha512-dBGW7dIDBMYchCH0Fx9byqrCYtpkXX1QUGXdv1e2aQE20bDCrQqwVSV0/1iWuJVYyFeo2xUdr0/LVZJ6lOw4mg==} + /@melt-ui/svelte@0.65.2(svelte@4.2.7): + resolution: {integrity: sha512-BpsSl9Bjp1++8U3+LaDOFUoX/PFQ9N7QWFhlFdUEZduhrbVyU70v9A459SKrQ+esFSjvh1AvqJYkMAUJXJlAmQ==} peerDependencies: svelte: '>=3 <5' dependencies: '@floating-ui/core': 1.5.0 '@floating-ui/dom': 1.5.3 + '@internationalized/date': 3.5.1 dequal: 2.0.3 focus-trap: 7.5.4 nanoid: 4.0.2 @@ -1229,6 +1502,14 @@ packages: rollup: 3.29.4 dev: true + /@rollup/pluginutils@4.2.1: + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + dev: true + /@rollup/pluginutils@5.0.5(rollup@3.29.4): resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} engines: {node: '>=14.0.0'} @@ -1254,7 +1535,7 @@ packages: lit: 2.8.0 dev: false - /@sveltejs/adapter-node@1.3.1(@sveltejs/kit@1.27.6): + /@sveltejs/adapter-node@1.3.1(@sveltejs/kit@1.30.3): resolution: {integrity: sha512-A0VgRQDCDPzdLNoiAbcOxGw4zT1Mc+n1LwT1OmO350R7WxrEqdMUChPPOd1iMfIDWlP4ie6E2d/WQf5es2d4Zw==} peerDependencies: '@sveltejs/kit': ^1.0.0 @@ -1262,16 +1543,29 @@ packages: '@rollup/plugin-commonjs': 25.0.7(rollup@3.29.4) '@rollup/plugin-json': 6.0.1(rollup@3.29.4) '@rollup/plugin-node-resolve': 15.2.3(rollup@3.29.4) - '@sveltejs/kit': 1.27.6(svelte@4.2.7)(vite@4.5.1) + '@sveltejs/kit': 1.30.3(svelte@4.2.7)(vite@4.5.1) rollup: 3.29.4 dev: true - /@sveltejs/adapter-static@2.0.3(@sveltejs/kit@1.27.6): + /@sveltejs/adapter-static@2.0.3(@sveltejs/kit@1.30.3): resolution: {integrity: sha512-VUqTfXsxYGugCpMqQv1U0LIdbR3S5nBkMMDmpjGVJyM6Q2jHVMFtdWJCkeHMySc6mZxJ+0eZK3T7IgmUCDrcUQ==} peerDependencies: '@sveltejs/kit': ^1.5.0 dependencies: - '@sveltejs/kit': 1.27.6(svelte@4.2.7)(vite@4.5.1) + '@sveltejs/kit': 1.30.3(svelte@4.2.7)(vite@4.5.1) + dev: true + + /@sveltejs/adapter-vercel@4.0.3(@sveltejs/kit@1.30.3): + resolution: {integrity: sha512-pd2XVsDcjQ6XdHJVLeyYK9Mh2k5ChrlXEPAy7pGMbbgRkkWHnzIF5kZJqpsMH7jIFS2nxXBkUEwTpvSexKZzeQ==} + peerDependencies: + '@sveltejs/kit': ^2.0.0 + dependencies: + '@sveltejs/kit': 1.30.3(svelte@4.2.7)(vite@4.5.1) + '@vercel/nft': 0.26.0 + esbuild: 0.19.11 + transitivePeerDependencies: + - encoding + - supports-color dev: true /@sveltejs/enhanced-img@0.1.5(svelte@4.2.7): @@ -1285,8 +1579,8 @@ packages: - svelte dev: true - /@sveltejs/kit@1.27.6(svelte@4.2.7)(vite@4.5.1): - resolution: {integrity: sha512-GsjTkMbKzXdbeRg0tk8S7HNShQ4879ftRr0ZHaZfjbig1xQwG57Bvcm9U9/mpLJtCapLbLWUnygKrgcLISLC8A==} + /@sveltejs/kit@1.30.3(svelte@4.2.7)(vite@4.5.1): + resolution: {integrity: sha512-0DzVXfU4h+tChFvoc8C61IqErCyskD4ydSIDjpKS2lYlEzIYrtYrY7juSqACFxqcvZAnOEXvSY+zZ8br0+ZMMg==} engines: {node: ^16.14 || >=18} hasBin: true requiresBuild: true @@ -1349,6 +1643,12 @@ packages: - supports-color dev: true + /@swc/helpers@0.5.3: + resolution: {integrity: sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==} + dependencies: + tslib: 2.6.2 + dev: true + /@tokenizer/token@0.3.0: resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} dev: true @@ -1408,7 +1708,6 @@ packages: /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: true /@types/express-serve-static-core@4.17.41: resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} @@ -1476,6 +1775,10 @@ packages: '@types/mdurl': 1.0.5 dev: true + /@types/marked@5.0.2: + resolution: {integrity: sha512-OucS4KMHhFzhz27KxmWg7J+kIYqyqoW5kdIEI319hqARQQUTqhao3M/F+uFnDXD0Rg72iDDZxZNxq5gvctmLlg==} + dev: false + /@types/mdurl@1.0.5: resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==} dev: true @@ -1498,15 +1801,27 @@ packages: '@types/node': 20.9.3 dev: true + /@types/node-fetch@2.6.10: + resolution: {integrity: sha512-PPpPK6F9ALFTn59Ka3BaL+qGuipRfxNE8qVgkp0bVixeiR2c2/L+IVOiBdu9JhhT22sWnQEp6YyHGI2b2+CMcA==} + dependencies: + '@types/node': 20.9.3 + form-data: 4.0.0 + dev: false + /@types/node@16.9.1: resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} dev: true + /@types/node@18.19.4: + resolution: {integrity: sha512-xNzlUhzoHotIsnFoXmJB+yWmBvFZgKCI9TtPIEdYIMM1KWfwuY8zh7wvc1u1OAXlC7dlf6mZVx/s+Y5KfFz19A==} + dependencies: + undici-types: 5.26.5 + dev: false + /@types/node@20.9.3: resolution: {integrity: sha512-nk5wXLAXGBKfrhLB0cyHGbSqopS+nz0BUgZkUQqSHSSgdee0kssp1IAqlQOu333bW+gMNs2QREx7iynm19Abxw==} dependencies: undici-types: 5.26.5 - dev: true /@types/pug@2.0.10: resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==} @@ -1709,6 +2024,28 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true + /@vercel/nft@0.26.0: + resolution: {integrity: sha512-4JoDL1jMPoPb9PpilQx7IQwxDUYCSwnonN8GrR6bP2BVJR390toF/tJe20tcI+wDWPkJKJqNloipfaeQfTeU2w==} + engines: {node: '>=18'} + hasBin: true + dependencies: + '@mapbox/node-pre-gyp': 1.0.11 + '@rollup/pluginutils': 4.2.1 + acorn: 8.11.2 + acorn-import-attributes: 1.9.2(acorn@8.11.2) + async-sema: 3.1.1 + bindings: 1.5.0 + estree-walker: 2.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + node-gyp-build: 4.7.0 + resolve-from: 5.0.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + /@vitest/expect@0.32.4: resolution: {integrity: sha512-m7EPUqmGIwIeoU763N+ivkFjTzbaBn0n9evsTOcde03ugy2avPs3kZbYmw3DkcH1j5mxhMhdamJkLQ6dM1bk/A==} dependencies: @@ -1747,6 +2084,79 @@ packages: pretty-format: 29.7.0 dev: true + /@vue/compiler-core@3.4.3: + resolution: {integrity: sha512-u8jzgFg0EDtSrb/hG53Wwh1bAOQFtc1ZCegBpA/glyvTlgHl+tq13o1zvRfLbegYUw/E4mSTGOiCnAJ9SJ+lsg==} + dependencies: + '@babel/parser': 7.23.6 + '@vue/shared': 3.4.3 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.0.2 + dev: false + + /@vue/compiler-dom@3.4.3: + resolution: {integrity: sha512-oGF1E9/htI6JWj/lTJgr6UgxNCtNHbM6xKVreBWeZL9QhRGABRVoWGAzxmtBfSOd+w0Zi5BY0Es/tlJrN6WgEg==} + dependencies: + '@vue/compiler-core': 3.4.3 + '@vue/shared': 3.4.3 + dev: false + + /@vue/compiler-sfc@3.4.3: + resolution: {integrity: sha512-NuJqb5is9I4uzv316VRUDYgIlPZCG8D+ARt5P4t5UDShIHKL25J3TGZAUryY/Aiy0DsY7srJnZL5ryB6DD63Zw==} + dependencies: + '@babel/parser': 7.23.6 + '@vue/compiler-core': 3.4.3 + '@vue/compiler-dom': 3.4.3 + '@vue/compiler-ssr': 3.4.3 + '@vue/shared': 3.4.3 + estree-walker: 2.0.2 + magic-string: 0.30.5 + postcss: 8.4.32 + source-map-js: 1.0.2 + dev: false + + /@vue/compiler-ssr@3.4.3: + resolution: {integrity: sha512-wnYQtMBkeFSxgSSQbYGQeXPhQacQiog2c6AlvMldQH6DB+gSXK/0F6DVXAJfEiuBSgBhUc8dwrrG5JQcqwalsA==} + dependencies: + '@vue/compiler-dom': 3.4.3 + '@vue/shared': 3.4.3 + dev: false + + /@vue/reactivity@3.4.3: + resolution: {integrity: sha512-q5f9HLDU+5aBKizXHAx0w4whkIANs1Muiq9R5YXm0HtorSlflqv9u/ohaMxuuhHWCji4xqpQ1eL04WvmAmGnFg==} + dependencies: + '@vue/shared': 3.4.3 + dev: false + + /@vue/runtime-core@3.4.3: + resolution: {integrity: sha512-C1r6QhB1qY7D591RCSFhMULyzL9CuyrGc+3PpB0h7dU4Qqw6GNyo4BNFjHZVvsWncrUlKX3DIKg0Y7rNNr06NQ==} + dependencies: + '@vue/reactivity': 3.4.3 + '@vue/shared': 3.4.3 + dev: false + + /@vue/runtime-dom@3.4.3: + resolution: {integrity: sha512-wrsprg7An5Ec+EhPngWdPuzkp0BEUxAKaQtN9dPU/iZctPyD9aaXmVtehPJerdQxQale6gEnhpnfywNw3zOv2A==} + dependencies: + '@vue/runtime-core': 3.4.3 + '@vue/shared': 3.4.3 + csstype: 3.1.3 + dev: false + + /@vue/server-renderer@3.4.3(vue@3.4.3): + resolution: {integrity: sha512-BUxt8oVGMKKsqSkM1uU3d3Houyfy4WAc2SpSQRebNd+XJGATVkW/rO129jkyL+kpB/2VRKzE63zwf5RtJ3XuZw==} + peerDependencies: + vue: 3.4.3 + dependencies: + '@vue/compiler-ssr': 3.4.3 + '@vue/shared': 3.4.3 + vue: 3.4.3(typescript@5.3.2) + dev: false + + /@vue/shared@3.4.3: + resolution: {integrity: sha512-rIwlkkP1n4uKrRzivAKPZIEkHiuwY5mmhMJ2nZKCBLz8lTUlE73rQh4n1OnnMurXt1vcUNyH4ZPfdh8QweTjpQ==} + dev: false + /@xmldom/xmldom@0.7.13: resolution: {integrity: sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==} engines: {node: '>=10.0.0'} @@ -1756,6 +2166,13 @@ packages: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} dev: true + /abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 + dev: false + /accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -1764,6 +2181,14 @@ packages: negotiator: 0.6.3 dev: false + /acorn-import-attributes@1.9.2(acorn@8.11.2): + resolution: {integrity: sha512-O+nfJwNolEA771IYJaiLWK1UAwjNsQmZbTRqqwBYxCgVQTmpFEMvBw6LOIQV0Me339L5UMVYFyRohGnGlQDdIQ==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.11.2 + dev: true + /acorn-jsx@5.3.2(acorn@8.11.2): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1781,7 +2206,6 @@ packages: resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} @@ -1797,7 +2221,6 @@ packages: engines: {node: '>= 8.0.0'} dependencies: humanize-ms: 1.2.1 - dev: true /aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} @@ -1807,6 +2230,37 @@ packages: indent-string: 4.0.0 dev: true + /ai@2.2.30(react@18.2.0)(solid-js@1.8.7)(svelte@4.2.7)(vue@3.4.3): + resolution: {integrity: sha512-7dRgnEbYkbVjxyjiS7WEhNvO8ebeI4Om74D9OKXLK0yis4+s272pJ5I3vOAv3HaUBbVEiIFYQ7E34JH8XT1EeQ==} + engines: {node: '>=14.6'} + peerDependencies: + react: ^18.2.0 + solid-js: ^1.7.7 + svelte: ^3.0.0 || ^4.0.0 + vue: ^3.3.4 + peerDependenciesMeta: + react: + optional: true + solid-js: + optional: true + svelte: + optional: true + vue: + optional: true + dependencies: + eventsource-parser: 1.0.0 + nanoid: 3.3.6 + react: 18.2.0 + solid-js: 1.8.7 + solid-swr-store: 0.10.7(solid-js@1.8.7)(swr-store@0.10.6) + sswr: 2.0.0(svelte@4.2.7) + svelte: 4.2.7 + swr: 2.2.0(react@18.2.0) + swr-store: 0.10.6 + swrv: 1.0.4(vue@3.4.3) + vue: 3.4.3(typescript@5.3.2) + dev: false + /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: @@ -1864,10 +2318,27 @@ packages: picomatch: 2.3.1 dev: true + /appwrite@13.0.1: + resolution: {integrity: sha512-kdOLB5Qbr2beQW72diA/dx8L16LywHcQV1H6oqgGtf64Mo6LsvyIM1hEVxWmFLwAXMaOtsqb7Mcs4+oQHo+WmQ==} + dependencies: + cross-fetch: 3.1.5 + isomorphic-form-data: 2.0.0 + transitivePeerDependencies: + - encoding + dev: true + /aproba@2.0.0: resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} dev: true + /are-we-there-yet@2.0.0: + resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} + engines: {node: '>=10'} + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + dev: true + /are-we-there-yet@3.0.1: resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -1883,7 +2354,6 @@ packages: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} dependencies: dequal: 2.0.3 - dev: true /arr-diff@4.0.0: resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} @@ -1923,10 +2393,17 @@ packages: engines: {node: '>=0.10.0'} dev: true + /async-sema@3.1.1: + resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} + dev: true + /async@3.2.5: resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} dev: true + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + /atob@2.1.2: resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} engines: {node: '>= 4.5.0'} @@ -1950,7 +2427,6 @@ packages: resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} dependencies: dequal: 2.0.3 - dev: true /b4a@1.6.4: resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==} @@ -1959,6 +2435,10 @@ packages: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true + /base-64@0.1.0: + resolution: {integrity: sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==} + dev: false + /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -2176,6 +2656,10 @@ packages: supports-color: 7.2.0 dev: true + /charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + dev: false + /check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} dependencies: @@ -2276,7 +2760,6 @@ packages: acorn: 8.11.2 estree-walker: 3.0.3 periscopic: 3.1.0 - dev: true /collection-visit@1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} @@ -2318,6 +2801,12 @@ packages: hasBin: true dev: true + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} @@ -2416,6 +2905,14 @@ packages: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true + /cross-fetch@3.1.5: + resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} + dependencies: + node-fetch: 2.6.7 + transitivePeerDependencies: + - encoding + dev: true + /cross-fetch@3.1.8: resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} dependencies: @@ -2433,6 +2930,10 @@ packages: which: 2.0.2 dev: true + /crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + dev: false + /css-select@5.1.0: resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} dependencies: @@ -2457,7 +2958,6 @@ packages: dependencies: mdn-data: 2.0.30 source-map-js: 1.0.2 - dev: true /css-what@6.1.0: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} @@ -2477,6 +2977,10 @@ packages: css-tree: 2.2.1 dev: true + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + dev: false + /cubic2quad@1.2.1: resolution: {integrity: sha512-wT5Y7mO8abrV16gnssKdmIhIbA9wSkeMzhh27jAguKrV82i24wER0vL5TGhUJ9dbJNDcigoRZ0IAHFEEEI4THQ==} dev: true @@ -2579,6 +3083,10 @@ packages: slash: 3.0.0 dev: true + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + /delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} dev: true @@ -2591,7 +3099,6 @@ packages: /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - dev: true /destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} @@ -2616,6 +3123,13 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true + /digest-fetch@1.3.0: + resolution: {integrity: sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==} + dependencies: + base-64: 0.1.0 + md5: 2.3.0 + dev: false + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -2715,7 +3229,6 @@ packages: /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - dev: true /env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} @@ -2764,6 +3277,37 @@ packages: '@esbuild/win32-x64': 0.18.20 dev: true + /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.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: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -2932,13 +3476,11 @@ packages: /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: true /estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: '@types/estree': 1.0.5 - dev: true /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} @@ -2950,6 +3492,16 @@ packages: engines: {node: '>= 0.6'} dev: false + /event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + dev: false + + /eventsource-parser@1.0.0: + resolution: {integrity: sha512-9jgfSCa3dmEme2ES3mPByGXfgZ87VbP97tng1G2nWwWx6bV2nYxm2AWCrbQjXToSe+yYlqaZNtxffR9IeQr95g==} + engines: {node: '>=14.18'} + dev: false + /exif-parser@0.1.12: resolution: {integrity: sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==} dev: true @@ -3177,6 +3729,36 @@ packages: signal-exit: 4.1.0 dev: true + /form-data-encoder@1.7.2: + resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} + dev: false + + /form-data@2.5.1: + resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} + engines: {node: '>= 0.12'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: true + + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /formdata-node@4.4.1: + resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} + engines: {node: '>= 12.20'} + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 4.0.0-beta.3 + dev: false + /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -3236,6 +3818,21 @@ packages: /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + /gauge@3.0.2: + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + dev: true + /gauge@4.0.4: resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -3526,7 +4123,6 @@ packages: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} dependencies: ms: 2.1.3 - dev: true /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} @@ -3641,7 +4237,6 @@ packages: /is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - dev: true /is-builtin-module@3.2.1: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} @@ -3759,7 +4354,6 @@ packages: resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} dependencies: '@types/estree': 1.0.5 - dev: true /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} @@ -3786,6 +4380,12 @@ packages: engines: {node: '>=0.10.0'} dev: true + /isomorphic-form-data@2.0.0: + resolution: {integrity: sha512-TYgVnXWeESVmQSg4GLVbalmQ+B4NPi/H4eWxqALKj63KsUrcu301YDjBqaOw3h+cbak7Na4Xyps3BiptHtxTfg==} + dependencies: + form-data: 2.5.1 + dev: true + /jackspeak@2.3.6: resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} engines: {node: '>=14'} @@ -3825,6 +4425,9 @@ packages: resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} dev: true + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -3965,7 +4568,6 @@ packages: /locate-character@3.0.0: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} - dev: true /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} @@ -3982,6 +4584,12 @@ packages: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + /loupe@2.3.7: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} dependencies: @@ -4020,6 +4628,12 @@ packages: engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 + + /make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.1 dev: true /make-fetch-happen@10.2.1: @@ -4070,6 +4684,12 @@ packages: uc.micro: 1.0.6 dev: false + /marked@5.1.2: + resolution: {integrity: sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==} + engines: {node: '>= 16'} + hasBin: true + dev: false + /maxstache-stream@1.0.4: resolution: {integrity: sha512-v8qlfPN0pSp7bdSoLo1NTjG43GXGqk5W2NWFnOCq2GlmFFqebGzPCjLKSbShuqIOVorOtZSAy7O/S1OCCRONUw==} dependencies: @@ -4083,13 +4703,20 @@ packages: resolution: {integrity: sha512-53ZBxHrZM+W//5AcRVewiLpDunHnucfdzZUGz54Fnvo4tE+J3p8EL66kBrs2UhBXvYKTWckWYYWBqJqoTcenqg==} dev: true + /md5@2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + dev: false + /mdn-data@2.0.28: resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} dev: true /mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - dev: true /mdurl@1.0.1: resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} @@ -4158,14 +4785,12 @@ packages: /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} - dev: false /mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 - dev: false /mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} @@ -4357,11 +4982,16 @@ packages: resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==} dev: true + /nanoid@3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: false + /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - dev: true /nanoid@4.0.2: resolution: {integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==} @@ -4428,6 +5058,23 @@ packages: /node-addon-api@6.1.0: resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} + /node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + dev: false + + /node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: true + /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -4438,14 +5085,12 @@ packages: optional: true dependencies: whatwg-url: 5.0.0 - dev: false /node-gyp-build@4.7.0: resolution: {integrity: sha512-PbZERfeFdrHQOOXiAKOY0VPbykZy90ndPKk0d+CFDegTKmWp1VgOTz2xACVbr1BjCWxrQp68CXtvNsveFhqDJg==} hasBin: true requiresBuild: true dev: true - optional: true /node-gyp@9.4.1: resolution: {integrity: sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==} @@ -4472,6 +5117,14 @@ packages: resolution: {integrity: sha512-2bu7Pfpf6uNqashWV8P7yYeutQ3XkLY9MBSYI5sOAFZxuWcW/uJfLbKj5m6SvMDT9U1Y0C+7UFG+7VSiIdXjtA==} dev: true + /nopt@5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + dependencies: + abbrev: 1.1.1 + dev: true + /nopt@6.0.0: resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -4489,6 +5142,15 @@ packages: resolution: {integrity: sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==} dev: false + /npmlog@5.0.1: + resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + dependencies: + are-we-there-yet: 2.0.0 + console-control-strings: 1.1.0 + gauge: 3.0.2 + set-blocking: 2.0.0 + dev: true + /npmlog@6.0.2: resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -4558,6 +5220,23 @@ packages: dependencies: wrappy: 1.0.2 + /openai@4.24.1: + resolution: {integrity: sha512-ezm/O3eiZMnyBqirUnWm9N6INJU1WhNtz+nK/Zj/2oyKvRz9pgpViDxa5wYOtyGYXPn1sIKBV0I/S4BDhtydqw==} + hasBin: true + dependencies: + '@types/node': 18.19.4 + '@types/node-fetch': 2.6.10 + abort-controller: 3.0.0 + agentkeepalive: 4.5.0 + digest-fetch: 1.3.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0 + web-streams-polyfill: 3.2.1 + transitivePeerDependencies: + - encoding + dev: false + /openapi-types@12.1.3: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} dev: true @@ -4748,7 +5427,6 @@ packages: '@types/estree': 1.0.5 estree-walker: 3.0.3 is-reference: 3.0.2 - dev: true /phin@2.9.3: resolution: {integrity: sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==} @@ -4756,7 +5434,6 @@ packages: /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -4870,6 +5547,15 @@ packages: source-map-js: 1.0.2 dev: true + /postcss@8.4.32: + resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: false + /prebuild-install@7.1.1: resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} engines: {node: '>=10'} @@ -5012,6 +5698,12 @@ packages: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true + /react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + /readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: @@ -5093,6 +5785,11 @@ packages: engines: {node: '>=4'} dev: true + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + /resolve-url@0.2.1: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated @@ -5196,6 +5893,11 @@ packages: resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} dev: true + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true + /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} @@ -5224,6 +5926,11 @@ packages: - supports-color dev: false + /seroval@0.15.1: + resolution: {integrity: sha512-OPVtf0qmeC7RW+ScVX+7aOS+xoIM7pWcZ0jOWg2aTZigCydgRB04adfteBRbecZnnrO1WuGQ+C3tLeBBzX2zSQ==} + engines: {node: '>=10'} + dev: false + /serve-static@1.15.0: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} @@ -5400,6 +6107,24 @@ packages: smart-buffer: 4.2.0 dev: true + /solid-js@1.8.7: + resolution: {integrity: sha512-9dzrSVieh2zj3SnJ02II6xZkonR6c+j/91b7XZUNcC6xSaldlqjjGh98F1fk5cRJ8ZTkzqF5fPIWDxEOs6QZXA==} + dependencies: + csstype: 3.1.3 + seroval: 0.15.1 + dev: false + + /solid-swr-store@0.10.7(solid-js@1.8.7)(swr-store@0.10.6): + resolution: {integrity: sha512-A6d68aJmRP471aWqKKPE2tpgOiR5fH4qXQNfKIec+Vap+MGQm3tvXlT8n0I8UgJSlNAsSAUuw2VTviH2h3Vv5g==} + engines: {node: '>=10'} + peerDependencies: + solid-js: ^1.2 + swr-store: ^0.10 + dependencies: + solid-js: 1.8.7 + swr-store: 0.10.6 + dev: false + /sorcery@0.11.0: resolution: {integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==} hasBin: true @@ -5413,7 +6138,6 @@ packages: /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - dev: true /source-map-resolve@0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} @@ -5456,6 +6180,15 @@ packages: minipass: 3.3.6 dev: true + /sswr@2.0.0(svelte@4.2.7): + resolution: {integrity: sha512-mV0kkeBHcjcb0M5NqKtKVg/uTIYNlIIniyDfSGrSfxpEdM9C365jK0z55pl9K0xAkNTJi2OAOVFQpgMPUk+V0w==} + peerDependencies: + svelte: ^4.0.0 + dependencies: + svelte: 4.2.7 + swrev: 4.0.0 + dev: false + /stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} dev: true @@ -5635,10 +6368,10 @@ packages: svelte: 4.2.7 dev: true - /svelte-markdoc-preprocess@1.1.3: + /svelte-markdoc-preprocess@1.1.3(react@18.2.0): resolution: {integrity: sha512-1stOZ8VShNv0sUY4ZHL+u9OPeOvLTZ8FApLM+3FBZlJ6F7bs6miWIYX/9EqhAa6qmE8qHauwbAYQwZeIUPvQqQ==} dependencies: - '@markdoc/markdoc': 0.3.5 + '@markdoc/markdoc': 0.3.5(react@18.2.0) html-escaper: 3.0.3 js-yaml: 4.1.0 lovely-logs: 1.2.2 @@ -5649,6 +6382,16 @@ packages: - react dev: true + /svelte-markdown@0.4.1(svelte@4.2.7): + resolution: {integrity: sha512-pOlLY6EruKJaWI9my/2bKX8PdTeP5CM0s4VMmwmC2prlOkjAf+AOmTM4wW/l19Y6WZ87YmP8+ZCJCCwBChWjYw==} + peerDependencies: + svelte: ^4.0.0 + dependencies: + '@types/marked': 5.0.2 + marked: 5.1.2 + svelte: 4.2.7 + dev: false + /svelte-parse-markup@0.1.2(svelte@4.2.7): resolution: {integrity: sha512-DycY7DJr7VqofiJ63ut1/NEG92HrWWL56VWITn/cJCu+LlZhMoBkBXT4opUitPEEwbq1nMQbv4vTKUfbOqIW1g==} peerDependencies: @@ -5731,6 +6474,15 @@ packages: locate-character: 3.0.0 magic-string: 0.30.5 periscopic: 3.1.0 + + /sveltekit-search-params@1.1.1(@sveltejs/kit@1.30.3)(svelte@4.2.7): + resolution: {integrity: sha512-TVmCa50Cnyryt8UPeFZAE8gMsO80h2kXr531Um0VJaMKK24ZvdR4qbHWyLew9U4d5Flw1w3SbyHWTbLiUGPC7w==} + peerDependencies: + '@sveltejs/kit': ^1.0.0 || ^2.0.0 + svelte: ^3.55.0 || ^4.0.0 || ^5.0.0 + dependencies: + '@sveltejs/kit': 1.30.3(svelte@4.2.7)(vite@4.5.1) + svelte: 4.2.7 dev: true /svg-pathdata@6.0.3: @@ -5813,6 +6565,34 @@ packages: - supports-color dev: true + /swr-store@0.10.6: + resolution: {integrity: sha512-xPjB1hARSiRaNNlUQvWSVrG5SirCjk2TmaUyzzvk69SZQan9hCJqw/5rG9iL7xElHU784GxRPISClq4488/XVw==} + engines: {node: '>=10'} + dependencies: + dequal: 2.0.3 + dev: false + + /swr@2.2.0(react@18.2.0): + resolution: {integrity: sha512-AjqHOv2lAhkuUdIiBu9xbuettzAzWXmCEcLONNKJRba87WAefz8Ca9d6ds/SzrPc235n1IxWYdhJ2zF3MNUaoQ==} + peerDependencies: + react: ^16.11.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false + + /swrev@4.0.0: + resolution: {integrity: sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==} + dev: false + + /swrv@1.0.4(vue@3.4.3): + resolution: {integrity: sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==} + peerDependencies: + vue: '>=3.2.26 < 4' + dependencies: + vue: 3.4.3(typescript@5.3.2) + dev: false + /tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} dev: true @@ -5918,6 +6698,11 @@ packages: engines: {node: '>=14.0.0'} dev: true + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: false + /to-object-path@0.3.0: resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} engines: {node: '>=0.10.0'} @@ -5977,7 +6762,6 @@ packages: /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: false /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} @@ -6064,7 +6848,6 @@ packages: resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} engines: {node: '>=14.17'} hasBin: true - dev: true /uc.micro@1.0.6: resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} @@ -6076,7 +6859,6 @@ packages: /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true /undici@5.26.5: resolution: {integrity: sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==} @@ -6138,6 +6920,14 @@ packages: deprecated: Please see https://github.com/lydell/urix#deprecated dev: true + /use-sync-external-store@1.2.0(react@18.2.0): + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + /use@3.1.1: resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} engines: {node: '>=0.10.0'} @@ -6332,16 +7122,40 @@ packages: - terser dev: true + /vue@3.4.3(typescript@5.3.2): + resolution: {integrity: sha512-GjN+culMAGv/mUbkIv8zMKItno8npcj5gWlXkSxf1SPTQf8eJ4A+YfHIvQFyL1IfuJcMl3soA7SmN1fRxbf/wA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@vue/compiler-dom': 3.4.3 + '@vue/compiler-sfc': 3.4.3 + '@vue/runtime-dom': 3.4.3 + '@vue/server-renderer': 3.4.3(vue@3.4.3) + '@vue/shared': 3.4.3 + typescript: 5.3.2 + dev: false + + /web-streams-polyfill@3.2.1: + resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} + engines: {node: '>= 8'} + dev: false + + /web-streams-polyfill@4.0.0-beta.3: + resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} + engines: {node: '>= 14'} + dev: false + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: false /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: false /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} diff --git a/src/hooks/redirects.json b/src/hooks/redirects.json index 2e8b3ecb2d..eff9ed6c82 100644 --- a/src/hooks/redirects.json +++ b/src/hooks/redirects.json @@ -1,4 +1,8 @@ [ + { + "link": "/discord", + "redirect": "https://discord.com/invite/GSeTUeA" + }, { "link": "/docs/getting-started-for-web", "redirect": "/docs/quick-starts" @@ -642,7 +646,7 @@ { "link": "/docs/models/runtime", "redirect": "/docs/references/cloud/models/runtime" - }, + }, { "link": "/docs/installation", "redirect": "/docs/advanced/self-hosting" @@ -659,5 +663,4 @@ "link": "/policy/privacy", "redirect": "/privacy" } - ] diff --git a/src/icons/optimized/ext-link.svg b/src/icons/optimized/ext-link.svg new file mode 100644 index 0000000000..eb13a48839 --- /dev/null +++ b/src/icons/optimized/ext-link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/optimized/message.svg b/src/icons/optimized/message.svg new file mode 100644 index 0000000000..ec7c1a554d --- /dev/null +++ b/src/icons/optimized/message.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/output/_variables.scss b/src/icons/output/_variables.scss index 51e0c14793..583bf5ab8a 100644 --- a/src/icons/output/_variables.scss +++ b/src/icons/output/_variables.scss @@ -16,26 +16,28 @@ $aw-icon-dark: "\ea0f"; $aw-icon-discord: "\ea10"; $aw-icon-divider-vertical: "\ea11"; $aw-icon-download: "\ea12"; -$aw-icon-github: "\ea13"; -$aw-icon-google: "\ea14"; -$aw-icon-hamburger-menu: "\ea15"; -$aw-icon-light: "\ea16"; -$aw-icon-linkedin: "\ea17"; -$aw-icon-location: "\ea18"; -$aw-icon-logout-left: "\ea19"; -$aw-icon-logout-right: "\ea1a"; -$aw-icon-microsoft: "\ea1b"; -$aw-icon-minus: "\ea1c"; -$aw-icon-nuxt: "\ea1d"; -$aw-icon-platform: "\ea1e"; -$aw-icon-plus: "\ea1f"; -$aw-icon-product-hunt: "\ea20"; -$aw-icon-refine: "\ea21"; -$aw-icon-rest: "\ea22"; -$aw-icon-search: "\ea23"; -$aw-icon-star: "\ea24"; -$aw-icon-system: "\ea25"; -$aw-icon-twitter: "\ea26"; -$aw-icon-vue: "\ea27"; -$aw-icon-x: "\ea28"; -$aw-icon-youtube: "\ea29"; +$aw-icon-ext-link: "\ea13"; +$aw-icon-github: "\ea14"; +$aw-icon-google: "\ea15"; +$aw-icon-hamburger-menu: "\ea16"; +$aw-icon-light: "\ea17"; +$aw-icon-linkedin: "\ea18"; +$aw-icon-location: "\ea19"; +$aw-icon-logout-left: "\ea1a"; +$aw-icon-logout-right: "\ea1b"; +$aw-icon-message: "\ea1c"; +$aw-icon-microsoft: "\ea1d"; +$aw-icon-minus: "\ea1e"; +$aw-icon-nuxt: "\ea1f"; +$aw-icon-platform: "\ea20"; +$aw-icon-plus: "\ea21"; +$aw-icon-product-hunt: "\ea22"; +$aw-icon-refine: "\ea23"; +$aw-icon-rest: "\ea24"; +$aw-icon-search: "\ea25"; +$aw-icon-star: "\ea26"; +$aw-icon-system: "\ea27"; +$aw-icon-twitter: "\ea28"; +$aw-icon-vue: "\ea29"; +$aw-icon-x: "\ea2a"; +$aw-icon-youtube: "\ea2b"; diff --git a/src/icons/output/aw-icon.css b/src/icons/output/aw-icon.css index 0215a1fb21..96d877bb75 100644 --- a/src/icons/output/aw-icon.css +++ b/src/icons/output/aw-icon.css @@ -35,26 +35,28 @@ .aw-icon-discord:before { content: "\ea10"; } .aw-icon-divider-vertical:before { content: "\ea11"; } .aw-icon-download:before { content: "\ea12"; } -.aw-icon-github:before { content: "\ea13"; } -.aw-icon-google:before { content: "\ea14"; } -.aw-icon-hamburger-menu:before { content: "\ea15"; } -.aw-icon-light:before { content: "\ea16"; } -.aw-icon-linkedin:before { content: "\ea17"; } -.aw-icon-location:before { content: "\ea18"; } -.aw-icon-logout-left:before { content: "\ea19"; } -.aw-icon-logout-right:before { content: "\ea1a"; } -.aw-icon-microsoft:before { content: "\ea1b"; } -.aw-icon-minus:before { content: "\ea1c"; } -.aw-icon-nuxt:before { content: "\ea1d"; } -.aw-icon-platform:before { content: "\ea1e"; } -.aw-icon-plus:before { content: "\ea1f"; } -.aw-icon-product-hunt:before { content: "\ea20"; } -.aw-icon-refine:before { content: "\ea21"; } -.aw-icon-rest:before { content: "\ea22"; } -.aw-icon-search:before { content: "\ea23"; } -.aw-icon-star:before { content: "\ea24"; } -.aw-icon-system:before { content: "\ea25"; } -.aw-icon-twitter:before { content: "\ea26"; } -.aw-icon-vue:before { content: "\ea27"; } -.aw-icon-x:before { content: "\ea28"; } -.aw-icon-youtube:before { content: "\ea29"; } +.aw-icon-ext-link:before { content: "\ea13"; } +.aw-icon-github:before { content: "\ea14"; } +.aw-icon-google:before { content: "\ea15"; } +.aw-icon-hamburger-menu:before { content: "\ea16"; } +.aw-icon-light:before { content: "\ea17"; } +.aw-icon-linkedin:before { content: "\ea18"; } +.aw-icon-location:before { content: "\ea19"; } +.aw-icon-logout-left:before { content: "\ea1a"; } +.aw-icon-logout-right:before { content: "\ea1b"; } +.aw-icon-message:before { content: "\ea1c"; } +.aw-icon-microsoft:before { content: "\ea1d"; } +.aw-icon-minus:before { content: "\ea1e"; } +.aw-icon-nuxt:before { content: "\ea1f"; } +.aw-icon-platform:before { content: "\ea20"; } +.aw-icon-plus:before { content: "\ea21"; } +.aw-icon-product-hunt:before { content: "\ea22"; } +.aw-icon-refine:before { content: "\ea23"; } +.aw-icon-rest:before { content: "\ea24"; } +.aw-icon-search:before { content: "\ea25"; } +.aw-icon-star:before { content: "\ea26"; } +.aw-icon-system:before { content: "\ea27"; } +.aw-icon-twitter:before { content: "\ea28"; } +.aw-icon-vue:before { content: "\ea29"; } +.aw-icon-x:before { content: "\ea2a"; } +.aw-icon-youtube:before { content: "\ea2b"; } diff --git a/src/icons/output/aw-icon.eot b/src/icons/output/aw-icon.eot index 71a1ae7044..0fa9a62b6b 100644 Binary files a/src/icons/output/aw-icon.eot and b/src/icons/output/aw-icon.eot differ diff --git a/src/icons/output/aw-icon.scss b/src/icons/output/aw-icon.scss index 9a0cb550a7..b0ac9a1057 100644 --- a/src/icons/output/aw-icon.scss +++ b/src/icons/output/aw-icon.scss @@ -34,29 +34,31 @@ .aw-icon-discord:before { content: "\ea10"; } .aw-icon-divider-vertical:before { content: "\ea11"; } .aw-icon-download:before { content: "\ea12"; } -.aw-icon-github:before { content: "\ea13"; } -.aw-icon-google:before { content: "\ea14"; } -.aw-icon-hamburger-menu:before { content: "\ea15"; } -.aw-icon-light:before { content: "\ea16"; } -.aw-icon-linkedin:before { content: "\ea17"; } -.aw-icon-location:before { content: "\ea18"; } -.aw-icon-logout-left:before { content: "\ea19"; } -.aw-icon-logout-right:before { content: "\ea1a"; } -.aw-icon-microsoft:before { content: "\ea1b"; } -.aw-icon-minus:before { content: "\ea1c"; } -.aw-icon-nuxt:before { content: "\ea1d"; } -.aw-icon-platform:before { content: "\ea1e"; } -.aw-icon-plus:before { content: "\ea1f"; } -.aw-icon-product-hunt:before { content: "\ea20"; } -.aw-icon-refine:before { content: "\ea21"; } -.aw-icon-rest:before { content: "\ea22"; } -.aw-icon-search:before { content: "\ea23"; } -.aw-icon-star:before { content: "\ea24"; } -.aw-icon-system:before { content: "\ea25"; } -.aw-icon-twitter:before { content: "\ea26"; } -.aw-icon-vue:before { content: "\ea27"; } -.aw-icon-x:before { content: "\ea28"; } -.aw-icon-youtube:before { content: "\ea29"; } +.aw-icon-ext-link:before { content: "\ea13"; } +.aw-icon-github:before { content: "\ea14"; } +.aw-icon-google:before { content: "\ea15"; } +.aw-icon-hamburger-menu:before { content: "\ea16"; } +.aw-icon-light:before { content: "\ea17"; } +.aw-icon-linkedin:before { content: "\ea18"; } +.aw-icon-location:before { content: "\ea19"; } +.aw-icon-logout-left:before { content: "\ea1a"; } +.aw-icon-logout-right:before { content: "\ea1b"; } +.aw-icon-message:before { content: "\ea1c"; } +.aw-icon-microsoft:before { content: "\ea1d"; } +.aw-icon-minus:before { content: "\ea1e"; } +.aw-icon-nuxt:before { content: "\ea1f"; } +.aw-icon-platform:before { content: "\ea20"; } +.aw-icon-plus:before { content: "\ea21"; } +.aw-icon-product-hunt:before { content: "\ea22"; } +.aw-icon-refine:before { content: "\ea23"; } +.aw-icon-rest:before { content: "\ea24"; } +.aw-icon-search:before { content: "\ea25"; } +.aw-icon-star:before { content: "\ea26"; } +.aw-icon-system:before { content: "\ea27"; } +.aw-icon-twitter:before { content: "\ea28"; } +.aw-icon-vue:before { content: "\ea29"; } +.aw-icon-x:before { content: "\ea2a"; } +.aw-icon-youtube:before { content: "\ea2b"; } $aw-icon-apple: "\ea01"; $aw-icon-arrow-down: "\ea02"; @@ -76,26 +78,28 @@ $aw-icon-dark: "\ea0f"; $aw-icon-discord: "\ea10"; $aw-icon-divider-vertical: "\ea11"; $aw-icon-download: "\ea12"; -$aw-icon-github: "\ea13"; -$aw-icon-google: "\ea14"; -$aw-icon-hamburger-menu: "\ea15"; -$aw-icon-light: "\ea16"; -$aw-icon-linkedin: "\ea17"; -$aw-icon-location: "\ea18"; -$aw-icon-logout-left: "\ea19"; -$aw-icon-logout-right: "\ea1a"; -$aw-icon-microsoft: "\ea1b"; -$aw-icon-minus: "\ea1c"; -$aw-icon-nuxt: "\ea1d"; -$aw-icon-platform: "\ea1e"; -$aw-icon-plus: "\ea1f"; -$aw-icon-product-hunt: "\ea20"; -$aw-icon-refine: "\ea21"; -$aw-icon-rest: "\ea22"; -$aw-icon-search: "\ea23"; -$aw-icon-star: "\ea24"; -$aw-icon-system: "\ea25"; -$aw-icon-twitter: "\ea26"; -$aw-icon-vue: "\ea27"; -$aw-icon-x: "\ea28"; -$aw-icon-youtube: "\ea29"; +$aw-icon-ext-link: "\ea13"; +$aw-icon-github: "\ea14"; +$aw-icon-google: "\ea15"; +$aw-icon-hamburger-menu: "\ea16"; +$aw-icon-light: "\ea17"; +$aw-icon-linkedin: "\ea18"; +$aw-icon-location: "\ea19"; +$aw-icon-logout-left: "\ea1a"; +$aw-icon-logout-right: "\ea1b"; +$aw-icon-message: "\ea1c"; +$aw-icon-microsoft: "\ea1d"; +$aw-icon-minus: "\ea1e"; +$aw-icon-nuxt: "\ea1f"; +$aw-icon-platform: "\ea20"; +$aw-icon-plus: "\ea21"; +$aw-icon-product-hunt: "\ea22"; +$aw-icon-refine: "\ea23"; +$aw-icon-rest: "\ea24"; +$aw-icon-search: "\ea25"; +$aw-icon-star: "\ea26"; +$aw-icon-system: "\ea27"; +$aw-icon-twitter: "\ea28"; +$aw-icon-vue: "\ea29"; +$aw-icon-x: "\ea2a"; +$aw-icon-youtube: "\ea2b"; diff --git a/src/icons/output/aw-icon.svg b/src/icons/output/aw-icon.svg index 594095131c..56e001043b 100644 --- a/src/icons/output/aw-icon.svg +++ b/src/icons/output/aw-icon.svg @@ -61,74 +61,80 @@ - + + diff --git a/src/icons/output/aw-icon.symbol.svg b/src/icons/output/aw-icon.symbol.svg index 53cf7df2b2..dfa6144bf3 100644 --- a/src/icons/output/aw-icon.symbol.svg +++ b/src/icons/output/aw-icon.symbol.svg @@ -1,4 +1,4 @@ - + diff --git a/src/icons/output/aw-icon.ttf b/src/icons/output/aw-icon.ttf index 1e9cc863cc..37bea38b94 100644 Binary files a/src/icons/output/aw-icon.ttf and b/src/icons/output/aw-icon.ttf differ diff --git a/src/icons/output/aw-icon.woff b/src/icons/output/aw-icon.woff index 06611b818f..6e1407bb8b 100644 Binary files a/src/icons/output/aw-icon.woff and b/src/icons/output/aw-icon.woff differ diff --git a/src/icons/output/aw-icon.woff2 b/src/icons/output/aw-icon.woff2 index 45f657605e..bbcb07bc20 100644 Binary files a/src/icons/output/aw-icon.woff2 and b/src/icons/output/aw-icon.woff2 differ diff --git a/src/icons/output/info.json b/src/icons/output/info.json index cfc6613b5c..b97258b62a 100644 --- a/src/icons/output/info.json +++ b/src/icons/output/info.json @@ -107,142 +107,154 @@ "className": "aw-icon-download", "unicode": "" }, - "github": { + "ext-link": { "encodedCode": "\\ea13", "prefix": "aw-icon", - "className": "aw-icon-github", + "className": "aw-icon-ext-link", "unicode": "" }, - "google": { + "github": { "encodedCode": "\\ea14", "prefix": "aw-icon", - "className": "aw-icon-google", + "className": "aw-icon-github", "unicode": "" }, - "hamburger-menu": { + "google": { "encodedCode": "\\ea15", "prefix": "aw-icon", - "className": "aw-icon-hamburger-menu", + "className": "aw-icon-google", "unicode": "" }, - "light": { + "hamburger-menu": { "encodedCode": "\\ea16", "prefix": "aw-icon", - "className": "aw-icon-light", + "className": "aw-icon-hamburger-menu", "unicode": "" }, - "linkedin": { + "light": { "encodedCode": "\\ea17", "prefix": "aw-icon", - "className": "aw-icon-linkedin", + "className": "aw-icon-light", "unicode": "" }, - "location": { + "linkedin": { "encodedCode": "\\ea18", "prefix": "aw-icon", - "className": "aw-icon-location", + "className": "aw-icon-linkedin", "unicode": "" }, - "logout-left": { + "location": { "encodedCode": "\\ea19", "prefix": "aw-icon", - "className": "aw-icon-logout-left", + "className": "aw-icon-location", "unicode": "" }, - "logout-right": { + "logout-left": { "encodedCode": "\\ea1a", "prefix": "aw-icon", - "className": "aw-icon-logout-right", + "className": "aw-icon-logout-left", "unicode": "" }, - "microsoft": { + "logout-right": { "encodedCode": "\\ea1b", "prefix": "aw-icon", - "className": "aw-icon-microsoft", + "className": "aw-icon-logout-right", "unicode": "" }, - "minus": { + "message": { "encodedCode": "\\ea1c", "prefix": "aw-icon", - "className": "aw-icon-minus", + "className": "aw-icon-message", "unicode": "" }, - "nuxt": { + "microsoft": { "encodedCode": "\\ea1d", "prefix": "aw-icon", - "className": "aw-icon-nuxt", + "className": "aw-icon-microsoft", "unicode": "" }, - "platform": { + "minus": { "encodedCode": "\\ea1e", "prefix": "aw-icon", - "className": "aw-icon-platform", + "className": "aw-icon-minus", "unicode": "" }, - "plus": { + "nuxt": { "encodedCode": "\\ea1f", "prefix": "aw-icon", - "className": "aw-icon-plus", + "className": "aw-icon-nuxt", "unicode": "" }, - "product-hunt": { + "platform": { "encodedCode": "\\ea20", "prefix": "aw-icon", - "className": "aw-icon-product-hunt", + "className": "aw-icon-platform", "unicode": "" }, - "refine": { + "plus": { "encodedCode": "\\ea21", "prefix": "aw-icon", - "className": "aw-icon-refine", + "className": "aw-icon-plus", "unicode": "" }, - "rest": { + "product-hunt": { "encodedCode": "\\ea22", "prefix": "aw-icon", - "className": "aw-icon-rest", + "className": "aw-icon-product-hunt", "unicode": "" }, - "search": { + "refine": { "encodedCode": "\\ea23", "prefix": "aw-icon", - "className": "aw-icon-search", + "className": "aw-icon-refine", "unicode": "" }, - "star": { + "rest": { "encodedCode": "\\ea24", "prefix": "aw-icon", - "className": "aw-icon-star", + "className": "aw-icon-rest", "unicode": "" }, - "system": { + "search": { "encodedCode": "\\ea25", "prefix": "aw-icon", - "className": "aw-icon-system", + "className": "aw-icon-search", "unicode": "" }, - "twitter": { + "star": { "encodedCode": "\\ea26", "prefix": "aw-icon", - "className": "aw-icon-twitter", + "className": "aw-icon-star", "unicode": "" }, - "vue": { + "system": { "encodedCode": "\\ea27", "prefix": "aw-icon", - "className": "aw-icon-vue", + "className": "aw-icon-system", "unicode": "" }, - "x": { + "twitter": { "encodedCode": "\\ea28", "prefix": "aw-icon", - "className": "aw-icon-x", + "className": "aw-icon-twitter", "unicode": "" }, - "youtube": { + "vue": { "encodedCode": "\\ea29", "prefix": "aw-icon", - "className": "aw-icon-youtube", + "className": "aw-icon-vue", "unicode": "" + }, + "x": { + "encodedCode": "\\ea2a", + "prefix": "aw-icon", + "className": "aw-icon-x", + "unicode": "" + }, + "youtube": { + "encodedCode": "\\ea2b", + "prefix": "aw-icon", + "className": "aw-icon-youtube", + "unicode": "" } } diff --git a/src/icons/svg/ext-link.svg b/src/icons/svg/ext-link.svg new file mode 100644 index 0000000000..5f29016353 --- /dev/null +++ b/src/icons/svg/ext-link.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/icons/svg/message.svg b/src/icons/svg/message.svg new file mode 100644 index 0000000000..8b72974e2c --- /dev/null +++ b/src/icons/svg/message.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/lib/actions/highlight.ts b/src/lib/actions/highlight.ts new file mode 100644 index 0000000000..8055de859a --- /dev/null +++ b/src/lib/actions/highlight.ts @@ -0,0 +1,6 @@ +export const highlight = (node: HTMLElement, text: string[]) => { + text.forEach((word) => { + const regex = new RegExp(`(${word})`, 'gi'); + node.innerHTML = node.innerHTML.replace(regex, '$1'); + }); +}; diff --git a/src/lib/appwrite/index.ts b/src/lib/appwrite/index.ts new file mode 100644 index 0000000000..68fc1da797 --- /dev/null +++ b/src/lib/appwrite/index.ts @@ -0,0 +1,9 @@ +import { PUBLIC_APPWRITE_PROJECT_ID } from '$env/static/public'; +import { Client, Databases, Functions } from 'appwrite'; + +export const client = new Client(); + +client.setEndpoint('https://cloud.appwrite.io/v1').setProject(PUBLIC_APPWRITE_PROJECT_ID); + +export const databases = new Databases(client); +export const functions = new Functions(client); diff --git a/src/lib/components/DropdownMenu/DropdownCheckboxItem.svelte b/src/lib/components/DropdownMenu/DropdownCheckboxItem.svelte new file mode 100644 index 0000000000..7aa2a4fc75 --- /dev/null +++ b/src/lib/components/DropdownMenu/DropdownCheckboxItem.svelte @@ -0,0 +1,24 @@ + + + diff --git a/src/lib/components/DropdownMenu/DropdownMenu.svelte b/src/lib/components/DropdownMenu/DropdownMenu.svelte new file mode 100644 index 0000000000..25de115b5d --- /dev/null +++ b/src/lib/components/DropdownMenu/DropdownMenu.svelte @@ -0,0 +1,33 @@ + + + + + diff --git a/src/lib/components/FooterNav.svelte b/src/lib/components/FooterNav.svelte index c88e455d81..463f25d75e 100644 --- a/src/lib/components/FooterNav.svelte +++ b/src/lib/components/FooterNav.svelte @@ -31,7 +31,8 @@ { label: 'Databases', href: '/docs/products/databases' }, { label: 'Functions', href: '/docs/products/functions' }, { label: 'Storage', href: '/docs/products/storage' }, - { label: 'Realtime', href: '/docs/apis/realtime' } + { label: 'Realtime', href: '/docs/apis/realtime' }, + { label: 'Support Threads', href: '/support-threads' } ], Learn: [ { label: 'Docs', href: '/docs' }, diff --git a/src/lib/components/SeoOgImage.svelte b/src/lib/components/SeoOgImage.svelte new file mode 100644 index 0000000000..7739304959 --- /dev/null +++ b/src/lib/components/SeoOgImage.svelte @@ -0,0 +1,13 @@ + + + + + + + diff --git a/src/lib/utils/debounce.ts b/src/lib/utils/debounce.ts new file mode 100644 index 0000000000..37bb1586fa --- /dev/null +++ b/src/lib/utils/debounce.ts @@ -0,0 +1,14 @@ +export function createDebounce(delay = 500) { + let timeout: NodeJS.Timeout; + return { + debounce: (callback: () => void) => { + clearTimeout(timeout); + timeout = setTimeout(callback, delay); + }, + reset: () => clearTimeout(timeout), + immediate: (callback: () => void) => { + clearTimeout(timeout); + callback(); + } + }; +} diff --git a/src/lib/utils/random.ts b/src/lib/utils/random.ts new file mode 100644 index 0000000000..eb61fe938c --- /dev/null +++ b/src/lib/utils/random.ts @@ -0,0 +1,9 @@ +export const deterministicRandom = (options: T[], seed: string): T => { + const index = Math.floor((parseInt(seed, 36) / 36 ** 4) * options.length); + + return options[index]; +}; + +export const random = (min: number, max: number): number => { + return Math.floor(Math.random() * (max - min + 1) + min); +}; diff --git a/src/markdoc/layouts/Article.svelte b/src/markdoc/layouts/Article.svelte index 7094c7e6ae..ea34fc4569 100644 --- a/src/markdoc/layouts/Article.svelte +++ b/src/markdoc/layouts/Article.svelte @@ -15,9 +15,9 @@ @@ -70,12 +69,7 @@ - - - - - - + diff --git a/src/markdoc/layouts/Category.svelte b/src/markdoc/layouts/Category.svelte index d169e781d6..e8883cd29c 100644 --- a/src/markdoc/layouts/Category.svelte +++ b/src/markdoc/layouts/Category.svelte @@ -1,89 +1,89 @@ - - {seoTitle} - - - - - - - - - - - - + + {seoTitle} + + + + + + + + + + + +
-
-
-
- - -
-
-

{name}

-

- {description} -

-
- -
+
-
-
    - {#each posts as post} - {@const author = authors.find((a) => a.slug.includes(post.author))} - {#if author} -
    - {/if} - {/each} -
-
-
-
- - -
-
-
-
-
+
    + {#each posts as post} + {@const author = authors.find((a) => a.slug.includes(post.author))} + {#if author} +
    + {/if} + {/each} +
+ +
+
+ + +
+
+ + + diff --git a/src/markdoc/layouts/Post.svelte b/src/markdoc/layouts/Post.svelte index 1aa9f9a6d2..8314b51e75 100644 --- a/src/markdoc/layouts/Post.svelte +++ b/src/markdoc/layouts/Post.svelte @@ -64,7 +64,10 @@
-
+
diff --git a/src/routes/api/test/+server.ts b/src/routes/api/test/+server.ts new file mode 100644 index 0000000000..0c5d113eef --- /dev/null +++ b/src/routes/api/test/+server.ts @@ -0,0 +1,6 @@ +import { json } from '@sveltejs/kit'; + +export async function POST({ request }) { + const { a, b } = await request.json(); + return json(a + b); +} diff --git a/src/routes/api/tldr/+server.ts b/src/routes/api/tldr/+server.ts new file mode 100644 index 0000000000..88ff7d5cf8 --- /dev/null +++ b/src/routes/api/tldr/+server.ts @@ -0,0 +1,32 @@ +import OpenAI from 'openai'; +import { OpenAIStream, StreamingTextResponse } from 'ai'; +import { OPENAI_API_KEY } from '$env/static/private'; + +// Create an OpenAI API client (that's edge friendly!) +const openai = new OpenAI({ + apiKey: OPENAI_API_KEY +}); + +// Set the runtime to edge for best performance +export const config = { + runtime: 'edge' +}; + +export async function POST({ request }) { + const { prompt } = await request.json(); + + // Ask OpenAI for a streaming completion given the prompt + const response = await openai.completions.create({ + model: 'text-davinci-003', + stream: true, + temperature: 0.6, + max_tokens: 300, + prompt: `Create a TL;DR for the following support thread. If there's a solution, be sure to include it. + Do not include the term "TL;DR" in your response.: ${prompt}` + }); + + // Convert the response into a friendly text-stream + const stream = OpenAIStream(response); + // Respond with the stream + return new StreamingTextResponse(stream); +} diff --git a/src/routes/discord/+page.server.js b/src/routes/discord/+page.server.js deleted file mode 100644 index 58cfac3705..0000000000 --- a/src/routes/discord/+page.server.js +++ /dev/null @@ -1,5 +0,0 @@ -import { redirect } from '@sveltejs/kit'; - -export function load() { - throw redirect(301, 'https://discord.gg/GSeTUeA'); -} \ No newline at end of file diff --git a/src/routes/support-threads/(assets)/bg-green.svg b/src/routes/support-threads/(assets)/bg-green.svg new file mode 100644 index 0000000000..7fe8164883 --- /dev/null +++ b/src/routes/support-threads/(assets)/bg-green.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/routes/support-threads/(assets)/bg-red.svg b/src/routes/support-threads/(assets)/bg-red.svg new file mode 100644 index 0000000000..53593fa448 --- /dev/null +++ b/src/routes/support-threads/(assets)/bg-red.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/routes/support-threads/(assets)/empty-state.png b/src/routes/support-threads/(assets)/empty-state.png new file mode 100644 index 0000000000..5733a1b472 Binary files /dev/null and b/src/routes/support-threads/(assets)/empty-state.png differ diff --git a/src/routes/support-threads/+layout.ts b/src/routes/support-threads/+layout.ts new file mode 100644 index 0000000000..d43d0cd2a5 --- /dev/null +++ b/src/routes/support-threads/+layout.ts @@ -0,0 +1 @@ +export const prerender = false; diff --git a/src/routes/support-threads/+page.svelte b/src/routes/support-threads/+page.svelte new file mode 100644 index 0000000000..a62d9c2ca7 --- /dev/null +++ b/src/routes/support-threads/+page.svelte @@ -0,0 +1,255 @@ + + + + + {title} + + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+
+
+

Support threads

+
+
+
+ +
+
+
    + {#each tags as tag} +
  • + +
  • + {/each} +
  • + +
  • +
+
+
+
+ + {#if threads.length} +

+ Found {query.length ? threads.length : '600+'} results. +

+ {/if} + +
+ {#each threads as thread (thread.$id)} + + {:else} +
+ + No support threads found + +
+ {/each} +
+
+ +
+ + +
+
+ + diff --git a/src/routes/support-threads/+page.ts b/src/routes/support-threads/+page.ts new file mode 100644 index 0000000000..1a8c1ee6d8 --- /dev/null +++ b/src/routes/support-threads/+page.ts @@ -0,0 +1,13 @@ +import { getThreads } from './helpers.js'; + +export async function load({ url }) { + const tagsParam = url.searchParams.get('tags'); + + return { + threads: await getThreads({ + q: url.searchParams.get('q'), + tags: tagsParam ? tagsParam.split(',') : undefined, + allTags: true + }) + }; +} diff --git a/src/routes/support-threads/PreFooter.svelte b/src/routes/support-threads/PreFooter.svelte new file mode 100644 index 0000000000..89d2dd1771 --- /dev/null +++ b/src/routes/support-threads/PreFooter.svelte @@ -0,0 +1,72 @@ +
+ +
+

Need Support?

+
+
+

Join our Discord

+

+ Get community support by joining our Discord server +

+ + + Join Discord + +
+
+

Get premium support

+

+ Become a pro user and get email support from our team +

+ + Learn more + +
+
+
+
+ + diff --git a/src/routes/support-threads/TagsDropdown.svelte b/src/routes/support-threads/TagsDropdown.svelte new file mode 100644 index 0000000000..eac486df34 --- /dev/null +++ b/src/routes/support-threads/TagsDropdown.svelte @@ -0,0 +1,106 @@ + + + + + + {#if open} + + {/if} + + + diff --git a/src/routes/support-threads/ThreadCard.svelte b/src/routes/support-threads/ThreadCard.svelte new file mode 100644 index 0000000000..ce67edbaa5 --- /dev/null +++ b/src/routes/support-threads/ThreadCard.svelte @@ -0,0 +1,64 @@ + + +{#key highlightTerms} + +
+

+ {thread.title} +

+ +
+ +

+ {thread.content.length > 200 ? thread.content.slice(0, 200) + '...' : thread.content} +

+ +
+
    + {#each thread.tags ?? [] as tag} +
  • +
    {tag}
    +
  • + {/each} +
+ +
+
+
+
+{/key} + + diff --git a/src/routes/support-threads/[id]/+page.server.ts b/src/routes/support-threads/[id]/+page.server.ts new file mode 100644 index 0000000000..27a6d45f1e --- /dev/null +++ b/src/routes/support-threads/[id]/+page.server.ts @@ -0,0 +1,30 @@ +import { random } from '$lib/utils/random.js'; +import { error } from '@sveltejs/kit'; +import { getRelatedThreads, getThread, getThreadMessages, getThreadTldr } from '../helpers.js'; + +export const prerender = false; + +export const load = async ({ params }) => { + const id = params.id; + + try { + const thread = await getThread(id); + const related = await getRelatedThreads(thread); + const messages = await getThreadMessages(id); + + const upvotes = random(1, 60); + + return { + ...thread, + related, + upvotes, + messages, + streamed: { + tldr: getThreadTldr(thread) + } + }; + } catch (e) { + console.log(e); + throw error(404, 'Thread not found'); + } +}; diff --git a/src/routes/support-threads/[id]/+page.svelte b/src/routes/support-threads/[id]/+page.svelte new file mode 100644 index 0000000000..0679a64f4c --- /dev/null +++ b/src/routes/support-threads/[id]/+page.svelte @@ -0,0 +1,283 @@ + + + + + {title} + + + + + + + + + +
+
+
+
+ + +

{data.title}

+
    +
  • + + {data.upvotes} +
  • + {#each data.tags ?? [] as tag} +
  • + {tag} +
  • + {/each} +
+
+ +
+ +
+
+ {#each data.messages ?? [] as message, i} + {@const isFirst = i === 0} + + {#if isFirst} +
+ + TL;DR + + {#if data.tldr} + {data.tldr} + {:else} + {#await data.streamed.tldr} +
+ {#each { length: 3 } as _, i} + + {:then res} + {res} + {/await} + {/if} +
+ {/if} + + {/each} +
+ Reply +

+ Reply to this thread by joining our Discord +

+ + + Reply on Discord + +
+
+ +
+
+ + +
+ + +
+
+ + diff --git a/src/routes/support-threads/[id]/CodeRenderer.svelte b/src/routes/support-threads/[id]/CodeRenderer.svelte new file mode 100644 index 0000000000..c823e98d1b --- /dev/null +++ b/src/routes/support-threads/[id]/CodeRenderer.svelte @@ -0,0 +1,119 @@ + + +{#if insideMultiCode} + {#if $selected === language} + + {@html result} + {/if} +{:else} +
+
+
+ {#if platformMap[language]} +
+
{platformMap[language]}
+
+ {/if} +
+
+
    +
  • + + + + {copyText} + + +
  • +
+
+
+
+ + {@html result} +
+
+{/if} + + diff --git a/src/routes/support-threads/[id]/LinkRenderer.svelte b/src/routes/support-threads/[id]/LinkRenderer.svelte new file mode 100644 index 0000000000..db46f1e437 --- /dev/null +++ b/src/routes/support-threads/[id]/LinkRenderer.svelte @@ -0,0 +1,11 @@ + + +{text} diff --git a/src/routes/support-threads/[id]/MessageCard.svelte b/src/routes/support-threads/[id]/MessageCard.svelte new file mode 100644 index 0000000000..75b5a190a3 --- /dev/null +++ b/src/routes/support-threads/[id]/MessageCard.svelte @@ -0,0 +1,87 @@ + + +
+
+
+
+ +
+ {message.author} +
+ + {formatTimestamp(message.timestamp)} + +
+
+ +
+ +
+ + diff --git a/src/routes/support-threads/helpers.ts b/src/routes/support-threads/helpers.ts new file mode 100644 index 0000000000..9b1ad66bb4 --- /dev/null +++ b/src/routes/support-threads/helpers.ts @@ -0,0 +1,123 @@ +import { + PUBLIC_APPWRITE_COL_MESSAGES_ID, + PUBLIC_APPWRITE_COL_THREADS_ID, + PUBLIC_APPWRITE_DB_MAIN_ID, + PUBLIC_APPWRITE_FN_TLDR_ID +} from '$env/static/public'; +import { databases, functions } from '$lib/appwrite'; +import { Query } from 'appwrite'; +import type { DiscordMessage, DiscordThread } from './types'; + +type Ranked = { + data: T; + rank: number; // Percentage of query words found, from 0 to 1 +}; + +type FilterThreadsArgs = { + threads: DiscordThread[]; + q?: string | null; + tags?: string[]; + allTags?: boolean; +}; + +export function filterThreads({ q, threads: threadDocs, tags, allTags }: FilterThreadsArgs) { + const threads = tags + ? threadDocs.filter((thread) => { + const lowercaseTags = thread.tags?.map((tag) => tag.toLowerCase()); + if (allTags) { + return tags?.every((tag) => lowercaseTags?.includes(tag.toLowerCase())); + } else { + return tags?.some((tag) => lowercaseTags?.includes(tag.toLowerCase())); + } + }) + : threadDocs; + + if (!q) return threads; + + const queryWords = q.toLowerCase().split(/\s+/); + const rankPerWord = 1 / queryWords.length; + const res: Ranked[] = []; + + threads.forEach((item) => { + const foundWords = new Set(); + + Object.values(item).forEach((value) => { + const stringified = JSON.stringify(value).toLowerCase(); + + queryWords.forEach((word) => { + if (stringified.includes(word)) { + foundWords.add(word); + } + }); + }); + + const rank = foundWords.size * rankPerWord; + + if (rank > 0) { + res.push({ + data: item, + rank + }); + } + }); + + return res.sort((a, b) => b.rank - a.rank).map(({ data }) => data); +} + +type GetThreadsArgs = Omit; + +export async function getThreads({ q, tags, allTags }: GetThreadsArgs) { + tags = tags?.filter(Boolean).map((tag) => tag.toLowerCase()) ?? []; + + const data = await databases.listDocuments( + PUBLIC_APPWRITE_DB_MAIN_ID, + PUBLIC_APPWRITE_COL_THREADS_ID, + [ + q ? Query.search('search_meta', q) : undefined + // tags ? Query.equal('tags', tags) : undefined + ].filter(Boolean) as string[] + ); + + const threadDocs = data.documents as unknown as DiscordThread[]; + return filterThreads({ threads: threadDocs, q, tags, allTags }); +} + +export async function getThread($id: string) { + return (await databases.getDocument( + PUBLIC_APPWRITE_DB_MAIN_ID, + PUBLIC_APPWRITE_COL_THREADS_ID, + $id + )) as unknown as DiscordThread; +} + +export async function getRelatedThreads(thread: DiscordThread) { + const tags = thread.tags?.filter(Boolean) ?? []; + const relatedThreads = await getThreads({ q: null, tags, allTags: false }); + + return relatedThreads.filter(({ $id }) => $id !== thread.$id); +} + +export async function getThreadMessages(threadId: string) { + const data = await databases.listDocuments( + PUBLIC_APPWRITE_DB_MAIN_ID, + PUBLIC_APPWRITE_COL_MESSAGES_ID, + [Query.equal('threadId', threadId)].filter(Boolean) as string[] + ); + + return data.documents as unknown as DiscordMessage[]; +} + +export async function getThreadTldr(thread: DiscordThread) { + if (thread.tldr) return thread.tldr; + + const execution = await functions.createExecution( + PUBLIC_APPWRITE_FN_TLDR_ID, + JSON.stringify({ thread: thread.$id }), + false, + '/', + 'POST' + ); + const { tldr } = JSON.parse(execution.responseBody); + + return tldr; +} diff --git a/src/routes/support-threads/types.ts b/src/routes/support-threads/types.ts new file mode 100644 index 0000000000..29b882af37 --- /dev/null +++ b/src/routes/support-threads/types.ts @@ -0,0 +1,39 @@ +import type { Models } from 'appwrite'; + +export type MockThread = { + id: string; + username?: string; + title: string; + text: string; + replies: MockMessage[]; +}; + +export interface DiscordMessage extends Pick { + threadId: string; + author: string; + author_avatar: string; + message: string; + role?: string; + /* `UTC` timestamp */ + timestamp: string; +} + +export interface DiscordThread extends Pick { + discord_id: string; + author: string; + tags?: string[]; + author_avatar: string; + seo_description?: string; + content: string; + title: string; + search_meta?: string; + // messages?: DiscordMessage[]; + tldr: string; + vote_count: number; + message_count: number; +} + +export type MockMessage = { + username?: string; + text: string; +}; diff --git a/src/scss/6-elements/_btn-tag.scss b/src/scss/6-elements/_btn-tag.scss new file mode 100644 index 0000000000..0c6787c9a9 --- /dev/null +++ b/src/scss/6-elements/_btn-tag.scss @@ -0,0 +1,38 @@ +@use '../abstract' as *; + +.#{$p}-btn-tag { + --p-tag-text-color: var(--aw-color-primary); + --p-tag-bg-color: var(--aw-color-greyscale-100); + --p-tag-border-color: var(--p-tag-bg-color); + + + color: hsl(var(--p-tag-text-color)); + background-color: hsl(var(--p-tag-bg-color)); + border: 1px solid hsl(var(--p-tag-border-color)); + + padding-block: pxToRem(4); + padding-inline: pxToRem(8); + border-radius: pxToRem(12); + font-size: var(--aw-font-size-micro); + line-height: var(--aw-line-height-tiny); + + #{$theme-dark} & { + --p-tag-bg-color: var(--aw-color-greyscale-750); + + &:where(:hover) { + --p-tag-bg-color: var(--aw-color-greyscale-700); + } + + &:where(:active) { + --p-tag-bg-color: var(--aw-color-greyscale-800); + } + + &:where(.is-selected) { + --p-tag-border-color: var(--aw-color-white); + } + + &:where(:disabled) { + --p-tag-bg-color: var(--aw-color-greyscale-800); + } + } +} \ No newline at end of file diff --git a/src/scss/6-elements/_container.scss b/src/scss/6-elements/_container.scss index fb3d136d92..691f2fd306 100644 --- a/src/scss/6-elements/_container.scss +++ b/src/scss/6-elements/_container.scss @@ -9,6 +9,7 @@ @media #{$break1} { padding-inline: pxToRem(20); } } + .#{$p}-main-section { > * { padding-block:pxToRem(24); } >:first-child { padding-block-start:0; } diff --git a/src/scss/6-elements/_icon-button.scss b/src/scss/6-elements/_icon-button.scss index 1df9e90f20..7fab354b85 100644 --- a/src/scss/6-elements/_icon-button.scss +++ b/src/scss/6-elements/_icon-button.scss @@ -1,7 +1,8 @@ @use '../abstract' as *; .#{$p}-icon-button { - display: block; + display: flex; + gap: pxToRem(4); position: relative; block-size:pxToRem(28); inline-size:pxToRem(28); @@ -10,10 +11,17 @@ border-radius: pxToRem(8); > [class*='icon'] { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); + position: relative; + &::before { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + } + &.is-more-content { + inline-size:fit-content; padding:pxToRem(4); line-height:pxToRem(18); + > [class*='icon'] { inline-size:pxToRem(16); } } diff --git a/src/scss/6-elements/_index.scss b/src/scss/6-elements/_index.scss index 12dc5ecf03..f5be36d828 100644 --- a/src/scss/6-elements/_index.scss +++ b/src/scss/6-elements/_index.scss @@ -12,6 +12,7 @@ @forward "badges"; @forward "numeric-badge"; @forward "tag"; +@forward "btn-tag"; @forward "inline-tag"; @forward "card"; @forward "lists"; diff --git a/src/scss/6-elements/_link.scss b/src/scss/6-elements/_link.scss index e2c3d5b905..59f2b03e20 100644 --- a/src/scss/6-elements/_link.scss +++ b/src/scss/6-elements/_link.scss @@ -31,5 +31,11 @@ &.is-inline { text-decoration: underline; } + + &.is-secondary { + --p-link-color-text-default: var(--aw-color-secondary); + // --p-link-color-text-hover: var(--aw-color-secondary) / 0.75; + // --p-link-color-text-active:var(--aw-color-secondary) / 0.5; + } } diff --git a/src/scss/_10-utilities.scss b/src/scss/_10-utilities.scss index 07a746a55c..74d47857cc 100644 --- a/src/scss/_10-utilities.scss +++ b/src/scss/_10-utilities.scss @@ -47,6 +47,7 @@ .#{$p}-u-margin-inline-32-negative { margin-inline:pxToRem(-32); } .#{$p}-u-margin-block-0 { margin-block:0; } +.#{$p}-u-margin-block-80 { margin-block:pxToRem(80); } .#{$p}-u-margin-block-start-40 { margin-block-start:pxToRem(40); } .#{$p}-u-margin-block-start-40-mobile { @media #{$break1} {margin-block-start:pxToRem(40);} } diff --git a/svelte.config.js b/svelte.config.js index 8316dd0e45..02cc35da4b 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -6,6 +6,7 @@ import { markdoc } from 'svelte-markdoc-preprocess'; import sequence from 'svelte-sequential-preprocessor'; import staticAdapter from '@sveltejs/adapter-static'; import nodeAdapter from '@sveltejs/adapter-node'; +import vercelAdapter from '@sveltejs/adapter-vercel'; function absolute(path) { return join(dirname(fileURLToPath(import.meta.url)), path); @@ -13,7 +14,8 @@ function absolute(path) { const isVercel = process.env.VERCEL === '1'; -const adapter = isVercel ? staticAdapter() : nodeAdapter(); +const adapter = isVercel ? vercelAdapter() : nodeAdapter(); +// const adapter = vercel /** @type {import('@sveltejs/kit').Config}*/ const config = { @@ -44,7 +46,8 @@ const config = { adapter, files: { hooks: { - server: isVercel ? undefined : './src/hooks/server.ts' + // server: isVercel ? undefined : './src/hooks/server.ts' + server: './src/hooks/server.ts' } }, alias: {