From bc888e3b18dec3c57728604f12eb750c20234bc0 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Wed, 17 Jan 2024 10:09:40 +0000 Subject: [PATCH] feat: discord threads (#513) --- .env.example | 6 + .github/workflows/production.yml | 8 +- .github/workflows/staging.yml | 8 +- .github/workflows/tests.yml | 6 + .gitignore | 4 +- docker/production.yml | 11 +- docker/stage.yml | 11 +- package.json | 11 +- pnpm-lock.yaml | 216 ++++++++++----- src/hooks/redirects.json | 3 +- src/icons/optimized/ext-link.svg | 1 + src/icons/optimized/message.svg | 1 + src/icons/output/_variables.scss | 48 ++-- src/icons/output/aw-icon.css | 48 ++-- src/icons/output/aw-icon.eot | Bin 12472 -> 12692 bytes src/icons/output/aw-icon.scss | 96 +++---- src/icons/output/aw-icon.svg | 54 ++-- src/icons/output/aw-icon.symbol.svg | 2 +- src/icons/output/aw-icon.ttf | Bin 12308 -> 12528 bytes src/icons/output/aw-icon.woff | Bin 7628 -> 7792 bytes src/icons/output/aw-icon.woff2 | Bin 6580 -> 6780 bytes src/icons/output/info.json | 104 +++---- src/icons/svg/ext-link.svg | 5 + src/icons/svg/message.svg | 3 + src/lib/actions/highlight.ts | 6 + src/lib/appwrite/index.ts | 9 + .../DropdownMenu/DropdownCheckboxItem.svelte | 24 ++ .../DropdownMenu/DropdownMenu.svelte | 33 +++ src/lib/components/FooterNav.svelte | 3 +- src/lib/components/MainFooter.svelte | 6 + src/lib/components/SeoOgImage.svelte | 13 + src/lib/utils/debounce.ts | 14 + src/lib/utils/random.ts | 9 + src/markdoc/layouts/Article.svelte | 10 +- src/markdoc/layouts/Category.svelte | 148 +++++----- src/markdoc/layouts/Post.svelte | 2 +- src/routes/heroes/+page.svelte | 12 - src/routes/threads/(assets)/bg-green.svg | 18 ++ src/routes/threads/(assets)/bg-red.svg | 18 ++ src/routes/threads/(assets)/empty-state.png | Bin 0 -> 56906 bytes src/routes/threads/+layout.ts | 1 + src/routes/threads/+page.svelte | 245 +++++++++++++++++ src/routes/threads/+page.ts | 13 + src/routes/threads/PreFooter.svelte | 72 +++++ src/routes/threads/TagsDropdown.svelte | 113 ++++++++ src/routes/threads/ThreadCard.svelte | 68 +++++ src/routes/threads/[id]/+page.server.ts | 22 ++ src/routes/threads/[id]/+page.svelte | 254 ++++++++++++++++++ src/routes/threads/[id]/CodeRenderer.svelte | 120 +++++++++ src/routes/threads/[id]/LinkRenderer.svelte | 11 + src/routes/threads/[id]/MessageCard.svelte | 87 ++++++ src/routes/threads/helpers.ts | 115 ++++++++ src/routes/threads/types.ts | 38 +++ src/scss/6-elements/_btn-tag.scss | 38 +++ src/scss/6-elements/_container.scss | 1 + src/scss/6-elements/_icon-button.scss | 18 +- src/scss/6-elements/_index.scss | 1 + src/scss/6-elements/_link.scss | 4 + src/scss/_10-utilities.scss | 1 + svelte.config.js | 2 +- teams-labels.png | Bin 1519450 -> 0 bytes 61 files changed, 1852 insertions(+), 343 deletions(-) create mode 100644 .env.example create mode 100644 src/icons/optimized/ext-link.svg create mode 100644 src/icons/optimized/message.svg create mode 100644 src/icons/svg/ext-link.svg create mode 100644 src/icons/svg/message.svg create mode 100644 src/lib/actions/highlight.ts create mode 100644 src/lib/appwrite/index.ts create mode 100644 src/lib/components/DropdownMenu/DropdownCheckboxItem.svelte create mode 100644 src/lib/components/DropdownMenu/DropdownMenu.svelte create mode 100644 src/lib/components/SeoOgImage.svelte create mode 100644 src/lib/utils/debounce.ts create mode 100644 src/lib/utils/random.ts create mode 100644 src/routes/threads/(assets)/bg-green.svg create mode 100644 src/routes/threads/(assets)/bg-red.svg create mode 100644 src/routes/threads/(assets)/empty-state.png create mode 100644 src/routes/threads/+layout.ts create mode 100644 src/routes/threads/+page.svelte create mode 100644 src/routes/threads/+page.ts create mode 100644 src/routes/threads/PreFooter.svelte create mode 100644 src/routes/threads/TagsDropdown.svelte create mode 100644 src/routes/threads/ThreadCard.svelte create mode 100644 src/routes/threads/[id]/+page.server.ts create mode 100644 src/routes/threads/[id]/+page.svelte create mode 100644 src/routes/threads/[id]/CodeRenderer.svelte create mode 100644 src/routes/threads/[id]/LinkRenderer.svelte create mode 100644 src/routes/threads/[id]/MessageCard.svelte create mode 100644 src/routes/threads/helpers.ts create mode 100644 src/routes/threads/types.ts create mode 100644 src/scss/6-elements/_btn-tag.scss delete mode 100644 teams-labels.png diff --git a/.env.example b/.env.example new file mode 100644 index 000000000..a5a87ff9b --- /dev/null +++ b/.env.example @@ -0,0 +1,6 @@ +PUBLIC_APPWRITE_PROJECT_INIT_ID= +PUBLIC_APPWRITE_PROJECT_ID= +PUBLIC_APPWRITE_DB_MAIN_ID= +PUBLIC_APPWRITE_COL_THREADS_ID= +PUBLIC_APPWRITE_COL_MESSAGES_ID= +PUBLIC_APPWRITE_FN_TLDR_ID= \ No newline at end of file diff --git a/.github/workflows/production.yml b/.github/workflows/production.yml index 7264e017b..697ddd9b5 100644 --- a/.github/workflows/production.yml +++ b/.github/workflows/production.yml @@ -18,7 +18,7 @@ jobs: uses: actions/checkout@v2 - name: Login to DockerHub - uses: docker/login-action@v1 + uses: docker/login-action@v1 with: registry: ghcr.io username: ${{ github.actor }} @@ -54,6 +54,12 @@ jobs: git checkout ${{ env.TAG }} rm -f .env + echo "PUBLIC_APPWRITE_PROJECT_INIT_ID=${{ env.PUBLIC_APPWRITE_PROJECT_INIT_ID }}" >> .env + echo "PUBLIC_APPWRITE_PROJECT_ID=${{ env.PUBLIC_APPWRITE_PROJECT_ID }}" >> .env + echo "PUBLIC_APPWRITE_DB_MAIN_ID=${{ env.PUBLIC_APPWRITE_DB_MAIN_ID }}" >> .env + echo "PUBLIC_APPWRITE_COL_THREADS_ID=${{ env.PUBLIC_APPWRITE_COL_THREADS_ID }}" >> .env + echo "PUBLIC_APPWRITE_COL_MESSAGES_ID=${{ env.PUBLIC_APPWRITE_COL_MESSAGES_ID }}" >> .env + echo "PUBLIC_APPWRITE_FN_TLDR_ID=${{ env.PUBLIC_APPWRITE_FN_TLDR_ID }}" >> .env echo "_APP_VERSION=${{ env.TAG }}" >> .env echo "_APP_DOMAIN=${{ secrets.PRD_APP_DOMAIN }}" >> .env echo "_APP_SYSTEM_SECURITY_EMAIL_ADDRESS=${{ secrets.APP_SYSTEM_SECURITY_EMAIL_ADDRESS }}" >> .env diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index a78c5f402..83d0ba86d 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -19,7 +19,7 @@ jobs: uses: actions/checkout@v2 - name: Login to DockerHub - uses: docker/login-action@v1 + uses: docker/login-action@v1 with: registry: ghcr.io username: ${{ github.actor }} @@ -55,6 +55,12 @@ jobs: git checkout ${{ env.TAG }} rm -f .env + echo "PUBLIC_APPWRITE_PROJECT_INIT_ID=${{ env.PUBLIC_APPWRITE_PROJECT_INIT_ID }}" >> .env + echo "PUBLIC_APPWRITE_PROJECT_ID=${{ env.PUBLIC_APPWRITE_PROJECT_ID }}" >> .env + echo "PUBLIC_APPWRITE_DB_MAIN_ID=${{ env.PUBLIC_APPWRITE_DB_MAIN_ID }}" >> .env + echo "PUBLIC_APPWRITE_COL_THREADS_ID=${{ env.PUBLIC_APPWRITE_COL_THREADS_ID }}" >> .env + echo "PUBLIC_APPWRITE_COL_MESSAGES_ID=${{ env.PUBLIC_APPWRITE_COL_MESSAGES_ID }}" >> .env + echo "PUBLIC_APPWRITE_FN_TLDR_ID=${{ env.PUBLIC_APPWRITE_FN_TLDR_ID }}" >> .env echo "_APP_VERSION=${{ env.TAG }}" >> .env echo "_APP_DOMAIN=${{ secrets.STG_APP_DOMAIN }}" >> .env echo "_APP_SYSTEM_SECURITY_EMAIL_ADDRESS=${{ secrets.APP_SYSTEM_SECURITY_EMAIL_ADDRESS }}" >> .env diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 11c5d7290..feb972944 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -37,4 +37,10 @@ jobs: - name: Build Website env: NODE_OPTIONS: '--max_old_space_size=4096' + PUBLIC_APPWRITE_PROJECT_INIT_ID: ${{ secrets.PUBLIC_APPWRITE_PROJECT_INIT_ID }} + PUBLIC_APPWRITE_PROJECT_ID: ${{ secrets.PUBLIC_APPWRITE_PROJECT_ID }} + PUBLIC_APPWRITE_DB_MAIN_ID: ${{ secrets.PUBLIC_APPWRITE_DB_MAIN_ID }} + PUBLIC_APPWRITE_COL_THREADS_ID: ${{ secrets.PUBLIC_APPWRITE_COL_THREADS_ID }} + PUBLIC_APPWRITE_COL_MESSAGES_ID: ${{ secrets.PUBLIC_APPWRITE_COL_MESSAGES_ID }} + PUBLIC_APPWRITE_FN_TLDR_ID: ${{ secrets.PUBLIC_APPWRITE_FN_TLDR_ID }} run: pnpm run build diff --git a/.gitignore b/.gitignore index f3eaf11ca..457b4a4bd 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,9 @@ node_modules /package .env .env.* +.envrc !.env.example vite.config.js.timestamp-* vite.config.ts.timestamp-* -package-lock.json \ No newline at end of file +package-lock.json +.tool-versions \ No newline at end of file diff --git a/docker/production.yml b/docker/production.yml index 98a138793..8cf3d604a 100644 --- a/docker/production.yml +++ b/docker/production.yml @@ -60,6 +60,13 @@ services: <<: *x-logging networks: - cloud + environment: + - PUBLIC_APPWRITE_PROJECT_INIT_ID + - PUBLIC_APPWRITE_PROJECT_ID + - PUBLIC_APPWRITE_DB_MAIN_ID + - PUBLIC_APPWRITE_COL_THREADS_ID + - PUBLIC_APPWRITE_COL_MESSAGES_ID + - PUBLIC_APPWRITE_FN_TLDR_ID deploy: <<: *x-update-config mode: replicated @@ -68,7 +75,7 @@ services: max_replicas_per_node: 2 constraints: - node.role == worker - preferences: + preferences: - spread: node.role == worker labels: - traefik.enable=true @@ -94,7 +101,7 @@ services: environment: - TIME_BETWEEN_RUNS=3600 - UNUSED_TIME=6h - + sematext-agent: image: sematext/agent:latest environment: diff --git a/docker/stage.yml b/docker/stage.yml index 5d2be7ef0..13dced3a7 100644 --- a/docker/stage.yml +++ b/docker/stage.yml @@ -61,6 +61,13 @@ services: <<: *x-logging networks: - cloud + environment: + - PUBLIC_APPWRITE_PROJECT_INIT_ID + - PUBLIC_APPWRITE_PROJECT_ID + - PUBLIC_APPWRITE_DB_MAIN_ID + - PUBLIC_APPWRITE_COL_THREADS_ID + - PUBLIC_APPWRITE_COL_MESSAGES_ID + - PUBLIC_APPWRITE_FN_TLDR_ID deploy: <<: *x-update-config mode: replicated @@ -69,7 +76,7 @@ services: max_replicas_per_node: 2 constraints: - node.role == worker - preferences: + preferences: - spread: node.role == worker labels: - traefik.enable=true @@ -96,7 +103,7 @@ services: - RUN_ON_STARTUP=true volumes: - /var/run/docker.sock:/var/run/docker.sock - + sematext-agent: image: sematext/agent:latest environment: diff --git a/package.json b/package.json index 31b218229..db1cc5089 100644 --- a/package.json +++ b/package.json @@ -20,18 +20,19 @@ }, "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/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", @@ -40,11 +41,12 @@ "oslllo-svg-fixer": "^3.0.0", "prettier": "^2.8.8", "prettier-plugin-svelte": "^2.10.1", - "sass": "^1.69.5", + "sass": "^1.69.7", "svelte": "^4.2.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", @@ -66,6 +68,7 @@ "markdown-it": "^13.0.2", "meilisearch": "^0.35.1", "motion": "^10.16.4", - "sharp": "^0.32.6" + "sharp": "^0.32.6", + "svelte-markdown": "^0.4.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 654ea7d0c..b991926d4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,29 +38,32 @@ dependencies: 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/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 +82,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 @@ -104,20 +110,23 @@ devDependencies: specifier: ^2.10.1 version: 2.10.1(prettier@2.8.8)(svelte@4.2.7) sass: - specifier: ^1.69.5 - version: 1.69.5 + specifier: ^1.69.7 + version: 1.69.7 svelte: specifier: ^4.2.7 version: 4.2.7 svelte-check: specifier: ^3.6.0 - version: 3.6.0(postcss@8.4.31)(sass@1.69.5)(svelte@4.2.7) + version: 3.6.0(postcss@8.4.31)(sass@1.69.7)(svelte@4.2.7) svelte-markdoc-preprocess: specifier: ^1.1.3 version: 1.1.3 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 @@ -132,7 +141,7 @@ devDependencies: version: 5.3.2 vite: specifier: ^4.5.1 - version: 4.5.1(@types/node@20.9.3)(sass@1.69.5) + version: 4.5.1(@types/node@20.9.3)(sass@1.69.7) vite-plugin-dynamic-import: specifier: ^1.5.0 version: 1.5.0 @@ -141,7 +150,7 @@ devDependencies: version: 1.1.7(vite@4.5.1) vitest: specifier: ^0.32.4 - version: 0.32.4(sass@1.69.5) + version: 0.32.4(sass@1.69.7) packages: @@ -156,7 +165,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==} @@ -462,6 +470,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 +877,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==} @@ -911,25 +920,26 @@ packages: '@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 @@ -1254,7 +1264,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 +1272,16 @@ 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/enhanced-img@0.1.5(svelte@4.2.7): @@ -1285,8 +1295,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 @@ -1308,7 +1318,7 @@ packages: svelte: 4.2.7 tiny-glob: 0.2.9 undici: 5.26.5 - vite: 4.5.1(@types/node@20.9.3)(sass@1.69.5) + vite: 4.5.1(@types/node@20.9.3)(sass@1.69.7) transitivePeerDependencies: - supports-color dev: true @@ -1324,7 +1334,7 @@ packages: '@sveltejs/vite-plugin-svelte': 2.5.2(svelte@4.2.7)(vite@4.5.1) debug: 4.3.4 svelte: 4.2.7 - vite: 4.5.1(@types/node@20.9.3)(sass@1.69.5) + vite: 4.5.1(@types/node@20.9.3)(sass@1.69.7) transitivePeerDependencies: - supports-color dev: true @@ -1343,12 +1353,18 @@ packages: magic-string: 0.30.5 svelte: 4.2.7 svelte-hmr: 0.15.3(svelte@4.2.7) - vite: 4.5.1(@types/node@20.9.3)(sass@1.69.5) + vite: 4.5.1(@types/node@20.9.3)(sass@1.69.7) vitefu: 0.2.5(vite@4.5.1) transitivePeerDependencies: - 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 +1424,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 +1491,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 @@ -1781,7 +1800,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==} @@ -1864,6 +1882,15 @@ 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 @@ -1883,7 +1910,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==} @@ -1927,6 +1953,10 @@ packages: resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} dev: true + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: true + /atob@2.1.2: resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} engines: {node: '>= 4.5.0'} @@ -1950,7 +1980,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==} @@ -2276,7 +2305,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 +2346,13 @@ 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 + dev: true + /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} @@ -2416,6 +2451,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: @@ -2457,7 +2500,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==} @@ -2579,6 +2621,11 @@ packages: slash: 3.0.0 dev: true + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: true + /delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} dev: true @@ -2591,7 +2638,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==} @@ -2938,7 +2984,6 @@ packages: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: '@types/estree': 1.0.5 - dev: true /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} @@ -3177,6 +3222,15 @@ packages: signal-exit: 4.1.0 dev: true + /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 + /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -3759,7 +3813,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 +3839,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'} @@ -3965,7 +4024,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==} @@ -4020,7 +4078,6 @@ packages: engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - dev: true /make-fetch-happen@10.2.1: resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} @@ -4070,6 +4127,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: @@ -4089,7 +4152,6 @@ packages: /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 +4220,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==} @@ -4428,6 +4488,18 @@ packages: /node-addon-api@6.1.0: resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} + /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} @@ -4748,7 +4820,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==} @@ -5182,8 +5253,8 @@ packages: rimraf: 2.7.1 dev: true - /sass@1.69.5: - resolution: {integrity: sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==} + /sass@1.69.7: + resolution: {integrity: sha512-rzj2soDeZ8wtE2egyLXgOOHQvaC2iosZrkF6v3EUG+tBwEvhqUCzm0VP3k9gHF9LXbSrRhT5SksoI56Iw8NPnQ==} engines: {node: '>=14.0.0'} hasBin: true dependencies: @@ -5413,7 +5484,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==} @@ -5582,7 +5652,7 @@ packages: engines: {node: '>= 0.4'} dev: true - /svelte-check@3.6.0(postcss@8.4.31)(sass@1.69.5)(svelte@4.2.7): + /svelte-check@3.6.0(postcss@8.4.31)(sass@1.69.7)(svelte@4.2.7): resolution: {integrity: sha512-8VfqhfuRJ1sKW+o8isH2kPi0RhjXH1nNsIbCFGyoUHG+ZxVxHYRKcb+S8eaL/1tyj3VGvWYx3Y5+oCUsJgnzcw==} hasBin: true peerDependencies: @@ -5595,7 +5665,7 @@ packages: picocolors: 1.0.0 sade: 1.8.1 svelte: 4.2.7 - svelte-preprocess: 5.1.0(postcss@8.4.31)(sass@1.69.5)(svelte@4.2.7)(typescript@5.3.2) + svelte-preprocess: 5.1.0(postcss@8.4.31)(sass@1.69.7)(svelte@4.2.7)(typescript@5.3.2) typescript: 5.3.2 transitivePeerDependencies: - '@babel/core' @@ -5649,6 +5719,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: @@ -5657,7 +5737,7 @@ packages: svelte: 4.2.7 dev: true - /svelte-preprocess@5.1.0(postcss@8.4.31)(sass@1.69.5)(svelte@4.2.7)(typescript@5.3.2): + /svelte-preprocess@5.1.0(postcss@8.4.31)(sass@1.69.7)(svelte@4.2.7)(typescript@5.3.2): resolution: {integrity: sha512-EkErPiDzHAc0k2MF5m6vBNmRUh338h2myhinUw/xaqsLs7/ZvsgREiLGj03VrSzbY/TB5ZXgBOsKraFee5yceA==} engines: {node: '>= 14.10.0'} requiresBuild: true @@ -5699,7 +5779,7 @@ packages: detect-indent: 6.1.0 magic-string: 0.27.0 postcss: 8.4.31 - sass: 1.69.5 + sass: 1.69.7 sorcery: 0.11.0 strip-indent: 3.0.0 svelte: 4.2.7 @@ -5731,6 +5811,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: @@ -5977,7 +6066,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==} @@ -6177,7 +6265,7 @@ packages: - rollup dev: true - /vite-node@0.32.4(@types/node@20.9.3)(sass@1.69.5): + /vite-node@0.32.4(@types/node@20.9.3)(sass@1.69.7): resolution: {integrity: sha512-L2gIw+dCxO0LK14QnUMoqSYpa9XRGnTTTDjW2h19Mr+GR0EFj4vx52W41gFXfMLqpA00eK4ZjOVYo1Xk//LFEw==} engines: {node: '>=v14.18.0'} hasBin: true @@ -6187,7 +6275,7 @@ packages: mlly: 1.4.2 pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.5.1(@types/node@20.9.3)(sass@1.69.5) + vite: 4.5.1(@types/node@20.9.3)(sass@1.69.7) transitivePeerDependencies: - '@types/node' - less @@ -6216,10 +6304,10 @@ packages: dependencies: ansi-colors: 4.1.3 pathe: 1.1.1 - vite: 4.5.1(@types/node@20.9.3)(sass@1.69.5) + vite: 4.5.1(@types/node@20.9.3)(sass@1.69.7) dev: true - /vite@4.5.1(@types/node@20.9.3)(sass@1.69.5): + /vite@4.5.1(@types/node@20.9.3)(sass@1.69.7): resolution: {integrity: sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -6251,7 +6339,7 @@ packages: esbuild: 0.18.20 postcss: 8.4.31 rollup: 3.29.4 - sass: 1.69.5 + sass: 1.69.7 optionalDependencies: fsevents: 2.3.3 dev: true @@ -6264,10 +6352,10 @@ packages: vite: optional: true dependencies: - vite: 4.5.1(@types/node@20.9.3)(sass@1.69.5) + vite: 4.5.1(@types/node@20.9.3)(sass@1.69.7) dev: true - /vitest@0.32.4(sass@1.69.5): + /vitest@0.32.4(sass@1.69.7): resolution: {integrity: sha512-3czFm8RnrsWwIzVDu/Ca48Y/M+qh3vOnF16czJm98Q/AN1y3B6PBsyV8Re91Ty5s7txKNjEhpgtGPcfdbh2MZg==} engines: {node: '>=v14.18.0'} hasBin: true @@ -6319,8 +6407,8 @@ packages: strip-literal: 1.3.0 tinybench: 2.5.1 tinypool: 0.5.0 - vite: 4.5.1(@types/node@20.9.3)(sass@1.69.5) - vite-node: 0.32.4(@types/node@20.9.3)(sass@1.69.5) + vite: 4.5.1(@types/node@20.9.3)(sass@1.69.7) + vite-node: 0.32.4(@types/node@20.9.3)(sass@1.69.7) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -6334,14 +6422,12 @@ packages: /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 2e8b3ecb2..29ebcdbc0 100644 --- a/src/hooks/redirects.json +++ b/src/hooks/redirects.json @@ -642,7 +642,7 @@ { "link": "/docs/models/runtime", "redirect": "/docs/references/cloud/models/runtime" - }, + }, { "link": "/docs/installation", "redirect": "/docs/advanced/self-hosting" @@ -659,5 +659,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 000000000..eb13a4883 --- /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 000000000..ec7c1a554 --- /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 3db5c407a..ac209cbbe 100644 --- a/src/icons/output/_variables.scss +++ b/src/icons/output/_variables.scss @@ -17,26 +17,28 @@ $aw-icon-dark: "\ea10"; $aw-icon-discord: "\ea11"; $aw-icon-divider-vertical: "\ea12"; $aw-icon-download: "\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-microsoft: "\ea1c"; -$aw-icon-minus: "\ea1d"; -$aw-icon-nuxt: "\ea1e"; -$aw-icon-platform: "\ea1f"; -$aw-icon-plus: "\ea20"; -$aw-icon-product-hunt: "\ea21"; -$aw-icon-refine: "\ea22"; -$aw-icon-rest: "\ea23"; -$aw-icon-search: "\ea24"; -$aw-icon-star: "\ea25"; -$aw-icon-system: "\ea26"; -$aw-icon-twitter: "\ea27"; -$aw-icon-vue: "\ea28"; -$aw-icon-x: "\ea29"; -$aw-icon-youtube: "\ea2a"; +$aw-icon-ext-link: "\ea14"; +$aw-icon-github: "\ea15"; +$aw-icon-google: "\ea16"; +$aw-icon-hamburger-menu: "\ea17"; +$aw-icon-light: "\ea18"; +$aw-icon-linkedin: "\ea19"; +$aw-icon-location: "\ea1a"; +$aw-icon-logout-left: "\ea1b"; +$aw-icon-logout-right: "\ea1c"; +$aw-icon-message: "\ea1d"; +$aw-icon-microsoft: "\ea1e"; +$aw-icon-minus: "\ea1f"; +$aw-icon-nuxt: "\ea20"; +$aw-icon-platform: "\ea21"; +$aw-icon-plus: "\ea22"; +$aw-icon-product-hunt: "\ea23"; +$aw-icon-refine: "\ea24"; +$aw-icon-rest: "\ea25"; +$aw-icon-search: "\ea26"; +$aw-icon-star: "\ea27"; +$aw-icon-system: "\ea28"; +$aw-icon-twitter: "\ea29"; +$aw-icon-vue: "\ea2a"; +$aw-icon-x: "\ea2b"; +$aw-icon-youtube: "\ea2c"; diff --git a/src/icons/output/aw-icon.css b/src/icons/output/aw-icon.css index 2c29d1ee9..d184b3e37 100644 --- a/src/icons/output/aw-icon.css +++ b/src/icons/output/aw-icon.css @@ -36,26 +36,28 @@ .aw-icon-discord:before { content: "\ea11"; } .aw-icon-divider-vertical:before { content: "\ea12"; } .aw-icon-download: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-microsoft:before { content: "\ea1c"; } -.aw-icon-minus:before { content: "\ea1d"; } -.aw-icon-nuxt:before { content: "\ea1e"; } -.aw-icon-platform:before { content: "\ea1f"; } -.aw-icon-plus:before { content: "\ea20"; } -.aw-icon-product-hunt:before { content: "\ea21"; } -.aw-icon-refine:before { content: "\ea22"; } -.aw-icon-rest:before { content: "\ea23"; } -.aw-icon-search:before { content: "\ea24"; } -.aw-icon-star:before { content: "\ea25"; } -.aw-icon-system:before { content: "\ea26"; } -.aw-icon-twitter:before { content: "\ea27"; } -.aw-icon-vue:before { content: "\ea28"; } -.aw-icon-x:before { content: "\ea29"; } -.aw-icon-youtube:before { content: "\ea2a"; } +.aw-icon-ext-link:before { content: "\ea14"; } +.aw-icon-github:before { content: "\ea15"; } +.aw-icon-google:before { content: "\ea16"; } +.aw-icon-hamburger-menu:before { content: "\ea17"; } +.aw-icon-light:before { content: "\ea18"; } +.aw-icon-linkedin:before { content: "\ea19"; } +.aw-icon-location:before { content: "\ea1a"; } +.aw-icon-logout-left:before { content: "\ea1b"; } +.aw-icon-logout-right:before { content: "\ea1c"; } +.aw-icon-message:before { content: "\ea1d"; } +.aw-icon-microsoft:before { content: "\ea1e"; } +.aw-icon-minus:before { content: "\ea1f"; } +.aw-icon-nuxt:before { content: "\ea20"; } +.aw-icon-platform:before { content: "\ea21"; } +.aw-icon-plus:before { content: "\ea22"; } +.aw-icon-product-hunt:before { content: "\ea23"; } +.aw-icon-refine:before { content: "\ea24"; } +.aw-icon-rest:before { content: "\ea25"; } +.aw-icon-search:before { content: "\ea26"; } +.aw-icon-star:before { content: "\ea27"; } +.aw-icon-system:before { content: "\ea28"; } +.aw-icon-twitter:before { content: "\ea29"; } +.aw-icon-vue:before { content: "\ea2a"; } +.aw-icon-x:before { content: "\ea2b"; } +.aw-icon-youtube:before { content: "\ea2c"; } diff --git a/src/icons/output/aw-icon.eot b/src/icons/output/aw-icon.eot index c2e4a0dba43680035b561b407ed865bf73a2de58..a113f905903bda8ff664483c45f0697d93ed3ea0 100644 GIT binary patch delta 889 zcmYL{O-NKx6oAjU_syGMXZ)L)GBtH<)aEr~e+rGIiK`S`2qA5phnXWdDva0!!BCqv zLCJHG;U;L2F2oojiHL}Z5Q;Xoupoa3VhA-YXkpkn-9_*5-Fwe>&bg0w-&-`N`fXFk z0k$V?&DzG^?(}5at!x4SZv#N0KV^;$&HmU25HkRBX>j=3mE7|ESpfYtK-fqQn3uzM z*8foLD$$fAq5qZ>w0=(1CR5{?`A@V0{7%Ed@MypJGV$a(^(QI5lrl48n8bsWKR|KS zh?yGL4wU&e0gP>WsB3IAJ-+<3(FBO@QPEE;fuU9dkaq-_-rd{i^R@f}xBNy1*4}l0 z{Xg&b$&X@-Vh0Geba9_yy~4+6SmWZYwIDRBMV2(o{mTG61gUChc2W5pXpo^Ejc)4A z8&*a(qqOE_%od@%o?DXw3&F#iiz*)JGOQhKD=VqquYgjT0}5alQ~*1AaR%7YK`_9s zOabf;DS%zM0@zh3fL)~m*c}GQ@&GKW6hLvlS^?~86u>T|0Cu$sV0T0T?7|9QSEm4W z^$K9upn!Vn&L5?K0G4!G46rj45V7+5+3H8`_wG&4h-bCHD7fb}yw7|md@l;y3fGHo z7QZQ>6Uuei9|W@W3HQIq9x*{%!~sgYX!oMOv{If7`bz`BN(=^?n_9&=?ewXrsEcB# zMz{GxHD2^#T~tP}sQQDhOGN2(2EuWgb-lo&C;D#mMjTEJZFXH7TKe28+OKv-9i3f> zn$r=Fi*k{clWh!4p`ldgMR@&uD}}r delta 669 zcmYL`O;1xn6o%iqb1AhgT&+;G%7^lyEd_BS8%-Nl#vfo!1%)P7g9)Zf4S@v? zF>Xk3!@@6O8Y3pg7N}^WV-q?5+2*Sh_g`W>RP-lHDzA?5{ZYp4<9>1E zXDsgh08%IT(NJmPMmf9w=QGfEhD9}#RUPRbC^->WP7f{&dl!BothbrL*2hfmfBzlU zUz{DrK{%4-kbOPoy?UXNrtEw&8GSghw4VhQq4!rQI>gc?xG1yU<->ioq?ytK=B4gq zS-|Y-z5DI~FCwQpL76#{X3yQJG_knZ0&&a&@evEe{9^%Pc0hnQZh`o?1!6WtfVjm1 zajOO5HlQLCNUhxh@ktBBrz{Y6SRn4SK-^`4xZ48pX$!=>5dq?a1qp=NDh7o82-RO~ zxfOm8iAC;3)*3PmYmL_$zj~wI_QC0BGCCf8TP@T-idA2?1`jD-%-Ji|cz;-#-g9|g F**`Mhl^Os5 diff --git a/src/icons/output/aw-icon.scss b/src/icons/output/aw-icon.scss index 830980aa6..11497b5fd 100644 --- a/src/icons/output/aw-icon.scss +++ b/src/icons/output/aw-icon.scss @@ -35,29 +35,31 @@ .aw-icon-discord:before { content: "\ea11"; } .aw-icon-divider-vertical:before { content: "\ea12"; } .aw-icon-download: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-microsoft:before { content: "\ea1c"; } -.aw-icon-minus:before { content: "\ea1d"; } -.aw-icon-nuxt:before { content: "\ea1e"; } -.aw-icon-platform:before { content: "\ea1f"; } -.aw-icon-plus:before { content: "\ea20"; } -.aw-icon-product-hunt:before { content: "\ea21"; } -.aw-icon-refine:before { content: "\ea22"; } -.aw-icon-rest:before { content: "\ea23"; } -.aw-icon-search:before { content: "\ea24"; } -.aw-icon-star:before { content: "\ea25"; } -.aw-icon-system:before { content: "\ea26"; } -.aw-icon-twitter:before { content: "\ea27"; } -.aw-icon-vue:before { content: "\ea28"; } -.aw-icon-x:before { content: "\ea29"; } -.aw-icon-youtube:before { content: "\ea2a"; } +.aw-icon-ext-link:before { content: "\ea14"; } +.aw-icon-github:before { content: "\ea15"; } +.aw-icon-google:before { content: "\ea16"; } +.aw-icon-hamburger-menu:before { content: "\ea17"; } +.aw-icon-light:before { content: "\ea18"; } +.aw-icon-linkedin:before { content: "\ea19"; } +.aw-icon-location:before { content: "\ea1a"; } +.aw-icon-logout-left:before { content: "\ea1b"; } +.aw-icon-logout-right:before { content: "\ea1c"; } +.aw-icon-message:before { content: "\ea1d"; } +.aw-icon-microsoft:before { content: "\ea1e"; } +.aw-icon-minus:before { content: "\ea1f"; } +.aw-icon-nuxt:before { content: "\ea20"; } +.aw-icon-platform:before { content: "\ea21"; } +.aw-icon-plus:before { content: "\ea22"; } +.aw-icon-product-hunt:before { content: "\ea23"; } +.aw-icon-refine:before { content: "\ea24"; } +.aw-icon-rest:before { content: "\ea25"; } +.aw-icon-search:before { content: "\ea26"; } +.aw-icon-star:before { content: "\ea27"; } +.aw-icon-system:before { content: "\ea28"; } +.aw-icon-twitter:before { content: "\ea29"; } +.aw-icon-vue:before { content: "\ea2a"; } +.aw-icon-x:before { content: "\ea2b"; } +.aw-icon-youtube:before { content: "\ea2c"; } $aw-icon-apple: "\ea01"; $aw-icon-arrow-down: "\ea02"; @@ -78,26 +80,28 @@ $aw-icon-dark: "\ea10"; $aw-icon-discord: "\ea11"; $aw-icon-divider-vertical: "\ea12"; $aw-icon-download: "\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-microsoft: "\ea1c"; -$aw-icon-minus: "\ea1d"; -$aw-icon-nuxt: "\ea1e"; -$aw-icon-platform: "\ea1f"; -$aw-icon-plus: "\ea20"; -$aw-icon-product-hunt: "\ea21"; -$aw-icon-refine: "\ea22"; -$aw-icon-rest: "\ea23"; -$aw-icon-search: "\ea24"; -$aw-icon-star: "\ea25"; -$aw-icon-system: "\ea26"; -$aw-icon-twitter: "\ea27"; -$aw-icon-vue: "\ea28"; -$aw-icon-x: "\ea29"; -$aw-icon-youtube: "\ea2a"; +$aw-icon-ext-link: "\ea14"; +$aw-icon-github: "\ea15"; +$aw-icon-google: "\ea16"; +$aw-icon-hamburger-menu: "\ea17"; +$aw-icon-light: "\ea18"; +$aw-icon-linkedin: "\ea19"; +$aw-icon-location: "\ea1a"; +$aw-icon-logout-left: "\ea1b"; +$aw-icon-logout-right: "\ea1c"; +$aw-icon-message: "\ea1d"; +$aw-icon-microsoft: "\ea1e"; +$aw-icon-minus: "\ea1f"; +$aw-icon-nuxt: "\ea20"; +$aw-icon-platform: "\ea21"; +$aw-icon-plus: "\ea22"; +$aw-icon-product-hunt: "\ea23"; +$aw-icon-refine: "\ea24"; +$aw-icon-rest: "\ea25"; +$aw-icon-search: "\ea26"; +$aw-icon-star: "\ea27"; +$aw-icon-system: "\ea28"; +$aw-icon-twitter: "\ea29"; +$aw-icon-vue: "\ea2a"; +$aw-icon-x: "\ea2b"; +$aw-icon-youtube: "\ea2c"; diff --git a/src/icons/output/aw-icon.svg b/src/icons/output/aw-icon.svg index d4bfb5dec..997c81b11 100644 --- a/src/icons/output/aw-icon.svg +++ b/src/icons/output/aw-icon.svg @@ -64,74 +64,80 @@ - + - + + diff --git a/src/icons/output/aw-icon.symbol.svg b/src/icons/output/aw-icon.symbol.svg index 8828199e7..0b02b5a95 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 d6fca9a0aa3b9add870e69ffc80b8e7f4514b066..c16ccdc3107481f8224c8f1eba248c1427562aa7 100644 GIT binary patch delta 872 zcmYL{Pe>F|7{I^pz1g=rv%2fQ-7V8iU0b!CW}`m}ZMEs4gGwEQkS^|En=7~~te8Qt z)H%qS4i+8^I;24qOB5mDAtHprLw2wrGlGy%`v)B?`(E$R48Ql@_xrx@4fAHMr#9^I zNInICmjNKvo3)4gr@w9iut@+u-#2jnY+>={G=O*p5H&Mt`%Lu8%5SP&CYm!O#4kQd z>sg{clN}km_m)Hoad!{4xViao%j zrAzjiP8c7c=`7%jYfN({Sb5XTzXZT-;HrdXgQ{mhgE4B+=%&_H(|OHWkUIvCyJD0V zPAmW8%%RIkYC^A}N_m;i32i;ksXm~93YvookS?SE>FBj3ARQfp1f;7}fOI<)AYGLL zq^nkdbYTTZw-X>Q2avKx0Ti#+DnPnA1xOcBfOPc=kZzX(q>Cy*x&{SE*QfyLniSAT z-K)DPAV5kwEeS|xDj?<@7e{LEcwc$fiUy08i_PK*pXqzz-{*f?a;#*f>{8kDayp^H zl(-el(-+)&&%4+tZIJ*d_o3T|fr>ES9|}|iLtzXBTbh&XsCMvx#TqP()CpH0Qs+ZI zHds7{rL_w}a73=_!DxbJA&QGcs^?;N%%f}Qatp10{#`d~JJ(@(IywWq&s8M+IxJzlN31vT@oE<|+c#?oY~;bsi++hgQyZHE$Wo#Rj;S#6ZkPu6aoVz{R; TWqHx#&ZcuYyD#nBjraWp<661` delta 641 zcmYL`%S&596o-FvZwS#uqp`;NO11Hon5wIGqo`e#{sH1jbA2RP7!4T3f|6}37L+UE zq6NEgp;nPB+(;30QKSnOwn#zIorL0JQE*YHzvC>N%QxSgGiT;9GdI>^bUv8r1JoRV z=wQ-H?JeG(0md?5ZpKI6#ZC|3t^>{$pnf_rYz;Nc?0;nKIeD32!g*&-aJ)WR!$fAF{v-%!g5g&S&W=97wa?!H?^5Vf(~*Wfz+**>2OL@?5eXTiEV#TxXuJ zpi~2~UjuQO24WskfS89CAg<6rT&aPWcOXDqt${e8f%qAakq#tRqk*_q1MzbW#6bR2$DmX42DE#e>c`u7* iePQ3I?_2i3`Nf|t4Y-OGAEUJ=JK5@1_J_7OpXnZwCysLf diff --git a/src/icons/output/aw-icon.woff b/src/icons/output/aw-icon.woff index e2308e787acb1d7ce3bdf29b3ed8c248a2e4149b..6df6275552b2ed508ae354e9a74e406c498b24b6 100644 GIT binary patch delta 7300 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 el<^RS`bu_Igu?kY5%$$#^h+zsvVVO@jQ4 delta 7149 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 jJc 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 literal 6580 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 diff --git a/src/icons/output/info.json b/src/icons/output/info.json index 45151a031..8b7cfb55b 100644 --- a/src/icons/output/info.json +++ b/src/icons/output/info.json @@ -113,142 +113,154 @@ "className": "aw-icon-download", "unicode": "" }, - "github": { + "ext-link": { "encodedCode": "\\ea14", "prefix": "aw-icon", - "className": "aw-icon-github", + "className": "aw-icon-ext-link", "unicode": "" }, - "google": { + "github": { "encodedCode": "\\ea15", "prefix": "aw-icon", - "className": "aw-icon-google", + "className": "aw-icon-github", "unicode": "" }, - "hamburger-menu": { + "google": { "encodedCode": "\\ea16", "prefix": "aw-icon", - "className": "aw-icon-hamburger-menu", + "className": "aw-icon-google", "unicode": "" }, - "light": { + "hamburger-menu": { "encodedCode": "\\ea17", "prefix": "aw-icon", - "className": "aw-icon-light", + "className": "aw-icon-hamburger-menu", "unicode": "" }, - "linkedin": { + "light": { "encodedCode": "\\ea18", "prefix": "aw-icon", - "className": "aw-icon-linkedin", + "className": "aw-icon-light", "unicode": "" }, - "location": { + "linkedin": { "encodedCode": "\\ea19", "prefix": "aw-icon", - "className": "aw-icon-location", + "className": "aw-icon-linkedin", "unicode": "" }, - "logout-left": { + "location": { "encodedCode": "\\ea1a", "prefix": "aw-icon", - "className": "aw-icon-logout-left", + "className": "aw-icon-location", "unicode": "" }, - "logout-right": { + "logout-left": { "encodedCode": "\\ea1b", "prefix": "aw-icon", - "className": "aw-icon-logout-right", + "className": "aw-icon-logout-left", "unicode": "" }, - "microsoft": { + "logout-right": { "encodedCode": "\\ea1c", "prefix": "aw-icon", - "className": "aw-icon-microsoft", + "className": "aw-icon-logout-right", "unicode": "" }, - "minus": { + "message": { "encodedCode": "\\ea1d", "prefix": "aw-icon", - "className": "aw-icon-minus", + "className": "aw-icon-message", "unicode": "" }, - "nuxt": { + "microsoft": { "encodedCode": "\\ea1e", "prefix": "aw-icon", - "className": "aw-icon-nuxt", + "className": "aw-icon-microsoft", "unicode": "" }, - "platform": { + "minus": { "encodedCode": "\\ea1f", "prefix": "aw-icon", - "className": "aw-icon-platform", + "className": "aw-icon-minus", "unicode": "" }, - "plus": { + "nuxt": { "encodedCode": "\\ea20", "prefix": "aw-icon", - "className": "aw-icon-plus", + "className": "aw-icon-nuxt", "unicode": "" }, - "product-hunt": { + "platform": { "encodedCode": "\\ea21", "prefix": "aw-icon", - "className": "aw-icon-product-hunt", + "className": "aw-icon-platform", "unicode": "" }, - "refine": { + "plus": { "encodedCode": "\\ea22", "prefix": "aw-icon", - "className": "aw-icon-refine", + "className": "aw-icon-plus", "unicode": "" }, - "rest": { + "product-hunt": { "encodedCode": "\\ea23", "prefix": "aw-icon", - "className": "aw-icon-rest", + "className": "aw-icon-product-hunt", "unicode": "" }, - "search": { + "refine": { "encodedCode": "\\ea24", "prefix": "aw-icon", - "className": "aw-icon-search", + "className": "aw-icon-refine", "unicode": "" }, - "star": { + "rest": { "encodedCode": "\\ea25", "prefix": "aw-icon", - "className": "aw-icon-star", + "className": "aw-icon-rest", "unicode": "" }, - "system": { + "search": { "encodedCode": "\\ea26", "prefix": "aw-icon", - "className": "aw-icon-system", + "className": "aw-icon-search", "unicode": "" }, - "twitter": { + "star": { "encodedCode": "\\ea27", "prefix": "aw-icon", - "className": "aw-icon-twitter", + "className": "aw-icon-star", "unicode": "" }, - "vue": { + "system": { "encodedCode": "\\ea28", "prefix": "aw-icon", - "className": "aw-icon-vue", + "className": "aw-icon-system", "unicode": "" }, - "x": { + "twitter": { "encodedCode": "\\ea29", "prefix": "aw-icon", - "className": "aw-icon-x", + "className": "aw-icon-twitter", "unicode": "" }, - "youtube": { + "vue": { "encodedCode": "\\ea2a", "prefix": "aw-icon", - "className": "aw-icon-youtube", + "className": "aw-icon-vue", "unicode": "" + }, + "x": { + "encodedCode": "\\ea2b", + "prefix": "aw-icon", + "className": "aw-icon-x", + "unicode": "" + }, + "youtube": { + "encodedCode": "\\ea2c", + "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 000000000..5f2901635 --- /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 000000000..8b72974e2 --- /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 000000000..8055de859 --- /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 000000000..68fc1da79 --- /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 000000000..7aa2a4fc7 --- /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 000000000..25de115b5 --- /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 c88e455d8..ded699ed8 100644 --- a/src/lib/components/FooterNav.svelte +++ b/src/lib/components/FooterNav.svelte @@ -31,11 +31,12 @@ { 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' }, ], Learn: [ { label: 'Docs', href: '/docs' }, { label: 'Community', href: '/community' }, + { label: 'Threads', href: '/threads' }, { label: 'Blog', href: '/blog' }, { label: 'Changelog', href: '/changelog' }, { diff --git a/src/lib/components/MainFooter.svelte b/src/lib/components/MainFooter.svelte index 2b8263c9e..691ae16bc 100644 --- a/src/lib/components/MainFooter.svelte +++ b/src/lib/components/MainFooter.svelte @@ -66,3 +66,9 @@ {/if} + + \ No newline at end of file diff --git a/src/lib/components/SeoOgImage.svelte b/src/lib/components/SeoOgImage.svelte new file mode 100644 index 000000000..773930495 --- /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 000000000..37bb1586f --- /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 000000000..eb61fe938 --- /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 7094c7e6a..ea34fc456 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 d169e781d..e8883cd29 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 994e4d758..7382e7ad8 100644 --- a/src/markdoc/layouts/Post.svelte +++ b/src/markdoc/layouts/Post.svelte @@ -66,7 +66,7 @@