your personal website on atproto - mirror blento.app

first commit

Florian 8c9f032e

+8096
+56
.github/workflows/deploy.yml
··· 1 + name: Deploy to GitHub Pages 2 + 3 + on: 4 + push: 5 + branches: 6 + - main 7 + workflow_dispatch: 8 + 9 + jobs: 10 + build_site: 11 + runs-on: ubuntu-latest 12 + steps: 13 + - name: Checkout 14 + uses: actions/checkout@v4 15 + 16 + - uses: pnpm/action-setup@v4 17 + with: 18 + version: 8.15.6 19 + 20 + - name: Setup Node.js environment 21 + uses: actions/setup-node@v4 22 + with: 23 + node-version: 20 24 + cache: 'pnpm' 25 + 26 + - name: Install dependencies 27 + run: pnpm install 28 + 29 + - name: build 30 + env: 31 + BASE_PATH: '/${{ github.event.repository.name }}' 32 + PUBLIC_HANDLE: 'flo-bit.dev' 33 + run: | 34 + pnpm run build 35 + 36 + - name: Upload Artifacts 37 + uses: actions/upload-pages-artifact@v3 38 + with: 39 + path: 'build/' 40 + 41 + deploy: 42 + needs: build_site 43 + runs-on: ubuntu-latest 44 + 45 + permissions: 46 + pages: write 47 + id-token: write 48 + 49 + environment: 50 + name: github-pages 51 + url: ${{ steps.deployment.outputs.page_url }} 52 + 53 + steps: 54 + - name: Deploy 55 + id: deployment 56 + uses: actions/deploy-pages@v4
+23
.gitignore
··· 1 + node_modules 2 + 3 + # Output 4 + .output 5 + .vercel 6 + .netlify 7 + .wrangler 8 + /.svelte-kit 9 + /build 10 + 11 + # OS 12 + .DS_Store 13 + Thumbs.db 14 + 15 + # Env 16 + .env 17 + .env.* 18 + !.env.example 19 + !.env.test 20 + 21 + # Vite 22 + vite.config.js.timestamp-* 23 + vite.config.ts.timestamp-*
+1
.npmrc
··· 1 + engine-strict=true
+4
.prettierignore
··· 1 + # Package Managers 2 + package-lock.json 3 + pnpm-lock.yaml 4 + yarn.lock
+15
.prettierrc
··· 1 + { 2 + "useTabs": true, 3 + "singleQuote": true, 4 + "trailingComma": "none", 5 + "printWidth": 100, 6 + "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"], 7 + "overrides": [ 8 + { 9 + "files": "*.svelte", 10 + "options": { 11 + "parser": "svelte" 12 + } 13 + } 14 + ] 15 + }
+21
LICENSE
··· 1 + MIT License Copyright (c) 2025 flo-bit 2 + 3 + Permission is hereby granted, free of 4 + charge, to any person obtaining a copy of this software and associated 5 + documentation files (the "Software"), to deal in the Software without 6 + restriction, including without limitation the rights to use, copy, modify, merge, 7 + publish, distribute, sublicense, and/or sell copies of the Software, and to 8 + permit persons to whom the Software is furnished to do so, subject to the 9 + following conditions: 10 + 11 + The above copyright notice and this permission notice 12 + (including the next paragraph) shall be included in all copies or substantial 13 + portions of the Software. 14 + 15 + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF 16 + ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO 18 + EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 19 + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 + THE SOFTWARE.
+49
README.md
··· 1 + # Editable Website 2 + 3 + Work in progress! Preview only. 4 + 5 + https://flo-bit.dev/svelsky/ 6 + 7 + Statically built svelte website using your bluesky pds as a backend with a wysiwyg editor. 8 + 9 + ## Why? 10 + 11 + - Statically built websites are fast and super cheap to host (often free on github 12 + pages, cloudflare, etc). 13 + 14 + - But they are usually hard to edit (for non-technical users), either you edit 15 + the code directly or you have to use (and usually pay for) a CMS of some kind. 16 + 17 + - This repo aims to combine the best of both worlds: cheap, fast and easy to edit 18 + (content editing only, design is static/only changeable by editing code). 19 + 20 + ## Development 21 + 22 + ```bash 23 + pnpm install 24 + pnpm run dev 25 + ``` 26 + 27 + ## Deployment with github pages 28 + 29 + 1. fork the repo and enable github pages in the repo settings (Settings -> Pages -> Source -> Github Actions) 30 + 31 + 2. change the handle to your bluesky handle in `.github/workflows/deploy.yml` line 32: 32 + 33 + ```bash 34 + PUBLIC_HANDLE: 'your-bluesky-handle' 35 + ``` 36 + 37 + 3. change the base path to your repo name in `svelte.config.js` line 13: 38 + 39 + ```ts 40 + base: process.env.NODE_ENV === 'development' ? '' : '/svelsky' 41 + ``` 42 + 43 + 4. push to github and wait for it to deploy 44 + 45 + 5. edit the website by going to `https://<your-github-username>.github.io/<repo-name>/edit`, 46 + signing in with your bluesky account, editing the website and saving at the end. 47 + 48 + 6. rerun the workflow manually by selecting the last workflow in the github actions tab and 49 + clicking the `Re-run all jobs` button or wait for the scheduled workflow that runs every 6 hours.
+34
eslint.config.js
··· 1 + import prettier from 'eslint-config-prettier'; 2 + import js from '@eslint/js'; 3 + import { includeIgnoreFile } from '@eslint/compat'; 4 + import svelte from 'eslint-plugin-svelte'; 5 + import globals from 'globals'; 6 + import { fileURLToPath } from 'node:url'; 7 + import ts from 'typescript-eslint'; 8 + const gitignorePath = fileURLToPath(new URL('./.gitignore', import.meta.url)); 9 + 10 + export default ts.config( 11 + includeIgnoreFile(gitignorePath), 12 + js.configs.recommended, 13 + ...ts.configs.recommended, 14 + ...svelte.configs['flat/recommended'], 15 + prettier, 16 + ...svelte.configs['flat/prettier'], 17 + { 18 + languageOptions: { 19 + globals: { 20 + ...globals.browser, 21 + ...globals.node 22 + } 23 + } 24 + }, 25 + { 26 + files: ['**/*.svelte'], 27 + 28 + languageOptions: { 29 + parserOptions: { 30 + parser: ts.parser 31 + } 32 + } 33 + } 34 + );
+65
package.json
··· 1 + { 2 + "name": "svelte-atproto-client-oauth", 3 + "private": true, 4 + "version": "0.0.1", 5 + "type": "module", 6 + "scripts": { 7 + "dev": "vite dev", 8 + "build": "vite build", 9 + "preview": "vite preview", 10 + "prepare": "svelte-kit sync || echo ''", 11 + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", 12 + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", 13 + "format": "prettier --write .", 14 + "lint": "prettier --check . && eslint ." 15 + }, 16 + "devDependencies": { 17 + "@eslint/compat": "^1.2.5", 18 + "@eslint/js": "^9.18.0", 19 + "@sveltejs/adapter-auto": "^4.0.0", 20 + "@sveltejs/adapter-cloudflare": "^7.2.4", 21 + "@sveltejs/adapter-static": "^3.0.8", 22 + "@sveltejs/kit": "^2.16.0", 23 + "@sveltejs/vite-plugin-svelte": "^5.0.0", 24 + "@tailwindcss/forms": "^0.5.10", 25 + "@tailwindcss/vite": "^4.0.0", 26 + "@types/turndown": "^5.0.5", 27 + "eslint": "^9.18.0", 28 + "eslint-config-prettier": "^10.0.1", 29 + "eslint-plugin-svelte": "^2.46.1", 30 + "globals": "^15.14.0", 31 + "prettier": "^3.4.2", 32 + "prettier-plugin-svelte": "^3.3.3", 33 + "prettier-plugin-tailwindcss": "^0.6.11", 34 + "svelte": "^5.45.8", 35 + "svelte-check": "^4.0.0", 36 + "tailwindcss": "^4.0.0", 37 + "typescript": "^5.0.0", 38 + "typescript-eslint": "^8.20.0", 39 + "vite": "^6.0.0" 40 + }, 41 + "dependencies": { 42 + "@atcute/client": "^3.1.0", 43 + "@atcute/oauth-browser-client": "^1.0.13", 44 + "@atproto/api": "^0.15.6", 45 + "@atproto/common-web": "^0.4.2", 46 + "@foxui/core": "^0.4.7", 47 + "@tailwindcss/typography": "^0.5.16", 48 + "@tiptap/core": "^2.12.0", 49 + "@tiptap/extension-document": "^2.12.0", 50 + "@tiptap/extension-image": "^2.12.0", 51 + "@tiptap/extension-link": "^2.12.0", 52 + "@tiptap/extension-paragraph": "^2.12.0", 53 + "@tiptap/extension-placeholder": "^2.12.0", 54 + "@tiptap/extension-text": "^2.12.0", 55 + "@tiptap/starter-kit": "^2.12.0", 56 + "bits-ui": "^2.14.4", 57 + "clsx": "^2.1.1", 58 + "marked": "^15.0.11", 59 + "svelte-sonner": "^1.0.7", 60 + "tailwind-merge": "^3.4.0", 61 + "tailwind-variants": "^3.2.2", 62 + "turndown": "^7.2.0" 63 + }, 64 + "license": "MIT" 65 + }
+5032
pnpm-lock.yaml
··· 1 + lockfileVersion: '9.0' 2 + 3 + settings: 4 + autoInstallPeers: true 5 + excludeLinksFromLockfile: false 6 + 7 + importers: 8 + 9 + .: 10 + dependencies: 11 + '@atcute/client': 12 + specifier: ^3.1.0 13 + version: 3.1.0 14 + '@atcute/oauth-browser-client': 15 + specifier: ^1.0.13 16 + version: 1.0.18 17 + '@atproto/api': 18 + specifier: ^0.15.6 19 + version: 0.15.6 20 + '@atproto/common-web': 21 + specifier: ^0.4.2 22 + version: 0.4.2 23 + '@foxui/core': 24 + specifier: ^0.4.7 25 + version: 0.4.7(svelte@5.45.8)(tailwindcss@4.1.5) 26 + '@tailwindcss/typography': 27 + specifier: ^0.5.16 28 + version: 0.5.16(tailwindcss@4.1.5) 29 + '@tiptap/core': 30 + specifier: ^2.12.0 31 + version: 2.12.0(@tiptap/pm@2.12.0) 32 + '@tiptap/extension-document': 33 + specifier: ^2.12.0 34 + version: 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)) 35 + '@tiptap/extension-image': 36 + specifier: ^2.12.0 37 + version: 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)) 38 + '@tiptap/extension-link': 39 + specifier: ^2.12.0 40 + version: 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0) 41 + '@tiptap/extension-paragraph': 42 + specifier: ^2.12.0 43 + version: 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)) 44 + '@tiptap/extension-placeholder': 45 + specifier: ^2.12.0 46 + version: 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0) 47 + '@tiptap/extension-text': 48 + specifier: ^2.12.0 49 + version: 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)) 50 + '@tiptap/starter-kit': 51 + specifier: ^2.12.0 52 + version: 2.12.0 53 + bits-ui: 54 + specifier: ^2.14.4 55 + version: 2.14.4(@internationalized/date@3.8.0)(@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8) 56 + clsx: 57 + specifier: ^2.1.1 58 + version: 2.1.1 59 + marked: 60 + specifier: ^15.0.11 61 + version: 15.0.11 62 + svelte-sonner: 63 + specifier: ^1.0.7 64 + version: 1.0.7(svelte@5.45.8) 65 + tailwind-merge: 66 + specifier: ^3.4.0 67 + version: 3.4.0 68 + tailwind-variants: 69 + specifier: ^3.2.2 70 + version: 3.2.2(tailwind-merge@3.4.0)(tailwindcss@4.1.5) 71 + turndown: 72 + specifier: ^7.2.0 73 + version: 7.2.0 74 + devDependencies: 75 + '@eslint/compat': 76 + specifier: ^1.2.5 77 + version: 1.2.9(eslint@9.26.0(jiti@2.4.2)) 78 + '@eslint/js': 79 + specifier: ^9.18.0 80 + version: 9.26.0 81 + '@sveltejs/adapter-auto': 82 + specifier: ^4.0.0 83 + version: 4.0.0(@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2))) 84 + '@sveltejs/adapter-cloudflare': 85 + specifier: ^7.2.4 86 + version: 7.2.4(@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(wrangler@4.54.0(@cloudflare/workers-types@4.20251225.0)) 87 + '@sveltejs/adapter-static': 88 + specifier: ^3.0.8 89 + version: 3.0.8(@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2))) 90 + '@sveltejs/kit': 91 + specifier: ^2.16.0 92 + version: 2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)) 93 + '@sveltejs/vite-plugin-svelte': 94 + specifier: ^5.0.0 95 + version: 5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)) 96 + '@tailwindcss/forms': 97 + specifier: ^0.5.10 98 + version: 0.5.10(tailwindcss@4.1.5) 99 + '@tailwindcss/vite': 100 + specifier: ^4.0.0 101 + version: 4.1.5(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)) 102 + '@types/turndown': 103 + specifier: ^5.0.5 104 + version: 5.0.5 105 + eslint: 106 + specifier: ^9.18.0 107 + version: 9.26.0(jiti@2.4.2) 108 + eslint-config-prettier: 109 + specifier: ^10.0.1 110 + version: 10.1.3(eslint@9.26.0(jiti@2.4.2)) 111 + eslint-plugin-svelte: 112 + specifier: ^2.46.1 113 + version: 2.46.1(eslint@9.26.0(jiti@2.4.2))(svelte@5.45.8) 114 + globals: 115 + specifier: ^15.14.0 116 + version: 15.15.0 117 + prettier: 118 + specifier: ^3.4.2 119 + version: 3.5.3 120 + prettier-plugin-svelte: 121 + specifier: ^3.3.3 122 + version: 3.3.3(prettier@3.5.3)(svelte@5.45.8) 123 + prettier-plugin-tailwindcss: 124 + specifier: ^0.6.11 125 + version: 0.6.11(prettier-plugin-svelte@3.3.3(prettier@3.5.3)(svelte@5.45.8))(prettier@3.5.3) 126 + svelte: 127 + specifier: ^5.45.8 128 + version: 5.45.8 129 + svelte-check: 130 + specifier: ^4.0.0 131 + version: 4.1.7(picomatch@4.0.2)(svelte@5.45.8)(typescript@5.8.3) 132 + tailwindcss: 133 + specifier: ^4.0.0 134 + version: 4.1.5 135 + typescript: 136 + specifier: ^5.0.0 137 + version: 5.8.3 138 + typescript-eslint: 139 + specifier: ^8.20.0 140 + version: 8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) 141 + vite: 142 + specifier: ^6.0.0 143 + version: 6.3.5(jiti@2.4.2)(lightningcss@1.29.2) 144 + 145 + packages: 146 + 147 + '@atcute/client@3.1.0': 148 + resolution: {integrity: sha512-+rQPsHXSf0DUm8XoHoaH7Y2E8tIpbsW84djyPj7dqAyrFIjvGuJ1X1DvMufwbTIcmLerdy+dzl34iZcz/h3Vhg==, tarball: https://registry.npmjs.org/@atcute/client/-/client-3.1.0.tgz} 149 + 150 + '@atcute/multibase@1.1.3': 151 + resolution: {integrity: sha512-vQQO0tDuQPguBvHdgV3ryn7R8U6beQ50KA/juYm+dCeT/3hOK2stMbX+IaW8JEuwkT5lJsU8wDIOicQT4mB7Ag==, tarball: https://registry.npmjs.org/@atcute/multibase/-/multibase-1.1.3.tgz} 152 + 153 + '@atcute/oauth-browser-client@1.0.18': 154 + resolution: {integrity: sha512-VPr7XIsdoHemoVhqDNe/kAKYK3k1o6IJvce7ngsBWoLq5gnls9S7cgRF4f9ucP/FAxDfZ7RQbWh7t6ethfwLrQ==, tarball: https://registry.npmjs.org/@atcute/oauth-browser-client/-/oauth-browser-client-1.0.18.tgz} 155 + 156 + '@atcute/uint8array@1.0.1': 157 + resolution: {integrity: sha512-AAnlFKyfDRgb9GNZJbhQ6OuMhbmNPirQyapb8KnmcEhxQZ3+tt+4NcwqekEegY4MpNqSTYeeTdyxq0wGZv1JHg==, tarball: https://registry.npmjs.org/@atcute/uint8array/-/uint8array-1.0.1.tgz} 158 + 159 + '@atproto/api@0.15.6': 160 + resolution: {integrity: sha512-hKwrBf60LcI4BqArWyrhWJWIpjwAWUJpW3PVvNzUB1q2W/ByC0JAuwq/F8tZpCEiiVBzHjHVRx4QNA2TA1cG3g==, tarball: https://registry.npmjs.org/@atproto/api/-/api-0.15.6.tgz} 161 + 162 + '@atproto/common-web@0.4.2': 163 + resolution: {integrity: sha512-vrXwGNoFGogodjQvJDxAeP3QbGtawgZute2ed1XdRO0wMixLk3qewtikZm06H259QDJVu6voKC5mubml+WgQUw==, tarball: https://registry.npmjs.org/@atproto/common-web/-/common-web-0.4.2.tgz} 164 + 165 + '@atproto/lexicon@0.4.11': 166 + resolution: {integrity: sha512-btefdnvNz2Ao2I+qbmj0F06HC8IlrM/IBz6qOBS50r0S6uDf5tOO+Mv2tSVdimFkdzyDdLtBI1sV36ONxz2cOw==, tarball: https://registry.npmjs.org/@atproto/lexicon/-/lexicon-0.4.11.tgz} 167 + 168 + '@atproto/syntax@0.4.0': 169 + resolution: {integrity: sha512-b9y5ceHS8YKOfP3mdKmwAx5yVj9294UN7FG2XzP6V5aKUdFazEYRnR9m5n5ZQFKa3GNvz7de9guZCJ/sUTcOAA==, tarball: https://registry.npmjs.org/@atproto/syntax/-/syntax-0.4.0.tgz} 170 + 171 + '@atproto/xrpc@0.7.0': 172 + resolution: {integrity: sha512-SfhP9dGx2qclaScFDb58Jnrmim5nk4geZXCqg6sB0I/KZhZEkr9iIx1hLCp+sxkIfEsmEJjeWO4B0rjUIJW5cw==, tarball: https://registry.npmjs.org/@atproto/xrpc/-/xrpc-0.7.0.tgz} 173 + 174 + '@cloudflare/kv-asset-handler@0.4.1': 175 + resolution: {integrity: sha512-Nu8ahitGFFJztxUml9oD/DLb7Z28C8cd8F46IVQ7y5Btz575pvMY8AqZsXkX7Gds29eCKdMgIHjIvzskHgPSFg==, tarball: https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.1.tgz} 176 + engines: {node: '>=18.0.0'} 177 + 178 + '@cloudflare/unenv-preset@2.7.13': 179 + resolution: {integrity: sha512-NulO1H8R/DzsJguLC0ndMuk4Ufv0KSlN+E54ay9rn9ZCQo0kpAPwwh3LhgpZ96a3Dr6L9LqW57M4CqC34iLOvw==, tarball: https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.7.13.tgz} 180 + peerDependencies: 181 + unenv: 2.0.0-rc.24 182 + workerd: ^1.20251202.0 183 + peerDependenciesMeta: 184 + workerd: 185 + optional: true 186 + 187 + '@cloudflare/workerd-darwin-64@1.20251210.0': 188 + resolution: {integrity: sha512-Nn9X1moUDERA9xtFdCQ2XpQXgAS9pOjiCxvOT8sVx9UJLAiBLkfSCGbpsYdarODGybXCpjRlc77Yppuolvt7oQ==, tarball: https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20251210.0.tgz} 189 + engines: {node: '>=16'} 190 + cpu: [x64] 191 + os: [darwin] 192 + 193 + '@cloudflare/workerd-darwin-arm64@1.20251210.0': 194 + resolution: {integrity: sha512-Mg8iYIZQFnbevq/ls9eW/eneWTk/EE13Pej1MwfkY5et0jVpdHnvOLywy/o+QtMJFef1AjsqXGULwAneYyBfHw==, tarball: https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20251210.0.tgz} 195 + engines: {node: '>=16'} 196 + cpu: [arm64] 197 + os: [darwin] 198 + 199 + '@cloudflare/workerd-linux-64@1.20251210.0': 200 + resolution: {integrity: sha512-kjC2fCZhZ2Gkm1biwk2qByAYpGguK5Gf5ic8owzSCUw0FOUfQxTZUT9Lp3gApxsfTLbbnLBrX/xzWjywH9QR4g==, tarball: https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20251210.0.tgz} 201 + engines: {node: '>=16'} 202 + cpu: [x64] 203 + os: [linux] 204 + 205 + '@cloudflare/workerd-linux-arm64@1.20251210.0': 206 + resolution: {integrity: sha512-2IB37nXi7PZVQLa1OCuO7/6pNxqisRSO8DmCQ5x/3sezI5op1vwOxAcb1osAnuVsVN9bbvpw70HJvhKruFJTuA==, tarball: https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20251210.0.tgz} 207 + engines: {node: '>=16'} 208 + cpu: [arm64] 209 + os: [linux] 210 + 211 + '@cloudflare/workerd-windows-64@1.20251210.0': 212 + resolution: {integrity: sha512-Uaz6/9XE+D6E7pCY4OvkCuJHu7HcSDzeGcCGY1HLhojXhHd7yL52c3yfiyJdS8hPatiAa0nn5qSI/42+aTdDSw==, tarball: https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20251210.0.tgz} 213 + engines: {node: '>=16'} 214 + cpu: [x64] 215 + os: [win32] 216 + 217 + '@cloudflare/workers-types@4.20251225.0': 218 + resolution: {integrity: sha512-ZZl0cNLFcsBRFKtMftKWOsfAybUYSeiTMzpQV1NlTVlByHAs1rGQt45Jw/qz8LrfHoq9PGTieSj9W350Gi4Pvg==, tarball: https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20251225.0.tgz} 219 + 220 + '@cspotcode/source-map-support@0.8.1': 221 + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==, tarball: https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz} 222 + engines: {node: '>=12'} 223 + 224 + '@emnapi/runtime@1.7.1': 225 + resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==, tarball: https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz} 226 + 227 + '@esbuild/aix-ppc64@0.25.4': 228 + resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz} 229 + engines: {node: '>=18'} 230 + cpu: [ppc64] 231 + os: [aix] 232 + 233 + '@esbuild/aix-ppc64@0.27.0': 234 + resolution: {integrity: sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.0.tgz} 235 + engines: {node: '>=18'} 236 + cpu: [ppc64] 237 + os: [aix] 238 + 239 + '@esbuild/android-arm64@0.25.4': 240 + resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz} 241 + engines: {node: '>=18'} 242 + cpu: [arm64] 243 + os: [android] 244 + 245 + '@esbuild/android-arm64@0.27.0': 246 + resolution: {integrity: sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.0.tgz} 247 + engines: {node: '>=18'} 248 + cpu: [arm64] 249 + os: [android] 250 + 251 + '@esbuild/android-arm@0.25.4': 252 + resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz} 253 + engines: {node: '>=18'} 254 + cpu: [arm] 255 + os: [android] 256 + 257 + '@esbuild/android-arm@0.27.0': 258 + resolution: {integrity: sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.0.tgz} 259 + engines: {node: '>=18'} 260 + cpu: [arm] 261 + os: [android] 262 + 263 + '@esbuild/android-x64@0.25.4': 264 + resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz} 265 + engines: {node: '>=18'} 266 + cpu: [x64] 267 + os: [android] 268 + 269 + '@esbuild/android-x64@0.27.0': 270 + resolution: {integrity: sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.0.tgz} 271 + engines: {node: '>=18'} 272 + cpu: [x64] 273 + os: [android] 274 + 275 + '@esbuild/darwin-arm64@0.25.4': 276 + resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz} 277 + engines: {node: '>=18'} 278 + cpu: [arm64] 279 + os: [darwin] 280 + 281 + '@esbuild/darwin-arm64@0.27.0': 282 + resolution: {integrity: sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.0.tgz} 283 + engines: {node: '>=18'} 284 + cpu: [arm64] 285 + os: [darwin] 286 + 287 + '@esbuild/darwin-x64@0.25.4': 288 + resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz} 289 + engines: {node: '>=18'} 290 + cpu: [x64] 291 + os: [darwin] 292 + 293 + '@esbuild/darwin-x64@0.27.0': 294 + resolution: {integrity: sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.0.tgz} 295 + engines: {node: '>=18'} 296 + cpu: [x64] 297 + os: [darwin] 298 + 299 + '@esbuild/freebsd-arm64@0.25.4': 300 + resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz} 301 + engines: {node: '>=18'} 302 + cpu: [arm64] 303 + os: [freebsd] 304 + 305 + '@esbuild/freebsd-arm64@0.27.0': 306 + resolution: {integrity: sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.0.tgz} 307 + engines: {node: '>=18'} 308 + cpu: [arm64] 309 + os: [freebsd] 310 + 311 + '@esbuild/freebsd-x64@0.25.4': 312 + resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz} 313 + engines: {node: '>=18'} 314 + cpu: [x64] 315 + os: [freebsd] 316 + 317 + '@esbuild/freebsd-x64@0.27.0': 318 + resolution: {integrity: sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.0.tgz} 319 + engines: {node: '>=18'} 320 + cpu: [x64] 321 + os: [freebsd] 322 + 323 + '@esbuild/linux-arm64@0.25.4': 324 + resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz} 325 + engines: {node: '>=18'} 326 + cpu: [arm64] 327 + os: [linux] 328 + 329 + '@esbuild/linux-arm64@0.27.0': 330 + resolution: {integrity: sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.0.tgz} 331 + engines: {node: '>=18'} 332 + cpu: [arm64] 333 + os: [linux] 334 + 335 + '@esbuild/linux-arm@0.25.4': 336 + resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz} 337 + engines: {node: '>=18'} 338 + cpu: [arm] 339 + os: [linux] 340 + 341 + '@esbuild/linux-arm@0.27.0': 342 + resolution: {integrity: sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.0.tgz} 343 + engines: {node: '>=18'} 344 + cpu: [arm] 345 + os: [linux] 346 + 347 + '@esbuild/linux-ia32@0.25.4': 348 + resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz} 349 + engines: {node: '>=18'} 350 + cpu: [ia32] 351 + os: [linux] 352 + 353 + '@esbuild/linux-ia32@0.27.0': 354 + resolution: {integrity: sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.0.tgz} 355 + engines: {node: '>=18'} 356 + cpu: [ia32] 357 + os: [linux] 358 + 359 + '@esbuild/linux-loong64@0.25.4': 360 + resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz} 361 + engines: {node: '>=18'} 362 + cpu: [loong64] 363 + os: [linux] 364 + 365 + '@esbuild/linux-loong64@0.27.0': 366 + resolution: {integrity: sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.0.tgz} 367 + engines: {node: '>=18'} 368 + cpu: [loong64] 369 + os: [linux] 370 + 371 + '@esbuild/linux-mips64el@0.25.4': 372 + resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz} 373 + engines: {node: '>=18'} 374 + cpu: [mips64el] 375 + os: [linux] 376 + 377 + '@esbuild/linux-mips64el@0.27.0': 378 + resolution: {integrity: sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.0.tgz} 379 + engines: {node: '>=18'} 380 + cpu: [mips64el] 381 + os: [linux] 382 + 383 + '@esbuild/linux-ppc64@0.25.4': 384 + resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz} 385 + engines: {node: '>=18'} 386 + cpu: [ppc64] 387 + os: [linux] 388 + 389 + '@esbuild/linux-ppc64@0.27.0': 390 + resolution: {integrity: sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.0.tgz} 391 + engines: {node: '>=18'} 392 + cpu: [ppc64] 393 + os: [linux] 394 + 395 + '@esbuild/linux-riscv64@0.25.4': 396 + resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz} 397 + engines: {node: '>=18'} 398 + cpu: [riscv64] 399 + os: [linux] 400 + 401 + '@esbuild/linux-riscv64@0.27.0': 402 + resolution: {integrity: sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.0.tgz} 403 + engines: {node: '>=18'} 404 + cpu: [riscv64] 405 + os: [linux] 406 + 407 + '@esbuild/linux-s390x@0.25.4': 408 + resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz} 409 + engines: {node: '>=18'} 410 + cpu: [s390x] 411 + os: [linux] 412 + 413 + '@esbuild/linux-s390x@0.27.0': 414 + resolution: {integrity: sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.0.tgz} 415 + engines: {node: '>=18'} 416 + cpu: [s390x] 417 + os: [linux] 418 + 419 + '@esbuild/linux-x64@0.25.4': 420 + resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz} 421 + engines: {node: '>=18'} 422 + cpu: [x64] 423 + os: [linux] 424 + 425 + '@esbuild/linux-x64@0.27.0': 426 + resolution: {integrity: sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.0.tgz} 427 + engines: {node: '>=18'} 428 + cpu: [x64] 429 + os: [linux] 430 + 431 + '@esbuild/netbsd-arm64@0.25.4': 432 + resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==, tarball: https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz} 433 + engines: {node: '>=18'} 434 + cpu: [arm64] 435 + os: [netbsd] 436 + 437 + '@esbuild/netbsd-arm64@0.27.0': 438 + resolution: {integrity: sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==, tarball: https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.0.tgz} 439 + engines: {node: '>=18'} 440 + cpu: [arm64] 441 + os: [netbsd] 442 + 443 + '@esbuild/netbsd-x64@0.25.4': 444 + resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz} 445 + engines: {node: '>=18'} 446 + cpu: [x64] 447 + os: [netbsd] 448 + 449 + '@esbuild/netbsd-x64@0.27.0': 450 + resolution: {integrity: sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.0.tgz} 451 + engines: {node: '>=18'} 452 + cpu: [x64] 453 + os: [netbsd] 454 + 455 + '@esbuild/openbsd-arm64@0.25.4': 456 + resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==, tarball: https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz} 457 + engines: {node: '>=18'} 458 + cpu: [arm64] 459 + os: [openbsd] 460 + 461 + '@esbuild/openbsd-arm64@0.27.0': 462 + resolution: {integrity: sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==, tarball: https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.0.tgz} 463 + engines: {node: '>=18'} 464 + cpu: [arm64] 465 + os: [openbsd] 466 + 467 + '@esbuild/openbsd-x64@0.25.4': 468 + resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz} 469 + engines: {node: '>=18'} 470 + cpu: [x64] 471 + os: [openbsd] 472 + 473 + '@esbuild/openbsd-x64@0.27.0': 474 + resolution: {integrity: sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.0.tgz} 475 + engines: {node: '>=18'} 476 + cpu: [x64] 477 + os: [openbsd] 478 + 479 + '@esbuild/openharmony-arm64@0.27.0': 480 + resolution: {integrity: sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==, tarball: https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.0.tgz} 481 + engines: {node: '>=18'} 482 + cpu: [arm64] 483 + os: [openharmony] 484 + 485 + '@esbuild/sunos-x64@0.25.4': 486 + resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz} 487 + engines: {node: '>=18'} 488 + cpu: [x64] 489 + os: [sunos] 490 + 491 + '@esbuild/sunos-x64@0.27.0': 492 + resolution: {integrity: sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.0.tgz} 493 + engines: {node: '>=18'} 494 + cpu: [x64] 495 + os: [sunos] 496 + 497 + '@esbuild/win32-arm64@0.25.4': 498 + resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz} 499 + engines: {node: '>=18'} 500 + cpu: [arm64] 501 + os: [win32] 502 + 503 + '@esbuild/win32-arm64@0.27.0': 504 + resolution: {integrity: sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.0.tgz} 505 + engines: {node: '>=18'} 506 + cpu: [arm64] 507 + os: [win32] 508 + 509 + '@esbuild/win32-ia32@0.25.4': 510 + resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz} 511 + engines: {node: '>=18'} 512 + cpu: [ia32] 513 + os: [win32] 514 + 515 + '@esbuild/win32-ia32@0.27.0': 516 + resolution: {integrity: sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.0.tgz} 517 + engines: {node: '>=18'} 518 + cpu: [ia32] 519 + os: [win32] 520 + 521 + '@esbuild/win32-x64@0.25.4': 522 + resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz} 523 + engines: {node: '>=18'} 524 + cpu: [x64] 525 + os: [win32] 526 + 527 + '@esbuild/win32-x64@0.27.0': 528 + resolution: {integrity: sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.0.tgz} 529 + engines: {node: '>=18'} 530 + cpu: [x64] 531 + os: [win32] 532 + 533 + '@eslint-community/eslint-utils@4.7.0': 534 + resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==, tarball: https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz} 535 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 536 + peerDependencies: 537 + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 538 + 539 + '@eslint-community/regexpp@4.12.1': 540 + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==, tarball: https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz} 541 + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 542 + 543 + '@eslint/compat@1.2.9': 544 + resolution: {integrity: sha512-gCdSY54n7k+driCadyMNv8JSPzYLeDVM/ikZRtvtROBpRdFSkS8W9A82MqsaY7lZuwL0wiapgD0NT1xT0hyJsA==, tarball: https://registry.npmjs.org/@eslint/compat/-/compat-1.2.9.tgz} 545 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 546 + peerDependencies: 547 + eslint: ^9.10.0 548 + peerDependenciesMeta: 549 + eslint: 550 + optional: true 551 + 552 + '@eslint/config-array@0.20.0': 553 + resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==, tarball: https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz} 554 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 555 + 556 + '@eslint/config-helpers@0.2.2': 557 + resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==, tarball: https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz} 558 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 559 + 560 + '@eslint/core@0.13.0': 561 + resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==, tarball: https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz} 562 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 563 + 564 + '@eslint/eslintrc@3.3.1': 565 + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==, tarball: https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz} 566 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 567 + 568 + '@eslint/js@9.26.0': 569 + resolution: {integrity: sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==, tarball: https://registry.npmjs.org/@eslint/js/-/js-9.26.0.tgz} 570 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 571 + 572 + '@eslint/object-schema@2.1.6': 573 + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==, tarball: https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz} 574 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 575 + 576 + '@eslint/plugin-kit@0.2.8': 577 + resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==, tarball: https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz} 578 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 579 + 580 + '@floating-ui/core@1.7.3': 581 + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==, tarball: https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz} 582 + 583 + '@floating-ui/dom@1.7.4': 584 + resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==, tarball: https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz} 585 + 586 + '@floating-ui/utils@0.2.10': 587 + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==, tarball: https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz} 588 + 589 + '@foxui/core@0.4.7': 590 + resolution: {integrity: sha512-/J31Zra1Jlfn2HeLqKj7q2LmZoDc5pPEZU1SMrLYpJuv3QN+rl9qzAal0gwjGbhgNA/jAk7P2jqTgF4adngMkw==, tarball: https://registry.npmjs.org/@foxui/core/-/core-0.4.7.tgz} 591 + peerDependencies: 592 + svelte: '>=5' 593 + tailwindcss: '>=3' 594 + 595 + '@humanfs/core@0.19.1': 596 + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==, tarball: https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz} 597 + engines: {node: '>=18.18.0'} 598 + 599 + '@humanfs/node@0.16.6': 600 + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==, tarball: https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz} 601 + engines: {node: '>=18.18.0'} 602 + 603 + '@humanwhocodes/module-importer@1.0.1': 604 + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, tarball: https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz} 605 + engines: {node: '>=12.22'} 606 + 607 + '@humanwhocodes/retry@0.3.1': 608 + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==, tarball: https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz} 609 + engines: {node: '>=18.18'} 610 + 611 + '@humanwhocodes/retry@0.4.3': 612 + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==, tarball: https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz} 613 + engines: {node: '>=18.18'} 614 + 615 + '@img/sharp-darwin-arm64@0.33.5': 616 + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==, tarball: https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz} 617 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 618 + cpu: [arm64] 619 + os: [darwin] 620 + 621 + '@img/sharp-darwin-x64@0.33.5': 622 + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==, tarball: https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz} 623 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 624 + cpu: [x64] 625 + os: [darwin] 626 + 627 + '@img/sharp-libvips-darwin-arm64@1.0.4': 628 + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==, tarball: https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz} 629 + cpu: [arm64] 630 + os: [darwin] 631 + 632 + '@img/sharp-libvips-darwin-x64@1.0.4': 633 + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==, tarball: https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz} 634 + cpu: [x64] 635 + os: [darwin] 636 + 637 + '@img/sharp-libvips-linux-arm64@1.0.4': 638 + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz} 639 + cpu: [arm64] 640 + os: [linux] 641 + 642 + '@img/sharp-libvips-linux-arm@1.0.5': 643 + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz} 644 + cpu: [arm] 645 + os: [linux] 646 + 647 + '@img/sharp-libvips-linux-s390x@1.0.4': 648 + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz} 649 + cpu: [s390x] 650 + os: [linux] 651 + 652 + '@img/sharp-libvips-linux-x64@1.0.4': 653 + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz} 654 + cpu: [x64] 655 + os: [linux] 656 + 657 + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': 658 + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz} 659 + cpu: [arm64] 660 + os: [linux] 661 + 662 + '@img/sharp-libvips-linuxmusl-x64@1.0.4': 663 + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz} 664 + cpu: [x64] 665 + os: [linux] 666 + 667 + '@img/sharp-linux-arm64@0.33.5': 668 + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==, tarball: https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz} 669 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 670 + cpu: [arm64] 671 + os: [linux] 672 + 673 + '@img/sharp-linux-arm@0.33.5': 674 + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==, tarball: https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz} 675 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 676 + cpu: [arm] 677 + os: [linux] 678 + 679 + '@img/sharp-linux-s390x@0.33.5': 680 + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==, tarball: https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz} 681 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 682 + cpu: [s390x] 683 + os: [linux] 684 + 685 + '@img/sharp-linux-x64@0.33.5': 686 + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==, tarball: https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz} 687 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 688 + cpu: [x64] 689 + os: [linux] 690 + 691 + '@img/sharp-linuxmusl-arm64@0.33.5': 692 + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==, tarball: https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz} 693 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 694 + cpu: [arm64] 695 + os: [linux] 696 + 697 + '@img/sharp-linuxmusl-x64@0.33.5': 698 + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==, tarball: https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz} 699 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 700 + cpu: [x64] 701 + os: [linux] 702 + 703 + '@img/sharp-wasm32@0.33.5': 704 + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==, tarball: https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz} 705 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 706 + cpu: [wasm32] 707 + 708 + '@img/sharp-win32-ia32@0.33.5': 709 + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==, tarball: https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz} 710 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 711 + cpu: [ia32] 712 + os: [win32] 713 + 714 + '@img/sharp-win32-x64@0.33.5': 715 + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==, tarball: https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz} 716 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 717 + cpu: [x64] 718 + os: [win32] 719 + 720 + '@internationalized/date@3.8.0': 721 + resolution: {integrity: sha512-J51AJ0fEL68hE4CwGPa6E0PO6JDaVLd8aln48xFCSy7CZkZc96dGEGmLs2OEEbBxcsVZtfrqkXJwI2/MSG8yKw==, tarball: https://registry.npmjs.org/@internationalized/date/-/date-3.8.0.tgz} 722 + 723 + '@jridgewell/gen-mapping@0.3.13': 724 + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==, tarball: https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz} 725 + 726 + '@jridgewell/remapping@2.3.5': 727 + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==, tarball: https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz} 728 + 729 + '@jridgewell/resolve-uri@3.1.2': 730 + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, tarball: https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz} 731 + engines: {node: '>=6.0.0'} 732 + 733 + '@jridgewell/sourcemap-codec@1.5.0': 734 + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==, tarball: https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz} 735 + 736 + '@jridgewell/trace-mapping@0.3.25': 737 + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==, tarball: https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz} 738 + 739 + '@jridgewell/trace-mapping@0.3.31': 740 + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==, tarball: https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz} 741 + 742 + '@jridgewell/trace-mapping@0.3.9': 743 + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==, tarball: https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz} 744 + 745 + '@mixmark-io/domino@2.2.0': 746 + resolution: {integrity: sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==, tarball: https://registry.npmjs.org/@mixmark-io/domino/-/domino-2.2.0.tgz} 747 + 748 + '@modelcontextprotocol/sdk@1.11.0': 749 + resolution: {integrity: sha512-k/1pb70eD638anoi0e8wUGAlbMJXyvdV4p62Ko+EZ7eBe1xMx8Uhak1R5DgfoofsK5IBBnRwsYGTaLZl+6/+RQ==, tarball: https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.0.tgz} 750 + engines: {node: '>=18'} 751 + 752 + '@nodelib/fs.scandir@2.1.5': 753 + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, tarball: https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz} 754 + engines: {node: '>= 8'} 755 + 756 + '@nodelib/fs.stat@2.0.5': 757 + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, tarball: https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz} 758 + engines: {node: '>= 8'} 759 + 760 + '@nodelib/fs.walk@1.2.8': 761 + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, tarball: https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz} 762 + engines: {node: '>= 8'} 763 + 764 + '@number-flow/svelte@0.3.9': 765 + resolution: {integrity: sha512-CTw1+e0074GzbPX2IHcNCaK8nqxGNCOIUnQUjEjhcmBwBxOAhN3GYLQ6cJHvhQnWwplVe4eQ3z+c25Vttr2stQ==, tarball: https://registry.npmjs.org/@number-flow/svelte/-/svelte-0.3.9.tgz} 766 + peerDependencies: 767 + svelte: ^4 || ^5 768 + 769 + '@polka/url@1.0.0-next.29': 770 + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==, tarball: https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz} 771 + 772 + '@poppinss/colors@4.1.6': 773 + resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==, tarball: https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.6.tgz} 774 + 775 + '@poppinss/dumper@0.6.5': 776 + resolution: {integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==, tarball: https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.6.5.tgz} 777 + 778 + '@poppinss/exception@1.2.3': 779 + resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==, tarball: https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.3.tgz} 780 + 781 + '@remirror/core-constants@3.0.0': 782 + resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==, tarball: https://registry.npmjs.org/@remirror/core-constants/-/core-constants-3.0.0.tgz} 783 + 784 + '@rollup/rollup-android-arm-eabi@4.40.2': 785 + resolution: {integrity: sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==, tarball: https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.2.tgz} 786 + cpu: [arm] 787 + os: [android] 788 + 789 + '@rollup/rollup-android-arm64@4.40.2': 790 + resolution: {integrity: sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw==, tarball: https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.2.tgz} 791 + cpu: [arm64] 792 + os: [android] 793 + 794 + '@rollup/rollup-darwin-arm64@4.40.2': 795 + resolution: {integrity: sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w==, tarball: https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.2.tgz} 796 + cpu: [arm64] 797 + os: [darwin] 798 + 799 + '@rollup/rollup-darwin-x64@4.40.2': 800 + resolution: {integrity: sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ==, tarball: https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.2.tgz} 801 + cpu: [x64] 802 + os: [darwin] 803 + 804 + '@rollup/rollup-freebsd-arm64@4.40.2': 805 + resolution: {integrity: sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ==, tarball: https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.2.tgz} 806 + cpu: [arm64] 807 + os: [freebsd] 808 + 809 + '@rollup/rollup-freebsd-x64@4.40.2': 810 + resolution: {integrity: sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q==, tarball: https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.2.tgz} 811 + cpu: [x64] 812 + os: [freebsd] 813 + 814 + '@rollup/rollup-linux-arm-gnueabihf@4.40.2': 815 + resolution: {integrity: sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.2.tgz} 816 + cpu: [arm] 817 + os: [linux] 818 + 819 + '@rollup/rollup-linux-arm-musleabihf@4.40.2': 820 + resolution: {integrity: sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.2.tgz} 821 + cpu: [arm] 822 + os: [linux] 823 + 824 + '@rollup/rollup-linux-arm64-gnu@4.40.2': 825 + resolution: {integrity: sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.2.tgz} 826 + cpu: [arm64] 827 + os: [linux] 828 + 829 + '@rollup/rollup-linux-arm64-musl@4.40.2': 830 + resolution: {integrity: sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.2.tgz} 831 + cpu: [arm64] 832 + os: [linux] 833 + 834 + '@rollup/rollup-linux-loongarch64-gnu@4.40.2': 835 + resolution: {integrity: sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.2.tgz} 836 + cpu: [loong64] 837 + os: [linux] 838 + 839 + '@rollup/rollup-linux-powerpc64le-gnu@4.40.2': 840 + resolution: {integrity: sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.2.tgz} 841 + cpu: [ppc64] 842 + os: [linux] 843 + 844 + '@rollup/rollup-linux-riscv64-gnu@4.40.2': 845 + resolution: {integrity: sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.2.tgz} 846 + cpu: [riscv64] 847 + os: [linux] 848 + 849 + '@rollup/rollup-linux-riscv64-musl@4.40.2': 850 + resolution: {integrity: sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.2.tgz} 851 + cpu: [riscv64] 852 + os: [linux] 853 + 854 + '@rollup/rollup-linux-s390x-gnu@4.40.2': 855 + resolution: {integrity: sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.2.tgz} 856 + cpu: [s390x] 857 + os: [linux] 858 + 859 + '@rollup/rollup-linux-x64-gnu@4.40.2': 860 + resolution: {integrity: sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.2.tgz} 861 + cpu: [x64] 862 + os: [linux] 863 + 864 + '@rollup/rollup-linux-x64-musl@4.40.2': 865 + resolution: {integrity: sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.2.tgz} 866 + cpu: [x64] 867 + os: [linux] 868 + 869 + '@rollup/rollup-win32-arm64-msvc@4.40.2': 870 + resolution: {integrity: sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.2.tgz} 871 + cpu: [arm64] 872 + os: [win32] 873 + 874 + '@rollup/rollup-win32-ia32-msvc@4.40.2': 875 + resolution: {integrity: sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.2.tgz} 876 + cpu: [ia32] 877 + os: [win32] 878 + 879 + '@rollup/rollup-win32-x64-msvc@4.40.2': 880 + resolution: {integrity: sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.2.tgz} 881 + cpu: [x64] 882 + os: [win32] 883 + 884 + '@sindresorhus/is@7.1.1': 885 + resolution: {integrity: sha512-rO92VvpgMc3kfiTjGT52LEtJ8Yc5kCWhZjLQ3LwlA4pSgPpQO7bVpYXParOD8Jwf+cVQECJo3yP/4I8aZtUQTQ==, tarball: https://registry.npmjs.org/@sindresorhus/is/-/is-7.1.1.tgz} 886 + engines: {node: '>=18'} 887 + 888 + '@speed-highlight/core@1.2.12': 889 + resolution: {integrity: sha512-uilwrK0Ygyri5dToHYdZSjcvpS2ZwX0w5aSt3GCEN9hrjxWCoeV4Z2DTXuxjwbntaLQIEEAlCeNQss5SoHvAEA==, tarball: https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.12.tgz} 890 + 891 + '@sveltejs/acorn-typescript@1.0.5': 892 + resolution: {integrity: sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==, tarball: https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.5.tgz} 893 + peerDependencies: 894 + acorn: ^8.9.0 895 + 896 + '@sveltejs/adapter-auto@4.0.0': 897 + resolution: {integrity: sha512-kmuYSQdD2AwThymQF0haQhM8rE5rhutQXG4LNbnbShwhMO4qQGnKaaTy+88DuNSuoQDi58+thpq8XpHc1+oEKQ==, tarball: https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-4.0.0.tgz} 898 + peerDependencies: 899 + '@sveltejs/kit': ^2.0.0 900 + 901 + '@sveltejs/adapter-cloudflare@7.2.4': 902 + resolution: {integrity: sha512-uD8VlOuGXGuZWL+zbBYSjtmC4WDtlonUodfqAZ/COd5uIy2Z0QptIicB/nkTrGNI9sbmzgf7z0N09CHyWYlUvQ==, tarball: https://registry.npmjs.org/@sveltejs/adapter-cloudflare/-/adapter-cloudflare-7.2.4.tgz} 903 + peerDependencies: 904 + '@sveltejs/kit': ^2.0.0 905 + wrangler: ^4.0.0 906 + 907 + '@sveltejs/adapter-static@3.0.8': 908 + resolution: {integrity: sha512-YaDrquRpZwfcXbnlDsSrBQNCChVOT9MGuSg+dMAyfsAa1SmiAhrA5jUYUiIMC59G92kIbY/AaQOWcBdq+lh+zg==, tarball: https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.8.tgz} 909 + peerDependencies: 910 + '@sveltejs/kit': ^2.0.0 911 + 912 + '@sveltejs/kit@2.20.8': 913 + resolution: {integrity: sha512-ep9qTxL7WALhfm0kFecL3VHeuNew8IccbYGqv5TqL/KSqWRKzEgDG8blNlIu1CkLTTua/kHjI+f5T8eCmWIxKw==, tarball: https://registry.npmjs.org/@sveltejs/kit/-/kit-2.20.8.tgz} 914 + engines: {node: '>=18.13'} 915 + hasBin: true 916 + peerDependencies: 917 + '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 918 + svelte: ^4.0.0 || ^5.0.0-next.0 919 + vite: ^5.0.3 || ^6.0.0 920 + 921 + '@sveltejs/vite-plugin-svelte-inspector@4.0.1': 922 + resolution: {integrity: sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==, tarball: https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-4.0.1.tgz} 923 + engines: {node: ^18.0.0 || ^20.0.0 || >=22} 924 + peerDependencies: 925 + '@sveltejs/vite-plugin-svelte': ^5.0.0 926 + svelte: ^5.0.0 927 + vite: ^6.0.0 928 + 929 + '@sveltejs/vite-plugin-svelte@5.0.3': 930 + resolution: {integrity: sha512-MCFS6CrQDu1yGwspm4qtli0e63vaPCehf6V7pIMP15AsWgMKrqDGCPFF/0kn4SP0ii4aySu4Pa62+fIRGFMjgw==, tarball: https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-5.0.3.tgz} 931 + engines: {node: ^18.0.0 || ^20.0.0 || >=22} 932 + peerDependencies: 933 + svelte: ^5.0.0 934 + vite: ^6.0.0 935 + 936 + '@swc/helpers@0.5.17': 937 + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==, tarball: https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz} 938 + 939 + '@tailwindcss/forms@0.5.10': 940 + resolution: {integrity: sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==, tarball: https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz} 941 + peerDependencies: 942 + tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1' 943 + 944 + '@tailwindcss/node@4.1.5': 945 + resolution: {integrity: sha512-CBhSWo0vLnWhXIvpD0qsPephiaUYfHUX3U9anwDaHZAeuGpTiB3XmsxPAN6qX7bFhipyGBqOa1QYQVVhkOUGxg==, tarball: https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.5.tgz} 946 + 947 + '@tailwindcss/oxide-android-arm64@4.1.5': 948 + resolution: {integrity: sha512-LVvM0GirXHED02j7hSECm8l9GGJ1RfgpWCW+DRn5TvSaxVsv28gRtoL4aWKGnXqwvI3zu1GABeDNDVZeDPOQrw==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.5.tgz} 949 + engines: {node: '>= 10'} 950 + cpu: [arm64] 951 + os: [android] 952 + 953 + '@tailwindcss/oxide-darwin-arm64@4.1.5': 954 + resolution: {integrity: sha512-//TfCA3pNrgnw4rRJOqavW7XUk8gsg9ddi8cwcsWXp99tzdBAZW0WXrD8wDyNbqjW316Pk2hiN/NJx/KWHl8oA==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.5.tgz} 955 + engines: {node: '>= 10'} 956 + cpu: [arm64] 957 + os: [darwin] 958 + 959 + '@tailwindcss/oxide-darwin-x64@4.1.5': 960 + resolution: {integrity: sha512-XQorp3Q6/WzRd9OalgHgaqgEbjP3qjHrlSUb5k1EuS1Z9NE9+BbzSORraO+ecW432cbCN7RVGGL/lSnHxcd+7Q==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.5.tgz} 961 + engines: {node: '>= 10'} 962 + cpu: [x64] 963 + os: [darwin] 964 + 965 + '@tailwindcss/oxide-freebsd-x64@4.1.5': 966 + resolution: {integrity: sha512-bPrLWbxo8gAo97ZmrCbOdtlz/Dkuy8NK97aFbVpkJ2nJ2Jo/rsCbu0TlGx8joCuA3q6vMWTSn01JY46iwG+clg==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.5.tgz} 967 + engines: {node: '>= 10'} 968 + cpu: [x64] 969 + os: [freebsd] 970 + 971 + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.5': 972 + resolution: {integrity: sha512-1gtQJY9JzMAhgAfvd/ZaVOjh/Ju/nCoAsvOVJenWZfs05wb8zq+GOTnZALWGqKIYEtyNpCzvMk+ocGpxwdvaVg==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.5.tgz} 973 + engines: {node: '>= 10'} 974 + cpu: [arm] 975 + os: [linux] 976 + 977 + '@tailwindcss/oxide-linux-arm64-gnu@4.1.5': 978 + resolution: {integrity: sha512-dtlaHU2v7MtdxBXoqhxwsWjav7oim7Whc6S9wq/i/uUMTWAzq/gijq1InSgn2yTnh43kR+SFvcSyEF0GCNu1PQ==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.5.tgz} 979 + engines: {node: '>= 10'} 980 + cpu: [arm64] 981 + os: [linux] 982 + 983 + '@tailwindcss/oxide-linux-arm64-musl@4.1.5': 984 + resolution: {integrity: sha512-fg0F6nAeYcJ3CriqDT1iVrqALMwD37+sLzXs8Rjy8Z1ZHshJoYceodfyUwGJEsQoTyWbliFNRs2wMQNXtT7MVA==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.5.tgz} 985 + engines: {node: '>= 10'} 986 + cpu: [arm64] 987 + os: [linux] 988 + 989 + '@tailwindcss/oxide-linux-x64-gnu@4.1.5': 990 + resolution: {integrity: sha512-SO+F2YEIAHa1AITwc8oPwMOWhgorPzzcbhWEb+4oLi953h45FklDmM8dPSZ7hNHpIk9p/SCZKUYn35t5fjGtHA==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.5.tgz} 991 + engines: {node: '>= 10'} 992 + cpu: [x64] 993 + os: [linux] 994 + 995 + '@tailwindcss/oxide-linux-x64-musl@4.1.5': 996 + resolution: {integrity: sha512-6UbBBplywkk/R+PqqioskUeXfKcBht3KU7juTi1UszJLx0KPXUo10v2Ok04iBJIaDPkIFkUOVboXms5Yxvaz+g==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.5.tgz} 997 + engines: {node: '>= 10'} 998 + cpu: [x64] 999 + os: [linux] 1000 + 1001 + '@tailwindcss/oxide-wasm32-wasi@4.1.5': 1002 + resolution: {integrity: sha512-hwALf2K9FHuiXTPqmo1KeOb83fTRNbe9r/Ixv9ZNQ/R24yw8Ge1HOWDDgTdtzntIaIUJG5dfXCf4g9AD4RiyhQ==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.5.tgz} 1003 + engines: {node: '>=14.0.0'} 1004 + cpu: [wasm32] 1005 + bundledDependencies: 1006 + - '@napi-rs/wasm-runtime' 1007 + - '@emnapi/core' 1008 + - '@emnapi/runtime' 1009 + - '@tybys/wasm-util' 1010 + - '@emnapi/wasi-threads' 1011 + - tslib 1012 + 1013 + '@tailwindcss/oxide-win32-arm64-msvc@4.1.5': 1014 + resolution: {integrity: sha512-oDKncffWzaovJbkuR7/OTNFRJQVdiw/n8HnzaCItrNQUeQgjy7oUiYpsm9HUBgpmvmDpSSbGaCa2Evzvk3eFmA==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.5.tgz} 1015 + engines: {node: '>= 10'} 1016 + cpu: [arm64] 1017 + os: [win32] 1018 + 1019 + '@tailwindcss/oxide-win32-x64-msvc@4.1.5': 1020 + resolution: {integrity: sha512-WiR4dtyrFdbb+ov0LK+7XsFOsG+0xs0PKZKkt41KDn9jYpO7baE3bXiudPVkTqUEwNfiglCygQHl2jklvSBi7Q==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.5.tgz} 1021 + engines: {node: '>= 10'} 1022 + cpu: [x64] 1023 + os: [win32] 1024 + 1025 + '@tailwindcss/oxide@4.1.5': 1026 + resolution: {integrity: sha512-1n4br1znquEvyW/QuqMKQZlBen+jxAbvyduU87RS8R3tUSvByAkcaMTkJepNIrTlYhD+U25K4iiCIxE6BGdRYA==, tarball: https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.5.tgz} 1027 + engines: {node: '>= 10'} 1028 + 1029 + '@tailwindcss/typography@0.5.16': 1030 + resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==, tarball: https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz} 1031 + peerDependencies: 1032 + tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' 1033 + 1034 + '@tailwindcss/vite@4.1.5': 1035 + resolution: {integrity: sha512-FE1stRoqdHSb7RxesMfCXE8icwI1W6zGE/512ae3ZDrpkQYTTYeSyUJPRCjZd8CwVAhpDUbi1YR8pcZioFJQ/w==, tarball: https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.5.tgz} 1036 + peerDependencies: 1037 + vite: ^5.2.0 || ^6 1038 + 1039 + '@tiptap/core@2.12.0': 1040 + resolution: {integrity: sha512-3qX8oGVKFFZzQ0vit+ZolR6AJIATBzmEmjAA0llFhWk4vf3v64p1YcXcJsOBsr5scizJu5L6RYWEFatFwqckRg==, tarball: https://registry.npmjs.org/@tiptap/core/-/core-2.12.0.tgz} 1041 + peerDependencies: 1042 + '@tiptap/pm': ^2.7.0 1043 + 1044 + '@tiptap/extension-blockquote@2.12.0': 1045 + resolution: {integrity: sha512-XUC2A77YAPMJS2SqZ2S62IGcUH8gZ7cdhoWlYQb1pR4ZzXFByeKDJPxfYeAePSiuI01YGrlzgY2c6Ncx/DtO0A==, tarball: https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-2.12.0.tgz} 1046 + peerDependencies: 1047 + '@tiptap/core': ^2.7.0 1048 + 1049 + '@tiptap/extension-bold@2.12.0': 1050 + resolution: {integrity: sha512-lAUtoLDLRc5ofD2I9MFY6MQ7d1qBLLqS1rvpwaPjOaoQb/GPVnaHj9qXYG0SY9K3erMtto48bMFpAcscjZHzZQ==, tarball: https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.12.0.tgz} 1051 + peerDependencies: 1052 + '@tiptap/core': ^2.7.0 1053 + 1054 + '@tiptap/extension-bullet-list@2.12.0': 1055 + resolution: {integrity: sha512-YTCjztB8MaIpwyxFYr81H4+LdKCq1VlaSXQyrPdB44mVdhhRqc46BYQb8/B//XE3UIu3X2QWFjwrqRlUq6vUiw==, tarball: https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.12.0.tgz} 1056 + peerDependencies: 1057 + '@tiptap/core': ^2.7.0 1058 + 1059 + '@tiptap/extension-code-block@2.12.0': 1060 + resolution: {integrity: sha512-1D7cYAjgxEFHdfC/35Ooi4GqWKB5sszbW8iI7N16XILNln26xb0d5KflXqYrwr9CN/ZnZoCl2o6YsP7xEObcZA==, tarball: https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-2.12.0.tgz} 1061 + peerDependencies: 1062 + '@tiptap/core': ^2.7.0 1063 + '@tiptap/pm': ^2.7.0 1064 + 1065 + '@tiptap/extension-code@2.12.0': 1066 + resolution: {integrity: sha512-R7RaS+hJeHFim7alImQ9L9CSWSMjWXvz0Ote568x9ea5gdBGUYW8PcH+5a91lh8e1XGYWBM12a8oJZRyxg/tQA==, tarball: https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.12.0.tgz} 1067 + peerDependencies: 1068 + '@tiptap/core': ^2.7.0 1069 + 1070 + '@tiptap/extension-document@2.12.0': 1071 + resolution: {integrity: sha512-sA1Q+mxDIv0Y3qQTBkYGwknNbDcGFiJ/fyAFholXpqbrcRx3GavwR/o0chBdsJZlFht0x7AWGwUYWvIo7wYilA==, tarball: https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.12.0.tgz} 1072 + peerDependencies: 1073 + '@tiptap/core': ^2.7.0 1074 + 1075 + '@tiptap/extension-dropcursor@2.12.0': 1076 + resolution: {integrity: sha512-zcZSOXFj+7LVnmdPWTfKr5AoxYIzFPFlLJe35AdTQC5IhkljLn1Exct8I30ZREojX/00hKYsO7JJmePS6TEVlQ==, tarball: https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.12.0.tgz} 1077 + peerDependencies: 1078 + '@tiptap/core': ^2.7.0 1079 + '@tiptap/pm': ^2.7.0 1080 + 1081 + '@tiptap/extension-gapcursor@2.12.0': 1082 + resolution: {integrity: sha512-k8ji5v9YKn7bNjo8UtI9hEfXfl4tKUp1hpJOEmUxGJQa3LIwrwSbReupUTnHszGQelzxikS/l1xO9P0TIGwRoA==, tarball: https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.12.0.tgz} 1083 + peerDependencies: 1084 + '@tiptap/core': ^2.7.0 1085 + '@tiptap/pm': ^2.7.0 1086 + 1087 + '@tiptap/extension-hard-break@2.12.0': 1088 + resolution: {integrity: sha512-08MNS2PK5DzdnAfqXn4krmJ/xebKmWpRpYqqN5EM8AvetYKlAJyTVSpo0ZUeGbZ3EZiPm9djgSnrLqpFUDjRCg==, tarball: https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.12.0.tgz} 1089 + peerDependencies: 1090 + '@tiptap/core': ^2.7.0 1091 + 1092 + '@tiptap/extension-heading@2.12.0': 1093 + resolution: {integrity: sha512-9DfES4Wd5TX1foI70N9sAL+35NN1UHrtzDYN2+dTHupnmKir9RaMXyZcbkUb4aDVzYrGxIqxJzHBVkquKIlTrw==, tarball: https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.12.0.tgz} 1094 + peerDependencies: 1095 + '@tiptap/core': ^2.7.0 1096 + 1097 + '@tiptap/extension-history@2.12.0': 1098 + resolution: {integrity: sha512-+B9CAf2BFURC6mQiM1OQtahVTzdEOEgT/UUNlRZkeeBc0K5of3dr6UdBqaoaMAefja3jx5PqiQ7mhUBAjSt6AA==, tarball: https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.12.0.tgz} 1099 + peerDependencies: 1100 + '@tiptap/core': ^2.7.0 1101 + '@tiptap/pm': ^2.7.0 1102 + 1103 + '@tiptap/extension-horizontal-rule@2.12.0': 1104 + resolution: {integrity: sha512-Vi2+6RIehDSpoJn/7PDuOieUj7W7WrEb4wBxK9TG8PDscihR0mehhhzm/K2xhH4TN48iPJGRsjDFrFjTbXmcnw==, tarball: https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.12.0.tgz} 1105 + peerDependencies: 1106 + '@tiptap/core': ^2.7.0 1107 + '@tiptap/pm': ^2.7.0 1108 + 1109 + '@tiptap/extension-image@2.12.0': 1110 + resolution: {integrity: sha512-wO+yrfMlnW3SYCb1Q1qAb+nt5WH6jnlQPTV6qdoIabRtW0puwMWULZDUgclPN5hxn8EXb9vBEu44egvH6hgkfQ==, tarball: https://registry.npmjs.org/@tiptap/extension-image/-/extension-image-2.12.0.tgz} 1111 + peerDependencies: 1112 + '@tiptap/core': ^2.7.0 1113 + 1114 + '@tiptap/extension-italic@2.12.0': 1115 + resolution: {integrity: sha512-JKcXK3LmEsmxNzEq5e06rPUGMRLUxmJ2mYtBY4NlJ6yLM9XMDljtgeTnWT0ySLYmfINSFTkX4S7WIRbpl9l4pw==, tarball: https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.12.0.tgz} 1116 + peerDependencies: 1117 + '@tiptap/core': ^2.7.0 1118 + 1119 + '@tiptap/extension-link@2.12.0': 1120 + resolution: {integrity: sha512-N6f78F2onvcL8FAwFOJexOF02UwGETLjQ7cCguhBe/w7vtx7aX8/f+IlaSGY/pIcWyEQpoC28ciM0+QsrJRr1A==, tarball: https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-2.12.0.tgz} 1121 + peerDependencies: 1122 + '@tiptap/core': ^2.7.0 1123 + '@tiptap/pm': ^2.7.0 1124 + 1125 + '@tiptap/extension-list-item@2.12.0': 1126 + resolution: {integrity: sha512-4YwZooC8HP+gPxs6YrkB1ayggyYbgVvJx/rWBT6lKSW2MVVg8QXi1zAcSI3MhIhHmqDysXXFPL8JURlbeGjaFA==, tarball: https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.12.0.tgz} 1127 + peerDependencies: 1128 + '@tiptap/core': ^2.7.0 1129 + 1130 + '@tiptap/extension-ordered-list@2.12.0': 1131 + resolution: {integrity: sha512-1ys0e/oqk09oXxrB1WzAx5EntK/QreObG/V1yhgihGm429fxHMsxzIYN6dKAYxx0YOPQG7qEZRrrPuWU70Ms7g==, tarball: https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.12.0.tgz} 1132 + peerDependencies: 1133 + '@tiptap/core': ^2.7.0 1134 + 1135 + '@tiptap/extension-paragraph@2.12.0': 1136 + resolution: {integrity: sha512-QNK5cgewCunWFxpLlbvvoO1rrLgEtNKxiY79fctP9toV+e59R+1i1Q9lXC1O5mOfDgVxCb6uFDMsqmKhFjpPog==, tarball: https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.12.0.tgz} 1137 + peerDependencies: 1138 + '@tiptap/core': ^2.7.0 1139 + 1140 + '@tiptap/extension-placeholder@2.12.0': 1141 + resolution: {integrity: sha512-K7irDox4P+NLAMjVrJeG72f0sulsCRYpx1Cy4gxKCdi1LTivj5VkXa6MXmi42KTCwBu3pWajBctYIOAES1FTAA==, tarball: https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-2.12.0.tgz} 1142 + peerDependencies: 1143 + '@tiptap/core': ^2.7.0 1144 + '@tiptap/pm': ^2.7.0 1145 + 1146 + '@tiptap/extension-strike@2.12.0': 1147 + resolution: {integrity: sha512-nBaa5YtBsLJPZFfSs36sBz4Zgi/c8b3MsmS/Az8uXaHb0R9yPewOVUMDIQbxMct8SXUlIo9VtKlOL+mVJ3Nkpw==, tarball: https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.12.0.tgz} 1148 + peerDependencies: 1149 + '@tiptap/core': ^2.7.0 1150 + 1151 + '@tiptap/extension-text-style@2.12.0': 1152 + resolution: {integrity: sha512-Pxwt23ZlvbQUahV0PvHy8Ej6IAuKR1FvHobUvwP3T8AiY7hob66fWRe7tQbESzSAzm5Vv2xkvyHeU8vekMTezA==, tarball: https://registry.npmjs.org/@tiptap/extension-text-style/-/extension-text-style-2.12.0.tgz} 1153 + peerDependencies: 1154 + '@tiptap/core': ^2.7.0 1155 + 1156 + '@tiptap/extension-text@2.12.0': 1157 + resolution: {integrity: sha512-0ytN9V1tZYTXdiYDQg4FB2SQ56JAJC9r/65snefb9ztl+gZzDrIvih7CflHs1ic9PgyjexfMLeH+VzuMccNyZw==, tarball: https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.12.0.tgz} 1158 + peerDependencies: 1159 + '@tiptap/core': ^2.7.0 1160 + 1161 + '@tiptap/pm@2.12.0': 1162 + resolution: {integrity: sha512-TNzVwpeNzFfHAcYTOKqX9iU4fRxliyoZrCnERR+RRzeg7gWrXrCLubQt1WEx0sojMAfznshSL3M5HGsYjEbYwA==, tarball: https://registry.npmjs.org/@tiptap/pm/-/pm-2.12.0.tgz} 1163 + 1164 + '@tiptap/starter-kit@2.12.0': 1165 + resolution: {integrity: sha512-wlcEEtexd6u0gbR311/OFZnbtRWU97DUsY6/GsSQzN4rqZ7Ra6YbfHEN5Lutu+I/anomK8vKy8k9NyvfY5Hllg==, tarball: https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.12.0.tgz} 1166 + 1167 + '@types/cookie@0.6.0': 1168 + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==, tarball: https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz} 1169 + 1170 + '@types/estree@1.0.7': 1171 + resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==, tarball: https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz} 1172 + 1173 + '@types/json-schema@7.0.15': 1174 + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, tarball: https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz} 1175 + 1176 + '@types/linkify-it@5.0.0': 1177 + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==, tarball: https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz} 1178 + 1179 + '@types/markdown-it@14.1.2': 1180 + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==, tarball: https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz} 1181 + 1182 + '@types/mdurl@2.0.0': 1183 + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==, tarball: https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz} 1184 + 1185 + '@types/turndown@5.0.5': 1186 + resolution: {integrity: sha512-TL2IgGgc7B5j78rIccBtlYAnkuv8nUQqhQc+DSYV5j9Be9XOcm/SKOVRuA47xAVI3680Tk9B1d8flK2GWT2+4w==, tarball: https://registry.npmjs.org/@types/turndown/-/turndown-5.0.5.tgz} 1187 + 1188 + '@typescript-eslint/eslint-plugin@8.32.0': 1189 + resolution: {integrity: sha512-/jU9ettcntkBFmWUzzGgsClEi2ZFiikMX5eEQsmxIAWMOn4H3D4rvHssstmAHGVvrYnaMqdWWWg0b5M6IN/MTQ==, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.0.tgz} 1190 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1191 + peerDependencies: 1192 + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 1193 + eslint: ^8.57.0 || ^9.0.0 1194 + typescript: '>=4.8.4 <5.9.0' 1195 + 1196 + '@typescript-eslint/parser@8.32.0': 1197 + resolution: {integrity: sha512-B2MdzyWxCE2+SqiZHAjPphft+/2x2FlO9YBx7eKE1BCb+rqBlQdhtAEhzIEdozHd55DXPmxBdpMygFJjfjjA9A==, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.0.tgz} 1198 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1199 + peerDependencies: 1200 + eslint: ^8.57.0 || ^9.0.0 1201 + typescript: '>=4.8.4 <5.9.0' 1202 + 1203 + '@typescript-eslint/scope-manager@8.32.0': 1204 + resolution: {integrity: sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ==, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.0.tgz} 1205 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1206 + 1207 + '@typescript-eslint/type-utils@8.32.0': 1208 + resolution: {integrity: sha512-t2vouuYQKEKSLtJaa5bB4jHeha2HJczQ6E5IXPDPgIty9EqcJxpr1QHQ86YyIPwDwxvUmLfP2YADQ5ZY4qddZg==, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.32.0.tgz} 1209 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1210 + peerDependencies: 1211 + eslint: ^8.57.0 || ^9.0.0 1212 + typescript: '>=4.8.4 <5.9.0' 1213 + 1214 + '@typescript-eslint/types@8.32.0': 1215 + resolution: {integrity: sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA==, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.0.tgz} 1216 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1217 + 1218 + '@typescript-eslint/typescript-estree@8.32.0': 1219 + resolution: {integrity: sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ==, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.0.tgz} 1220 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1221 + peerDependencies: 1222 + typescript: '>=4.8.4 <5.9.0' 1223 + 1224 + '@typescript-eslint/utils@8.32.0': 1225 + resolution: {integrity: sha512-8S9hXau6nQ/sYVtC3D6ISIDoJzS1NsCK+gluVhLN2YkBPX+/1wkwyUiDKnxRh15579WoOIyVWnoyIf3yGI9REw==, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.32.0.tgz} 1226 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1227 + peerDependencies: 1228 + eslint: ^8.57.0 || ^9.0.0 1229 + typescript: '>=4.8.4 <5.9.0' 1230 + 1231 + '@typescript-eslint/visitor-keys@8.32.0': 1232 + resolution: {integrity: sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w==, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.0.tgz} 1233 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1234 + 1235 + accepts@2.0.0: 1236 + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==, tarball: https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz} 1237 + engines: {node: '>= 0.6'} 1238 + 1239 + acorn-jsx@5.3.2: 1240 + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, tarball: https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz} 1241 + peerDependencies: 1242 + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 1243 + 1244 + acorn-walk@8.3.2: 1245 + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==, tarball: https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz} 1246 + engines: {node: '>=0.4.0'} 1247 + 1248 + acorn@8.14.0: 1249 + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==, tarball: https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz} 1250 + engines: {node: '>=0.4.0'} 1251 + hasBin: true 1252 + 1253 + acorn@8.14.1: 1254 + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==, tarball: https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz} 1255 + engines: {node: '>=0.4.0'} 1256 + hasBin: true 1257 + 1258 + ajv@6.12.6: 1259 + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, tarball: https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz} 1260 + 1261 + ansi-styles@4.3.0: 1262 + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, tarball: https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz} 1263 + engines: {node: '>=8'} 1264 + 1265 + argparse@2.0.1: 1266 + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, tarball: https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz} 1267 + 1268 + aria-query@5.3.2: 1269 + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==, tarball: https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz} 1270 + engines: {node: '>= 0.4'} 1271 + 1272 + await-lock@2.2.2: 1273 + resolution: {integrity: sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==, tarball: https://registry.npmjs.org/await-lock/-/await-lock-2.2.2.tgz} 1274 + 1275 + axobject-query@4.1.0: 1276 + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==, tarball: https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz} 1277 + engines: {node: '>= 0.4'} 1278 + 1279 + balanced-match@1.0.2: 1280 + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, tarball: https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz} 1281 + 1282 + bits-ui@1.8.0: 1283 + resolution: {integrity: sha512-CXD6Orp7l8QevNDcRPLXc/b8iMVgxDWT2LyTwsdLzJKh9CxesOmPuNePSPqAxKoT59FIdU4aFPS1k7eBdbaCxg==, tarball: https://registry.npmjs.org/bits-ui/-/bits-ui-1.8.0.tgz} 1284 + engines: {node: '>=18', pnpm: '>=8.7.0'} 1285 + peerDependencies: 1286 + svelte: ^5.11.0 1287 + 1288 + bits-ui@2.14.4: 1289 + resolution: {integrity: sha512-W6kenhnbd/YVvur+DKkaVJ6GldE53eLewur5AhUCqslYQ0vjZr8eWlOfwZnMiPB+PF5HMVqf61vXBvmyrAmPWg==, tarball: https://registry.npmjs.org/bits-ui/-/bits-ui-2.14.4.tgz} 1290 + engines: {node: '>=20'} 1291 + peerDependencies: 1292 + '@internationalized/date': ^3.8.1 1293 + svelte: ^5.33.0 1294 + 1295 + blake3-wasm@2.1.5: 1296 + resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==, tarball: https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz} 1297 + 1298 + body-parser@2.2.0: 1299 + resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==, tarball: https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz} 1300 + engines: {node: '>=18'} 1301 + 1302 + brace-expansion@1.1.11: 1303 + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, tarball: https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz} 1304 + 1305 + brace-expansion@2.0.1: 1306 + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, tarball: https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz} 1307 + 1308 + braces@3.0.3: 1309 + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==, tarball: https://registry.npmjs.org/braces/-/braces-3.0.3.tgz} 1310 + engines: {node: '>=8'} 1311 + 1312 + bytes@3.1.2: 1313 + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==, tarball: https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz} 1314 + engines: {node: '>= 0.8'} 1315 + 1316 + call-bind-apply-helpers@1.0.2: 1317 + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==, tarball: https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz} 1318 + engines: {node: '>= 0.4'} 1319 + 1320 + call-bound@1.0.4: 1321 + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==, tarball: https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz} 1322 + engines: {node: '>= 0.4'} 1323 + 1324 + callsites@3.1.0: 1325 + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, tarball: https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz} 1326 + engines: {node: '>=6'} 1327 + 1328 + chalk@4.1.2: 1329 + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, tarball: https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz} 1330 + engines: {node: '>=10'} 1331 + 1332 + chokidar@4.0.3: 1333 + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==, tarball: https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz} 1334 + engines: {node: '>= 14.16.0'} 1335 + 1336 + clsx@2.1.1: 1337 + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==, tarball: https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz} 1338 + engines: {node: '>=6'} 1339 + 1340 + color-convert@2.0.1: 1341 + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, tarball: https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz} 1342 + engines: {node: '>=7.0.0'} 1343 + 1344 + color-name@1.1.4: 1345 + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, tarball: https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz} 1346 + 1347 + color-string@1.9.1: 1348 + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==, tarball: https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz} 1349 + 1350 + color@4.2.3: 1351 + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==, tarball: https://registry.npmjs.org/color/-/color-4.2.3.tgz} 1352 + engines: {node: '>=12.5.0'} 1353 + 1354 + concat-map@0.0.1: 1355 + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, tarball: https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz} 1356 + 1357 + content-disposition@1.0.0: 1358 + resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==, tarball: https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz} 1359 + engines: {node: '>= 0.6'} 1360 + 1361 + content-type@1.0.5: 1362 + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==, tarball: https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz} 1363 + engines: {node: '>= 0.6'} 1364 + 1365 + cookie-signature@1.2.2: 1366 + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==, tarball: https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz} 1367 + engines: {node: '>=6.6.0'} 1368 + 1369 + cookie@0.6.0: 1370 + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==, tarball: https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz} 1371 + engines: {node: '>= 0.6'} 1372 + 1373 + cookie@0.7.2: 1374 + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==, tarball: https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz} 1375 + engines: {node: '>= 0.6'} 1376 + 1377 + cookie@1.1.1: 1378 + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==, tarball: https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz} 1379 + engines: {node: '>=18'} 1380 + 1381 + cors@2.8.5: 1382 + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==, tarball: https://registry.npmjs.org/cors/-/cors-2.8.5.tgz} 1383 + engines: {node: '>= 0.10'} 1384 + 1385 + crelt@1.0.6: 1386 + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==, tarball: https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz} 1387 + 1388 + cross-spawn@7.0.6: 1389 + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==, tarball: https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz} 1390 + engines: {node: '>= 8'} 1391 + 1392 + css.escape@1.5.1: 1393 + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==, tarball: https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz} 1394 + 1395 + cssesc@3.0.0: 1396 + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, tarball: https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz} 1397 + engines: {node: '>=4'} 1398 + hasBin: true 1399 + 1400 + debug@4.4.0: 1401 + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==, tarball: https://registry.npmjs.org/debug/-/debug-4.4.0.tgz} 1402 + engines: {node: '>=6.0'} 1403 + peerDependencies: 1404 + supports-color: '*' 1405 + peerDependenciesMeta: 1406 + supports-color: 1407 + optional: true 1408 + 1409 + deep-is@0.1.4: 1410 + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, tarball: https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz} 1411 + 1412 + deepmerge@4.3.1: 1413 + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==, tarball: https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz} 1414 + engines: {node: '>=0.10.0'} 1415 + 1416 + depd@2.0.0: 1417 + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==, tarball: https://registry.npmjs.org/depd/-/depd-2.0.0.tgz} 1418 + engines: {node: '>= 0.8'} 1419 + 1420 + dequal@2.0.3: 1421 + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==, tarball: https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz} 1422 + engines: {node: '>=6'} 1423 + 1424 + detect-libc@2.0.4: 1425 + resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==, tarball: https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz} 1426 + engines: {node: '>=8'} 1427 + 1428 + devalue@5.1.1: 1429 + resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==, tarball: https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz} 1430 + 1431 + devalue@5.6.0: 1432 + resolution: {integrity: sha512-BaD1s81TFFqbD6Uknni42TrolvEWA1Ih5L+OiHWmi4OYMJVwAYPGtha61I9KxTf52OvVHozHyjPu8zljqdF3uA==, tarball: https://registry.npmjs.org/devalue/-/devalue-5.6.0.tgz} 1433 + 1434 + dunder-proto@1.0.1: 1435 + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==, tarball: https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz} 1436 + engines: {node: '>= 0.4'} 1437 + 1438 + ee-first@1.1.1: 1439 + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==, tarball: https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz} 1440 + 1441 + encodeurl@2.0.0: 1442 + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==, tarball: https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz} 1443 + engines: {node: '>= 0.8'} 1444 + 1445 + enhanced-resolve@5.18.1: 1446 + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==, tarball: https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz} 1447 + engines: {node: '>=10.13.0'} 1448 + 1449 + entities@4.5.0: 1450 + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==, tarball: https://registry.npmjs.org/entities/-/entities-4.5.0.tgz} 1451 + engines: {node: '>=0.12'} 1452 + 1453 + error-stack-parser-es@1.0.5: 1454 + resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==, tarball: https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz} 1455 + 1456 + es-define-property@1.0.1: 1457 + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==, tarball: https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz} 1458 + engines: {node: '>= 0.4'} 1459 + 1460 + es-errors@1.3.0: 1461 + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==, tarball: https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz} 1462 + engines: {node: '>= 0.4'} 1463 + 1464 + es-object-atoms@1.1.1: 1465 + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==, tarball: https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz} 1466 + engines: {node: '>= 0.4'} 1467 + 1468 + esbuild@0.25.4: 1469 + resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==, tarball: https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz} 1470 + engines: {node: '>=18'} 1471 + hasBin: true 1472 + 1473 + esbuild@0.27.0: 1474 + resolution: {integrity: sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==, tarball: https://registry.npmjs.org/esbuild/-/esbuild-0.27.0.tgz} 1475 + engines: {node: '>=18'} 1476 + hasBin: true 1477 + 1478 + escape-html@1.0.3: 1479 + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==, tarball: https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz} 1480 + 1481 + escape-string-regexp@4.0.0: 1482 + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, tarball: https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz} 1483 + engines: {node: '>=10'} 1484 + 1485 + eslint-compat-utils@0.5.1: 1486 + resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==, tarball: https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz} 1487 + engines: {node: '>=12'} 1488 + peerDependencies: 1489 + eslint: '>=6.0.0' 1490 + 1491 + eslint-config-prettier@10.1.3: 1492 + resolution: {integrity: sha512-vDo4d9yQE+cS2tdIT4J02H/16veRvkHgiLDRpej+WL67oCfbOb97itZXn8wMPJ/GsiEBVjrjs//AVNw2Cp1EcA==, tarball: https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.3.tgz} 1493 + hasBin: true 1494 + peerDependencies: 1495 + eslint: '>=7.0.0' 1496 + 1497 + eslint-plugin-svelte@2.46.1: 1498 + resolution: {integrity: sha512-7xYr2o4NID/f9OEYMqxsEQsCsj4KaMy4q5sANaKkAb6/QeCjYFxRmDm2S3YC3A3pl1kyPZ/syOx/i7LcWYSbIw==, tarball: https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.46.1.tgz} 1499 + engines: {node: ^14.17.0 || >=16.0.0} 1500 + peerDependencies: 1501 + eslint: ^7.0.0 || ^8.0.0-0 || ^9.0.0-0 1502 + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 1503 + peerDependenciesMeta: 1504 + svelte: 1505 + optional: true 1506 + 1507 + eslint-scope@7.2.2: 1508 + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==, tarball: https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz} 1509 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1510 + 1511 + eslint-scope@8.3.0: 1512 + resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==, tarball: https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz} 1513 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1514 + 1515 + eslint-visitor-keys@3.4.3: 1516 + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz} 1517 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1518 + 1519 + eslint-visitor-keys@4.2.0: 1520 + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz} 1521 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1522 + 1523 + eslint@9.26.0: 1524 + resolution: {integrity: sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==, tarball: https://registry.npmjs.org/eslint/-/eslint-9.26.0.tgz} 1525 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1526 + hasBin: true 1527 + peerDependencies: 1528 + jiti: '*' 1529 + peerDependenciesMeta: 1530 + jiti: 1531 + optional: true 1532 + 1533 + esm-env@1.2.2: 1534 + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==, tarball: https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz} 1535 + 1536 + espree@10.3.0: 1537 + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==, tarball: https://registry.npmjs.org/espree/-/espree-10.3.0.tgz} 1538 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1539 + 1540 + espree@9.6.1: 1541 + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==, tarball: https://registry.npmjs.org/espree/-/espree-9.6.1.tgz} 1542 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1543 + 1544 + esquery@1.6.0: 1545 + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==, tarball: https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz} 1546 + engines: {node: '>=0.10'} 1547 + 1548 + esrap@2.2.1: 1549 + resolution: {integrity: sha512-GiYWG34AN/4CUyaWAgunGt0Rxvr1PTMlGC0vvEov/uOQYWne2bpN03Um+k8jT+q3op33mKouP2zeJ6OlM+qeUg==, tarball: https://registry.npmjs.org/esrap/-/esrap-2.2.1.tgz} 1550 + 1551 + esrecurse@4.3.0: 1552 + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, tarball: https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz} 1553 + engines: {node: '>=4.0'} 1554 + 1555 + estraverse@5.3.0: 1556 + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, tarball: https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz} 1557 + engines: {node: '>=4.0'} 1558 + 1559 + esutils@2.0.3: 1560 + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, tarball: https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz} 1561 + engines: {node: '>=0.10.0'} 1562 + 1563 + etag@1.8.1: 1564 + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==, tarball: https://registry.npmjs.org/etag/-/etag-1.8.1.tgz} 1565 + engines: {node: '>= 0.6'} 1566 + 1567 + eventsource-parser@3.0.1: 1568 + resolution: {integrity: sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==, tarball: https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.1.tgz} 1569 + engines: {node: '>=18.0.0'} 1570 + 1571 + eventsource@3.0.6: 1572 + resolution: {integrity: sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA==, tarball: https://registry.npmjs.org/eventsource/-/eventsource-3.0.6.tgz} 1573 + engines: {node: '>=18.0.0'} 1574 + 1575 + exit-hook@2.2.1: 1576 + resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==, tarball: https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz} 1577 + engines: {node: '>=6'} 1578 + 1579 + express-rate-limit@7.5.0: 1580 + resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==, tarball: https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz} 1581 + engines: {node: '>= 16'} 1582 + peerDependencies: 1583 + express: ^4.11 || 5 || ^5.0.0-beta.1 1584 + 1585 + express@5.1.0: 1586 + resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==, tarball: https://registry.npmjs.org/express/-/express-5.1.0.tgz} 1587 + engines: {node: '>= 18'} 1588 + 1589 + fast-deep-equal@3.1.3: 1590 + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, tarball: https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz} 1591 + 1592 + fast-glob@3.3.3: 1593 + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==, tarball: https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz} 1594 + engines: {node: '>=8.6.0'} 1595 + 1596 + fast-json-stable-stringify@2.1.0: 1597 + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, tarball: https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz} 1598 + 1599 + fast-levenshtein@2.0.6: 1600 + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, tarball: https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz} 1601 + 1602 + fastq@1.19.1: 1603 + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==, tarball: https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz} 1604 + 1605 + fdir@6.4.4: 1606 + resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==, tarball: https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz} 1607 + peerDependencies: 1608 + picomatch: ^3 || ^4 1609 + peerDependenciesMeta: 1610 + picomatch: 1611 + optional: true 1612 + 1613 + file-entry-cache@8.0.0: 1614 + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==, tarball: https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz} 1615 + engines: {node: '>=16.0.0'} 1616 + 1617 + fill-range@7.1.1: 1618 + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, tarball: https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz} 1619 + engines: {node: '>=8'} 1620 + 1621 + finalhandler@2.1.0: 1622 + resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==, tarball: https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz} 1623 + engines: {node: '>= 0.8'} 1624 + 1625 + find-up@5.0.0: 1626 + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, tarball: https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz} 1627 + engines: {node: '>=10'} 1628 + 1629 + flat-cache@4.0.1: 1630 + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==, tarball: https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz} 1631 + engines: {node: '>=16'} 1632 + 1633 + flatted@3.3.3: 1634 + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==, tarball: https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz} 1635 + 1636 + forwarded@0.2.0: 1637 + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==, tarball: https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz} 1638 + engines: {node: '>= 0.6'} 1639 + 1640 + fresh@2.0.0: 1641 + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==, tarball: https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz} 1642 + engines: {node: '>= 0.8'} 1643 + 1644 + fsevents@2.3.3: 1645 + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, tarball: https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz} 1646 + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1647 + os: [darwin] 1648 + 1649 + function-bind@1.1.2: 1650 + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, tarball: https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz} 1651 + 1652 + get-intrinsic@1.3.0: 1653 + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==, tarball: https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz} 1654 + engines: {node: '>= 0.4'} 1655 + 1656 + get-proto@1.0.1: 1657 + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==, tarball: https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz} 1658 + engines: {node: '>= 0.4'} 1659 + 1660 + glob-parent@5.1.2: 1661 + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, tarball: https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz} 1662 + engines: {node: '>= 6'} 1663 + 1664 + glob-parent@6.0.2: 1665 + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, tarball: https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz} 1666 + engines: {node: '>=10.13.0'} 1667 + 1668 + glob-to-regexp@0.4.1: 1669 + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==, tarball: https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz} 1670 + 1671 + globals@14.0.0: 1672 + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==, tarball: https://registry.npmjs.org/globals/-/globals-14.0.0.tgz} 1673 + engines: {node: '>=18'} 1674 + 1675 + globals@15.15.0: 1676 + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==, tarball: https://registry.npmjs.org/globals/-/globals-15.15.0.tgz} 1677 + engines: {node: '>=18'} 1678 + 1679 + gopd@1.2.0: 1680 + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==, tarball: https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz} 1681 + engines: {node: '>= 0.4'} 1682 + 1683 + graceful-fs@4.2.11: 1684 + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, tarball: https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz} 1685 + 1686 + graphemer@1.4.0: 1687 + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==, tarball: https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz} 1688 + 1689 + has-flag@4.0.0: 1690 + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, tarball: https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz} 1691 + engines: {node: '>=8'} 1692 + 1693 + has-symbols@1.1.0: 1694 + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==, tarball: https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz} 1695 + engines: {node: '>= 0.4'} 1696 + 1697 + hasown@2.0.2: 1698 + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==, tarball: https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz} 1699 + engines: {node: '>= 0.4'} 1700 + 1701 + http-errors@2.0.0: 1702 + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==, tarball: https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz} 1703 + engines: {node: '>= 0.8'} 1704 + 1705 + iconv-lite@0.6.3: 1706 + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, tarball: https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz} 1707 + engines: {node: '>=0.10.0'} 1708 + 1709 + ignore@5.3.2: 1710 + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==, tarball: https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz} 1711 + engines: {node: '>= 4'} 1712 + 1713 + import-fresh@3.3.1: 1714 + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==, tarball: https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz} 1715 + engines: {node: '>=6'} 1716 + 1717 + import-meta-resolve@4.1.0: 1718 + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==, tarball: https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz} 1719 + 1720 + imurmurhash@0.1.4: 1721 + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, tarball: https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz} 1722 + engines: {node: '>=0.8.19'} 1723 + 1724 + inherits@2.0.4: 1725 + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, tarball: https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz} 1726 + 1727 + inline-style-parser@0.2.4: 1728 + resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==, tarball: https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz} 1729 + 1730 + ipaddr.js@1.9.1: 1731 + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==, tarball: https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz} 1732 + engines: {node: '>= 0.10'} 1733 + 1734 + is-arrayish@0.3.4: 1735 + resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==, tarball: https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz} 1736 + 1737 + is-extglob@2.1.1: 1738 + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, tarball: https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz} 1739 + engines: {node: '>=0.10.0'} 1740 + 1741 + is-glob@4.0.3: 1742 + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, tarball: https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz} 1743 + engines: {node: '>=0.10.0'} 1744 + 1745 + is-number@7.0.0: 1746 + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, tarball: https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz} 1747 + engines: {node: '>=0.12.0'} 1748 + 1749 + is-promise@4.0.0: 1750 + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==, tarball: https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz} 1751 + 1752 + is-reference@3.0.3: 1753 + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==, tarball: https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz} 1754 + 1755 + isexe@2.0.0: 1756 + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, tarball: https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz} 1757 + 1758 + iso-datestring-validator@2.2.2: 1759 + resolution: {integrity: sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==, tarball: https://registry.npmjs.org/iso-datestring-validator/-/iso-datestring-validator-2.2.2.tgz} 1760 + 1761 + jiti@2.4.2: 1762 + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==, tarball: https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz} 1763 + hasBin: true 1764 + 1765 + js-yaml@4.1.0: 1766 + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, tarball: https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz} 1767 + hasBin: true 1768 + 1769 + json-buffer@3.0.1: 1770 + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, tarball: https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz} 1771 + 1772 + json-schema-traverse@0.4.1: 1773 + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, tarball: https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz} 1774 + 1775 + json-stable-stringify-without-jsonify@1.0.1: 1776 + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, tarball: https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz} 1777 + 1778 + keyv@4.5.4: 1779 + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, tarball: https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz} 1780 + 1781 + kleur@4.1.5: 1782 + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==, tarball: https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz} 1783 + engines: {node: '>=6'} 1784 + 1785 + known-css-properties@0.35.0: 1786 + resolution: {integrity: sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==, tarball: https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz} 1787 + 1788 + levn@0.4.1: 1789 + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, tarball: https://registry.npmjs.org/levn/-/levn-0.4.1.tgz} 1790 + engines: {node: '>= 0.8.0'} 1791 + 1792 + lightningcss-darwin-arm64@1.29.2: 1793 + resolution: {integrity: sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==, tarball: https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz} 1794 + engines: {node: '>= 12.0.0'} 1795 + cpu: [arm64] 1796 + os: [darwin] 1797 + 1798 + lightningcss-darwin-x64@1.29.2: 1799 + resolution: {integrity: sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==, tarball: https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.2.tgz} 1800 + engines: {node: '>= 12.0.0'} 1801 + cpu: [x64] 1802 + os: [darwin] 1803 + 1804 + lightningcss-freebsd-x64@1.29.2: 1805 + resolution: {integrity: sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==, tarball: https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.2.tgz} 1806 + engines: {node: '>= 12.0.0'} 1807 + cpu: [x64] 1808 + os: [freebsd] 1809 + 1810 + lightningcss-linux-arm-gnueabihf@1.29.2: 1811 + resolution: {integrity: sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==, tarball: https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.2.tgz} 1812 + engines: {node: '>= 12.0.0'} 1813 + cpu: [arm] 1814 + os: [linux] 1815 + 1816 + lightningcss-linux-arm64-gnu@1.29.2: 1817 + resolution: {integrity: sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==, tarball: https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.2.tgz} 1818 + engines: {node: '>= 12.0.0'} 1819 + cpu: [arm64] 1820 + os: [linux] 1821 + 1822 + lightningcss-linux-arm64-musl@1.29.2: 1823 + resolution: {integrity: sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==, tarball: https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.2.tgz} 1824 + engines: {node: '>= 12.0.0'} 1825 + cpu: [arm64] 1826 + os: [linux] 1827 + 1828 + lightningcss-linux-x64-gnu@1.29.2: 1829 + resolution: {integrity: sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==, tarball: https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz} 1830 + engines: {node: '>= 12.0.0'} 1831 + cpu: [x64] 1832 + os: [linux] 1833 + 1834 + lightningcss-linux-x64-musl@1.29.2: 1835 + resolution: {integrity: sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==, tarball: https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz} 1836 + engines: {node: '>= 12.0.0'} 1837 + cpu: [x64] 1838 + os: [linux] 1839 + 1840 + lightningcss-win32-arm64-msvc@1.29.2: 1841 + resolution: {integrity: sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==, tarball: https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz} 1842 + engines: {node: '>= 12.0.0'} 1843 + cpu: [arm64] 1844 + os: [win32] 1845 + 1846 + lightningcss-win32-x64-msvc@1.29.2: 1847 + resolution: {integrity: sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==, tarball: https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz} 1848 + engines: {node: '>= 12.0.0'} 1849 + cpu: [x64] 1850 + os: [win32] 1851 + 1852 + lightningcss@1.29.2: 1853 + resolution: {integrity: sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==, tarball: https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.2.tgz} 1854 + engines: {node: '>= 12.0.0'} 1855 + 1856 + lilconfig@2.1.0: 1857 + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==, tarball: https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz} 1858 + engines: {node: '>=10'} 1859 + 1860 + linkify-it@5.0.0: 1861 + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==, tarball: https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz} 1862 + 1863 + linkifyjs@4.3.1: 1864 + resolution: {integrity: sha512-DRSlB9DKVW04c4SUdGvKK5FR6be45lTU9M76JnngqPeeGDqPwYc0zdUErtsNVMtxPXgUWV4HbXbnC4sNyBxkYg==, tarball: https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.3.1.tgz} 1865 + 1866 + locate-character@3.0.0: 1867 + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==, tarball: https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz} 1868 + 1869 + locate-path@6.0.0: 1870 + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, tarball: https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz} 1871 + engines: {node: '>=10'} 1872 + 1873 + lodash.castarray@4.4.0: 1874 + resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==, tarball: https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz} 1875 + 1876 + lodash.isplainobject@4.0.6: 1877 + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==, tarball: https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz} 1878 + 1879 + lodash.merge@4.6.2: 1880 + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, tarball: https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz} 1881 + 1882 + lz-string@1.5.0: 1883 + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==, tarball: https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz} 1884 + hasBin: true 1885 + 1886 + magic-string@0.30.17: 1887 + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==, tarball: https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz} 1888 + 1889 + markdown-it@14.1.0: 1890 + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==, tarball: https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz} 1891 + hasBin: true 1892 + 1893 + marked@15.0.11: 1894 + resolution: {integrity: sha512-1BEXAU2euRCG3xwgLVT1y0xbJEld1XOrmRJpUwRCcy7rxhSCwMrmEu9LXoPhHSCJG41V7YcQ2mjKRr5BA3ITIA==, tarball: https://registry.npmjs.org/marked/-/marked-15.0.11.tgz} 1895 + engines: {node: '>= 18'} 1896 + hasBin: true 1897 + 1898 + math-intrinsics@1.1.0: 1899 + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==, tarball: https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz} 1900 + engines: {node: '>= 0.4'} 1901 + 1902 + mdurl@2.0.0: 1903 + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==, tarball: https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz} 1904 + 1905 + media-typer@1.1.0: 1906 + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==, tarball: https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz} 1907 + engines: {node: '>= 0.8'} 1908 + 1909 + merge-descriptors@2.0.0: 1910 + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==, tarball: https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz} 1911 + engines: {node: '>=18'} 1912 + 1913 + merge2@1.4.1: 1914 + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, tarball: https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz} 1915 + engines: {node: '>= 8'} 1916 + 1917 + micromatch@4.0.8: 1918 + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==, tarball: https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz} 1919 + engines: {node: '>=8.6'} 1920 + 1921 + mime-db@1.54.0: 1922 + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==, tarball: https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz} 1923 + engines: {node: '>= 0.6'} 1924 + 1925 + mime-types@3.0.1: 1926 + resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==, tarball: https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz} 1927 + engines: {node: '>= 0.6'} 1928 + 1929 + mime@3.0.0: 1930 + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==, tarball: https://registry.npmjs.org/mime/-/mime-3.0.0.tgz} 1931 + engines: {node: '>=10.0.0'} 1932 + hasBin: true 1933 + 1934 + mini-svg-data-uri@1.4.4: 1935 + resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==, tarball: https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz} 1936 + hasBin: true 1937 + 1938 + miniflare@4.20251210.0: 1939 + resolution: {integrity: sha512-k6kIoXwGVqlPZb0hcn+X7BmnK+8BjIIkusQPY22kCo2RaQJ/LzAjtxHQdGXerlHSnJyQivDQsL6BJHMpQfUFyw==, tarball: https://registry.npmjs.org/miniflare/-/miniflare-4.20251210.0.tgz} 1940 + engines: {node: '>=18.0.0'} 1941 + hasBin: true 1942 + 1943 + minimatch@3.1.2: 1944 + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, tarball: https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz} 1945 + 1946 + minimatch@9.0.5: 1947 + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==, tarball: https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz} 1948 + engines: {node: '>=16 || 14 >=14.17'} 1949 + 1950 + mode-watcher@1.1.0: 1951 + resolution: {integrity: sha512-mUT9RRGPDYenk59qJauN1rhsIMKBmWA3xMF+uRwE8MW/tjhaDSCCARqkSuDTq8vr4/2KcAxIGVjACxTjdk5C3g==, tarball: https://registry.npmjs.org/mode-watcher/-/mode-watcher-1.1.0.tgz} 1952 + peerDependencies: 1953 + svelte: ^5.27.0 1954 + 1955 + mri@1.2.0: 1956 + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==, tarball: https://registry.npmjs.org/mri/-/mri-1.2.0.tgz} 1957 + engines: {node: '>=4'} 1958 + 1959 + mrmime@2.0.1: 1960 + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==, tarball: https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz} 1961 + engines: {node: '>=10'} 1962 + 1963 + ms@2.1.3: 1964 + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, tarball: https://registry.npmjs.org/ms/-/ms-2.1.3.tgz} 1965 + 1966 + multiformats@9.9.0: 1967 + resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==, tarball: https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz} 1968 + 1969 + nanoid@3.3.11: 1970 + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==, tarball: https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz} 1971 + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1972 + hasBin: true 1973 + 1974 + natural-compare@1.4.0: 1975 + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, tarball: https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz} 1976 + 1977 + negotiator@1.0.0: 1978 + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==, tarball: https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz} 1979 + engines: {node: '>= 0.6'} 1980 + 1981 + number-flow@0.5.8: 1982 + resolution: {integrity: sha512-FPr1DumWyGi5Nucoug14bC6xEz70A1TnhgSHhKyfqjgji2SOTz+iLJxKtv37N5JyJbteGYCm6NQ9p1O4KZ7iiA==, tarball: https://registry.npmjs.org/number-flow/-/number-flow-0.5.8.tgz} 1983 + 1984 + object-assign@4.1.1: 1985 + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, tarball: https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz} 1986 + engines: {node: '>=0.10.0'} 1987 + 1988 + object-inspect@1.13.4: 1989 + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==, tarball: https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz} 1990 + engines: {node: '>= 0.4'} 1991 + 1992 + on-finished@2.4.1: 1993 + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==, tarball: https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz} 1994 + engines: {node: '>= 0.8'} 1995 + 1996 + once@1.4.0: 1997 + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, tarball: https://registry.npmjs.org/once/-/once-1.4.0.tgz} 1998 + 1999 + optionator@0.9.4: 2000 + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==, tarball: https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz} 2001 + engines: {node: '>= 0.8.0'} 2002 + 2003 + orderedmap@2.1.1: 2004 + resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==, tarball: https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz} 2005 + 2006 + p-limit@3.1.0: 2007 + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, tarball: https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz} 2008 + engines: {node: '>=10'} 2009 + 2010 + p-locate@5.0.0: 2011 + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, tarball: https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz} 2012 + engines: {node: '>=10'} 2013 + 2014 + parent-module@1.0.1: 2015 + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, tarball: https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz} 2016 + engines: {node: '>=6'} 2017 + 2018 + parseurl@1.3.3: 2019 + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==, tarball: https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz} 2020 + engines: {node: '>= 0.8'} 2021 + 2022 + path-exists@4.0.0: 2023 + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, tarball: https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz} 2024 + engines: {node: '>=8'} 2025 + 2026 + path-key@3.1.1: 2027 + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, tarball: https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz} 2028 + engines: {node: '>=8'} 2029 + 2030 + path-to-regexp@6.3.0: 2031 + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==, tarball: https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz} 2032 + 2033 + path-to-regexp@8.2.0: 2034 + resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==, tarball: https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz} 2035 + engines: {node: '>=16'} 2036 + 2037 + pathe@2.0.3: 2038 + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==, tarball: https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz} 2039 + 2040 + picocolors@1.1.1: 2041 + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, tarball: https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz} 2042 + 2043 + picomatch@2.3.1: 2044 + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, tarball: https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz} 2045 + engines: {node: '>=8.6'} 2046 + 2047 + picomatch@4.0.2: 2048 + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==, tarball: https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz} 2049 + engines: {node: '>=12'} 2050 + 2051 + pkce-challenge@5.0.0: 2052 + resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==, tarball: https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz} 2053 + engines: {node: '>=16.20.0'} 2054 + 2055 + postcss-load-config@3.1.4: 2056 + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==, tarball: https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz} 2057 + engines: {node: '>= 10'} 2058 + peerDependencies: 2059 + postcss: '>=8.0.9' 2060 + ts-node: '>=9.0.0' 2061 + peerDependenciesMeta: 2062 + postcss: 2063 + optional: true 2064 + ts-node: 2065 + optional: true 2066 + 2067 + postcss-safe-parser@6.0.0: 2068 + resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==, tarball: https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz} 2069 + engines: {node: '>=12.0'} 2070 + peerDependencies: 2071 + postcss: ^8.3.3 2072 + 2073 + postcss-scss@4.0.9: 2074 + resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==, tarball: https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz} 2075 + engines: {node: '>=12.0'} 2076 + peerDependencies: 2077 + postcss: ^8.4.29 2078 + 2079 + postcss-selector-parser@6.0.10: 2080 + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==, tarball: https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz} 2081 + engines: {node: '>=4'} 2082 + 2083 + postcss-selector-parser@6.1.2: 2084 + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==, tarball: https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz} 2085 + engines: {node: '>=4'} 2086 + 2087 + postcss@8.5.3: 2088 + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==, tarball: https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz} 2089 + engines: {node: ^10 || ^12 || >=14} 2090 + 2091 + prelude-ls@1.2.1: 2092 + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, tarball: https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz} 2093 + engines: {node: '>= 0.8.0'} 2094 + 2095 + prettier-plugin-svelte@3.3.3: 2096 + resolution: {integrity: sha512-yViK9zqQ+H2qZD1w/bH7W8i+bVfKrD8GIFjkFe4Thl6kCT9SlAsXVNmt3jCvQOCsnOhcvYgsoVlRV/Eu6x5nNw==, tarball: https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.3.3.tgz} 2097 + peerDependencies: 2098 + prettier: ^3.0.0 2099 + svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 2100 + 2101 + prettier-plugin-tailwindcss@0.6.11: 2102 + resolution: {integrity: sha512-YxaYSIvZPAqhrrEpRtonnrXdghZg1irNg4qrjboCXrpybLWVs55cW2N3juhspVJiO0JBvYJT8SYsJpc8OQSnsA==, tarball: https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.11.tgz} 2103 + engines: {node: '>=14.21.3'} 2104 + peerDependencies: 2105 + '@ianvs/prettier-plugin-sort-imports': '*' 2106 + '@prettier/plugin-pug': '*' 2107 + '@shopify/prettier-plugin-liquid': '*' 2108 + '@trivago/prettier-plugin-sort-imports': '*' 2109 + '@zackad/prettier-plugin-twig': '*' 2110 + prettier: ^3.0 2111 + prettier-plugin-astro: '*' 2112 + prettier-plugin-css-order: '*' 2113 + prettier-plugin-import-sort: '*' 2114 + prettier-plugin-jsdoc: '*' 2115 + prettier-plugin-marko: '*' 2116 + prettier-plugin-multiline-arrays: '*' 2117 + prettier-plugin-organize-attributes: '*' 2118 + prettier-plugin-organize-imports: '*' 2119 + prettier-plugin-sort-imports: '*' 2120 + prettier-plugin-style-order: '*' 2121 + prettier-plugin-svelte: '*' 2122 + peerDependenciesMeta: 2123 + '@ianvs/prettier-plugin-sort-imports': 2124 + optional: true 2125 + '@prettier/plugin-pug': 2126 + optional: true 2127 + '@shopify/prettier-plugin-liquid': 2128 + optional: true 2129 + '@trivago/prettier-plugin-sort-imports': 2130 + optional: true 2131 + '@zackad/prettier-plugin-twig': 2132 + optional: true 2133 + prettier-plugin-astro: 2134 + optional: true 2135 + prettier-plugin-css-order: 2136 + optional: true 2137 + prettier-plugin-import-sort: 2138 + optional: true 2139 + prettier-plugin-jsdoc: 2140 + optional: true 2141 + prettier-plugin-marko: 2142 + optional: true 2143 + prettier-plugin-multiline-arrays: 2144 + optional: true 2145 + prettier-plugin-organize-attributes: 2146 + optional: true 2147 + prettier-plugin-organize-imports: 2148 + optional: true 2149 + prettier-plugin-sort-imports: 2150 + optional: true 2151 + prettier-plugin-style-order: 2152 + optional: true 2153 + prettier-plugin-svelte: 2154 + optional: true 2155 + 2156 + prettier@3.5.3: 2157 + resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==, tarball: https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz} 2158 + engines: {node: '>=14'} 2159 + hasBin: true 2160 + 2161 + prosemirror-changeset@2.3.0: 2162 + resolution: {integrity: sha512-8wRKhlEwEJ4I13Ju54q2NZR1pVKGTgJ/8XsQ8L5A5uUsQ/YQScQJuEAuh8Bn8i6IwAMjjLRABd9lVli+DlIiVw==, tarball: https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.3.0.tgz} 2163 + 2164 + prosemirror-collab@1.3.1: 2165 + resolution: {integrity: sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==, tarball: https://registry.npmjs.org/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz} 2166 + 2167 + prosemirror-commands@1.7.1: 2168 + resolution: {integrity: sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==, tarball: https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.7.1.tgz} 2169 + 2170 + prosemirror-dropcursor@1.8.2: 2171 + resolution: {integrity: sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==, tarball: https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.2.tgz} 2172 + 2173 + prosemirror-gapcursor@1.3.2: 2174 + resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==, tarball: https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.2.tgz} 2175 + 2176 + prosemirror-history@1.4.1: 2177 + resolution: {integrity: sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==, tarball: https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.4.1.tgz} 2178 + 2179 + prosemirror-inputrules@1.5.0: 2180 + resolution: {integrity: sha512-K0xJRCmt+uSw7xesnHmcn72yBGTbY45vm8gXI4LZXbx2Z0jwh5aF9xrGQgrVPu0WbyFVFF3E/o9VhJYz6SQWnA==, tarball: https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.5.0.tgz} 2181 + 2182 + prosemirror-keymap@1.2.3: 2183 + resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==, tarball: https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.3.tgz} 2184 + 2185 + prosemirror-markdown@1.13.2: 2186 + resolution: {integrity: sha512-FPD9rHPdA9fqzNmIIDhhnYQ6WgNoSWX9StUZ8LEKapaXU9i6XgykaHKhp6XMyXlOWetmaFgGDS/nu/w9/vUc5g==, tarball: https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.13.2.tgz} 2187 + 2188 + prosemirror-menu@1.2.5: 2189 + resolution: {integrity: sha512-qwXzynnpBIeg1D7BAtjOusR+81xCp53j7iWu/IargiRZqRjGIlQuu1f3jFi+ehrHhWMLoyOQTSRx/IWZJqOYtQ==, tarball: https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.2.5.tgz} 2190 + 2191 + prosemirror-model@1.25.1: 2192 + resolution: {integrity: sha512-AUvbm7qqmpZa5d9fPKMvH1Q5bqYQvAZWOGRvxsB6iFLyycvC9MwNemNVjHVrWgjaoxAfY8XVg7DbvQ/qxvI9Eg==, tarball: https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.1.tgz} 2193 + 2194 + prosemirror-schema-basic@1.2.4: 2195 + resolution: {integrity: sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==, tarball: https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.4.tgz} 2196 + 2197 + prosemirror-schema-list@1.5.1: 2198 + resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==, tarball: https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz} 2199 + 2200 + prosemirror-state@1.4.3: 2201 + resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==, tarball: https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.3.tgz} 2202 + 2203 + prosemirror-tables@1.7.1: 2204 + resolution: {integrity: sha512-eRQ97Bf+i9Eby99QbyAiyov43iOKgWa7QCGly+lrDt7efZ1v8NWolhXiB43hSDGIXT1UXgbs4KJN3a06FGpr1Q==, tarball: https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.7.1.tgz} 2205 + 2206 + prosemirror-trailing-node@3.0.0: 2207 + resolution: {integrity: sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==, tarball: https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz} 2208 + peerDependencies: 2209 + prosemirror-model: ^1.22.1 2210 + prosemirror-state: ^1.4.2 2211 + prosemirror-view: ^1.33.8 2212 + 2213 + prosemirror-transform@1.10.4: 2214 + resolution: {integrity: sha512-pwDy22nAnGqNR1feOQKHxoFkkUtepoFAd3r2hbEDsnf4wp57kKA36hXsB3njA9FtONBEwSDnDeCiJe+ItD+ykw==, tarball: https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.10.4.tgz} 2215 + 2216 + prosemirror-view@1.39.2: 2217 + resolution: {integrity: sha512-BmOkml0QWNob165gyUxXi5K5CVUgVPpqMEAAml/qzgKn9boLUWVPzQ6LtzXw8Cn1GtRQX4ELumPxqtLTDaAKtg==, tarball: https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.39.2.tgz} 2218 + 2219 + proxy-addr@2.0.7: 2220 + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==, tarball: https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz} 2221 + engines: {node: '>= 0.10'} 2222 + 2223 + punycode.js@2.3.1: 2224 + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==, tarball: https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz} 2225 + engines: {node: '>=6'} 2226 + 2227 + punycode@2.3.1: 2228 + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, tarball: https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz} 2229 + engines: {node: '>=6'} 2230 + 2231 + qs@6.14.0: 2232 + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==, tarball: https://registry.npmjs.org/qs/-/qs-6.14.0.tgz} 2233 + engines: {node: '>=0.6'} 2234 + 2235 + queue-microtask@1.2.3: 2236 + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, tarball: https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz} 2237 + 2238 + range-parser@1.2.1: 2239 + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==, tarball: https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz} 2240 + engines: {node: '>= 0.6'} 2241 + 2242 + raw-body@3.0.0: 2243 + resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==, tarball: https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz} 2244 + engines: {node: '>= 0.8'} 2245 + 2246 + readdirp@4.1.2: 2247 + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==, tarball: https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz} 2248 + engines: {node: '>= 14.18.0'} 2249 + 2250 + regexparam@3.0.0: 2251 + resolution: {integrity: sha512-RSYAtP31mvYLkAHrOlh25pCNQ5hWnT106VukGaaFfuJrZFkGRX5GhUAdPqpSDXxOhA2c4akmRuplv1mRqnBn6Q==, tarball: https://registry.npmjs.org/regexparam/-/regexparam-3.0.0.tgz} 2252 + engines: {node: '>=8'} 2253 + 2254 + resolve-from@4.0.0: 2255 + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, tarball: https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz} 2256 + engines: {node: '>=4'} 2257 + 2258 + reusify@1.1.0: 2259 + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==, tarball: https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz} 2260 + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2261 + 2262 + rollup@4.40.2: 2263 + resolution: {integrity: sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==, tarball: https://registry.npmjs.org/rollup/-/rollup-4.40.2.tgz} 2264 + engines: {node: '>=18.0.0', npm: '>=8.0.0'} 2265 + hasBin: true 2266 + 2267 + rope-sequence@1.3.4: 2268 + resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==, tarball: https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz} 2269 + 2270 + router@2.2.0: 2271 + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==, tarball: https://registry.npmjs.org/router/-/router-2.2.0.tgz} 2272 + engines: {node: '>= 18'} 2273 + 2274 + run-parallel@1.2.0: 2275 + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, tarball: https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz} 2276 + 2277 + runed@0.23.4: 2278 + resolution: {integrity: sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA==, tarball: https://registry.npmjs.org/runed/-/runed-0.23.4.tgz} 2279 + peerDependencies: 2280 + svelte: ^5.7.0 2281 + 2282 + runed@0.25.0: 2283 + resolution: {integrity: sha512-7+ma4AG9FT2sWQEA0Egf6mb7PBT2vHyuHail1ie8ropfSjvZGtEAx8YTmUjv/APCsdRRxEVvArNjALk9zFSOrg==, tarball: https://registry.npmjs.org/runed/-/runed-0.25.0.tgz} 2284 + peerDependencies: 2285 + svelte: ^5.7.0 2286 + 2287 + runed@0.28.0: 2288 + resolution: {integrity: sha512-k2xx7RuO9hWcdd9f+8JoBeqWtYrm5CALfgpkg2YDB80ds/QE4w0qqu34A7fqiAwiBBSBQOid7TLxwxVC27ymWQ==, tarball: https://registry.npmjs.org/runed/-/runed-0.28.0.tgz} 2289 + peerDependencies: 2290 + svelte: ^5.7.0 2291 + 2292 + runed@0.35.1: 2293 + resolution: {integrity: sha512-2F4Q/FZzbeJTFdIS/PuOoPRSm92sA2LhzTnv6FXhCoENb3huf5+fDuNOg1LNvGOouy3u/225qxmuJvcV3IZK5Q==, tarball: https://registry.npmjs.org/runed/-/runed-0.35.1.tgz} 2294 + peerDependencies: 2295 + '@sveltejs/kit': ^2.21.0 2296 + svelte: ^5.7.0 2297 + peerDependenciesMeta: 2298 + '@sveltejs/kit': 2299 + optional: true 2300 + 2301 + sade@1.8.1: 2302 + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==, tarball: https://registry.npmjs.org/sade/-/sade-1.8.1.tgz} 2303 + engines: {node: '>=6'} 2304 + 2305 + safe-buffer@5.2.1: 2306 + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, tarball: https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz} 2307 + 2308 + safer-buffer@2.1.2: 2309 + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, tarball: https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz} 2310 + 2311 + semver@7.7.1: 2312 + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==, tarball: https://registry.npmjs.org/semver/-/semver-7.7.1.tgz} 2313 + engines: {node: '>=10'} 2314 + hasBin: true 2315 + 2316 + send@1.2.0: 2317 + resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==, tarball: https://registry.npmjs.org/send/-/send-1.2.0.tgz} 2318 + engines: {node: '>= 18'} 2319 + 2320 + serve-static@2.2.0: 2321 + resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==, tarball: https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz} 2322 + engines: {node: '>= 18'} 2323 + 2324 + set-cookie-parser@2.7.1: 2325 + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==, tarball: https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz} 2326 + 2327 + setprototypeof@1.2.0: 2328 + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==, tarball: https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz} 2329 + 2330 + sharp@0.33.5: 2331 + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==, tarball: https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz} 2332 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 2333 + 2334 + shebang-command@2.0.0: 2335 + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, tarball: https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz} 2336 + engines: {node: '>=8'} 2337 + 2338 + shebang-regex@3.0.0: 2339 + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, tarball: https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz} 2340 + engines: {node: '>=8'} 2341 + 2342 + side-channel-list@1.0.0: 2343 + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==, tarball: https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz} 2344 + engines: {node: '>= 0.4'} 2345 + 2346 + side-channel-map@1.0.1: 2347 + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==, tarball: https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz} 2348 + engines: {node: '>= 0.4'} 2349 + 2350 + side-channel-weakmap@1.0.2: 2351 + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==, tarball: https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz} 2352 + engines: {node: '>= 0.4'} 2353 + 2354 + side-channel@1.1.0: 2355 + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==, tarball: https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz} 2356 + engines: {node: '>= 0.4'} 2357 + 2358 + simple-swizzle@0.2.4: 2359 + resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==, tarball: https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz} 2360 + 2361 + sirv@3.0.1: 2362 + resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==, tarball: https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz} 2363 + engines: {node: '>=18'} 2364 + 2365 + source-map-js@1.2.1: 2366 + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, tarball: https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz} 2367 + engines: {node: '>=0.10.0'} 2368 + 2369 + statuses@2.0.1: 2370 + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==, tarball: https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz} 2371 + engines: {node: '>= 0.8'} 2372 + 2373 + stoppable@1.1.0: 2374 + resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==, tarball: https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz} 2375 + engines: {node: '>=4', npm: '>=6'} 2376 + 2377 + strip-json-comments@3.1.1: 2378 + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, tarball: https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz} 2379 + engines: {node: '>=8'} 2380 + 2381 + style-to-object@1.0.8: 2382 + resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==, tarball: https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz} 2383 + 2384 + supports-color@10.2.2: 2385 + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==, tarball: https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz} 2386 + engines: {node: '>=18'} 2387 + 2388 + supports-color@7.2.0: 2389 + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, tarball: https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz} 2390 + engines: {node: '>=8'} 2391 + 2392 + svelte-check@4.1.7: 2393 + resolution: {integrity: sha512-1jX4BzXrQJhC/Jt3SqYf6Ntu//vmfc6VWp07JkRfK2nn+22yIblspVUo96gzMkg0Zov8lQicxhxsMzOctwcMQQ==, tarball: https://registry.npmjs.org/svelte-check/-/svelte-check-4.1.7.tgz} 2394 + engines: {node: '>= 18.0.0'} 2395 + hasBin: true 2396 + peerDependencies: 2397 + svelte: ^4.0.0 || ^5.0.0-next.0 2398 + typescript: '>=5.0.0' 2399 + 2400 + svelte-eslint-parser@0.43.0: 2401 + resolution: {integrity: sha512-GpU52uPKKcVnh8tKN5P4UZpJ/fUDndmq7wfsvoVXsyP+aY0anol7Yqo01fyrlaWGMFfm4av5DyrjlaXdLRJvGA==, tarball: https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.43.0.tgz} 2402 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 2403 + peerDependencies: 2404 + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 2405 + peerDependenciesMeta: 2406 + svelte: 2407 + optional: true 2408 + 2409 + svelte-sonner@0.3.28: 2410 + resolution: {integrity: sha512-K3AmlySeFifF/cKgsYNv5uXqMVNln0NBAacOYgmkQStLa/UoU0LhfAACU6Gr+YYC8bOCHdVmFNoKuDbMEsppJg==, tarball: https://registry.npmjs.org/svelte-sonner/-/svelte-sonner-0.3.28.tgz} 2411 + peerDependencies: 2412 + svelte: ^3.0.0 || ^4.0.0 || ^5.0.0-next.1 2413 + 2414 + svelte-sonner@1.0.7: 2415 + resolution: {integrity: sha512-1EUFYmd7q/xfs2qCHwJzGPh9n5VJ3X6QjBN10fof2vxgy8fYE7kVfZ7uGnd7i6fQaWIr5KvXcwYXE/cmTEjk5A==, tarball: https://registry.npmjs.org/svelte-sonner/-/svelte-sonner-1.0.7.tgz} 2416 + peerDependencies: 2417 + svelte: ^5.0.0 2418 + 2419 + svelte-toolbelt@0.10.6: 2420 + resolution: {integrity: sha512-YWuX+RE+CnWYx09yseAe4ZVMM7e7GRFZM6OYWpBKOb++s+SQ8RBIMMe+Bs/CznBMc0QPLjr+vDBxTAkozXsFXQ==, tarball: https://registry.npmjs.org/svelte-toolbelt/-/svelte-toolbelt-0.10.6.tgz} 2421 + engines: {node: '>=18', pnpm: '>=8.7.0'} 2422 + peerDependencies: 2423 + svelte: ^5.30.2 2424 + 2425 + svelte-toolbelt@0.7.1: 2426 + resolution: {integrity: sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ==, tarball: https://registry.npmjs.org/svelte-toolbelt/-/svelte-toolbelt-0.7.1.tgz} 2427 + engines: {node: '>=18', pnpm: '>=8.7.0'} 2428 + peerDependencies: 2429 + svelte: ^5.0.0 2430 + 2431 + svelte@5.45.8: 2432 + resolution: {integrity: sha512-1Jh7FwVh/2Uxg0T7SeE1qFKMhwYH45b2v53bcZpW7qHa6O8iU1ByEj56PF0IQ6dU4HE5gRkic6h+vx+tclHeiw==, tarball: https://registry.npmjs.org/svelte/-/svelte-5.45.8.tgz} 2433 + engines: {node: '>=18'} 2434 + 2435 + tabbable@6.2.0: 2436 + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==, tarball: https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz} 2437 + 2438 + tailwind-merge@3.0.2: 2439 + resolution: {integrity: sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==, tarball: https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.0.2.tgz} 2440 + 2441 + tailwind-merge@3.4.0: 2442 + resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==, tarball: https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz} 2443 + 2444 + tailwind-variants@1.0.0: 2445 + resolution: {integrity: sha512-2WSbv4ulEEyuBKomOunut65D8UZwxrHoRfYnxGcQNnHqlSCp2+B7Yz2W+yrNDrxRodOXtGD/1oCcKGNBnUqMqA==, tarball: https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-1.0.0.tgz} 2446 + engines: {node: '>=16.x', pnpm: '>=7.x'} 2447 + peerDependencies: 2448 + tailwindcss: '*' 2449 + 2450 + tailwind-variants@3.2.2: 2451 + resolution: {integrity: sha512-Mi4kHeMTLvKlM98XPnK+7HoBPmf4gygdFmqQPaDivc3DpYS6aIY6KiG/PgThrGvii5YZJqRsPz0aPyhoFzmZgg==, tarball: https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-3.2.2.tgz} 2452 + engines: {node: '>=16.x', pnpm: '>=7.x'} 2453 + peerDependencies: 2454 + tailwind-merge: '>=3.0.0' 2455 + tailwindcss: '*' 2456 + peerDependenciesMeta: 2457 + tailwind-merge: 2458 + optional: true 2459 + 2460 + tailwindcss@4.1.5: 2461 + resolution: {integrity: sha512-nYtSPfWGDiWgCkwQG/m+aX83XCwf62sBgg3bIlNiiOcggnS1x3uVRDAuyelBFL+vJdOPPCGElxv9DjHJjRHiVA==, tarball: https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.5.tgz} 2462 + 2463 + tapable@2.2.1: 2464 + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==, tarball: https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz} 2465 + engines: {node: '>=6'} 2466 + 2467 + tinyglobby@0.2.13: 2468 + resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==, tarball: https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz} 2469 + engines: {node: '>=12.0.0'} 2470 + 2471 + tlds@1.258.0: 2472 + resolution: {integrity: sha512-XGhStWuOlBA5D8QnyN2xtgB2cUOdJ3ztisne1DYVWMcVH29qh8eQIpRmP3HnuJLdgyzG0HpdGzRMu1lm/Oictw==, tarball: https://registry.npmjs.org/tlds/-/tlds-1.258.0.tgz} 2473 + hasBin: true 2474 + 2475 + to-regex-range@5.0.1: 2476 + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, tarball: https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz} 2477 + engines: {node: '>=8.0'} 2478 + 2479 + toidentifier@1.0.1: 2480 + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==, tarball: https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz} 2481 + engines: {node: '>=0.6'} 2482 + 2483 + totalist@3.0.1: 2484 + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==, tarball: https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz} 2485 + engines: {node: '>=6'} 2486 + 2487 + ts-api-utils@2.1.0: 2488 + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==, tarball: https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz} 2489 + engines: {node: '>=18.12'} 2490 + peerDependencies: 2491 + typescript: '>=4.8.4' 2492 + 2493 + tslib@2.8.1: 2494 + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, tarball: https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz} 2495 + 2496 + turndown@7.2.0: 2497 + resolution: {integrity: sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A==, tarball: https://registry.npmjs.org/turndown/-/turndown-7.2.0.tgz} 2498 + 2499 + type-check@0.4.0: 2500 + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, tarball: https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz} 2501 + engines: {node: '>= 0.8.0'} 2502 + 2503 + type-is@2.0.1: 2504 + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==, tarball: https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz} 2505 + engines: {node: '>= 0.6'} 2506 + 2507 + typescript-eslint@8.32.0: 2508 + resolution: {integrity: sha512-UMq2kxdXCzinFFPsXc9o2ozIpYCCOiEC46MG3yEh5Vipq6BO27otTtEBZA1fQ66DulEUgE97ucQ/3YY66CPg0A==, tarball: https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.32.0.tgz} 2509 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 2510 + peerDependencies: 2511 + eslint: ^8.57.0 || ^9.0.0 2512 + typescript: '>=4.8.4 <5.9.0' 2513 + 2514 + typescript@5.8.3: 2515 + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==, tarball: https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz} 2516 + engines: {node: '>=14.17'} 2517 + hasBin: true 2518 + 2519 + uc.micro@2.1.0: 2520 + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==, tarball: https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz} 2521 + 2522 + uint8arrays@3.0.0: 2523 + resolution: {integrity: sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==, tarball: https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.0.0.tgz} 2524 + 2525 + undici@7.14.0: 2526 + resolution: {integrity: sha512-Vqs8HTzjpQXZeXdpsfChQTlafcMQaaIwnGwLam1wudSSjlJeQ3bw1j+TLPePgrCnCpUXx7Ba5Pdpf5OBih62NQ==, tarball: https://registry.npmjs.org/undici/-/undici-7.14.0.tgz} 2527 + engines: {node: '>=20.18.1'} 2528 + 2529 + unenv@2.0.0-rc.24: 2530 + resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==, tarball: https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.24.tgz} 2531 + 2532 + unpipe@1.0.0: 2533 + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==, tarball: https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz} 2534 + engines: {node: '>= 0.8'} 2535 + 2536 + uri-js@4.4.1: 2537 + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, tarball: https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz} 2538 + 2539 + util-deprecate@1.0.2: 2540 + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, tarball: https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz} 2541 + 2542 + vary@1.1.2: 2543 + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==, tarball: https://registry.npmjs.org/vary/-/vary-1.1.2.tgz} 2544 + engines: {node: '>= 0.8'} 2545 + 2546 + vite@6.3.5: 2547 + resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==, tarball: https://registry.npmjs.org/vite/-/vite-6.3.5.tgz} 2548 + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 2549 + hasBin: true 2550 + peerDependencies: 2551 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 2552 + jiti: '>=1.21.0' 2553 + less: '*' 2554 + lightningcss: ^1.21.0 2555 + sass: '*' 2556 + sass-embedded: '*' 2557 + stylus: '*' 2558 + sugarss: '*' 2559 + terser: ^5.16.0 2560 + tsx: ^4.8.1 2561 + yaml: ^2.4.2 2562 + peerDependenciesMeta: 2563 + '@types/node': 2564 + optional: true 2565 + jiti: 2566 + optional: true 2567 + less: 2568 + optional: true 2569 + lightningcss: 2570 + optional: true 2571 + sass: 2572 + optional: true 2573 + sass-embedded: 2574 + optional: true 2575 + stylus: 2576 + optional: true 2577 + sugarss: 2578 + optional: true 2579 + terser: 2580 + optional: true 2581 + tsx: 2582 + optional: true 2583 + yaml: 2584 + optional: true 2585 + 2586 + vitefu@1.0.6: 2587 + resolution: {integrity: sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==, tarball: https://registry.npmjs.org/vitefu/-/vitefu-1.0.6.tgz} 2588 + peerDependencies: 2589 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 2590 + peerDependenciesMeta: 2591 + vite: 2592 + optional: true 2593 + 2594 + w3c-keyname@2.2.8: 2595 + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==, tarball: https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz} 2596 + 2597 + which@2.0.2: 2598 + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, tarball: https://registry.npmjs.org/which/-/which-2.0.2.tgz} 2599 + engines: {node: '>= 8'} 2600 + hasBin: true 2601 + 2602 + word-wrap@1.2.5: 2603 + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==, tarball: https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz} 2604 + engines: {node: '>=0.10.0'} 2605 + 2606 + workerd@1.20251210.0: 2607 + resolution: {integrity: sha512-9MUUneP1BnRE9XAYi94FXxHmiLGbO75EHQZsgWqSiOXjoXSqJCw8aQbIEPxCy19TclEl/kHUFYce8ST2W+Qpjw==, tarball: https://registry.npmjs.org/workerd/-/workerd-1.20251210.0.tgz} 2608 + engines: {node: '>=16'} 2609 + hasBin: true 2610 + 2611 + worktop@0.8.0-next.18: 2612 + resolution: {integrity: sha512-+TvsA6VAVoMC3XDKR5MoC/qlLqDixEfOBysDEKnPIPou/NvoPWCAuXHXMsswwlvmEuvX56lQjvELLyLuzTKvRw==, tarball: https://registry.npmjs.org/worktop/-/worktop-0.8.0-next.18.tgz} 2613 + engines: {node: '>=12'} 2614 + 2615 + wrangler@4.54.0: 2616 + resolution: {integrity: sha512-bANFsjDwJLbprYoBK+hUDZsVbUv2SqJd8QvArLIcZk+fPq4h/Ohtj5vkKXD3k0s2bD1DXLk08D+hYmeNH+xC6A==, tarball: https://registry.npmjs.org/wrangler/-/wrangler-4.54.0.tgz} 2617 + engines: {node: '>=20.0.0'} 2618 + hasBin: true 2619 + peerDependencies: 2620 + '@cloudflare/workers-types': ^4.20251210.0 2621 + peerDependenciesMeta: 2622 + '@cloudflare/workers-types': 2623 + optional: true 2624 + 2625 + wrappy@1.0.2: 2626 + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, tarball: https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz} 2627 + 2628 + ws@8.18.0: 2629 + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==, tarball: https://registry.npmjs.org/ws/-/ws-8.18.0.tgz} 2630 + engines: {node: '>=10.0.0'} 2631 + peerDependencies: 2632 + bufferutil: ^4.0.1 2633 + utf-8-validate: '>=5.0.2' 2634 + peerDependenciesMeta: 2635 + bufferutil: 2636 + optional: true 2637 + utf-8-validate: 2638 + optional: true 2639 + 2640 + yaml@1.10.2: 2641 + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==, tarball: https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz} 2642 + engines: {node: '>= 6'} 2643 + 2644 + yocto-queue@0.1.0: 2645 + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, tarball: https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz} 2646 + engines: {node: '>=10'} 2647 + 2648 + youch-core@0.3.3: 2649 + resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==, tarball: https://registry.npmjs.org/youch-core/-/youch-core-0.3.3.tgz} 2650 + 2651 + youch@4.1.0-beta.10: 2652 + resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==, tarball: https://registry.npmjs.org/youch/-/youch-4.1.0-beta.10.tgz} 2653 + 2654 + zimmerframe@1.1.2: 2655 + resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==, tarball: https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz} 2656 + 2657 + zod-to-json-schema@3.24.5: 2658 + resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==, tarball: https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz} 2659 + peerDependencies: 2660 + zod: ^3.24.1 2661 + 2662 + zod@3.22.3: 2663 + resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==, tarball: https://registry.npmjs.org/zod/-/zod-3.22.3.tgz} 2664 + 2665 + zod@3.24.4: 2666 + resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==, tarball: https://registry.npmjs.org/zod/-/zod-3.24.4.tgz} 2667 + 2668 + snapshots: 2669 + 2670 + '@atcute/client@3.1.0': {} 2671 + 2672 + '@atcute/multibase@1.1.3': 2673 + dependencies: 2674 + '@atcute/uint8array': 1.0.1 2675 + 2676 + '@atcute/oauth-browser-client@1.0.18': 2677 + dependencies: 2678 + '@atcute/client': 3.1.0 2679 + '@atcute/multibase': 1.1.3 2680 + '@atcute/uint8array': 1.0.1 2681 + 2682 + '@atcute/uint8array@1.0.1': {} 2683 + 2684 + '@atproto/api@0.15.6': 2685 + dependencies: 2686 + '@atproto/common-web': 0.4.2 2687 + '@atproto/lexicon': 0.4.11 2688 + '@atproto/syntax': 0.4.0 2689 + '@atproto/xrpc': 0.7.0 2690 + await-lock: 2.2.2 2691 + multiformats: 9.9.0 2692 + tlds: 1.258.0 2693 + zod: 3.24.4 2694 + 2695 + '@atproto/common-web@0.4.2': 2696 + dependencies: 2697 + graphemer: 1.4.0 2698 + multiformats: 9.9.0 2699 + uint8arrays: 3.0.0 2700 + zod: 3.24.4 2701 + 2702 + '@atproto/lexicon@0.4.11': 2703 + dependencies: 2704 + '@atproto/common-web': 0.4.2 2705 + '@atproto/syntax': 0.4.0 2706 + iso-datestring-validator: 2.2.2 2707 + multiformats: 9.9.0 2708 + zod: 3.24.4 2709 + 2710 + '@atproto/syntax@0.4.0': {} 2711 + 2712 + '@atproto/xrpc@0.7.0': 2713 + dependencies: 2714 + '@atproto/lexicon': 0.4.11 2715 + zod: 3.24.4 2716 + 2717 + '@cloudflare/kv-asset-handler@0.4.1': 2718 + dependencies: 2719 + mime: 3.0.0 2720 + 2721 + '@cloudflare/unenv-preset@2.7.13(unenv@2.0.0-rc.24)(workerd@1.20251210.0)': 2722 + dependencies: 2723 + unenv: 2.0.0-rc.24 2724 + optionalDependencies: 2725 + workerd: 1.20251210.0 2726 + 2727 + '@cloudflare/workerd-darwin-64@1.20251210.0': 2728 + optional: true 2729 + 2730 + '@cloudflare/workerd-darwin-arm64@1.20251210.0': 2731 + optional: true 2732 + 2733 + '@cloudflare/workerd-linux-64@1.20251210.0': 2734 + optional: true 2735 + 2736 + '@cloudflare/workerd-linux-arm64@1.20251210.0': 2737 + optional: true 2738 + 2739 + '@cloudflare/workerd-windows-64@1.20251210.0': 2740 + optional: true 2741 + 2742 + '@cloudflare/workers-types@4.20251225.0': {} 2743 + 2744 + '@cspotcode/source-map-support@0.8.1': 2745 + dependencies: 2746 + '@jridgewell/trace-mapping': 0.3.9 2747 + 2748 + '@emnapi/runtime@1.7.1': 2749 + dependencies: 2750 + tslib: 2.8.1 2751 + optional: true 2752 + 2753 + '@esbuild/aix-ppc64@0.25.4': 2754 + optional: true 2755 + 2756 + '@esbuild/aix-ppc64@0.27.0': 2757 + optional: true 2758 + 2759 + '@esbuild/android-arm64@0.25.4': 2760 + optional: true 2761 + 2762 + '@esbuild/android-arm64@0.27.0': 2763 + optional: true 2764 + 2765 + '@esbuild/android-arm@0.25.4': 2766 + optional: true 2767 + 2768 + '@esbuild/android-arm@0.27.0': 2769 + optional: true 2770 + 2771 + '@esbuild/android-x64@0.25.4': 2772 + optional: true 2773 + 2774 + '@esbuild/android-x64@0.27.0': 2775 + optional: true 2776 + 2777 + '@esbuild/darwin-arm64@0.25.4': 2778 + optional: true 2779 + 2780 + '@esbuild/darwin-arm64@0.27.0': 2781 + optional: true 2782 + 2783 + '@esbuild/darwin-x64@0.25.4': 2784 + optional: true 2785 + 2786 + '@esbuild/darwin-x64@0.27.0': 2787 + optional: true 2788 + 2789 + '@esbuild/freebsd-arm64@0.25.4': 2790 + optional: true 2791 + 2792 + '@esbuild/freebsd-arm64@0.27.0': 2793 + optional: true 2794 + 2795 + '@esbuild/freebsd-x64@0.25.4': 2796 + optional: true 2797 + 2798 + '@esbuild/freebsd-x64@0.27.0': 2799 + optional: true 2800 + 2801 + '@esbuild/linux-arm64@0.25.4': 2802 + optional: true 2803 + 2804 + '@esbuild/linux-arm64@0.27.0': 2805 + optional: true 2806 + 2807 + '@esbuild/linux-arm@0.25.4': 2808 + optional: true 2809 + 2810 + '@esbuild/linux-arm@0.27.0': 2811 + optional: true 2812 + 2813 + '@esbuild/linux-ia32@0.25.4': 2814 + optional: true 2815 + 2816 + '@esbuild/linux-ia32@0.27.0': 2817 + optional: true 2818 + 2819 + '@esbuild/linux-loong64@0.25.4': 2820 + optional: true 2821 + 2822 + '@esbuild/linux-loong64@0.27.0': 2823 + optional: true 2824 + 2825 + '@esbuild/linux-mips64el@0.25.4': 2826 + optional: true 2827 + 2828 + '@esbuild/linux-mips64el@0.27.0': 2829 + optional: true 2830 + 2831 + '@esbuild/linux-ppc64@0.25.4': 2832 + optional: true 2833 + 2834 + '@esbuild/linux-ppc64@0.27.0': 2835 + optional: true 2836 + 2837 + '@esbuild/linux-riscv64@0.25.4': 2838 + optional: true 2839 + 2840 + '@esbuild/linux-riscv64@0.27.0': 2841 + optional: true 2842 + 2843 + '@esbuild/linux-s390x@0.25.4': 2844 + optional: true 2845 + 2846 + '@esbuild/linux-s390x@0.27.0': 2847 + optional: true 2848 + 2849 + '@esbuild/linux-x64@0.25.4': 2850 + optional: true 2851 + 2852 + '@esbuild/linux-x64@0.27.0': 2853 + optional: true 2854 + 2855 + '@esbuild/netbsd-arm64@0.25.4': 2856 + optional: true 2857 + 2858 + '@esbuild/netbsd-arm64@0.27.0': 2859 + optional: true 2860 + 2861 + '@esbuild/netbsd-x64@0.25.4': 2862 + optional: true 2863 + 2864 + '@esbuild/netbsd-x64@0.27.0': 2865 + optional: true 2866 + 2867 + '@esbuild/openbsd-arm64@0.25.4': 2868 + optional: true 2869 + 2870 + '@esbuild/openbsd-arm64@0.27.0': 2871 + optional: true 2872 + 2873 + '@esbuild/openbsd-x64@0.25.4': 2874 + optional: true 2875 + 2876 + '@esbuild/openbsd-x64@0.27.0': 2877 + optional: true 2878 + 2879 + '@esbuild/openharmony-arm64@0.27.0': 2880 + optional: true 2881 + 2882 + '@esbuild/sunos-x64@0.25.4': 2883 + optional: true 2884 + 2885 + '@esbuild/sunos-x64@0.27.0': 2886 + optional: true 2887 + 2888 + '@esbuild/win32-arm64@0.25.4': 2889 + optional: true 2890 + 2891 + '@esbuild/win32-arm64@0.27.0': 2892 + optional: true 2893 + 2894 + '@esbuild/win32-ia32@0.25.4': 2895 + optional: true 2896 + 2897 + '@esbuild/win32-ia32@0.27.0': 2898 + optional: true 2899 + 2900 + '@esbuild/win32-x64@0.25.4': 2901 + optional: true 2902 + 2903 + '@esbuild/win32-x64@0.27.0': 2904 + optional: true 2905 + 2906 + '@eslint-community/eslint-utils@4.7.0(eslint@9.26.0(jiti@2.4.2))': 2907 + dependencies: 2908 + eslint: 9.26.0(jiti@2.4.2) 2909 + eslint-visitor-keys: 3.4.3 2910 + 2911 + '@eslint-community/regexpp@4.12.1': {} 2912 + 2913 + '@eslint/compat@1.2.9(eslint@9.26.0(jiti@2.4.2))': 2914 + optionalDependencies: 2915 + eslint: 9.26.0(jiti@2.4.2) 2916 + 2917 + '@eslint/config-array@0.20.0': 2918 + dependencies: 2919 + '@eslint/object-schema': 2.1.6 2920 + debug: 4.4.0 2921 + minimatch: 3.1.2 2922 + transitivePeerDependencies: 2923 + - supports-color 2924 + 2925 + '@eslint/config-helpers@0.2.2': {} 2926 + 2927 + '@eslint/core@0.13.0': 2928 + dependencies: 2929 + '@types/json-schema': 7.0.15 2930 + 2931 + '@eslint/eslintrc@3.3.1': 2932 + dependencies: 2933 + ajv: 6.12.6 2934 + debug: 4.4.0 2935 + espree: 10.3.0 2936 + globals: 14.0.0 2937 + ignore: 5.3.2 2938 + import-fresh: 3.3.1 2939 + js-yaml: 4.1.0 2940 + minimatch: 3.1.2 2941 + strip-json-comments: 3.1.1 2942 + transitivePeerDependencies: 2943 + - supports-color 2944 + 2945 + '@eslint/js@9.26.0': {} 2946 + 2947 + '@eslint/object-schema@2.1.6': {} 2948 + 2949 + '@eslint/plugin-kit@0.2.8': 2950 + dependencies: 2951 + '@eslint/core': 0.13.0 2952 + levn: 0.4.1 2953 + 2954 + '@floating-ui/core@1.7.3': 2955 + dependencies: 2956 + '@floating-ui/utils': 0.2.10 2957 + 2958 + '@floating-ui/dom@1.7.4': 2959 + dependencies: 2960 + '@floating-ui/core': 1.7.3 2961 + '@floating-ui/utils': 0.2.10 2962 + 2963 + '@floating-ui/utils@0.2.10': {} 2964 + 2965 + '@foxui/core@0.4.7(svelte@5.45.8)(tailwindcss@4.1.5)': 2966 + dependencies: 2967 + '@number-flow/svelte': 0.3.9(svelte@5.45.8) 2968 + bits-ui: 1.8.0(svelte@5.45.8) 2969 + clsx: 2.1.1 2970 + mode-watcher: 1.1.0(svelte@5.45.8) 2971 + svelte: 5.45.8 2972 + svelte-sonner: 0.3.28(svelte@5.45.8) 2973 + tailwind-merge: 3.4.0 2974 + tailwind-variants: 1.0.0(tailwindcss@4.1.5) 2975 + tailwindcss: 4.1.5 2976 + 2977 + '@humanfs/core@0.19.1': {} 2978 + 2979 + '@humanfs/node@0.16.6': 2980 + dependencies: 2981 + '@humanfs/core': 0.19.1 2982 + '@humanwhocodes/retry': 0.3.1 2983 + 2984 + '@humanwhocodes/module-importer@1.0.1': {} 2985 + 2986 + '@humanwhocodes/retry@0.3.1': {} 2987 + 2988 + '@humanwhocodes/retry@0.4.3': {} 2989 + 2990 + '@img/sharp-darwin-arm64@0.33.5': 2991 + optionalDependencies: 2992 + '@img/sharp-libvips-darwin-arm64': 1.0.4 2993 + optional: true 2994 + 2995 + '@img/sharp-darwin-x64@0.33.5': 2996 + optionalDependencies: 2997 + '@img/sharp-libvips-darwin-x64': 1.0.4 2998 + optional: true 2999 + 3000 + '@img/sharp-libvips-darwin-arm64@1.0.4': 3001 + optional: true 3002 + 3003 + '@img/sharp-libvips-darwin-x64@1.0.4': 3004 + optional: true 3005 + 3006 + '@img/sharp-libvips-linux-arm64@1.0.4': 3007 + optional: true 3008 + 3009 + '@img/sharp-libvips-linux-arm@1.0.5': 3010 + optional: true 3011 + 3012 + '@img/sharp-libvips-linux-s390x@1.0.4': 3013 + optional: true 3014 + 3015 + '@img/sharp-libvips-linux-x64@1.0.4': 3016 + optional: true 3017 + 3018 + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': 3019 + optional: true 3020 + 3021 + '@img/sharp-libvips-linuxmusl-x64@1.0.4': 3022 + optional: true 3023 + 3024 + '@img/sharp-linux-arm64@0.33.5': 3025 + optionalDependencies: 3026 + '@img/sharp-libvips-linux-arm64': 1.0.4 3027 + optional: true 3028 + 3029 + '@img/sharp-linux-arm@0.33.5': 3030 + optionalDependencies: 3031 + '@img/sharp-libvips-linux-arm': 1.0.5 3032 + optional: true 3033 + 3034 + '@img/sharp-linux-s390x@0.33.5': 3035 + optionalDependencies: 3036 + '@img/sharp-libvips-linux-s390x': 1.0.4 3037 + optional: true 3038 + 3039 + '@img/sharp-linux-x64@0.33.5': 3040 + optionalDependencies: 3041 + '@img/sharp-libvips-linux-x64': 1.0.4 3042 + optional: true 3043 + 3044 + '@img/sharp-linuxmusl-arm64@0.33.5': 3045 + optionalDependencies: 3046 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 3047 + optional: true 3048 + 3049 + '@img/sharp-linuxmusl-x64@0.33.5': 3050 + optionalDependencies: 3051 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 3052 + optional: true 3053 + 3054 + '@img/sharp-wasm32@0.33.5': 3055 + dependencies: 3056 + '@emnapi/runtime': 1.7.1 3057 + optional: true 3058 + 3059 + '@img/sharp-win32-ia32@0.33.5': 3060 + optional: true 3061 + 3062 + '@img/sharp-win32-x64@0.33.5': 3063 + optional: true 3064 + 3065 + '@internationalized/date@3.8.0': 3066 + dependencies: 3067 + '@swc/helpers': 0.5.17 3068 + 3069 + '@jridgewell/gen-mapping@0.3.13': 3070 + dependencies: 3071 + '@jridgewell/sourcemap-codec': 1.5.0 3072 + '@jridgewell/trace-mapping': 0.3.31 3073 + 3074 + '@jridgewell/remapping@2.3.5': 3075 + dependencies: 3076 + '@jridgewell/gen-mapping': 0.3.13 3077 + '@jridgewell/trace-mapping': 0.3.31 3078 + 3079 + '@jridgewell/resolve-uri@3.1.2': {} 3080 + 3081 + '@jridgewell/sourcemap-codec@1.5.0': {} 3082 + 3083 + '@jridgewell/trace-mapping@0.3.25': 3084 + dependencies: 3085 + '@jridgewell/resolve-uri': 3.1.2 3086 + '@jridgewell/sourcemap-codec': 1.5.0 3087 + 3088 + '@jridgewell/trace-mapping@0.3.31': 3089 + dependencies: 3090 + '@jridgewell/resolve-uri': 3.1.2 3091 + '@jridgewell/sourcemap-codec': 1.5.0 3092 + 3093 + '@jridgewell/trace-mapping@0.3.9': 3094 + dependencies: 3095 + '@jridgewell/resolve-uri': 3.1.2 3096 + '@jridgewell/sourcemap-codec': 1.5.0 3097 + 3098 + '@mixmark-io/domino@2.2.0': {} 3099 + 3100 + '@modelcontextprotocol/sdk@1.11.0': 3101 + dependencies: 3102 + content-type: 1.0.5 3103 + cors: 2.8.5 3104 + cross-spawn: 7.0.6 3105 + eventsource: 3.0.6 3106 + express: 5.1.0 3107 + express-rate-limit: 7.5.0(express@5.1.0) 3108 + pkce-challenge: 5.0.0 3109 + raw-body: 3.0.0 3110 + zod: 3.24.4 3111 + zod-to-json-schema: 3.24.5(zod@3.24.4) 3112 + transitivePeerDependencies: 3113 + - supports-color 3114 + 3115 + '@nodelib/fs.scandir@2.1.5': 3116 + dependencies: 3117 + '@nodelib/fs.stat': 2.0.5 3118 + run-parallel: 1.2.0 3119 + 3120 + '@nodelib/fs.stat@2.0.5': {} 3121 + 3122 + '@nodelib/fs.walk@1.2.8': 3123 + dependencies: 3124 + '@nodelib/fs.scandir': 2.1.5 3125 + fastq: 1.19.1 3126 + 3127 + '@number-flow/svelte@0.3.9(svelte@5.45.8)': 3128 + dependencies: 3129 + esm-env: 1.2.2 3130 + number-flow: 0.5.8 3131 + svelte: 5.45.8 3132 + 3133 + '@polka/url@1.0.0-next.29': {} 3134 + 3135 + '@poppinss/colors@4.1.6': 3136 + dependencies: 3137 + kleur: 4.1.5 3138 + 3139 + '@poppinss/dumper@0.6.5': 3140 + dependencies: 3141 + '@poppinss/colors': 4.1.6 3142 + '@sindresorhus/is': 7.1.1 3143 + supports-color: 10.2.2 3144 + 3145 + '@poppinss/exception@1.2.3': {} 3146 + 3147 + '@remirror/core-constants@3.0.0': {} 3148 + 3149 + '@rollup/rollup-android-arm-eabi@4.40.2': 3150 + optional: true 3151 + 3152 + '@rollup/rollup-android-arm64@4.40.2': 3153 + optional: true 3154 + 3155 + '@rollup/rollup-darwin-arm64@4.40.2': 3156 + optional: true 3157 + 3158 + '@rollup/rollup-darwin-x64@4.40.2': 3159 + optional: true 3160 + 3161 + '@rollup/rollup-freebsd-arm64@4.40.2': 3162 + optional: true 3163 + 3164 + '@rollup/rollup-freebsd-x64@4.40.2': 3165 + optional: true 3166 + 3167 + '@rollup/rollup-linux-arm-gnueabihf@4.40.2': 3168 + optional: true 3169 + 3170 + '@rollup/rollup-linux-arm-musleabihf@4.40.2': 3171 + optional: true 3172 + 3173 + '@rollup/rollup-linux-arm64-gnu@4.40.2': 3174 + optional: true 3175 + 3176 + '@rollup/rollup-linux-arm64-musl@4.40.2': 3177 + optional: true 3178 + 3179 + '@rollup/rollup-linux-loongarch64-gnu@4.40.2': 3180 + optional: true 3181 + 3182 + '@rollup/rollup-linux-powerpc64le-gnu@4.40.2': 3183 + optional: true 3184 + 3185 + '@rollup/rollup-linux-riscv64-gnu@4.40.2': 3186 + optional: true 3187 + 3188 + '@rollup/rollup-linux-riscv64-musl@4.40.2': 3189 + optional: true 3190 + 3191 + '@rollup/rollup-linux-s390x-gnu@4.40.2': 3192 + optional: true 3193 + 3194 + '@rollup/rollup-linux-x64-gnu@4.40.2': 3195 + optional: true 3196 + 3197 + '@rollup/rollup-linux-x64-musl@4.40.2': 3198 + optional: true 3199 + 3200 + '@rollup/rollup-win32-arm64-msvc@4.40.2': 3201 + optional: true 3202 + 3203 + '@rollup/rollup-win32-ia32-msvc@4.40.2': 3204 + optional: true 3205 + 3206 + '@rollup/rollup-win32-x64-msvc@4.40.2': 3207 + optional: true 3208 + 3209 + '@sindresorhus/is@7.1.1': {} 3210 + 3211 + '@speed-highlight/core@1.2.12': {} 3212 + 3213 + '@sveltejs/acorn-typescript@1.0.5(acorn@8.14.1)': 3214 + dependencies: 3215 + acorn: 8.14.1 3216 + 3217 + '@sveltejs/adapter-auto@4.0.0(@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))': 3218 + dependencies: 3219 + '@sveltejs/kit': 2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)) 3220 + import-meta-resolve: 4.1.0 3221 + 3222 + '@sveltejs/adapter-cloudflare@7.2.4(@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(wrangler@4.54.0(@cloudflare/workers-types@4.20251225.0))': 3223 + dependencies: 3224 + '@cloudflare/workers-types': 4.20251225.0 3225 + '@sveltejs/kit': 2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)) 3226 + worktop: 0.8.0-next.18 3227 + wrangler: 4.54.0(@cloudflare/workers-types@4.20251225.0) 3228 + 3229 + '@sveltejs/adapter-static@3.0.8(@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))': 3230 + dependencies: 3231 + '@sveltejs/kit': 2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)) 3232 + 3233 + '@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2))': 3234 + dependencies: 3235 + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)) 3236 + '@types/cookie': 0.6.0 3237 + cookie: 0.6.0 3238 + devalue: 5.1.1 3239 + esm-env: 1.2.2 3240 + import-meta-resolve: 4.1.0 3241 + kleur: 4.1.5 3242 + magic-string: 0.30.17 3243 + mrmime: 2.0.1 3244 + sade: 1.8.1 3245 + set-cookie-parser: 2.7.1 3246 + sirv: 3.0.1 3247 + svelte: 5.45.8 3248 + vite: 6.3.5(jiti@2.4.2)(lightningcss@1.29.2) 3249 + 3250 + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2))': 3251 + dependencies: 3252 + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)) 3253 + debug: 4.4.0 3254 + svelte: 5.45.8 3255 + vite: 6.3.5(jiti@2.4.2)(lightningcss@1.29.2) 3256 + transitivePeerDependencies: 3257 + - supports-color 3258 + 3259 + '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2))': 3260 + dependencies: 3261 + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)) 3262 + debug: 4.4.0 3263 + deepmerge: 4.3.1 3264 + kleur: 4.1.5 3265 + magic-string: 0.30.17 3266 + svelte: 5.45.8 3267 + vite: 6.3.5(jiti@2.4.2)(lightningcss@1.29.2) 3268 + vitefu: 1.0.6(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)) 3269 + transitivePeerDependencies: 3270 + - supports-color 3271 + 3272 + '@swc/helpers@0.5.17': 3273 + dependencies: 3274 + tslib: 2.8.1 3275 + 3276 + '@tailwindcss/forms@0.5.10(tailwindcss@4.1.5)': 3277 + dependencies: 3278 + mini-svg-data-uri: 1.4.4 3279 + tailwindcss: 4.1.5 3280 + 3281 + '@tailwindcss/node@4.1.5': 3282 + dependencies: 3283 + enhanced-resolve: 5.18.1 3284 + jiti: 2.4.2 3285 + lightningcss: 1.29.2 3286 + tailwindcss: 4.1.5 3287 + 3288 + '@tailwindcss/oxide-android-arm64@4.1.5': 3289 + optional: true 3290 + 3291 + '@tailwindcss/oxide-darwin-arm64@4.1.5': 3292 + optional: true 3293 + 3294 + '@tailwindcss/oxide-darwin-x64@4.1.5': 3295 + optional: true 3296 + 3297 + '@tailwindcss/oxide-freebsd-x64@4.1.5': 3298 + optional: true 3299 + 3300 + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.5': 3301 + optional: true 3302 + 3303 + '@tailwindcss/oxide-linux-arm64-gnu@4.1.5': 3304 + optional: true 3305 + 3306 + '@tailwindcss/oxide-linux-arm64-musl@4.1.5': 3307 + optional: true 3308 + 3309 + '@tailwindcss/oxide-linux-x64-gnu@4.1.5': 3310 + optional: true 3311 + 3312 + '@tailwindcss/oxide-linux-x64-musl@4.1.5': 3313 + optional: true 3314 + 3315 + '@tailwindcss/oxide-wasm32-wasi@4.1.5': 3316 + optional: true 3317 + 3318 + '@tailwindcss/oxide-win32-arm64-msvc@4.1.5': 3319 + optional: true 3320 + 3321 + '@tailwindcss/oxide-win32-x64-msvc@4.1.5': 3322 + optional: true 3323 + 3324 + '@tailwindcss/oxide@4.1.5': 3325 + optionalDependencies: 3326 + '@tailwindcss/oxide-android-arm64': 4.1.5 3327 + '@tailwindcss/oxide-darwin-arm64': 4.1.5 3328 + '@tailwindcss/oxide-darwin-x64': 4.1.5 3329 + '@tailwindcss/oxide-freebsd-x64': 4.1.5 3330 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.5 3331 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.5 3332 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.5 3333 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.5 3334 + '@tailwindcss/oxide-linux-x64-musl': 4.1.5 3335 + '@tailwindcss/oxide-wasm32-wasi': 4.1.5 3336 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.5 3337 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.5 3338 + 3339 + '@tailwindcss/typography@0.5.16(tailwindcss@4.1.5)': 3340 + dependencies: 3341 + lodash.castarray: 4.4.0 3342 + lodash.isplainobject: 4.0.6 3343 + lodash.merge: 4.6.2 3344 + postcss-selector-parser: 6.0.10 3345 + tailwindcss: 4.1.5 3346 + 3347 + '@tailwindcss/vite@4.1.5(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2))': 3348 + dependencies: 3349 + '@tailwindcss/node': 4.1.5 3350 + '@tailwindcss/oxide': 4.1.5 3351 + tailwindcss: 4.1.5 3352 + vite: 6.3.5(jiti@2.4.2)(lightningcss@1.29.2) 3353 + 3354 + '@tiptap/core@2.12.0(@tiptap/pm@2.12.0)': 3355 + dependencies: 3356 + '@tiptap/pm': 2.12.0 3357 + 3358 + '@tiptap/extension-blockquote@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))': 3359 + dependencies: 3360 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3361 + 3362 + '@tiptap/extension-bold@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))': 3363 + dependencies: 3364 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3365 + 3366 + '@tiptap/extension-bullet-list@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))': 3367 + dependencies: 3368 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3369 + 3370 + '@tiptap/extension-code-block@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)': 3371 + dependencies: 3372 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3373 + '@tiptap/pm': 2.12.0 3374 + 3375 + '@tiptap/extension-code@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))': 3376 + dependencies: 3377 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3378 + 3379 + '@tiptap/extension-document@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))': 3380 + dependencies: 3381 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3382 + 3383 + '@tiptap/extension-dropcursor@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)': 3384 + dependencies: 3385 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3386 + '@tiptap/pm': 2.12.0 3387 + 3388 + '@tiptap/extension-gapcursor@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)': 3389 + dependencies: 3390 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3391 + '@tiptap/pm': 2.12.0 3392 + 3393 + '@tiptap/extension-hard-break@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))': 3394 + dependencies: 3395 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3396 + 3397 + '@tiptap/extension-heading@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))': 3398 + dependencies: 3399 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3400 + 3401 + '@tiptap/extension-history@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)': 3402 + dependencies: 3403 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3404 + '@tiptap/pm': 2.12.0 3405 + 3406 + '@tiptap/extension-horizontal-rule@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)': 3407 + dependencies: 3408 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3409 + '@tiptap/pm': 2.12.0 3410 + 3411 + '@tiptap/extension-image@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))': 3412 + dependencies: 3413 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3414 + 3415 + '@tiptap/extension-italic@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))': 3416 + dependencies: 3417 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3418 + 3419 + '@tiptap/extension-link@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)': 3420 + dependencies: 3421 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3422 + '@tiptap/pm': 2.12.0 3423 + linkifyjs: 4.3.1 3424 + 3425 + '@tiptap/extension-list-item@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))': 3426 + dependencies: 3427 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3428 + 3429 + '@tiptap/extension-ordered-list@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))': 3430 + dependencies: 3431 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3432 + 3433 + '@tiptap/extension-paragraph@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))': 3434 + dependencies: 3435 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3436 + 3437 + '@tiptap/extension-placeholder@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)': 3438 + dependencies: 3439 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3440 + '@tiptap/pm': 2.12.0 3441 + 3442 + '@tiptap/extension-strike@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))': 3443 + dependencies: 3444 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3445 + 3446 + '@tiptap/extension-text-style@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))': 3447 + dependencies: 3448 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3449 + 3450 + '@tiptap/extension-text@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))': 3451 + dependencies: 3452 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3453 + 3454 + '@tiptap/pm@2.12.0': 3455 + dependencies: 3456 + prosemirror-changeset: 2.3.0 3457 + prosemirror-collab: 1.3.1 3458 + prosemirror-commands: 1.7.1 3459 + prosemirror-dropcursor: 1.8.2 3460 + prosemirror-gapcursor: 1.3.2 3461 + prosemirror-history: 1.4.1 3462 + prosemirror-inputrules: 1.5.0 3463 + prosemirror-keymap: 1.2.3 3464 + prosemirror-markdown: 1.13.2 3465 + prosemirror-menu: 1.2.5 3466 + prosemirror-model: 1.25.1 3467 + prosemirror-schema-basic: 1.2.4 3468 + prosemirror-schema-list: 1.5.1 3469 + prosemirror-state: 1.4.3 3470 + prosemirror-tables: 1.7.1 3471 + prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.39.2) 3472 + prosemirror-transform: 1.10.4 3473 + prosemirror-view: 1.39.2 3474 + 3475 + '@tiptap/starter-kit@2.12.0': 3476 + dependencies: 3477 + '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) 3478 + '@tiptap/extension-blockquote': 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)) 3479 + '@tiptap/extension-bold': 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)) 3480 + '@tiptap/extension-bullet-list': 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)) 3481 + '@tiptap/extension-code': 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)) 3482 + '@tiptap/extension-code-block': 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0) 3483 + '@tiptap/extension-document': 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)) 3484 + '@tiptap/extension-dropcursor': 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0) 3485 + '@tiptap/extension-gapcursor': 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0) 3486 + '@tiptap/extension-hard-break': 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)) 3487 + '@tiptap/extension-heading': 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)) 3488 + '@tiptap/extension-history': 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0) 3489 + '@tiptap/extension-horizontal-rule': 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0) 3490 + '@tiptap/extension-italic': 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)) 3491 + '@tiptap/extension-list-item': 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)) 3492 + '@tiptap/extension-ordered-list': 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)) 3493 + '@tiptap/extension-paragraph': 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)) 3494 + '@tiptap/extension-strike': 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)) 3495 + '@tiptap/extension-text': 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)) 3496 + '@tiptap/extension-text-style': 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)) 3497 + '@tiptap/pm': 2.12.0 3498 + 3499 + '@types/cookie@0.6.0': {} 3500 + 3501 + '@types/estree@1.0.7': {} 3502 + 3503 + '@types/json-schema@7.0.15': {} 3504 + 3505 + '@types/linkify-it@5.0.0': {} 3506 + 3507 + '@types/markdown-it@14.1.2': 3508 + dependencies: 3509 + '@types/linkify-it': 5.0.0 3510 + '@types/mdurl': 2.0.0 3511 + 3512 + '@types/mdurl@2.0.0': {} 3513 + 3514 + '@types/turndown@5.0.5': {} 3515 + 3516 + '@typescript-eslint/eslint-plugin@8.32.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': 3517 + dependencies: 3518 + '@eslint-community/regexpp': 4.12.1 3519 + '@typescript-eslint/parser': 8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) 3520 + '@typescript-eslint/scope-manager': 8.32.0 3521 + '@typescript-eslint/type-utils': 8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) 3522 + '@typescript-eslint/utils': 8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) 3523 + '@typescript-eslint/visitor-keys': 8.32.0 3524 + eslint: 9.26.0(jiti@2.4.2) 3525 + graphemer: 1.4.0 3526 + ignore: 5.3.2 3527 + natural-compare: 1.4.0 3528 + ts-api-utils: 2.1.0(typescript@5.8.3) 3529 + typescript: 5.8.3 3530 + transitivePeerDependencies: 3531 + - supports-color 3532 + 3533 + '@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': 3534 + dependencies: 3535 + '@typescript-eslint/scope-manager': 8.32.0 3536 + '@typescript-eslint/types': 8.32.0 3537 + '@typescript-eslint/typescript-estree': 8.32.0(typescript@5.8.3) 3538 + '@typescript-eslint/visitor-keys': 8.32.0 3539 + debug: 4.4.0 3540 + eslint: 9.26.0(jiti@2.4.2) 3541 + typescript: 5.8.3 3542 + transitivePeerDependencies: 3543 + - supports-color 3544 + 3545 + '@typescript-eslint/scope-manager@8.32.0': 3546 + dependencies: 3547 + '@typescript-eslint/types': 8.32.0 3548 + '@typescript-eslint/visitor-keys': 8.32.0 3549 + 3550 + '@typescript-eslint/type-utils@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': 3551 + dependencies: 3552 + '@typescript-eslint/typescript-estree': 8.32.0(typescript@5.8.3) 3553 + '@typescript-eslint/utils': 8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) 3554 + debug: 4.4.0 3555 + eslint: 9.26.0(jiti@2.4.2) 3556 + ts-api-utils: 2.1.0(typescript@5.8.3) 3557 + typescript: 5.8.3 3558 + transitivePeerDependencies: 3559 + - supports-color 3560 + 3561 + '@typescript-eslint/types@8.32.0': {} 3562 + 3563 + '@typescript-eslint/typescript-estree@8.32.0(typescript@5.8.3)': 3564 + dependencies: 3565 + '@typescript-eslint/types': 8.32.0 3566 + '@typescript-eslint/visitor-keys': 8.32.0 3567 + debug: 4.4.0 3568 + fast-glob: 3.3.3 3569 + is-glob: 4.0.3 3570 + minimatch: 9.0.5 3571 + semver: 7.7.1 3572 + ts-api-utils: 2.1.0(typescript@5.8.3) 3573 + typescript: 5.8.3 3574 + transitivePeerDependencies: 3575 + - supports-color 3576 + 3577 + '@typescript-eslint/utils@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': 3578 + dependencies: 3579 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@2.4.2)) 3580 + '@typescript-eslint/scope-manager': 8.32.0 3581 + '@typescript-eslint/types': 8.32.0 3582 + '@typescript-eslint/typescript-estree': 8.32.0(typescript@5.8.3) 3583 + eslint: 9.26.0(jiti@2.4.2) 3584 + typescript: 5.8.3 3585 + transitivePeerDependencies: 3586 + - supports-color 3587 + 3588 + '@typescript-eslint/visitor-keys@8.32.0': 3589 + dependencies: 3590 + '@typescript-eslint/types': 8.32.0 3591 + eslint-visitor-keys: 4.2.0 3592 + 3593 + accepts@2.0.0: 3594 + dependencies: 3595 + mime-types: 3.0.1 3596 + negotiator: 1.0.0 3597 + 3598 + acorn-jsx@5.3.2(acorn@8.14.1): 3599 + dependencies: 3600 + acorn: 8.14.1 3601 + 3602 + acorn-walk@8.3.2: {} 3603 + 3604 + acorn@8.14.0: {} 3605 + 3606 + acorn@8.14.1: {} 3607 + 3608 + ajv@6.12.6: 3609 + dependencies: 3610 + fast-deep-equal: 3.1.3 3611 + fast-json-stable-stringify: 2.1.0 3612 + json-schema-traverse: 0.4.1 3613 + uri-js: 4.4.1 3614 + 3615 + ansi-styles@4.3.0: 3616 + dependencies: 3617 + color-convert: 2.0.1 3618 + 3619 + argparse@2.0.1: {} 3620 + 3621 + aria-query@5.3.2: {} 3622 + 3623 + await-lock@2.2.2: {} 3624 + 3625 + axobject-query@4.1.0: {} 3626 + 3627 + balanced-match@1.0.2: {} 3628 + 3629 + bits-ui@1.8.0(svelte@5.45.8): 3630 + dependencies: 3631 + '@floating-ui/core': 1.7.3 3632 + '@floating-ui/dom': 1.7.4 3633 + '@internationalized/date': 3.8.0 3634 + css.escape: 1.5.1 3635 + esm-env: 1.2.2 3636 + runed: 0.23.4(svelte@5.45.8) 3637 + svelte: 5.45.8 3638 + svelte-toolbelt: 0.7.1(svelte@5.45.8) 3639 + tabbable: 6.2.0 3640 + 3641 + bits-ui@2.14.4(@internationalized/date@3.8.0)(@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8): 3642 + dependencies: 3643 + '@floating-ui/core': 1.7.3 3644 + '@floating-ui/dom': 1.7.4 3645 + '@internationalized/date': 3.8.0 3646 + esm-env: 1.2.2 3647 + runed: 0.35.1(@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8) 3648 + svelte: 5.45.8 3649 + svelte-toolbelt: 0.10.6(@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8) 3650 + tabbable: 6.2.0 3651 + transitivePeerDependencies: 3652 + - '@sveltejs/kit' 3653 + 3654 + blake3-wasm@2.1.5: {} 3655 + 3656 + body-parser@2.2.0: 3657 + dependencies: 3658 + bytes: 3.1.2 3659 + content-type: 1.0.5 3660 + debug: 4.4.0 3661 + http-errors: 2.0.0 3662 + iconv-lite: 0.6.3 3663 + on-finished: 2.4.1 3664 + qs: 6.14.0 3665 + raw-body: 3.0.0 3666 + type-is: 2.0.1 3667 + transitivePeerDependencies: 3668 + - supports-color 3669 + 3670 + brace-expansion@1.1.11: 3671 + dependencies: 3672 + balanced-match: 1.0.2 3673 + concat-map: 0.0.1 3674 + 3675 + brace-expansion@2.0.1: 3676 + dependencies: 3677 + balanced-match: 1.0.2 3678 + 3679 + braces@3.0.3: 3680 + dependencies: 3681 + fill-range: 7.1.1 3682 + 3683 + bytes@3.1.2: {} 3684 + 3685 + call-bind-apply-helpers@1.0.2: 3686 + dependencies: 3687 + es-errors: 1.3.0 3688 + function-bind: 1.1.2 3689 + 3690 + call-bound@1.0.4: 3691 + dependencies: 3692 + call-bind-apply-helpers: 1.0.2 3693 + get-intrinsic: 1.3.0 3694 + 3695 + callsites@3.1.0: {} 3696 + 3697 + chalk@4.1.2: 3698 + dependencies: 3699 + ansi-styles: 4.3.0 3700 + supports-color: 7.2.0 3701 + 3702 + chokidar@4.0.3: 3703 + dependencies: 3704 + readdirp: 4.1.2 3705 + 3706 + clsx@2.1.1: {} 3707 + 3708 + color-convert@2.0.1: 3709 + dependencies: 3710 + color-name: 1.1.4 3711 + 3712 + color-name@1.1.4: {} 3713 + 3714 + color-string@1.9.1: 3715 + dependencies: 3716 + color-name: 1.1.4 3717 + simple-swizzle: 0.2.4 3718 + 3719 + color@4.2.3: 3720 + dependencies: 3721 + color-convert: 2.0.1 3722 + color-string: 1.9.1 3723 + 3724 + concat-map@0.0.1: {} 3725 + 3726 + content-disposition@1.0.0: 3727 + dependencies: 3728 + safe-buffer: 5.2.1 3729 + 3730 + content-type@1.0.5: {} 3731 + 3732 + cookie-signature@1.2.2: {} 3733 + 3734 + cookie@0.6.0: {} 3735 + 3736 + cookie@0.7.2: {} 3737 + 3738 + cookie@1.1.1: {} 3739 + 3740 + cors@2.8.5: 3741 + dependencies: 3742 + object-assign: 4.1.1 3743 + vary: 1.1.2 3744 + 3745 + crelt@1.0.6: {} 3746 + 3747 + cross-spawn@7.0.6: 3748 + dependencies: 3749 + path-key: 3.1.1 3750 + shebang-command: 2.0.0 3751 + which: 2.0.2 3752 + 3753 + css.escape@1.5.1: {} 3754 + 3755 + cssesc@3.0.0: {} 3756 + 3757 + debug@4.4.0: 3758 + dependencies: 3759 + ms: 2.1.3 3760 + 3761 + deep-is@0.1.4: {} 3762 + 3763 + deepmerge@4.3.1: {} 3764 + 3765 + depd@2.0.0: {} 3766 + 3767 + dequal@2.0.3: {} 3768 + 3769 + detect-libc@2.0.4: {} 3770 + 3771 + devalue@5.1.1: {} 3772 + 3773 + devalue@5.6.0: {} 3774 + 3775 + dunder-proto@1.0.1: 3776 + dependencies: 3777 + call-bind-apply-helpers: 1.0.2 3778 + es-errors: 1.3.0 3779 + gopd: 1.2.0 3780 + 3781 + ee-first@1.1.1: {} 3782 + 3783 + encodeurl@2.0.0: {} 3784 + 3785 + enhanced-resolve@5.18.1: 3786 + dependencies: 3787 + graceful-fs: 4.2.11 3788 + tapable: 2.2.1 3789 + 3790 + entities@4.5.0: {} 3791 + 3792 + error-stack-parser-es@1.0.5: {} 3793 + 3794 + es-define-property@1.0.1: {} 3795 + 3796 + es-errors@1.3.0: {} 3797 + 3798 + es-object-atoms@1.1.1: 3799 + dependencies: 3800 + es-errors: 1.3.0 3801 + 3802 + esbuild@0.25.4: 3803 + optionalDependencies: 3804 + '@esbuild/aix-ppc64': 0.25.4 3805 + '@esbuild/android-arm': 0.25.4 3806 + '@esbuild/android-arm64': 0.25.4 3807 + '@esbuild/android-x64': 0.25.4 3808 + '@esbuild/darwin-arm64': 0.25.4 3809 + '@esbuild/darwin-x64': 0.25.4 3810 + '@esbuild/freebsd-arm64': 0.25.4 3811 + '@esbuild/freebsd-x64': 0.25.4 3812 + '@esbuild/linux-arm': 0.25.4 3813 + '@esbuild/linux-arm64': 0.25.4 3814 + '@esbuild/linux-ia32': 0.25.4 3815 + '@esbuild/linux-loong64': 0.25.4 3816 + '@esbuild/linux-mips64el': 0.25.4 3817 + '@esbuild/linux-ppc64': 0.25.4 3818 + '@esbuild/linux-riscv64': 0.25.4 3819 + '@esbuild/linux-s390x': 0.25.4 3820 + '@esbuild/linux-x64': 0.25.4 3821 + '@esbuild/netbsd-arm64': 0.25.4 3822 + '@esbuild/netbsd-x64': 0.25.4 3823 + '@esbuild/openbsd-arm64': 0.25.4 3824 + '@esbuild/openbsd-x64': 0.25.4 3825 + '@esbuild/sunos-x64': 0.25.4 3826 + '@esbuild/win32-arm64': 0.25.4 3827 + '@esbuild/win32-ia32': 0.25.4 3828 + '@esbuild/win32-x64': 0.25.4 3829 + 3830 + esbuild@0.27.0: 3831 + optionalDependencies: 3832 + '@esbuild/aix-ppc64': 0.27.0 3833 + '@esbuild/android-arm': 0.27.0 3834 + '@esbuild/android-arm64': 0.27.0 3835 + '@esbuild/android-x64': 0.27.0 3836 + '@esbuild/darwin-arm64': 0.27.0 3837 + '@esbuild/darwin-x64': 0.27.0 3838 + '@esbuild/freebsd-arm64': 0.27.0 3839 + '@esbuild/freebsd-x64': 0.27.0 3840 + '@esbuild/linux-arm': 0.27.0 3841 + '@esbuild/linux-arm64': 0.27.0 3842 + '@esbuild/linux-ia32': 0.27.0 3843 + '@esbuild/linux-loong64': 0.27.0 3844 + '@esbuild/linux-mips64el': 0.27.0 3845 + '@esbuild/linux-ppc64': 0.27.0 3846 + '@esbuild/linux-riscv64': 0.27.0 3847 + '@esbuild/linux-s390x': 0.27.0 3848 + '@esbuild/linux-x64': 0.27.0 3849 + '@esbuild/netbsd-arm64': 0.27.0 3850 + '@esbuild/netbsd-x64': 0.27.0 3851 + '@esbuild/openbsd-arm64': 0.27.0 3852 + '@esbuild/openbsd-x64': 0.27.0 3853 + '@esbuild/openharmony-arm64': 0.27.0 3854 + '@esbuild/sunos-x64': 0.27.0 3855 + '@esbuild/win32-arm64': 0.27.0 3856 + '@esbuild/win32-ia32': 0.27.0 3857 + '@esbuild/win32-x64': 0.27.0 3858 + 3859 + escape-html@1.0.3: {} 3860 + 3861 + escape-string-regexp@4.0.0: {} 3862 + 3863 + eslint-compat-utils@0.5.1(eslint@9.26.0(jiti@2.4.2)): 3864 + dependencies: 3865 + eslint: 9.26.0(jiti@2.4.2) 3866 + semver: 7.7.1 3867 + 3868 + eslint-config-prettier@10.1.3(eslint@9.26.0(jiti@2.4.2)): 3869 + dependencies: 3870 + eslint: 9.26.0(jiti@2.4.2) 3871 + 3872 + eslint-plugin-svelte@2.46.1(eslint@9.26.0(jiti@2.4.2))(svelte@5.45.8): 3873 + dependencies: 3874 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@2.4.2)) 3875 + '@jridgewell/sourcemap-codec': 1.5.0 3876 + eslint: 9.26.0(jiti@2.4.2) 3877 + eslint-compat-utils: 0.5.1(eslint@9.26.0(jiti@2.4.2)) 3878 + esutils: 2.0.3 3879 + known-css-properties: 0.35.0 3880 + postcss: 8.5.3 3881 + postcss-load-config: 3.1.4(postcss@8.5.3) 3882 + postcss-safe-parser: 6.0.0(postcss@8.5.3) 3883 + postcss-selector-parser: 6.1.2 3884 + semver: 7.7.1 3885 + svelte-eslint-parser: 0.43.0(svelte@5.45.8) 3886 + optionalDependencies: 3887 + svelte: 5.45.8 3888 + transitivePeerDependencies: 3889 + - ts-node 3890 + 3891 + eslint-scope@7.2.2: 3892 + dependencies: 3893 + esrecurse: 4.3.0 3894 + estraverse: 5.3.0 3895 + 3896 + eslint-scope@8.3.0: 3897 + dependencies: 3898 + esrecurse: 4.3.0 3899 + estraverse: 5.3.0 3900 + 3901 + eslint-visitor-keys@3.4.3: {} 3902 + 3903 + eslint-visitor-keys@4.2.0: {} 3904 + 3905 + eslint@9.26.0(jiti@2.4.2): 3906 + dependencies: 3907 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@2.4.2)) 3908 + '@eslint-community/regexpp': 4.12.1 3909 + '@eslint/config-array': 0.20.0 3910 + '@eslint/config-helpers': 0.2.2 3911 + '@eslint/core': 0.13.0 3912 + '@eslint/eslintrc': 3.3.1 3913 + '@eslint/js': 9.26.0 3914 + '@eslint/plugin-kit': 0.2.8 3915 + '@humanfs/node': 0.16.6 3916 + '@humanwhocodes/module-importer': 1.0.1 3917 + '@humanwhocodes/retry': 0.4.3 3918 + '@modelcontextprotocol/sdk': 1.11.0 3919 + '@types/estree': 1.0.7 3920 + '@types/json-schema': 7.0.15 3921 + ajv: 6.12.6 3922 + chalk: 4.1.2 3923 + cross-spawn: 7.0.6 3924 + debug: 4.4.0 3925 + escape-string-regexp: 4.0.0 3926 + eslint-scope: 8.3.0 3927 + eslint-visitor-keys: 4.2.0 3928 + espree: 10.3.0 3929 + esquery: 1.6.0 3930 + esutils: 2.0.3 3931 + fast-deep-equal: 3.1.3 3932 + file-entry-cache: 8.0.0 3933 + find-up: 5.0.0 3934 + glob-parent: 6.0.2 3935 + ignore: 5.3.2 3936 + imurmurhash: 0.1.4 3937 + is-glob: 4.0.3 3938 + json-stable-stringify-without-jsonify: 1.0.1 3939 + lodash.merge: 4.6.2 3940 + minimatch: 3.1.2 3941 + natural-compare: 1.4.0 3942 + optionator: 0.9.4 3943 + zod: 3.24.4 3944 + optionalDependencies: 3945 + jiti: 2.4.2 3946 + transitivePeerDependencies: 3947 + - supports-color 3948 + 3949 + esm-env@1.2.2: {} 3950 + 3951 + espree@10.3.0: 3952 + dependencies: 3953 + acorn: 8.14.1 3954 + acorn-jsx: 5.3.2(acorn@8.14.1) 3955 + eslint-visitor-keys: 4.2.0 3956 + 3957 + espree@9.6.1: 3958 + dependencies: 3959 + acorn: 8.14.1 3960 + acorn-jsx: 5.3.2(acorn@8.14.1) 3961 + eslint-visitor-keys: 3.4.3 3962 + 3963 + esquery@1.6.0: 3964 + dependencies: 3965 + estraverse: 5.3.0 3966 + 3967 + esrap@2.2.1: 3968 + dependencies: 3969 + '@jridgewell/sourcemap-codec': 1.5.0 3970 + 3971 + esrecurse@4.3.0: 3972 + dependencies: 3973 + estraverse: 5.3.0 3974 + 3975 + estraverse@5.3.0: {} 3976 + 3977 + esutils@2.0.3: {} 3978 + 3979 + etag@1.8.1: {} 3980 + 3981 + eventsource-parser@3.0.1: {} 3982 + 3983 + eventsource@3.0.6: 3984 + dependencies: 3985 + eventsource-parser: 3.0.1 3986 + 3987 + exit-hook@2.2.1: {} 3988 + 3989 + express-rate-limit@7.5.0(express@5.1.0): 3990 + dependencies: 3991 + express: 5.1.0 3992 + 3993 + express@5.1.0: 3994 + dependencies: 3995 + accepts: 2.0.0 3996 + body-parser: 2.2.0 3997 + content-disposition: 1.0.0 3998 + content-type: 1.0.5 3999 + cookie: 0.7.2 4000 + cookie-signature: 1.2.2 4001 + debug: 4.4.0 4002 + encodeurl: 2.0.0 4003 + escape-html: 1.0.3 4004 + etag: 1.8.1 4005 + finalhandler: 2.1.0 4006 + fresh: 2.0.0 4007 + http-errors: 2.0.0 4008 + merge-descriptors: 2.0.0 4009 + mime-types: 3.0.1 4010 + on-finished: 2.4.1 4011 + once: 1.4.0 4012 + parseurl: 1.3.3 4013 + proxy-addr: 2.0.7 4014 + qs: 6.14.0 4015 + range-parser: 1.2.1 4016 + router: 2.2.0 4017 + send: 1.2.0 4018 + serve-static: 2.2.0 4019 + statuses: 2.0.1 4020 + type-is: 2.0.1 4021 + vary: 1.1.2 4022 + transitivePeerDependencies: 4023 + - supports-color 4024 + 4025 + fast-deep-equal@3.1.3: {} 4026 + 4027 + fast-glob@3.3.3: 4028 + dependencies: 4029 + '@nodelib/fs.stat': 2.0.5 4030 + '@nodelib/fs.walk': 1.2.8 4031 + glob-parent: 5.1.2 4032 + merge2: 1.4.1 4033 + micromatch: 4.0.8 4034 + 4035 + fast-json-stable-stringify@2.1.0: {} 4036 + 4037 + fast-levenshtein@2.0.6: {} 4038 + 4039 + fastq@1.19.1: 4040 + dependencies: 4041 + reusify: 1.1.0 4042 + 4043 + fdir@6.4.4(picomatch@4.0.2): 4044 + optionalDependencies: 4045 + picomatch: 4.0.2 4046 + 4047 + file-entry-cache@8.0.0: 4048 + dependencies: 4049 + flat-cache: 4.0.1 4050 + 4051 + fill-range@7.1.1: 4052 + dependencies: 4053 + to-regex-range: 5.0.1 4054 + 4055 + finalhandler@2.1.0: 4056 + dependencies: 4057 + debug: 4.4.0 4058 + encodeurl: 2.0.0 4059 + escape-html: 1.0.3 4060 + on-finished: 2.4.1 4061 + parseurl: 1.3.3 4062 + statuses: 2.0.1 4063 + transitivePeerDependencies: 4064 + - supports-color 4065 + 4066 + find-up@5.0.0: 4067 + dependencies: 4068 + locate-path: 6.0.0 4069 + path-exists: 4.0.0 4070 + 4071 + flat-cache@4.0.1: 4072 + dependencies: 4073 + flatted: 3.3.3 4074 + keyv: 4.5.4 4075 + 4076 + flatted@3.3.3: {} 4077 + 4078 + forwarded@0.2.0: {} 4079 + 4080 + fresh@2.0.0: {} 4081 + 4082 + fsevents@2.3.3: 4083 + optional: true 4084 + 4085 + function-bind@1.1.2: {} 4086 + 4087 + get-intrinsic@1.3.0: 4088 + dependencies: 4089 + call-bind-apply-helpers: 1.0.2 4090 + es-define-property: 1.0.1 4091 + es-errors: 1.3.0 4092 + es-object-atoms: 1.1.1 4093 + function-bind: 1.1.2 4094 + get-proto: 1.0.1 4095 + gopd: 1.2.0 4096 + has-symbols: 1.1.0 4097 + hasown: 2.0.2 4098 + math-intrinsics: 1.1.0 4099 + 4100 + get-proto@1.0.1: 4101 + dependencies: 4102 + dunder-proto: 1.0.1 4103 + es-object-atoms: 1.1.1 4104 + 4105 + glob-parent@5.1.2: 4106 + dependencies: 4107 + is-glob: 4.0.3 4108 + 4109 + glob-parent@6.0.2: 4110 + dependencies: 4111 + is-glob: 4.0.3 4112 + 4113 + glob-to-regexp@0.4.1: {} 4114 + 4115 + globals@14.0.0: {} 4116 + 4117 + globals@15.15.0: {} 4118 + 4119 + gopd@1.2.0: {} 4120 + 4121 + graceful-fs@4.2.11: {} 4122 + 4123 + graphemer@1.4.0: {} 4124 + 4125 + has-flag@4.0.0: {} 4126 + 4127 + has-symbols@1.1.0: {} 4128 + 4129 + hasown@2.0.2: 4130 + dependencies: 4131 + function-bind: 1.1.2 4132 + 4133 + http-errors@2.0.0: 4134 + dependencies: 4135 + depd: 2.0.0 4136 + inherits: 2.0.4 4137 + setprototypeof: 1.2.0 4138 + statuses: 2.0.1 4139 + toidentifier: 1.0.1 4140 + 4141 + iconv-lite@0.6.3: 4142 + dependencies: 4143 + safer-buffer: 2.1.2 4144 + 4145 + ignore@5.3.2: {} 4146 + 4147 + import-fresh@3.3.1: 4148 + dependencies: 4149 + parent-module: 1.0.1 4150 + resolve-from: 4.0.0 4151 + 4152 + import-meta-resolve@4.1.0: {} 4153 + 4154 + imurmurhash@0.1.4: {} 4155 + 4156 + inherits@2.0.4: {} 4157 + 4158 + inline-style-parser@0.2.4: {} 4159 + 4160 + ipaddr.js@1.9.1: {} 4161 + 4162 + is-arrayish@0.3.4: {} 4163 + 4164 + is-extglob@2.1.1: {} 4165 + 4166 + is-glob@4.0.3: 4167 + dependencies: 4168 + is-extglob: 2.1.1 4169 + 4170 + is-number@7.0.0: {} 4171 + 4172 + is-promise@4.0.0: {} 4173 + 4174 + is-reference@3.0.3: 4175 + dependencies: 4176 + '@types/estree': 1.0.7 4177 + 4178 + isexe@2.0.0: {} 4179 + 4180 + iso-datestring-validator@2.2.2: {} 4181 + 4182 + jiti@2.4.2: {} 4183 + 4184 + js-yaml@4.1.0: 4185 + dependencies: 4186 + argparse: 2.0.1 4187 + 4188 + json-buffer@3.0.1: {} 4189 + 4190 + json-schema-traverse@0.4.1: {} 4191 + 4192 + json-stable-stringify-without-jsonify@1.0.1: {} 4193 + 4194 + keyv@4.5.4: 4195 + dependencies: 4196 + json-buffer: 3.0.1 4197 + 4198 + kleur@4.1.5: {} 4199 + 4200 + known-css-properties@0.35.0: {} 4201 + 4202 + levn@0.4.1: 4203 + dependencies: 4204 + prelude-ls: 1.2.1 4205 + type-check: 0.4.0 4206 + 4207 + lightningcss-darwin-arm64@1.29.2: 4208 + optional: true 4209 + 4210 + lightningcss-darwin-x64@1.29.2: 4211 + optional: true 4212 + 4213 + lightningcss-freebsd-x64@1.29.2: 4214 + optional: true 4215 + 4216 + lightningcss-linux-arm-gnueabihf@1.29.2: 4217 + optional: true 4218 + 4219 + lightningcss-linux-arm64-gnu@1.29.2: 4220 + optional: true 4221 + 4222 + lightningcss-linux-arm64-musl@1.29.2: 4223 + optional: true 4224 + 4225 + lightningcss-linux-x64-gnu@1.29.2: 4226 + optional: true 4227 + 4228 + lightningcss-linux-x64-musl@1.29.2: 4229 + optional: true 4230 + 4231 + lightningcss-win32-arm64-msvc@1.29.2: 4232 + optional: true 4233 + 4234 + lightningcss-win32-x64-msvc@1.29.2: 4235 + optional: true 4236 + 4237 + lightningcss@1.29.2: 4238 + dependencies: 4239 + detect-libc: 2.0.4 4240 + optionalDependencies: 4241 + lightningcss-darwin-arm64: 1.29.2 4242 + lightningcss-darwin-x64: 1.29.2 4243 + lightningcss-freebsd-x64: 1.29.2 4244 + lightningcss-linux-arm-gnueabihf: 1.29.2 4245 + lightningcss-linux-arm64-gnu: 1.29.2 4246 + lightningcss-linux-arm64-musl: 1.29.2 4247 + lightningcss-linux-x64-gnu: 1.29.2 4248 + lightningcss-linux-x64-musl: 1.29.2 4249 + lightningcss-win32-arm64-msvc: 1.29.2 4250 + lightningcss-win32-x64-msvc: 1.29.2 4251 + 4252 + lilconfig@2.1.0: {} 4253 + 4254 + linkify-it@5.0.0: 4255 + dependencies: 4256 + uc.micro: 2.1.0 4257 + 4258 + linkifyjs@4.3.1: {} 4259 + 4260 + locate-character@3.0.0: {} 4261 + 4262 + locate-path@6.0.0: 4263 + dependencies: 4264 + p-locate: 5.0.0 4265 + 4266 + lodash.castarray@4.4.0: {} 4267 + 4268 + lodash.isplainobject@4.0.6: {} 4269 + 4270 + lodash.merge@4.6.2: {} 4271 + 4272 + lz-string@1.5.0: {} 4273 + 4274 + magic-string@0.30.17: 4275 + dependencies: 4276 + '@jridgewell/sourcemap-codec': 1.5.0 4277 + 4278 + markdown-it@14.1.0: 4279 + dependencies: 4280 + argparse: 2.0.1 4281 + entities: 4.5.0 4282 + linkify-it: 5.0.0 4283 + mdurl: 2.0.0 4284 + punycode.js: 2.3.1 4285 + uc.micro: 2.1.0 4286 + 4287 + marked@15.0.11: {} 4288 + 4289 + math-intrinsics@1.1.0: {} 4290 + 4291 + mdurl@2.0.0: {} 4292 + 4293 + media-typer@1.1.0: {} 4294 + 4295 + merge-descriptors@2.0.0: {} 4296 + 4297 + merge2@1.4.1: {} 4298 + 4299 + micromatch@4.0.8: 4300 + dependencies: 4301 + braces: 3.0.3 4302 + picomatch: 2.3.1 4303 + 4304 + mime-db@1.54.0: {} 4305 + 4306 + mime-types@3.0.1: 4307 + dependencies: 4308 + mime-db: 1.54.0 4309 + 4310 + mime@3.0.0: {} 4311 + 4312 + mini-svg-data-uri@1.4.4: {} 4313 + 4314 + miniflare@4.20251210.0: 4315 + dependencies: 4316 + '@cspotcode/source-map-support': 0.8.1 4317 + acorn: 8.14.0 4318 + acorn-walk: 8.3.2 4319 + exit-hook: 2.2.1 4320 + glob-to-regexp: 0.4.1 4321 + sharp: 0.33.5 4322 + stoppable: 1.1.0 4323 + undici: 7.14.0 4324 + workerd: 1.20251210.0 4325 + ws: 8.18.0 4326 + youch: 4.1.0-beta.10 4327 + zod: 3.22.3 4328 + transitivePeerDependencies: 4329 + - bufferutil 4330 + - utf-8-validate 4331 + 4332 + minimatch@3.1.2: 4333 + dependencies: 4334 + brace-expansion: 1.1.11 4335 + 4336 + minimatch@9.0.5: 4337 + dependencies: 4338 + brace-expansion: 2.0.1 4339 + 4340 + mode-watcher@1.1.0(svelte@5.45.8): 4341 + dependencies: 4342 + runed: 0.25.0(svelte@5.45.8) 4343 + svelte: 5.45.8 4344 + svelte-toolbelt: 0.7.1(svelte@5.45.8) 4345 + 4346 + mri@1.2.0: {} 4347 + 4348 + mrmime@2.0.1: {} 4349 + 4350 + ms@2.1.3: {} 4351 + 4352 + multiformats@9.9.0: {} 4353 + 4354 + nanoid@3.3.11: {} 4355 + 4356 + natural-compare@1.4.0: {} 4357 + 4358 + negotiator@1.0.0: {} 4359 + 4360 + number-flow@0.5.8: 4361 + dependencies: 4362 + esm-env: 1.2.2 4363 + 4364 + object-assign@4.1.1: {} 4365 + 4366 + object-inspect@1.13.4: {} 4367 + 4368 + on-finished@2.4.1: 4369 + dependencies: 4370 + ee-first: 1.1.1 4371 + 4372 + once@1.4.0: 4373 + dependencies: 4374 + wrappy: 1.0.2 4375 + 4376 + optionator@0.9.4: 4377 + dependencies: 4378 + deep-is: 0.1.4 4379 + fast-levenshtein: 2.0.6 4380 + levn: 0.4.1 4381 + prelude-ls: 1.2.1 4382 + type-check: 0.4.0 4383 + word-wrap: 1.2.5 4384 + 4385 + orderedmap@2.1.1: {} 4386 + 4387 + p-limit@3.1.0: 4388 + dependencies: 4389 + yocto-queue: 0.1.0 4390 + 4391 + p-locate@5.0.0: 4392 + dependencies: 4393 + p-limit: 3.1.0 4394 + 4395 + parent-module@1.0.1: 4396 + dependencies: 4397 + callsites: 3.1.0 4398 + 4399 + parseurl@1.3.3: {} 4400 + 4401 + path-exists@4.0.0: {} 4402 + 4403 + path-key@3.1.1: {} 4404 + 4405 + path-to-regexp@6.3.0: {} 4406 + 4407 + path-to-regexp@8.2.0: {} 4408 + 4409 + pathe@2.0.3: {} 4410 + 4411 + picocolors@1.1.1: {} 4412 + 4413 + picomatch@2.3.1: {} 4414 + 4415 + picomatch@4.0.2: {} 4416 + 4417 + pkce-challenge@5.0.0: {} 4418 + 4419 + postcss-load-config@3.1.4(postcss@8.5.3): 4420 + dependencies: 4421 + lilconfig: 2.1.0 4422 + yaml: 1.10.2 4423 + optionalDependencies: 4424 + postcss: 8.5.3 4425 + 4426 + postcss-safe-parser@6.0.0(postcss@8.5.3): 4427 + dependencies: 4428 + postcss: 8.5.3 4429 + 4430 + postcss-scss@4.0.9(postcss@8.5.3): 4431 + dependencies: 4432 + postcss: 8.5.3 4433 + 4434 + postcss-selector-parser@6.0.10: 4435 + dependencies: 4436 + cssesc: 3.0.0 4437 + util-deprecate: 1.0.2 4438 + 4439 + postcss-selector-parser@6.1.2: 4440 + dependencies: 4441 + cssesc: 3.0.0 4442 + util-deprecate: 1.0.2 4443 + 4444 + postcss@8.5.3: 4445 + dependencies: 4446 + nanoid: 3.3.11 4447 + picocolors: 1.1.1 4448 + source-map-js: 1.2.1 4449 + 4450 + prelude-ls@1.2.1: {} 4451 + 4452 + prettier-plugin-svelte@3.3.3(prettier@3.5.3)(svelte@5.45.8): 4453 + dependencies: 4454 + prettier: 3.5.3 4455 + svelte: 5.45.8 4456 + 4457 + prettier-plugin-tailwindcss@0.6.11(prettier-plugin-svelte@3.3.3(prettier@3.5.3)(svelte@5.45.8))(prettier@3.5.3): 4458 + dependencies: 4459 + prettier: 3.5.3 4460 + optionalDependencies: 4461 + prettier-plugin-svelte: 3.3.3(prettier@3.5.3)(svelte@5.45.8) 4462 + 4463 + prettier@3.5.3: {} 4464 + 4465 + prosemirror-changeset@2.3.0: 4466 + dependencies: 4467 + prosemirror-transform: 1.10.4 4468 + 4469 + prosemirror-collab@1.3.1: 4470 + dependencies: 4471 + prosemirror-state: 1.4.3 4472 + 4473 + prosemirror-commands@1.7.1: 4474 + dependencies: 4475 + prosemirror-model: 1.25.1 4476 + prosemirror-state: 1.4.3 4477 + prosemirror-transform: 1.10.4 4478 + 4479 + prosemirror-dropcursor@1.8.2: 4480 + dependencies: 4481 + prosemirror-state: 1.4.3 4482 + prosemirror-transform: 1.10.4 4483 + prosemirror-view: 1.39.2 4484 + 4485 + prosemirror-gapcursor@1.3.2: 4486 + dependencies: 4487 + prosemirror-keymap: 1.2.3 4488 + prosemirror-model: 1.25.1 4489 + prosemirror-state: 1.4.3 4490 + prosemirror-view: 1.39.2 4491 + 4492 + prosemirror-history@1.4.1: 4493 + dependencies: 4494 + prosemirror-state: 1.4.3 4495 + prosemirror-transform: 1.10.4 4496 + prosemirror-view: 1.39.2 4497 + rope-sequence: 1.3.4 4498 + 4499 + prosemirror-inputrules@1.5.0: 4500 + dependencies: 4501 + prosemirror-state: 1.4.3 4502 + prosemirror-transform: 1.10.4 4503 + 4504 + prosemirror-keymap@1.2.3: 4505 + dependencies: 4506 + prosemirror-state: 1.4.3 4507 + w3c-keyname: 2.2.8 4508 + 4509 + prosemirror-markdown@1.13.2: 4510 + dependencies: 4511 + '@types/markdown-it': 14.1.2 4512 + markdown-it: 14.1.0 4513 + prosemirror-model: 1.25.1 4514 + 4515 + prosemirror-menu@1.2.5: 4516 + dependencies: 4517 + crelt: 1.0.6 4518 + prosemirror-commands: 1.7.1 4519 + prosemirror-history: 1.4.1 4520 + prosemirror-state: 1.4.3 4521 + 4522 + prosemirror-model@1.25.1: 4523 + dependencies: 4524 + orderedmap: 2.1.1 4525 + 4526 + prosemirror-schema-basic@1.2.4: 4527 + dependencies: 4528 + prosemirror-model: 1.25.1 4529 + 4530 + prosemirror-schema-list@1.5.1: 4531 + dependencies: 4532 + prosemirror-model: 1.25.1 4533 + prosemirror-state: 1.4.3 4534 + prosemirror-transform: 1.10.4 4535 + 4536 + prosemirror-state@1.4.3: 4537 + dependencies: 4538 + prosemirror-model: 1.25.1 4539 + prosemirror-transform: 1.10.4 4540 + prosemirror-view: 1.39.2 4541 + 4542 + prosemirror-tables@1.7.1: 4543 + dependencies: 4544 + prosemirror-keymap: 1.2.3 4545 + prosemirror-model: 1.25.1 4546 + prosemirror-state: 1.4.3 4547 + prosemirror-transform: 1.10.4 4548 + prosemirror-view: 1.39.2 4549 + 4550 + prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.39.2): 4551 + dependencies: 4552 + '@remirror/core-constants': 3.0.0 4553 + escape-string-regexp: 4.0.0 4554 + prosemirror-model: 1.25.1 4555 + prosemirror-state: 1.4.3 4556 + prosemirror-view: 1.39.2 4557 + 4558 + prosemirror-transform@1.10.4: 4559 + dependencies: 4560 + prosemirror-model: 1.25.1 4561 + 4562 + prosemirror-view@1.39.2: 4563 + dependencies: 4564 + prosemirror-model: 1.25.1 4565 + prosemirror-state: 1.4.3 4566 + prosemirror-transform: 1.10.4 4567 + 4568 + proxy-addr@2.0.7: 4569 + dependencies: 4570 + forwarded: 0.2.0 4571 + ipaddr.js: 1.9.1 4572 + 4573 + punycode.js@2.3.1: {} 4574 + 4575 + punycode@2.3.1: {} 4576 + 4577 + qs@6.14.0: 4578 + dependencies: 4579 + side-channel: 1.1.0 4580 + 4581 + queue-microtask@1.2.3: {} 4582 + 4583 + range-parser@1.2.1: {} 4584 + 4585 + raw-body@3.0.0: 4586 + dependencies: 4587 + bytes: 3.1.2 4588 + http-errors: 2.0.0 4589 + iconv-lite: 0.6.3 4590 + unpipe: 1.0.0 4591 + 4592 + readdirp@4.1.2: {} 4593 + 4594 + regexparam@3.0.0: {} 4595 + 4596 + resolve-from@4.0.0: {} 4597 + 4598 + reusify@1.1.0: {} 4599 + 4600 + rollup@4.40.2: 4601 + dependencies: 4602 + '@types/estree': 1.0.7 4603 + optionalDependencies: 4604 + '@rollup/rollup-android-arm-eabi': 4.40.2 4605 + '@rollup/rollup-android-arm64': 4.40.2 4606 + '@rollup/rollup-darwin-arm64': 4.40.2 4607 + '@rollup/rollup-darwin-x64': 4.40.2 4608 + '@rollup/rollup-freebsd-arm64': 4.40.2 4609 + '@rollup/rollup-freebsd-x64': 4.40.2 4610 + '@rollup/rollup-linux-arm-gnueabihf': 4.40.2 4611 + '@rollup/rollup-linux-arm-musleabihf': 4.40.2 4612 + '@rollup/rollup-linux-arm64-gnu': 4.40.2 4613 + '@rollup/rollup-linux-arm64-musl': 4.40.2 4614 + '@rollup/rollup-linux-loongarch64-gnu': 4.40.2 4615 + '@rollup/rollup-linux-powerpc64le-gnu': 4.40.2 4616 + '@rollup/rollup-linux-riscv64-gnu': 4.40.2 4617 + '@rollup/rollup-linux-riscv64-musl': 4.40.2 4618 + '@rollup/rollup-linux-s390x-gnu': 4.40.2 4619 + '@rollup/rollup-linux-x64-gnu': 4.40.2 4620 + '@rollup/rollup-linux-x64-musl': 4.40.2 4621 + '@rollup/rollup-win32-arm64-msvc': 4.40.2 4622 + '@rollup/rollup-win32-ia32-msvc': 4.40.2 4623 + '@rollup/rollup-win32-x64-msvc': 4.40.2 4624 + fsevents: 2.3.3 4625 + 4626 + rope-sequence@1.3.4: {} 4627 + 4628 + router@2.2.0: 4629 + dependencies: 4630 + debug: 4.4.0 4631 + depd: 2.0.0 4632 + is-promise: 4.0.0 4633 + parseurl: 1.3.3 4634 + path-to-regexp: 8.2.0 4635 + transitivePeerDependencies: 4636 + - supports-color 4637 + 4638 + run-parallel@1.2.0: 4639 + dependencies: 4640 + queue-microtask: 1.2.3 4641 + 4642 + runed@0.23.4(svelte@5.45.8): 4643 + dependencies: 4644 + esm-env: 1.2.2 4645 + svelte: 5.45.8 4646 + 4647 + runed@0.25.0(svelte@5.45.8): 4648 + dependencies: 4649 + esm-env: 1.2.2 4650 + svelte: 5.45.8 4651 + 4652 + runed@0.28.0(svelte@5.45.8): 4653 + dependencies: 4654 + esm-env: 1.2.2 4655 + svelte: 5.45.8 4656 + 4657 + runed@0.35.1(@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8): 4658 + dependencies: 4659 + dequal: 2.0.3 4660 + esm-env: 1.2.2 4661 + lz-string: 1.5.0 4662 + svelte: 5.45.8 4663 + optionalDependencies: 4664 + '@sveltejs/kit': 2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)) 4665 + 4666 + sade@1.8.1: 4667 + dependencies: 4668 + mri: 1.2.0 4669 + 4670 + safe-buffer@5.2.1: {} 4671 + 4672 + safer-buffer@2.1.2: {} 4673 + 4674 + semver@7.7.1: {} 4675 + 4676 + send@1.2.0: 4677 + dependencies: 4678 + debug: 4.4.0 4679 + encodeurl: 2.0.0 4680 + escape-html: 1.0.3 4681 + etag: 1.8.1 4682 + fresh: 2.0.0 4683 + http-errors: 2.0.0 4684 + mime-types: 3.0.1 4685 + ms: 2.1.3 4686 + on-finished: 2.4.1 4687 + range-parser: 1.2.1 4688 + statuses: 2.0.1 4689 + transitivePeerDependencies: 4690 + - supports-color 4691 + 4692 + serve-static@2.2.0: 4693 + dependencies: 4694 + encodeurl: 2.0.0 4695 + escape-html: 1.0.3 4696 + parseurl: 1.3.3 4697 + send: 1.2.0 4698 + transitivePeerDependencies: 4699 + - supports-color 4700 + 4701 + set-cookie-parser@2.7.1: {} 4702 + 4703 + setprototypeof@1.2.0: {} 4704 + 4705 + sharp@0.33.5: 4706 + dependencies: 4707 + color: 4.2.3 4708 + detect-libc: 2.0.4 4709 + semver: 7.7.1 4710 + optionalDependencies: 4711 + '@img/sharp-darwin-arm64': 0.33.5 4712 + '@img/sharp-darwin-x64': 0.33.5 4713 + '@img/sharp-libvips-darwin-arm64': 1.0.4 4714 + '@img/sharp-libvips-darwin-x64': 1.0.4 4715 + '@img/sharp-libvips-linux-arm': 1.0.5 4716 + '@img/sharp-libvips-linux-arm64': 1.0.4 4717 + '@img/sharp-libvips-linux-s390x': 1.0.4 4718 + '@img/sharp-libvips-linux-x64': 1.0.4 4719 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 4720 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 4721 + '@img/sharp-linux-arm': 0.33.5 4722 + '@img/sharp-linux-arm64': 0.33.5 4723 + '@img/sharp-linux-s390x': 0.33.5 4724 + '@img/sharp-linux-x64': 0.33.5 4725 + '@img/sharp-linuxmusl-arm64': 0.33.5 4726 + '@img/sharp-linuxmusl-x64': 0.33.5 4727 + '@img/sharp-wasm32': 0.33.5 4728 + '@img/sharp-win32-ia32': 0.33.5 4729 + '@img/sharp-win32-x64': 0.33.5 4730 + 4731 + shebang-command@2.0.0: 4732 + dependencies: 4733 + shebang-regex: 3.0.0 4734 + 4735 + shebang-regex@3.0.0: {} 4736 + 4737 + side-channel-list@1.0.0: 4738 + dependencies: 4739 + es-errors: 1.3.0 4740 + object-inspect: 1.13.4 4741 + 4742 + side-channel-map@1.0.1: 4743 + dependencies: 4744 + call-bound: 1.0.4 4745 + es-errors: 1.3.0 4746 + get-intrinsic: 1.3.0 4747 + object-inspect: 1.13.4 4748 + 4749 + side-channel-weakmap@1.0.2: 4750 + dependencies: 4751 + call-bound: 1.0.4 4752 + es-errors: 1.3.0 4753 + get-intrinsic: 1.3.0 4754 + object-inspect: 1.13.4 4755 + side-channel-map: 1.0.1 4756 + 4757 + side-channel@1.1.0: 4758 + dependencies: 4759 + es-errors: 1.3.0 4760 + object-inspect: 1.13.4 4761 + side-channel-list: 1.0.0 4762 + side-channel-map: 1.0.1 4763 + side-channel-weakmap: 1.0.2 4764 + 4765 + simple-swizzle@0.2.4: 4766 + dependencies: 4767 + is-arrayish: 0.3.4 4768 + 4769 + sirv@3.0.1: 4770 + dependencies: 4771 + '@polka/url': 1.0.0-next.29 4772 + mrmime: 2.0.1 4773 + totalist: 3.0.1 4774 + 4775 + source-map-js@1.2.1: {} 4776 + 4777 + statuses@2.0.1: {} 4778 + 4779 + stoppable@1.1.0: {} 4780 + 4781 + strip-json-comments@3.1.1: {} 4782 + 4783 + style-to-object@1.0.8: 4784 + dependencies: 4785 + inline-style-parser: 0.2.4 4786 + 4787 + supports-color@10.2.2: {} 4788 + 4789 + supports-color@7.2.0: 4790 + dependencies: 4791 + has-flag: 4.0.0 4792 + 4793 + svelte-check@4.1.7(picomatch@4.0.2)(svelte@5.45.8)(typescript@5.8.3): 4794 + dependencies: 4795 + '@jridgewell/trace-mapping': 0.3.25 4796 + chokidar: 4.0.3 4797 + fdir: 6.4.4(picomatch@4.0.2) 4798 + picocolors: 1.1.1 4799 + sade: 1.8.1 4800 + svelte: 5.45.8 4801 + typescript: 5.8.3 4802 + transitivePeerDependencies: 4803 + - picomatch 4804 + 4805 + svelte-eslint-parser@0.43.0(svelte@5.45.8): 4806 + dependencies: 4807 + eslint-scope: 7.2.2 4808 + eslint-visitor-keys: 3.4.3 4809 + espree: 9.6.1 4810 + postcss: 8.5.3 4811 + postcss-scss: 4.0.9(postcss@8.5.3) 4812 + optionalDependencies: 4813 + svelte: 5.45.8 4814 + 4815 + svelte-sonner@0.3.28(svelte@5.45.8): 4816 + dependencies: 4817 + svelte: 5.45.8 4818 + 4819 + svelte-sonner@1.0.7(svelte@5.45.8): 4820 + dependencies: 4821 + runed: 0.28.0(svelte@5.45.8) 4822 + svelte: 5.45.8 4823 + 4824 + svelte-toolbelt@0.10.6(@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8): 4825 + dependencies: 4826 + clsx: 2.1.1 4827 + runed: 0.35.1(@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8)(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.45.8) 4828 + style-to-object: 1.0.8 4829 + svelte: 5.45.8 4830 + transitivePeerDependencies: 4831 + - '@sveltejs/kit' 4832 + 4833 + svelte-toolbelt@0.7.1(svelte@5.45.8): 4834 + dependencies: 4835 + clsx: 2.1.1 4836 + runed: 0.23.4(svelte@5.45.8) 4837 + style-to-object: 1.0.8 4838 + svelte: 5.45.8 4839 + 4840 + svelte@5.45.8: 4841 + dependencies: 4842 + '@jridgewell/remapping': 2.3.5 4843 + '@jridgewell/sourcemap-codec': 1.5.0 4844 + '@sveltejs/acorn-typescript': 1.0.5(acorn@8.14.1) 4845 + '@types/estree': 1.0.7 4846 + acorn: 8.14.1 4847 + aria-query: 5.3.2 4848 + axobject-query: 4.1.0 4849 + clsx: 2.1.1 4850 + devalue: 5.6.0 4851 + esm-env: 1.2.2 4852 + esrap: 2.2.1 4853 + is-reference: 3.0.3 4854 + locate-character: 3.0.0 4855 + magic-string: 0.30.17 4856 + zimmerframe: 1.1.2 4857 + 4858 + tabbable@6.2.0: {} 4859 + 4860 + tailwind-merge@3.0.2: {} 4861 + 4862 + tailwind-merge@3.4.0: {} 4863 + 4864 + tailwind-variants@1.0.0(tailwindcss@4.1.5): 4865 + dependencies: 4866 + tailwind-merge: 3.0.2 4867 + tailwindcss: 4.1.5 4868 + 4869 + tailwind-variants@3.2.2(tailwind-merge@3.4.0)(tailwindcss@4.1.5): 4870 + dependencies: 4871 + tailwindcss: 4.1.5 4872 + optionalDependencies: 4873 + tailwind-merge: 3.4.0 4874 + 4875 + tailwindcss@4.1.5: {} 4876 + 4877 + tapable@2.2.1: {} 4878 + 4879 + tinyglobby@0.2.13: 4880 + dependencies: 4881 + fdir: 6.4.4(picomatch@4.0.2) 4882 + picomatch: 4.0.2 4883 + 4884 + tlds@1.258.0: {} 4885 + 4886 + to-regex-range@5.0.1: 4887 + dependencies: 4888 + is-number: 7.0.0 4889 + 4890 + toidentifier@1.0.1: {} 4891 + 4892 + totalist@3.0.1: {} 4893 + 4894 + ts-api-utils@2.1.0(typescript@5.8.3): 4895 + dependencies: 4896 + typescript: 5.8.3 4897 + 4898 + tslib@2.8.1: {} 4899 + 4900 + turndown@7.2.0: 4901 + dependencies: 4902 + '@mixmark-io/domino': 2.2.0 4903 + 4904 + type-check@0.4.0: 4905 + dependencies: 4906 + prelude-ls: 1.2.1 4907 + 4908 + type-is@2.0.1: 4909 + dependencies: 4910 + content-type: 1.0.5 4911 + media-typer: 1.1.0 4912 + mime-types: 3.0.1 4913 + 4914 + typescript-eslint@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3): 4915 + dependencies: 4916 + '@typescript-eslint/eslint-plugin': 8.32.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) 4917 + '@typescript-eslint/parser': 8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) 4918 + '@typescript-eslint/utils': 8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) 4919 + eslint: 9.26.0(jiti@2.4.2) 4920 + typescript: 5.8.3 4921 + transitivePeerDependencies: 4922 + - supports-color 4923 + 4924 + typescript@5.8.3: {} 4925 + 4926 + uc.micro@2.1.0: {} 4927 + 4928 + uint8arrays@3.0.0: 4929 + dependencies: 4930 + multiformats: 9.9.0 4931 + 4932 + undici@7.14.0: {} 4933 + 4934 + unenv@2.0.0-rc.24: 4935 + dependencies: 4936 + pathe: 2.0.3 4937 + 4938 + unpipe@1.0.0: {} 4939 + 4940 + uri-js@4.4.1: 4941 + dependencies: 4942 + punycode: 2.3.1 4943 + 4944 + util-deprecate@1.0.2: {} 4945 + 4946 + vary@1.1.2: {} 4947 + 4948 + vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2): 4949 + dependencies: 4950 + esbuild: 0.25.4 4951 + fdir: 6.4.4(picomatch@4.0.2) 4952 + picomatch: 4.0.2 4953 + postcss: 8.5.3 4954 + rollup: 4.40.2 4955 + tinyglobby: 0.2.13 4956 + optionalDependencies: 4957 + fsevents: 2.3.3 4958 + jiti: 2.4.2 4959 + lightningcss: 1.29.2 4960 + 4961 + vitefu@1.0.6(vite@6.3.5(jiti@2.4.2)(lightningcss@1.29.2)): 4962 + optionalDependencies: 4963 + vite: 6.3.5(jiti@2.4.2)(lightningcss@1.29.2) 4964 + 4965 + w3c-keyname@2.2.8: {} 4966 + 4967 + which@2.0.2: 4968 + dependencies: 4969 + isexe: 2.0.0 4970 + 4971 + word-wrap@1.2.5: {} 4972 + 4973 + workerd@1.20251210.0: 4974 + optionalDependencies: 4975 + '@cloudflare/workerd-darwin-64': 1.20251210.0 4976 + '@cloudflare/workerd-darwin-arm64': 1.20251210.0 4977 + '@cloudflare/workerd-linux-64': 1.20251210.0 4978 + '@cloudflare/workerd-linux-arm64': 1.20251210.0 4979 + '@cloudflare/workerd-windows-64': 1.20251210.0 4980 + 4981 + worktop@0.8.0-next.18: 4982 + dependencies: 4983 + mrmime: 2.0.1 4984 + regexparam: 3.0.0 4985 + 4986 + wrangler@4.54.0(@cloudflare/workers-types@4.20251225.0): 4987 + dependencies: 4988 + '@cloudflare/kv-asset-handler': 0.4.1 4989 + '@cloudflare/unenv-preset': 2.7.13(unenv@2.0.0-rc.24)(workerd@1.20251210.0) 4990 + blake3-wasm: 2.1.5 4991 + esbuild: 0.27.0 4992 + miniflare: 4.20251210.0 4993 + path-to-regexp: 6.3.0 4994 + unenv: 2.0.0-rc.24 4995 + workerd: 1.20251210.0 4996 + optionalDependencies: 4997 + '@cloudflare/workers-types': 4.20251225.0 4998 + fsevents: 2.3.3 4999 + transitivePeerDependencies: 5000 + - bufferutil 5001 + - utf-8-validate 5002 + 5003 + wrappy@1.0.2: {} 5004 + 5005 + ws@8.18.0: {} 5006 + 5007 + yaml@1.10.2: {} 5008 + 5009 + yocto-queue@0.1.0: {} 5010 + 5011 + youch-core@0.3.3: 5012 + dependencies: 5013 + '@poppinss/exception': 1.2.3 5014 + error-stack-parser-es: 1.0.5 5015 + 5016 + youch@4.1.0-beta.10: 5017 + dependencies: 5018 + '@poppinss/colors': 4.1.6 5019 + '@poppinss/dumper': 0.6.5 5020 + '@speed-highlight/core': 1.2.12 5021 + cookie: 1.1.1 5022 + youch-core: 0.3.3 5023 + 5024 + zimmerframe@1.1.2: {} 5025 + 5026 + zod-to-json-schema@3.24.5(zod@3.24.4): 5027 + dependencies: 5028 + zod: 3.24.4 5029 + 5030 + zod@3.22.3: {} 5031 + 5032 + zod@3.24.4: {}
+62
src/app.css
··· 1 + @import 'tailwindcss'; 2 + 3 + @plugin '@tailwindcss/forms'; 4 + @plugin '@tailwindcss/typography'; 5 + 6 + @source '../node_modules/@foxui'; 7 + 8 + @custom-variant dark (&:where(.dark, .dark *)); 9 + 10 + @theme inline { 11 + --color-base-50: var(--base-50); 12 + --color-base-100: var(--base-100); 13 + --color-base-200: var(--base-200); 14 + --color-base-300: var(--base-300); 15 + --color-base-400: var(--base-400); 16 + --color-base-500: var(--base-500); 17 + --color-base-600: var(--base-600); 18 + --color-base-700: var(--base-700); 19 + --color-base-800: var(--base-800); 20 + --color-base-900: var(--base-900); 21 + --color-base-950: var(--base-950); 22 + 23 + --color-accent-50: var(--accent-50); 24 + --color-accent-100: var(--accent-100); 25 + --color-accent-200: var(--accent-200); 26 + --color-accent-300: var(--accent-300); 27 + --color-accent-400: var(--accent-400); 28 + --color-accent-500: var(--accent-500); 29 + --color-accent-600: var(--accent-600); 30 + --color-accent-700: var(--accent-700); 31 + --color-accent-800: var(--accent-800); 32 + --color-accent-900: var(--accent-900); 33 + --color-accent-950: var(--accent-950); 34 + } 35 + 36 + @layer base { 37 + :root { 38 + --accent-50: var(--color-pink-50); 39 + --accent-100: var(--color-pink-100); 40 + --accent-200: var(--color-pink-200); 41 + --accent-300: var(--color-pink-300); 42 + --accent-400: var(--color-pink-400); 43 + --accent-500: var(--color-pink-500); 44 + --accent-600: var(--color-pink-600); 45 + --accent-700: var(--color-pink-700); 46 + --accent-800: var(--color-pink-800); 47 + --accent-900: var(--color-pink-900); 48 + --accent-950: var(--color-pink-950); 49 + 50 + --base-50: var(--color-neutral-50); 51 + --base-100: var(--color-neutral-100); 52 + --base-200: var(--color-neutral-200); 53 + --base-300: var(--color-neutral-300); 54 + --base-400: var(--color-neutral-400); 55 + --base-500: var(--color-neutral-500); 56 + --base-600: var(--color-neutral-600); 57 + --base-700: var(--color-neutral-700); 58 + --base-800: var(--color-neutral-800); 59 + --base-900: var(--color-neutral-900); 60 + --base-950: var(--color-neutral-950); 61 + } 62 + }
+13
src/app.d.ts
··· 1 + // See https://svelte.dev/docs/kit/types#app.d.ts 2 + // for information about these interfaces 3 + declare global { 4 + namespace App { 5 + // interface Error {} 6 + // interface Locals {} 7 + // interface PageData {} 8 + // interface PageState {} 9 + // interface Platform {} 10 + } 11 + } 12 + 13 + export {};
+12
src/app.html
··· 1 + <!doctype html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="utf-8" /> 5 + <meta name="viewport" content="width=device-width, initial-scale=1" /> 6 + %sveltekit.head% 7 + 8 + </head> 9 + <body data-sveltekit-preload-data="hover" class="bg-base-50 dark:bg-base-950"> 10 + <div style="display: contents">%sveltekit.body%</div> 11 + </body> 12 + </html>
+181
src/lib/Website.svelte
··· 1 + <script lang="ts"> 2 + import { ThemeToggle } from '@foxui/core'; 3 + import { MarkdownText, SingleRecord } from './website/components'; 4 + import { base } from '$app/paths'; 5 + 6 + let { handle, did }: { handle: string; did: string } = $props(); 7 + 8 + let colors = [ 9 + 'bg-red-500', 10 + 'bg-orange-500', 11 + 'bg-amber-500', 12 + 'bg-yellow-500', 13 + 'bg-lime-500', 14 + 'bg-green-500', 15 + 'bg-emerald-500', 16 + 'bg-teal-500', 17 + 'bg-cyan-500', 18 + 'bg-sky-500', 19 + 'bg-blue-500', 20 + 'bg-indigo-500', 21 + 'bg-violet-500', 22 + 'bg-purple-500', 23 + 'bg-fuchsia-500', 24 + 'bg-pink-500', 25 + 'bg-rose-500' 26 + ]; 27 + 28 + const items = [ 29 + { id: '0', x: 0, y: 0, w: 2, h: 1 }, 30 + { id: '1', x: 2, y: 2, w: 2, h: 2 }, 31 + { id: '2', x: 2, y: 0, w: 1, h: 2 }, 32 + { id: '2', x: 1, y: 1, w: 1, h: 2 }, 33 + { id: '3', x: 0, y: 3, w: 2, h: 2 }, 34 + { id: '4', x: 3, y: 0, w: 1, h: 1 }, 35 + { id: '5', x: 2, y: 4, w: 2, h: 1 } 36 + ]; 37 + 38 + const combined = $state( 39 + items.map((item, index) => ({ 40 + ...item, 41 + color: colors[index % colors.length], 42 + id: Math.random().toFixed(4) 43 + })) 44 + ); 45 + 46 + let maxHeight = $derived(combined.reduce((max, item) => Math.max(max, item.y + item.h), 0)); 47 + 48 + const margin = 16; 49 + 50 + let container: HTMLDivElement | undefined = $state(); 51 + 52 + type Item = { 53 + w: number; 54 + h: number; 55 + x: number; 56 + y: number; 57 + }; 58 + 59 + let activeDragElement: { 60 + element: HTMLDivElement | null; 61 + item: Item | null; 62 + w: number; 63 + h: number; 64 + x: number; 65 + y: number; 66 + mouseDeltaX: number; 67 + mouseDeltaY: number; 68 + } = $state({ 69 + element: null, 70 + item: null, 71 + w: 0, 72 + h: 0, 73 + x: -1, 74 + y: -1, 75 + mouseDeltaX: 0, 76 + mouseDeltaY: 0 77 + }); 78 + </script> 79 + 80 + <ThemeToggle class="fixed top-2 left-2 z-10" /> 81 + 82 + <div class="flex px-12 py-24 md:fixed md:h-screen md:w-1/3"> 83 + <div class="flex flex-col gap-4"> 84 + <SingleRecord collection="app.bsky.actor.profile" rkey="self"> 85 + {#snippet child(data)} 86 + <img 87 + class="rounded-fulll size-44 rounded-full" 88 + src={'https://cdn.bsky.app/img/avatar/plain/' + did + '/' + data.value.avatar.ref.$link} 89 + alt="" 90 + /> 91 + <div class="line-clamp-2 text-4xl font-bold wrap-anywhere">{handle}</div> 92 + 93 + <div 94 + class="text-base-600 dark:text-base-400 prose dark:prose-invert prose-a:text-accent-500 prose-a:no-underline" 95 + > 96 + <MarkdownText key="description" {data} /> 97 + </div> 98 + {/snippet} 99 + </SingleRecord> 100 + </div> 101 + </div> 102 + <div class="md:grid md:grid-cols-3"> 103 + <div></div> 104 + <!-- svelte-ignore a11y_no_static_element_interactions --> 105 + <div 106 + bind:this={container} 107 + ondragover={(e) => { 108 + e.preventDefault(); 109 + if (!container) return; 110 + 111 + const x = e.clientX + activeDragElement.mouseDeltaX; 112 + const y = e.clientY + activeDragElement.mouseDeltaY; 113 + const rect = container.getBoundingClientRect(); 114 + 115 + const gridX = Math.floor(((x - rect.left) / rect.width) * 4); 116 + const gridY = Math.floor(((y - rect.top) / rect.width) * 4); 117 + 118 + activeDragElement.x = gridX; 119 + activeDragElement.y = gridY; 120 + }} 121 + ondragend={(e) => { 122 + e.preventDefault(); 123 + if (!container) return; 124 + 125 + const x = e.clientX + activeDragElement.mouseDeltaX; 126 + const y = e.clientY + activeDragElement.mouseDeltaY; 127 + const rect = container.getBoundingClientRect(); 128 + 129 + const gridX = Math.floor(((x - rect.left) / rect.width) * 4); 130 + const gridY = Math.floor(((y - rect.top) / rect.width) * 4); 131 + 132 + activeDragElement.item.x = gridX; 133 + activeDragElement.item.y = gridY; 134 + activeDragElement.x = -1; 135 + activeDragElement.y = -1; 136 + activeDragElement.element = null; 137 + return true; 138 + }} 139 + class="relative col-span-2 container h-fit w-full p-8" 140 + style="container-type: inline-size;" 141 + > 142 + {#each combined as item} 143 + <div 144 + ondragstart={(e) => { 145 + const target = e.target as HTMLDivElement; 146 + activeDragElement.element = target; 147 + activeDragElement.w = item.w; 148 + activeDragElement.h = item.h; 149 + activeDragElement.item = item; 150 + 151 + const rect = target.getBoundingClientRect(); 152 + 153 + activeDragElement.mouseDeltaX = rect.left + 16 - e.clientX; 154 + activeDragElement.mouseDeltaY = rect.top - e.clientY; 155 + console.log(activeDragElement.mouseDeltaY); 156 + 157 + console.log(e); 158 + }} 159 + draggable="true" 160 + class={['absolute aspect-square rounded-2xl', item.color]} 161 + style={`translate: calc(${(item.x / 4) * 100}cqw + ${margin}px) calc(${(item.y / 4) * 100}cqw + ${margin}px); 162 + width: calc(${(item.w / 4) * 100}cqw - ${margin * 2}px); 163 + height: calc(${(item.h / 4) * 100}cqw - ${margin * 2}px);`} 164 + > 165 + <a href="#" tabindex={item.y * 4 + item.x + 1}>test</a> 166 + </div> 167 + {/each} 168 + 169 + {#if activeDragElement.element && activeDragElement.x >= 0} 170 + {@const item = activeDragElement} 171 + <div 172 + class={['bg-base-500/20 absolute aspect-square rounded-2xl']} 173 + style={`translate: calc(${(item.x / 4) * 100}cqw + ${margin / 2}px) calc(${(item.y / 4) * 100}cqw + ${margin / 2}px); 174 + 175 + width: calc(${(item.w / 4) * 100}cqw - ${margin}px); 176 + height: calc(${(item.h / 4) * 100}cqw - ${margin}px);`} 177 + ></div> 178 + {/if} 179 + <div style="height: {((maxHeight + 1) / 4) * 100}cqw;"></div> 180 + </div> 181 + </div>
+1
src/lib/index.ts
··· 1 + // place files you want to import through the `$lib` alias in this folder.
+196
src/lib/oauth/atproto.ts
··· 1 + import { AtpBaseClient } from '@atproto/api'; 2 + import { client } from './auth.svelte'; 3 + 4 + export async function resolveHandle({ handle }: { handle: string }) { 5 + const agent = new AtpBaseClient({ service: 'https://api.bsky.app' }); 6 + 7 + const data = await agent.com.atproto.identity.resolveHandle({ handle }); 8 + return data.data.did; 9 + } 10 + 11 + const didPDSCache: Record<string, string> = {}; 12 + 13 + const getPDS = async (did: string) => { 14 + if (did in didPDSCache) return didPDSCache[did]; 15 + const res = await fetch( 16 + did.startsWith('did:web') 17 + ? `https://${did.split(':')[2]}/.well-known/did.json` 18 + : 'https://plc.directory/' + did 19 + ); 20 + 21 + return res.json().then((doc) => { 22 + if (!doc.service) throw new Error('No PDS found'); 23 + for (const service of doc.service) { 24 + if (service.id === '#atproto_pds') { 25 + didPDSCache[did] = service.serviceEndpoint.toString(); 26 + } 27 + } 28 + return didPDSCache[did]; 29 + }); 30 + }; 31 + 32 + export async function getProfile({ agent, did }: { agent?: AtpBaseClient; did: string }) { 33 + agent ??= new AtpBaseClient({ service: 'https://api.bsky.app' }); 34 + const { data } = await agent.app.bsky.actor.getProfile({ actor: did }); 35 + return data; 36 + } 37 + 38 + export async function listRecords({ 39 + did, 40 + collection, 41 + cursor 42 + }: { 43 + did: string; 44 + collection: string; 45 + cursor?: string; 46 + }) { 47 + const pds = await getPDS(did); 48 + 49 + const agent = new AtpBaseClient({ service: pds }); 50 + 51 + const room = await agent.com.atproto.repo.listRecords({ 52 + repo: did, 53 + collection, 54 + limit: 100, 55 + cursor 56 + }); 57 + 58 + // convert to { [rkey]: record } 59 + const records = room.data.records.reduce( 60 + (acc, record) => { 61 + acc[parseUri(record.uri).rkey] = record; 62 + return acc; 63 + }, 64 + {} as Record<string, ListRecord> 65 + ); 66 + 67 + return records; 68 + } 69 + 70 + import type { Record as ListRecord } from '@atproto/api/dist/client/types/com/atproto/repo/listRecords'; 71 + import { parseUri } from '$lib/website/utils'; 72 + import { image_collection } from '$lib/website/data'; 73 + 74 + export async function getRecord({ 75 + did, 76 + collection, 77 + rkey 78 + }: { 79 + did: string; 80 + collection: string; 81 + rkey: string; 82 + }) { 83 + if (!did || !collection || !rkey) { 84 + console.error('Missing parameters for getRecord', { did, collection, rkey }); 85 + throw new Error('Missing parameters for getRecord'); 86 + } 87 + const pds = await getPDS(did); 88 + 89 + const agent = new AtpBaseClient({ service: pds }); 90 + 91 + const record = await agent.com.atproto.repo.getRecord({ 92 + repo: did, 93 + collection, 94 + rkey 95 + }); 96 + 97 + return JSON.parse(JSON.stringify(record.data)) as ListRecord; 98 + } 99 + 100 + export async function putRecord({ 101 + collection, 102 + rkey, 103 + record 104 + }: { 105 + collection: `${string}.${string}.${string}`; 106 + rkey: string; 107 + record: Record<string, unknown>; 108 + }) { 109 + if (!client.profile || !client.rpc) throw new Error('No profile or rpc'); 110 + 111 + console.log('updating record', { 112 + data: { 113 + collection, 114 + repo: client.profile.did, 115 + rkey, 116 + record: { 117 + ...record 118 + } 119 + } 120 + }); 121 + const response = await client.rpc.call('com.atproto.repo.putRecord', { 122 + data: { 123 + collection, 124 + repo: client.profile.did, 125 + rkey, 126 + record: { 127 + ...record 128 + } 129 + } 130 + }); 131 + 132 + return response; 133 + } 134 + 135 + export async function deleteRecord({ 136 + did, 137 + collection, 138 + rkey 139 + }: { 140 + did: string; 141 + collection: `${string}.${string}.${string}`; 142 + rkey: string; 143 + }) { 144 + if (!client.profile || !client.rpc) throw new Error('No profile or rpc'); 145 + 146 + const response = await client.rpc.call('com.atproto.repo.deleteRecord', { 147 + data: { 148 + collection, 149 + repo: did, 150 + rkey 151 + } 152 + }); 153 + 154 + return response; 155 + } 156 + 157 + export async function getBlob({ did, cid }: { did: string; cid: string }) { 158 + const pds = await getPDS(did); 159 + return `${pds}/xrpc/com.atproto.sync.getBlob?did=${did}&cid=${cid}`; 160 + } 161 + 162 + export async function uploadImage({ 163 + image, 164 + did, 165 + rkey, 166 + collection, 167 + key 168 + }: { 169 + image: Blob; 170 + did: string; 171 + collection: `${string}.${string}.${string}`; 172 + rkey: string; 173 + key: string; 174 + }) { 175 + const blobResponse = await client.rpc?.request({ 176 + type: 'post', 177 + nsid: 'com.atproto.repo.uploadBlob', 178 + params: { 179 + repo: did 180 + }, 181 + data: image 182 + }); 183 + 184 + const blobInfo = blobResponse?.data.blob as { 185 + $type: 'blob'; 186 + ref: { 187 + $link: string; 188 + }; 189 + mimeType: string; 190 + size: number; 191 + }; 192 + 193 + await putRecord({ collection, record: { [key]: blobInfo }, rkey }); 194 + 195 + return blobInfo; 196 + }
+182
src/lib/oauth/auth.svelte.ts
··· 1 + import { 2 + configureOAuth, 3 + createAuthorizationUrl, 4 + finalizeAuthorization, 5 + resolveFromIdentity, 6 + type Session, 7 + OAuthUserAgent, 8 + getSession 9 + } from '@atcute/oauth-browser-client'; 10 + import { dev } from '$app/environment'; 11 + import { XRPC } from '@atcute/client'; 12 + import { metadata } from './const'; 13 + 14 + export const client = $state({ 15 + agent: null as OAuthUserAgent | null, 16 + session: null as Session | null, 17 + rpc: null as XRPC | null, 18 + profile: null as { 19 + handle: string; 20 + did: string; 21 + createdAt: string; 22 + description?: string; 23 + displayName?: string; 24 + banner?: string; 25 + avatar?: string; 26 + followersCount?: number; 27 + followsCount?: number; 28 + postsCount?: number; 29 + } | null, 30 + isInitializing: true, 31 + isLoggedIn: false 32 + }); 33 + 34 + export async function initClient() { 35 + client.isInitializing = true; 36 + 37 + const clientId = dev 38 + ? `http://localhost` + 39 + `?redirect_uri=${encodeURIComponent('http://127.0.0.1:5179')}` + 40 + `&scope=${encodeURIComponent(metadata.scope)}` 41 + : metadata.client_id; 42 + 43 + configureOAuth({ 44 + metadata: { 45 + client_id: clientId, 46 + redirect_uri: `${dev ? 'http://127.0.0.1:5179' : metadata.redirect_uris[0]}` 47 + } 48 + }); 49 + 50 + const params = new URLSearchParams(location.hash.slice(1)); 51 + 52 + const did = localStorage.getItem('last-login') ?? undefined; 53 + 54 + if (params.size > 0) { 55 + await finalizeLogin(params, did); 56 + } else if (did) { 57 + await resumeSession(did); 58 + } 59 + 60 + client.isInitializing = false; 61 + } 62 + 63 + export async function login(handle: string) { 64 + if (handle.startsWith('did:')) { 65 + if (handle.length > 5) await authorizationFlow(handle); 66 + else throw new Error('DID must be at least 6 characters'); 67 + } else if (handle.includes('.') && handle.length > 3) { 68 + const processed = handle.startsWith('@') ? handle.slice(1) : handle; 69 + if (processed.length > 3) await authorizationFlow(processed); 70 + else throw new Error('Handle must be at least 4 characters'); 71 + } else if (handle.length > 3) { 72 + const processed = (handle.startsWith('@') ? handle.slice(1) : handle) + '.bsky.social'; 73 + await authorizationFlow(processed); 74 + } else { 75 + throw new Error('Please provide a valid handle, DID, or PDS URL'); 76 + } 77 + } 78 + 79 + export async function logout() { 80 + const currentAgent = client.agent; 81 + if (currentAgent) { 82 + const did = currentAgent.session.info.sub; 83 + 84 + localStorage.removeItem('last-login'); 85 + localStorage.removeItem(`profile-${did}`); 86 + 87 + await currentAgent.signOut(); 88 + client.session = null; 89 + client.agent = null; 90 + client.profile = null; 91 + 92 + client.isLoggedIn = false; 93 + } else { 94 + throw new Error('Not signed in'); 95 + } 96 + } 97 + 98 + async function finalizeLogin(params: URLSearchParams, did?: string) { 99 + try { 100 + history.replaceState(null, '', location.pathname + location.search); 101 + 102 + const session = await finalizeAuthorization(params); 103 + client.session = session; 104 + 105 + setAgentAndXRPC(session); 106 + localStorage.setItem('last-login', session.info.sub); 107 + 108 + await loadProfile(session.info.sub); 109 + 110 + client.isLoggedIn = true; 111 + } catch (error) { 112 + console.error('error finalizing login', error); 113 + if (did) { 114 + await resumeSession(did); 115 + } 116 + } 117 + } 118 + 119 + async function resumeSession(did: string) { 120 + try { 121 + const session = await getSession(did as `did:${string}`, { allowStale: true }); 122 + client.session = session; 123 + 124 + setAgentAndXRPC(session); 125 + 126 + await loadProfile(session.info.sub); 127 + 128 + client.isLoggedIn = true; 129 + } catch (error) { 130 + console.error('error resuming session', error); 131 + } 132 + } 133 + 134 + function setAgentAndXRPC(session: Session) { 135 + client.agent = new OAuthUserAgent(session); 136 + 137 + client.rpc = new XRPC({ handler: client.agent }); 138 + } 139 + 140 + async function loadProfile(actor: string) { 141 + // check if profile is already loaded in local storage 142 + const profile = localStorage.getItem(`profile-${actor}`); 143 + if (profile) { 144 + console.log('loading profile from local storage'); 145 + client.profile = JSON.parse(profile); 146 + return; 147 + } 148 + 149 + console.log('loading profile from server'); 150 + const response = await client.rpc?.request({ 151 + type: 'get', 152 + nsid: 'app.bsky.actor.getProfile', 153 + params: { actor } 154 + }); 155 + 156 + if (response) { 157 + client.profile = response.data; 158 + localStorage.setItem(`profile-${actor}`, JSON.stringify(response.data)); 159 + } 160 + } 161 + 162 + async function authorizationFlow(input: string) { 163 + const { identity, metadata: meta } = await resolveFromIdentity(input); 164 + 165 + const authUrl = await createAuthorizationUrl({ 166 + metadata: meta, 167 + identity: identity, 168 + scope: metadata.scope 169 + }); 170 + 171 + await new Promise((resolve) => setTimeout(resolve, 200)); 172 + 173 + window.location.assign(authUrl); 174 + 175 + await new Promise((_resolve, reject) => { 176 + const listener = () => { 177 + reject(new Error(`user aborted the login request`)); 178 + }; 179 + 180 + window.addEventListener('pageshow', listener, { once: true }); 181 + }); 182 + }
+16
src/lib/oauth/const.ts
··· 1 + import { base } from '$app/paths'; 2 + 3 + export const SITE_URL = 'https://flo-bit.dev'; 4 + 5 + export const metadata = { 6 + client_id: `${SITE_URL}${base}/client-metadata.json`, 7 + 8 + redirect_uris: [SITE_URL + base], 9 + 10 + scope: 'atproto transition:generic', 11 + grant_types: ['authorization_code', 'refresh_token'], 12 + response_types: ['code'], 13 + token_endpoint_auth_method: 'none', 14 + application_type: 'web', 15 + dpop_bound_access_tokens: true 16 + };
+4
src/lib/oauth/index.ts
··· 1 + import { client, login, logout, initClient } from './auth.svelte'; 2 + import { metadata } from './const'; 3 + 4 + export { metadata, client, login, logout, initClient };
+107
src/lib/website/EditingWebsiteWrapper.svelte
··· 1 + <script lang="ts"> 2 + import { setContext } from 'svelte'; 3 + import { BlueskyLogin, Button, Navbar, toast, Toaster } from './foxui'; 4 + import { client, login } from '$lib/oauth/auth.svelte.js'; 5 + 6 + import { settingsModal } from './components/head/EditHead.svelte'; 7 + import { base } from '$app/paths'; 8 + import HeadItem from './components/head/HeadItem.svelte'; 9 + import { setDataContext, setDidContext, setIsEditing, setUpdateFunctionsContext, type UpdateFunction } from './context'; 10 + 11 + let updateFunctions: UpdateFunction[] = $state([]); 12 + 13 + let { data, children } = $props(); 14 + 15 + setIsEditing(true); 16 + 17 + // svelte-ignore state_referenced_locally 18 + setDidContext(data.did); 19 + setUpdateFunctionsContext(updateFunctions); 20 + // svelte-ignore state_referenced_locally 21 + setContext('current', data.current); 22 + // svelte-ignore state_referenced_locally 23 + setDataContext(data.data); 24 + </script> 25 + 26 + {@render children?.()} 27 + 28 + <HeadItem collection="com.example.head" /> 29 + 30 + <Navbar class="bg-base-900 top-auto bottom-2 mx-4 mt-3 max-w-3xl rounded-full px-4 md:mx-auto"> 31 + <div class="flex items-center gap-2"> 32 + <Button size="iconLg" variant="ghost" class="backdrop-blur-none" href={base + '/'}> 33 + <span class="sr-only">home</span> 34 + <svg 35 + xmlns="http://www.w3.org/2000/svg" 36 + fill="none" 37 + viewBox="0 0 24 24" 38 + stroke-width="1.5" 39 + stroke="currentColor" 40 + > 41 + <path 42 + stroke-linecap="round" 43 + stroke-linejoin="round" 44 + d="m2.25 12 8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25" 45 + /> 46 + </svg> 47 + </Button> 48 + 49 + <Button 50 + size="iconLg" 51 + variant="ghost" 52 + class="backdrop-blur-none" 53 + onclick={() => (settingsModal.show = true)} 54 + > 55 + <svg 56 + xmlns="http://www.w3.org/2000/svg" 57 + fill="none" 58 + viewBox="0 0 24 24" 59 + stroke-width="1.5" 60 + stroke="currentColor" 61 + > 62 + <path 63 + stroke-linecap="round" 64 + stroke-linejoin="round" 65 + d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z" 66 + /> 67 + <path 68 + stroke-linecap="round" 69 + stroke-linejoin="round" 70 + d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" 71 + /> 72 + </svg> 73 + </Button> 74 + </div> 75 + <div class="flex items-center gap-2"> 76 + {#if client.isInitializing}{:else if client.isLoggedIn} 77 + <Button 78 + onclick={async () => { 79 + // check if did is same 80 + if (client?.profile?.did !== data.did) { 81 + toast('Not authorized', { 82 + description: 'Please login with the correct account' 83 + }); 84 + return; 85 + } 86 + 87 + for (const updateFunction of updateFunctions) { 88 + await updateFunction(); 89 + } 90 + 91 + toast('Saved', { 92 + description: 'Your website has been saved!' 93 + }); 94 + }}>Save</Button 95 + > 96 + {:else} 97 + <BlueskyLogin 98 + login={async (handle) => { 99 + await login(handle); 100 + return true; 101 + }} 102 + /> 103 + {/if} 104 + </div> 105 + </Navbar> 106 + 107 + <Toaster />
+19
src/lib/website/WebsiteWrapper.svelte
··· 1 + <script> 2 + import { setContext } from "svelte"; 3 + import { setDataContext, setDidContext, setIsEditing } from "./context"; 4 + 5 + let { data, children, handle } = $props(); 6 + 7 + // svelte-ignore state_referenced_locally 8 + setDidContext(data.did); 9 + // svelte-ignore state_referenced_locally 10 + setDataContext(data.data); 11 + // svelte-ignore state_referenced_locally 12 + setContext('current', data.current); 13 + 14 + setIsEditing(false); 15 + 16 + $inspect(data); 17 + </script> 18 + 19 + {@render children?.()}
+60
src/lib/website/components/head/EditHead.svelte
··· 1 + <script lang="ts" module> 2 + export const settingsModal = $state({ 3 + show: false, 4 + title: '', 5 + favicon: '', 6 + edited: false 7 + }); 8 + </script> 9 + 10 + <script lang="ts"> 11 + import { onDestroy, onMount } from 'svelte'; 12 + import Head from './Head.svelte'; 13 + import { Modal, Heading, Label, Input } from '../../foxui'; 14 + import { getUpdateRecordFunctionsContext } from '$lib/website/context'; 15 + 16 + let { data } = $props(); 17 + 18 + $effect(() => { 19 + settingsModal.title = data?.value?.title; 20 + settingsModal.favicon = data?.value?.favicon; 21 + }); 22 + 23 + const updateFunctions = getUpdateRecordFunctionsContext(); 24 + 25 + const update = async () => { 26 + if (!settingsModal.edited) return {}; 27 + 28 + settingsModal.edited = false; 29 + 30 + return { 31 + title: settingsModal.title, 32 + favicon: settingsModal.favicon 33 + }; 34 + }; 35 + 36 + onMount(() => { 37 + updateFunctions.push(update); 38 + }); 39 + 40 + onDestroy(() => { 41 + updateFunctions.splice(updateFunctions.indexOf(update), 1); 42 + }); 43 + 44 + $inspect(settingsModal); 45 + </script> 46 + 47 + <Modal bind:open={settingsModal.show}> 48 + <Heading>Website Settings</Heading> 49 + 50 + <Label>Title</Label> 51 + <Input 52 + type="text" 53 + bind:value={settingsModal.title} 54 + onkeydown={() => (settingsModal.edited = true)} 55 + /> 56 + </Modal> 57 + 58 + {#key settingsModal.title + settingsModal.favicon} 59 + <Head data={{ value: { title: settingsModal.title, favicon: settingsModal.favicon } }} /> 60 + {/key}
+38
src/lib/website/components/head/Head.svelte
··· 1 + <script lang="ts"> 2 + let { data } = $props(); 3 + </script> 4 + 5 + <svelte:head> 6 + {#if data?.value?.favicon} 7 + <link 8 + rel="icon" 9 + href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>{data 10 + .value.favicon}</text></svg>" 11 + /> 12 + {/if} 13 + 14 + <meta property="og:type" content="website" /> 15 + 16 + {#if data?.value?.description} 17 + <meta name="description" content={data.value.description} /> 18 + <meta property="og:description" content={data.value.description} /> 19 + <meta name="twitter:description" content={data.value.description} /> 20 + {/if} 21 + 22 + {#if data?.value?.title} 23 + <title>{data.value.title}</title> 24 + <meta property="og:title" content={data.value.title} /> 25 + <meta name="twitter:title" content={data.value.title} /> 26 + {/if} 27 + 28 + {#if data?.value?.image} 29 + <meta property="og:image" content={data.value.image} /> 30 + <meta name="twitter:image" content={data.value.image} /> 31 + <meta name="twitter:card" content="summary_large_image" /> 32 + {/if} 33 + 34 + {#if data?.value?.url} 35 + <meta property="twitter:domain" content={new URL(data.value.url).hostname} /> 36 + <meta property="twitter:url" content={data.value.url} /> 37 + {/if} 38 + </svelte:head>
+27
src/lib/website/components/head/HeadItem.svelte
··· 1 + <script lang="ts"> 2 + import { hasContext } from 'svelte'; 3 + import { SingleRecord } from '../single-record'; 4 + import Head from './Head.svelte'; 5 + import type { ElementType, IndividualCollections } from '$lib/website/data'; 6 + import { isEditing } from '$lib/website/context'; 7 + 8 + let { 9 + collection, 10 + rkey = 'self' 11 + }: { 12 + collection: IndividualCollections; 13 + rkey?: ElementType<IndividualCollections>; 14 + } = $props(); 15 + </script> 16 + 17 + <SingleRecord {collection} {rkey}> 18 + {#snippet child(data)} 19 + {#if isEditing()} 20 + {#await import('./EditHead.svelte') then { default: EditHead }} 21 + <EditHead {data} /> 22 + {/await} 23 + {:else} 24 + <Head {data} /> 25 + {/if} 26 + {/snippet} 27 + </SingleRecord>
+27
src/lib/website/components/image/Image.svelte
··· 1 + <script lang="ts"> 2 + import { base } from '$app/paths'; 3 + import { isEditing } from '$lib/website/context'; 4 + import { getContext } from 'svelte'; 5 + 6 + let { 7 + key, 8 + data, 9 + class: className, 10 + rkey 11 + }: { 12 + key: string; 13 + data: Record<string, any>; 14 + class?: string; 15 + rkey: string; 16 + } = $props(); 17 + 18 + $inspect(data); 19 + </script> 20 + 21 + {#if isEditing()} 22 + {#await import('./ImageEditor.svelte') then { default: ImageEditor }} 23 + <ImageEditor class={className} {key} data={data.value} {rkey} /> 24 + {/await} 25 + {:else} 26 + <img class={className} src={base + '/image/' + data.value?.[key]?.ref.$link} alt="" /> 27 + {/if}
+72
src/lib/website/components/image/ImageEditor.svelte
··· 1 + <script lang="ts"> 2 + import { getBlob, uploadImage } from '$lib/oauth/atproto'; 3 + import { getDidContext } from '$lib/website/context'; 4 + import { image_collection } from '$lib/website/data'; 5 + import { cn } from '$lib/website/foxui'; 6 + import Button from '$lib/website/foxui/button/Button.svelte'; 7 + 8 + let { 9 + key, 10 + data, 11 + class: className, 12 + rkey 13 + }: { 14 + key: string; 15 + data: Record<string, any>; 16 + class?: string; 17 + rkey: string; 18 + } = $props(); 19 + 20 + const did = getDidContext(); 21 + 22 + let image = $state(''); 23 + 24 + $effect(() => { 25 + console.log('getting blob for', data?.[key]?.ref.$link); 26 + getBlob({ cid: data?.[key]?.ref.$link, did }).then((url) => { 27 + image = url; 28 + }); 29 + }); 30 + $inspect(image); 31 + </script> 32 + 33 + <div class={cn(className)}> 34 + {#key image} 35 + {#if image} 36 + <img class="h-full w-full object-cover" src={image} alt="" /> 37 + {/if} 38 + {/key} 39 + 40 + <Button 41 + onclick={() => { 42 + const input = document.createElement('input'); 43 + input.type = 'file'; 44 + input.accept = 'image/*'; 45 + input.onchange = async () => { 46 + const file = input.files?.[0]; 47 + if (file) { 48 + // convert to blob 49 + const blob = new Blob([await file.arrayBuffer()], { type: file.type }); 50 + 51 + const blobInfo = await uploadImage({ 52 + image: blob, 53 + did, 54 + collection: image_collection, 55 + rkey, 56 + key 57 + }); 58 + 59 + data ??= {}; 60 + console.log('blobInfo', blobInfo); 61 + data[key] = blobInfo; 62 + 63 + getBlob({ cid: data?.[key]?.ref.$link, did }).then((url) => { 64 + image = url; 65 + }); 66 + } 67 + }; 68 + input.click(); 69 + }} 70 + class="absolute bottom-2 right-2">Edit</Button 71 + > 72 + </div>
+25
src/lib/website/components/image/ImageItem.svelte
··· 1 + <script lang="ts"> 2 + import { image_collection } from '$lib/website/data'; 3 + import { 4 + type ElementType, 5 + type IndividualCollections 6 + } from '$lib/website/types'; 7 + import { SingleRecord } from '../single-record'; 8 + import Image from './Image.svelte'; 9 + 10 + let { 11 + rkey = 'self', 12 + key, 13 + class: className 14 + }: { 15 + rkey?: ElementType<IndividualCollections>; 16 + key: string; 17 + class?: string; 18 + } = $props(); 19 + </script> 20 + 21 + <SingleRecord collection={image_collection} {rkey}> 22 + {#snippet child(data)} 23 + <Image {key} {data} class={className} {rkey} /> 24 + {/snippet} 25 + </SingleRecord>
+4
src/lib/website/components/index.ts
··· 1 + export * from './single-record'; 2 + export * from './markdown'; 3 + export * from './list'; 4 + export * from './plain-text';
+57
src/lib/website/components/list-record/EditSingleRecord.svelte
··· 1 + <script lang="ts"> 2 + import { onDestroy, onMount, type Snippet } from 'svelte'; 3 + import { 4 + getUpdateFunctionsContext, 5 + type UpdateRecordFunction, 6 + setUpdateRecordFunctionsContext 7 + } from '../../context'; 8 + import { putRecord } from '$lib/oauth/atproto'; 9 + import type { Record as ListRecord } from '@atproto/api/dist/client/types/com/atproto/repo/listRecords'; 10 + import { parseUri } from '$lib/website/utils'; 11 + 12 + let { 13 + data, 14 + child 15 + }: { 16 + data: ListRecord; 17 + child: Snippet<[ListRecord]>; 18 + } = $props(); 19 + 20 + let updateRecordFunctions: UpdateRecordFunction[] = $state([]); 21 + setUpdateRecordFunctionsContext(updateRecordFunctions); 22 + 23 + const updateFunctions = getUpdateFunctionsContext(); 24 + const update = async () => { 25 + const updated: Record<string, any> = {}; 26 + 27 + for (const updateFunction of updateRecordFunctions) { 28 + const updatedPart = await updateFunction(); 29 + for (const key in updatedPart) { 30 + updated[key] = updatedPart[key]; 31 + data.value[key] = updatedPart[key]; 32 + } 33 + } 34 + 35 + if (Object.keys(updated).length > 0 || !data.cid) { 36 + if (!data.value.createdAt) { 37 + data.value.createdAt = new Date().toISOString(); 38 + } 39 + data.value.updatedAt = new Date().toISOString(); 40 + 41 + const { collection, rkey } = parseUri(data.uri); 42 + await putRecord({ collection, rkey, record: data.value }); 43 + return true; 44 + } 45 + 46 + return false; 47 + }; 48 + 49 + onMount(() => { 50 + updateFunctions.push(update); 51 + }); 52 + onDestroy(() => { 53 + updateFunctions.splice(updateFunctions.indexOf(update), 1); 54 + }); 55 + </script> 56 + 57 + {@render child(data)}
+46
src/lib/website/components/list-record/SingleRecord.svelte
··· 1 + <script lang="ts"> 2 + import { getRecord } from '$lib/oauth/atproto'; 3 + import { getContext, type Snippet } from 'svelte'; 4 + import { type ElementType, type IndividualCollections } from '../../types'; 5 + import type { Record as ListRecord } from '@atproto/api/dist/client/types/com/atproto/repo/listRecords'; 6 + import { getDataContext, getDidContext, isEditing } from '$lib/website/context'; 7 + 8 + let { 9 + collection, 10 + rkey, 11 + child 12 + }: { 13 + collection: IndividualCollections; 14 + rkey: ElementType<IndividualCollections>; 15 + child: Snippet<[ListRecord]>; 16 + } = $props(); 17 + 18 + const data = getDataContext(); 19 + const did = getDidContext(); 20 + </script> 21 + 22 + {#if isEditing()} 23 + {#await import('./EditSingleRecord.svelte') then { default: EditSingleRecord }} 24 + {#await getRecord({ did, collection, rkey }) then record} 25 + <EditSingleRecord data={record}> 26 + {#snippet child(recordData)} 27 + {@render child(recordData)} 28 + {/snippet} 29 + </EditSingleRecord> 30 + {:catch error} 31 + <EditSingleRecord 32 + data={{ 33 + uri: 'at://' + did + '/' + collection + '/' + rkey, 34 + value: {}, 35 + cid: '' 36 + }} 37 + > 38 + {#snippet child(recordData)} 39 + {@render child(recordData)} 40 + {/snippet} 41 + </EditSingleRecord> 42 + {/await} 43 + {/await} 44 + {:else} 45 + {@render child(data?.[collection]?.[rkey])} 46 + {/if}
+2
src/lib/website/components/list-record/index.ts
··· 1 + export { default as EditSingleRecord } from './EditSingleRecord.svelte'; 2 + export { default as SingleRecord } from './SingleRecord.svelte';
+62
src/lib/website/components/list/EditingList.svelte
··· 1 + <script lang="ts"> 2 + import { getContext, type Snippet } from 'svelte'; 3 + import { SingleRecord } from '..'; 4 + import { TID } from '@atproto/common-web'; 5 + import type { Record as ListRecord } from '@atproto/api/dist/client/types/com/atproto/repo/listRecords'; 6 + import { deleteRecord } from '$lib/oauth/atproto'; 7 + import { parseUri } from '../../utils'; 8 + import type { ListCollections } from '$lib/website/types'; 9 + 10 + let { 11 + records, 12 + collection, 13 + item, 14 + addItem, 15 + empty 16 + }: { 17 + records: Record<string, ListRecord>; 18 + collection: ListCollections; 19 + item: Snippet<[any, any]>; 20 + addItem: Snippet<[any]>; 21 + empty?: Snippet; 22 + } = $props(); 23 + 24 + let allRecords = $state(records); 25 + 26 + $inspect(records); 27 + 28 + const did = getContext('did') as string; 29 + </script> 30 + 31 + {#if Object.keys(allRecords).length === 0 && empty} 32 + {@render empty()} 33 + {:else} 34 + {#each Object.values(allRecords) as itemData} 35 + <SingleRecord data={itemData} collection={collection} rkey={parseUri(itemData.uri as string).rkey}> 36 + {#snippet child(data)} 37 + {@render item(data, async () => { 38 + if (!itemData.cid) { 39 + const { rkey } = parseUri(itemData.uri as string); 40 + delete allRecords[rkey]; 41 + return; 42 + } 43 + const { rkey } = parseUri(itemData.uri as string); 44 + await deleteRecord({ did, collection, rkey }); 45 + 46 + delete allRecords[rkey]; 47 + })} 48 + {/snippet} 49 + </SingleRecord> 50 + {/each} 51 + {/if} 52 + 53 + {@render addItem?.((record) => { 54 + const rkey = TID.nextStr(); 55 + 56 + allRecords[rkey] = { 57 + cid: '', 58 + uri: 'at://' + did + '/' + collection + '/' + rkey, 59 + value: record ?? {} 60 + }; 61 + console.log(allRecords); 62 + })}
+36
src/lib/website/components/list/List.svelte
··· 1 + <script lang="ts"> 2 + import { getContext, hasContext, type Snippet } from 'svelte'; 3 + import { listRecords } from '$lib/oauth/atproto'; 4 + import EditingList from './EditingList.svelte'; 5 + import type { ListCollections } from '$lib/website/types'; 6 + import { getDataContext, isEditing } from '$lib/website/context'; 7 + 8 + let { 9 + collection, 10 + item, 11 + addItem, 12 + empty 13 + }: { 14 + collection: ListCollections; 15 + item: Snippet<[any, any]>; 16 + addItem: Snippet<[any]>; 17 + empty?: Snippet; 18 + } = $props(); 19 + 20 + const data = getDataContext(); 21 + const did = getContext('did') as string; 22 + </script> 23 + 24 + {#if isEditing()} 25 + {#await listRecords({ did, collection }) then records} 26 + <EditingList {records} {collection} {item} {addItem} {empty} /> 27 + {:catch error} 28 + {error} 29 + {/await} 30 + {:else if !data[collection] || Object.keys(data[collection]).length === 0} 31 + {@render empty?.()} 32 + {:else} 33 + {#each Object.values(data[collection]) as itemData} 34 + {@render item(itemData, () => {})} 35 + {/each} 36 + {/if}
+2
src/lib/website/components/list/index.ts
··· 1 + export { default as EditingList } from './EditingList.svelte'; 2 + export { default as List } from './List.svelte';
+25
src/lib/website/components/markdown/MarkdownItem.svelte
··· 1 + <script lang="ts"> 2 + import { type ElementType, type IndividualCollections } from '../../types'; 3 + import { SingleRecord } from '..'; 4 + import MarkdownText from './MarkdownText.svelte'; 5 + 6 + let { 7 + collection, 8 + rkey, 9 + key, 10 + placeholder, 11 + defaultContent 12 + }: { 13 + collection: IndividualCollections; 14 + rkey: ElementType<IndividualCollections>; 15 + key: string; 16 + placeholder?: string; 17 + defaultContent?: string; 18 + } = $props(); 19 + </script> 20 + 21 + <SingleRecord {collection} {rkey}> 22 + {#snippet child(data)} 23 + <MarkdownText {key} {placeholder} {defaultContent} {data} /> 24 + {/snippet} 25 + </SingleRecord>
+27
src/lib/website/components/markdown/MarkdownText.svelte
··· 1 + <script lang="ts"> 2 + import { isEditing } from '$lib/website/context'; 3 + import { marked } from 'marked'; 4 + import { getContext } from 'svelte'; 5 + 6 + let { 7 + key, 8 + data, 9 + placeholder, 10 + defaultContent, 11 + class: className 12 + }: { 13 + key: string; 14 + data: Record<string, any>; 15 + placeholder?: string; 16 + defaultContent?: string; 17 + class?: string; 18 + } = $props(); 19 + </script> 20 + 21 + {#if isEditing()} 22 + {#await import('./MarkdownTextEditor.svelte') then { default: MarkdownTextEditor }} 23 + <MarkdownTextEditor {key} data={data.value} {placeholder} {defaultContent} /> 24 + {/await} 25 + {:else} 26 + {@html marked.parse(data?.value?.[key] ?? defaultContent ?? ('' as string))} 27 + {/if}
+137
src/lib/website/components/markdown/MarkdownTextEditor.svelte
··· 1 + <script lang="ts"> 2 + import { onDestroy, onMount } from 'svelte'; 3 + import { Editor, type Content, type Extensions } from '@tiptap/core'; 4 + import StarterKit from '@tiptap/starter-kit'; 5 + import Image from '@tiptap/extension-image'; 6 + import Placeholder from '@tiptap/extension-placeholder'; 7 + import Link from '@tiptap/extension-link'; 8 + import { marked } from 'marked'; 9 + import { generateJSON } from '@tiptap/core'; 10 + import TurndownService from 'turndown'; 11 + import { RichTextLink } from './extensions/RichTextLink'; 12 + import { getUpdateRecordFunctionsContext } from '../../context'; 13 + 14 + let element: HTMLElement | undefined = $state(); 15 + let editor: Editor | null = $state(null); 16 + 17 + let loaded = $state(false); 18 + 19 + let edited = $state(false); 20 + 21 + let { 22 + key, 23 + data, 24 + placeholder = '', 25 + defaultContent = '' 26 + }: { 27 + key: string; 28 + data: Record<string, any>; 29 + placeholder?: string; 30 + defaultContent?: string; 31 + } = $props(); 32 + 33 + const updateFunctions = getUpdateRecordFunctionsContext(); 34 + 35 + const update = async () => { 36 + if (!edited || !editor) return {}; 37 + 38 + edited = false; 39 + 40 + const html = editor.getHTML(); 41 + 42 + var turndownService = new TurndownService({ 43 + headingStyle: 'atx', 44 + bulletListMarker: '-' 45 + }); 46 + const markdown = turndownService.turndown(html); 47 + 48 + edited = false; 49 + 50 + return { 51 + [key]: markdown 52 + }; 53 + }; 54 + 55 + onMount(async () => { 56 + if (!element || editor) return; 57 + 58 + let json: Content = ''; 59 + 60 + try { 61 + let html = await marked.parse(data[key] ?? (defaultContent as string)); 62 + 63 + // parse to json 64 + json = generateJSON(html, [ 65 + StarterKit.configure(), 66 + Image.configure(), 67 + RichTextLink.configure({ 68 + openOnClick: false 69 + }) 70 + ]); 71 + } catch (error) { 72 + console.error(error); 73 + } 74 + 75 + let extensions: Extensions = [ 76 + StarterKit.configure(), 77 + Image.configure(), 78 + Link.configure({ 79 + openOnClick: false 80 + }) 81 + ]; 82 + 83 + if (placeholder) { 84 + extensions.push( 85 + Placeholder.configure({ 86 + placeholder: placeholder 87 + }) 88 + ); 89 + } 90 + 91 + editor = new Editor({ 92 + element: element, 93 + extensions: extensions, 94 + onTransaction: () => { 95 + editor = editor; 96 + }, 97 + onUpdate: () => { 98 + edited = true; 99 + }, 100 + 101 + content: json, 102 + 103 + editorProps: { 104 + attributes: { 105 + class: 'outline-none' 106 + } 107 + } 108 + }); 109 + 110 + updateFunctions.push(update); 111 + 112 + loaded = true; 113 + }); 114 + 115 + onDestroy(() => { 116 + if (editor) { 117 + editor.destroy(); 118 + } 119 + 120 + updateFunctions.splice(updateFunctions.indexOf(update), 1); 121 + }); 122 + </script> 123 + 124 + <div bind:this={element}></div> 125 + 126 + <style> 127 + :global(.tiptap p.is-editor-empty:first-child::before) { 128 + color: var(--color-base-800); 129 + content: attr(data-placeholder); 130 + float: left; 131 + height: 0; 132 + pointer-events: none; 133 + } 134 + :global(.dark .tiptap p.is-editor-empty:first-child::before) { 135 + color: var(--color-base-200); 136 + } 137 + </style>
+125
src/lib/website/components/markdown/extensions/RichTextLink.ts
··· 1 + import { InputRule, markInputRule, markPasteRule, PasteRule } from '@tiptap/core'; 2 + import { Link } from '@tiptap/extension-link'; 3 + 4 + import type { LinkOptions } from '@tiptap/extension-link'; 5 + 6 + /** 7 + * The input regex for Markdown links with title support, and multiple quotation marks (required 8 + * in case the `Typography` extension is being included). 9 + */ 10 + const inputRegex = /(?:^|\s)\[([^\]]*)?\]\((\S+)(?: ["“](.+)["”])?\)$/i; 11 + 12 + /** 13 + * The paste regex for Markdown links with title support, and multiple quotation marks (required 14 + * in case the `Typography` extension is being included). 15 + */ 16 + const pasteRegex = /(?:^|\s)\[([^\]]*)?\]\((\S+)(?: ["“](.+)["”])?\)/gi; 17 + 18 + /** 19 + * Input rule built specifically for the `Link` extension, which ignores the auto-linked URL in 20 + * parentheses (e.g., `(https://doist.dev)`). 21 + * 22 + * @see https://github.com/ueberdosis/tiptap/discussions/1865 23 + */ 24 + function linkInputRule(config: Parameters<typeof markInputRule>[0]) { 25 + const defaultMarkInputRule = markInputRule(config); 26 + 27 + return new InputRule({ 28 + find: config.find, 29 + handler(props) { 30 + const { tr } = props.state; 31 + 32 + defaultMarkInputRule.handler(props); 33 + tr.setMeta('preventAutolink', true); 34 + } 35 + }); 36 + } 37 + 38 + /** 39 + * Paste rule built specifically for the `Link` extension, which ignores the auto-linked URL in 40 + * parentheses (e.g., `(https://doist.dev)`). This extension was inspired from the multiple 41 + * implementations found in a Tiptap discussion at GitHub. 42 + * 43 + * @see https://github.com/ueberdosis/tiptap/discussions/1865 44 + */ 45 + function linkPasteRule(config: Parameters<typeof markPasteRule>[0]) { 46 + const defaultMarkPasteRule = markPasteRule(config); 47 + 48 + return new PasteRule({ 49 + find: config.find, 50 + handler(props) { 51 + const { tr } = props.state; 52 + 53 + defaultMarkPasteRule.handler(props); 54 + tr.setMeta('preventAutolink', true); 55 + } 56 + }); 57 + } 58 + 59 + /** 60 + * The options available to customize the `RichTextLink` extension. 61 + */ 62 + type RichTextLinkOptions = LinkOptions; 63 + 64 + /** 65 + * Custom extension that extends the built-in `Link` extension to add additional input/paste rules 66 + * for converting the Markdown link syntax (i.e. `[Doist](https://doist.com)`) into links, and also 67 + * adds support for the `title` attribute. 68 + */ 69 + const RichTextLink = Link.extend<RichTextLinkOptions>({ 70 + inclusive: false, 71 + addOptions() { 72 + return { 73 + ...this.parent?.(), 74 + openOnClick: 'whenNotEditable' 75 + }; 76 + }, 77 + addAttributes() { 78 + return { 79 + ...this.parent?.(), 80 + title: { 81 + default: null 82 + } 83 + }; 84 + }, 85 + addInputRules() { 86 + return [ 87 + linkInputRule({ 88 + find: inputRegex, 89 + type: this.type, 90 + 91 + // We need to use `pop()` to remove the last capture groups from the match to 92 + // satisfy Tiptap's `markPasteRule` expectation of having the content as the last 93 + // capture group in the match (this makes the attribute order important) 94 + getAttributes(match) { 95 + return { 96 + title: match.pop()?.trim(), 97 + href: match.pop()?.trim() 98 + }; 99 + } 100 + }) 101 + ]; 102 + }, 103 + addPasteRules() { 104 + return [ 105 + linkPasteRule({ 106 + find: pasteRegex, 107 + type: this.type, 108 + 109 + // We need to use `pop()` to remove the last capture groups from the match to 110 + // satisfy Tiptap's `markInputRule` expectation of having the content as the last 111 + // capture group in the match (this makes the attribute order important) 112 + getAttributes(match) { 113 + return { 114 + title: match.pop()?.trim(), 115 + href: match.pop()?.trim() 116 + }; 117 + } 118 + }) 119 + ]; 120 + } 121 + }); 122 + 123 + export { RichTextLink }; 124 + 125 + export type { RichTextLinkOptions };
+3
src/lib/website/components/markdown/index.ts
··· 1 + export { default as MarkdownItem } from './MarkdownItem.svelte'; 2 + export { default as MarkdownText } from './MarkdownText.svelte'; 3 + export { default as MarkdownTextEditor } from './MarkdownTextEditor.svelte';
+26
src/lib/website/components/plain-text/PlainText.svelte
··· 1 + <script lang="ts"> 2 + import { isEditing } from '$lib/website/context'; 3 + import { getContext } from 'svelte'; 4 + 5 + let { 6 + key, 7 + data, 8 + placeholder, 9 + defaultContent, 10 + class: className 11 + }: { 12 + key: string; 13 + data: Record<string, any>; 14 + placeholder?: string; 15 + defaultContent?: string; 16 + class?: string; 17 + } = $props(); 18 + </script> 19 + 20 + {#if isEditing()} 21 + {#await import('./PlainTextEditor.svelte') then { default: PlainTextEditor }} 22 + <PlainTextEditor class={className} {key} data={data.value} {placeholder} {defaultContent} /> 23 + {/await} 24 + {:else} 25 + <span class={className}>{data?.value?.[key] || defaultContent || placeholder}</span> 26 + {/if}
+98
src/lib/website/components/plain-text/PlainTextEditor.svelte
··· 1 + <script lang="ts"> 2 + import { onDestroy, onMount } from 'svelte'; 3 + import { Editor, type Extensions } from '@tiptap/core'; 4 + import Placeholder from '@tiptap/extension-placeholder'; 5 + import Paragraph from '@tiptap/extension-paragraph'; 6 + import Document from '@tiptap/extension-document'; 7 + import Text from '@tiptap/extension-text'; 8 + import { getUpdateRecordFunctionsContext } from '../../context'; 9 + 10 + let element: HTMLElement | undefined = $state(); 11 + let editor: Editor | null = $state(null); 12 + 13 + let edited = $state(false); 14 + 15 + const updateFunctions = getUpdateRecordFunctionsContext(); 16 + 17 + let { 18 + key, 19 + data, 20 + class: className, 21 + placeholder = '', 22 + defaultContent = '' 23 + }: { 24 + key: string; 25 + data: Record<string, any>; 26 + class?: string; 27 + placeholder?: string; 28 + defaultContent?: string; 29 + } = $props(); 30 + 31 + const update = async () => { 32 + if (!edited || !editor) return {}; 33 + 34 + edited = false; 35 + 36 + return { 37 + [key]: editor.getText() 38 + }; 39 + }; 40 + 41 + onMount(async () => { 42 + if (!element || editor) return; 43 + 44 + updateFunctions.push(update); 45 + 46 + let extensions: Extensions = [Document.configure(), Paragraph.configure(), Text.configure()]; 47 + 48 + if (placeholder) { 49 + extensions.push( 50 + Placeholder.configure({ 51 + placeholder: placeholder 52 + }) 53 + ); 54 + } 55 + 56 + editor = new Editor({ 57 + element: element, 58 + extensions: extensions, 59 + onTransaction: () => { 60 + editor = editor; 61 + }, 62 + onUpdate: () => { 63 + edited = true; 64 + }, 65 + 66 + content: data[key] ?? defaultContent, 67 + 68 + editorProps: { 69 + attributes: { 70 + class: 'outline-none pointer-events-auto' 71 + } 72 + } 73 + }); 74 + }); 75 + 76 + onDestroy(() => { 77 + if (editor) { 78 + editor.destroy(); 79 + } 80 + 81 + updateFunctions.splice(updateFunctions.indexOf(update), 1); 82 + }); 83 + </script> 84 + 85 + <span class={className} bind:this={element}></span> 86 + 87 + <style> 88 + :global(.tiptap p.is-editor-empty:first-child::before) { 89 + color: var(--color-base-800); 90 + content: attr(data-placeholder); 91 + float: left; 92 + height: 0; 93 + pointer-events: none; 94 + } 95 + :global(.dark .tiptap p.is-editor-empty:first-child::before) { 96 + color: var(--color-base-200); 97 + } 98 + </style>
+25
src/lib/website/components/plain-text/PlainTextItem.svelte
··· 1 + <script lang="ts"> 2 + import { type ElementType, type IndividualCollections } from '../../types'; 3 + import { SingleRecord } from '..'; 4 + import PlainText from './PlainText.svelte'; 5 + 6 + let { 7 + collection, 8 + rkey = 'self', 9 + key, 10 + placeholder, 11 + defaultContent 12 + }: { 13 + collection: IndividualCollections; 14 + rkey?: ElementType<IndividualCollections>; 15 + key: string; 16 + placeholder?: string; 17 + defaultContent?: string; 18 + } = $props(); 19 + </script> 20 + 21 + <SingleRecord {collection} {rkey}> 22 + {#snippet child(data)} 23 + <PlainText {key} {placeholder} {defaultContent} {data} /> 24 + {/snippet} 25 + </SingleRecord>
+3
src/lib/website/components/plain-text/index.ts
··· 1 + export { default as PlainTextItem } from './PlainTextItem.svelte'; 2 + export { default as PlainTextEditor } from './PlainTextEditor.svelte'; 3 + export { default as PlainText } from './PlainText.svelte';
+57
src/lib/website/components/single-record/EditSingleRecord.svelte
··· 1 + <script lang="ts"> 2 + import { onDestroy, onMount, type Snippet } from 'svelte'; 3 + import { 4 + getUpdateFunctionsContext, 5 + type UpdateRecordFunction, 6 + setUpdateRecordFunctionsContext 7 + } from '../../context'; 8 + import { putRecord } from '$lib/oauth/atproto'; 9 + import type { Record as ListRecord } from '@atproto/api/dist/client/types/com/atproto/repo/listRecords'; 10 + import { parseUri } from '$lib/website/utils'; 11 + 12 + let { 13 + data, 14 + child 15 + }: { 16 + data: ListRecord; 17 + child: Snippet<[ListRecord]>; 18 + } = $props(); 19 + 20 + let updateRecordFunctions: UpdateRecordFunction[] = $state([]); 21 + setUpdateRecordFunctionsContext(updateRecordFunctions); 22 + 23 + const updateFunctions = getUpdateFunctionsContext(); 24 + const update = async () => { 25 + const updated: Record<string, any> = {}; 26 + 27 + for (const updateFunction of updateRecordFunctions) { 28 + const updatedPart = await updateFunction(); 29 + for (const key in updatedPart) { 30 + updated[key] = updatedPart[key]; 31 + data.value[key] = updatedPart[key]; 32 + } 33 + } 34 + 35 + if (Object.keys(updated).length > 0 || !data.cid) { 36 + if (!data.value.createdAt) { 37 + data.value.createdAt = new Date().toISOString(); 38 + } 39 + data.value.updatedAt = new Date().toISOString(); 40 + 41 + const { collection, rkey } = parseUri(data.uri); 42 + await putRecord({ collection, rkey, record: data.value }); 43 + return true; 44 + } 45 + 46 + return false; 47 + }; 48 + 49 + onMount(() => { 50 + updateFunctions.push(update); 51 + }); 52 + onDestroy(() => { 53 + updateFunctions.splice(updateFunctions.indexOf(update), 1); 54 + }); 55 + </script> 56 + 57 + {@render child(data)}
+48
src/lib/website/components/single-record/SingleRecord.svelte
··· 1 + <script lang="ts"> 2 + import { getRecord } from '$lib/oauth/atproto'; 3 + import { type Snippet } from 'svelte'; 4 + import { type ElementType, type IndividualCollections } from '../../types'; 5 + import type { Record as ListRecord } from '@atproto/api/dist/client/types/com/atproto/repo/listRecords'; 6 + import { getDataContext, getDidContext, isEditing } from '$lib/website/context'; 7 + 8 + let { 9 + collection, 10 + rkey, 11 + child 12 + }: { 13 + collection: IndividualCollections; 14 + rkey: ElementType<IndividualCollections>; 15 + child: Snippet<[ListRecord]>; 16 + } = $props(); 17 + 18 + const data = getDataContext(); 19 + const did = getDidContext(); 20 + 21 + $inspect(data['app.bsky.actor.profile']); 22 + </script> 23 + 24 + {#if isEditing()} 25 + {#await import('./EditSingleRecord.svelte') then { default: EditSingleRecord }} 26 + {#await getRecord({ did, collection, rkey }) then record} 27 + <EditSingleRecord data={record}> 28 + {#snippet child(recordData)} 29 + {@render child(recordData)} 30 + {/snippet} 31 + </EditSingleRecord> 32 + {:catch error} 33 + <EditSingleRecord 34 + data={{ 35 + uri: 'at://' + did + '/' + collection + '/' + rkey, 36 + value: {}, 37 + cid: '' 38 + }} 39 + > 40 + {#snippet child(recordData)} 41 + {@render child(recordData)} 42 + {/snippet} 43 + </EditSingleRecord> 44 + {/await} 45 + {/await} 46 + {:else} 47 + {@render child(data?.[collection]?.[rkey])} 48 + {/if}
+2
src/lib/website/components/single-record/index.ts
··· 1 + export { default as EditSingleRecord } from './EditSingleRecord.svelte'; 2 + export { default as SingleRecord } from './SingleRecord.svelte';
+17
src/lib/website/context.ts
··· 1 + import { createContext } from 'svelte'; 2 + import type { DownloadedData } from './types'; 3 + 4 + export type UpdateFunction = () => boolean | Promise<boolean>; 5 + 6 + export type UpdateRecordFunction = () => Record<string, unknown> | Promise<Record<string, unknown>>; 7 + 8 + export const [getUpdateFunctionsContext, setUpdateFunctionsContext] = 9 + createContext<UpdateFunction[]>(); 10 + export const [getUpdateRecordFunctionsContext, setUpdateRecordFunctionsContext] = 11 + createContext<UpdateRecordFunction[]>(); 12 + 13 + export const [getDidContext, setDidContext] = createContext<string>(); 14 + 15 + export const [getDataContext, setDataContext] = createContext<DownloadedData>(); 16 + 17 + export const [isEditing, setIsEditing] = createContext<boolean>();
+8
src/lib/website/data.ts
··· 1 + export const image_collection = 'com.example.image' as const; 2 + 3 + // collections and records we want to grab 4 + export const data = { 5 + 'app.bsky.actor.profile': ['self'], 6 + 7 + 'com.example.bento': 'all' 8 + } as const;
+72
src/lib/website/foxui/avatar/Avatar.svelte
··· 1 + <script lang="ts"> 2 + import { cn } from '..'; 3 + import { Avatar as AvatarPrimitive, type WithoutChildrenOrChild } from 'bits-ui'; 4 + 5 + let { 6 + src, 7 + alt, 8 + fallback, 9 + ref = $bindable(null), 10 + 11 + imageRef = $bindable(null), 12 + imageClass, 13 + 14 + fallbackRef = $bindable(null), 15 + fallbackClass, 16 + 17 + useThemeColor = false, 18 + 19 + class: className, 20 + ...restProps 21 + }: WithoutChildrenOrChild<AvatarPrimitive.RootProps> & { 22 + fallback?: string; 23 + imageRef?: HTMLImageElement | null; 24 + imageClass?: string; 25 + fallbackRef?: HTMLElement | null; 26 + fallbackClass?: string; 27 + 28 + src?: string; 29 + alt?: string; 30 + 31 + useThemeColor?: boolean; 32 + } = $props(); 33 + </script> 34 + 35 + <div 36 + class={cn( 37 + 'border-base-300 bg-base-200 text-base-900 dark:border-base-800 dark:bg-base-900 dark:text-base-50 relative isolate flex size-10 shrink-0 overflow-hidden rounded-full border', 38 + className 39 + )} 40 + {...restProps} 41 + bind:this={ref} 42 + > 43 + {#if fallback} 44 + <span class="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 font-medium" 45 + >{fallback}</span 46 + > 47 + {:else} 48 + <svg 49 + xmlns="http://www.w3.org/2000/svg" 50 + viewBox="0 0 24 24" 51 + fill="currentColor" 52 + class="text-base-400 dark:text-base-600 absolute left-1/2 top-1/2 mt-[15%] size-full -translate-x-1/2 -translate-y-1/2" 53 + > 54 + <path 55 + fill-rule="evenodd" 56 + d="M7.5 6a4.5 4.5 0 1 1 9 0 4.5 4.5 0 0 1-9 0ZM3.751 20.105a8.25 8.25 0 0 1 16.498 0 .75.75 0 0 1-.437.695A18.683 18.683 0 0 1 12 22.5c-2.786 0-5.433-.608-7.812-1.7a.75.75 0 0 1-.437-.695Z" 57 + clip-rule="evenodd" 58 + /> 59 + </svg> 60 + {/if} 61 + {#if src} 62 + <img 63 + bind:this={imageRef} 64 + {src} 65 + alt={alt ?? ''} 66 + class="z-10 aspect-square size-full object-cover" 67 + onerror={() => { 68 + imageRef?.classList.add('hidden'); 69 + }} 70 + /> 71 + {/if} 72 + </div>
+3
src/lib/website/foxui/avatar/index.ts
··· 1 + import Avatar from './Avatar.svelte'; 2 + 3 + export { Avatar };
+23
src/lib/website/foxui/bluesky-login/BlueskyLogin.svelte
··· 1 + <script lang="ts"> 2 + import { Button } from '../button'; 3 + import { BlueskyLoginModal, blueskyLoginModalState, type BlueskyLoginProps } from '.'; 4 + 5 + let { login, formAction, formMethod }: BlueskyLoginProps = $props(); 6 + </script> 7 + 8 + <Button onclick={() => blueskyLoginModalState.show()}> 9 + <svg 10 + fill="currentColor" 11 + xmlns="http://www.w3.org/2000/svg" 12 + viewBox="-40 -40 680 620" 13 + version="1.1" 14 + aria-hidden="true" 15 + > 16 + <path 17 + d="m135.72 44.03c66.496 49.921 138.02 151.14 164.28 205.46 26.262-54.316 97.782-155.54 164.28-205.46 47.98-36.021 125.72-63.892 125.72 24.795 0 17.712-10.155 148.79-16.111 170.07-20.703 73.984-96.144 92.854-163.25 81.433 117.3 19.964 147.14 86.092 82.697 152.22-122.39 125.59-175.91-31.511-189.63-71.766-2.514-7.3797-3.6904-10.832-3.7077-7.8964-0.0174-2.9357-1.1937 0.51669-3.7077 7.8964-13.714 40.255-67.233 197.36-189.63 71.766-64.444-66.128-34.605-132.26 82.697-152.22-67.108 11.421-142.55-7.4491-163.25-81.433-5.9562-21.282-16.111-152.36-16.111-170.07 0-88.687 77.742-60.816 125.72-24.795z" 18 + /> 19 + </svg> 20 + Login 21 + </Button> 22 + 23 + <BlueskyLoginModal {login} {formAction} {formMethod} />
+141
src/lib/website/foxui/bluesky-login/BlueskyLoginModal.svelte
··· 1 + <script lang="ts" module> 2 + export const blueskyLoginModalState = $state({ 3 + open: false, 4 + show: () => (blueskyLoginModalState.open = true), 5 + hide: () => (blueskyLoginModalState.open = false) 6 + }); 7 + </script> 8 + 9 + <script lang="ts"> 10 + import { Button, Modal, Subheading, Label, Input, Avatar } from '..'; 11 + import type { BlueskyLoginProps } from '.'; 12 + 13 + let value = $state(''); 14 + let error: string | null = $state(null); 15 + let loading = $state(false); 16 + 17 + let { login, formAction, formMethod = 'get' }: BlueskyLoginProps = $props(); 18 + 19 + async function onLogin(handle: string) { 20 + if (loading || !login) return; 21 + 22 + loading = true; 23 + error = null; 24 + 25 + try { 26 + const hide = await login(handle); 27 + 28 + if (hide) { 29 + blueskyLoginModalState.hide(); 30 + value = ''; 31 + } 32 + } catch (err) { 33 + error = err instanceof Error ? err.message : String(err); 34 + } finally { 35 + loading = false; 36 + } 37 + } 38 + 39 + async function onSubmit(evt: Event) { 40 + if (formAction || !login) return; 41 + evt.preventDefault(); 42 + 43 + await onLogin(value); 44 + } 45 + 46 + let input: HTMLInputElement | null = $state(null); 47 + 48 + let lastLogin: { handle: string; avatar: string } | null = $state(null); 49 + 50 + $effect(() => { 51 + let lastLoginDid = localStorage.getItem('last-login'); 52 + 53 + if (lastLoginDid) { 54 + let profile = localStorage.getItem(`profile-${lastLoginDid}`); 55 + 56 + if (profile) { 57 + lastLogin = JSON.parse(profile); 58 + } 59 + } 60 + }); 61 + </script> 62 + 63 + <Modal 64 + bind:open={blueskyLoginModalState.open} 65 + class="max-w-sm gap-2 p-4 sm:p-6" 66 + onOpenAutoFocus={(e: Event) => { 67 + e.preventDefault(); 68 + input?.focus(); 69 + }} 70 + > 71 + <form onsubmit={onSubmit} action={formAction} method={formMethod} class="flex flex-col gap-2"> 72 + <Subheading class="mb-1 inline-flex items-center gap-2 text-xl font-bold"> 73 + <svg 74 + fill="currentColor" 75 + xmlns="http://www.w3.org/2000/svg" 76 + viewBox="-40 -40 680 620" 77 + version="1.1" 78 + class={['text-accent-600 dark:text-accent-400 size-6']} 79 + aria-hidden="true" 80 + > 81 + <path 82 + d="m135.72 44.03c66.496 49.921 138.02 151.14 164.28 205.46 26.262-54.316 97.782-155.54 164.28-205.46 47.98-36.021 125.72-63.892 125.72 24.795 0 17.712-10.155 148.79-16.111 170.07-20.703 73.984-96.144 92.854-163.25 81.433 117.3 19.964 147.14 86.092 82.697 152.22-122.39 125.59-175.91-31.511-189.63-71.766-2.514-7.3797-3.6904-10.832-3.7077-7.8964-0.0174-2.9357-1.1937 0.51669-3.7077 7.8964-13.714 40.255-67.233 197.36-189.63 71.766-64.444-66.128-34.605-132.26 82.697-152.22-67.108 11.421-142.55-7.4491-163.25-81.433-5.9562-21.282-16.111-152.36-16.111-170.07 0-88.687 77.742-60.816 125.72-24.795z" 83 + /> 84 + </svg> 85 + Login with Bluesky</Subheading 86 + > 87 + 88 + <div class="text-base-600 dark:text-base-400 text-xs leading-5"> 89 + Don't have an account? 90 + <br /> 91 + <a 92 + href="https://bsky.app" 93 + target="_blank" 94 + class="text-accent-600 dark:text-accent-400 dark:hover:text-accent-500 hover:text-accent-500 font-medium transition-colors" 95 + > 96 + Sign up on bluesky 97 + </a>, then come back here. 98 + </div> 99 + 100 + {#if lastLogin} 101 + <Label for="bluesky-handle" class="mt-4 text-sm">Recent login:</Label> 102 + <Button 103 + class="max-w-xs justify-start overflow-x-hidden truncate" 104 + variant="primary" 105 + onclick={() => onLogin(lastLogin?.handle ?? '')} 106 + disabled={loading} 107 + > 108 + <Avatar src={lastLogin.avatar} class="size-6" /> 109 + 110 + <div 111 + class="text-accent-600 dark:text-accent-400 text-md max-w-full overflow-x-hidden truncate font-semibold" 112 + > 113 + <p>{loading ? 'Loading...' : lastLogin.handle}</p> 114 + </div> 115 + </Button> 116 + {/if} 117 + 118 + <div class="mt-4 w-full"> 119 + <Label for="bluesky-handle" class="text-sm">Your handle</Label> 120 + <div class="mt-2"> 121 + <Input 122 + bind:ref={input} 123 + type="text" 124 + name="bluesky-handle" 125 + id="bluesky-handle" 126 + placeholder="yourname.bsky.social" 127 + class="w-full" 128 + bind:value 129 + /> 130 + </div> 131 + </div> 132 + 133 + {#if error} 134 + <p class="text-accent-500 mt-2 text-sm font-medium">{error}</p> 135 + {/if} 136 + 137 + <Button type="submit" class="ml-auto mt-2 w-full md:w-auto" disabled={loading} 138 + >{loading ? 'Loading...' : 'Login'}</Button 139 + > 140 + </form> 141 + </Modal>
+9
src/lib/website/foxui/bluesky-login/index.ts
··· 1 + export { default as BlueskyLoginModal } from './BlueskyLoginModal.svelte'; 2 + export { blueskyLoginModalState } from './BlueskyLoginModal.svelte'; 3 + export { default as BlueskyLogin } from './BlueskyLogin.svelte'; 4 + 5 + export type BlueskyLoginProps = { 6 + login?: (handle: string) => Promise<boolean | undefined>; 7 + formAction?: string; 8 + formMethod?: 'dialog' | 'get' | 'post' | 'DIALOG' | 'GET' | 'POST' | null; 9 + };
+97
src/lib/website/foxui/button/Button.svelte
··· 1 + <script lang="ts" module> 2 + import type { WithElementRef } from 'bits-ui'; 3 + import type { HTMLAnchorAttributes, HTMLButtonAttributes } from 'svelte/elements'; 4 + import { type VariantProps, tv } from 'tailwind-variants'; 5 + import { cn } from '../'; 6 + 7 + export const buttonVariants = tv({ 8 + base: 'touch-manipulation hover:cursor-pointer hover:scale-101 focus-visible:scale-101 disabled:hover:scale-100 motion-safe:focus-visible:transition-transform focus-visible:outline-2 outline-offset-2 inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-2xl active:scale-98 text-sm font-medium motion-safe:transition-all disabled:pointer-events-none disabled:opacity-60 duration-800 active:duration-100 hover:duration-300 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', 9 + variants: { 10 + variant: { 11 + primary: 12 + 'backdrop-blur-md backdrop-brightness-105 shadow-lg transform-all shadow-accent-500/5 dark:shadow-accent-500/2 disabled:shadow-md active:shadow-md inset-shadow-sm inset-shadow-accent-700/5 dark:inset-shadow-accent-500/2 focus-visible:outline-accent-500 border border-accent-500/15 dark:border-accent-500/15 hover:bg-accent-200/60 dark:hover:bg-accent-950/25 bg-accent-200/50 dark:bg-accent-950/20 text-accent-950 dark:text-accent-400', 13 + secondary: 14 + 'backdrop-blur-md backdrop-brightness-105 shadow-lg transform-all shadow-base-500/5 dark:shadow-base-500/2 active:shadow-md inset-shadow-sm inset-shadow-base-700/2 dark:inset-shadow-base-500/2 focus-visible:outline-base-800 dark:focus-visible:outline-base-200 bg-base-300/40 dark:bg-base-800/30 text-base-900 dark:text-base-50 hover:bg-base-300/45 dark:hover:bg-base-800/35 border border-base-300/50 dark:border-base-700/30', 15 + link: 'focus-visible:outline-base-900 dark:focus-visible:outline-base-50 text-base-800 dark:text-base-200 font-semibold hover:text-accent-600 dark:hover:text-accent-400 data-[current=true]:text-accent-600 dark:data-[current=true]:text-accent-400', 16 + ghost: 17 + 'focus-visible:outline-base-900 dark:focus-visible:outline-base-50 text-base-800 dark:text-base-200 font-semibold hover:text-accent-600 hover:bg-accent-400/5 data-[current=true]:bg-accent-500/5 dark:hover:text-accent-400 dark:hover:bg-accent-700/5 data-[current=true]:text-accent-600 dark:data-[current=true]:text-accent-400 dark:data-[current=true]:bg-accent-500/5', 18 + 19 + red: 'backdrop-blur-md backdrop-brightness-105 shadow-lg transform-all shadow-red-500/5 dark:shadow-red-500/2 disabled:shadow-md active:shadow-md focus-visible:inset-shadow-red-500/15 inset-shadow-sm inset-shadow-red-700/5 dark:inset-shadow-red-500/2 focus-visible:outline-red-500 border border-red-500/15 dark:border-red-500/15 hover:bg-red-200/60 dark:hover:bg-red-950/30 bg-red-200/50 dark:bg-red-950/20 text-red-800 dark:text-red-400', 20 + orange: 21 + 'backdrop-blur-md backdrop-brightness-105 shadow-lg transform-all shadow-orange-500/5 dark:shadow-orange-500/2 disabled:shadow-md active:shadow-md focus-visible:inset-shadow-orange-500/15 inset-shadow-sm inset-shadow-orange-700/5 dark:inset-shadow-orange-500/2 focus-visible:outline-orange-500 border border-orange-500/15 dark:border-orange-500/15 hover:bg-orange-200/60 dark:hover:bg-orange-950/30 bg-orange-200/50 dark:bg-orange-950/20 text-orange-800 dark:text-orange-400', 22 + amber: 23 + 'backdrop-blur-md backdrop-brightness-105 shadow-lg transform-all shadow-amber-500/5 dark:shadow-amber-500/2 disabled:shadow-md active:shadow-md focus-visible:inset-shadow-amber-500/15 inset-shadow-sm inset-shadow-amber-700/5 dark:inset-shadow-amber-500/2 focus-visible:outline-amber-500 border border-amber-500/15 dark:border-amber-500/15 hover:bg-amber-200/60 dark:hover:bg-amber-950/30 bg-amber-200/50 dark:bg-amber-950/20 text-amber-800 dark:text-amber-400', 24 + yellow: 25 + 'backdrop-blur-md backdrop-brightness-105 shadow-lg transform-all shadow-yellow-500/5 dark:shadow-yellow-500/2 disabled:shadow-md active:shadow-md focus-visible:inset-shadow-yellow-500/15 inset-shadow-sm inset-shadow-yellow-700/5 dark:inset-shadow-yellow-500/2 focus-visible:outline-yellow-500 border border-yellow-500/15 dark:border-yellow-500/15 hover:bg-yellow-200/60 dark:hover:bg-yellow-950/30 bg-yellow-200/50 dark:bg-yellow-950/20 text-yellow-800 dark:text-yellow-400', 26 + lime: 'backdrop-blur-md backdrop-brightness-105 shadow-lg transform-all shadow-lime-500/5 dark:shadow-lime-500/2 disabled:shadow-md active:shadow-md focus-visible:inset-shadow-lime-500/15 inset-shadow-sm inset-shadow-lime-700/5 dark:inset-shadow-lime-500/2 focus-visible:outline-lime-500 border border-lime-500/15 dark:border-lime-500/15 hover:bg-lime-200/60 dark:hover:bg-lime-950/30 bg-lime-200/50 dark:bg-lime-950/20 text-lime-800 dark:text-lime-400', 27 + green: 28 + 'backdrop-blur-md backdrop-brightness-105 shadow-lg transform-all shadow-green-500/5 dark:shadow-green-500/2 disabled:shadow-md active:shadow-md focus-visible:inset-shadow-green-500/15 inset-shadow-sm inset-shadow-green-700/5 dark:inset-shadow-green-500/2 focus-visible:outline-green-500 border border-green-500/15 dark:border-green-500/15 hover:bg-green-200/60 dark:hover:bg-green-950/30 bg-green-200/50 dark:bg-green-950/20 text-green-800 dark:text-green-400', 29 + emerald: 30 + 'backdrop-blur-md backdrop-brightness-105 shadow-lg transform-all shadow-emerald-500/5 dark:shadow-emerald-500/2 disabled:shadow-md active:shadow-md focus-visible:inset-shadow-emerald-500/15 inset-shadow-sm inset-shadow-emerald-700/5 dark:inset-shadow-emerald-500/2 focus-visible:outline-emerald-500 border border-emerald-500/15 dark:border-emerald-500/15 hover:bg-emerald-200/60 dark:hover:bg-emerald-950/30 bg-emerald-200/50 dark:bg-emerald-950/20 text-emerald-800 dark:text-emerald-400', 31 + teal: 'backdrop-blur-md backdrop-brightness-105 shadow-lg transform-all shadow-teal-500/5 dark:shadow-teal-500/2 disabled:shadow-md active:shadow-md focus-visible:inset-shadow-teal-500/15 inset-shadow-sm inset-shadow-teal-700/5 dark:inset-shadow-teal-500/2 focus-visible:outline-teal-500 border border-teal-500/15 dark:border-teal-500/15 hover:bg-teal-200/60 dark:hover:bg-teal-950/30 bg-teal-200/50 dark:bg-teal-950/20 text-teal-800 dark:text-teal-400', 32 + cyan: 'backdrop-blur-md backdrop-brightness-105 shadow-lg transform-all shadow-cyan-500/5 dark:shadow-cyan-500/2 disabled:shadow-md active:shadow-md focus-visible:inset-shadow-cyan-500/15 inset-shadow-sm inset-shadow-cyan-700/5 dark:inset-shadow-cyan-500/2 focus-visible:outline-cyan-500 border border-cyan-500/15 dark:border-cyan-500/15 hover:bg-cyan-200/60 dark:hover:bg-cyan-950/30 bg-cyan-200/50 dark:bg-cyan-950/20 text-cyan-800 dark:text-cyan-400', 33 + sky: 'backdrop-blur-md backdrop-brightness-105 shadow-lg transform-all shadow-sky-500/5 dark:shadow-sky-500/2 disabled:shadow-md active:shadow-md focus-visible:inset-shadow-sky-500/15 inset-shadow-sm inset-shadow-sky-700/5 dark:inset-shadow-sky-500/2 focus-visible:outline-sky-500 border border-sky-500/15 dark:border-sky-500/15 hover:bg-sky-200/60 dark:hover:bg-sky-950/30 bg-sky-200/50 dark:bg-sky-950/20 text-sky-800 dark:text-sky-400', 34 + blue: 'backdrop-blur-md backdrop-brightness-105 shadow-lg transform-all shadow-blue-500/5 dark:shadow-blue-500/2 disabled:shadow-md active:shadow-md focus-visible:inset-shadow-blue-500/15 inset-shadow-sm inset-shadow-blue-700/5 dark:inset-shadow-blue-500/2 focus-visible:outline-blue-500 border border-blue-500/15 dark:border-blue-500/15 hover:bg-blue-200/60 dark:hover:bg-blue-950/30 bg-blue-200/50 dark:bg-blue-950/20 text-blue-800 dark:text-blue-400', 35 + indigo: 36 + 'backdrop-blur-md backdrop-brightness-105 shadow-lg transform-all shadow-indigo-500/5 dark:shadow-indigo-500/2 disabled:shadow-md active:shadow-md focus-visible:inset-shadow-indigo-500/15 inset-shadow-sm inset-shadow-indigo-700/5 dark:inset-shadow-indigo-500/2 focus-visible:outline-indigo-500 border border-indigo-500/15 dark:border-indigo-500/15 hover:bg-indigo-200/60 dark:hover:bg-indigo-950/30 bg-indigo-200/50 dark:bg-indigo-950/20 text-indigo-800 dark:text-indigo-400', 37 + violet: 38 + 'backdrop-blur-md backdrop-brightness-105 shadow-lg transform-all shadow-violet-500/5 dark:shadow-violet-500/2 disabled:shadow-md active:shadow-md focus-visible:inset-shadow-violet-500/15 inset-shadow-sm inset-shadow-violet-700/5 dark:inset-shadow-violet-500/2 focus-visible:outline-violet-500 border border-violet-500/15 dark:border-violet-500/15 hover:bg-violet-200/60 dark:hover:bg-violet-950/30 bg-violet-200/50 dark:bg-violet-950/20 text-violet-800 dark:text-violet-400', 39 + purple: 40 + 'backdrop-blur-md backdrop-brightness-105 shadow-lg transform-all shadow-purple-500/5 dark:shadow-purple-500/2 disabled:shadow-md active:shadow-md focus-visible:inset-shadow-purple-500/15 inset-shadow-sm inset-shadow-purple-700/5 dark:inset-shadow-purple-500/2 focus-visible:outline-purple-500 border border-purple-500/15 dark:border-purple-500/15 hover:bg-purple-200/60 dark:hover:bg-purple-950/30 bg-purple-200/50 dark:bg-purple-950/20 text-purple-800 dark:text-purple-400', 41 + fuchsia: 42 + 'backdrop-blur-md backdrop-brightness-105 shadow-lg transform-all shadow-fuchsia-500/5 dark:shadow-fuchsia-500/2 disabled:shadow-md active:shadow-md focus-visible:inset-shadow-fuchsia-500/15 inset-shadow-sm inset-shadow-fuchsia-700/5 dark:inset-shadow-fuchsia-500/2 focus-visible:outline-fuchsia-500 border border-fuchsia-500/15 dark:border-fuchsia-500/15 hover:bg-fuchsia-200/60 dark:hover:bg-fuchsia-950/30 bg-fuchsia-200/50 dark:bg-fuchsia-950/20 text-fuchsia-800 dark:text-fuchsia-400', 43 + pink: 'backdrop-blur-md backdrop-brightness-105 shadow-lg transform-all shadow-pink-500/5 dark:shadow-pink-500/2 disabled:shadow-md active:shadow-md focus-visible:inset-shadow-pink-500/15 inset-shadow-sm inset-shadow-pink-700/5 dark:inset-shadow-pink-500/2 focus-visible:outline-pink-500 border border-pink-500/15 dark:border-pink-500/15 hover:bg-pink-200/60 dark:hover:bg-pink-950/30 bg-pink-200/50 dark:bg-pink-950/20 text-pink-800 dark:text-pink-400', 44 + rose: 'backdrop-blur-md backdrop-brightness-105 shadow-lg transform-all shadow-rose-500/5 dark:shadow-rose-500/2 disabled:shadow-md active:shadow-md focus-visible:inset-shadow-rose-500/15 inset-shadow-sm inset-shadow-rose-700/5 dark:inset-shadow-rose-500/2 focus-visible:outline-rose-500 border border-rose-500/15 dark:border-rose-500/15 hover:bg-rose-200/60 dark:hover:bg-rose-950/30 bg-rose-200/50 dark:bg-rose-950/20 text-rose-800 dark:text-rose-400' 45 + }, 46 + size: { 47 + default: 'px-3 py-1.5', 48 + sm: 'px-2 text-xs py-1 font-base [&_svg]:size-3 gap-1.5', 49 + lg: 'px-4 gap-2.5 text-lg py-2 font-semibold [&_svg]:size-5 gap-2.5', 50 + icon: 'p-2', 51 + iconSm: 'p-1.5 [&_svg]:size-3', 52 + iconLg: 'p-3 [&_svg]:size-5' 53 + } 54 + }, 55 + defaultVariants: { 56 + variant: 'primary', 57 + size: 'default' 58 + } 59 + }); 60 + 61 + export type ButtonVariant = VariantProps<typeof buttonVariants>['variant']; 62 + export type ButtonSize = VariantProps<typeof buttonVariants>['size']; 63 + 64 + export type ButtonProps = WithElementRef<HTMLButtonAttributes> & 65 + WithElementRef<HTMLAnchorAttributes> & { 66 + variant?: ButtonVariant; 67 + size?: ButtonSize; 68 + }; 69 + </script> 70 + 71 + <script lang="ts"> 72 + let { 73 + class: className, 74 + variant = 'primary', 75 + size = 'default', 76 + ref = $bindable(null), 77 + href = undefined, 78 + type = 'button', 79 + children, 80 + ...restProps 81 + }: ButtonProps = $props(); 82 + </script> 83 + 84 + {#if href} 85 + <a bind:this={ref} class={cn(buttonVariants({ variant, size }), className)} {href} {...restProps}> 86 + {@render children?.()} 87 + </a> 88 + {:else} 89 + <button 90 + bind:this={ref} 91 + class={cn(buttonVariants({ variant, size }), className)} 92 + {type} 93 + {...restProps} 94 + > 95 + {@render children?.()} 96 + </button> 97 + {/if}
+7
src/lib/website/foxui/button/index.ts
··· 1 + export { 2 + default as Button, 3 + type ButtonProps, 4 + type ButtonSize, 5 + type ButtonVariant, 6 + buttonVariants 7 + } from './Button.svelte';
+24
src/lib/website/foxui/heading/Heading.svelte
··· 1 + <script lang="ts"> 2 + import type { WithElementRef } from 'bits-ui'; 3 + import type { HTMLBaseAttributes } from 'svelte/elements'; 4 + import { cn } from '..'; 5 + 6 + let { 7 + ref = $bindable(null), 8 + class: className, 9 + level = 1, 10 + children, 11 + ...restProps 12 + }: WithElementRef<HTMLBaseAttributes> & { 13 + level?: 1 | 2 | 3 | 4 | 5 | 6; 14 + } = $props(); 15 + </script> 16 + 17 + <svelte:element 18 + this={'h' + level} 19 + bind:this={ref} 20 + class={cn('text-base-900 dark:text-base-50 text-2xl font-semibold', className)} 21 + {...restProps} 22 + > 23 + {@render children?.()} 24 + </svelte:element>
+24
src/lib/website/foxui/heading/Subheading.svelte
··· 1 + <script lang="ts"> 2 + import type { WithElementRef } from 'bits-ui'; 3 + import type { HTMLBaseAttributes } from 'svelte/elements'; 4 + import { cn } from '..'; 5 + 6 + let { 7 + ref = $bindable(null), 8 + class: className, 9 + level = 2, 10 + children, 11 + ...restProps 12 + }: WithElementRef<HTMLBaseAttributes> & { 13 + level?: 1 | 2 | 3 | 4 | 5 | 6; 14 + } = $props(); 15 + </script> 16 + 17 + <svelte:element 18 + this={'h' + level} 19 + bind:this={ref} 20 + class={cn('text-base-900 dark:text-base-50 text-base font-semibold sm:text-lg', className)} 21 + {...restProps} 22 + > 23 + {@render children?.()} 24 + </svelte:element>
+4
src/lib/website/foxui/heading/index.ts
··· 1 + import Heading from './Heading.svelte'; 2 + import Subheading from './Subheading.svelte'; 3 + 4 + export { Heading, Subheading };
+16
src/lib/website/foxui/index.ts
··· 1 + import { type ClassValue, clsx } from 'clsx'; 2 + import { twMerge } from 'tailwind-merge'; 3 + 4 + export function cn(...inputs: ClassValue[]) { 5 + return twMerge(clsx(inputs)); 6 + } 7 + 8 + export * from './avatar'; 9 + export * from './bluesky-login'; 10 + export * from './button'; 11 + export * from './heading'; 12 + export * from './input'; 13 + export * from './label'; 14 + export * from './modal'; 15 + export * from './navbar'; 16 + export * from './sonner';
+60
src/lib/website/foxui/input/Input.svelte
··· 1 + <script lang="ts" module> 2 + import type { WithElementRef } from 'bits-ui'; 3 + import { type VariantProps, tv } from 'tailwind-variants'; 4 + import { cn } from '..'; 5 + 6 + import type { HTMLInputAttributes, HTMLInputTypeAttribute } from 'svelte/elements'; 7 + 8 + export const inputVariants = tv({ 9 + base: 'focus:ring-2 ring-1 ring-inset border-0 focus:transition-transform rounded-2xl text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed duration-300 active:duration-100', 10 + variants: { 11 + variant: { 12 + primary: 13 + 'focus:ring-accent-500 dark:focus:ring-accent-500 ring-accent-500/30 dark:ring-accent-500/20 bg-accent-400/5 dark:bg-accent-600/5 text-accent-700 dark:text-accent-400 placeholder:text-accent-700/50 dark:placeholder:text-accent-400/50', 14 + secondary: 15 + 'focus:ring-base-800 dark:focus:ring-base-200 bg-base-100/50 dark:bg-base-900/50 text-base-900 dark:text-base-50 ring-base-200 dark:ring-base-800 placeholder:text-base-900/50 dark:placeholder:text-base-50/50' 16 + }, 17 + sizeVariant: { 18 + default: 'px-3 py-1.5 text-base', 19 + sm: 'px-3 text-xs py-1.5 font-base', 20 + lg: 'px-4 text-lg py-2 font-semibold' 21 + } 22 + }, 23 + defaultVariants: { 24 + variant: 'primary', 25 + sizeVariant: 'default' 26 + } 27 + }); 28 + 29 + export type InputVariant = VariantProps<typeof inputVariants>['variant']; 30 + export type InputSize = VariantProps<typeof inputVariants>['sizeVariant']; 31 + 32 + type InputType = Exclude<HTMLInputTypeAttribute, 'file'>; 33 + 34 + export type InputProps = WithElementRef< 35 + Omit<HTMLInputAttributes, 'type'> & { type?: InputType } 36 + > & { 37 + variant?: InputVariant; 38 + sizeVariant?: InputSize; 39 + }; 40 + </script> 41 + 42 + <script lang="ts"> 43 + let { 44 + ref = $bindable(null), 45 + value = $bindable(), 46 + type, 47 + class: className, 48 + variant = 'primary', 49 + sizeVariant = 'default', 50 + ...restProps 51 + }: InputProps = $props(); 52 + </script> 53 + 54 + <input 55 + bind:this={ref} 56 + class={cn(inputVariants({ variant, sizeVariant }), className)} 57 + {type} 58 + bind:value 59 + {...restProps} 60 + />
+8
src/lib/website/foxui/input/index.ts
··· 1 + import Root, { 2 + type InputProps, 3 + type InputSize, 4 + type InputVariant, 5 + inputVariants 6 + } from './Input.svelte'; 7 + 8 + export { type InputProps, Root as Input, inputVariants, type InputSize, type InputVariant };
+19
src/lib/website/foxui/label/Label.svelte
··· 1 + <script lang="ts"> 2 + import { Label as LabelPrimitive } from 'bits-ui'; 3 + import { cn } from '..'; 4 + 5 + let { 6 + ref = $bindable(null), 7 + class: className, 8 + ...restProps 9 + }: LabelPrimitive.RootProps = $props(); 10 + </script> 11 + 12 + <LabelPrimitive.Root 13 + bind:ref 14 + class={cn( 15 + 'text-base-900 dark:text-base-50 text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70', 16 + className 17 + )} 18 + {...restProps} 19 + />
+1
src/lib/website/foxui/label/index.ts
··· 1 + export { default as Label } from './Label.svelte';
+167
src/lib/website/foxui/modal/Modal.svelte
··· 1 + <script lang="ts" module> 2 + import type { Snippet } from 'svelte'; 3 + import { Dialog, type WithoutChild } from 'bits-ui'; 4 + import { Button, type ButtonProps } from '../button'; 5 + 6 + export type ModalProps = Dialog.RootProps & { 7 + title?: string; 8 + titleSnippet?: Snippet; 9 + titleClass?: string; 10 + description?: string; 11 + descriptionSnippet?: Snippet; 12 + descriptionClass?: string; 13 + interactOutsideBehavior?: 'close' | 'ignore'; 14 + closeButton?: boolean; 15 + contentProps?: WithoutChild<Dialog.ContentProps>; 16 + 17 + yesButton?: 18 + | boolean 19 + | { 20 + label?: string; 21 + onclick?: () => void; 22 + variant?: ButtonProps['variant']; 23 + disabled?: boolean; 24 + class?: string; 25 + }; 26 + 27 + noButton?: 28 + | boolean 29 + | { 30 + label?: string; 31 + onclick?: () => void; 32 + variant?: ButtonProps['variant']; 33 + disabled?: boolean; 34 + class?: string; 35 + }; 36 + 37 + class?: string; 38 + 39 + onOpenAutoFocus?: (event: Event) => void; 40 + }; 41 + </script> 42 + 43 + <script lang="ts"> 44 + import { cn } from '..'; 45 + 46 + let { 47 + open = $bindable(false), 48 + children, 49 + contentProps, 50 + title, 51 + titleSnippet, 52 + titleClass, 53 + description, 54 + descriptionSnippet, 55 + descriptionClass, 56 + interactOutsideBehavior = 'close', 57 + closeButton = true, 58 + yesButton, 59 + noButton, 60 + class: className, 61 + onOpenAutoFocus, 62 + ...restProps 63 + }: ModalProps = $props(); 64 + 65 + let yesButtonRef = $state<HTMLButtonElement | null>(null); 66 + </script> 67 + 68 + <Dialog.Root bind:open {...restProps}> 69 + <Dialog.Portal> 70 + <Dialog.Overlay 71 + class="motion-safe:data-[state=open]:animate-in motion-safe:data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 bg-base-200/10 dark:bg-base-900/10 fixed inset-0 z-50 backdrop-blur-sm" 72 + /> 73 + <Dialog.Content 74 + {onOpenAutoFocus} 75 + {interactOutsideBehavior} 76 + {...contentProps} 77 + class={cn( 78 + 'motion-safe:data-[state=open]:animate-in motion-safe:data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-bottom-1/2 data-[state=open]:slide-in-from-bottom-1/2', 79 + 'fixed left-[50%] top-[50%] z-50 grid w-[calc(100%-1rem)] max-w-lg translate-x-[-50%] translate-y-[-50%] shadow-lg', 80 + 'bg-base-50/60 dark:bg-base-900/60 border-base-200/80 dark:border-base-800 gap-4 rounded-2xl border p-6 backdrop-blur-xl', 81 + className 82 + )} 83 + > 84 + {#if title} 85 + <Dialog.Title class="text-base-900 dark:text-base-100 text-lg font-semibold" 86 + >{title}</Dialog.Title 87 + > 88 + {/if} 89 + {#if titleSnippet} 90 + <Dialog.Title class={titleClass}> 91 + {@render titleSnippet()} 92 + </Dialog.Title> 93 + {/if} 94 + {#if description} 95 + <Dialog.Description class="text-base-600 dark:text-base-400 text-sm" 96 + >{description}</Dialog.Description 97 + > 98 + {/if} 99 + {#if descriptionSnippet} 100 + <Dialog.Description class={descriptionClass}> 101 + {@render descriptionSnippet?.()} 102 + </Dialog.Description> 103 + {/if} 104 + 105 + {#if yesButton || noButton} 106 + <div class="flex flex-col items-stretch justify-end gap-2 md:flex-row md:items-center"> 107 + {#if yesButton} 108 + <Button 109 + bind:ref={yesButtonRef} 110 + onclick={() => { 111 + open = false; 112 + if (typeof yesButton === 'object') { 113 + yesButton.onclick?.(); 114 + } 115 + }} 116 + class={cn('order-last', typeof yesButton === 'object' ? yesButton.class : '')} 117 + variant={typeof yesButton === 'object' ? yesButton?.variant || 'primary' : 'primary'} 118 + disabled={typeof yesButton === 'object' ? yesButton?.disabled : false} 119 + > 120 + {typeof yesButton === 'object' ? yesButton.label || 'Yes' : 'Yes'} 121 + </Button> 122 + {/if} 123 + {#if noButton} 124 + <Button 125 + onclick={() => { 126 + open = false; 127 + if (typeof noButton === 'object') { 128 + noButton.onclick?.(); 129 + } 130 + }} 131 + class={cn(typeof noButton === 'object' ? noButton.class : '')} 132 + variant={typeof noButton === 'object' 133 + ? noButton?.variant || 'secondary' 134 + : 'secondary'} 135 + disabled={typeof noButton === 'object' ? noButton?.disabled : false} 136 + > 137 + {typeof noButton === 'object' ? noButton.label || 'No' : 'No'} 138 + </Button> 139 + {/if} 140 + </div> 141 + {/if} 142 + 143 + {@render children?.()} 144 + 145 + {#if closeButton} 146 + <Dialog.Close 147 + class="text-base-900 dark:text-base-500 hover:text-base-800 dark:hover:text-base-200 hover:bg-base-200 dark:hover:bg-base-800 focus:outline-base-900 dark:focus:outline-base-50 focus:bg-base-200 dark:focus:bg-base-800 focus:text-base-800 dark:focus:text-base-200 absolute right-2 top-2 cursor-pointer rounded-xl p-1 transition-colors focus:outline-2 focus:outline-offset-2" 148 + > 149 + <svg 150 + xmlns="http://www.w3.org/2000/svg" 151 + viewBox="0 0 24 24" 152 + fill="currentColor" 153 + class="size-4" 154 + > 155 + <path 156 + fill-rule="evenodd" 157 + d="M5.47 5.47a.75.75 0 0 1 1.06 0L12 10.94l5.47-5.47a.75.75 0 1 1 1.06 1.06L13.06 12l5.47 5.47a.75.75 0 1 1-1.06 1.06L12 13.06l-5.47 5.47a.75.75 0 0 1-1.06-1.06L10.94 12 5.47 6.53a.75.75 0 0 1 0-1.06Z" 158 + clip-rule="evenodd" 159 + /> 160 + </svg> 161 + 162 + <span class="sr-only">Close</span> 163 + </Dialog.Close> 164 + {/if} 165 + </Dialog.Content> 166 + </Dialog.Portal> 167 + </Dialog.Root>
+2
src/lib/website/foxui/modal/index.ts
··· 1 + export { default as Modal } from './Modal.svelte'; 2 + export type { ModalProps } from './Modal.svelte';
+26
src/lib/website/foxui/navbar/Navbar.svelte
··· 1 + <script lang="ts"> 2 + import type { WithElementRef } from 'bits-ui'; 3 + import type { HTMLAttributes } from 'svelte/elements'; 4 + import { cn } from '..'; 5 + 6 + const { 7 + class: className, 8 + children, 9 + hasSidebar = false, 10 + ...restProps 11 + }: WithElementRef<HTMLAttributes<HTMLDivElement>> & { hasSidebar?: boolean } = $props(); 12 + </script> 13 + 14 + <div 15 + class={cn( 16 + 'dark header border-base-400/30 dark:border-base-300/10 fixed left-0 right-0 top-1 z-50 mx-1 flex h-16 items-center justify-between overflow-hidden rounded-2xl border p-2 shadow-2xl shadow-black', 17 + hasSidebar ? 'lg:left-74' : '', 18 + className 19 + )} 20 + {...restProps} 21 + > 22 + {@render children?.()} 23 + <div 24 + class="backdrop from-base-900/30 via-base-950/10 bg-linear-to-b pointer-events-none absolute inset-0 -z-10" 25 + ></div> 26 + </div>
+1
src/lib/website/foxui/navbar/index.ts
··· 1 + export { default as Navbar } from './Navbar.svelte';
+73
src/lib/website/foxui/sonner/Toaster.svelte
··· 1 + <script lang="ts"> 2 + import { Toaster as SonnerToaster } from 'svelte-sonner'; 3 + 4 + const colorClasses = { 5 + blue: 'bg-blue-200/50 dark:bg-blue-950/50 text-blue-600 [&_.title]:text-blue-800 [&_.description]:text-blue-700 dark:text-blue-500 border-blue-700/20 dark:border-blue-500/20 dark:[&_.title]:text-blue-300 dark:[&_.description]:text-blue-400', 6 + red: 'bg-red-200/50 dark:bg-red-950/50 text-red-600 [&_.title]:text-red-800 [&_.description]:text-red-700 dark:text-red-500 border-red-700/20 dark:border-red-500/20 dark:[&_.title]:text-red-300 dark:[&_.description]:text-red-400', 7 + yellow: 8 + 'bg-yellow-200/50 dark:bg-yellow-950/50 text-yellow-600 [&_.title]:text-yellow-800 [&_.description]:text-yellow-700 dark:text-yellow-500 border-yellow-700/20 dark:border-yellow-500/20 dark:[&_.title]:text-yellow-300 dark:[&_.description]:text-yellow-400', 9 + green: 10 + 'bg-green-200/50 dark:bg-green-950/50 text-green-600 [&_.title]:text-green-800 [&_.description]:text-green-700 dark:text-green-500 border-green-700/20 dark:border-green-500/20 dark:[&_.title]:text-green-300 dark:[&_.description]:text-green-400', 11 + indigo: 12 + 'bg-indigo-200/50 dark:bg-indigo-950/50 text-indigo-600 [&_.title]:text-indigo-800 [&_.description]:text-indigo-700 dark:text-indigo-500 border-indigo-700/20 dark:border-indigo-500/20 dark:[&_.title]:text-indigo-300 dark:[&_.description]:text-indigo-400', 13 + purple: 14 + 'bg-purple-200/50 dark:bg-purple-950/50 text-purple-600 [&_.title]:text-purple-800 [&_.description]:text-purple-700 dark:text-purple-500 border-purple-700/20 dark:border-purple-500/20 dark:[&_.title]:text-purple-300 dark:[&_.description]:text-purple-400', 15 + pink: 'bg-pink-200/50 dark:bg-pink-950/50 text-pink-600 [&_.title]:text-pink-800 [&_.description]:text-pink-700 dark:text-pink-500 border-pink-700/20 dark:border-pink-500/20 dark:[&_.title]:text-pink-300 dark:[&_.description]:text-pink-400', 16 + orange: 17 + 'bg-orange-200/50 dark:bg-orange-950/50 text-orange-600 [&_.title]:text-orange-800 [&_.description]:text-orange-700 dark:text-orange-500 border-orange-700/20 dark:border-orange-500/20 dark:[&_.title]:text-orange-300 dark:[&_.description]:text-orange-400', 18 + teal: 'bg-teal-200/50 dark:bg-teal-950/50 text-teal-600 [&_.title]:text-teal-800 [&_.description]:text-teal-700 dark:text-teal-500 border-teal-700/20 dark:border-teal-500/20 dark:[&_.title]:text-teal-300 dark:[&_.description]:text-teal-400', 19 + emerald: 20 + 'bg-emerald-200/50 dark:bg-emerald-950/50 text-emerald-600 [&_.title]:text-emerald-800 [&_.description]:text-emerald-700 dark:text-emerald-500 border-emerald-700/20 dark:border-emerald-500/20 dark:[&_.title]:text-emerald-300 dark:[&_.description]:text-emerald-400', 21 + lime: 'bg-lime-200/50 dark:bg-lime-950/50 text-lime-600 [&_.title]:text-lime-800 [&_.description]:text-lime-700 dark:text-lime-500 border-lime-700/20 dark:border-lime-500/20 dark:[&_.title]:text-lime-300 dark:[&_.description]:text-lime-400', 22 + cyan: 'bg-cyan-200/50 dark:bg-cyan-950/50 text-cyan-600 [&_.title]:text-cyan-800 [&_.description]:text-cyan-700 dark:text-cyan-500 border-cyan-700/20 dark:border-cyan-500/20 dark:[&_.title]:text-cyan-300 dark:[&_.description]:text-cyan-400', 23 + sky: 'bg-sky-200/50 dark:bg-sky-950/50 text-sky-600 [&_.title]:text-sky-800 [&_.description]:text-sky-700 dark:text-sky-500 border-sky-700/20 dark:border-sky-500/20 dark:[&_.title]:text-sky-300 dark:[&_.description]:text-sky-400', 24 + rose: 'bg-rose-200/50 dark:bg-rose-950/50 text-rose-600 [&_.title]:text-rose-800 [&_.description]:text-rose-700 dark:text-rose-500 border-rose-700/20 dark:border-rose-500/20 dark:[&_.title]:text-rose-300 dark:[&_.description]:text-rose-400', 25 + amber: 26 + 'bg-amber-200/50 dark:bg-amber-950/50 text-amber-600 [&_.title]:text-amber-800 [&_.description]:text-amber-700 dark:text-amber-500 border-amber-700/20 dark:border-amber-500/20 dark:[&_.title]:text-amber-300 dark:[&_.description]:text-amber-400', 27 + violet: 28 + 'bg-violet-200/50 dark:bg-violet-950/50 text-violet-600 [&_.title]:text-violet-800 [&_.description]:text-violet-700 dark:text-violet-500 border-violet-700/20 dark:border-violet-500/20 dark:[&_.title]:text-violet-300 dark:[&_.description]:text-violet-400', 29 + fuchsia: 30 + 'bg-fuchsia-200/50 dark:bg-fuchsia-950/50 text-fuchsia-600 [&_.title]:text-fuchsia-800 [&_.description]:text-fuchsia-700 dark:text-fuchsia-500 border-fuchsia-700/20 dark:border-fuchsia-500/20 dark:[&_.title]:text-fuchsia-300 dark:[&_.description]:text-fuchsia-400', 31 + base: 'bg-base-50/80 border-base-200 dark:bg-base-900/50 dark:border-base-800 [&_.title]:text-base-900 dark:[&_.title]:text-base-50 [&_.description]:text-base-800 dark:[&_.description]:text-base-100', 32 + accent: 33 + 'bg-accent-200/50 dark:bg-accent-950/50 text-accent-600 [&_.title]:text-accent-800 [&_.description]:text-accent-700 dark:text-accent-500 border-accent-700/20 dark:border-accent-500/20 dark:[&_.title]:text-accent-300 dark:[&_.description]:text-accent-400' 34 + }; 35 + 36 + type Colors = keyof typeof colorClasses; 37 + 38 + const { 39 + colors = { 40 + default: 'accent', 41 + success: 'green', 42 + error: 'red', 43 + info: 'blue' 44 + } 45 + }: { 46 + colors?: { 47 + default?: Colors; 48 + success?: Colors; 49 + error?: Colors; 50 + info?: Colors; 51 + }; 52 + } = $props(); 53 + </script> 54 + 55 + <SonnerToaster 56 + toastOptions={{ 57 + unstyled: true, 58 + classes: { 59 + toast: 60 + 'group toast min-w-12 w-fit sm:min-w-64 backdrop-blur-lg border rounded-2xl p-4 flex items-center gap-2 sm:fixed sm:bottom-4 sm:right-0 mx-2', 61 + title: 'text-base title', 62 + description: 'text-xs mt-1 description', 63 + 64 + default: colorClasses[colors?.default ?? 'accent'], 65 + loading: colorClasses[colors?.default ?? 'accent'], 66 + 67 + success: colorClasses[colors?.success ?? 'green'], 68 + error: colorClasses[colors?.error ?? 'red'], 69 + info: colorClasses[colors?.info ?? 'blue'] 70 + } 71 + }} 72 + position="bottom-right" 73 + />
+2
src/lib/website/foxui/sonner/index.ts
··· 1 + export { default as Toaster } from './Toaster.svelte'; 2 + export { toast } from 'svelte-sonner';
+6
src/lib/website/foxui/utils.ts
··· 1 + import { type ClassValue, clsx } from 'clsx'; 2 + import { twMerge } from 'tailwind-merge'; 3 + 4 + export function cn(...inputs: ClassValue[]) { 5 + return twMerge(clsx(inputs)); 6 + }
+16
src/lib/website/types.ts
··· 1 + import type { data } from './data'; 2 + import type { Record as ListRecord } from '@atproto/api/dist/client/types/com/atproto/repo/listRecords'; 3 + 4 + export type Collection = keyof typeof data; 5 + 6 + export type IndividualCollections = { 7 + [K in Collection]: (typeof data)[K] extends readonly unknown[] ? K : never; 8 + }[Collection]; 9 + 10 + export type ListCollections = Exclude<Collection, IndividualCollections>; 11 + 12 + export type ElementType<C extends Collection> = (typeof data)[C] extends readonly (infer U)[] 13 + ? U 14 + : unknown; 15 + 16 + export type DownloadedData = { [C in Collection]: Record<string, ListRecord> };
+41
src/lib/website/utils.ts
··· 1 + import { type Collection, type DownloadedData } from './types'; 2 + import { getRecord, listRecords, resolveHandle } from '$lib/oauth/atproto'; 3 + import type { Record as ListRecord } from '@atproto/api/dist/client/types/com/atproto/repo/listRecords'; 4 + import { data } from './data'; 5 + 6 + export function parseUri(uri: string) { 7 + // at://did:plc:257wekqxg4hyapkq6k47igmp/link.flo-bit.dev/3lnblfznvhr2a 8 + const [did, collection, rkey] = uri.split('/').slice(2); 9 + return { did, collection, rkey } as { 10 + collection: `${string}.${string}.${string}`; 11 + rkey: string; 12 + did: string; 13 + }; 14 + } 15 + 16 + export async function loadData(handle: string) { 17 + const did = await resolveHandle({ handle }); 18 + 19 + const downloadedData = {} as DownloadedData; 20 + 21 + for (const collection of Object.keys(data) as Collection[]) { 22 + const cfg = data[collection]; 23 + 24 + try { 25 + if (Array.isArray(cfg)) { 26 + for (const rkey of cfg) { 27 + const record = await getRecord({ did, collection, rkey }); 28 + downloadedData[collection] ??= {} as Record<string, ListRecord>; 29 + downloadedData[collection][rkey] = record; 30 + } 31 + } else if (cfg === 'all') { 32 + const records = await listRecords({ did, collection }); 33 + downloadedData[collection] = records; 34 + } 35 + } catch (error) { 36 + console.error('failed getting', collection, cfg, error); 37 + } 38 + } 39 + 40 + return { did, data: JSON.parse(JSON.stringify(downloadedData)) as DownloadedData }; 41 + }
+14
src/routes/+layout.svelte
··· 1 + <script lang="ts"> 2 + import '../app.css'; 3 + 4 + import { onMount } from 'svelte'; 5 + import { initClient } from '$lib/oauth'; 6 + 7 + let { children } = $props(); 8 + 9 + onMount(() => { 10 + initClient(); 11 + }); 12 + </script> 13 + 14 + {@render children()}
+5
src/routes/[handle]/+layout.server.ts
··· 1 + import { loadData } from '$lib/website/utils'; 2 + 3 + export async function load({ params }) { 4 + return await loadData(params.handle); 5 + }
+11
src/routes/[handle]/+page.svelte
··· 1 + <script lang="ts"> 2 + import { page } from '$app/state'; 3 + import Website from '$lib/Website.svelte'; 4 + import WebsiteWrapper from '$lib/website/WebsiteWrapper.svelte'; 5 + 6 + let { data } = $props(); 7 + </script> 8 + 9 + <WebsiteWrapper {data} handle={page.params.handle}> 10 + <Website handle={page.params.handle} did={data.did} /> 11 + </WebsiteWrapper>
+11
src/routes/[handle]/edit/+page.svelte
··· 1 + <script lang="ts"> 2 + import { page } from '$app/state'; 3 + import Website from '$lib/Website.svelte'; 4 + import EditingWebsiteWrapper from '$lib/website/EditingWebsiteWrapper.svelte'; 5 + 6 + let { data } = $props(); 7 + </script> 8 + 9 + <EditingWebsiteWrapper {data}> 10 + <Website handle={page.params.handle} did={data.did} /> 11 + </EditingWebsiteWrapper>
+8
src/routes/client-metadata.json/+server.ts
··· 1 + import { metadata } from '$lib/oauth'; 2 + import { json } from '@sveltejs/kit'; 3 + 4 + export const prerender = true; 5 + 6 + export async function GET() { 7 + return json(metadata); 8 + }
static/favicon.png

This is a binary file and will not be displayed.

+23
svelte.config.js
··· 1 + import adapter from '@sveltejs/adapter-cloudflare'; 2 + import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; 3 + 4 + /** @type {import('@sveltejs/kit').Config} */ 5 + const config = { 6 + // Consult https://svelte.dev/docs/kit/integrations 7 + // for more information about preprocessors 8 + preprocess: vitePreprocess(), 9 + 10 + kit: { 11 + adapter: adapter(), 12 + paths: { 13 + base: '' 14 + } 15 + }, 16 + compilerOptions: { 17 + experimental: { 18 + async: true 19 + } 20 + } 21 + }; 22 + 23 + export default config;
+19
tsconfig.json
··· 1 + { 2 + "extends": "./.svelte-kit/tsconfig.json", 3 + "compilerOptions": { 4 + "allowJs": true, 5 + "checkJs": true, 6 + "esModuleInterop": true, 7 + "forceConsistentCasingInFileNames": true, 8 + "resolveJsonModule": true, 9 + "skipLibCheck": true, 10 + "sourceMap": true, 11 + "strict": true, 12 + "moduleResolution": "bundler" 13 + } 14 + // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias 15 + // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files 16 + // 17 + // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes 18 + // from the referenced tsconfig.json - TypeScript does not merge them in 19 + }
+11
vite.config.ts
··· 1 + import tailwindcss from '@tailwindcss/vite'; 2 + import { sveltekit } from '@sveltejs/kit/vite'; 3 + import { defineConfig } from 'vite'; 4 + 5 + export default defineConfig({ 6 + plugins: [sveltekit(), tailwindcss()], 7 + server: { 8 + host: '127.0.0.1', 9 + port: 5179 10 + } 11 + });