From e6c70883c5c9c28e52187e4edac6700c4cac0246 Mon Sep 17 00:00:00 2001 From: Florian <45694132+flo-bit@users.noreply.github.com> Date: Sun, 29 Mar 2026 00:33:44 +0100 Subject: [PATCH] add sveltekit workers project --- .../.claude/settings.local.json | 14 + .../sveltekit-cloudflare-workers/.env.example | 6 + .../sveltekit-cloudflare-workers/.gitignore | 23 + examples/sveltekit-cloudflare-workers/.npmrc | 1 + .../.prettierignore | 4 + .../sveltekit-cloudflare-workers/.prettierrc | 15 + .../AGENT_SETUP.md | 540 ++ .../GETTING_STARTED.md | 125 + examples/sveltekit-cloudflare-workers/LICENSE | 21 + .../sveltekit-cloudflare-workers/README.md | 82 + .../sveltekit-cloudflare-workers/SETUP.md | 279 + .../eslint.config.js | 34 + .../sveltekit-cloudflare-workers/package.json | 61 + .../pnpm-lock.yaml | 4592 +++++++++++ .../screenshot.png | Bin 0 -> 226348 bytes .../sveltekit-cloudflare-workers/src/app.css | 9 + .../sveltekit-cloudflare-workers/src/app.d.ts | 32 + .../sveltekit-cloudflare-workers/src/app.html | 12 + .../src/hooks.server.ts | 15 + .../src/lib/atproto/auth.svelte.ts | 75 + .../src/lib/atproto/image-helper.ts | 152 + .../src/lib/atproto/index.ts | 20 + .../src/lib/atproto/methods.ts | 373 + .../src/lib/atproto/microcosm.ts | 19 + .../src/lib/atproto/port.ts | 3 + .../src/lib/atproto/scripts/generate-key.ts | 4 + .../lib/atproto/scripts/generate-secret.ts | 3 + .../src/lib/atproto/scripts/setup-dev.ts | 60 + .../src/lib/atproto/scripts/tunnel.ts | 195 + .../src/lib/atproto/server/kv-store.ts | 38 + .../src/lib/atproto/server/oauth.remote.ts | 56 + .../src/lib/atproto/server/oauth.ts | 97 + .../src/lib/atproto/server/profile.ts | 51 + .../src/lib/atproto/server/repo.remote.ts | 85 + .../src/lib/atproto/server/session.ts | 73 + .../src/lib/atproto/server/signed-cookie.ts | 69 + .../src/lib/atproto/settings.ts | 30 + .../src/lib/atproto/ui/LoginModal.svelte | 22 + .../src/lib/emojis/icons.json | 7255 +++++++++++++++++ .../src/lib/emojis/index.ts | 23 + .../src/lib/index.ts | 1 + .../oauth-client-metadata.json/+server.ts | 8 + .../routes/(oauth)/oauth/callback/+server.ts | 41 + .../routes/(oauth)/oauth/jwks.json/+server.ts | 8 + .../src/routes/+layout.server.ts | 15 + .../src/routes/+layout.svelte | 22 + .../src/routes/+layout.ts | 1 + .../src/routes/+page.server.ts | 91 + .../src/routes/+page.svelte | 188 + .../src/routes/blobs/+page.server.ts | 36 + .../src/routes/blobs/+page.svelte | 95 + .../static/favicon.png | Bin 0 -> 1571 bytes .../static/og.png | Bin 0 -> 61667 bytes .../svelte.config.js | 16 + .../tsconfig.json | 20 + .../vite.config.ts | 13 + .../wrangler.jsonc | 27 + 57 files changed, 15150 insertions(+) create mode 100644 examples/sveltekit-cloudflare-workers/.claude/settings.local.json create mode 100644 examples/sveltekit-cloudflare-workers/.env.example create mode 100644 examples/sveltekit-cloudflare-workers/.gitignore create mode 100644 examples/sveltekit-cloudflare-workers/.npmrc create mode 100644 examples/sveltekit-cloudflare-workers/.prettierignore create mode 100644 examples/sveltekit-cloudflare-workers/.prettierrc create mode 100644 examples/sveltekit-cloudflare-workers/AGENT_SETUP.md create mode 100644 examples/sveltekit-cloudflare-workers/GETTING_STARTED.md create mode 100644 examples/sveltekit-cloudflare-workers/LICENSE create mode 100644 examples/sveltekit-cloudflare-workers/README.md create mode 100644 examples/sveltekit-cloudflare-workers/SETUP.md create mode 100644 examples/sveltekit-cloudflare-workers/eslint.config.js create mode 100644 examples/sveltekit-cloudflare-workers/package.json create mode 100644 examples/sveltekit-cloudflare-workers/pnpm-lock.yaml create mode 100644 examples/sveltekit-cloudflare-workers/screenshot.png create mode 100644 examples/sveltekit-cloudflare-workers/src/app.css create mode 100644 examples/sveltekit-cloudflare-workers/src/app.d.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/app.html create mode 100644 examples/sveltekit-cloudflare-workers/src/hooks.server.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/lib/atproto/auth.svelte.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/lib/atproto/image-helper.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/lib/atproto/index.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/lib/atproto/methods.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/lib/atproto/microcosm.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/lib/atproto/port.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/lib/atproto/scripts/generate-key.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/lib/atproto/scripts/generate-secret.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/lib/atproto/scripts/setup-dev.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/lib/atproto/scripts/tunnel.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/lib/atproto/server/kv-store.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/lib/atproto/server/oauth.remote.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/lib/atproto/server/oauth.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/lib/atproto/server/profile.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/lib/atproto/server/repo.remote.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/lib/atproto/server/session.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/lib/atproto/server/signed-cookie.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/lib/atproto/settings.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/lib/atproto/ui/LoginModal.svelte create mode 100644 examples/sveltekit-cloudflare-workers/src/lib/emojis/icons.json create mode 100644 examples/sveltekit-cloudflare-workers/src/lib/emojis/index.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/lib/index.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/routes/(oauth)/oauth-client-metadata.json/+server.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/routes/(oauth)/oauth/callback/+server.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/routes/(oauth)/oauth/jwks.json/+server.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/routes/+layout.server.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/routes/+layout.svelte create mode 100644 examples/sveltekit-cloudflare-workers/src/routes/+layout.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/routes/+page.server.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/routes/+page.svelte create mode 100644 examples/sveltekit-cloudflare-workers/src/routes/blobs/+page.server.ts create mode 100644 examples/sveltekit-cloudflare-workers/src/routes/blobs/+page.svelte create mode 100644 examples/sveltekit-cloudflare-workers/static/favicon.png create mode 100644 examples/sveltekit-cloudflare-workers/static/og.png create mode 100644 examples/sveltekit-cloudflare-workers/svelte.config.js create mode 100644 examples/sveltekit-cloudflare-workers/tsconfig.json create mode 100644 examples/sveltekit-cloudflare-workers/vite.config.ts create mode 100644 examples/sveltekit-cloudflare-workers/wrangler.jsonc diff --git a/examples/sveltekit-cloudflare-workers/.claude/settings.local.json b/examples/sveltekit-cloudflare-workers/.claude/settings.local.json new file mode 100644 index 0000000..9261172 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/.claude/settings.local.json @@ -0,0 +1,14 @@ +{ + "permissions": { + "allow": [ + "Bash(npx tsc:*)", + "WebFetch(domain:raw.githubusercontent.com)", + "WebFetch(domain:github.com)", + "mcp__plugin_svelte_svelte__svelte-autofixer", + "mcp__plugin_svelte_svelte__get-documentation", + "Bash(pnpm check:*)", + "Bash(pnpm env:generate-secret:*)", + "Bash(pnpm build:agent-setup:*)" + ] + } +} diff --git a/examples/sveltekit-cloudflare-workers/.env.example b/examples/sveltekit-cloudflare-workers/.env.example new file mode 100644 index 0000000..ede6fba --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/.env.example @@ -0,0 +1,6 @@ +# Generate both with: pnpm env:setup-dev +CLIENT_ASSERTION_KEY= +COOKIE_SECRET= + +# Set to your tunnel URL to use a confidential client in dev +# OAUTH_PUBLIC_URL=https://your-tunnel.trycloudflare.com diff --git a/examples/sveltekit-cloudflare-workers/.gitignore b/examples/sveltekit-cloudflare-workers/.gitignore new file mode 100644 index 0000000..3b462cb --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/.gitignore @@ -0,0 +1,23 @@ +node_modules + +# Output +.output +.vercel +.netlify +.wrangler +/.svelte-kit +/build + +# OS +.DS_Store +Thumbs.db + +# Env +.env +.env.* +!.env.example +!.env.test + +# Vite +vite.config.js.timestamp-* +vite.config.ts.timestamp-* diff --git a/examples/sveltekit-cloudflare-workers/.npmrc b/examples/sveltekit-cloudflare-workers/.npmrc new file mode 100644 index 0000000..b6f27f1 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/examples/sveltekit-cloudflare-workers/.prettierignore b/examples/sveltekit-cloudflare-workers/.prettierignore new file mode 100644 index 0000000..ab78a95 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/.prettierignore @@ -0,0 +1,4 @@ +# Package Managers +package-lock.json +pnpm-lock.yaml +yarn.lock diff --git a/examples/sveltekit-cloudflare-workers/.prettierrc b/examples/sveltekit-cloudflare-workers/.prettierrc new file mode 100644 index 0000000..7ebb855 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/.prettierrc @@ -0,0 +1,15 @@ +{ + "useTabs": true, + "singleQuote": true, + "trailingComma": "none", + "printWidth": 100, + "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"], + "overrides": [ + { + "files": "*.svelte", + "options": { + "parser": "svelte" + } + } + ] +} diff --git a/examples/sveltekit-cloudflare-workers/AGENT_SETUP.md b/examples/sveltekit-cloudflare-workers/AGENT_SETUP.md new file mode 100644 index 0000000..093e7f3 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/AGENT_SETUP.md @@ -0,0 +1,540 @@ +# Add AT Protocol OAuth to SvelteKit + Cloudflare Workers + +You are adding AT Protocol OAuth authentication to an existing SvelteKit project deployed on Cloudflare Workers. This uses server-side OAuth with `@atcute/oauth-node-client`, Cloudflare KV for session storage, and SvelteKit remote functions. + +## Prerequisites + +The project must already use: +- SvelteKit with `@sveltejs/adapter-cloudflare` +- A `wrangler.jsonc` (or `wrangler.toml`) config + +## Step 0: Understand the project and propose an integration approach + +Before asking configuration questions, **explore the existing codebase** to understand what the app does. Read the main pages, components, state management, and data flow. Then propose to the user *how* AT Protocol should integrate with their app. + +### What to look for + +- **User data**: localStorage, cookies, IndexedDB, database calls, API state — anything per-user that could live on a PDS instead. +- **Content creation**: Does the app let users create, edit, or save things? (posts, notes, drawings, settings, lists, bookmarks, etc.) +- **Existing routes**: How is the app structured? Would user-specific public pages make sense? + +### Common integration patterns + +Based on what you find, suggest the relevant patterns to the user: + +1. **Replace localStorage/local data with PDS records** — If the app stores per-user data locally (localStorage, IndexedDB, cookies), store it as AT Protocol records on the user's PDS instead. The data becomes portable and accessible from any app that speaks AT Protocol. **Important: data on a PDS is public.** Make this very clear to the user — if the app currently stores private data locally, moving it to a PDS makes it visible to anyone. Only suggest this for data the user would be comfortable sharing publicly. + +2. **Add public `/{actor}` profile routes** — If each user produces content, add a route like `/{actor}` (where `actor` is a handle like `alice.bsky.social` or a DID) that displays that user's records. The logged-in user manages their own data from the main UI; anyone can view anyone else's public data by visiting their route. This is a natural fit when replacing localStorage — what was private per-device data becomes a public, shareable profile. + +3. **Social interactions** — Add likes, reposts, follows, or other social features using existing AT Protocol / Bluesky lexicons (`app.bsky.feed.like`, `app.bsky.graph.follow`, etc.). + +4. **Content publishing** — If the app produces content (posts, articles, images, media), publish to the user's PDS under a custom collection namespace. + +5. **Auth only** — Just add login/logout. The app doesn't read or write AT Protocol records — it only needs to know who the user is. + +Present your analysis and a concrete proposal (e.g. "I'd suggest replacing the localStorage todos with records in a `xyz.yourdomain.todo` collection, and adding a `/{actor}` route so users can share their list publicly"). **Wait for the user's response** before continuing to Step 1. + +## Step 1: Ask configuration questions + +Once the integration approach is agreed on, ask the user: + +1. **UI**: Should I add a login UI? + - **`foxui`** — Use `@foxui/social` login modal (polished, recommended) + - **`basic`** — Simple login/logout page at `/user` route (uses Tailwind if available) + - **`none`** — Backend only, no UI (you'll build your own) + +2. **Collections**: What AT Protocol collections should your app write to? (e.g. `xyz.statusphere.status`, `app.bsky.feed.like`). Leave empty for read-only. (You should already have a suggestion from Step 0.) + +3. **Blobs**: Does the app need to upload blobs (images, video)? If yes, what types? (e.g. `image/*`, `video/*`) + +4. **Signup**: Should the app allow users to create new AT Protocol accounts (signup)? + - **`yes`** — Include a signup button/flow + - **`no`** — Login only, no account creation + +5. **Production PDS**: Which PDS should be used for signup in production? (default: `https://selfhosted.social/`) + - Only relevant if signup is enabled. Skip if signup is `no`. + +Use the answers to customize `settings.ts` (marked with `CUSTOMIZE` below) and choose which UI dependencies/files to create. + +## Step 2: Install dependencies + +Always install: + +```sh +pnpm add valibot +pnpm add -D @atcute/oauth-node-client @atcute/identity-resolver @atcute/lexicons @atcute/client @atcute/tid @cloudflare/workers-types tsx @atcute/atproto @atcute/bluesky +``` + +If UI choice is `foxui`: + +```sh +pnpm add @foxui/social @foxui/core +``` + +## Step 3: Create files + +### Download all files + +Run this bash script to download all required files into the project: + +```sh +BASE_URL="https://raw.githubusercontent.com/flo-bit/svelte-cloudflare-statusphere/main" + +FILES=( + "src/lib/atproto/auth.svelte.ts" + "src/lib/atproto/methods.ts" + "src/lib/atproto/image-helper.ts" + "src/lib/atproto/port.ts" + "src/lib/atproto/index.ts" + "src/lib/atproto/server/signed-cookie.ts" + "src/lib/atproto/server/kv-store.ts" + "src/lib/atproto/server/oauth.ts" + "src/lib/atproto/server/oauth.remote.ts" + "src/lib/atproto/server/repo.remote.ts" + "src/lib/atproto/server/session.ts" + "src/lib/atproto/server/profile.ts" + "src/lib/atproto/scripts/generate-key.ts" + "src/lib/atproto/scripts/generate-secret.ts" + "src/lib/atproto/scripts/setup-dev.ts" + "src/lib/atproto/scripts/tunnel.ts" + "src/routes/(oauth)/oauth/callback/+server.ts" + "src/routes/(oauth)/oauth/jwks.json/+server.ts" + "src/routes/(oauth)/oauth-client-metadata.json/+server.ts" + ".env.example" +) + +for file in "${FILES[@]}"; do + mkdir -p "$(dirname "$file")" + curl -fsSL "$BASE_URL/$file" -o "$file" + echo " downloaded $file" +done +``` + +### `src/lib/atproto/settings.ts` + +**Do not fetch this file.** Create it manually using the template below, customized with the user's answers: + +```ts +import { dev } from '$app/environment'; +import { scope } from '@atcute/oauth-node-client'; + +// CUSTOMIZE: writable collections +export const collections = [] as const; + +export type AllowedCollection = (typeof collections)[number]; + +// CUSTOMIZE: OAuth scope — add scope.blob({ accept: ['image/*'] }), scope.rpc(), etc. as needed +export const scopes = ['atproto', scope.repo({ collection: [...collections] })]; + +// CUSTOMIZE: set to true to allow signup, false for login-only +export const ALLOW_SIGNUP = true; + +// CUSTOMIZE: PDS to use for signup (only relevant if ALLOW_SIGNUP is true) +const devPDS = 'https://bsky.social/'; +const prodPDS = 'https://selfhosted.social/'; // CUSTOMIZE: change to preferred production PDS +export const signUpPDS = dev ? devPDS : prodPDS; + +export const REDIRECT_PATH = '/oauth/callback'; + +// redirect the user back to the page they were on before login +export const REDIRECT_TO_LAST_PAGE_ON_LOGIN = true; + +export const DOH_RESOLVER = 'https://mozilla.cloudflare-dns.com/dns-query'; +``` + +## Step 4: Modify existing files + +### `src/app.d.ts` + +Add these to the existing `App` namespace. Merge with any existing `Locals` or `Platform` fields — do not remove existing fields. + +```ts +import type { OAuthSession } from '@atcute/oauth-node-client'; +import type { Client } from '@atcute/client'; +import type { Did } from '@atcute/lexicons'; +``` + +Add to `App.Locals`: + +```ts +session: OAuthSession | null; +client: Client | null; +did: Did | null; +``` + +Add to `App.Platform`: + +```ts +env: { + OAUTH_SESSIONS: KVNamespace; + OAUTH_STATES: KVNamespace; + CLIENT_ASSERTION_KEY: string; + COOKIE_SECRET: string; + OAUTH_PUBLIC_URL: string; + PROFILE_CACHE?: KVNamespace; +}; +``` + +Add at the bottom of the file (for lexicon type augmentation): + +```ts +import type {} from '@atcute/atproto'; +import type {} from '@atcute/bluesky'; +``` + +### `src/hooks.server.ts` + +Add session restoration. If the file already has a `handle` export, wrap both in `sequence()` from `@sveltejs/kit`. + +```ts +import type { Handle } from '@sveltejs/kit'; +import { restoreSession } from '$lib/atproto/server/session'; + +const atprotoHandle: Handle = async ({ event, resolve }) => { + const { session, client, did } = await restoreSession( + event.cookies, event.platform?.env + ); + event.locals.session = session; + event.locals.client = client; + event.locals.did = did; + return resolve(event); +}; +``` + +If no existing hooks: `export const handle = atprotoHandle;` + +If existing hooks: `export const handle = sequence(existingHandle, atprotoHandle);` (import `sequence` from `@sveltejs/kit`) + +### `src/routes/+layout.server.ts` + +Add profile loading. Merge with any existing load function. + +```ts +import type { LayoutServerLoad } from './$types'; +import { loadProfile } from '$lib/atproto/server/profile'; + +export const load: LayoutServerLoad = async ({ locals, platform }) => { + if (!locals.did) return { did: null, profile: null }; + const profile = await loadProfile(locals.did, platform?.env?.PROFILE_CACHE); + return { did: locals.did, profile }; +}; +``` + +If a load function already exists, merge the profile data into its return value. + +### `src/routes/+layout.svelte` (foxui only) + +Only if the user chose `foxui`. Add the login modal to the existing layout. + +If signup is enabled (`ALLOW_SIGNUP = true`): + +```svelte + + + + { + await login(handle); + return true; + }} + signup={async () => { + signup(); + return true; + }} +/> +``` + +If signup is disabled (`ALLOW_SIGNUP = false`), omit the `signup` prop: + +```svelte + + + { + await login(handle); + return true; + }} +/> +``` + +To show the modal from anywhere, use `@foxui/social` state and `@foxui/core` components: + +```svelte + + +{#if user.isLoggedIn} +

Signed in as {user.profile?.handle ?? user.did}

+ +{:else} + +{/if} +``` + +`@foxui/core` also exports `Avatar`, `Input`, and other UI primitives you can use. + +### `src/routes/user/+page.svelte` (basic only) + +Only if the user chose `basic`. Create this file: + +```svelte + + +
+ {#if user.isLoggedIn} +

Signed in as {user.profile?.handle ?? user.did}

+ + {:else} +

Sign in

+
+ + {#if error} +

{error}

+ {/if} + +
+ {/if} +
+``` + +If the project does not use Tailwind, replace the Tailwind classes with plain inline styles. + +### `svelte.config.js` + +Add `remoteFunctions: true` inside `kit.experimental`: + +```js +kit: { + adapter: adapter(), + experimental: { + remoteFunctions: true + } +} +``` + +If `experimental` already exists, merge into it. Do not remove other experimental flags. + +### `vite.config.ts` + +Add the port import and dev server config for loopback OAuth: + +```ts +import { DEV_PORT } from './src/lib/atproto/port'; +``` + +```ts +server: { + host: '127.0.0.1', + port: DEV_PORT +} +``` + +Add these inside `defineConfig()`. Do not remove existing plugins or config. + +### `wrangler.jsonc` + +Add or merge these fields: + +- Ensure `"main"` is set to the SvelteKit Cloudflare worker entrypoint: + +```jsonc +"main": ".svelte-kit/cloudflare/_worker.js" +``` + +- Ensure `"assets"` is configured: + +```jsonc +"assets": { + "binding": "ASSETS", + "directory": ".svelte-kit/cloudflare" +} +``` + +- Add `"nodejs_compat_v2"` to `compatibility_flags` (create the array if it doesn't exist) +- Do NOT add `OAUTH_PUBLIC_URL` to vars — it is only needed for production deployment and the user will set it themselves later. In dev mode without it, the app uses a loopback client automatically. +- Add KV namespace placeholders to `kv_namespaces`. Use the project name (from the `"name"` field in `wrangler.jsonc` or `package.json`) as a prefix so namespaces are distinguishable when multiple projects share the same Cloudflare account: + +```jsonc +{ "binding": "OAUTH_SESSIONS", "id": "TODO" }, +{ "binding": "OAUTH_STATES", "id": "TODO" } +``` + +Do not remove existing bindings or vars. + +### `tsconfig.json` + +Add `"@cloudflare/workers-types"` to `compilerOptions.types`. Create the `types` array if it doesn't exist. + +### `package.json` + +Add these to the `scripts` section: + +```json +"env:generate-key": "npx tsx src/lib/atproto/scripts/generate-key.ts", +"env:generate-secret": "npx tsx src/lib/atproto/scripts/generate-secret.ts", +"env:setup-dev": "npx tsx src/lib/atproto/scripts/setup-dev.ts", +"tunnel": "npx tsx src/lib/atproto/scripts/tunnel.ts" +``` + +### `.gitignore` + +Ensure these lines are present: + +``` +.env +.env.* +!.env.example +``` + +## Step 5: Run setup and verify + +1. Run `pnpm env:setup-dev` to generate secrets in `.env` and assign a random dev port (5200–7200) in `port.ts` +2. Run `pnpm dev` to start the dev server +3. Verify it starts on `http://127.0.0.1:` (the port from `port.ts`) +4. Tell the user: + - Dev mode uses a loopback client (no keys needed) + - For production: create KV namespaces prefixed with the project name — e.g. `npx wrangler kv namespace create -OAUTH_SESSIONS` and `-OAUTH_STATES` (use the `name` from `wrangler.jsonc`). Update the IDs in `wrangler.jsonc`, set `OAUTH_PUBLIC_URL` to their domain, and run `npx wrangler secret put CLIENT_ASSERTION_KEY` / `COOKIE_SECRET` with values from `pnpm env:generate-key` / `pnpm env:generate-secret` + +## Tunnel (for testing OAuth with a public URL) + +In dev mode, OAuth works via loopback (no public URL needed). But if you need to test with a real public URL (e.g. testing from another device, or testing production-like OAuth flows), use the tunnel command: + +```sh +pnpm tunnel +``` + +This requires `cloudflared` to be installed. It: +1. Spawns a Cloudflare Quick Tunnel pointing to `http://localhost:` +2. Sets `OAUTH_PUBLIC_URL` in `.env` to the tunnel URL +3. Adds the tunnel hostname to `allowedHosts` in `vite.config.ts` +4. Shows a persistent status bar with the tunnel URL + +After starting the tunnel, restart the dev server (`pnpm dev`) to pick up the new URL. When you stop the tunnel (Ctrl+C), it automatically cleans up `.env` and `vite.config.ts`. + +## Usage examples + +### Login / Logout + +```svelte + + +{#if user.isLoggedIn} +

Signed in as {user.did}

+ +{:else} + +{/if} +``` + +### Write operations + +```ts +import { putRecord, deleteRecord, uploadBlob, createTID } from '$lib/atproto'; + +await putRecord({ + collection: 'your.collection.name', + rkey: createTID(), + record: { text: 'hello', createdAt: new Date().toISOString() } +}); + +await deleteRecord({ collection: 'your.collection.name', rkey: 'some-key' }); + +const blob = await uploadBlob({ blob: file }); +// For images, returns: { $type: 'blob', ref: { $link: string }, mimeType: string, size: number, aspectRatio: { width, height } } +// aspectRatio is auto-detected for image/* blobs, or you can pass it explicitly: +// await uploadBlob({ blob: file, aspectRatio: { width: 2000, height: 1144 } }) + +// Store the blob reference in a record +await putRecord({ + collection: 'your.collection.name', + rkey: createTID(), + record: { image: blob, createdAt: new Date().toISOString() } +}); +``` + +### Displaying blobs + +```ts +import { getBlobURL, getCDNImageBlobUrl } from '$lib/atproto'; + +// Option 1: Direct PDS URL (works for any blob type) +const url = await getBlobURL({ did: 'did:plc:...', blob: record.image }); + +// Option 2: Bluesky CDN URL (faster, cached, image-only, returns WebP thumbnails) +const cdnUrl = getCDNImageBlobUrl({ did: 'did:plc:...', blob: record.image }); +``` + +### Image compression helper + +The `image-helper.ts` module provides utilities for working with image blobs: + +```ts +import { compressImage, checkAndUploadImage, getImageFromRecord } from '$lib/atproto/image-helper'; + +// Compress an image before uploading (default: max 900KB, max 2048px dimension, outputs WebP) +const { blob: compressedBlob, aspectRatio } = await compressImage(file); +const uploaded = await uploadBlob({ blob: compressedBlob }); + +// Or use checkAndUploadImage to handle compression + upload in one step +// Works with File objects, string URLs (with an image proxy), or already-uploaded blob refs +const record = { image: someFileOrUrl }; +await checkAndUploadImage(record, 'image', '/api/image-proxy?url='); + +// Get a display URL from a record's blob field (handles blob refs, object URLs, and strings) +const displayUrl = getImageFromRecord(record, did, 'image'); +``` + +### Read operations (no auth needed) + +```ts +import { listRecords, getRecord, getDetailedProfile } from '$lib/atproto'; + +const records = await listRecords({ did: 'did:plc:...', collection: 'your.collection.name' }); +const profile = await getDetailedProfile({ did: 'did:plc:...' }); +``` diff --git a/examples/sveltekit-cloudflare-workers/GETTING_STARTED.md b/examples/sveltekit-cloudflare-workers/GETTING_STARTED.md new file mode 100644 index 0000000..7795216 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/GETTING_STARTED.md @@ -0,0 +1,125 @@ +# Getting Started + +## Prerequisites + +- [Node.js](https://nodejs.org/) v18+ +- [pnpm](https://pnpm.io/) +- A [Cloudflare account](https://dash.cloudflare.com/sign-up) (for production) + +## Local Development + +```sh +pnpm install +pnpm dev +``` + +That's it. In dev mode the app uses a loopback OAuth client — no keys, no Cloudflare setup, no secrets. It binds to `127.0.0.1` on the port defined in `src/lib/atproto/port.ts` (required for AT Protocol loopback OAuth). + +Open the URL shown in the terminal and log in with any Bluesky handle. + +## Configure your app + +Edit `src/lib/atproto/settings.ts` to set the collections your app reads/writes: + +```ts +export const permissions = { + collections: ['xyz.statusphere.status'], + rpc: {}, + blobs: [] +} as const; +``` + +The OAuth scope is auto-generated from this config. + +## Deploy to Production + +### 1. Create KV namespaces + +Prefix namespace names with your project name (the `name` field in `wrangler.jsonc`) so they're easy to identify when you have multiple projects on the same Cloudflare account: + +```sh +npx wrangler kv namespace create -OAUTH_SESSIONS +npx wrangler kv namespace create -OAUTH_STATES +``` + +Each command outputs an ID. Put them in `wrangler.jsonc`: + +```jsonc +"kv_namespaces": [ + { "binding": "OAUTH_SESSIONS", "id": "" }, + { "binding": "OAUTH_STATES", "id": "" } +] +``` + +### 2. Set your public URL + +In `wrangler.jsonc`, set `OAUTH_PUBLIC_URL` to your production domain: + +```jsonc +"vars": { + "OAUTH_PUBLIC_URL": "https://your-domain.com" +} +``` + +### 3. Generate and set secrets + +```sh +pnpm env:generate-key +npx wrangler secret put CLIENT_ASSERTION_KEY # paste the output + +pnpm env:generate-secret +npx wrangler secret put COOKIE_SECRET # paste the output +``` + +### 4. Deploy + +```sh +npx wrangler deploy +``` + +Then add a custom domain in the Cloudflare dashboard (Worker > Settings > Domains & Routes). + +## Dev with tunnel (optional) + +To test the full confidential client flow locally using [cloudflared](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/): + +```sh +pnpm env:setup-dev # generates secrets in .env + random port +pnpm tunnel # start tunnel (uses port from port.ts) +``` + +Add the tunnel URL to `.env`: + +``` +OAUTH_PUBLIC_URL=https://your-tunnel-id.trycloudflare.com +``` + +Then `pnpm dev`. The app will use a confidential client with that URL. + +## Scripts + +| Script | Description | +|---|---| +| `pnpm dev` | Start dev server | +| `pnpm build` | Build for production | +| `pnpm check` | Run svelte-check | +| `pnpm env:generate-key` | Generate client assertion key | +| `pnpm env:generate-secret` | Generate cookie signing secret | +| `pnpm env:setup-dev` | Generate secrets, write to `.env`, assign random dev port | +| `pnpm tunnel` | Start a Cloudflare tunnel for testing OAuth with a public URL | + +## Optional: Profile caching + +Create a KV namespace for caching Bluesky profiles (1 hour TTL): + +```sh +npx wrangler kv namespace create PROFILE_CACHE +``` + +Add it to `wrangler.jsonc` alongside the other namespaces: + +```jsonc +{ "binding": "PROFILE_CACHE", "id": "" } +``` + +Without this, profiles are fetched fresh on every page load. The app works fine either way. diff --git a/examples/sveltekit-cloudflare-workers/LICENSE b/examples/sveltekit-cloudflare-workers/LICENSE new file mode 100644 index 0000000..696e4f6 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/LICENSE @@ -0,0 +1,21 @@ +MIT License Copyright (c) 2025 flo-bit + +Permission is hereby granted, free of +charge, to any person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice +(including the next paragraph) shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO +EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/examples/sveltekit-cloudflare-workers/README.md b/examples/sveltekit-cloudflare-workers/README.md new file mode 100644 index 0000000..0bc33f3 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/README.md @@ -0,0 +1,82 @@ +# svelte cloudflare statusphere + +> **Work in progress** + +![screenshot](./screenshot.png) + + +**Demo:** https://statusphere.atmo.tools + + +svelte + cloudflare workers statusphere demo, built with lots of [`@atcute`](https://github.com/mary-ext/atcute) packages, [ufos.microcosm.blue](https://ufos.microcosm.blue/) (for recent status updates without its own backend), jetstream subscription for real-time updates and [@foxui](https://flo-bit.dev/ui-kit) for ui components. + +also doubles as a demo of `@atcute/oauth-node-client` for server-side oauth flows in cloudflare workers, with session storage in KV and HMAC-signed cookies and lots of useful functions. + +## Quick Start + +```sh +pnpm install +pnpm dev +``` + +Dev mode uses a loopback oauth client — no keys or cloudflare setup needed. Open the URL shown in the terminal and log in with any Bluesky handle. (The port is randomized per project in case you're running multiple projects at one — set `src/lib/atproto/port.ts`.) + +See [GETTING_STARTED.md](GETTING_STARTED.md) for production deployment, tunnel setup, and configuration. + +## Adding the oauth part to an existing project + +**With an AI agent** — paste this into Claude Code (or similar) in your existing repo: + +``` +add atproto oauth to this project https://raw.githubusercontent.com/flo-bit/svelte-cloudflare-statusphere/main/AGENT_SETUP.md +``` + +The [agent prompt](AGENT_SETUP.md) asks a few questions and sets everything up. + +**Manually** — see [SETUP.md](SETUP.md) for a step-by-step guide. + +## Project Structure + +``` +src/lib/atproto/ +├── auth.svelte.ts # Client-side auth state & login/logout/signup +├── image-helper.ts # Image compression + upload helpers +├── index.ts # Public exports +├── methods.ts # AT Protocol helpers (read/write/resolve) +├── port.ts # Dev server port (randomized per project) +├── settings.ts # Collections, scope, config constants +├── server/ +│ ├── oauth.ts # OAuthClient factory (loopback vs confidential) +│ ├── oauth.remote.ts # Remote functions: login, logout +│ ├── repo.remote.ts # Remote functions: putRecord, deleteRecord, uploadBlob +│ ├── session.ts # Session restoration from signed cookie +│ ├── profile.ts # Profile loading with optional KV cache +│ ├── kv-store.ts # Cloudflare KV-backed Store +│ └── signed-cookie.ts # HMAC-signed cookie helpers +└── scripts/ + ├── generate-key.ts + ├── generate-secret.ts + ├── setup-dev.ts + └── tunnel.ts + +src/routes/(oauth)/ +├── oauth/callback/+server.ts +├── oauth/jwks.json/+server.ts +└── oauth-client-metadata.json/+server.ts +``` + +## How It Works + +- **Auth**: Server-side OAuth via `@atcute/oauth-node-client`. Sessions stored in KV, identified by HMAC-signed `did` cookie. +- **Remote functions**: Write operations and auth actions use SvelteKit remote functions — type-safe server calls without manual API routes. +- **Dev mode**: Loopback client by default. Set `OAUTH_PUBLIC_URL` in `.env` for confidential client via tunnel. +- **Prod mode**: Confidential client with `private_key_jwt`, KV stores, `OAUTH_PUBLIC_URL` from `wrangler.jsonc`. + +## License + +MIT + + +## todo + +- make typesafe (with lexicons) \ No newline at end of file diff --git a/examples/sveltekit-cloudflare-workers/SETUP.md b/examples/sveltekit-cloudflare-workers/SETUP.md new file mode 100644 index 0000000..ab80a04 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/SETUP.md @@ -0,0 +1,279 @@ +# Adding AT Protocol OAuth to your SvelteKit + Cloudflare Workers project + +## 1. Install dependencies + +```sh +pnpm add valibot +pnpm add -D @atcute/oauth-node-client @atcute/identity-resolver @atcute/lexicons @atcute/client @atcute/tid @cloudflare/workers-types tsx +``` + +Add any lexicon types you need (e.g. `@atcute/atproto`, `@atcute/bluesky`). + +## 2. Copy files + +Copy these into your project: + +- `src/lib/atproto/` — auth state, methods, server logic, scripts +- `src/routes/(oauth)/` — OAuth callback, JWKS, and client metadata endpoints + +## 3. Configure + +**`src/lib/atproto/settings.ts`** — set your app's permissions: + +```ts +export const permissions = { + collections: ['your.collection.name'], + rpc: {}, + blobs: [] +} as const; +``` + +The OAuth scope is auto-generated from this config. + +**`src/app.d.ts`** — add session types: + +```ts +import type { OAuthSession } from '@atcute/oauth-node-client'; +import type { Client } from '@atcute/client'; +import type { Did } from '@atcute/lexicons'; + +declare global { + namespace App { + interface Locals { + session: OAuthSession | null; + client: Client | null; + did: Did | null; + } + interface Platform { + env: { + OAUTH_SESSIONS: KVNamespace; + OAUTH_STATES: KVNamespace; + CLIENT_ASSERTION_KEY: string; + COOKIE_SECRET: string; + OAUTH_PUBLIC_URL: string; + PROFILE_CACHE?: KVNamespace; // optional + }; + } + } +} + +import type {} from '@atcute/atproto'; +import type {} from '@atcute/bluesky'; +export {}; +``` + +**`src/hooks.server.ts`** — restore session on every request: + +```ts +import type { Handle } from '@sveltejs/kit'; +import { restoreSession } from '$lib/atproto/server/session'; + +export const handle: Handle = async ({ event, resolve }) => { + const { session, client, did } = await restoreSession( + event.cookies, event.platform?.env + ); + event.locals.session = session; + event.locals.client = client; + event.locals.did = did; + return resolve(event); +}; +``` + +**`wrangler.jsonc`** — add KV namespaces and public URL: + +```sh +npx wrangler kv namespace create OAUTH_SESSIONS +npx wrangler kv namespace create OAUTH_STATES +``` + +add to `wrangler.jsonc` (change the name, url and ids): +```jsonc +{ + "$schema": "node_modules/wrangler/config-schema.json", + "name": "{your-worker-name}", + "main": ".svelte-kit/cloudflare/_worker.js", + "compatibility_date": "2025-12-25", + "compatibility_flags": ["nodejs_compat_v2"], + "vars": { + //for production: "OAUTH_PUBLIC_URL": "https://your-domain.com" + }, + "kv_namespaces": [ + { "binding": "OAUTH_SESSIONS", "id": "" }, + { "binding": "OAUTH_STATES", "id": "" } + ] +} +``` + +**`package.json`** — add helper scripts: + +```json +{ + "env:generate-key": "npx tsx src/lib/atproto/scripts/generate-key.ts", + "env:generate-secret": "npx tsx src/lib/atproto/scripts/generate-secret.ts", + "env:setup-dev": "npx tsx src/lib/atproto/scripts/setup-dev.ts" +} +``` + +**`.env.example`**: + +``` +CLIENT_ASSERTION_KEY= +COOKIE_SECRET= +# Set to your tunnel URL to use a confidential client in dev +OAUTH_PUBLIC_URL= +``` + +## 4. Load profile (optional) + +Add a `src/routes/+layout.server.ts` to load the user's Bluesky profile on every page: + +```ts +import type { LayoutServerLoad } from './$types'; +import { loadProfile } from '$lib/atproto/server/profile'; + +export const load: LayoutServerLoad = async ({ locals, platform }) => { + if (!locals.did) return { did: null, profile: null }; + const profile = await loadProfile(locals.did, platform?.env?.PROFILE_CACHE); + return { did: locals.did, profile }; +}; +``` + +For optional profile caching, create a KV namespace and add it to `wrangler.jsonc`: + +```sh +npx wrangler kv namespace create PROFILE_CACHE +``` + +## 5. Generate secrets + +For local dev: + +```sh +pnpm env:setup-dev +``` + +For production: + +```sh +pnpm env:generate-key +npx wrangler secret put CLIENT_ASSERTION_KEY # paste the generated key + +pnpm env:generate-secret +npx wrangler secret put COOKIE_SECRET # paste the generated secret +``` + +## 6. Add login UI + +### Option A: `@foxui/social` login modal + +Install the UI packages: + +```sh +pnpm add @foxui/social @foxui/core +``` + +Add the login modal to your root layout (`src/routes/+layout.svelte`): + +```svelte + + +{@render children()} + + { + await login(handle); + return true; + }} + signup={async () => { + signup(); + return true; + }} +/> +``` + +Then open the modal from anywhere: + +```svelte + + +{#if user.isLoggedIn} +

Signed in as {user.profile?.handle ?? user.did}

+ +{:else} + +{/if} +``` + +### Option B: Simple inline login + +```svelte + + +{#if user.isLoggedIn} +

Signed in as {user.did}

+ +{:else} + +{/if} +``` + +### Write operations + +```ts +import { putRecord, deleteRecord, uploadBlob } from '$lib/atproto'; + +await putRecord({ + collection: 'your.collection.name', + rkey: 'some-key', + record: { text: 'hello', createdAt: new Date().toISOString() } +}); + +await deleteRecord({ collection: 'your.collection.name', rkey: 'some-key' }); + +const blob = await uploadBlob({ blob: file }); +``` + +### Read operations (no auth needed) + +```ts +import { listRecords, getRecord, getDetailedProfile } from '$lib/atproto'; + +const records = await listRecords({ did: 'did:plc:...', collection: 'your.collection.name' }); +const profile = await getDetailedProfile({ did: 'did:plc:...' }); +``` + +### Server load functions + +```ts +export const load = async ({ locals }) => { + if (!locals.client || !locals.did) return { data: null }; + + const response = await locals.client.get('com.atproto.repo.listRecords', { + params: { repo: locals.did, collection: 'your.collection.name' } + }); + + return { data: response.data }; +}; +``` + +## Dev with tunnel (optional) + +To test the confidential client flow locally: + +1. `pnpm env:setup-dev` +2. Add tunnel URL to `.env`: `OAUTH_PUBLIC_URL=https://your-tunnel.trycloudflare.com` +3. `pnpm tunnel` +4. `pnpm dev` + +Without `OAUTH_PUBLIC_URL`, dev mode uses a loopback public client (no keys needed). diff --git a/examples/sveltekit-cloudflare-workers/eslint.config.js b/examples/sveltekit-cloudflare-workers/eslint.config.js new file mode 100644 index 0000000..aa5987f --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/eslint.config.js @@ -0,0 +1,34 @@ +import prettier from 'eslint-config-prettier'; +import js from '@eslint/js'; +import { includeIgnoreFile } from '@eslint/compat'; +import svelte from 'eslint-plugin-svelte'; +import globals from 'globals'; +import { fileURLToPath } from 'node:url'; +import ts from 'typescript-eslint'; +const gitignorePath = fileURLToPath(new URL('./.gitignore', import.meta.url)); + +export default ts.config( + includeIgnoreFile(gitignorePath), + js.configs.recommended, + ...ts.configs.recommended, + ...svelte.configs['flat/recommended'], + prettier, + ...svelte.configs['flat/prettier'], + { + languageOptions: { + globals: { + ...globals.browser, + ...globals.node + } + } + }, + { + files: ['**/*.svelte'], + + languageOptions: { + parserOptions: { + parser: ts.parser + } + } + } +); diff --git a/examples/sveltekit-cloudflare-workers/package.json b/examples/sveltekit-cloudflare-workers/package.json new file mode 100644 index 0000000..13ee801 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/package.json @@ -0,0 +1,61 @@ +{ + "name": "svelte-cloudflare-statusphere", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "prepare": "svelte-kit sync || echo ''", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "format": "prettier --write .", + "lint": "prettier --check . && eslint .", + "env:generate-key": "npx tsx src/lib/atproto/scripts/generate-key.ts", + "env:generate-secret": "npx tsx src/lib/atproto/scripts/generate-secret.ts", + "env:setup-dev": "npx tsx src/lib/atproto/scripts/setup-dev.ts", + "tunnel": "npx tsx src/lib/atproto/scripts/tunnel.ts" + }, + "devDependencies": { + "@atcute/atproto": "^3.1.10", + "@atcute/bluesky": "^3.3.0", + "@atcute/client": "^4.2.1", + "@atcute/identity-resolver": "^1.2.2", + "@atcute/lexicons": "^1.2.9", + "@atcute/oauth-node-client": "^1.1.0", + "@atcute/tid": "^1.1.2", + "@cloudflare/workers-types": "^4.20260317.1", + "@eslint/compat": "^2.0.3", + "@eslint/js": "^10.0.1", + "@sveltejs/adapter-cloudflare": "^7.2.8", + "@sveltejs/kit": "^2.55.0", + "@sveltejs/vite-plugin-svelte": "^7.0.0", + "@tailwindcss/forms": "^0.5.11", + "@tailwindcss/vite": "^4.2.2", + "bits-ui": "^2.16.4", + "eslint": "^10.1.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-svelte": "^3.16.0", + "globals": "^17.4.0", + "prettier": "^3.8.1", + "prettier-plugin-svelte": "^3.5.1", + "prettier-plugin-tailwindcss": "^0.7.2", + "svelte": "^5.55.0", + "svelte-check": "^4.4.5", + "tailwindcss": "^4.2.2", + "tsx": "^4.21.0", + "typescript": "^6.0.2", + "typescript-eslint": "^8.57.2", + "vite": "^8.0.3", + "wrangler": "^4.78.0" + }, + "license": "MIT", + "dependencies": { + "@atcute/jetstream": "^1.1.2", + "@foxui/core": "^0.8.2", + "@foxui/social": "^0.8.4", + "@foxui/time": "^0.8.2", + "valibot": "^1.3.1" + } +} diff --git a/examples/sveltekit-cloudflare-workers/pnpm-lock.yaml b/examples/sveltekit-cloudflare-workers/pnpm-lock.yaml new file mode 100644 index 0000000..c4505b3 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/pnpm-lock.yaml @@ -0,0 +1,4592 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@atcute/jetstream': + specifier: ^1.1.2 + version: 1.1.2 + '@foxui/core': + specifier: ^0.8.2 + version: 0.8.2(@internationalized/date@3.10.1)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(tailwindcss@4.2.2) + '@foxui/social': + specifier: ^0.8.4 + version: 0.8.4(@internationalized/date@3.10.1)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(@tiptap/extension-code-block@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0))(@tiptap/extensions@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0))(highlight.js@11.11.1)(svelte@5.55.0)(tailwindcss@4.2.2) + '@foxui/time': + specifier: ^0.8.2 + version: 0.8.2(@internationalized/date@3.10.1)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(tailwindcss@4.2.2) + valibot: + specifier: ^1.3.1 + version: 1.3.1(typescript@6.0.2) + devDependencies: + '@atcute/atproto': + specifier: ^3.1.10 + version: 3.1.10 + '@atcute/bluesky': + specifier: ^3.3.0 + version: 3.3.0 + '@atcute/client': + specifier: ^4.2.1 + version: 4.2.1 + '@atcute/identity-resolver': + specifier: ^1.2.2 + version: 1.2.2(@atcute/identity@1.1.4) + '@atcute/lexicons': + specifier: ^1.2.9 + version: 1.2.9 + '@atcute/oauth-node-client': + specifier: ^1.1.0 + version: 1.1.0 + '@atcute/tid': + specifier: ^1.1.2 + version: 1.1.2 + '@cloudflare/workers-types': + specifier: ^4.20260317.1 + version: 4.20260317.1 + '@eslint/compat': + specifier: ^2.0.3 + version: 2.0.3(eslint@10.1.0(jiti@2.6.1)) + '@eslint/js': + specifier: ^10.0.1 + version: 10.0.1(eslint@10.1.0(jiti@2.6.1)) + '@sveltejs/adapter-cloudflare': + specifier: ^7.2.8 + version: 7.2.8(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1)) + '@sveltejs/kit': + specifier: ^2.55.0 + version: 2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)) + '@sveltejs/vite-plugin-svelte': + specifier: ^7.0.0 + version: 7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)) + '@tailwindcss/forms': + specifier: ^0.5.11 + version: 0.5.11(tailwindcss@4.2.2) + '@tailwindcss/vite': + specifier: ^4.2.2 + version: 4.2.2(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)) + bits-ui: + specifier: ^2.16.4 + version: 2.16.4(@internationalized/date@3.10.1)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0) + eslint: + specifier: ^10.1.0 + version: 10.1.0(jiti@2.6.1) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.1.0(jiti@2.6.1)) + eslint-plugin-svelte: + specifier: ^3.16.0 + version: 3.16.0(eslint@10.1.0(jiti@2.6.1))(svelte@5.55.0) + globals: + specifier: ^17.4.0 + version: 17.4.0 + prettier: + specifier: ^3.8.1 + version: 3.8.1 + prettier-plugin-svelte: + specifier: ^3.5.1 + version: 3.5.1(prettier@3.8.1)(svelte@5.55.0) + prettier-plugin-tailwindcss: + specifier: ^0.7.2 + version: 0.7.2(prettier-plugin-svelte@3.5.1(prettier@3.8.1)(svelte@5.55.0))(prettier@3.8.1) + svelte: + specifier: ^5.55.0 + version: 5.55.0 + svelte-check: + specifier: ^4.4.5 + version: 4.4.5(picomatch@4.0.4)(svelte@5.55.0)(typescript@6.0.2) + tailwindcss: + specifier: ^4.2.2 + version: 4.2.2 + tsx: + specifier: ^4.21.0 + version: 4.21.0 + typescript: + specifier: ^6.0.2 + version: 6.0.2 + typescript-eslint: + specifier: ^8.57.2 + version: 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + vite: + specifier: ^8.0.3 + version: 8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0) + wrangler: + specifier: ^4.78.0 + version: 4.78.0(@cloudflare/workers-types@4.20260317.1) + +packages: + + '@atcute/atproto@3.1.10': + resolution: {integrity: sha512-+GKZpOc0PJcdWMQEkTfg/rSNDAAHxmAUGBl60g2az15etqJn5WaUPNGFE2sB7hKpwi5Ue2h/L0OacINcE/JDDQ==, tarball: https://registry.npmjs.org/@atcute/atproto/-/atproto-3.1.10.tgz} + + '@atcute/bluesky-richtext-segmenter@3.0.0': + resolution: {integrity: sha512-NhZTUKtFpeBBbILwAcxj5u4RobIoHOmGw3CAaaEFNebKYSvmTecrXJ7XufHw5DFOUdr8SiKXQVRQxGAxulMNWg==, tarball: https://registry.npmjs.org/@atcute/bluesky-richtext-segmenter/-/bluesky-richtext-segmenter-3.0.0.tgz} + + '@atcute/bluesky@3.3.0': + resolution: {integrity: sha512-TrLnlxuD6F/D2ZYzJ3aCiRD0yiFuhmVsd6oULNzzr8V9Xzlufg0yxkRiGmbMiF2iI508y/MFi6vzo625301c5A==, tarball: https://registry.npmjs.org/@atcute/bluesky/-/bluesky-3.3.0.tgz} + + '@atcute/client@4.2.1': + resolution: {integrity: sha512-ZBFM2pW075JtgGFu5g7HHZBecrClhlcNH8GVP9Zz1aViWR+cjjBsTpeE63rJs+FCOHFYlirUyo5L8SGZ4kMINw==, tarball: https://registry.npmjs.org/@atcute/client/-/client-4.2.1.tgz} + + '@atcute/identity-resolver@1.2.2': + resolution: {integrity: sha512-eUh/UH4bFvuXS0X7epYCeJC/kj4rbBXfSRumLEH4smMVwNOgTo7cL/0Srty+P/qVPoZEyXdfEbS0PHJyzoXmHw==, tarball: https://registry.npmjs.org/@atcute/identity-resolver/-/identity-resolver-1.2.2.tgz} + peerDependencies: + '@atcute/identity': ^1.0.0 + + '@atcute/identity@1.1.4': + resolution: {integrity: sha512-RCw1IqflfuSYCxK5m0lZCm0UnvIzcUnuhngiBhJEJb9a9Mc2SEf1xP3H8N5r8pvEH1LoAYd6/zrvCNU+uy9esw==, tarball: https://registry.npmjs.org/@atcute/identity/-/identity-1.1.4.tgz} + + '@atcute/jetstream@1.1.2': + resolution: {integrity: sha512-u6p/h2xppp7LE6W/9xErAJ6frfN60s8adZuCKtfAaaBBiiYbb1CfpzN8Uc+2qtJZNorqGvuuDb5572Jmh7yHBQ==, tarball: https://registry.npmjs.org/@atcute/jetstream/-/jetstream-1.1.2.tgz} + + '@atcute/lexicons@1.2.9': + resolution: {integrity: sha512-/RRHm2Cw9o8Mcsrq0eo8fjS9okKYLGfuFwrQ0YoP/6sdSDsXshaTLJsvLlcUcaDaSJ1YFOuHIo3zr2Om2F/16g==, tarball: https://registry.npmjs.org/@atcute/lexicons/-/lexicons-1.2.9.tgz} + + '@atcute/multibase@1.2.0': + resolution: {integrity: sha512-ZK2GRra+qIYq9nNuQB52m2ul0hOmCQEtPobGfTSUxm7pF0OGEkWGkWHugFhNEDVzHzTwPxHp6VGotdZFue4lYQ==, tarball: https://registry.npmjs.org/@atcute/multibase/-/multibase-1.2.0.tgz} + + '@atcute/oauth-crypto@0.1.0': + resolution: {integrity: sha512-qZYDCNLF/4B6AndYT1rsQelN8621AC5u/sL5PHvlr/qqAbmmUwCBGjEgRSyZtHE1AqD60VNiSMlOgAuEQTSl3w==, tarball: https://registry.npmjs.org/@atcute/oauth-crypto/-/oauth-crypto-0.1.0.tgz} + + '@atcute/oauth-keyset@0.1.0': + resolution: {integrity: sha512-+wqT/+I5Lg9VzKnKY3g88+N45xbq+wsdT6bHDGqCVa2u57gRvolFF4dY+weMfc/OX641BIZO6/o+zFtKBsMQnQ==, tarball: https://registry.npmjs.org/@atcute/oauth-keyset/-/oauth-keyset-0.1.0.tgz} + + '@atcute/oauth-node-client@1.1.0': + resolution: {integrity: sha512-xCp/VfjtvTeKscKR/oI2hdMTp1/DaF/7ll8b6yZOCgbKlVDDfhCn5mmKNVARGTNaoywxrXG3XffbWCIx3/E87w==, tarball: https://registry.npmjs.org/@atcute/oauth-node-client/-/oauth-node-client-1.1.0.tgz} + + '@atcute/oauth-types@0.1.1': + resolution: {integrity: sha512-u+3KMjse3Uc/9hDyilu1QVN7IpcnjVXgRzhddzBB8Uh6wePHNVBDdi9wQvFTVVA3zmxtMJVptXRyLLg6Ou9bqg==, tarball: https://registry.npmjs.org/@atcute/oauth-types/-/oauth-types-0.1.1.tgz} + + '@atcute/tid@1.1.2': + resolution: {integrity: sha512-bmPuOX/TOfcm/vsK9vM98spjkcx2wgd9S2PeK5oLgEr8IbNRPq7iMCAPzOL1nu5XAW3LlkOYQEbYRcw5vcQ37w==, tarball: https://registry.npmjs.org/@atcute/tid/-/tid-1.1.2.tgz} + + '@atcute/time-ms@1.3.2': + resolution: {integrity: sha512-F+qOyR9pO55g1d/QmN+Gr+fimoUQQLusdGSB6pjV0wW5KPILR4oQ4e2ZhWzqUbeHLAgWvgoTTMsMDdz62Xa2tg==, tarball: https://registry.npmjs.org/@atcute/time-ms/-/time-ms-1.3.2.tgz} + + '@atcute/uint8array@1.1.1': + resolution: {integrity: sha512-3LsC8XB8TKe9q/5hOA5sFuzGaIFdJZJNewC5OKa3o/eU6+K7JR6see9Zy2JbQERNVnRl11EzbNov1efgLMAs4g==, tarball: https://registry.npmjs.org/@atcute/uint8array/-/uint8array-1.1.1.tgz} + + '@atcute/util-fetch@1.0.5': + resolution: {integrity: sha512-qjHj01BGxjSjIFdPiAjSARnodJIIyKxnCMMEcXMESo9TAyND6XZQqrie5fia+LlYWVXdpsTds8uFQwc9jdKTig==, tarball: https://registry.npmjs.org/@atcute/util-fetch/-/util-fetch-1.0.5.tgz} + + '@atcute/util-text@1.2.0': + resolution: {integrity: sha512-b8WSh+Z7K601eUFFmTFj8QPKDO8Ic0VDDj63sdKzpkm+ySQKsYT5nXekViGqFVKbyKj1V5FyvZvgXad6/aI4QQ==, tarball: https://registry.npmjs.org/@atcute/util-text/-/util-text-1.2.0.tgz} + + '@badrap/valita@0.4.6': + resolution: {integrity: sha512-4kdqcjyxo/8RQ8ayjms47HCWZIF5981oE5nIenbfThKDxWXtEHKipAOWlflpPJzZx9y/JWYQkp18Awr7VuepFg==, tarball: https://registry.npmjs.org/@badrap/valita/-/valita-0.4.6.tgz} + engines: {node: '>= 18'} + + '@cloudflare/kv-asset-handler@0.4.2': + resolution: {integrity: sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==, tarball: https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.2.tgz} + engines: {node: '>=18.0.0'} + + '@cloudflare/unenv-preset@2.16.0': + resolution: {integrity: sha512-8ovsRpwzPoEqPUzoErAYVv8l3FMZNeBVQfJTvtzP4AgLSRGZISRfuChFxHWUQd3n6cnrwkuTGxT+2cGo8EsyYg==, tarball: https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.16.0.tgz} + peerDependencies: + unenv: 2.0.0-rc.24 + workerd: 1.20260301.1 || ~1.20260302.1 || ~1.20260303.1 || ~1.20260304.1 || >1.20260305.0 <2.0.0-0 + peerDependenciesMeta: + workerd: + optional: true + + '@cloudflare/workerd-darwin-64@1.20260317.1': + resolution: {integrity: sha512-8hjh3sPMwY8M/zedq3/sXoA2Q4BedlGufn3KOOleIG+5a4ReQKLlUah140D7J6zlKmYZAFMJ4tWC7hCuI/s79g==, tarball: https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20260317.1.tgz} + engines: {node: '>=16'} + cpu: [x64] + os: [darwin] + + '@cloudflare/workerd-darwin-arm64@1.20260317.1': + resolution: {integrity: sha512-M/MnNyvO5HMgoIdr3QHjdCj2T1ki9gt0vIUnxYxBu9ISXS/jgtMl6chUVPJ7zHYBn9MyYr8ByeN6frjYxj0MGg==, tarball: https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20260317.1.tgz} + engines: {node: '>=16'} + cpu: [arm64] + os: [darwin] + + '@cloudflare/workerd-linux-64@1.20260317.1': + resolution: {integrity: sha512-1ltuEjkRcS3fsVF7CxsKlWiRmzq2ZqMfqDN0qUOgbUwkpXsLVJsXmoblaLf5OP00ELlcgF0QsN0p2xPEua4Uug==, tarball: https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20260317.1.tgz} + engines: {node: '>=16'} + cpu: [x64] + os: [linux] + + '@cloudflare/workerd-linux-arm64@1.20260317.1': + resolution: {integrity: sha512-3QrNnPF1xlaNwkHpasvRvAMidOvQs2NhXQmALJrEfpIJ/IDL2la8g499yXp3eqhG3hVMCB07XVY149GTs42Xtw==, tarball: https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20260317.1.tgz} + engines: {node: '>=16'} + cpu: [arm64] + os: [linux] + + '@cloudflare/workerd-windows-64@1.20260317.1': + resolution: {integrity: sha512-MfZTz+7LfuIpMGTa3RLXHX8Z/pnycZLItn94WRdHr8LPVet+C5/1Nzei399w/jr3+kzT4pDKk26JF/tlI5elpQ==, tarball: https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20260317.1.tgz} + engines: {node: '>=16'} + cpu: [x64] + os: [win32] + + '@cloudflare/workers-types@4.20260317.1': + resolution: {integrity: sha512-+G4eVwyCpm8Au1ex8vQBCuA9wnwqetz4tPNRoB/53qvktERWBRMQnrtvC1k584yRE3emMThtuY0gWshvSJ++PQ==, tarball: https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20260317.1.tgz} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==, tarball: https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz} + engines: {node: '>=12'} + + '@emnapi/core@1.9.1': + resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==, tarball: https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz} + + '@emnapi/runtime@1.9.1': + resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==, tarball: https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz} + + '@emnapi/wasi-threads@1.2.0': + resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==, tarball: https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz} + + '@esbuild/aix-ppc64@0.27.3': + resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.27.4': + resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.27.3': + resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.27.4': + resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.27.3': + resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.27.4': + resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.27.3': + resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.27.4': + resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.27.3': + resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.27.4': + resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.3': + resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.4': + resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.27.3': + resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.27.4': + resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.3': + resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.4': + resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.27.3': + resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.27.4': + resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.27.3': + resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.27.4': + resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.27.3': + resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.27.4': + resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.27.3': + resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.27.4': + resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.27.3': + resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.27.4': + resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.27.3': + resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.27.4': + resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.3': + resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.4': + resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.27.3': + resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.27.4': + resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.27.3': + resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.27.4': + resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.27.3': + resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==, tarball: https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-arm64@0.27.4': + resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==, tarball: https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.3': + resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.4': + resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.27.3': + resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==, tarball: https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-arm64@0.27.4': + resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==, tarball: https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.3': + resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.4': + resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.27.3': + resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==, tarball: https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/openharmony-arm64@0.27.4': + resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==, tarball: https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.27.3': + resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.27.4': + resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.27.3': + resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.27.4': + resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.27.3': + resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.27.4': + resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.27.3': + resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.27.4': + resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==, tarball: https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==, tarball: https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/compat@2.0.3': + resolution: {integrity: sha512-SjIJhGigp8hmd1YGIBwh7Ovri7Kisl42GYFjrOyHhtfYGGoLW6teYi/5p8W50KSsawUPpuLOSmsq1bD0NGQLBw==, tarball: https://registry.npmjs.org/@eslint/compat/-/compat-2.0.3.tgz} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + peerDependencies: + eslint: ^8.40 || 9 || 10 + peerDependenciesMeta: + eslint: + optional: true + + '@eslint/config-array@0.23.3': + resolution: {integrity: sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==, tarball: https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.3.tgz} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/config-helpers@0.5.3': + resolution: {integrity: sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==, tarball: https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.3.tgz} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/core@1.1.1': + resolution: {integrity: sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==, tarball: https://registry.npmjs.org/@eslint/core/-/core-1.1.1.tgz} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/js@10.0.1': + resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==, tarball: https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + peerDependencies: + eslint: ^10.0.0 + peerDependenciesMeta: + eslint: + optional: true + + '@eslint/object-schema@3.0.3': + resolution: {integrity: sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==, tarball: https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.3.tgz} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/plugin-kit@0.6.1': + resolution: {integrity: sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==, tarball: https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.6.1.tgz} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@floating-ui/core@1.7.5': + resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==, tarball: https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz} + + '@floating-ui/dom@1.7.6': + resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==, tarball: https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz} + + '@floating-ui/utils@0.2.11': + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==, tarball: https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz} + + '@foxui/core@0.8.2': + resolution: {integrity: sha512-cVfFCQX4SfL7mezfQHAHln8M+ZiEZlwa4lIXMFUATLuhl4YCcwv7IvvtU+hMvq2ky+vsCEEry1XvXOLdSe6zAA==, tarball: https://registry.npmjs.org/@foxui/core/-/core-0.8.2.tgz} + peerDependencies: + svelte: '>=5' + tailwindcss: '>=3' + + '@foxui/social@0.8.4': + resolution: {integrity: sha512-+5pV402gpEwxSdWb0EMr2SKG/kutCEXzQI930oGA6Q8O/Dnk14noCf/hYAtZvBlAd0cwa6Grlgt7/VEwzU5NDg==, tarball: https://registry.npmjs.org/@foxui/social/-/social-0.8.4.tgz} + peerDependencies: + svelte: '>=5' + tailwindcss: '>=3' + + '@foxui/text@0.8.2': + resolution: {integrity: sha512-f1WotRAzZszqcg/c0RBs9Wuy7KdyHhsZRJNBaufFLl+hzMhCSJQq11lQPdRCUITKP2rBfeguZfqkAcqi0PuI8w==, tarball: https://registry.npmjs.org/@foxui/text/-/text-0.8.2.tgz} + peerDependencies: + svelte: '>=5' + tailwindcss: '>=3' + + '@foxui/time@0.8.2': + resolution: {integrity: sha512-w60jJij44bcle905AL/vBijyI/ilY4cSA21yxYg8C6swm5uH5wooW1fSFaTuC/Lg0GfhwTkW963kz66vVsYbiw==, tarball: https://registry.npmjs.org/@foxui/time/-/time-0.8.2.tgz} + peerDependencies: + svelte: '>=5' + tailwindcss: '>=3' + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==, tarball: https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==, tarball: https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, tarball: https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==, tarball: https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz} + engines: {node: '>=18.18'} + + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==, tarball: https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==, tarball: https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==, tarball: https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==, tarball: https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==, tarball: https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz} + cpu: [riscv64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==, tarball: https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==, tarball: https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==, tarball: https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==, tarball: https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==, tarball: https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==, tarball: https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==, tarball: https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==, tarball: https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==, tarball: https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==, tarball: https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==, tarball: https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==, tarball: https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@internationalized/date@3.10.1': + resolution: {integrity: sha512-oJrXtQiAXLvT9clCf1K4kxp3eKsQhIaZqxEyowkBcsvZDdZkbWrVmnGknxs5flTD0VGsxrxKgBCZty1EzoiMzA==, tarball: https://registry.npmjs.org/@internationalized/date/-/date-3.10.1.tgz} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==, tarball: https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==, tarball: https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, tarball: https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==, tarball: https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==, tarball: https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==, tarball: https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz} + + '@mary-ext/event-iterator@1.0.0': + resolution: {integrity: sha512-l6gCPsWJ8aRCe/s7/oCmero70kDHgIK5m4uJvYgwEYTqVxoBOIXbKr5tnkLqUHEg6mNduB4IWvms3h70Hp9ADQ==, tarball: https://registry.npmjs.org/@mary-ext/event-iterator/-/event-iterator-1.0.0.tgz} + + '@mary-ext/simple-event-emitter@1.0.1': + resolution: {integrity: sha512-9+VvZisxZ/gSg+JJH7hmXaA8Qj42Qjz3O58RSB+INYc8iLA0icATZxHB9vKbj59ojDGZjO3hCKzMXocx3L0H8w==, tarball: https://registry.npmjs.org/@mary-ext/simple-event-emitter/-/simple-event-emitter-1.0.1.tgz} + + '@napi-rs/wasm-runtime@1.1.2': + resolution: {integrity: sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==, tarball: https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.2.tgz} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + + '@number-flow/svelte@0.4.0': + resolution: {integrity: sha512-9tnowrlZlBV3IVe3Gm1V7yXSf4Ugag2k7iW45xqb04HXSa1ApEImopvGWAjJpHDvS849o+UCb0YH461Mtde9lA==, tarball: https://registry.npmjs.org/@number-flow/svelte/-/svelte-0.4.0.tgz} + peerDependencies: + svelte: ^4 || ^5 + + '@oxc-project/types@0.122.0': + resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==, tarball: https://registry.npmjs.org/@oxc-project/types/-/types-0.122.0.tgz} + + '@polka/url@1.0.0-next.29': + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==, tarball: https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz} + + '@poppinss/colors@4.1.6': + resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==, tarball: https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.6.tgz} + + '@poppinss/dumper@0.6.5': + resolution: {integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==, tarball: https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.6.5.tgz} + + '@poppinss/exception@1.2.3': + resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==, tarball: https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.3.tgz} + + '@remirror/core-constants@3.0.0': + resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==, tarball: https://registry.npmjs.org/@remirror/core-constants/-/core-constants-3.0.0.tgz} + + '@rolldown/binding-android-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==, tarball: https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.12.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==, tarball: https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.12.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-rc.12': + resolution: {integrity: sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==, tarball: https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.12.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-rc.12': + resolution: {integrity: sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==, tarball: https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.12.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': + resolution: {integrity: sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==, tarball: https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.12.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==, tarball: https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.12.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': + resolution: {integrity: sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==, tarball: https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.12.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==, tarball: https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.12.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==, tarball: https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.12.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==, tarball: https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.12.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': + resolution: {integrity: sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==, tarball: https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.12.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==, tarball: https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.12.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': + resolution: {integrity: sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==, tarball: https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.12.tgz} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': + resolution: {integrity: sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==, tarball: https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.12.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': + resolution: {integrity: sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==, tarball: https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.12.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.0-rc.12': + resolution: {integrity: sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==, tarball: https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.12.tgz} + + '@sindresorhus/is@7.2.0': + resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==, tarball: https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz} + engines: {node: '>=18'} + + '@speed-highlight/core@1.2.15': + resolution: {integrity: sha512-BMq1K3DsElxDWawkX6eLg9+CKJrTVGCBAWVuHXVUV2u0s2711qiChLSId6ikYPfxhdYocLNt3wWwSvDiTvFabw==, tarball: https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.15.tgz} + + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==, tarball: https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz} + + '@sveltejs/acorn-typescript@1.0.9': + resolution: {integrity: sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==, tarball: https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.9.tgz} + peerDependencies: + acorn: ^8.9.0 + + '@sveltejs/adapter-cloudflare@7.2.8': + resolution: {integrity: sha512-bIdhY/Fi4AQmqiBdQVKnafH1h9Gw+xbCvHyUu4EouC8rJOU02zwhi14k/FDhQ0mJF1iblIu3m8UNQ8GpGIvIOQ==, tarball: https://registry.npmjs.org/@sveltejs/adapter-cloudflare/-/adapter-cloudflare-7.2.8.tgz} + peerDependencies: + '@sveltejs/kit': ^2.0.0 + wrangler: ^4.0.0 + + '@sveltejs/kit@2.55.0': + resolution: {integrity: sha512-MdFRjevVxmAknf2NbaUkDF16jSIzXMWd4Nfah0Qp8TtQVoSp3bV4jKt8mX7z7qTUTWvgSaxtR0EG5WJf53gcuA==, tarball: https://registry.npmjs.org/@sveltejs/kit/-/kit-2.55.0.tgz} + engines: {node: '>=18.13'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 || ^7.0.0 + svelte: ^4.0.0 || ^5.0.0-next.0 + typescript: ^5.3.3 + vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 || ^8.0.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + typescript: + optional: true + + '@sveltejs/vite-plugin-svelte@7.0.0': + resolution: {integrity: sha512-ILXmxC7HAsnkK2eslgPetrqqW1BKSL7LktsFgqzNj83MaivMGZzluWq32m25j2mDOjmSKX7GGWahePhuEs7P/g==, tarball: https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-7.0.0.tgz} + engines: {node: ^20.19 || ^22.12 || >=24} + peerDependencies: + svelte: ^5.46.4 + vite: ^8.0.0-beta.7 || ^8.0.0 + + '@swc/helpers@0.5.20': + resolution: {integrity: sha512-2egEBHUMasdypIzrprsu8g+OEVd7Vp2MM3a2eVlM/cyFYto0nGz5BX5BTgh/ShZZI9ed+ozEq+Ngt+rgmUs8tw==, tarball: https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.20.tgz} + + '@tailwindcss/forms@0.5.11': + resolution: {integrity: sha512-h9wegbZDPurxG22xZSoWtdzc41/OlNEUQERNqI/0fOwa2aVlWGu7C35E/x6LDyD3lgtztFSSjKZyuVM0hxhbgA==, tarball: https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.11.tgz} + peerDependencies: + tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1' + + '@tailwindcss/node@4.2.2': + resolution: {integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==, tarball: https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.2.tgz} + + '@tailwindcss/oxide-android-arm64@4.2.2': + resolution: {integrity: sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.2.tgz} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.2.2': + resolution: {integrity: sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.2.tgz} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.2.2': + resolution: {integrity: sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.2.tgz} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.2.2': + resolution: {integrity: sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.2.tgz} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': + resolution: {integrity: sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.2.tgz} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': + resolution: {integrity: sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.2.tgz} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.2.2': + resolution: {integrity: sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.2.tgz} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.2.2': + resolution: {integrity: sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.2.tgz} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.2.2': + resolution: {integrity: sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.2.tgz} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-wasm32-wasi@4.2.2': + resolution: {integrity: sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.2.tgz} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': + resolution: {integrity: sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.2.tgz} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.2.2': + resolution: {integrity: sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.2.tgz} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.2.2': + resolution: {integrity: sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==, tarball: https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.2.tgz} + engines: {node: '>= 20'} + + '@tailwindcss/vite@4.2.2': + resolution: {integrity: sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==, tarball: https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.2.tgz} + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 || ^8 + + '@tiptap/core@3.21.0': + resolution: {integrity: sha512-IfnQiuEeabDSPr1C/zHFTbnvlTf5z0DE/d/xz4C6bkL4ZBDJ3rr99h2qsaV0l8F+kbNswZMlQdM8rxNlMy95fQ==, tarball: https://registry.npmjs.org/@tiptap/core/-/core-3.21.0.tgz} + peerDependencies: + '@tiptap/pm': ^3.21.0 + + '@tiptap/extension-blockquote@3.21.0': + resolution: {integrity: sha512-JDM/RR6rM0dMCZ1UnEf7eqmN6pAdIa2llhN+E24HdTGNJCklMFhLAGE/OT8/1r7M0WWA9GVO7/PTe4EdGh6+lQ==, tarball: https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-3.21.0.tgz} + peerDependencies: + '@tiptap/core': ^3.21.0 + + '@tiptap/extension-bold@3.21.0': + resolution: {integrity: sha512-iyEJRzG7XTCPlHwEDzUw3HnuYYCfL7lNpcCHmxcpYMrIUA8rv7EUxerIwApT6xY8hQ/07ljuJKgOyPvnJOOzuA==, tarball: https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-3.21.0.tgz} + peerDependencies: + '@tiptap/core': ^3.21.0 + + '@tiptap/extension-bubble-menu@3.21.0': + resolution: {integrity: sha512-/fabRRhhf8i4LAx9e8xz9ppqN5KgdJk3TxMuxAD5vAWGsejvhSoPa8O8H/QwwyntXm1Vue8aQiMHsUk48b2hGQ==, tarball: https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-3.21.0.tgz} + peerDependencies: + '@tiptap/core': ^3.21.0 + '@tiptap/pm': ^3.21.0 + + '@tiptap/extension-bullet-list@3.21.0': + resolution: {integrity: sha512-PWNF+xwxgOeXYGD88sCQLKL0eBoQqjUnZNALxBjN3Y7x4llalh42rHOp2Nt2t6UbQgqTBtBzU/uFcussTpxreQ==, tarball: https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-3.21.0.tgz} + peerDependencies: + '@tiptap/extension-list': ^3.21.0 + + '@tiptap/extension-code-block-lowlight@3.21.0': + resolution: {integrity: sha512-79sS0tqoGVX6wq30ejzohpUVLeGOkTTUn5hCqjsniyYPTEtrn4tHyBnS4Du2TbrDV4SqcwgisWExhuB8pfEdYQ==, tarball: https://registry.npmjs.org/@tiptap/extension-code-block-lowlight/-/extension-code-block-lowlight-3.21.0.tgz} + peerDependencies: + '@tiptap/core': ^3.21.0 + '@tiptap/extension-code-block': ^3.21.0 + '@tiptap/pm': ^3.21.0 + highlight.js: ^11 + lowlight: ^2 || ^3 + + '@tiptap/extension-code-block@3.21.0': + resolution: {integrity: sha512-zrVOcOzDCjHQ8NJcC+qHmZZKiwnP/NMSb3qVJlSMN8TzuHept1MZCDa2Mbo70O6I0txo456SGuXB9sqV1vHmGg==, tarball: https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-3.21.0.tgz} + peerDependencies: + '@tiptap/core': ^3.21.0 + '@tiptap/pm': ^3.21.0 + + '@tiptap/extension-code@3.21.0': + resolution: {integrity: sha512-D7wA9jp+4X2r1f3FIoga73s6Rn4rmZY57Jes6a4rK3HY+3yHk1r057pPIZSY8Drfs97jxHQVFdfUYUomLSFYBA==, tarball: https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-3.21.0.tgz} + peerDependencies: + '@tiptap/core': ^3.21.0 + + '@tiptap/extension-document@3.21.0': + resolution: {integrity: sha512-7oCyzXI9ChvJQUlr23AURdfVar4OIsrYUvqdhEwo3bjcI/Q/j0KJiXfuh6ZzL5eVaINSailH53sZaGg4THQtUg==, tarball: https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.21.0.tgz} + peerDependencies: + '@tiptap/core': ^3.21.0 + + '@tiptap/extension-dropcursor@3.21.0': + resolution: {integrity: sha512-6fsDSVAM2iz7eElvT6iivMrGBGjIP/oPigVZ/SPm6f31phaYhz6TIOEgV/Lr2jaPIOgyK4U0cU4Yd4KUBCmhzQ==, tarball: https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-3.21.0.tgz} + peerDependencies: + '@tiptap/extensions': ^3.21.0 + + '@tiptap/extension-floating-menu@3.21.0': + resolution: {integrity: sha512-n2HzTB+I/5rAl8R/1sKMv92JiY1oDK1hroXizxEKYa6dskJcAMW0CfYyPcPOZWQQEe7qoeOvQISr2ooLAKW+Mw==, tarball: https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-3.21.0.tgz} + peerDependencies: + '@floating-ui/dom': ^1.0.0 + '@tiptap/core': ^3.21.0 + '@tiptap/pm': ^3.21.0 + + '@tiptap/extension-gapcursor@3.21.0': + resolution: {integrity: sha512-wGjgAoYBTvPAe9QYMI5px355XcNeMkaUrMY9IHbMqgqdmHcDxqooxM4H6sYVX2CRcHwXy4I8NQAoOhSYrQJDMg==, tarball: https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-3.21.0.tgz} + peerDependencies: + '@tiptap/extensions': ^3.21.0 + + '@tiptap/extension-hard-break@3.21.0': + resolution: {integrity: sha512-6JFVSAOQ1qhQHi9mVcdn2/XO8YIMgYV8zjarzNUzP6Sf2waeE5BLXjlg6rIH/945sY1J+FndTojLru6gQ07a5A==, tarball: https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-3.21.0.tgz} + peerDependencies: + '@tiptap/core': ^3.21.0 + + '@tiptap/extension-heading@3.21.0': + resolution: {integrity: sha512-ji6VJmoRnDzAHYflEYEZohMHRi77UGLW1o3ua7UhI32iJ9nuYssbPNuzEeE4SvENMQwZRszad5+a+dKAa+NC7g==, tarball: https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-3.21.0.tgz} + peerDependencies: + '@tiptap/core': ^3.21.0 + + '@tiptap/extension-history@3.21.0': + resolution: {integrity: sha512-aYUxm0fLXGfn4XAsRq53lOX1cB+GRF8rScVuDHmQfEaJHNo09DSRtvgWnDHVdqIS8FvKkBcTO8eyPOBPMvkWiA==, tarball: https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-3.21.0.tgz} + peerDependencies: + '@tiptap/extensions': ^3.21.0 + + '@tiptap/extension-horizontal-rule@3.21.0': + resolution: {integrity: sha512-vNBnOfFEY62CoJPGo4nonRM7RiOvhII1vhoO+WFr1GxDqCAfmEFjToflt7JT1UJdo6lMVcD+aaaAgOiuSz5p6g==, tarball: https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.21.0.tgz} + peerDependencies: + '@tiptap/core': ^3.21.0 + '@tiptap/pm': ^3.21.0 + + '@tiptap/extension-image@3.21.0': + resolution: {integrity: sha512-W9786a2K4LSZJMPeRLmoDulJeXOsM0ueRV2MHjTol7ikPRauROB7GUbAz9DyPAJHA2AGUfpswnGAYPO3tz5CLg==, tarball: https://registry.npmjs.org/@tiptap/extension-image/-/extension-image-3.21.0.tgz} + peerDependencies: + '@tiptap/core': ^3.21.0 + + '@tiptap/extension-italic@3.21.0': + resolution: {integrity: sha512-2I8oPvwyXhRn1k8lbDFIutzvhtLEjoO5mmQCNX4TnT4PdxxaSrK9+ihYg12VeqhUeO7dg1MKiFqws0HVBrwzWg==, tarball: https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-3.21.0.tgz} + peerDependencies: + '@tiptap/core': ^3.21.0 + + '@tiptap/extension-link@3.21.0': + resolution: {integrity: sha512-oMU7Yve1sbgBsaFAUc2R0GPf4d3ZPVJeMUFC6b6X9rJIvx/IhEUEn9toQcSBGfp02uWK9NdQyIFYFdWlVXH++w==, tarball: https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-3.21.0.tgz} + peerDependencies: + '@tiptap/core': ^3.21.0 + '@tiptap/pm': ^3.21.0 + + '@tiptap/extension-list-item@3.21.0': + resolution: {integrity: sha512-1ZymZmlQVbAoC4q5x3cro0v5+3I6l+BHqbhIMQLjQFlAOJfcE0pvqRzAFW7PduxUj41tXEtsYqp2NREvO9F5Fg==, tarball: https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-3.21.0.tgz} + peerDependencies: + '@tiptap/extension-list': ^3.21.0 + + '@tiptap/extension-list-keymap@3.21.0': + resolution: {integrity: sha512-EzrfW3ASNFPWKhR8sNOq7Kqw4hvaTAOn4dlI7chB8HIANSrlyPOUn+eKAnO6HQgsUgsbjg2GbTUrGrxcoLykUg==, tarball: https://registry.npmjs.org/@tiptap/extension-list-keymap/-/extension-list-keymap-3.21.0.tgz} + peerDependencies: + '@tiptap/extension-list': ^3.21.0 + + '@tiptap/extension-list@3.21.0': + resolution: {integrity: sha512-KeBlEtLrGce2d3dgL89hmwWEtREuzlW4XY5bYWpKNvCbFqvdSb3n7vkdkw32YclZmMWxAcABgW6ucCStkE0rsQ==, tarball: https://registry.npmjs.org/@tiptap/extension-list/-/extension-list-3.21.0.tgz} + peerDependencies: + '@tiptap/core': ^3.21.0 + '@tiptap/pm': ^3.21.0 + + '@tiptap/extension-ordered-list@3.21.0': + resolution: {integrity: sha512-+d+0orokMfqaBfvr9tUBgGvo2ZCV+fR3JzsJTmnLBWOkhBSJN7H4pnfXPTue0qwspUwRmkLJxdIlU+J7HkMrng==, tarball: https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.21.0.tgz} + peerDependencies: + '@tiptap/extension-list': ^3.21.0 + + '@tiptap/extension-paragraph@3.21.0': + resolution: {integrity: sha512-cMPG/jCoZ9NmLZ5ctFziILaxJGfDtMTb5OLBhifMFZeMVwF1pEJIygDEfnX/HSruv507weZSQG4pERO2tRszMg==, tarball: https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.21.0.tgz} + peerDependencies: + '@tiptap/core': ^3.21.0 + + '@tiptap/extension-placeholder@3.21.0': + resolution: {integrity: sha512-fs+cQqMh1d1naV6OgOhP/0qbRJwtw8DpQMj3/oqGKbaRRKIeecEaZPXYRd7MYa4e9K0Cfk5Bm0MNs9lwu/BYsw==, tarball: https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-3.21.0.tgz} + peerDependencies: + '@tiptap/extensions': ^3.21.0 + + '@tiptap/extension-strike@3.21.0': + resolution: {integrity: sha512-easnVaN11Wl+5fOtfvzJ10J762S9TRXZaMj5rLBGavgf82DCYHqhGhBqpLQrJ41r4nPABGlYvTRoxfvBLB74Lg==, tarball: https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-3.21.0.tgz} + peerDependencies: + '@tiptap/core': ^3.21.0 + + '@tiptap/extension-text@3.21.0': + resolution: {integrity: sha512-Zx8QdB8a5iBuE4uO21c3BjmpBfaJEr2Jd1QFnsdgx11fm6P7dGgZaGko1FaINhfOPRGTN6O/kiF02cDMdOHa/w==, tarball: https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-3.21.0.tgz} + peerDependencies: + '@tiptap/core': ^3.21.0 + + '@tiptap/extension-typography@3.21.0': + resolution: {integrity: sha512-/nHtkQTtBPmQPe4JnEGBxxCKIv2FToSB3PUfh7b4cccNkbs7yJZO30ySNJcMzNfn8pfSQPkJxZJcFuSm9RjZdg==, tarball: https://registry.npmjs.org/@tiptap/extension-typography/-/extension-typography-3.21.0.tgz} + peerDependencies: + '@tiptap/core': ^3.21.0 + + '@tiptap/extension-underline@3.21.0': + resolution: {integrity: sha512-gGmBEymbWnr8AIS8bI/bPw5rcwo7wAFcBw/TsLd1nAanu1dDqSRNDBrit3m02Ru+D88u2SfNvmbOPI1pz+1f5w==, tarball: https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-3.21.0.tgz} + peerDependencies: + '@tiptap/core': ^3.21.0 + + '@tiptap/extensions@3.21.0': + resolution: {integrity: sha512-MN1uh5PmHT1F2BNsbc21MIS0AMFFA73oODlp/4ckpBR4o5AxRwV+8f43Cd52UL4MgMkKj/A+QfZ7iK9IDb0h5A==, tarball: https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.21.0.tgz} + peerDependencies: + '@tiptap/core': ^3.21.0 + '@tiptap/pm': ^3.21.0 + + '@tiptap/markdown@3.21.0': + resolution: {integrity: sha512-VhnHhB9LeEfB2xnbNZUV2itK0ae4iERbr+a4/ZrlZB9auPtggW4fIob/bQGOaeU+GZtk1xDLyKUDyKEEwgTXMw==, tarball: https://registry.npmjs.org/@tiptap/markdown/-/markdown-3.21.0.tgz} + peerDependencies: + '@tiptap/core': ^3.21.0 + '@tiptap/pm': ^3.21.0 + + '@tiptap/pm@3.21.0': + resolution: {integrity: sha512-I3sNo7oMMsR6FFz1ecvPb9uCF0VQuS2WV67j8Io2M7DJicRWCE/GM5DaiYjTeWBbnByk6BuG0txoJATAqPVliQ==, tarball: https://registry.npmjs.org/@tiptap/pm/-/pm-3.21.0.tgz} + + '@tiptap/starter-kit@3.21.0': + resolution: {integrity: sha512-w7fWxglDtqXFBgRYH+LforJyUboSAQllnWQbGVSTyX4rsICqZjkb3f6CTSUWpGoGKmlmbb2ZpEuoik7tur9d8Q==, tarball: https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-3.21.0.tgz} + + '@tiptap/suggestion@3.21.0': + resolution: {integrity: sha512-ShgbaH2hbCRLV+AaVuSx7a/nzPOSdUeW0TNeuxZfWim62MBcx33qtllja1zOoY2tgGXokEihuzFODx83IyvGfQ==, tarball: https://registry.npmjs.org/@tiptap/suggestion/-/suggestion-3.21.0.tgz} + peerDependencies: + '@tiptap/core': ^3.21.0 + '@tiptap/pm': ^3.21.0 + + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==, tarball: https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz} + + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==, tarball: https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz} + + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==, tarball: https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==, tarball: https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==, tarball: https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, tarball: https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz} + + '@types/linkify-it@5.0.0': + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==, tarball: https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz} + + '@types/markdown-it@14.1.2': + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==, tarball: https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz} + + '@types/mdurl@2.0.0': + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==, tarball: https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz} + + '@types/node@25.0.10': + resolution: {integrity: sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg==, tarball: https://registry.npmjs.org/@types/node/-/node-25.0.10.tgz} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==, tarball: https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==, tarball: https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz} + + '@typescript-eslint/eslint-plugin@8.57.2': + resolution: {integrity: sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.2.tgz} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.57.2 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/parser@8.57.2': + resolution: {integrity: sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.2.tgz} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/project-service@8.57.2': + resolution: {integrity: sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==, tarball: https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.2.tgz} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/scope-manager@8.57.2': + resolution: {integrity: sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.2.tgz} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.57.2': + resolution: {integrity: sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==, tarball: https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.2.tgz} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/type-utils@8.57.2': + resolution: {integrity: sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg==, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.2.tgz} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/types@8.57.2': + resolution: {integrity: sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.2.tgz} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.57.2': + resolution: {integrity: sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.2.tgz} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/utils@8.57.2': + resolution: {integrity: sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.2.tgz} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/visitor-keys@8.57.2': + resolution: {integrity: sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.2.tgz} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@use-gesture/core@10.3.1': + resolution: {integrity: sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==, tarball: https://registry.npmjs.org/@use-gesture/core/-/core-10.3.1.tgz} + + '@use-gesture/vanilla@10.3.1': + resolution: {integrity: sha512-lT4scGLu59ovA3zmtUonukAGcA0AdOOh+iwNDS05Bsu7Lq9aZToDHhI6D8Q2qvsVraovtsLLYwPrWdG/noMAKw==, tarball: https://registry.npmjs.org/@use-gesture/vanilla/-/vanilla-10.3.1.tgz} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, tarball: https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==, tarball: https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.14.0: + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==, tarball: https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, tarball: https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz} + + aria-query@5.3.1: + resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==, tarball: https://registry.npmjs.org/aria-query/-/aria-query-5.3.1.tgz} + engines: {node: '>= 0.4'} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==, tarball: https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz} + engines: {node: '>= 0.4'} + + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==, tarball: https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz} + engines: {node: 18 || 20 || >=22} + + bits-ui@2.16.4: + resolution: {integrity: sha512-76dKbW0DGplG7qnVM3kljE2CmCXqh9tj9OfVo0DvC/ZGRkZNJ/auU/aQnMKBxDnSqRvsz2mZBccBkUKyF4/SoQ==, tarball: https://registry.npmjs.org/bits-ui/-/bits-ui-2.16.4.tgz} + engines: {node: '>=20'} + peerDependencies: + '@internationalized/date': ^3.8.1 + svelte: ^5.33.0 + + blake3-wasm@2.1.5: + resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==, tarball: https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz} + + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==, tarball: https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz} + engines: {node: 18 || 20 || >=22} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==, tarball: https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz} + engines: {node: '>= 14.16.0'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==, tarball: https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz} + engines: {node: '>=6'} + + cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==, tarball: https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz} + engines: {node: '>= 0.6'} + + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==, tarball: https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz} + engines: {node: '>=18'} + + core-js@3.49.0: + resolution: {integrity: sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==, tarball: https://registry.npmjs.org/core-js/-/core-js-3.49.0.tgz} + + crelt@1.0.6: + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==, tarball: https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==, tarball: https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz} + engines: {node: '>= 8'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, tarball: https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz} + engines: {node: '>=4'} + hasBin: true + + custom-event-polyfill@1.0.7: + resolution: {integrity: sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w==, tarball: https://registry.npmjs.org/custom-event-polyfill/-/custom-event-polyfill-1.0.7.tgz} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==, tarball: https://registry.npmjs.org/debug/-/debug-4.4.3.tgz} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, tarball: https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==, tarball: https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz} + engines: {node: '>=0.10.0'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==, tarball: https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz} + engines: {node: '>=6'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==, tarball: https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz} + engines: {node: '>=8'} + + devalue@5.6.4: + resolution: {integrity: sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==, tarball: https://registry.npmjs.org/devalue/-/devalue-5.6.4.tgz} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==, tarball: https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz} + + dompurify@3.3.3: + resolution: {integrity: sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA==, tarball: https://registry.npmjs.org/dompurify/-/dompurify-3.3.3.tgz} + + emoji-picker-element@1.29.1: + resolution: {integrity: sha512-TOiHzu9Dqib3x4MwcAi3wi3RdyT4SoeB4b15AvH1ks4SBwTl7DeebhZ0d3x6dNi4XfNU7IGRZ7NBQllj0RqwrQ==, tarball: https://registry.npmjs.org/emoji-picker-element/-/emoji-picker-element-1.29.1.tgz} + + enhanced-resolve@5.20.1: + resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==, tarball: https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz} + engines: {node: '>=10.13.0'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==, tarball: https://registry.npmjs.org/entities/-/entities-4.5.0.tgz} + engines: {node: '>=0.12'} + + error-stack-parser-es@1.0.5: + resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==, tarball: https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz} + + esbuild@0.27.3: + resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==, tarball: https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.27.4: + resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==, tarball: https://registry.npmjs.org/esbuild/-/esbuild-0.27.4.tgz} + engines: {node: '>=18'} + hasBin: true + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, tarball: https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz} + engines: {node: '>=10'} + + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==, tarball: https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-svelte@3.16.0: + resolution: {integrity: sha512-DJXxqpYZUxcE0SfYo8EJzV2ZC+zAD7fJp1n1HwcEMRR1cOEUYvjT9GuzJeNghMjgb7uxuK3IJAzI+x6zzUxO5A==, tarball: https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-3.16.0.tgz} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.1 || ^9.0.0 || ^10.0.0 + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + svelte: + optional: true + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==, tarball: https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-scope@9.1.2: + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==, tarball: https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint-visitor-keys@3.4.3: + 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} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@10.1.0: + resolution: {integrity: sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA==, tarball: https://registry.npmjs.org/eslint/-/eslint-10.1.0.tgz} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + esm-env@1.2.2: + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==, tarball: https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz} + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==, tarball: https://registry.npmjs.org/espree/-/espree-10.4.0.tgz} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + espree@11.2.0: + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==, tarball: https://registry.npmjs.org/espree/-/espree-11.2.0.tgz} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==, tarball: https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz} + engines: {node: '>=0.10'} + + esrap@2.2.4: + resolution: {integrity: sha512-suICpxAmZ9A8bzJjEl/+rLJiDKC0X4gYWUxT6URAWBLvlXmtbZd5ySMu/N2ZGEtMCAmflUDPSehrP9BQcsGcSg==, tarball: https://registry.npmjs.org/esrap/-/esrap-2.2.4.tgz} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, tarball: https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, tarball: https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, tarball: https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz} + engines: {node: '>=0.10.0'} + + event-target-polyfill@0.0.4: + resolution: {integrity: sha512-Gs6RLjzlLRdT8X9ZipJdIZI/Y6/HhRLyq9RdDlCsnpxr/+Nn6bU2EFGuC94GjxqhM+Nmij2Vcq98yoHrU8uNFQ==, tarball: https://registry.npmjs.org/event-target-polyfill/-/event-target-polyfill-0.0.4.tgz} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, tarball: https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, tarball: https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, tarball: https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==, tarball: https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==, tarball: https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz} + engines: {node: '>=16.0.0'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, tarball: https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==, tarball: https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz} + engines: {node: '>=16'} + + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==, tarball: https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, tarball: https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + get-tsconfig@4.13.7: + resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==, tarball: https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.7.tgz} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, tarball: https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz} + engines: {node: '>=10.13.0'} + + globals@16.5.0: + resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==, tarball: https://registry.npmjs.org/globals/-/globals-16.5.0.tgz} + engines: {node: '>=18'} + + globals@17.4.0: + resolution: {integrity: sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==, tarball: https://registry.npmjs.org/globals/-/globals-17.4.0.tgz} + engines: {node: '>=18'} + + graceful-fs@4.2.11: + 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} + + highlight.js@11.11.1: + resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==, tarball: https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz} + engines: {node: '>=12.0.0'} + + hls.js@1.6.15: + resolution: {integrity: sha512-E3a5VwgXimGHwpRGV+WxRTKeSp2DW5DI5MWv34ulL3t5UNmyJWCQ1KmLEHbYzcfThfXG8amBL+fCYPneGHC4VA==, tarball: https://registry.npmjs.org/hls.js/-/hls.js-1.6.15.tgz} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==, tarball: https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==, tarball: https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz} + engines: {node: '>= 4'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, tarball: https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz} + engines: {node: '>=0.8.19'} + + inline-style-parser@0.2.7: + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==, tarball: https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz} + + is-emoji-supported@0.0.5: + resolution: {integrity: sha512-WOlXUhDDHxYqcSmFZis+xWhhqXiK2SU0iYiqmth5Ip0FHLZQAt9rKL5ahnilE8/86WH8tZ3bmNNNC+bTzamqlw==, tarball: https://registry.npmjs.org/is-emoji-supported/-/is-emoji-supported-0.0.5.tgz} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, tarball: https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, tarball: https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz} + engines: {node: '>=0.10.0'} + + is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==, tarball: https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, tarball: https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz} + + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==, tarball: https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, tarball: https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, tarball: https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz} + + json-stable-stringify-without-jsonify@1.0.1: + 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} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, tarball: https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==, tarball: https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz} + engines: {node: '>=6'} + + known-css-properties@0.37.0: + resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==, tarball: https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, tarball: https://registry.npmjs.org/levn/-/levn-0.4.1.tgz} + engines: {node: '>= 0.8.0'} + + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==, tarball: https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==, tarball: https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==, tarball: https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==, tarball: https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==, tarball: https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==, tarball: https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==, tarball: https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==, tarball: https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==, tarball: https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==, tarball: https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==, tarball: https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==, tarball: https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz} + engines: {node: '>= 12.0.0'} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==, tarball: https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz} + engines: {node: '>=10'} + + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==, tarball: https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz} + + linkifyjs@4.3.2: + resolution: {integrity: sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==, tarball: https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.3.2.tgz} + + loadjs@4.3.0: + resolution: {integrity: sha512-vNX4ZZLJBeDEOBvdr2v/F+0aN5oMuPu7JTqrMwp+DtgK+AryOlpy6Xtm2/HpNr+azEa828oQjOtWsB6iDtSfSQ==, tarball: https://registry.npmjs.org/loadjs/-/loadjs-4.3.0.tgz} + + locate-character@3.0.0: + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==, tarball: https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, tarball: https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz} + engines: {node: '>=10'} + + lowlight@3.3.0: + resolution: {integrity: sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ==, tarball: https://registry.npmjs.org/lowlight/-/lowlight-3.3.0.tgz} + + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==, tarball: https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz} + hasBin: true + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==, tarball: https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz} + + markdown-it@14.1.1: + resolution: {integrity: sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==, tarball: https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz} + hasBin: true + + marked@17.0.5: + resolution: {integrity: sha512-6hLvc0/JEbRjRgzI6wnT2P1XuM1/RrrDEX0kPt0N7jGm1133g6X7DlxFasUIx+72aKAr904GTxhSLDrd5DIlZg==, tarball: https://registry.npmjs.org/marked/-/marked-17.0.5.tgz} + engines: {node: '>= 20'} + hasBin: true + + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==, tarball: https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz} + + mini-svg-data-uri@1.4.4: + resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==, tarball: https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz} + hasBin: true + + miniflare@4.20260317.3: + resolution: {integrity: sha512-tK78D3X4q30/SXqVwMhWrUfH+ffRou9dJLC+jkhNy5zh1I7i7T4JH6xihOvYxdCSBavJ5fQXaaxDJz6orh09BA==, tarball: https://registry.npmjs.org/miniflare/-/miniflare-4.20260317.3.tgz} + engines: {node: '>=18.0.0'} + hasBin: true + + minimatch@10.2.4: + resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==, tarball: https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz} + engines: {node: 18 || 20 || >=22} + + mode-watcher@1.1.0: + resolution: {integrity: sha512-mUT9RRGPDYenk59qJauN1rhsIMKBmWA3xMF+uRwE8MW/tjhaDSCCARqkSuDTq8vr4/2KcAxIGVjACxTjdk5C3g==, tarball: https://registry.npmjs.org/mode-watcher/-/mode-watcher-1.1.0.tgz} + peerDependencies: + svelte: ^5.27.0 + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==, tarball: https://registry.npmjs.org/mri/-/mri-1.2.0.tgz} + engines: {node: '>=4'} + + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==, tarball: https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz} + engines: {node: '>=10'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, tarball: https://registry.npmjs.org/ms/-/ms-2.1.3.tgz} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==, tarball: https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + nanoid@5.1.7: + resolution: {integrity: sha512-ua3NDgISf6jdwezAheMOk4mbE1LXjm1DfMUDMuJf4AqxLFK3ccGpgWizwa5YV7Yz9EpXwEaWoRXSb/BnV0t5dQ==, tarball: https://registry.npmjs.org/nanoid/-/nanoid-5.1.7.tgz} + engines: {node: ^18 || >=20} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, tarball: https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz} + + number-flow@0.6.0: + resolution: {integrity: sha512-K8flNq2Wqus53vjp/btVo3qXFkagF8dIdYavreBfE7hlvFFG/b1HMGEH6nZL+mlrJ+4lbLP9OmPv3t2rmRkpSQ==, tarball: https://registry.npmjs.org/number-flow/-/number-flow-0.6.0.tgz} + + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==, tarball: https://registry.npmjs.org/obug/-/obug-2.1.1.tgz} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==, tarball: https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz} + engines: {node: '>= 0.8.0'} + + orderedmap@2.1.1: + resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==, tarball: https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, tarball: https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, tarball: https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz} + engines: {node: '>=10'} + + partysocket@1.1.16: + resolution: {integrity: sha512-d7xFv+ZC7x0p/DAHWJ5FhxQhimIx+ucyZY+kxL0cKddLBmK9c4p2tEA/L+dOOrWm6EYrRwrBjKQV0uSzOY9x1w==, tarball: https://registry.npmjs.org/partysocket/-/partysocket-1.1.16.tgz} + peerDependencies: + react: '>=17' + peerDependenciesMeta: + react: + optional: true + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, tarball: https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, tarball: https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz} + engines: {node: '>=8'} + + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==, tarball: https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==, tarball: https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, tarball: https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz} + + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==, tarball: https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz} + engines: {node: '>=12'} + + plyr@3.8.4: + resolution: {integrity: sha512-DrzLbK9Wol3zeiuZCleD9aUOl0KAaBHR9H6WVVVYPZ4Ya+LYxUFTgSF1jooHcMQCv96Ws96wCaZzIoP3bES8pQ==, tarball: https://registry.npmjs.org/plyr/-/plyr-3.8.4.tgz} + + postcss-load-config@3.1.4: + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==, tarball: https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-safe-parser@7.0.1: + resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==, tarball: https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz} + engines: {node: '>=18.0'} + peerDependencies: + postcss: ^8.4.31 + + postcss-scss@4.0.9: + resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==, tarball: https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.4.29 + + postcss-selector-parser@7.1.1: + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==, tarball: https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz} + engines: {node: '>=4'} + + postcss@8.5.8: + resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==, tarball: https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, tarball: https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz} + engines: {node: '>= 0.8.0'} + + prettier-plugin-svelte@3.5.1: + resolution: {integrity: sha512-65+fr5+cgIKWKiqM1Doum4uX6bY8iFCdztvvp2RcF+AJoieaw9kJOFMNcJo/bkmKYsxFaM9OsVZK/gWauG/5mg==, tarball: https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.5.1.tgz} + peerDependencies: + prettier: ^3.0.0 + svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 + + prettier-plugin-tailwindcss@0.7.2: + resolution: {integrity: sha512-LkphyK3Fw+q2HdMOoiEHWf93fNtYJwfamoKPl7UwtjFQdei/iIBoX11G6j706FzN3ymX9mPVi97qIY8328vdnA==, tarball: https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.7.2.tgz} + engines: {node: '>=20.19'} + peerDependencies: + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-hermes': '*' + '@prettier/plugin-oxc': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@trivago/prettier-plugin-sort-imports': '*' + '@zackad/prettier-plugin-twig': '*' + prettier: ^3.0 + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-multiline-arrays: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-sort-imports: '*' + prettier-plugin-svelte: '*' + peerDependenciesMeta: + '@ianvs/prettier-plugin-sort-imports': + optional: true + '@prettier/plugin-hermes': + optional: true + '@prettier/plugin-oxc': + optional: true + '@prettier/plugin-pug': + optional: true + '@shopify/prettier-plugin-liquid': + optional: true + '@trivago/prettier-plugin-sort-imports': + optional: true + '@zackad/prettier-plugin-twig': + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-css-order: + optional: true + prettier-plugin-jsdoc: + optional: true + prettier-plugin-marko: + optional: true + prettier-plugin-multiline-arrays: + optional: true + prettier-plugin-organize-attributes: + optional: true + prettier-plugin-organize-imports: + optional: true + prettier-plugin-sort-imports: + optional: true + prettier-plugin-svelte: + optional: true + + prettier@3.8.1: + resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==, tarball: https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz} + engines: {node: '>=14'} + hasBin: true + + prosemirror-changeset@2.4.0: + resolution: {integrity: sha512-LvqH2v7Q2SF6yxatuPP2e8vSUKS/L+xAU7dPDC4RMyHMhZoGDfBC74mYuyYF4gLqOEG758wajtyhNnsTkuhvng==, tarball: https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.4.0.tgz} + + prosemirror-collab@1.3.1: + resolution: {integrity: sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==, tarball: https://registry.npmjs.org/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz} + + prosemirror-commands@1.7.1: + resolution: {integrity: sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==, tarball: https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.7.1.tgz} + + prosemirror-dropcursor@1.8.2: + resolution: {integrity: sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==, tarball: https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.2.tgz} + + prosemirror-gapcursor@1.4.1: + resolution: {integrity: sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw==, tarball: https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.4.1.tgz} + + prosemirror-history@1.5.0: + resolution: {integrity: sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==, tarball: https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.5.0.tgz} + + prosemirror-inputrules@1.5.1: + resolution: {integrity: sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==, tarball: https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.5.1.tgz} + + prosemirror-keymap@1.2.3: + resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==, tarball: https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.3.tgz} + + prosemirror-markdown@1.13.4: + resolution: {integrity: sha512-D98dm4cQ3Hs6EmjK500TdAOew4Z03EV71ajEFiWra3Upr7diytJsjF4mPV2dW+eK5uNectiRj0xFxYI9NLXDbw==, tarball: https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.13.4.tgz} + + prosemirror-menu@1.3.0: + resolution: {integrity: sha512-TImyPXCHPcDsSka2/lwJ6WjTASr4re/qWq1yoTTuLOqfXucwF6VcRa2LWCkM/EyTD1UO3CUwiH8qURJoWJRxwg==, tarball: https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.3.0.tgz} + + prosemirror-model@1.25.4: + resolution: {integrity: sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==, tarball: https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.4.tgz} + + prosemirror-schema-basic@1.2.4: + resolution: {integrity: sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==, tarball: https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.4.tgz} + + prosemirror-schema-list@1.5.1: + resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==, tarball: https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz} + + prosemirror-state@1.4.4: + resolution: {integrity: sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==, tarball: https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.4.tgz} + + prosemirror-tables@1.8.5: + resolution: {integrity: sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==, tarball: https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.8.5.tgz} + + prosemirror-trailing-node@3.0.0: + resolution: {integrity: sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==, tarball: https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz} + peerDependencies: + prosemirror-model: ^1.22.1 + prosemirror-state: ^1.4.2 + prosemirror-view: ^1.33.8 + + prosemirror-transform@1.11.0: + resolution: {integrity: sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw==, tarball: https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.11.0.tgz} + + prosemirror-view@1.41.7: + resolution: {integrity: sha512-jUwKNCEIGiqdvhlS91/2QAg21e4dfU5bH2iwmSDQeosXJgKF7smG0YSplOWK0cjSNgIqXe7VXqo7EIfUFJdt3w==, tarball: https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.41.7.tgz} + + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==, tarball: https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz} + engines: {node: '>=6'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, tarball: https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz} + engines: {node: '>=6'} + + rangetouch@2.0.1: + resolution: {integrity: sha512-sln+pNSc8NGaHoLzwNBssFSf/rSYkqeBXzX1AtJlkJiUaVSJSbRAWJk+4omsXkN+EJalzkZhWQ3th1m0FpR5xA==, tarball: https://registry.npmjs.org/rangetouch/-/rangetouch-2.0.1.tgz} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==, tarball: https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz} + engines: {node: '>= 14.18.0'} + + regexparam@3.0.0: + resolution: {integrity: sha512-RSYAtP31mvYLkAHrOlh25pCNQ5hWnT106VukGaaFfuJrZFkGRX5GhUAdPqpSDXxOhA2c4akmRuplv1mRqnBn6Q==, tarball: https://registry.npmjs.org/regexparam/-/regexparam-3.0.0.tgz} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==, tarball: https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz} + + rolldown@1.0.0-rc.12: + resolution: {integrity: sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==, tarball: https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.12.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + rope-sequence@1.3.4: + resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==, tarball: https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz} + + runed@0.23.4: + resolution: {integrity: sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA==, tarball: https://registry.npmjs.org/runed/-/runed-0.23.4.tgz} + peerDependencies: + svelte: ^5.7.0 + + runed@0.25.0: + resolution: {integrity: sha512-7+ma4AG9FT2sWQEA0Egf6mb7PBT2vHyuHail1ie8ropfSjvZGtEAx8YTmUjv/APCsdRRxEVvArNjALk9zFSOrg==, tarball: https://registry.npmjs.org/runed/-/runed-0.25.0.tgz} + peerDependencies: + svelte: ^5.7.0 + + runed@0.28.0: + resolution: {integrity: sha512-k2xx7RuO9hWcdd9f+8JoBeqWtYrm5CALfgpkg2YDB80ds/QE4w0qqu34A7fqiAwiBBSBQOid7TLxwxVC27ymWQ==, tarball: https://registry.npmjs.org/runed/-/runed-0.28.0.tgz} + peerDependencies: + svelte: ^5.7.0 + + runed@0.35.1: + resolution: {integrity: sha512-2F4Q/FZzbeJTFdIS/PuOoPRSm92sA2LhzTnv6FXhCoENb3huf5+fDuNOg1LNvGOouy3u/225qxmuJvcV3IZK5Q==, tarball: https://registry.npmjs.org/runed/-/runed-0.35.1.tgz} + peerDependencies: + '@sveltejs/kit': ^2.21.0 + svelte: ^5.7.0 + peerDependenciesMeta: + '@sveltejs/kit': + optional: true + + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==, tarball: https://registry.npmjs.org/sade/-/sade-1.8.1.tgz} + engines: {node: '>=6'} + + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==, tarball: https://registry.npmjs.org/semver/-/semver-7.7.4.tgz} + engines: {node: '>=10'} + hasBin: true + + set-cookie-parser@3.1.0: + resolution: {integrity: sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw==, tarball: https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.1.0.tgz} + + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==, tarball: https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, tarball: https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, tarball: https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz} + engines: {node: '>=8'} + + sirv@3.0.2: + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==, tarball: https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz} + engines: {node: '>=18'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, tarball: https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz} + engines: {node: '>=0.10.0'} + + style-to-object@1.0.14: + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==, tarball: https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz} + + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==, tarball: https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz} + engines: {node: '>=18'} + + svelte-check@4.4.5: + resolution: {integrity: sha512-1bSwIRCvvmSHrlK52fOlZmVtUZgil43jNL/2H18pRpa+eQjzGt6e3zayxhp1S7GajPFKNM/2PMCG+DZFHlG9fw==, tarball: https://registry.npmjs.org/svelte-check/-/svelte-check-4.4.5.tgz} + engines: {node: '>= 18.0.0'} + hasBin: true + peerDependencies: + svelte: ^4.0.0 || ^5.0.0-next.0 + typescript: '>=5.0.0' + + svelte-eslint-parser@1.6.0: + resolution: {integrity: sha512-qoB1ehychT6OxEtQAqc/guSqLS20SlA53Uijl7x375s8nlUT0lb9ol/gzraEEatQwsyPTJo87s2CmKL9Xab+Uw==, tarball: https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-1.6.0.tgz} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0, pnpm: 10.30.3} + peerDependencies: + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + svelte: + optional: true + + svelte-sonner@1.1.0: + resolution: {integrity: sha512-3lYM6ZIqWe+p9vwwWHGWP/ZdvHiUtzURsud2quIxivrX4rvpXh6i+geBGn0m3JS6KwW6W8VgbOl3xQMcDuh6gg==, tarball: https://registry.npmjs.org/svelte-sonner/-/svelte-sonner-1.1.0.tgz} + peerDependencies: + svelte: ^5.0.0 + + svelte-tiptap@3.0.1: + resolution: {integrity: sha512-Vi3kVGOd01f7mslOxGbJB7z2QavdvH+6WffhB+Y5fleTiZaW0YWqIboyO2u/uh4BQeosiINmmuRJ+Qwb7mYP+A==, tarball: https://registry.npmjs.org/svelte-tiptap/-/svelte-tiptap-3.0.1.tgz} + peerDependencies: + '@floating-ui/dom': ^1.0.0 + '@tiptap/core': ^3.0.0 + '@tiptap/extension-bubble-menu': ^3.0.0 + '@tiptap/extension-floating-menu': ^3.0.0 + '@tiptap/pm': ^3.0.0 + svelte: ^5.0.0 + + svelte-toolbelt@0.10.6: + resolution: {integrity: sha512-YWuX+RE+CnWYx09yseAe4ZVMM7e7GRFZM6OYWpBKOb++s+SQ8RBIMMe+Bs/CznBMc0QPLjr+vDBxTAkozXsFXQ==, tarball: https://registry.npmjs.org/svelte-toolbelt/-/svelte-toolbelt-0.10.6.tgz} + engines: {node: '>=18', pnpm: '>=8.7.0'} + peerDependencies: + svelte: ^5.30.2 + + svelte-toolbelt@0.7.1: + resolution: {integrity: sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ==, tarball: https://registry.npmjs.org/svelte-toolbelt/-/svelte-toolbelt-0.7.1.tgz} + engines: {node: '>=18', pnpm: '>=8.7.0'} + peerDependencies: + svelte: ^5.0.0 + + svelte@5.55.0: + resolution: {integrity: sha512-SThllKq6TRMBwPtat7ASnm/9CDXnIhBR0NPGw0ujn2DVYx9rVwsPZxDaDQcYGdUz/3BYVsCzdq7pZarRQoGvtw==, tarball: https://registry.npmjs.org/svelte/-/svelte-5.55.0.tgz} + engines: {node: '>=18'} + + tabbable@6.4.0: + resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==, tarball: https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz} + + tailwind-merge@3.5.0: + resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==, tarball: https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz} + + tailwind-variants@3.2.2: + resolution: {integrity: sha512-Mi4kHeMTLvKlM98XPnK+7HoBPmf4gygdFmqQPaDivc3DpYS6aIY6KiG/PgThrGvii5YZJqRsPz0aPyhoFzmZgg==, tarball: https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-3.2.2.tgz} + engines: {node: '>=16.x', pnpm: '>=7.x'} + peerDependencies: + tailwind-merge: '>=3.0.0' + tailwindcss: '*' + peerDependenciesMeta: + tailwind-merge: + optional: true + + tailwindcss@4.2.2: + resolution: {integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==, tarball: https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.2.tgz} + + tapable@2.3.2: + resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==, tarball: https://registry.npmjs.org/tapable/-/tapable-2.3.2.tgz} + engines: {node: '>=6'} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==, tarball: https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz} + engines: {node: '>=12.0.0'} + + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==, tarball: https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz} + engines: {node: '>=6'} + + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==, tarball: https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, tarball: https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz} + + tsx@4.21.0: + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==, tarball: https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz} + engines: {node: '>=18.0.0'} + hasBin: true + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, tarball: https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz} + engines: {node: '>= 0.8.0'} + + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==, tarball: https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz} + engines: {node: '>=16'} + + typescript-eslint@8.57.2: + resolution: {integrity: sha512-VEPQ0iPgWO/sBaZOU1xo4nuNdODVOajPnTIbog2GKYr31nIlZ0fWPoCQgGfF3ETyBl1vn63F/p50Um9Z4J8O8A==, tarball: https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.57.2.tgz} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + typescript@6.0.2: + resolution: {integrity: sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==, tarball: https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz} + engines: {node: '>=14.17'} + hasBin: true + + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==, tarball: https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz} + + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==, tarball: https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz} + + undici@7.24.4: + resolution: {integrity: sha512-BM/JzwwaRXxrLdElV2Uo6cTLEjhSb3WXboncJamZ15NgUURmvlXvxa6xkwIOILIjPNo9i8ku136ZvWV0Uly8+w==, tarball: https://registry.npmjs.org/undici/-/undici-7.24.4.tgz} + engines: {node: '>=20.18.1'} + + unenv@2.0.0-rc.24: + resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==, tarball: https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.24.tgz} + + unicode-segmenter@0.14.5: + resolution: {integrity: sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g==, tarball: https://registry.npmjs.org/unicode-segmenter/-/unicode-segmenter-0.14.5.tgz} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, tarball: https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz} + + url-polyfill@1.1.14: + resolution: {integrity: sha512-p4f3TTAG6ADVF3mwbXw7hGw+QJyw5CnNGvYh5fCuQQZIiuKUswqcznyV3pGDP9j0TSmC4UvRKm8kl1QsX1diiQ==, tarball: https://registry.npmjs.org/url-polyfill/-/url-polyfill-1.1.14.tgz} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, tarball: https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz} + + valibot@1.3.1: + resolution: {integrity: sha512-sfdRir/QFM0JaF22hqTroPc5xy4DimuGQVKFrzF1YfGwaS1nJot3Y8VqMdLO2Lg27fMzat2yD3pY5PbAYO39Gg==, tarball: https://registry.npmjs.org/valibot/-/valibot-1.3.1.tgz} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + + vite@8.0.3: + resolution: {integrity: sha512-B9ifbFudT1TFhfltfaIPgjo9Z3mDynBTJSUYxTjOQruf/zHH+ezCQKcoqO+h7a9Pw9Nm/OtlXAiGT1axBgwqrQ==, tarball: https://registry.npmjs.org/vite/-/vite-8.0.3.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.0 + esbuild: ^0.27.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitefu@1.1.2: + resolution: {integrity: sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==, tarball: https://registry.npmjs.org/vitefu/-/vitefu-1.1.2.tgz} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0 + peerDependenciesMeta: + vite: + optional: true + + w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==, tarball: https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz} + + web-haptics@0.0.6: + resolution: {integrity: sha512-eCzcf1LDi20+Fr0x9V3OkX92k0gxEQXaHajmhXHitsnk6SxPeshv8TBtBRqxyst8HI1uf2FyFVE7QS3jo1gkrw==, tarball: https://registry.npmjs.org/web-haptics/-/web-haptics-0.0.6.tgz} + peerDependencies: + react: '>=18' + react-dom: '>=18' + svelte: '>=4' + vue: '>=3' + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + svelte: + optional: true + vue: + optional: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, tarball: https://registry.npmjs.org/which/-/which-2.0.2.tgz} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==, tarball: https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz} + engines: {node: '>=0.10.0'} + + workerd@1.20260317.1: + resolution: {integrity: sha512-ZuEq1OdrJBS+NV+L5HMYPCzVn49a2O60slQiiLpG44jqtlOo+S167fWC76kEXteXLLLydeuRrluRel7WdOUa4g==, tarball: https://registry.npmjs.org/workerd/-/workerd-1.20260317.1.tgz} + engines: {node: '>=16'} + hasBin: true + + worktop@0.8.0-next.18: + resolution: {integrity: sha512-+TvsA6VAVoMC3XDKR5MoC/qlLqDixEfOBysDEKnPIPou/NvoPWCAuXHXMsswwlvmEuvX56lQjvELLyLuzTKvRw==, tarball: https://registry.npmjs.org/worktop/-/worktop-0.8.0-next.18.tgz} + engines: {node: '>=12'} + + wrangler@4.78.0: + resolution: {integrity: sha512-He/vUhk4ih0D0eFmtNnlbT6Od8j+BEokaSR+oYjbVsH0SWIrIch+eHqfLRSBjBQaOoh6HCNxcafcIkBm2u0Hag==, tarball: https://registry.npmjs.org/wrangler/-/wrangler-4.78.0.tgz} + engines: {node: '>=20.3.0'} + hasBin: true + peerDependencies: + '@cloudflare/workers-types': ^4.20260317.1 + peerDependenciesMeta: + '@cloudflare/workers-types': + optional: true + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==, tarball: https://registry.npmjs.org/ws/-/ws-8.18.0.tgz} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + yaml@1.10.3: + resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==, tarball: https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz} + engines: {node: '>= 6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, tarball: https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz} + engines: {node: '>=10'} + + yocto-queue@1.2.2: + resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==, tarball: https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz} + engines: {node: '>=12.20'} + + youch-core@0.3.3: + resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==, tarball: https://registry.npmjs.org/youch-core/-/youch-core-0.3.3.tgz} + + youch@4.1.0-beta.10: + resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==, tarball: https://registry.npmjs.org/youch/-/youch-4.1.0-beta.10.tgz} + + zimmerframe@1.1.4: + resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==, tarball: https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz} + +snapshots: + + '@atcute/atproto@3.1.10': + dependencies: + '@atcute/lexicons': 1.2.9 + + '@atcute/bluesky-richtext-segmenter@3.0.0': {} + + '@atcute/bluesky@3.3.0': + dependencies: + '@atcute/atproto': 3.1.10 + '@atcute/lexicons': 1.2.9 + + '@atcute/client@4.2.1': + dependencies: + '@atcute/identity': 1.1.4 + '@atcute/lexicons': 1.2.9 + + '@atcute/identity-resolver@1.2.2(@atcute/identity@1.1.4)': + dependencies: + '@atcute/identity': 1.1.4 + '@atcute/lexicons': 1.2.9 + '@atcute/util-fetch': 1.0.5 + '@badrap/valita': 0.4.6 + + '@atcute/identity@1.1.4': + dependencies: + '@atcute/lexicons': 1.2.9 + '@badrap/valita': 0.4.6 + + '@atcute/jetstream@1.1.2': + dependencies: + '@atcute/lexicons': 1.2.9 + '@badrap/valita': 0.4.6 + '@mary-ext/event-iterator': 1.0.0 + '@mary-ext/simple-event-emitter': 1.0.1 + partysocket: 1.1.16 + type-fest: 4.41.0 + yocto-queue: 1.2.2 + transitivePeerDependencies: + - react + + '@atcute/lexicons@1.2.9': + dependencies: + '@atcute/uint8array': 1.1.1 + '@atcute/util-text': 1.2.0 + '@standard-schema/spec': 1.1.0 + esm-env: 1.2.2 + + '@atcute/multibase@1.2.0': + dependencies: + '@atcute/uint8array': 1.1.1 + + '@atcute/oauth-crypto@0.1.0': + dependencies: + '@atcute/multibase': 1.2.0 + '@atcute/uint8array': 1.1.1 + '@badrap/valita': 0.4.6 + nanoid: 5.1.7 + + '@atcute/oauth-keyset@0.1.0': + dependencies: + '@atcute/oauth-crypto': 0.1.0 + + '@atcute/oauth-node-client@1.1.0': + dependencies: + '@atcute/client': 4.2.1 + '@atcute/identity': 1.1.4 + '@atcute/identity-resolver': 1.2.2(@atcute/identity@1.1.4) + '@atcute/lexicons': 1.2.9 + '@atcute/oauth-crypto': 0.1.0 + '@atcute/oauth-keyset': 0.1.0 + '@atcute/oauth-types': 0.1.1 + '@atcute/util-fetch': 1.0.5 + '@badrap/valita': 0.4.6 + nanoid: 5.1.7 + + '@atcute/oauth-types@0.1.1': + dependencies: + '@atcute/identity': 1.1.4 + '@atcute/lexicons': 1.2.9 + '@atcute/oauth-keyset': 0.1.0 + '@badrap/valita': 0.4.6 + + '@atcute/tid@1.1.2': + dependencies: + '@atcute/time-ms': 1.3.2 + + '@atcute/time-ms@1.3.2': {} + + '@atcute/uint8array@1.1.1': {} + + '@atcute/util-fetch@1.0.5': + dependencies: + '@badrap/valita': 0.4.6 + + '@atcute/util-text@1.2.0': + dependencies: + unicode-segmenter: 0.14.5 + + '@badrap/valita@0.4.6': {} + + '@cloudflare/kv-asset-handler@0.4.2': {} + + '@cloudflare/unenv-preset@2.16.0(unenv@2.0.0-rc.24)(workerd@1.20260317.1)': + dependencies: + unenv: 2.0.0-rc.24 + optionalDependencies: + workerd: 1.20260317.1 + + '@cloudflare/workerd-darwin-64@1.20260317.1': + optional: true + + '@cloudflare/workerd-darwin-arm64@1.20260317.1': + optional: true + + '@cloudflare/workerd-linux-64@1.20260317.1': + optional: true + + '@cloudflare/workerd-linux-arm64@1.20260317.1': + optional: true + + '@cloudflare/workerd-windows-64@1.20260317.1': + optional: true + + '@cloudflare/workers-types@4.20260317.1': {} + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@emnapi/core@1.9.1': + dependencies: + '@emnapi/wasi-threads': 1.2.0 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.9.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@esbuild/aix-ppc64@0.27.3': + optional: true + + '@esbuild/aix-ppc64@0.27.4': + optional: true + + '@esbuild/android-arm64@0.27.3': + optional: true + + '@esbuild/android-arm64@0.27.4': + optional: true + + '@esbuild/android-arm@0.27.3': + optional: true + + '@esbuild/android-arm@0.27.4': + optional: true + + '@esbuild/android-x64@0.27.3': + optional: true + + '@esbuild/android-x64@0.27.4': + optional: true + + '@esbuild/darwin-arm64@0.27.3': + optional: true + + '@esbuild/darwin-arm64@0.27.4': + optional: true + + '@esbuild/darwin-x64@0.27.3': + optional: true + + '@esbuild/darwin-x64@0.27.4': + optional: true + + '@esbuild/freebsd-arm64@0.27.3': + optional: true + + '@esbuild/freebsd-arm64@0.27.4': + optional: true + + '@esbuild/freebsd-x64@0.27.3': + optional: true + + '@esbuild/freebsd-x64@0.27.4': + optional: true + + '@esbuild/linux-arm64@0.27.3': + optional: true + + '@esbuild/linux-arm64@0.27.4': + optional: true + + '@esbuild/linux-arm@0.27.3': + optional: true + + '@esbuild/linux-arm@0.27.4': + optional: true + + '@esbuild/linux-ia32@0.27.3': + optional: true + + '@esbuild/linux-ia32@0.27.4': + optional: true + + '@esbuild/linux-loong64@0.27.3': + optional: true + + '@esbuild/linux-loong64@0.27.4': + optional: true + + '@esbuild/linux-mips64el@0.27.3': + optional: true + + '@esbuild/linux-mips64el@0.27.4': + optional: true + + '@esbuild/linux-ppc64@0.27.3': + optional: true + + '@esbuild/linux-ppc64@0.27.4': + optional: true + + '@esbuild/linux-riscv64@0.27.3': + optional: true + + '@esbuild/linux-riscv64@0.27.4': + optional: true + + '@esbuild/linux-s390x@0.27.3': + optional: true + + '@esbuild/linux-s390x@0.27.4': + optional: true + + '@esbuild/linux-x64@0.27.3': + optional: true + + '@esbuild/linux-x64@0.27.4': + optional: true + + '@esbuild/netbsd-arm64@0.27.3': + optional: true + + '@esbuild/netbsd-arm64@0.27.4': + optional: true + + '@esbuild/netbsd-x64@0.27.3': + optional: true + + '@esbuild/netbsd-x64@0.27.4': + optional: true + + '@esbuild/openbsd-arm64@0.27.3': + optional: true + + '@esbuild/openbsd-arm64@0.27.4': + optional: true + + '@esbuild/openbsd-x64@0.27.3': + optional: true + + '@esbuild/openbsd-x64@0.27.4': + optional: true + + '@esbuild/openharmony-arm64@0.27.3': + optional: true + + '@esbuild/openharmony-arm64@0.27.4': + optional: true + + '@esbuild/sunos-x64@0.27.3': + optional: true + + '@esbuild/sunos-x64@0.27.4': + optional: true + + '@esbuild/win32-arm64@0.27.3': + optional: true + + '@esbuild/win32-arm64@0.27.4': + optional: true + + '@esbuild/win32-ia32@0.27.3': + optional: true + + '@esbuild/win32-ia32@0.27.4': + optional: true + + '@esbuild/win32-x64@0.27.3': + optional: true + + '@esbuild/win32-x64@0.27.4': + optional: true + + '@eslint-community/eslint-utils@4.9.1(eslint@10.1.0(jiti@2.6.1))': + dependencies: + eslint: 10.1.0(jiti@2.6.1) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/compat@2.0.3(eslint@10.1.0(jiti@2.6.1))': + dependencies: + '@eslint/core': 1.1.1 + optionalDependencies: + eslint: 10.1.0(jiti@2.6.1) + + '@eslint/config-array@0.23.3': + dependencies: + '@eslint/object-schema': 3.0.3 + debug: 4.4.3 + minimatch: 10.2.4 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.5.3': + dependencies: + '@eslint/core': 1.1.1 + + '@eslint/core@1.1.1': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/js@10.0.1(eslint@10.1.0(jiti@2.6.1))': + optionalDependencies: + eslint: 10.1.0(jiti@2.6.1) + + '@eslint/object-schema@3.0.3': {} + + '@eslint/plugin-kit@0.6.1': + dependencies: + '@eslint/core': 1.1.1 + levn: 0.4.1 + + '@floating-ui/core@1.7.5': + dependencies: + '@floating-ui/utils': 0.2.11 + + '@floating-ui/dom@1.7.6': + dependencies: + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 + + '@floating-ui/utils@0.2.11': {} + + '@foxui/core@0.8.2(@internationalized/date@3.10.1)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(tailwindcss@4.2.2)': + dependencies: + '@number-flow/svelte': 0.4.0(svelte@5.55.0) + bits-ui: 2.16.4(@internationalized/date@3.10.1)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0) + clsx: 2.1.1 + dompurify: 3.3.3 + mode-watcher: 1.1.0(svelte@5.55.0) + svelte: 5.55.0 + svelte-sonner: 1.1.0(svelte@5.55.0) + tailwind-merge: 3.5.0 + tailwind-variants: 3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.2) + tailwindcss: 4.2.2 + web-haptics: 0.0.6(svelte@5.55.0) + transitivePeerDependencies: + - '@internationalized/date' + - '@sveltejs/kit' + - react + - react-dom + - vue + + '@foxui/social@0.8.4(@internationalized/date@3.10.1)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(@tiptap/extension-code-block@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0))(@tiptap/extensions@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0))(highlight.js@11.11.1)(svelte@5.55.0)(tailwindcss@4.2.2)': + dependencies: + '@atcute/bluesky': 3.3.0 + '@atcute/bluesky-richtext-segmenter': 3.0.0 + '@foxui/core': 0.8.2(@internationalized/date@3.10.1)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(tailwindcss@4.2.2) + '@foxui/text': 0.8.2(@internationalized/date@3.10.1)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(@tiptap/extension-code-block@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0))(@tiptap/extensions@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0))(highlight.js@11.11.1)(svelte@5.55.0)(tailwindcss@4.2.2) + '@foxui/time': 0.8.2(@internationalized/date@3.10.1)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(tailwindcss@4.2.2) + '@use-gesture/vanilla': 10.3.1 + bits-ui: 2.16.4(@internationalized/date@3.10.1)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0) + emoji-picker-element: 1.29.1 + hls.js: 1.6.15 + is-emoji-supported: 0.0.5 + plyr: 3.8.4 + svelte: 5.55.0 + tailwindcss: 4.2.2 + transitivePeerDependencies: + - '@internationalized/date' + - '@sveltejs/kit' + - '@tiptap/extension-code-block' + - '@tiptap/extensions' + - highlight.js + - react + - react-dom + - vue + + '@foxui/text@0.8.2(@internationalized/date@3.10.1)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(@tiptap/extension-code-block@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0))(@tiptap/extensions@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0))(highlight.js@11.11.1)(svelte@5.55.0)(tailwindcss@4.2.2)': + dependencies: + '@floating-ui/dom': 1.7.6 + '@foxui/core': 0.8.2(@internationalized/date@3.10.1)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(tailwindcss@4.2.2) + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + '@tiptap/extension-bubble-menu': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0) + '@tiptap/extension-code-block-lowlight': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/extension-code-block@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0)(highlight.js@11.11.1)(lowlight@3.3.0) + '@tiptap/extension-document': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0)) + '@tiptap/extension-dropcursor': 3.21.0(@tiptap/extensions@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0)) + '@tiptap/extension-floating-menu': 3.21.0(@floating-ui/dom@1.7.6)(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0) + '@tiptap/extension-history': 3.21.0(@tiptap/extensions@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0)) + '@tiptap/extension-image': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0)) + '@tiptap/extension-link': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0) + '@tiptap/extension-paragraph': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0)) + '@tiptap/extension-placeholder': 3.21.0(@tiptap/extensions@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0)) + '@tiptap/extension-strike': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0)) + '@tiptap/extension-text': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0)) + '@tiptap/extension-typography': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0)) + '@tiptap/extension-underline': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0)) + '@tiptap/markdown': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0) + '@tiptap/pm': 3.21.0 + '@tiptap/starter-kit': 3.21.0 + '@tiptap/suggestion': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0) + bits-ui: 2.16.4(@internationalized/date@3.10.1)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0) + lowlight: 3.3.0 + state: link:@tiptap/pm/state + svelte: 5.55.0 + svelte-tiptap: 3.0.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/extension-bubble-menu@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0))(@tiptap/extension-floating-menu@3.21.0(@floating-ui/dom@1.7.6)(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0)(svelte@5.55.0) + tailwindcss: 4.2.2 + transitivePeerDependencies: + - '@internationalized/date' + - '@sveltejs/kit' + - '@tiptap/extension-code-block' + - '@tiptap/extensions' + - highlight.js + - react + - react-dom + - vue + + '@foxui/time@0.8.2(@internationalized/date@3.10.1)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(tailwindcss@4.2.2)': + dependencies: + '@foxui/core': 0.8.2(@internationalized/date@3.10.1)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(tailwindcss@4.2.2) + '@number-flow/svelte': 0.4.0(svelte@5.55.0) + bits-ui: 2.16.4(@internationalized/date@3.10.1)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0) + svelte: 5.55.0 + tailwindcss: 4.2.2 + transitivePeerDependencies: + - '@internationalized/date' + - '@sveltejs/kit' + - react + - react-dom + - vue + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@img/colour@1.1.0': {} + + '@img/sharp-darwin-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + optional: true + + '@img/sharp-darwin-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true + + '@img/sharp-linux-arm@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true + + '@img/sharp-linux-ppc64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true + + '@img/sharp-linux-riscv64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 + optional: true + + '@img/sharp-linux-s390x@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.4 + optional: true + + '@img/sharp-linux-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': + dependencies: + '@emnapi/runtime': 1.9.1 + optional: true + + '@img/sharp-win32-arm64@0.34.5': + optional: true + + '@img/sharp-win32-ia32@0.34.5': + optional: true + + '@img/sharp-win32-x64@0.34.5': + optional: true + + '@internationalized/date@3.10.1': + dependencies: + '@swc/helpers': 0.5.20 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@mary-ext/event-iterator@1.0.0': + dependencies: + yocto-queue: 1.2.2 + + '@mary-ext/simple-event-emitter@1.0.1': {} + + '@napi-rs/wasm-runtime@1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': + dependencies: + '@emnapi/core': 1.9.1 + '@emnapi/runtime': 1.9.1 + '@tybys/wasm-util': 0.10.1 + optional: true + + '@number-flow/svelte@0.4.0(svelte@5.55.0)': + dependencies: + esm-env: 1.2.2 + number-flow: 0.6.0 + svelte: 5.55.0 + + '@oxc-project/types@0.122.0': {} + + '@polka/url@1.0.0-next.29': {} + + '@poppinss/colors@4.1.6': + dependencies: + kleur: 4.1.5 + + '@poppinss/dumper@0.6.5': + dependencies: + '@poppinss/colors': 4.1.6 + '@sindresorhus/is': 7.2.0 + supports-color: 10.2.2 + + '@poppinss/exception@1.2.3': {} + + '@remirror/core-constants@3.0.0': {} + + '@rolldown/binding-android-arm64@1.0.0-rc.12': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-rc.12': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-rc.12': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': + dependencies: + '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': + optional: true + + '@rolldown/pluginutils@1.0.0-rc.12': {} + + '@sindresorhus/is@7.2.0': {} + + '@speed-highlight/core@1.2.15': {} + + '@standard-schema/spec@1.1.0': {} + + '@sveltejs/acorn-typescript@1.0.9(acorn@8.16.0)': + dependencies: + acorn: 8.16.0 + + '@sveltejs/adapter-cloudflare@7.2.8(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1))': + dependencies: + '@cloudflare/workers-types': 4.20260317.1 + '@sveltejs/kit': 2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)) + worktop: 0.8.0-next.18 + wrangler: 4.78.0(@cloudflare/workers-types@4.20260317.1) + + '@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))': + dependencies: + '@standard-schema/spec': 1.1.0 + '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) + '@sveltejs/vite-plugin-svelte': 7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)) + '@types/cookie': 0.6.0 + acorn: 8.16.0 + cookie: 0.6.0 + devalue: 5.6.4 + esm-env: 1.2.2 + kleur: 4.1.5 + magic-string: 0.30.21 + mrmime: 2.0.1 + set-cookie-parser: 3.1.0 + sirv: 3.0.2 + svelte: 5.55.0 + vite: 8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0) + optionalDependencies: + typescript: 6.0.2 + + '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))': + dependencies: + deepmerge: 4.3.1 + magic-string: 0.30.21 + obug: 2.1.1 + svelte: 5.55.0 + vite: 8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0) + vitefu: 1.1.2(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)) + + '@swc/helpers@0.5.20': + dependencies: + tslib: 2.8.1 + + '@tailwindcss/forms@0.5.11(tailwindcss@4.2.2)': + dependencies: + mini-svg-data-uri: 1.4.4 + tailwindcss: 4.2.2 + + '@tailwindcss/node@4.2.2': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.20.1 + jiti: 2.6.1 + lightningcss: 1.32.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.2.2 + + '@tailwindcss/oxide-android-arm64@4.2.2': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.2.2': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.2.2': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.2.2': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.2.2': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.2.2': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.2.2': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.2.2': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.2.2': + optional: true + + '@tailwindcss/oxide@4.2.2': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.2.2 + '@tailwindcss/oxide-darwin-arm64': 4.2.2 + '@tailwindcss/oxide-darwin-x64': 4.2.2 + '@tailwindcss/oxide-freebsd-x64': 4.2.2 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.2 + '@tailwindcss/oxide-linux-arm64-gnu': 4.2.2 + '@tailwindcss/oxide-linux-arm64-musl': 4.2.2 + '@tailwindcss/oxide-linux-x64-gnu': 4.2.2 + '@tailwindcss/oxide-linux-x64-musl': 4.2.2 + '@tailwindcss/oxide-wasm32-wasi': 4.2.2 + '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2 + '@tailwindcss/oxide-win32-x64-msvc': 4.2.2 + + '@tailwindcss/vite@4.2.2(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))': + dependencies: + '@tailwindcss/node': 4.2.2 + '@tailwindcss/oxide': 4.2.2 + tailwindcss: 4.2.2 + vite: 8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0) + + '@tiptap/core@3.21.0(@tiptap/pm@3.21.0)': + dependencies: + '@tiptap/pm': 3.21.0 + + '@tiptap/extension-blockquote@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))': + dependencies: + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + + '@tiptap/extension-bold@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))': + dependencies: + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + + '@tiptap/extension-bubble-menu@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0)': + dependencies: + '@floating-ui/dom': 1.7.6 + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + '@tiptap/pm': 3.21.0 + + '@tiptap/extension-bullet-list@3.21.0(@tiptap/extension-list@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0))': + dependencies: + '@tiptap/extension-list': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0) + + '@tiptap/extension-code-block-lowlight@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/extension-code-block@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0)(highlight.js@11.11.1)(lowlight@3.3.0)': + dependencies: + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + '@tiptap/extension-code-block': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0) + '@tiptap/pm': 3.21.0 + highlight.js: 11.11.1 + lowlight: 3.3.0 + + '@tiptap/extension-code-block@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0)': + dependencies: + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + '@tiptap/pm': 3.21.0 + + '@tiptap/extension-code@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))': + dependencies: + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + + '@tiptap/extension-document@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))': + dependencies: + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + + '@tiptap/extension-dropcursor@3.21.0(@tiptap/extensions@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0))': + dependencies: + '@tiptap/extensions': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0) + + '@tiptap/extension-floating-menu@3.21.0(@floating-ui/dom@1.7.6)(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0)': + dependencies: + '@floating-ui/dom': 1.7.6 + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + '@tiptap/pm': 3.21.0 + + '@tiptap/extension-gapcursor@3.21.0(@tiptap/extensions@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0))': + dependencies: + '@tiptap/extensions': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0) + + '@tiptap/extension-hard-break@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))': + dependencies: + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + + '@tiptap/extension-heading@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))': + dependencies: + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + + '@tiptap/extension-history@3.21.0(@tiptap/extensions@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0))': + dependencies: + '@tiptap/extensions': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0) + + '@tiptap/extension-horizontal-rule@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0)': + dependencies: + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + '@tiptap/pm': 3.21.0 + + '@tiptap/extension-image@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))': + dependencies: + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + + '@tiptap/extension-italic@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))': + dependencies: + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + + '@tiptap/extension-link@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0)': + dependencies: + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + '@tiptap/pm': 3.21.0 + linkifyjs: 4.3.2 + + '@tiptap/extension-list-item@3.21.0(@tiptap/extension-list@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0))': + dependencies: + '@tiptap/extension-list': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0) + + '@tiptap/extension-list-keymap@3.21.0(@tiptap/extension-list@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0))': + dependencies: + '@tiptap/extension-list': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0) + + '@tiptap/extension-list@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0)': + dependencies: + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + '@tiptap/pm': 3.21.0 + + '@tiptap/extension-ordered-list@3.21.0(@tiptap/extension-list@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0))': + dependencies: + '@tiptap/extension-list': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0) + + '@tiptap/extension-paragraph@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))': + dependencies: + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + + '@tiptap/extension-placeholder@3.21.0(@tiptap/extensions@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0))': + dependencies: + '@tiptap/extensions': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0) + + '@tiptap/extension-strike@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))': + dependencies: + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + + '@tiptap/extension-text@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))': + dependencies: + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + + '@tiptap/extension-typography@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))': + dependencies: + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + + '@tiptap/extension-underline@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))': + dependencies: + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + + '@tiptap/extensions@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0)': + dependencies: + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + '@tiptap/pm': 3.21.0 + + '@tiptap/markdown@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0)': + dependencies: + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + '@tiptap/pm': 3.21.0 + marked: 17.0.5 + + '@tiptap/pm@3.21.0': + dependencies: + prosemirror-changeset: 2.4.0 + prosemirror-collab: 1.3.1 + prosemirror-commands: 1.7.1 + prosemirror-dropcursor: 1.8.2 + prosemirror-gapcursor: 1.4.1 + prosemirror-history: 1.5.0 + prosemirror-inputrules: 1.5.1 + prosemirror-keymap: 1.2.3 + prosemirror-markdown: 1.13.4 + prosemirror-menu: 1.3.0 + prosemirror-model: 1.25.4 + prosemirror-schema-basic: 1.2.4 + prosemirror-schema-list: 1.5.1 + prosemirror-state: 1.4.4 + prosemirror-tables: 1.8.5 + prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.7) + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.7 + + '@tiptap/starter-kit@3.21.0': + dependencies: + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + '@tiptap/extension-blockquote': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0)) + '@tiptap/extension-bold': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0)) + '@tiptap/extension-bullet-list': 3.21.0(@tiptap/extension-list@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0)) + '@tiptap/extension-code': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0)) + '@tiptap/extension-code-block': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0) + '@tiptap/extension-document': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0)) + '@tiptap/extension-dropcursor': 3.21.0(@tiptap/extensions@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0)) + '@tiptap/extension-gapcursor': 3.21.0(@tiptap/extensions@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0)) + '@tiptap/extension-hard-break': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0)) + '@tiptap/extension-heading': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0)) + '@tiptap/extension-horizontal-rule': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0) + '@tiptap/extension-italic': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0)) + '@tiptap/extension-link': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0) + '@tiptap/extension-list': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0) + '@tiptap/extension-list-item': 3.21.0(@tiptap/extension-list@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0)) + '@tiptap/extension-list-keymap': 3.21.0(@tiptap/extension-list@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0)) + '@tiptap/extension-ordered-list': 3.21.0(@tiptap/extension-list@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0)) + '@tiptap/extension-paragraph': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0)) + '@tiptap/extension-strike': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0)) + '@tiptap/extension-text': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0)) + '@tiptap/extension-underline': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0)) + '@tiptap/extensions': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0) + '@tiptap/pm': 3.21.0 + + '@tiptap/suggestion@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0)': + dependencies: + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + '@tiptap/pm': 3.21.0 + + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/cookie@0.6.0': {} + + '@types/esrecurse@4.3.1': {} + + '@types/estree@1.0.8': {} + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/json-schema@7.0.15': {} + + '@types/linkify-it@5.0.0': {} + + '@types/markdown-it@14.1.2': + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + + '@types/mdurl@2.0.0': {} + + '@types/node@25.0.10': + dependencies: + undici-types: 7.16.0 + optional: true + + '@types/trusted-types@2.0.7': {} + + '@types/unist@3.0.3': {} + + '@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/type-utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/visitor-keys': 8.57.2 + eslint: 10.1.0(jiti@2.6.1) + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@6.0.2) + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': + dependencies: + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@6.0.2) + '@typescript-eslint/visitor-keys': 8.57.2 + debug: 4.4.3 + eslint: 10.1.0(jiti@2.6.1) + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.57.2(typescript@6.0.2)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@6.0.2) + '@typescript-eslint/types': 8.57.2 + debug: 4.4.3 + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.57.2': + dependencies: + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/visitor-keys': 8.57.2 + + '@typescript-eslint/tsconfig-utils@8.57.2(typescript@6.0.2)': + dependencies: + typescript: 6.0.2 + + '@typescript-eslint/type-utils@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': + dependencies: + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@6.0.2) + '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + debug: 4.4.3 + eslint: 10.1.0(jiti@2.6.1) + ts-api-utils: 2.5.0(typescript@6.0.2) + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.57.2': {} + + '@typescript-eslint/typescript-estree@8.57.2(typescript@6.0.2)': + dependencies: + '@typescript-eslint/project-service': 8.57.2(typescript@6.0.2) + '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@6.0.2) + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/visitor-keys': 8.57.2 + debug: 4.4.3 + minimatch: 10.2.4 + semver: 7.7.4 + tinyglobby: 0.2.15 + ts-api-utils: 2.5.0(typescript@6.0.2) + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@6.0.2) + eslint: 10.1.0(jiti@2.6.1) + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.57.2': + dependencies: + '@typescript-eslint/types': 8.57.2 + eslint-visitor-keys: 5.0.1 + + '@use-gesture/core@10.3.1': {} + + '@use-gesture/vanilla@10.3.1': + dependencies: + '@use-gesture/core': 10.3.1 + + acorn-jsx@5.3.2(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + + acorn@8.16.0: {} + + ajv@6.14.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + argparse@2.0.1: {} + + aria-query@5.3.1: {} + + axobject-query@4.1.0: {} + + balanced-match@4.0.4: {} + + bits-ui@2.16.4(@internationalized/date@3.10.1)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0): + dependencies: + '@floating-ui/core': 1.7.5 + '@floating-ui/dom': 1.7.6 + '@internationalized/date': 3.10.1 + esm-env: 1.2.2 + runed: 0.35.1(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0) + svelte: 5.55.0 + svelte-toolbelt: 0.10.6(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0) + tabbable: 6.4.0 + transitivePeerDependencies: + - '@sveltejs/kit' + + blake3-wasm@2.1.5: {} + + brace-expansion@5.0.5: + dependencies: + balanced-match: 4.0.4 + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + clsx@2.1.1: {} + + cookie@0.6.0: {} + + cookie@1.1.1: {} + + core-js@3.49.0: {} + + crelt@1.0.6: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + cssesc@3.0.0: {} + + custom-event-polyfill@1.0.7: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + dequal@2.0.3: {} + + detect-libc@2.1.2: {} + + devalue@5.6.4: {} + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + dompurify@3.3.3: + optionalDependencies: + '@types/trusted-types': 2.0.7 + + emoji-picker-element@1.29.1: {} + + enhanced-resolve@5.20.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.2 + + entities@4.5.0: {} + + error-stack-parser-es@1.0.5: {} + + esbuild@0.27.3: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.3 + '@esbuild/android-arm': 0.27.3 + '@esbuild/android-arm64': 0.27.3 + '@esbuild/android-x64': 0.27.3 + '@esbuild/darwin-arm64': 0.27.3 + '@esbuild/darwin-x64': 0.27.3 + '@esbuild/freebsd-arm64': 0.27.3 + '@esbuild/freebsd-x64': 0.27.3 + '@esbuild/linux-arm': 0.27.3 + '@esbuild/linux-arm64': 0.27.3 + '@esbuild/linux-ia32': 0.27.3 + '@esbuild/linux-loong64': 0.27.3 + '@esbuild/linux-mips64el': 0.27.3 + '@esbuild/linux-ppc64': 0.27.3 + '@esbuild/linux-riscv64': 0.27.3 + '@esbuild/linux-s390x': 0.27.3 + '@esbuild/linux-x64': 0.27.3 + '@esbuild/netbsd-arm64': 0.27.3 + '@esbuild/netbsd-x64': 0.27.3 + '@esbuild/openbsd-arm64': 0.27.3 + '@esbuild/openbsd-x64': 0.27.3 + '@esbuild/openharmony-arm64': 0.27.3 + '@esbuild/sunos-x64': 0.27.3 + '@esbuild/win32-arm64': 0.27.3 + '@esbuild/win32-ia32': 0.27.3 + '@esbuild/win32-x64': 0.27.3 + + esbuild@0.27.4: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.4 + '@esbuild/android-arm': 0.27.4 + '@esbuild/android-arm64': 0.27.4 + '@esbuild/android-x64': 0.27.4 + '@esbuild/darwin-arm64': 0.27.4 + '@esbuild/darwin-x64': 0.27.4 + '@esbuild/freebsd-arm64': 0.27.4 + '@esbuild/freebsd-x64': 0.27.4 + '@esbuild/linux-arm': 0.27.4 + '@esbuild/linux-arm64': 0.27.4 + '@esbuild/linux-ia32': 0.27.4 + '@esbuild/linux-loong64': 0.27.4 + '@esbuild/linux-mips64el': 0.27.4 + '@esbuild/linux-ppc64': 0.27.4 + '@esbuild/linux-riscv64': 0.27.4 + '@esbuild/linux-s390x': 0.27.4 + '@esbuild/linux-x64': 0.27.4 + '@esbuild/netbsd-arm64': 0.27.4 + '@esbuild/netbsd-x64': 0.27.4 + '@esbuild/openbsd-arm64': 0.27.4 + '@esbuild/openbsd-x64': 0.27.4 + '@esbuild/openharmony-arm64': 0.27.4 + '@esbuild/sunos-x64': 0.27.4 + '@esbuild/win32-arm64': 0.27.4 + '@esbuild/win32-ia32': 0.27.4 + '@esbuild/win32-x64': 0.27.4 + + escape-string-regexp@4.0.0: {} + + eslint-config-prettier@10.1.8(eslint@10.1.0(jiti@2.6.1)): + dependencies: + eslint: 10.1.0(jiti@2.6.1) + + eslint-plugin-svelte@3.16.0(eslint@10.1.0(jiti@2.6.1))(svelte@5.55.0): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) + '@jridgewell/sourcemap-codec': 1.5.5 + eslint: 10.1.0(jiti@2.6.1) + esutils: 2.0.3 + globals: 16.5.0 + known-css-properties: 0.37.0 + postcss: 8.5.8 + postcss-load-config: 3.1.4(postcss@8.5.8) + postcss-safe-parser: 7.0.1(postcss@8.5.8) + semver: 7.7.4 + svelte-eslint-parser: 1.6.0(svelte@5.55.0) + optionalDependencies: + svelte: 5.55.0 + transitivePeerDependencies: + - ts-node + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-scope@9.1.2: + dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.8 + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint-visitor-keys@5.0.1: {} + + eslint@10.1.0(jiti@2.6.1): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.23.3 + '@eslint/config-helpers': 0.5.3 + '@eslint/core': 1.1.1 + '@eslint/plugin-kit': 0.6.1 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.14.0 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + minimatch: 10.2.4 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.6.1 + transitivePeerDependencies: + - supports-color + + esm-env@1.2.2: {} + + espree@10.4.0: + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 4.2.1 + + espree@11.2.0: + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 5.0.1 + + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrap@2.2.4: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@typescript-eslint/types': 8.57.2 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + event-target-polyfill@0.0.4: {} + + fast-deep-equal@3.1.3: {} + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.4.2 + keyv: 4.5.4 + + flatted@3.4.2: {} + + fsevents@2.3.3: + optional: true + + get-tsconfig@4.13.7: + dependencies: + resolve-pkg-maps: 1.0.0 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@16.5.0: {} + + globals@17.4.0: {} + + graceful-fs@4.2.11: {} + + highlight.js@11.11.1: {} + + hls.js@1.6.15: {} + + ignore@5.3.2: {} + + ignore@7.0.5: {} + + imurmurhash@0.1.4: {} + + inline-style-parser@0.2.7: {} + + is-emoji-supported@0.0.5: {} + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-reference@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + isexe@2.0.0: {} + + jiti@2.6.1: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kleur@4.1.5: {} + + known-css-properties@0.37.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + + lilconfig@2.1.0: {} + + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + + linkifyjs@4.3.2: {} + + loadjs@4.3.0: {} + + locate-character@3.0.0: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lowlight@3.3.0: + dependencies: + '@types/hast': 3.0.4 + devlop: 1.1.0 + highlight.js: 11.11.1 + + lz-string@1.5.0: {} + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + markdown-it@14.1.1: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + + marked@17.0.5: {} + + mdurl@2.0.0: {} + + mini-svg-data-uri@1.4.4: {} + + miniflare@4.20260317.3: + dependencies: + '@cspotcode/source-map-support': 0.8.1 + sharp: 0.34.5 + undici: 7.24.4 + workerd: 1.20260317.1 + ws: 8.18.0 + youch: 4.1.0-beta.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + minimatch@10.2.4: + dependencies: + brace-expansion: 5.0.5 + + mode-watcher@1.1.0(svelte@5.55.0): + dependencies: + runed: 0.25.0(svelte@5.55.0) + svelte: 5.55.0 + svelte-toolbelt: 0.7.1(svelte@5.55.0) + + mri@1.2.0: {} + + mrmime@2.0.1: {} + + ms@2.1.3: {} + + nanoid@3.3.11: {} + + nanoid@5.1.7: {} + + natural-compare@1.4.0: {} + + number-flow@0.6.0: + dependencies: + esm-env: 1.2.2 + + obug@2.1.1: {} + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + orderedmap@2.1.1: {} + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + partysocket@1.1.16: + dependencies: + event-target-polyfill: 0.0.4 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-to-regexp@6.3.0: {} + + pathe@2.0.3: {} + + picocolors@1.1.1: {} + + picomatch@4.0.4: {} + + plyr@3.8.4: + dependencies: + core-js: 3.49.0 + custom-event-polyfill: 1.0.7 + loadjs: 4.3.0 + rangetouch: 2.0.1 + url-polyfill: 1.1.14 + + postcss-load-config@3.1.4(postcss@8.5.8): + dependencies: + lilconfig: 2.1.0 + yaml: 1.10.3 + optionalDependencies: + postcss: 8.5.8 + + postcss-safe-parser@7.0.1(postcss@8.5.8): + dependencies: + postcss: 8.5.8 + + postcss-scss@4.0.9(postcss@8.5.8): + dependencies: + postcss: 8.5.8 + + postcss-selector-parser@7.1.1: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss@8.5.8: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prettier-plugin-svelte@3.5.1(prettier@3.8.1)(svelte@5.55.0): + dependencies: + prettier: 3.8.1 + svelte: 5.55.0 + + prettier-plugin-tailwindcss@0.7.2(prettier-plugin-svelte@3.5.1(prettier@3.8.1)(svelte@5.55.0))(prettier@3.8.1): + dependencies: + prettier: 3.8.1 + optionalDependencies: + prettier-plugin-svelte: 3.5.1(prettier@3.8.1)(svelte@5.55.0) + + prettier@3.8.1: {} + + prosemirror-changeset@2.4.0: + dependencies: + prosemirror-transform: 1.11.0 + + prosemirror-collab@1.3.1: + dependencies: + prosemirror-state: 1.4.4 + + prosemirror-commands@1.7.1: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + + prosemirror-dropcursor@1.8.2: + dependencies: + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.7 + + prosemirror-gapcursor@1.4.1: + dependencies: + prosemirror-keymap: 1.2.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-view: 1.41.7 + + prosemirror-history@1.5.0: + dependencies: + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.7 + rope-sequence: 1.3.4 + + prosemirror-inputrules@1.5.1: + dependencies: + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + + prosemirror-keymap@1.2.3: + dependencies: + prosemirror-state: 1.4.4 + w3c-keyname: 2.2.8 + + prosemirror-markdown@1.13.4: + dependencies: + '@types/markdown-it': 14.1.2 + markdown-it: 14.1.1 + prosemirror-model: 1.25.4 + + prosemirror-menu@1.3.0: + dependencies: + crelt: 1.0.6 + prosemirror-commands: 1.7.1 + prosemirror-history: 1.5.0 + prosemirror-state: 1.4.4 + + prosemirror-model@1.25.4: + dependencies: + orderedmap: 2.1.1 + + prosemirror-schema-basic@1.2.4: + dependencies: + prosemirror-model: 1.25.4 + + prosemirror-schema-list@1.5.1: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + + prosemirror-state@1.4.4: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.7 + + prosemirror-tables@1.8.5: + dependencies: + prosemirror-keymap: 1.2.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.7 + + prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.7): + dependencies: + '@remirror/core-constants': 3.0.0 + escape-string-regexp: 4.0.0 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-view: 1.41.7 + + prosemirror-transform@1.11.0: + dependencies: + prosemirror-model: 1.25.4 + + prosemirror-view@1.41.7: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + + punycode.js@2.3.1: {} + + punycode@2.3.1: {} + + rangetouch@2.0.1: {} + + readdirp@4.1.2: {} + + regexparam@3.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + rolldown@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1): + dependencies: + '@oxc-project/types': 0.122.0 + '@rolldown/pluginutils': 1.0.0-rc.12 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-rc.12 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.12 + '@rolldown/binding-darwin-x64': 1.0.0-rc.12 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.12 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.12 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.12 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.12 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.12 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.12 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.12 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + + rope-sequence@1.3.4: {} + + runed@0.23.4(svelte@5.55.0): + dependencies: + esm-env: 1.2.2 + svelte: 5.55.0 + + runed@0.25.0(svelte@5.55.0): + dependencies: + esm-env: 1.2.2 + svelte: 5.55.0 + + runed@0.28.0(svelte@5.55.0): + dependencies: + esm-env: 1.2.2 + svelte: 5.55.0 + + runed@0.35.1(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0): + dependencies: + dequal: 2.0.3 + esm-env: 1.2.2 + lz-string: 1.5.0 + svelte: 5.55.0 + optionalDependencies: + '@sveltejs/kit': 2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)) + + sade@1.8.1: + dependencies: + mri: 1.2.0 + + semver@7.7.4: {} + + set-cookie-parser@3.1.0: {} + + sharp@0.34.5: + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.7.4 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + sirv@3.0.2: + dependencies: + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 + + source-map-js@1.2.1: {} + + style-to-object@1.0.14: + dependencies: + inline-style-parser: 0.2.7 + + supports-color@10.2.2: {} + + svelte-check@4.4.5(picomatch@4.0.4)(svelte@5.55.0)(typescript@6.0.2): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + chokidar: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picocolors: 1.1.1 + sade: 1.8.1 + svelte: 5.55.0 + typescript: 6.0.2 + transitivePeerDependencies: + - picomatch + + svelte-eslint-parser@1.6.0(svelte@5.55.0): + dependencies: + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + postcss: 8.5.8 + postcss-scss: 4.0.9(postcss@8.5.8) + postcss-selector-parser: 7.1.1 + semver: 7.7.4 + optionalDependencies: + svelte: 5.55.0 + + svelte-sonner@1.1.0(svelte@5.55.0): + dependencies: + runed: 0.28.0(svelte@5.55.0) + svelte: 5.55.0 + + svelte-tiptap@3.0.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/extension-bubble-menu@3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0))(@tiptap/extension-floating-menu@3.21.0(@floating-ui/dom@1.7.6)(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0)(svelte@5.55.0): + dependencies: + '@floating-ui/dom': 1.7.6 + '@tiptap/core': 3.21.0(@tiptap/pm@3.21.0) + '@tiptap/extension-bubble-menu': 3.21.0(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0) + '@tiptap/extension-floating-menu': 3.21.0(@floating-ui/dom@1.7.6)(@tiptap/core@3.21.0(@tiptap/pm@3.21.0))(@tiptap/pm@3.21.0) + '@tiptap/pm': 3.21.0 + svelte: 5.55.0 + + svelte-toolbelt@0.10.6(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0): + dependencies: + clsx: 2.1.1 + runed: 0.35.1(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0)(typescript@6.0.2)(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)))(svelte@5.55.0) + style-to-object: 1.0.14 + svelte: 5.55.0 + transitivePeerDependencies: + - '@sveltejs/kit' + + svelte-toolbelt@0.7.1(svelte@5.55.0): + dependencies: + clsx: 2.1.1 + runed: 0.23.4(svelte@5.55.0) + style-to-object: 1.0.14 + svelte: 5.55.0 + + svelte@5.55.0: + dependencies: + '@jridgewell/remapping': 2.3.5 + '@jridgewell/sourcemap-codec': 1.5.5 + '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) + '@types/estree': 1.0.8 + '@types/trusted-types': 2.0.7 + acorn: 8.16.0 + aria-query: 5.3.1 + axobject-query: 4.1.0 + clsx: 2.1.1 + devalue: 5.6.4 + esm-env: 1.2.2 + esrap: 2.2.4 + is-reference: 3.0.3 + locate-character: 3.0.0 + magic-string: 0.30.21 + zimmerframe: 1.1.4 + + tabbable@6.4.0: {} + + tailwind-merge@3.5.0: {} + + tailwind-variants@3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.2): + dependencies: + tailwindcss: 4.2.2 + optionalDependencies: + tailwind-merge: 3.5.0 + + tailwindcss@4.2.2: {} + + tapable@2.3.2: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + + totalist@3.0.1: {} + + ts-api-utils@2.5.0(typescript@6.0.2): + dependencies: + typescript: 6.0.2 + + tslib@2.8.1: {} + + tsx@4.21.0: + dependencies: + esbuild: 0.27.4 + get-tsconfig: 4.13.7 + optionalDependencies: + fsevents: 2.3.3 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@4.41.0: {} + + typescript-eslint@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2): + dependencies: + '@typescript-eslint/eslint-plugin': 8.57.2(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/parser': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/typescript-estree': 8.57.2(typescript@6.0.2) + '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + eslint: 10.1.0(jiti@2.6.1) + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color + + typescript@6.0.2: {} + + uc.micro@2.1.0: {} + + undici-types@7.16.0: + optional: true + + undici@7.24.4: {} + + unenv@2.0.0-rc.24: + dependencies: + pathe: 2.0.3 + + unicode-segmenter@0.14.5: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + url-polyfill@1.1.14: {} + + util-deprecate@1.0.2: {} + + valibot@1.3.1(typescript@6.0.2): + optionalDependencies: + typescript: 6.0.2 + + vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.8 + rolldown: 1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 25.0.10 + esbuild: 0.27.4 + fsevents: 2.3.3 + jiti: 2.6.1 + tsx: 4.21.0 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + + vitefu@1.1.2(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)): + optionalDependencies: + vite: 8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.0.10)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0) + + w3c-keyname@2.2.8: {} + + web-haptics@0.0.6(svelte@5.55.0): + optionalDependencies: + svelte: 5.55.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + workerd@1.20260317.1: + optionalDependencies: + '@cloudflare/workerd-darwin-64': 1.20260317.1 + '@cloudflare/workerd-darwin-arm64': 1.20260317.1 + '@cloudflare/workerd-linux-64': 1.20260317.1 + '@cloudflare/workerd-linux-arm64': 1.20260317.1 + '@cloudflare/workerd-windows-64': 1.20260317.1 + + worktop@0.8.0-next.18: + dependencies: + mrmime: 2.0.1 + regexparam: 3.0.0 + + wrangler@4.78.0(@cloudflare/workers-types@4.20260317.1): + dependencies: + '@cloudflare/kv-asset-handler': 0.4.2 + '@cloudflare/unenv-preset': 2.16.0(unenv@2.0.0-rc.24)(workerd@1.20260317.1) + blake3-wasm: 2.1.5 + esbuild: 0.27.3 + miniflare: 4.20260317.3 + path-to-regexp: 6.3.0 + unenv: 2.0.0-rc.24 + workerd: 1.20260317.1 + optionalDependencies: + '@cloudflare/workers-types': 4.20260317.1 + fsevents: 2.3.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + ws@8.18.0: {} + + yaml@1.10.3: {} + + yocto-queue@0.1.0: {} + + yocto-queue@1.2.2: {} + + youch-core@0.3.3: + dependencies: + '@poppinss/exception': 1.2.3 + error-stack-parser-es: 1.0.5 + + youch@4.1.0-beta.10: + dependencies: + '@poppinss/colors': 4.1.6 + '@poppinss/dumper': 0.6.5 + '@speed-highlight/core': 1.2.15 + cookie: 1.1.1 + youch-core: 0.3.3 + + zimmerframe@1.1.4: {} diff --git a/examples/sveltekit-cloudflare-workers/screenshot.png b/examples/sveltekit-cloudflare-workers/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..17218a0562824b839fa19029623f84a3bb83d88e GIT binary patch literal 226348 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

tTuHU%$6yZ;!2+c`@~m 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≻R5f} zzCCAeDO5~J-??>nZno*|YcI=m`W_oEdUUm?hWDzMX^5#*%e-ByGOpxp)j7S{c-u7N zqQfyPa0g=snScZ%W7MkN1I|gE@F=+{^dT%e&iBM>Io`JRewz=M-1n?OJFw`qJPds_=DHXk{^6(tbMQ>AnE);Wei*4-@ zG1=r{dljkrgSi}(l3`Jo9@{W2EB&wF26$PJ@Pk!pYk)S_*3j20)<*5l44f0OXnMH) zrwtR>TYn`kTs(EcwW4sjfLB@xS6*u#nDSkRW$vEZ=q=N3TCn2_K!*fl&;rXgtzx(b zpKoZ`9vS>gBgFVqmz%3G|JAM})(Lw)1kt29?cXkLFn}dFEGY%mO>O?5eXzE|VepC> zTT(_AJ8*$Zz(VSl`{6^_U4g|)2|JKSzxzbs+xLiU2LqF{w!?#r40&E|XDsHSdI9Q; zgdZ#%GQ9VV6J4>TBdlUPYe7>UwI(_|DDi^Tc!)C^9||iJnADta5rq#PVKo`aGX`6j zSo+#VBLyi)V3`|h(2YjQ;bD?fJlgX;*TBc>91^CmbS>K8!QHp`$Rd?(Dt)@wPM04G z%n5vQ|C@X5n!LK2xF>0?k@KEUdl{OtbDOb!Vu8kctSJPZlAN_19%OjP^PGks578ES zz}cyAjz+|kh$yc$Q>OKCiq6fstJtxGx#U|{d!@w6+pnY6U*DW#*kWRlepHx1tG(bD zD~HV7!XiERApt$}8p0L5CLcMqbkb5T30ZljQz8Pd(yB_Uuf5bVSQ5TW%dPU-`m`sC zs`7R7!fm@IpAgzR-79tPuZ2s4W<@OukNo}T>EZLyv;0LT^zF~H=#afp+mGO&_T!j_T$+Y-;L(AK&=k0$Wne|~V$&SOocVp4y-oE3wY%n0-l`Fj7i;(~*A z{j##Wa=M-xiCZL$g9=W3e>K^xFHgU2{rf+=zJ4^6mS5femB-2dUeVgCd8^+>^{;aG z-jD;2Vr;HTcWXFsac1E&Etuqi3)~ei)FoMZuh^Y+Uw(Vz&7G{X<7eJNCtV|CC5P9~NA-c z^Sg7`pB=tmtKHIjC28ⅆ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 literal 0 HcmV?d00001 diff --git a/examples/sveltekit-cloudflare-workers/src/app.css b/examples/sveltekit-cloudflare-workers/src/app.css new file mode 100644 index 0000000..6289b7f --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/app.css @@ -0,0 +1,9 @@ +@import 'tailwindcss'; + +@plugin '@tailwindcss/forms'; + +@custom-variant dark (&:where(.dark, .dark *)); + +@import '@foxui/core/theme.css'; + +@source "../node_modules/@foxui"; diff --git a/examples/sveltekit-cloudflare-workers/src/app.d.ts b/examples/sveltekit-cloudflare-workers/src/app.d.ts new file mode 100644 index 0000000..69b2623 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/app.d.ts @@ -0,0 +1,32 @@ +// See https://svelte.dev/docs/kit/types#app.d.ts +// for information about these interfaces +import type { OAuthSession } from '@atcute/oauth-node-client'; +import type { Client } from '@atcute/client'; +import type { Did } from '@atcute/lexicons'; + +declare global { + namespace App { + // interface Error {} + interface Locals { + session: OAuthSession | null; + client: Client | null; + did: Did | null; + } + // interface PageData {} + // interface PageState {} + interface Platform { + env: { + OAUTH_SESSIONS: KVNamespace; + OAUTH_STATES: KVNamespace; + CLIENT_ASSERTION_KEY: string; + COOKIE_SECRET: string; + OAUTH_PUBLIC_URL: string; + PROFILE_CACHE?: KVNamespace; + }; + } + } +} +import type {} from '@atcute/atproto'; +import type {} from '@atcute/bluesky'; + +export {}; diff --git a/examples/sveltekit-cloudflare-workers/src/app.html b/examples/sveltekit-cloudflare-workers/src/app.html new file mode 100644 index 0000000..03c33ff --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/app.html @@ -0,0 +1,12 @@ + + + + + + + %sveltekit.head% + + +

%sveltekit.body%
+ + diff --git a/examples/sveltekit-cloudflare-workers/src/hooks.server.ts b/examples/sveltekit-cloudflare-workers/src/hooks.server.ts new file mode 100644 index 0000000..98b4fae --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/hooks.server.ts @@ -0,0 +1,15 @@ +import type { Handle } from '@sveltejs/kit'; +import { restoreSession } from '$lib/atproto/server/session'; + +export const handle: Handle = async ({ event, resolve }) => { + const { session, client, did } = await restoreSession( + event.cookies, + event.platform?.env + ); + + event.locals.session = session; + event.locals.client = client; + event.locals.did = did; + + return resolve(event); +}; diff --git a/examples/sveltekit-cloudflare-workers/src/lib/atproto/auth.svelte.ts b/examples/sveltekit-cloudflare-workers/src/lib/atproto/auth.svelte.ts new file mode 100644 index 0000000..2859236 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/lib/atproto/auth.svelte.ts @@ -0,0 +1,75 @@ +import { AppBskyActorDefs } from '@atcute/bluesky'; +import type { ActorIdentifier, Did } from '@atcute/lexicons'; +import { page } from '$app/state'; +import { ALLOW_SIGNUP, REDIRECT_TO_LAST_PAGE_ON_LOGIN } from './settings'; + +export const user = { + get profile() { + return (page.data?.profile as AppBskyActorDefs.ProfileViewDetailed | null) ?? null; + }, + get isLoggedIn() { + return !!page.data?.did; + }, + get did() { + return (page.data?.did as Did | null) ?? null; + } +}; + +function saveReturnTo() { + if (REDIRECT_TO_LAST_PAGE_ON_LOGIN) { + document.cookie = `oauth_return_to=${encodeURIComponent(window.location.pathname + window.location.search)};path=/;max-age=600;samesite=lax`; + } +} + +export async function login(handle: string) { + if (handle.startsWith('did:')) { + if (handle.length < 6) throw new Error('DID must be at least 6 characters'); + } else if (handle.includes('.') && handle.length > 3) { + handle = (handle.startsWith('@') ? handle.slice(1) : handle) as ActorIdentifier; + if (handle.length < 4) throw new Error('Handle must be at least 4 characters'); + } else if (handle.length > 3) { + handle = ((handle.startsWith('@') ? handle.slice(1) : handle) + + '.bsky.social') as ActorIdentifier; + } else { + throw new Error('Please provide a valid handle or DID.'); + } + + const { oauthLogin } = await import('./server/oauth.remote'); + const { url } = await oauthLogin({ handle }); + saveReturnTo(); + window.location.assign(url); + + // Wait for navigation (prevents UI flash) + await new Promise((_resolve, reject) => { + window.addEventListener('pageshow', () => reject(new Error('user aborted the login request')), { + once: true + }); + }); +} + +export async function signup() { + if (!ALLOW_SIGNUP) throw new Error('Signup is not enabled'); + + const { oauthLogin } = await import('./server/oauth.remote'); + const { url } = await oauthLogin({ signup: true }); + saveReturnTo(); + window.location.assign(url); + + await new Promise((_resolve, reject) => { + window.addEventListener('pageshow', () => reject(new Error('user aborted the signup request')), { + once: true + }); + }); +} + +export async function logout() { + try { + const { oauthLogout } = await import('./server/oauth.remote'); + await oauthLogout(); + } catch (e) { + console.error('Error logging out:', e); + } + + // Full reload to clear server session state + window.location.href = '/'; +} diff --git a/examples/sveltekit-cloudflare-workers/src/lib/atproto/image-helper.ts b/examples/sveltekit-cloudflare-workers/src/lib/atproto/image-helper.ts new file mode 100644 index 0000000..08ddf93 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/lib/atproto/image-helper.ts @@ -0,0 +1,152 @@ +import { getCDNImageBlobUrl, uploadBlob } from './methods'; + +export function compressImage( + file: File | Blob, + maxSize: number = 900 * 1024, + maxDimension: number = 2048 +): Promise<{ + blob: Blob; + aspectRatio: { + width: number; + height: number; + }; +}> { + return new Promise((resolve, reject) => { + const img = new Image(); + const reader = new FileReader(); + + reader.onload = (e) => { + if (!e.target?.result) { + return reject(new Error('Failed to read file.')); + } + img.src = e.target.result as string; + }; + + reader.onerror = (err) => reject(err); + reader.readAsDataURL(file); + + img.onload = () => { + let width = img.width; + let height = img.height; + + // If image is already small enough, return original + if (file.size <= maxSize) { + console.log('skipping compression+resizing, already small enough'); + return resolve({ + blob: file, + aspectRatio: { + width, + height + } + }); + } + + if (width > maxDimension || height > maxDimension) { + if (width > height) { + height = Math.round((maxDimension / width) * height); + width = maxDimension; + } else { + width = Math.round((maxDimension / height) * width); + height = maxDimension; + } + } + + // Create a canvas to draw the image + const canvas = document.createElement('canvas'); + canvas.width = width; + canvas.height = height; + const ctx = canvas.getContext('2d'); + if (!ctx) return reject(new Error('Failed to get canvas context.')); + ctx.drawImage(img, 0, 0, width, height); + + // Use WebP for both compression and transparency support + let quality = 0.9; + + function attemptCompression() { + canvas.toBlob( + (blob) => { + if (!blob) { + return reject(new Error('Compression failed.')); + } + if (blob.size <= maxSize || quality < 0.3) { + resolve({ + blob, + aspectRatio: { + width, + height + } + }); + } else { + quality -= 0.1; + attemptCompression(); + } + }, + 'image/webp', + quality + ); + } + + attemptCompression(); + }; + + img.onerror = (err) => reject(err); + }); +} + +export async function checkAndUploadImage( + recordWithImage: Record, + key: string = 'image', + // e.g. /api/image-proxy?url= + imageProxy?: string +) { + if (!recordWithImage[key]) return; + + // Already uploaded as blob + if (typeof recordWithImage[key] === 'object' && recordWithImage[key].$type === 'blob') { + return; + } + + if (typeof recordWithImage[key] === 'string' && imageProxy) { + const proxyUrl = imageProxy + encodeURIComponent(recordWithImage[key]); + const response = await fetch(proxyUrl); + if (!response.ok) { + throw Error('failed to get image from image proxy'); + } + + const blob = await response.blob(); + const { blob: compressed, aspectRatio } = await compressImage(blob); + + recordWithImage[key] = await uploadBlob({ blob: compressed, aspectRatio }); + + return; + } + + if (recordWithImage[key]?.blob) { + if (recordWithImage[key].objectUrl) { + URL.revokeObjectURL(recordWithImage[key].objectUrl); + } + const { blob: compressed, aspectRatio } = await compressImage(recordWithImage[key].blob); + recordWithImage[key] = await uploadBlob({ blob: compressed, aspectRatio }); + } +} + +export function getImageFromRecord( + recordWithImage: Record | undefined, + did: string, + key: string = 'image' +): string | undefined { + if (!recordWithImage?.[key]) return; + + if (typeof recordWithImage[key] === 'object' && recordWithImage[key].$type === 'blob') { + return getCDNImageBlobUrl({ did, blob: recordWithImage[key] }); + } + + if (recordWithImage[key].objectUrl) return recordWithImage[key].objectUrl; + + if (recordWithImage[key].blob) { + recordWithImage[key].objectUrl = URL.createObjectURL(recordWithImage[key].blob); + return recordWithImage[key].objectUrl; + } + + return recordWithImage[key]; +} diff --git a/examples/sveltekit-cloudflare-workers/src/lib/atproto/index.ts b/examples/sveltekit-cloudflare-workers/src/lib/atproto/index.ts new file mode 100644 index 0000000..8d3232a --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/lib/atproto/index.ts @@ -0,0 +1,20 @@ +export { user, login, signup, logout } from './auth.svelte'; + +export { + parseUri, + resolveHandle, + actorToDid, + getPDS, + getDetailedProfile, + getClient, + listRecords, + getRecord, + putRecord, + deleteRecord, + uploadBlob, + describeRepo, + getBlobURL, + getCDNImageBlobUrl, + searchActorsTypeahead, + createTID +} from './methods'; diff --git a/examples/sveltekit-cloudflare-workers/src/lib/atproto/methods.ts b/examples/sveltekit-cloudflare-workers/src/lib/atproto/methods.ts new file mode 100644 index 0000000..4a84fd5 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/lib/atproto/methods.ts @@ -0,0 +1,373 @@ +import { parseResourceUri, type Did, type Handle } from '@atcute/lexicons'; +import { isDid } from '@atcute/lexicons/syntax'; +import { user } from './auth.svelte'; +import { DOH_RESOLVER, type AllowedCollection } from './settings'; +import { + CompositeDidDocumentResolver, + CompositeHandleResolver, + DohJsonHandleResolver, + PlcDidDocumentResolver, + WebDidDocumentResolver, + WellKnownHandleResolver +} from '@atcute/identity-resolver'; +import { Client, simpleFetchHandler } from '@atcute/client'; +import { type AppBskyActorDefs } from '@atcute/bluesky'; + +export type Collection = `${string}.${string}.${string}`; +import * as TID from '@atcute/tid'; + +/** + * Parses an AT Protocol URI into its components. + */ +export function parseUri(uri: string) { + const parts = parseResourceUri(uri); + if (!parts.ok) return; + return parts.value; +} + +/** + * Resolves a handle to a DID using DNS and HTTP methods. + */ +export async function resolveHandle({ handle }: { handle: Handle }) { + const handleResolver = new CompositeHandleResolver({ + methods: { + dns: new DohJsonHandleResolver({ dohUrl: DOH_RESOLVER }), + http: new WellKnownHandleResolver() + } + }); + + const data = await handleResolver.resolve(handle); + return data; +} + +/** + * Returns a DID given a handle or DID string. + */ +export async function actorToDid(actor: string): Promise { + if (isDid(actor)) return actor; + return await resolveHandle({ handle: actor as Handle }); +} + +const didResolver = new CompositeDidDocumentResolver({ + methods: { + plc: new PlcDidDocumentResolver(), + web: new WebDidDocumentResolver() + } +}); + +/** + * Gets the PDS (Personal Data Server) URL for a given DID. + */ +export async function getPDS(did: Did) { + const doc = await didResolver.resolve(did as Did<'plc'> | Did<'web'>); + if (!doc.service) throw new Error('No PDS found'); + for (const service of doc.service) { + if (service.id === '#atproto_pds') { + return service.serviceEndpoint.toString(); + } + } +} + +/** + * Fetches a detailed Bluesky profile for a user. + */ +export async function getDetailedProfile(data?: { did?: Did; client?: Client }) { + data ??= {}; + data.did ??= user.did ?? undefined; + + if (!data.did) throw new Error('Error getting detailed profile: no did'); + + data.client ??= new Client({ + handler: simpleFetchHandler({ service: 'https://public.api.bsky.app' }) + }); + + const response = await data.client.get('app.bsky.actor.getProfile', { + params: { actor: data.did } + }); + + if (!response.ok) return; + + return response.data; +} + +/** + * Creates an AT Protocol client for a user's PDS. + */ +export async function getClient({ did }: { did: Did }) { + const pds = await getPDS(did); + if (!pds) throw new Error('PDS not found'); + + const client = new Client({ + handler: simpleFetchHandler({ service: pds }) + }); + + return client; +} + +/** + * Lists records from a repository collection with pagination support. + */ +export async function listRecords({ + did, + collection, + cursor, + limit = 100, + client +}: { + did?: Did; + collection: `${string}.${string}.${string}`; + cursor?: string; + limit?: number; + client?: Client; +}) { + did ??= user.did ?? undefined; + if (!collection) { + throw new Error('Missing parameters for listRecords'); + } + if (!did) { + throw new Error('Missing did for listRecords'); + } + + client ??= await getClient({ did }); + + const allRecords = []; + + let currentCursor = cursor; + do { + const response = await client.get('com.atproto.repo.listRecords', { + params: { + repo: did, + collection, + limit: !limit || limit > 100 ? 100 : limit, + cursor: currentCursor + } + }); + + if (!response.ok) { + return allRecords; + } + + allRecords.push(...response.data.records); + currentCursor = response.data.cursor; + } while (currentCursor && (!limit || allRecords.length < limit)); + + return allRecords; +} + +/** + * Fetches a single record from a repository. + */ +export async function getRecord({ + did, + collection, + rkey = 'self', + client +}: { + did?: Did; + collection: Collection; + rkey?: string; + client?: Client; +}) { + did ??= user.did ?? undefined; + + if (!collection) { + throw new Error('Missing parameters for getRecord'); + } + if (!did) { + throw new Error('Missing did for getRecord'); + } + + client ??= await getClient({ did }); + + const record = await client.get('com.atproto.repo.getRecord', { + params: { + repo: did, + collection, + rkey + } + }); + + return JSON.parse(JSON.stringify(record.data)); +} + +/** + * Creates or updates a record via remote function. + */ +export async function putRecord({ + collection, + rkey = 'self', + record +}: { + collection: AllowedCollection; + rkey?: string; + record: Record; +}) { + if (!user.did) throw new Error('Not logged in'); + + const { putRecord: putRecordRemote } = await import('./server/repo.remote'); + const data = await putRecordRemote({ collection, rkey, record }); + return { ok: true, data }; +} + +/** + * Deletes a record via remote function. + */ +export async function deleteRecord({ + collection, + rkey = 'self' +}: { + collection: AllowedCollection; + rkey: string; +}) { + if (!user.did) throw new Error('Not logged in'); + + const { deleteRecord: deleteRecordRemote } = await import('./server/repo.remote'); + const data = await deleteRecordRemote({ collection, rkey }); + return data.ok; +} + +/** + * Gets the dimensions of an image blob. + */ +function getImageDimensions(blob: Blob): Promise<{ width: number; height: number }> { + return new Promise((resolve, reject) => { + const img = new Image(); + const url = URL.createObjectURL(blob); + img.onload = () => { + URL.revokeObjectURL(url); + resolve({ width: img.naturalWidth, height: img.naturalHeight }); + }; + img.onerror = () => { + URL.revokeObjectURL(url); + reject(new Error('Failed to load image for dimensions')); + }; + img.src = url; + }); +} + +/** + * Uploads a blob via remote function. + * Converts the Blob to a byte array for serialization across the remote boundary. + * For image blobs, automatically includes aspectRatio with width and height. + */ +export async function uploadBlob({ + blob, + aspectRatio +}: { + blob: Blob; + aspectRatio?: { width: number; height: number }; +}) { + if (!user.did) throw new Error("Can't upload blob: Not logged in"); + + // Auto-detect dimensions for image blobs if not provided + if (!aspectRatio && blob.type.startsWith('image/')) { + try { + aspectRatio = await getImageDimensions(blob); + } catch { + // Non-critical — proceed without aspectRatio + } + } + + const arrayBuffer = await blob.arrayBuffer(); + const bytes = Array.from(new Uint8Array(arrayBuffer)); + + const { uploadBlob: uploadBlobRemote } = await import('./server/repo.remote'); + const result = await uploadBlobRemote({ bytes, mimeType: blob.type || 'application/octet-stream' }); + + if (aspectRatio) { + return { ...result, aspectRatio }; + } + return result; +} + +/** + * Gets metadata about a repository. + */ +export async function describeRepo({ client, did }: { client?: Client; did?: Did }) { + did ??= user.did ?? undefined; + if (!did) { + throw new Error('Error describeRepo: No did'); + } + client ??= await getClient({ did }); + + const repo = await client.get('com.atproto.repo.describeRepo', { + params: { + repo: did + } + }); + if (!repo.ok) return; + + return repo.data; +} + +/** + * Constructs a URL to fetch a blob directly from a user's PDS. + */ +export async function getBlobURL({ + did, + blob +}: { + did: Did; + blob: { + $type: 'blob'; + ref: { + $link: string; + }; + }; +}) { + const pds = await getPDS(did); + return `${pds}/xrpc/com.atproto.sync.getBlob?did=${did}&cid=${blob.ref.$link}`; +} + +/** + * Constructs a Bluesky CDN URL for an image blob. + */ +export function getCDNImageBlobUrl({ + did, + blob +}: { + did?: string; + blob: { + $type: 'blob'; + ref: { + $link: string; + }; + }; +}) { + did ??= user.did ?? undefined; + + return `https://cdn.bsky.app/img/feed_thumbnail/plain/${did}/${blob.ref.$link}@webp`; +} + +/** + * Searches for actors with typeahead/autocomplete functionality. + */ +export async function searchActorsTypeahead( + q: string, + limit: number = 10, + host?: string +): Promise<{ actors: AppBskyActorDefs.ProfileViewBasic[]; q: string }> { + host ??= 'https://public.api.bsky.app'; + + const client = new Client({ + handler: simpleFetchHandler({ service: host }) + }); + + const response = await client.get('app.bsky.actor.searchActorsTypeahead', { + params: { + q, + limit + } + }); + + if (!response.ok) return { actors: [], q }; + + return { actors: response.data.actors, q }; +} + +/** + * Return a TID based on current time + */ +export function createTID() { + return TID.now(); +} diff --git a/examples/sveltekit-cloudflare-workers/src/lib/atproto/microcosm.ts b/examples/sveltekit-cloudflare-workers/src/lib/atproto/microcosm.ts new file mode 100644 index 0000000..fca5998 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/lib/atproto/microcosm.ts @@ -0,0 +1,19 @@ +const BASE_URL = 'https://ufos-api.microcosm.blue'; + +export interface MicrocosmRecord { + did: string; + collection: string; + rkey: string; + record: T; + time_us: number; +} + +export async function recentRecords( + collections: string | string[] +): Promise[]> { + const collection = Array.isArray(collections) ? collections.join(',') : collections; + const url = `${BASE_URL}/records?collection=${encodeURIComponent(collection)}`; + const res = await fetch(url); + if (!res.ok) throw new Error(`Microcosm API error: ${res.status}`); + return res.json(); +} diff --git a/examples/sveltekit-cloudflare-workers/src/lib/atproto/port.ts b/examples/sveltekit-cloudflare-workers/src/lib/atproto/port.ts new file mode 100644 index 0000000..4d6686b --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/lib/atproto/port.ts @@ -0,0 +1,3 @@ +// Dev server port — generated by setup-dev, shared by vite, oauth, and tunnel. +// Each project gets a unique random port (5200–7200) so multiple projects can run simultaneously. +export const DEV_PORT = 5291; diff --git a/examples/sveltekit-cloudflare-workers/src/lib/atproto/scripts/generate-key.ts b/examples/sveltekit-cloudflare-workers/src/lib/atproto/scripts/generate-key.ts new file mode 100644 index 0000000..3d1cc8a --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/lib/atproto/scripts/generate-key.ts @@ -0,0 +1,4 @@ +import { generateClientAssertionKey } from '@atcute/oauth-node-client'; + +const key = await generateClientAssertionKey('main-key'); +console.log(JSON.stringify(key)); diff --git a/examples/sveltekit-cloudflare-workers/src/lib/atproto/scripts/generate-secret.ts b/examples/sveltekit-cloudflare-workers/src/lib/atproto/scripts/generate-secret.ts new file mode 100644 index 0000000..9092066 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/lib/atproto/scripts/generate-secret.ts @@ -0,0 +1,3 @@ +import { randomBytes } from 'node:crypto'; + +console.log(randomBytes(32).toString('base64url')); diff --git a/examples/sveltekit-cloudflare-workers/src/lib/atproto/scripts/setup-dev.ts b/examples/sveltekit-cloudflare-workers/src/lib/atproto/scripts/setup-dev.ts new file mode 100644 index 0000000..bdc8ccf --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/lib/atproto/scripts/setup-dev.ts @@ -0,0 +1,60 @@ +import { existsSync } from 'node:fs'; +import { copyFile, readFile, writeFile } from 'node:fs/promises'; +import { resolve } from 'node:path'; +import { randomBytes, randomInt } from 'node:crypto'; + +import { generateClientAssertionKey } from '@atcute/oauth-node-client'; + +const cwd = process.cwd(); +const examplePath = resolve(cwd, '.env.example'); +const envPath = resolve(cwd, '.env'); + +if (!existsSync(envPath)) { + if (!existsSync(examplePath)) { + throw new Error(`missing .env.example (expected at ${examplePath})`); + } + await copyFile(examplePath, envPath); + console.log(`created ${envPath}`); +} + +const upsertVar = (input: string, key: string, value: string): string => { + const line = `${key}=${value}`; + const re = new RegExp(`^${key}=.*$`, 'm'); + + if (re.test(input)) { + const match = input.match(re); + const current = match ? match[0].slice(key.length + 1).trim() : ''; + // Only overwrite if empty/placeholder + if (current === '' || current === "''" || current === '""' || current.includes('...')) { + return input.replace(re, line); + } + return input; + } + + const suffix = input.endsWith('\n') || input.length === 0 ? '' : '\n'; + return `${input}${suffix}${line}\n`; +}; + +let vars = await readFile(envPath, 'utf8'); + +const secret = randomBytes(32).toString('base64url'); +vars = upsertVar(vars, 'COOKIE_SECRET', secret); + +const jwk = await generateClientAssertionKey('main-key'); +vars = upsertVar(vars, 'CLIENT_ASSERTION_KEY', JSON.stringify(jwk)); + +await writeFile(envPath, vars); +console.log(`updated ${envPath}`); + +// Generate a random dev port (5200–7200) so multiple projects can run simultaneously +const portPath = resolve(cwd, 'src/lib/atproto/port.ts'); +const portFile = await readFile(portPath, 'utf8'); +const currentPort = portFile.match(/DEV_PORT\s*=\s*(\d+)/); +if (currentPort && parseInt(currentPort[1]) === 5183) { + const port = randomInt(5200, 7201); + const updated = portFile.replace(/DEV_PORT\s*=\s*\d+/, `DEV_PORT = ${port}`); + await writeFile(portPath, updated); + console.log(`set DEV_PORT to ${port} in port.ts`); +} else { + console.log(`DEV_PORT already customized (${currentPort?.[1]}), skipping`); +} diff --git a/examples/sveltekit-cloudflare-workers/src/lib/atproto/scripts/tunnel.ts b/examples/sveltekit-cloudflare-workers/src/lib/atproto/scripts/tunnel.ts new file mode 100644 index 0000000..9c37d5f --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/lib/atproto/scripts/tunnel.ts @@ -0,0 +1,195 @@ +import { readFileSync, writeFileSync } from 'node:fs'; +import { resolve } from 'node:path'; +import { spawn } from 'node:child_process'; +import { DEV_PORT } from '../port'; + +const cwd = process.cwd(); +const envPath = resolve(cwd, '.env'); +const vitePath = resolve(cwd, 'vite.config.ts'); + +let tunnelUrl: string | null = null; +let statusBarActive = false; + +// ── ANSI status bar ────────────────────────────────────────────── +// Reserves the bottom row of the terminal for a persistent status line. +// Logs scroll in the region above it. + +function getColumns(): number { + return process.stdout.columns || 80; +} + +function getRows(): number { + return process.stdout.rows || 24; +} + +function setupScrollRegion(): void { + if (!process.stdout.isTTY) return; + statusBarActive = true; + const rows = getRows(); + // Set scroll region to all rows except the last + process.stdout.write(`\x1b[1;${rows - 1}r`); + // Move cursor into scroll region + process.stdout.write(`\x1b[${rows - 1};1H`); +} + +function drawStatusBar(text: string): void { + if (!process.stdout.isTTY) { + process.stdout.write(text + '\n'); + return; + } + const rows = getRows(); + const cols = getColumns(); + // Save cursor, move to bottom row, clear it, write status, restore cursor + process.stdout.write('\x1b7'); + process.stdout.write(`\x1b[${rows};1H`); + process.stdout.write('\x1b[2K'); + // Inverse video for the bar + process.stdout.write(`\x1b[7m ${text.padEnd(cols - 1)}\x1b[0m`); + process.stdout.write('\x1b8'); +} + +function clearStatusBar(): void { + if (!process.stdout.isTTY || !statusBarActive) return; + const rows = getRows(); + // Reset scroll region to full terminal + process.stdout.write(`\x1b[1;${rows}r`); + // Clear the bottom row + process.stdout.write(`\x1b[${rows};1H\x1b[2K`); + // Move cursor up + process.stdout.write(`\x1b[${rows - 1};1H`); + statusBarActive = false; +} + +function writeLog(text: string): void { + if (statusBarActive && process.stdout.isTTY) { + // Write inside the scroll region, which auto-scrolls above the bar + process.stdout.write(text); + } else { + process.stdout.write(text); + } +} + +// Redraw on terminal resize +process.stdout.on('resize', () => { + if (!statusBarActive || !tunnelUrl) return; + setupScrollRegion(); + drawStatusBar(`Tunnel: ${tunnelUrl} | Ctrl+C to stop`); +}); + +// ── .env helpers ───────────────────────────────────────────────── + +function readEnv(): string { + return readFileSync(envPath, 'utf8'); +} + +function writeEnv(content: string): void { + writeFileSync(envPath, content); +} + +function setEnvVar(key: string, value: string): void { + let env = readEnv(); + const re = new RegExp(`^(#\\s*)?${key}=.*$`, 'm'); + const line = `${key}=${value}`; + + if (re.test(env)) { + env = env.replace(re, line); + } else { + env = env.trimEnd() + '\n' + line + '\n'; + } + writeEnv(env); +} + +function clearEnvVar(key: string): void { + let env = readEnv(); + const re = new RegExp(`^${key}=.*$`, 'm'); + + if (re.test(env)) { + env = env.replace(re, `# ${key}=`); + writeEnv(env); + } +} + +// ── vite config helpers ────────────────────────────────────────── + +function setViteAllowedHosts(hostname: string): void { + let vite = readFileSync(vitePath, 'utf8'); + + if (/allowedHosts\s*:/.test(vite)) { + vite = vite.replace(/allowedHosts\s*:\s*\[.*?\]/s, `allowedHosts: ['${hostname}']`); + } else if (/server\s*:\s*\{/.test(vite)) { + vite = vite.replace(/server\s*:\s*\{/, `server: {\n\t\tallowedHosts: ['${hostname}'],`); + } + + writeFileSync(vitePath, vite); +} + +function clearViteAllowedHosts(): void { + let vite = readFileSync(vitePath, 'utf8'); + + if (/allowedHosts\s*:/.test(vite)) { + vite = vite.replace(/allowedHosts\s*:\s*\[.*?\]/s, 'allowedHosts: []'); + } + + writeFileSync(vitePath, vite); +} + +// ── cleanup ────────────────────────────────────────────────────── + +function cleanup(): void { + clearStatusBar(); + console.log('\nCleaning up...'); + if (tunnelUrl) { + clearEnvVar('OAUTH_PUBLIC_URL'); + console.log(' Cleared OAUTH_PUBLIC_URL from .env'); + clearViteAllowedHosts(); + console.log(' Cleared allowedHosts from vite.config.ts'); + } +} + +// ── main ───────────────────────────────────────────────────────── + +const child = spawn('cloudflared', ['tunnel', '--url', `http://localhost:${DEV_PORT}`], { + stdio: ['ignore', 'pipe', 'pipe'] +}); + +child.stderr.on('data', (data: Buffer) => { + const output = data.toString(); + + if (!tunnelUrl) { + const match = output.match(/https:\/\/[a-z0-9-]+\.trycloudflare\.com/); + if (match) { + tunnelUrl = match[0]; + const hostname = new URL(tunnelUrl).hostname; + + setEnvVar('OAUTH_PUBLIC_URL', tunnelUrl); + setViteAllowedHosts(hostname); + + writeLog(`\n Set OAUTH_PUBLIC_URL=${tunnelUrl}\n`); + writeLog(` Set vite allowedHosts to [${hostname}]\n`); + writeLog(` Tunnel is ready! Restart your dev server to pick up the new URL.\n\n`); + + setupScrollRegion(); + drawStatusBar(`Tunnel: ${tunnelUrl} | Ctrl+C to stop`); + return; + } + } + + writeLog(output); +}); + +child.stdout.on('data', (data: Buffer) => { + writeLog(data.toString()); +}); + +child.on('close', (code) => { + cleanup(); + process.exit(code ?? 0); +}); + +process.on('SIGINT', () => { + child.kill('SIGINT'); +}); + +process.on('SIGTERM', () => { + child.kill('SIGTERM'); +}); diff --git a/examples/sveltekit-cloudflare-workers/src/lib/atproto/server/kv-store.ts b/examples/sveltekit-cloudflare-workers/src/lib/atproto/server/kv-store.ts new file mode 100644 index 0000000..35c3dcb --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/lib/atproto/server/kv-store.ts @@ -0,0 +1,38 @@ +import type { Store } from '@atcute/oauth-node-client'; + +export class KVStore implements Store { + private kv: KVNamespace; + private expirationTtl?: number; + + constructor(kv: KVNamespace, options?: { expirationTtl?: number }) { + this.kv = kv; + this.expirationTtl = options?.expirationTtl; + } + + async get(key: K): Promise { + const value = await this.kv.get(key, 'text'); + if (value === null) return undefined; + return JSON.parse(value) as V; + } + + async set(key: K, value: V): Promise { + await this.kv.put(key, JSON.stringify(value), { + expirationTtl: this.expirationTtl + }); + } + + async delete(key: K): Promise { + await this.kv.delete(key); + } + + async clear(): Promise { + let cursor: string | undefined; + do { + const result = await this.kv.list({ cursor }); + for (const key of result.keys) { + await this.kv.delete(key.name); + } + cursor = result.list_complete ? undefined : result.cursor; + } while (cursor); + } +} diff --git a/examples/sveltekit-cloudflare-workers/src/lib/atproto/server/oauth.remote.ts b/examples/sveltekit-cloudflare-workers/src/lib/atproto/server/oauth.remote.ts new file mode 100644 index 0000000..f087d53 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/lib/atproto/server/oauth.remote.ts @@ -0,0 +1,56 @@ +import * as v from 'valibot'; +import { error } from '@sveltejs/kit'; +import { command, getRequestEvent } from '$app/server'; +import { createOAuthClient } from './oauth'; +import { getSignedCookie } from './signed-cookie'; +import { scopes, signUpPDS } from '../settings'; +import type { ActorIdentifier, Did } from '@atcute/lexicons'; + +export const oauthLogin = command( + v.object({ + handle: v.optional(v.pipe(v.string(), v.minLength(3))), + signup: v.optional(v.boolean()) + }), + async (input) => { + const { platform } = getRequestEvent(); + + try { + const oauth = createOAuthClient(platform?.env); + + const target = input.signup + ? ({ type: 'pds', serviceUrl: signUpPDS } as const) + : ({ type: 'account', identifier: input.handle as ActorIdentifier } as const); + + const { url } = await oauth.authorize({ + target, + scope: scopes.join(' '), + prompt: input.signup ? 'create' : undefined + }); + + return { url: url.toString() }; + } catch (e) { + if (e && typeof e === 'object' && 'status' in e) throw e; // re-throw SvelteKit errors + const message = e instanceof Error ? e.message : 'Login failed'; + error(400, message); + } + } +); + +export const oauthLogout = command(async () => { + const { cookies, platform } = getRequestEvent(); + const did = getSignedCookie(cookies, 'did') as Did | null; + + if (did) { + try { + const oauth = createOAuthClient(platform?.env); + await oauth.revoke(did); + } catch (e) { + console.error('Error revoking session:', e); + } + } + + cookies.delete('did', { path: '/' }); + cookies.delete('scope', { path: '/' }); + + return { ok: true }; +}); diff --git a/examples/sveltekit-cloudflare-workers/src/lib/atproto/server/oauth.ts b/examples/sveltekit-cloudflare-workers/src/lib/atproto/server/oauth.ts new file mode 100644 index 0000000..e0d0f95 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/lib/atproto/server/oauth.ts @@ -0,0 +1,97 @@ +import { + OAuthClient, + MemoryStore, + type ClientAssertionPrivateJwk, + type OAuthClientStores, + type OAuthSession, + type StoredSession, + type StoredState +} from '@atcute/oauth-node-client'; +import type { Did } from '@atcute/lexicons'; +import { + CompositeDidDocumentResolver, + CompositeHandleResolver, + DohJsonHandleResolver, + LocalActorResolver, + PlcDidDocumentResolver, + WebDidDocumentResolver, + WellKnownHandleResolver +} from '@atcute/identity-resolver'; +import { KVStore } from './kv-store'; +import { DOH_RESOLVER, REDIRECT_PATH, scopes } from '../settings'; +import { DEV_PORT } from '../port'; +import { dev } from '$app/environment'; + +function createActorResolver() { + return new LocalActorResolver({ + handleResolver: new CompositeHandleResolver({ + methods: { + dns: new DohJsonHandleResolver({ dohUrl: DOH_RESOLVER }), + http: new WellKnownHandleResolver() + } + }), + didDocumentResolver: new CompositeDidDocumentResolver({ + methods: { + plc: new PlcDidDocumentResolver(), + web: new WebDidDocumentResolver() + } + }) + }); +} + +function createStores(env?: App.Platform['env']): OAuthClientStores { + if (env?.OAUTH_SESSIONS && env?.OAUTH_STATES) { + return { + sessions: new KVStore(env.OAUTH_SESSIONS), + states: new KVStore(env.OAUTH_STATES, { expirationTtl: 600 }) + }; + } + // Fallback to in-memory stores (dev without wrangler) + return { + sessions: new MemoryStore(), + states: new MemoryStore({ ttl: 600_000 }) + }; +} + +export function createOAuthClient(env?: App.Platform['env']): OAuthClient { + const actorResolver = createActorResolver(); + const stores = createStores(env); + + if (dev && !env?.OAUTH_PUBLIC_URL) { + // Dev without tunnel: loopback public client (no keyset). + // Omit client_id — the library builds it automatically from redirect_uris + scope. + // redirect_uris must use 127.0.0.1 (not localhost). + return new OAuthClient({ + metadata: { + redirect_uris: [`http://127.0.0.1:${DEV_PORT}${REDIRECT_PATH}`], + scope: scopes + }, + actorResolver, + stores + }); + } + + // Confidential client (production, or dev with tunnel via OAUTH_PUBLIC_URL) + if (!env?.OAUTH_PUBLIC_URL) { + throw new Error('OAUTH_PUBLIC_URL is not set'); + } + if (!env.CLIENT_ASSERTION_KEY) { + throw new Error('CLIENT_ASSERTION_KEY secret is not set. Run: pnpm env:generate-key'); + } + const site = env.OAUTH_PUBLIC_URL; + const key: ClientAssertionPrivateJwk = JSON.parse(env.CLIENT_ASSERTION_KEY); + + return new OAuthClient({ + metadata: { + client_id: site + '/oauth-client-metadata.json', + redirect_uris: [site + REDIRECT_PATH], + scope: scopes, + jwks_uri: site + '/oauth/jwks.json' + }, + keyset: [key], + actorResolver, + stores + }); +} + +export type { OAuthSession }; diff --git a/examples/sveltekit-cloudflare-workers/src/lib/atproto/server/profile.ts b/examples/sveltekit-cloudflare-workers/src/lib/atproto/server/profile.ts new file mode 100644 index 0000000..20521fc --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/lib/atproto/server/profile.ts @@ -0,0 +1,51 @@ +import type { Did } from '@atcute/lexicons'; +import { getDetailedProfile, describeRepo } from '../methods'; + +const PROFILE_CACHE_TTL = 60 * 60; // 1 hour + +/** + * Loads a user's profile, with optional KV caching. + * Falls back to a fresh fetch if the cache KV doesn't exist or on cache miss. + * Returns undefined if the profile can't be loaded. + */ +export async function loadProfile(did: Did, profileCache?: KVNamespace) { + // Try cache first + if (profileCache) { + try { + const cached = await profileCache.get(did, 'json'); + if (cached) return cached as Record; + } catch { + // Cache read failed, continue to fresh fetch + } + } + + const profile = await fetchProfile(did); + + // Write to cache (fire-and-forget) + if (profileCache && profile) { + profileCache + .put(did, JSON.stringify(profile), { expirationTtl: PROFILE_CACHE_TTL }) + .catch(() => {}); + } + + return profile; +} + +async function fetchProfile(did: Did) { + try { + let profile = await getDetailedProfile({ did }); + + if (!profile || profile.handle === 'handle.invalid') { + const repo = await describeRepo({ did }); + profile = { + did, + handle: repo?.handle || 'handle.invalid' + } as typeof profile; + } + + return profile; + } catch (e) { + console.error('Failed to load profile:', e); + return undefined; + } +} diff --git a/examples/sveltekit-cloudflare-workers/src/lib/atproto/server/repo.remote.ts b/examples/sveltekit-cloudflare-workers/src/lib/atproto/server/repo.remote.ts new file mode 100644 index 0000000..9f2df6b --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/lib/atproto/server/repo.remote.ts @@ -0,0 +1,85 @@ +import { error } from '@sveltejs/kit'; +import { command, getRequestEvent } from '$app/server'; +import * as v from 'valibot'; +import { collections } from '../settings'; + +// Validate collection format and check against allowed list from settings +const collectionSchema = v.pipe( + v.string(), + v.regex(/^[a-zA-Z][a-zA-Z0-9-]*(\.[a-zA-Z][a-zA-Z0-9-]*){2,}$/), + v.check((c) => collections.includes(c as (typeof collections)[number]), 'Collection not in allowed list') +); + +// AT Protocol rkey: TID, 'self', or other valid record keys (alphanumeric, dash, underscore, dot) +const rkeySchema = v.optional(v.pipe(v.string(), v.regex(/^[a-zA-Z0-9._:~-]{1,512}$/))); + +export const putRecord = command( + v.object({ + collection: collectionSchema, + rkey: rkeySchema, + record: v.record(v.string(), v.unknown()) + }), + async (input) => { + const { locals } = getRequestEvent(); + if (!locals.client || !locals.did) error(401, 'Not authenticated'); + + const response = await locals.client.post('com.atproto.repo.putRecord', { + input: { + collection: input.collection as `${string}.${string}.${string}`, + repo: locals.did, + rkey: input.rkey || 'self', + record: input.record + } + }); + + return response.data; + } +); + +export const deleteRecord = command( + v.object({ + collection: collectionSchema, + rkey: rkeySchema + }), + async (input) => { + const { locals } = getRequestEvent(); + if (!locals.client || !locals.did) error(401, 'Not authenticated'); + + const response = await locals.client.post('com.atproto.repo.deleteRecord', { + input: { + collection: input.collection as `${string}.${string}.${string}`, + repo: locals.did, + rkey: input.rkey || 'self' + } + }); + + return { ok: response.ok }; + } +); + +export const uploadBlob = command( + v.object({ + bytes: v.array(v.number()), + mimeType: v.string() + }), + async (input) => { + const { locals } = getRequestEvent(); + if (!locals.client || !locals.did) error(401, 'Not authenticated'); + + const blob = new Blob([new Uint8Array(input.bytes)], { type: input.mimeType }); + + const response = await locals.client.post('com.atproto.repo.uploadBlob', { + params: { repo: locals.did }, + input: blob + }); + + if (!response.ok) error(500, 'Upload failed'); + + return response.data.blob as { + $type: 'blob'; + ref: { $link: string }; + mimeType: string; + size: number; + }; + } +); diff --git a/examples/sveltekit-cloudflare-workers/src/lib/atproto/server/session.ts b/examples/sveltekit-cloudflare-workers/src/lib/atproto/server/session.ts new file mode 100644 index 0000000..2c1fe8f --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/lib/atproto/server/session.ts @@ -0,0 +1,73 @@ +import type { Cookies } from '@sveltejs/kit'; +import { Client } from '@atcute/client'; +import type { Did } from '@atcute/lexicons'; +import { + type OAuthSession, + TokenInvalidError, + TokenRefreshError, + TokenRevokedError, + AuthMethodUnsatisfiableError +} from '@atcute/oauth-node-client'; +import { createOAuthClient } from './oauth'; +import { getSignedCookie } from './signed-cookie'; +import { scopes } from '../settings'; + +export type SessionLocals = { + session: OAuthSession | null; + client: Client | null; + did: Did | null; +}; + +/** + * Restores an OAuth session from the signed `did` cookie. + * Returns session locals to be assigned to `event.locals`. + * Deletes the cookie only if the session is genuinely unrecoverable. + * Transient failures (network, KV) preserve the cookie for retry. + */ +export async function restoreSession( + cookies: Cookies, + env?: App.Platform['env'] +): Promise { + const did = getSignedCookie(cookies, 'did') as Did | null; + + if (!did) { + return { session: null, client: null, did: null }; + } + + // If permissions changed since login, invalidate the session + const savedScope = getSignedCookie(cookies, 'scope'); + if (savedScope !== null && savedScope !== scopes.join(' ')) { + cookies.delete('did', { path: '/' }); + cookies.delete('scope', { path: '/' }); + return { session: null, client: null, did: null }; + } + + try { + const oauth = createOAuthClient(env); + const session = await oauth.restore(did); + + return { + session, + client: new Client({ handler: session }), + did + }; + } catch (e) { + console.error('Failed to restore session:', e); + + // Only delete cookies when the session is genuinely unrecoverable. + // Transient errors (network issues, KV hiccups) should preserve the + // cookie so the next request can retry without forcing a full re-login. + const isSessionGone = + e instanceof TokenInvalidError || + e instanceof TokenRevokedError || + e instanceof TokenRefreshError || + e instanceof AuthMethodUnsatisfiableError; + + if (isSessionGone) { + cookies.delete('did', { path: '/' }); + cookies.delete('scope', { path: '/' }); + } + + return { session: null, client: null, did: null }; + } +} diff --git a/examples/sveltekit-cloudflare-workers/src/lib/atproto/server/signed-cookie.ts b/examples/sveltekit-cloudflare-workers/src/lib/atproto/server/signed-cookie.ts new file mode 100644 index 0000000..6cde19c --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/lib/atproto/server/signed-cookie.ts @@ -0,0 +1,69 @@ +import { createHmac, timingSafeEqual } from 'node:crypto'; + +import type { Cookies } from '@sveltejs/kit'; + +import { env } from '$env/dynamic/private'; +import { dev } from '$app/environment'; + +const SEPARATOR = '.'; + +function getSecret(): string { + const secret = env.COOKIE_SECRET; + if (secret) return secret; + if (dev) return 'dev-cookie-secret-not-for-production'; + throw new Error('COOKIE_SECRET is not set'); +} + +function toBase64Url(bytes: Uint8Array): string { + let binary = ''; + for (const byte of bytes) binary += String.fromCharCode(byte); + return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); +} + +function fromBase64Url(str: string): Uint8Array { + const padded = str + '='.repeat((4 - (str.length % 4)) % 4); + const base64 = padded.replace(/-/g, '+').replace(/_/g, '/'); + const binary = atob(base64); + const bytes = new Uint8Array(binary.length); + for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i); + return bytes; +} + +function hmacSha256(data: string): Uint8Array { + return createHmac('sha256', getSecret()).update(data).digest(); +} + +export function getSignedCookie(cookies: Cookies, name: string): string | null { + const signed = cookies.get(name); + if (!signed) return null; + + const idx = signed.lastIndexOf(SEPARATOR); + if (idx === -1) return null; + + const value = signed.slice(0, idx); + const sig = signed.slice(idx + 1); + + let expected: Uint8Array; + let got: Uint8Array; + try { + expected = hmacSha256(value); + got = fromBase64Url(sig); + } catch { + return null; + } + + if (got.length !== expected.length || !timingSafeEqual(got, expected)) return null; + + return value; +} + +export function setSignedCookie( + cookies: Cookies, + name: string, + value: string, + options: Parameters[2] +): void { + const sig = toBase64Url(hmacSha256(value)); + const signed = `${value}${SEPARATOR}${sig}`; + cookies.set(name, signed, options); +} diff --git a/examples/sveltekit-cloudflare-workers/src/lib/atproto/settings.ts b/examples/sveltekit-cloudflare-workers/src/lib/atproto/settings.ts new file mode 100644 index 0000000..b187107 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/lib/atproto/settings.ts @@ -0,0 +1,30 @@ +import { dev } from '$app/environment'; +import { scope } from '@atcute/oauth-node-client'; + +// writable collections +export const collections = ['xyz.statusphere.status', 'social.atmo.test.blob'] as const; + +export type AllowedCollection = (typeof collections)[number]; + +// OAuth scope — add scope.blob(), scope.rpc(), etc. as needed +export const scopes = [ + 'atproto', + scope.repo({ collection: [...collections] }), + scope.blob({ accept: ['image/*'] }) +]; + +// set to false to disable signup +export const ALLOW_SIGNUP = true; + +// which PDS to use for signup (change to your preferred PDS) +const devPDS = 'https://pds.rip/'; +const prodPDS = 'https://selfhosted.social/'; +export const signUpPDS = dev ? devPDS : prodPDS; + +// where to redirect after oauth login/signup +export const REDIRECT_PATH = '/oauth/callback'; + +// redirect the user back to the page they were on before login +export const REDIRECT_TO_LAST_PAGE_ON_LOGIN = true; + +export const DOH_RESOLVER = 'https://mozilla.cloudflare-dns.com/dns-query'; diff --git a/examples/sveltekit-cloudflare-workers/src/lib/atproto/ui/LoginModal.svelte b/examples/sveltekit-cloudflare-workers/src/lib/atproto/ui/LoginModal.svelte new file mode 100644 index 0000000..b3bad3a --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/lib/atproto/ui/LoginModal.svelte @@ -0,0 +1,22 @@ + + + + + { + await login(handle); + return true; + }} + signup={async () => { + signup(); + return true; + }} +/> diff --git a/examples/sveltekit-cloudflare-workers/src/lib/emojis/icons.json b/examples/sveltekit-cloudflare-workers/src/lib/emojis/icons.json new file mode 100644 index 0000000..6266e50 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/lib/emojis/icons.json @@ -0,0 +1,7255 @@ +{ + "host": "", + "asset_url_pattern": "", + "families": ["Animated Emoji"], + "icons": [ + { + "name": "emoji_u1f600", + "version": 1, + "popularity": 720, + "codepoint": "1f600", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":smile:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f603", + "version": 1, + "popularity": 719, + "codepoint": "1f603", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":smile-with-big-eyes:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f604", + "version": 1, + "popularity": 718, + "codepoint": "1f604", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":grin:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f601", + "version": 1, + "popularity": 717, + "codepoint": "1f601", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":grinning:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f606", + "version": 1, + "popularity": 716, + "codepoint": "1f606", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":laughing:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f605", + "version": 1, + "popularity": 715, + "codepoint": "1f605", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":grin-sweat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f602", + "version": 1, + "popularity": 714, + "codepoint": "1f602", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":joy:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f923", + "version": 1, + "popularity": 713, + "codepoint": "1f923", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":rofl:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f62d", + "version": 1, + "popularity": 712, + "codepoint": "1f62d", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":loudly-crying:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f609", + "version": 1, + "popularity": 711, + "codepoint": "1f609", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":wink:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f617", + "version": 1, + "popularity": 710, + "codepoint": "1f617", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":kissing:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f619", + "version": 1, + "popularity": 709, + "codepoint": "1f619", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":kissing-smiling-eyes:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f61a", + "version": 1, + "popularity": 708, + "codepoint": "1f61a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":kissing-closed-eyes:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f618", + "version": 1, + "popularity": 707, + "codepoint": "1f618", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":kissing-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f970", + "version": 1, + "popularity": 706, + "codepoint": "1f970", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-face:", ":3-hearts:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f60d", + "version": 1, + "popularity": 705, + "codepoint": "1f60d", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-eyes:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f929", + "version": 1, + "popularity": 704, + "codepoint": "1f929", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":star-struck:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f973", + "version": 1, + "popularity": 703, + "codepoint": "1f973", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":partying-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fae0", + "version": 1, + "popularity": 702, + "codepoint": "1fae0", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":melting:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f643", + "version": 1, + "popularity": 701, + "codepoint": "1f643", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":upside-down-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f642", + "version": 1, + "popularity": 700, + "codepoint": "1f642", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":slightly-happy:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f972", + "version": 1, + "popularity": 699, + "codepoint": "1f972", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":happy-cry:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f979", + "version": 1, + "popularity": 698, + "codepoint": "1f979", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":holding-back-tears:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f60a", + "version": 1, + "popularity": 697, + "codepoint": "1f60a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":blush:"], + "sizes_px": [] + }, + { + "name": "emoji_u263a_fe0f", + "version": 1, + "popularity": 696, + "codepoint": "263a_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":warm-smile:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f60c", + "version": 1, + "popularity": 695, + "codepoint": "1f60c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":relieved:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f642_200d_2195_fe0f", + "version": 1, + "popularity": 694, + "codepoint": "1f642_200d_2195_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":head-nod:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f642_200d_2194_fe0f", + "version": 1, + "popularity": 693, + "codepoint": "1f642_200d_2194_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":head-shake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f60f", + "version": 1, + "popularity": 692, + "codepoint": "1f60f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":smirk:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f924", + "version": 1, + "popularity": 691, + "codepoint": "1f924", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":drool:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f60b", + "version": 1, + "popularity": 690, + "codepoint": "1f60b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":yum:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f61b", + "version": 1, + "popularity": 689, + "codepoint": "1f61b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":stuck-out-tongue:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f61d", + "version": 1, + "popularity": 688, + "codepoint": "1f61d", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":squinting-tongue:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f61c", + "version": 1, + "popularity": 687, + "codepoint": "1f61c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":winky-tongue:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f92a", + "version": 1, + "popularity": 686, + "codepoint": "1f92a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":zany-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f974", + "version": 1, + "popularity": 685, + "codepoint": "1f974", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":woozy:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f614", + "version": 1, + "popularity": 684, + "codepoint": "1f614", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pensive:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f97a", + "version": 1, + "popularity": 683, + "codepoint": "1f97a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pleading:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f62c", + "version": 1, + "popularity": 682, + "codepoint": "1f62c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":grimacing:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f611", + "version": 1, + "popularity": 681, + "codepoint": "1f611", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":expressionless:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f610", + "version": 1, + "popularity": 680, + "codepoint": "1f610", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":neutral-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f636", + "version": 1, + "popularity": 679, + "codepoint": "1f636", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":mouth-none:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f636_200d_1f32b_fe0f", + "version": 1, + "popularity": 678, + "codepoint": "1f636_200d_1f32b_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":face-in-clouds:", ":lost:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fae5", + "version": 1, + "popularity": 677, + "codepoint": "1fae5", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":dotted-line-face:", ":invisible:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f910", + "version": 1, + "popularity": 676, + "codepoint": "1f910", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":zipper-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fae1", + "version": 1, + "popularity": 675, + "codepoint": "1fae1", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":salute:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f914", + "version": 1, + "popularity": 674, + "codepoint": "1f914", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thinking-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f92b", + "version": 1, + "popularity": 673, + "codepoint": "1f92b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":shushing-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fae2", + "version": 1, + "popularity": 672, + "codepoint": "1fae2", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hand-over-mouth:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f92d", + "version": 1, + "popularity": 671, + "codepoint": "1f92d", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":smiling-eyes-with-hand-over-mouth:", ":chuckling:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f971", + "version": 1, + "popularity": 670, + "codepoint": "1f971", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":yawn:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f917", + "version": 1, + "popularity": 669, + "codepoint": "1f917", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hug-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fae3", + "version": 1, + "popularity": 668, + "codepoint": "1fae3", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":peeking:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f631", + "version": 1, + "popularity": 667, + "codepoint": "1f631", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":screaming:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f928", + "version": 1, + "popularity": 666, + "codepoint": "1f928", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-eyebrow:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9d0", + "version": 1, + "popularity": 665, + "codepoint": "1f9d0", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":monocle:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f612", + "version": 1, + "popularity": 664, + "codepoint": "1f612", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":unamused:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f644", + "version": 1, + "popularity": 663, + "codepoint": "1f644", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":rolling-eyes:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f62e_200d_1f4a8", + "version": 1, + "popularity": 662, + "codepoint": "1f62e_200d_1f4a8", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":exhale:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f624", + "version": 1, + "popularity": 661, + "codepoint": "1f624", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":triumph:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f620", + "version": 1, + "popularity": 660, + "codepoint": "1f620", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":angry:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f621", + "version": 1, + "popularity": 659, + "codepoint": "1f621", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":rage:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f92c", + "version": 1, + "popularity": 658, + "codepoint": "1f92c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":cursing:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f61e", + "version": 1, + "popularity": 657, + "codepoint": "1f61e", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":sad:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f613", + "version": 1, + "popularity": 656, + "codepoint": "1f613", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":sweat:", ":downcast:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f61f", + "version": 1, + "popularity": 655, + "codepoint": "1f61f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":worried:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f625", + "version": 1, + "popularity": 654, + "codepoint": "1f625", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":concerned:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f622", + "version": 1, + "popularity": 653, + "codepoint": "1f622", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":cry:"], + "sizes_px": [] + }, + { + "name": "emoji_u2639_fe0f", + "version": 1, + "popularity": 652, + "codepoint": "2639_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":big-frown:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f641", + "version": 1, + "popularity": 651, + "codepoint": "1f641", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":frown:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fae4", + "version": 1, + "popularity": 650, + "codepoint": "1fae4", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":diagonal-mouth:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f615", + "version": 1, + "popularity": 649, + "codepoint": "1f615", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":slightly-frowning:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f630", + "version": 1, + "popularity": 648, + "codepoint": "1f630", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":anxious-with-sweat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f628", + "version": 1, + "popularity": 647, + "codepoint": "1f628", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":scared:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f627", + "version": 1, + "popularity": 646, + "codepoint": "1f627", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":anguished:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f626", + "version": 1, + "popularity": 645, + "codepoint": "1f626", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":gasp:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f62e", + "version": 1, + "popularity": 644, + "codepoint": "1f62e", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":mouth-open:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f62f", + "version": 1, + "popularity": 643, + "codepoint": "1f62f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":surprised:", ":hushed:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f632", + "version": 1, + "popularity": 642, + "codepoint": "1f632", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":astonished:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f633", + "version": 1, + "popularity": 641, + "codepoint": "1f633", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":flushed:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f92f", + "version": 1, + "popularity": 640, + "codepoint": "1f92f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":mind-blown:", ":exploding-head:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f616", + "version": 1, + "popularity": 639, + "codepoint": "1f616", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":scrunched-mouth:", ":confounded:", ":zigzag-mouth:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f623", + "version": 1, + "popularity": 638, + "codepoint": "1f623", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":scrunched-eyes:", ":persevering:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f629", + "version": 1, + "popularity": 637, + "codepoint": "1f629", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":weary:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f62b", + "version": 1, + "popularity": 636, + "codepoint": "1f62b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":distraught:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f635", + "version": 1, + "popularity": 635, + "codepoint": "1f635", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":x-eyes:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f635_200d_1f4ab", + "version": 1, + "popularity": 634, + "codepoint": "1f635_200d_1f4ab", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":dizzy-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fae8", + "version": 1, + "popularity": 633, + "codepoint": "1fae8", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":shaking-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f976", + "version": 1, + "popularity": 632, + "codepoint": "1f976", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":cold-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f975", + "version": 1, + "popularity": 631, + "codepoint": "1f975", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hot-face:", ":sweat-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f922", + "version": 1, + "popularity": 630, + "codepoint": "1f922", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":sick:", ":nauseated:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f92e", + "version": 1, + "popularity": 629, + "codepoint": "1f92e", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":vomit:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fae9", + "version": 1, + "popularity": 628, + "codepoint": "1fae9", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":tired:", ":bags-under-eyes:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f634", + "version": 1, + "popularity": 627, + "codepoint": "1f634", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":sleep:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f62a", + "version": 1, + "popularity": 626, + "codepoint": "1f62a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":sleepy:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f927", + "version": 1, + "popularity": 625, + "codepoint": "1f927", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":sneeze:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f912", + "version": 1, + "popularity": 624, + "codepoint": "1f912", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thermometer-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f915", + "version": 1, + "popularity": 623, + "codepoint": "1f915", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":bandage-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f637", + "version": 1, + "popularity": 622, + "codepoint": "1f637", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":mask:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f925", + "version": 1, + "popularity": 621, + "codepoint": "1f925", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":liar:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f607", + "version": 1, + "popularity": 620, + "codepoint": "1f607", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":halo:", ":innocent:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f920", + "version": 1, + "popularity": 619, + "codepoint": "1f920", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":cowboy:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f911", + "version": 1, + "popularity": 618, + "codepoint": "1f911", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":money-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f913", + "version": 1, + "popularity": 617, + "codepoint": "1f913", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nerd-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f60e", + "version": 1, + "popularity": 616, + "codepoint": "1f60e", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":sunglasses-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f978", + "version": 1, + "popularity": 615, + "codepoint": "1f978", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":disguise:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f921", + "version": 1, + "popularity": 614, + "codepoint": "1f921", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":clown:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4a9", + "version": 1, + "popularity": 613, + "codepoint": "1f4a9", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":poop:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f608", + "version": 1, + "popularity": 612, + "codepoint": "1f608", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":imp-smile:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f47f", + "version": 1, + "popularity": 611, + "codepoint": "1f47f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":imp-frown:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f47b", + "version": 1, + "popularity": 610, + "codepoint": "1f47b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ghost:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f480", + "version": 1, + "popularity": 609, + "codepoint": "1f480", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":skull:"], + "sizes_px": [] + }, + { + "name": "emoji_u2603_fe0f", + "version": 1, + "popularity": 608, + "codepoint": "2603_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":snowman-with-snow:"], + "sizes_px": [] + }, + { + "name": "emoji_u26c4", + "version": 1, + "popularity": 607, + "codepoint": "26c4", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":snowman:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f383", + "version": 1, + "popularity": 606, + "codepoint": "1f383", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":jack-o-lantern:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f916", + "version": 1, + "popularity": 605, + "codepoint": "1f916", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":robot:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f47d", + "version": 1, + "popularity": 604, + "codepoint": "1f47d", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":alien:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f47e", + "version": 1, + "popularity": 603, + "codepoint": "1f47e", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":alien-monster:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f31e", + "version": 1, + "popularity": 602, + "codepoint": "1f31e", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":sun-with-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f31b", + "version": 1, + "popularity": 601, + "codepoint": "1f31b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":moon-face-first-quarter:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f31c", + "version": 1, + "popularity": 600, + "codepoint": "1f31c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":moon-face-last-quarter:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f63a", + "version": 1, + "popularity": 599, + "codepoint": "1f63a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":smiley-cat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f638", + "version": 1, + "popularity": 598, + "codepoint": "1f638", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":smile-cat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f639", + "version": 1, + "popularity": 597, + "codepoint": "1f639", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":joy-cat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f63b", + "version": 1, + "popularity": 596, + "codepoint": "1f63b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-eyes-cat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f63c", + "version": 1, + "popularity": 595, + "codepoint": "1f63c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":smirk-cat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f63d", + "version": 1, + "popularity": 594, + "codepoint": "1f63d", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":kissing-cat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f640", + "version": 1, + "popularity": 593, + "codepoint": "1f640", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":scream-cat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f63f", + "version": 1, + "popularity": 592, + "codepoint": "1f63f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":crying-cat-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f63e", + "version": 1, + "popularity": 591, + "codepoint": "1f63e", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pouting-cat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f648", + "version": 1, + "popularity": 590, + "codepoint": "1f648", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":see-no-evil-monkey:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f649", + "version": 1, + "popularity": 589, + "codepoint": "1f649", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hear-no-evil-monkey:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f64a", + "version": 1, + "popularity": 588, + "codepoint": "1f64a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":speak-no-evil-monkey:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f31f", + "version": 1, + "popularity": 587, + "codepoint": "1f31f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":glowing-star:"], + "sizes_px": [] + }, + { + "name": "emoji_u2728", + "version": 1, + "popularity": 586, + "codepoint": "2728", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":sparkles:"], + "sizes_px": [] + }, + { + "name": "emoji_u26a1", + "version": 1, + "popularity": 585, + "codepoint": "26a1", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":electricity:", ":zap:", ":lightning:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4a5", + "version": 1, + "popularity": 584, + "codepoint": "1f4a5", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":collision:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f525", + "version": 1, + "popularity": 583, + "codepoint": "1f525", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fire:", ":burn:", ":lit:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4af", + "version": 1, + "popularity": 582, + "codepoint": "1f4af", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":100:", ":one-hundred:", ":hundred:", ":points:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f389", + "version": 1, + "popularity": 581, + "codepoint": "1f389", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":party-popper:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f38a", + "version": 1, + "popularity": 580, + "codepoint": "1f38a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":confetti-ball:"], + "sizes_px": [] + }, + { + "name": "emoji_u2764_fe0f", + "version": 1, + "popularity": 579, + "codepoint": "2764_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":red-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9e1", + "version": 1, + "popularity": 578, + "codepoint": "1f9e1", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":orange-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f49b", + "version": 1, + "popularity": 577, + "codepoint": "1f49b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":yellow-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f49a", + "version": 1, + "popularity": 576, + "codepoint": "1f49a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":green-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa75", + "version": 1, + "popularity": 575, + "codepoint": "1fa75", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":light-blue-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f499", + "version": 1, + "popularity": 574, + "codepoint": "1f499", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":blue-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f49c", + "version": 1, + "popularity": 573, + "codepoint": "1f49c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":purple-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90e", + "version": 1, + "popularity": 572, + "codepoint": "1f90e", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":brown-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f5a4", + "version": 1, + "popularity": 571, + "codepoint": "1f5a4", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":black-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa76", + "version": 1, + "popularity": 570, + "codepoint": "1fa76", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":grey-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90d", + "version": 1, + "popularity": 569, + "codepoint": "1f90d", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":white-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa77", + "version": 1, + "popularity": 568, + "codepoint": "1fa77", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pink-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f498", + "version": 1, + "popularity": 567, + "codepoint": "1f498", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":cupid:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f49d", + "version": 1, + "popularity": 566, + "codepoint": "1f49d", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":gift-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f496", + "version": 1, + "popularity": 565, + "codepoint": "1f496", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":sparkling-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f497", + "version": 1, + "popularity": 564, + "codepoint": "1f497", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-grow:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f493", + "version": 1, + "popularity": 563, + "codepoint": "1f493", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":beating-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f49e", + "version": 1, + "popularity": 562, + "codepoint": "1f49e", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":revolving-hearts:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f495", + "version": 1, + "popularity": 561, + "codepoint": "1f495", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":two-hearts:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f48c", + "version": 1, + "popularity": 560, + "codepoint": "1f48c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":love-letter:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f49f", + "version": 1, + "popularity": 559, + "codepoint": "1f49f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-box:"], + "sizes_px": [] + }, + { + "name": "emoji_u2763_fe0f", + "version": 1, + "popularity": 558, + "codepoint": "2763_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-exclamation-point:"], + "sizes_px": [] + }, + { + "name": "emoji_u2764_fe0f_200d_1fa79", + "version": 1, + "popularity": 557, + "codepoint": "2764_fe0f_200d_1fa79", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":bandaged-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f494", + "version": 1, + "popularity": 556, + "codepoint": "1f494", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":broken-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u2764_fe0f_200d_1f525", + "version": 1, + "popularity": 555, + "codepoint": "2764_fe0f_200d_1f525", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fire-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f48b", + "version": 1, + "popularity": 554, + "codepoint": "1f48b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":kiss:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f463", + "version": 1, + "popularity": 553, + "codepoint": "1f463", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":footprints:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fac6", + "version": 1, + "popularity": 552, + "codepoint": "1fac6", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fingerprint:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fac0", + "version": 1, + "popularity": 551, + "codepoint": "1fac0", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":anatomical-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa78", + "version": 1, + "popularity": 550, + "codepoint": "1fa78", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":blood:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9a0", + "version": 1, + "popularity": 549, + "codepoint": "1f9a0", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":microbe:", ":virus:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f440", + "version": 1, + "popularity": 548, + "codepoint": "1f440", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":eyes:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f441_fe0f", + "version": 1, + "popularity": 547, + "codepoint": "1f441_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":eye:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fae6", + "version": 1, + "popularity": 546, + "codepoint": "1fae6", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":biting-lip:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f443", + "version": 1, + "popularity": 545, + "codepoint": "1f443", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nose:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f443_1f3fb", + "version": 1, + "popularity": 544, + "codepoint": "1f443_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nose:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f443_1f3fc", + "version": 1, + "popularity": 543, + "codepoint": "1f443_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nose:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f443_1f3fd", + "version": 1, + "popularity": 542, + "codepoint": "1f443_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nose:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f443_1f3fe", + "version": 1, + "popularity": 541, + "codepoint": "1f443_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nose:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f443_1f3ff", + "version": 1, + "popularity": 540, + "codepoint": "1f443_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nose:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f442", + "version": 1, + "popularity": 539, + "codepoint": "1f442", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ear:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f442_1f3fb", + "version": 1, + "popularity": 538, + "codepoint": "1f442_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ear:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f442_1f3fc", + "version": 1, + "popularity": 537, + "codepoint": "1f442_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ear:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f442_1f3fd", + "version": 1, + "popularity": 536, + "codepoint": "1f442_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ear:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f442_1f3fe", + "version": 1, + "popularity": 535, + "codepoint": "1f442_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ear:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f442_1f3ff", + "version": 1, + "popularity": 534, + "codepoint": "1f442_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ear:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9bb", + "version": 1, + "popularity": 533, + "codepoint": "1f9bb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hearing-aid:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9bb_1f3fb", + "version": 1, + "popularity": 532, + "codepoint": "1f9bb_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hearing-aid:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9bb_1f3fc", + "version": 1, + "popularity": 531, + "codepoint": "1f9bb_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hearing-aid:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9bb_1f3fd", + "version": 1, + "popularity": 530, + "codepoint": "1f9bb_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hearing-aid:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9bb_1f3fe", + "version": 1, + "popularity": 529, + "codepoint": "1f9bb_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hearing-aid:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9bb_1f3ff", + "version": 1, + "popularity": 528, + "codepoint": "1f9bb_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hearing-aid:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b6", + "version": 1, + "popularity": 527, + "codepoint": "1f9b6", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":foot:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b6_1f3fb", + "version": 1, + "popularity": 526, + "codepoint": "1f9b6_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":foot:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b6_1f3fc", + "version": 1, + "popularity": 525, + "codepoint": "1f9b6_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":foot:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b6_1f3fd", + "version": 1, + "popularity": 524, + "codepoint": "1f9b6_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":foot:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b6_1f3fe", + "version": 1, + "popularity": 523, + "codepoint": "1f9b6_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":foot:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b6_1f3ff", + "version": 1, + "popularity": 522, + "codepoint": "1f9b6_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":foot:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b5", + "version": 1, + "popularity": 521, + "codepoint": "1f9b5", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leg:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b5_1f3fb", + "version": 1, + "popularity": 520, + "codepoint": "1f9b5_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leg:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b5_1f3fc", + "version": 1, + "popularity": 519, + "codepoint": "1f9b5_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leg:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b5_1f3fd", + "version": 1, + "popularity": 518, + "codepoint": "1f9b5_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leg:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b5_1f3fe", + "version": 1, + "popularity": 517, + "codepoint": "1f9b5_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leg:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9b5_1f3ff", + "version": 1, + "popularity": 516, + "codepoint": "1f9b5_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leg:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9bf", + "version": 1, + "popularity": 515, + "codepoint": "1f9bf", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leg-mechanical:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9be", + "version": 1, + "popularity": 514, + "codepoint": "1f9be", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":arm-mechanical:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4aa", + "version": 1, + "popularity": 513, + "codepoint": "1f4aa", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":muscle:", ":flex:", ":bicep:", ":strong:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4aa_1f3fb", + "version": 1, + "popularity": 512, + "codepoint": "1f4aa_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":muscle:", ":flex:", ":bicep:", ":strong:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4aa_1f3fc", + "version": 1, + "popularity": 511, + "codepoint": "1f4aa_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":muscle:", ":flex:", ":bicep:", ":strong:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4aa_1f3fd", + "version": 1, + "popularity": 510, + "codepoint": "1f4aa_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":muscle:", ":flex:", ":bicep:", ":strong:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4aa_1f3fe", + "version": 1, + "popularity": 509, + "codepoint": "1f4aa_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":muscle:", ":flex:", ":bicep:", ":strong:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4aa_1f3ff", + "version": 1, + "popularity": 508, + "codepoint": "1f4aa_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":muscle:", ":flex:", ":bicep:", ":strong:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44f", + "version": 1, + "popularity": 507, + "codepoint": "1f44f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":clap:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44f_1f3fb", + "version": 1, + "popularity": 506, + "codepoint": "1f44f_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":clap:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44f_1f3fc", + "version": 1, + "popularity": 505, + "codepoint": "1f44f_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":clap:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44f_1f3fd", + "version": 1, + "popularity": 504, + "codepoint": "1f44f_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":clap:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44f_1f3fe", + "version": 1, + "popularity": 503, + "codepoint": "1f44f_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":clap:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44f_1f3ff", + "version": 1, + "popularity": 502, + "codepoint": "1f44f_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":clap:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44d", + "version": 1, + "popularity": 501, + "codepoint": "1f44d", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-up:", ":+1:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44d_1f3fb", + "version": 1, + "popularity": 500, + "codepoint": "1f44d_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-up:", ":+1:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44d_1f3fc", + "version": 1, + "popularity": 499, + "codepoint": "1f44d_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-up:", ":+1:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44d_1f3fd", + "version": 1, + "popularity": 498, + "codepoint": "1f44d_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-up:", ":+1:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44d_1f3fe", + "version": 1, + "popularity": 497, + "codepoint": "1f44d_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-up:", ":+1:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44d_1f3ff", + "version": 1, + "popularity": 496, + "codepoint": "1f44d_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-up:", ":+1:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44e", + "version": 1, + "popularity": 495, + "codepoint": "1f44e", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44e_1f3fb", + "version": 1, + "popularity": 494, + "codepoint": "1f44e_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44e_1f3fc", + "version": 1, + "popularity": 493, + "codepoint": "1f44e_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44e_1f3fd", + "version": 1, + "popularity": 492, + "codepoint": "1f44e_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44e_1f3fe", + "version": 1, + "popularity": 491, + "codepoint": "1f44e_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44e_1f3ff", + "version": 1, + "popularity": 490, + "codepoint": "1f44e_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":thumbs-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf6", + "version": 1, + "popularity": 489, + "codepoint": "1faf6", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf6_1f3fb", + "version": 1, + "popularity": 488, + "codepoint": "1faf6_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf6_1f3fc", + "version": 1, + "popularity": 487, + "codepoint": "1faf6_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf6_1f3fd", + "version": 1, + "popularity": 486, + "codepoint": "1faf6_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf6_1f3fe", + "version": 1, + "popularity": 485, + "codepoint": "1faf6_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf6_1f3ff", + "version": 1, + "popularity": 484, + "codepoint": "1faf6_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":heart-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f64c", + "version": 1, + "popularity": 483, + "codepoint": "1f64c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raising-hands:", ":hooray:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f64c_1f3fb", + "version": 1, + "popularity": 482, + "codepoint": "1f64c_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raising-hands:", ":hooray:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f64c_1f3fc", + "version": 1, + "popularity": 481, + "codepoint": "1f64c_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raising-hands:", ":hooray:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f64c_1f3fd", + "version": 1, + "popularity": 480, + "codepoint": "1f64c_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raising-hands:", ":hooray:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f64c_1f3fe", + "version": 1, + "popularity": 479, + "codepoint": "1f64c_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raising-hands:", ":hooray:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f64c_1f3ff", + "version": 1, + "popularity": 478, + "codepoint": "1f64c_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raising-hands:", ":hooray:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f450", + "version": 1, + "popularity": 477, + "codepoint": "1f450", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":open-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f450_1f3fb", + "version": 1, + "popularity": 476, + "codepoint": "1f450_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":open-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f450_1f3fc", + "version": 1, + "popularity": 475, + "codepoint": "1f450_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":open-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f450_1f3fd", + "version": 1, + "popularity": 474, + "codepoint": "1f450_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":open-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f450_1f3fe", + "version": 1, + "popularity": 473, + "codepoint": "1f450_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":open-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f450_1f3ff", + "version": 1, + "popularity": 472, + "codepoint": "1f450_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":open-hands:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f932", + "version": 1, + "popularity": 471, + "codepoint": "1f932", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palms-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f932_1f3fb", + "version": 1, + "popularity": 470, + "codepoint": "1f932_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palms-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f932_1f3fc", + "version": 1, + "popularity": 469, + "codepoint": "1f932_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palms-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f932_1f3fd", + "version": 1, + "popularity": 468, + "codepoint": "1f932_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palms-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f932_1f3fe", + "version": 1, + "popularity": 467, + "codepoint": "1f932_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palms-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f932_1f3ff", + "version": 1, + "popularity": 466, + "codepoint": "1f932_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palms-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91c", + "version": 1, + "popularity": 465, + "codepoint": "1f91c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91c_1f3fb", + "version": 1, + "popularity": 464, + "codepoint": "1f91c_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91c_1f3fc", + "version": 1, + "popularity": 463, + "codepoint": "1f91c_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91c_1f3fd", + "version": 1, + "popularity": 462, + "codepoint": "1f91c_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91c_1f3fe", + "version": 1, + "popularity": 461, + "codepoint": "1f91c_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91c_1f3ff", + "version": 1, + "popularity": 460, + "codepoint": "1f91c_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91b", + "version": 1, + "popularity": 459, + "codepoint": "1f91b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91b_1f3fb", + "version": 1, + "popularity": 458, + "codepoint": "1f91b_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91b_1f3fc", + "version": 1, + "popularity": 457, + "codepoint": "1f91b_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91b_1f3fd", + "version": 1, + "popularity": 456, + "codepoint": "1f91b_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91b_1f3fe", + "version": 1, + "popularity": 455, + "codepoint": "1f91b_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91b_1f3ff", + "version": 1, + "popularity": 454, + "codepoint": "1f91b_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u270a", + "version": 1, + "popularity": 453, + "codepoint": "270a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-fist:"], + "sizes_px": [] + }, + { + "name": "emoji_u270a_1f3fb", + "version": 1, + "popularity": 452, + "codepoint": "270a_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-fist:"], + "sizes_px": [] + }, + { + "name": "emoji_u270a_1f3fc", + "version": 1, + "popularity": 451, + "codepoint": "270a_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-fist:"], + "sizes_px": [] + }, + { + "name": "emoji_u270a_1f3fd", + "version": 1, + "popularity": 450, + "codepoint": "270a_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-fist:"], + "sizes_px": [] + }, + { + "name": "emoji_u270a_1f3fe", + "version": 1, + "popularity": 449, + "codepoint": "270a_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-fist:"], + "sizes_px": [] + }, + { + "name": "emoji_u270a_1f3ff", + "version": 1, + "popularity": 448, + "codepoint": "270a_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-fist:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44a", + "version": 1, + "popularity": 447, + "codepoint": "1f44a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist:", ":bump:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44a_1f3fb", + "version": 1, + "popularity": 446, + "codepoint": "1f44a_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist:", ":bump:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44a_1f3fc", + "version": 1, + "popularity": 445, + "codepoint": "1f44a_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist:", ":bump:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44a_1f3fd", + "version": 1, + "popularity": 444, + "codepoint": "1f44a_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist:", ":bump:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44a_1f3fe", + "version": 1, + "popularity": 443, + "codepoint": "1f44a_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist:", ":bump:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44a_1f3ff", + "version": 1, + "popularity": 442, + "codepoint": "1f44a_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":fist:", ":bump:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf3", + "version": 1, + "popularity": 441, + "codepoint": "1faf3", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-down:", ":drop:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf3_1f3fb", + "version": 1, + "popularity": 440, + "codepoint": "1faf3_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-down:", ":drop:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf3_1f3fc", + "version": 1, + "popularity": 439, + "codepoint": "1faf3_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-down:", ":drop:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf3_1f3fd", + "version": 1, + "popularity": 438, + "codepoint": "1faf3_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-down:", ":drop:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf3_1f3fe", + "version": 1, + "popularity": 437, + "codepoint": "1faf3_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-down:", ":drop:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf3_1f3ff", + "version": 1, + "popularity": 436, + "codepoint": "1faf3_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-down:", ":drop:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf4", + "version": 1, + "popularity": 435, + "codepoint": "1faf4", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-up:", ":throw:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf4_1f3fb", + "version": 1, + "popularity": 434, + "codepoint": "1faf4_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-up:", ":throw:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf4_1f3fc", + "version": 1, + "popularity": 433, + "codepoint": "1faf4_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-up:", ":throw:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf4_1f3fd", + "version": 1, + "popularity": 432, + "codepoint": "1faf4_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-up:", ":throw:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf4_1f3fe", + "version": 1, + "popularity": 431, + "codepoint": "1faf4_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-up:", ":throw:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf4_1f3ff", + "version": 1, + "popularity": 430, + "codepoint": "1faf4_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm-up:", ":throw:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1", + "version": 1, + "popularity": 429, + "codepoint": "1faf1", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":rightwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fb", + "version": 1, + "popularity": 428, + "codepoint": "1faf1_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":rightwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fc", + "version": 1, + "popularity": 427, + "codepoint": "1faf1_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":rightwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fd", + "version": 1, + "popularity": 426, + "codepoint": "1faf1_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":rightwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fe", + "version": 1, + "popularity": 425, + "codepoint": "1faf1_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":rightwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3ff", + "version": 1, + "popularity": 424, + "codepoint": "1faf1_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":rightwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf2", + "version": 1, + "popularity": 423, + "codepoint": "1faf2", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leftwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf2_1f3fb", + "version": 1, + "popularity": 422, + "codepoint": "1faf2_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leftwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf2_1f3fc", + "version": 1, + "popularity": 421, + "codepoint": "1faf2_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leftwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf2_1f3fd", + "version": 1, + "popularity": 420, + "codepoint": "1faf2_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leftwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf2_1f3fe", + "version": 1, + "popularity": 419, + "codepoint": "1faf2_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leftwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf2_1f3ff", + "version": 1, + "popularity": 418, + "codepoint": "1faf2_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":leftwards-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf8", + "version": 1, + "popularity": 417, + "codepoint": "1faf8", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf8_1f3fb", + "version": 1, + "popularity": 416, + "codepoint": "1faf8_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf8_1f3fc", + "version": 1, + "popularity": 415, + "codepoint": "1faf8_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf8_1f3fd", + "version": 1, + "popularity": 414, + "codepoint": "1faf8_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf8_1f3fe", + "version": 1, + "popularity": 413, + "codepoint": "1faf8_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf8_1f3ff", + "version": 1, + "popularity": 412, + "codepoint": "1faf8_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-rightwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf7", + "version": 1, + "popularity": 411, + "codepoint": "1faf7", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf7_1f3fb", + "version": 1, + "popularity": 410, + "codepoint": "1faf7_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf7_1f3fc", + "version": 1, + "popularity": 409, + "codepoint": "1faf7_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf7_1f3fd", + "version": 1, + "popularity": 408, + "codepoint": "1faf7_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf7_1f3fe", + "version": 1, + "popularity": 407, + "codepoint": "1faf7_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf7_1f3ff", + "version": 1, + "popularity": 406, + "codepoint": "1faf7_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":push-leftwards:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44b", + "version": 1, + "popularity": 405, + "codepoint": "1f44b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":wave:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44b_1f3fb", + "version": 1, + "popularity": 404, + "codepoint": "1f44b_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":wave:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44b_1f3fc", + "version": 1, + "popularity": 403, + "codepoint": "1f44b_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":wave:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44b_1f3fd", + "version": 1, + "popularity": 402, + "codepoint": "1f44b_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":wave:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44b_1f3fe", + "version": 1, + "popularity": 401, + "codepoint": "1f44b_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":wave:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44b_1f3ff", + "version": 1, + "popularity": 400, + "codepoint": "1f44b_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":wave:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91a", + "version": 1, + "popularity": 399, + "codepoint": "1f91a", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":back-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91a_1f3fb", + "version": 1, + "popularity": 398, + "codepoint": "1f91a_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":back-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91a_1f3fc", + "version": 1, + "popularity": 397, + "codepoint": "1f91a_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":back-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91a_1f3fd", + "version": 1, + "popularity": 396, + "codepoint": "1f91a_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":back-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91a_1f3fe", + "version": 1, + "popularity": 395, + "codepoint": "1f91a_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":back-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91a_1f3ff", + "version": 1, + "popularity": 394, + "codepoint": "1f91a_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":back-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f590_fe0f", + "version": 1, + "popularity": 393, + "codepoint": "1f590_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f590_1f3fb", + "version": 1, + "popularity": 392, + "codepoint": "1f590_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f590_1f3fc", + "version": 1, + "popularity": 391, + "codepoint": "1f590_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f590_1f3fd", + "version": 1, + "popularity": 390, + "codepoint": "1f590_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f590_1f3fe", + "version": 1, + "popularity": 389, + "codepoint": "1f590_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f590_1f3ff", + "version": 1, + "popularity": 388, + "codepoint": "1f590_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":palm:"], + "sizes_px": [] + }, + { + "name": "emoji_u270b", + "version": 1, + "popularity": 387, + "codepoint": "270b", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270b_1f3fb", + "version": 1, + "popularity": 386, + "codepoint": "270b_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270b_1f3fc", + "version": 1, + "popularity": 385, + "codepoint": "270b_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270b_1f3fd", + "version": 1, + "popularity": 384, + "codepoint": "270b_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270b_1f3fe", + "version": 1, + "popularity": 383, + "codepoint": "270b_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270b_1f3ff", + "version": 1, + "popularity": 382, + "codepoint": "270b_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":raised-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f596", + "version": 1, + "popularity": 381, + "codepoint": "1f596", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":vulcan:", ":prosper:", ":spock:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f596_1f3fb", + "version": 1, + "popularity": 380, + "codepoint": "1f596_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":vulcan:", ":prosper:", ":spock:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f596_1f3fc", + "version": 1, + "popularity": 379, + "codepoint": "1f596_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":vulcan:", ":prosper:", ":spock:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f596_1f3fd", + "version": 1, + "popularity": 378, + "codepoint": "1f596_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":vulcan:", ":prosper:", ":spock:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f596_1f3fe", + "version": 1, + "popularity": 377, + "codepoint": "1f596_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":vulcan:", ":prosper:", ":spock:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f596_1f3ff", + "version": 1, + "popularity": 376, + "codepoint": "1f596_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":vulcan:", ":prosper:", ":spock:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91f", + "version": 1, + "popularity": 375, + "codepoint": "1f91f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":love-you-gesture:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91f_1f3fb", + "version": 1, + "popularity": 374, + "codepoint": "1f91f_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":love-you-gesture:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91f_1f3fc", + "version": 1, + "popularity": 373, + "codepoint": "1f91f_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":love-you-gesture:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91f_1f3fd", + "version": 1, + "popularity": 372, + "codepoint": "1f91f_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":love-you-gesture:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91f_1f3fe", + "version": 1, + "popularity": 371, + "codepoint": "1f91f_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":love-you-gesture:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91f_1f3ff", + "version": 1, + "popularity": 370, + "codepoint": "1f91f_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":love-you-gesture:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f918", + "version": 1, + "popularity": 369, + "codepoint": "1f918", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":metal:", ":horns:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f918_1f3fb", + "version": 1, + "popularity": 368, + "codepoint": "1f918_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":metal:", ":horns:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f918_1f3fc", + "version": 1, + "popularity": 367, + "codepoint": "1f918_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":metal:", ":horns:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f918_1f3fd", + "version": 1, + "popularity": 366, + "codepoint": "1f918_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":metal:", ":horns:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f918_1f3fe", + "version": 1, + "popularity": 365, + "codepoint": "1f918_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":metal:", ":horns:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f918_1f3ff", + "version": 1, + "popularity": 364, + "codepoint": "1f918_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":metal:", ":horns:"], + "sizes_px": [] + }, + { + "name": "emoji_u270c_fe0f", + "version": 1, + "popularity": 363, + "codepoint": "270c_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":victory:", ":v:", ":peace-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270c_1f3fb", + "version": 1, + "popularity": 362, + "codepoint": "270c_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":victory:", ":v:", ":peace-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270c_1f3fc", + "version": 1, + "popularity": 361, + "codepoint": "270c_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":victory:", ":v:", ":peace-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270c_1f3fd", + "version": 1, + "popularity": 360, + "codepoint": "270c_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":victory:", ":v:", ":peace-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270c_1f3fe", + "version": 1, + "popularity": 359, + "codepoint": "270c_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":victory:", ":v:", ":peace-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270c_1f3ff", + "version": 1, + "popularity": 358, + "codepoint": "270c_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":victory:", ":v:", ":peace-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91e", + "version": 1, + "popularity": 357, + "codepoint": "1f91e", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":crossed-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91e_1f3fb", + "version": 1, + "popularity": 356, + "codepoint": "1f91e_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":crossed-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91e_1f3fc", + "version": 1, + "popularity": 355, + "codepoint": "1f91e_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":crossed-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91e_1f3fd", + "version": 1, + "popularity": 354, + "codepoint": "1f91e_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":crossed-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91e_1f3fe", + "version": 1, + "popularity": 353, + "codepoint": "1f91e_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":crossed-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91e_1f3ff", + "version": 1, + "popularity": 352, + "codepoint": "1f91e_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":crossed-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf0", + "version": 1, + "popularity": 351, + "codepoint": "1faf0", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hand-with-index-finger-and-thumb-crossed:", ":snap:", ":finger-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf0_1f3fb", + "version": 1, + "popularity": 350, + "codepoint": "1faf0_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hand-with-index-finger-and-thumb-crossed:", ":snap:", ":finger-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf0_1f3fc", + "version": 1, + "popularity": 349, + "codepoint": "1faf0_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hand-with-index-finger-and-thumb-crossed:", ":snap:", ":finger-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf0_1f3fd", + "version": 1, + "popularity": 348, + "codepoint": "1faf0_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hand-with-index-finger-and-thumb-crossed:", ":snap:", ":finger-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf0_1f3fe", + "version": 1, + "popularity": 347, + "codepoint": "1faf0_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hand-with-index-finger-and-thumb-crossed:", ":snap:", ":finger-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf0_1f3ff", + "version": 1, + "popularity": 346, + "codepoint": "1faf0_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":hand-with-index-finger-and-thumb-crossed:", ":snap:", ":finger-heart:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f919", + "version": 1, + "popularity": 345, + "codepoint": "1f919", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":call-me-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f919_1f3fb", + "version": 1, + "popularity": 344, + "codepoint": "1f919_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":call-me-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f919_1f3fc", + "version": 1, + "popularity": 343, + "codepoint": "1f919_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":call-me-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f919_1f3fd", + "version": 1, + "popularity": 342, + "codepoint": "1f919_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":call-me-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f919_1f3fe", + "version": 1, + "popularity": 341, + "codepoint": "1f919_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":call-me-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f919_1f3ff", + "version": 1, + "popularity": 340, + "codepoint": "1f919_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":call-me-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90c", + "version": 1, + "popularity": 339, + "codepoint": "1f90c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinched-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90c_1f3fb", + "version": 1, + "popularity": 338, + "codepoint": "1f90c_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinched-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90c_1f3fc", + "version": 1, + "popularity": 337, + "codepoint": "1f90c_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinched-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90c_1f3fd", + "version": 1, + "popularity": 336, + "codepoint": "1f90c_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinched-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90c_1f3fe", + "version": 1, + "popularity": 335, + "codepoint": "1f90c_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinched-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90c_1f3ff", + "version": 1, + "popularity": 334, + "codepoint": "1f90c_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinched-fingers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90f", + "version": 1, + "popularity": 333, + "codepoint": "1f90f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinch:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90f_1f3fb", + "version": 1, + "popularity": 332, + "codepoint": "1f90f_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinch:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90f_1f3fc", + "version": 1, + "popularity": 331, + "codepoint": "1f90f_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinch:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90f_1f3fd", + "version": 1, + "popularity": 330, + "codepoint": "1f90f_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinch:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90f_1f3fe", + "version": 1, + "popularity": 329, + "codepoint": "1f90f_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinch:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f90f_1f3ff", + "version": 1, + "popularity": 328, + "codepoint": "1f90f_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pinch:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44c", + "version": 1, + "popularity": 327, + "codepoint": "1f44c", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ok:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44c_1f3fb", + "version": 1, + "popularity": 326, + "codepoint": "1f44c_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ok:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44c_1f3fc", + "version": 1, + "popularity": 325, + "codepoint": "1f44c_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ok:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44c_1f3fd", + "version": 1, + "popularity": 324, + "codepoint": "1f44c_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ok:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44c_1f3fe", + "version": 1, + "popularity": 323, + "codepoint": "1f44c_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ok:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f44c_1f3ff", + "version": 1, + "popularity": 322, + "codepoint": "1f44c_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":ok:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf5", + "version": 1, + "popularity": 321, + "codepoint": "1faf5", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pointing:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf5_1f3fb", + "version": 1, + "popularity": 320, + "codepoint": "1faf5_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pointing:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf5_1f3fc", + "version": 1, + "popularity": 319, + "codepoint": "1faf5_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pointing:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf5_1f3fd", + "version": 1, + "popularity": 318, + "codepoint": "1faf5_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pointing:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf5_1f3fe", + "version": 1, + "popularity": 317, + "codepoint": "1faf5_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pointing:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf5_1f3ff", + "version": 1, + "popularity": 316, + "codepoint": "1faf5_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":pointing:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f449", + "version": 1, + "popularity": 315, + "codepoint": "1f449", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-right:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f449_1f3fb", + "version": 1, + "popularity": 314, + "codepoint": "1f449_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-right:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f449_1f3fc", + "version": 1, + "popularity": 313, + "codepoint": "1f449_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-right:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f449_1f3fd", + "version": 1, + "popularity": 312, + "codepoint": "1f449_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-right:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f449_1f3fe", + "version": 1, + "popularity": 311, + "codepoint": "1f449_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-right:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f449_1f3ff", + "version": 1, + "popularity": 310, + "codepoint": "1f449_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-right:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f448", + "version": 1, + "popularity": 309, + "codepoint": "1f448", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-left:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f448_1f3fb", + "version": 1, + "popularity": 308, + "codepoint": "1f448_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-left:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f448_1f3fc", + "version": 1, + "popularity": 307, + "codepoint": "1f448_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-left:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f448_1f3fd", + "version": 1, + "popularity": 306, + "codepoint": "1f448_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-left:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f448_1f3fe", + "version": 1, + "popularity": 305, + "codepoint": "1f448_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-left:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f448_1f3ff", + "version": 1, + "popularity": 304, + "codepoint": "1f448_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-left:"], + "sizes_px": [] + }, + { + "name": "emoji_u261d_fe0f", + "version": 1, + "popularity": 303, + "codepoint": "261d_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":index-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u261d_1f3fb", + "version": 1, + "popularity": 302, + "codepoint": "261d_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":index-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u261d_1f3fc", + "version": 1, + "popularity": 301, + "codepoint": "261d_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":index-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u261d_1f3fd", + "version": 1, + "popularity": 300, + "codepoint": "261d_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":index-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u261d_1f3fe", + "version": 1, + "popularity": 299, + "codepoint": "261d_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":index-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u261d_1f3ff", + "version": 1, + "popularity": 298, + "codepoint": "261d_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":index-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f446", + "version": 1, + "popularity": 297, + "codepoint": "1f446", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f446_1f3fb", + "version": 1, + "popularity": 296, + "codepoint": "1f446_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f446_1f3fc", + "version": 1, + "popularity": 295, + "codepoint": "1f446_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f446_1f3fd", + "version": 1, + "popularity": 294, + "codepoint": "1f446_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f446_1f3fe", + "version": 1, + "popularity": 293, + "codepoint": "1f446_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f446_1f3ff", + "version": 1, + "popularity": 292, + "codepoint": "1f446_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-up:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f447", + "version": 1, + "popularity": 291, + "codepoint": "1f447", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f447_1f3fb", + "version": 1, + "popularity": 290, + "codepoint": "1f447_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f447_1f3fc", + "version": 1, + "popularity": 289, + "codepoint": "1f447_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f447_1f3fd", + "version": 1, + "popularity": 288, + "codepoint": "1f447_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f447_1f3fe", + "version": 1, + "popularity": 287, + "codepoint": "1f447_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f447_1f3ff", + "version": 1, + "popularity": 286, + "codepoint": "1f447_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":point-down:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f595", + "version": 1, + "popularity": 285, + "codepoint": "1f595", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":middle-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f595_1f3fb", + "version": 1, + "popularity": 284, + "codepoint": "1f595_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":middle-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f595_1f3fc", + "version": 1, + "popularity": 283, + "codepoint": "1f595_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":middle-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f595_1f3fd", + "version": 1, + "popularity": 282, + "codepoint": "1f595_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":middle-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f595_1f3fe", + "version": 1, + "popularity": 281, + "codepoint": "1f595_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":middle-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f595_1f3ff", + "version": 1, + "popularity": 280, + "codepoint": "1f595_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":middle-finger:"], + "sizes_px": [] + }, + { + "name": "emoji_u270d_fe0f", + "version": 1, + "popularity": 279, + "codepoint": "270d_fe0f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":writing-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270d_1f3fb", + "version": 1, + "popularity": 278, + "codepoint": "270d_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":writing-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270d_1f3fc", + "version": 1, + "popularity": 277, + "codepoint": "270d_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":writing-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270d_1f3fd", + "version": 1, + "popularity": 276, + "codepoint": "270d_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":writing-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270d_1f3fe", + "version": 1, + "popularity": 275, + "codepoint": "270d_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":writing-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u270d_1f3ff", + "version": 1, + "popularity": 274, + "codepoint": "270d_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":writing-hand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f933", + "version": 1, + "popularity": 273, + "codepoint": "1f933", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":selfie:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f933_1f3fb", + "version": 1, + "popularity": 272, + "codepoint": "1f933_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":selfie:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f933_1f3fc", + "version": 1, + "popularity": 271, + "codepoint": "1f933_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":selfie:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f933_1f3fd", + "version": 1, + "popularity": 270, + "codepoint": "1f933_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":selfie:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f933_1f3fe", + "version": 1, + "popularity": 269, + "codepoint": "1f933_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":selfie:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f933_1f3ff", + "version": 1, + "popularity": 268, + "codepoint": "1f933_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":selfie:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f64f", + "version": 1, + "popularity": 267, + "codepoint": "1f64f", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [ + ":folded-hands:", + ":please:", + ":pray:", + ":hope:", + ":wish:", + ":thank-you:", + ":high-five:" + ], + "sizes_px": [] + }, + { + "name": "emoji_u1f64f_1f3fb", + "version": 1, + "popularity": 266, + "codepoint": "1f64f_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [ + ":folded-hands:", + ":please:", + ":pray:", + ":hope:", + ":wish:", + ":thank-you:", + ":high-five:" + ], + "sizes_px": [] + }, + { + "name": "emoji_u1f64f_1f3fc", + "version": 1, + "popularity": 265, + "codepoint": "1f64f_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [ + ":folded-hands:", + ":please:", + ":pray:", + ":hope:", + ":wish:", + ":thank-you:", + ":high-five:" + ], + "sizes_px": [] + }, + { + "name": "emoji_u1f64f_1f3fd", + "version": 1, + "popularity": 264, + "codepoint": "1f64f_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [ + ":folded-hands:", + ":please:", + ":pray:", + ":hope:", + ":wish:", + ":thank-you:", + ":high-five:" + ], + "sizes_px": [] + }, + { + "name": "emoji_u1f64f_1f3fe", + "version": 1, + "popularity": 263, + "codepoint": "1f64f_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [ + ":folded-hands:", + ":please:", + ":pray:", + ":hope:", + ":wish:", + ":thank-you:", + ":high-five:" + ], + "sizes_px": [] + }, + { + "name": "emoji_u1f64f_1f3ff", + "version": 1, + "popularity": 262, + "codepoint": "1f64f_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [ + ":folded-hands:", + ":please:", + ":pray:", + ":hope:", + ":wish:", + ":thank-you:", + ":high-five:" + ], + "sizes_px": [] + }, + { + "name": "emoji_u1f485", + "version": 1, + "popularity": 261, + "codepoint": "1f485", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nail-care:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f485_1f3fb", + "version": 1, + "popularity": 260, + "codepoint": "1f485_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nail-care:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f485_1f3fc", + "version": 1, + "popularity": 259, + "codepoint": "1f485_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nail-care:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f485_1f3fd", + "version": 1, + "popularity": 258, + "codepoint": "1f485_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nail-care:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f485_1f3fe", + "version": 1, + "popularity": 257, + "codepoint": "1f485_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nail-care:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f485_1f3ff", + "version": 1, + "popularity": 256, + "codepoint": "1f485_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":nail-care:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91d", + "version": 1, + "popularity": 255, + "codepoint": "1f91d", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91d_1f3fb", + "version": 1, + "popularity": 254, + "codepoint": "1f91d_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fb_200d_1faf2_1f3fc", + "version": 1, + "popularity": 253, + "codepoint": "1faf1_1f3fb_200d_1faf2_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fb_200d_1faf2_1f3fd", + "version": 1, + "popularity": 252, + "codepoint": "1faf1_1f3fb_200d_1faf2_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fb_200d_1faf2_1f3fe", + "version": 1, + "popularity": 251, + "codepoint": "1faf1_1f3fb_200d_1faf2_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fb_200d_1faf2_1f3ff", + "version": 1, + "popularity": 250, + "codepoint": "1faf1_1f3fb_200d_1faf2_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fc_200d_1faf2_1f3fb", + "version": 1, + "popularity": 249, + "codepoint": "1faf1_1f3fc_200d_1faf2_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91d_1f3fc", + "version": 1, + "popularity": 248, + "codepoint": "1f91d_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fc_200d_1faf2_1f3fd", + "version": 1, + "popularity": 247, + "codepoint": "1faf1_1f3fc_200d_1faf2_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fc_200d_1faf2_1f3fe", + "version": 1, + "popularity": 246, + "codepoint": "1faf1_1f3fc_200d_1faf2_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fc_200d_1faf2_1f3ff", + "version": 1, + "popularity": 245, + "codepoint": "1faf1_1f3fc_200d_1faf2_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fd_200d_1faf2_1f3fb", + "version": 1, + "popularity": 244, + "codepoint": "1faf1_1f3fd_200d_1faf2_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fd_200d_1faf2_1f3fc", + "version": 1, + "popularity": 243, + "codepoint": "1faf1_1f3fd_200d_1faf2_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91d_1f3fd", + "version": 1, + "popularity": 242, + "codepoint": "1f91d_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fd_200d_1faf2_1f3fe", + "version": 1, + "popularity": 241, + "codepoint": "1faf1_1f3fd_200d_1faf2_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fd_200d_1faf2_1f3ff", + "version": 1, + "popularity": 240, + "codepoint": "1faf1_1f3fd_200d_1faf2_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fe_200d_1faf2_1f3fb", + "version": 1, + "popularity": 239, + "codepoint": "1faf1_1f3fe_200d_1faf2_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fe_200d_1faf2_1f3fc", + "version": 1, + "popularity": 238, + "codepoint": "1faf1_1f3fe_200d_1faf2_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fe_200d_1faf2_1f3fd", + "version": 1, + "popularity": 237, + "codepoint": "1faf1_1f3fe_200d_1faf2_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91d_1f3fe", + "version": 1, + "popularity": 236, + "codepoint": "1f91d_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3fe_200d_1faf2_1f3ff", + "version": 1, + "popularity": 235, + "codepoint": "1faf1_1f3fe_200d_1faf2_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3ff_200d_1faf2_1f3fb", + "version": 1, + "popularity": 234, + "codepoint": "1faf1_1f3ff_200d_1faf2_1f3fb", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3ff_200d_1faf2_1f3fc", + "version": 1, + "popularity": 233, + "codepoint": "1faf1_1f3ff_200d_1faf2_1f3fc", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3ff_200d_1faf2_1f3fd", + "version": 1, + "popularity": 232, + "codepoint": "1faf1_1f3ff_200d_1faf2_1f3fd", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faf1_1f3ff_200d_1faf2_1f3fe", + "version": 1, + "popularity": 231, + "codepoint": "1faf1_1f3ff_200d_1faf2_1f3fe", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f91d_1f3ff", + "version": 1, + "popularity": 230, + "codepoint": "1f91d_1f3ff", + "unsupported_families": [], + "categories": ["Smileys and emotions"], + "tags": [":handshake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f483", + "version": 1, + "popularity": 229, + "codepoint": "1f483", + "unsupported_families": [], + "categories": ["People"], + "tags": [":dancer-woman:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f483_1f3fb", + "version": 1, + "popularity": 228, + "codepoint": "1f483_1f3fb", + "unsupported_families": [], + "categories": ["People"], + "tags": [":dancer-woman:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f483_1f3fc", + "version": 1, + "popularity": 227, + "codepoint": "1f483_1f3fc", + "unsupported_families": [], + "categories": ["People"], + "tags": [":dancer-woman:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f483_1f3fd", + "version": 1, + "popularity": 226, + "codepoint": "1f483_1f3fd", + "unsupported_families": [], + "categories": ["People"], + "tags": [":dancer-woman:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f483_1f3fe", + "version": 1, + "popularity": 225, + "codepoint": "1f483_1f3fe", + "unsupported_families": [], + "categories": ["People"], + "tags": [":dancer-woman:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f483_1f3ff", + "version": 1, + "popularity": 224, + "codepoint": "1f483_1f3ff", + "unsupported_families": [], + "categories": ["People"], + "tags": [":dancer-woman:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f490", + "version": 1, + "popularity": 223, + "codepoint": "1f490", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":bouquet:", ":flowers:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f339", + "version": 1, + "popularity": 222, + "codepoint": "1f339", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":rose:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f940", + "version": 1, + "popularity": 221, + "codepoint": "1f940", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":wilted-flower:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f342", + "version": 1, + "popularity": 220, + "codepoint": "1f342", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":fallen-leaf:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f331", + "version": 1, + "popularity": 219, + "codepoint": "1f331", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":plant:", ":seed:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f343", + "version": 1, + "popularity": 218, + "codepoint": "1f343", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":leaves:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f340", + "version": 1, + "popularity": 217, + "codepoint": "1f340", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":luck:", ":four-leaf-clover:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fabe", + "version": 1, + "popularity": 216, + "codepoint": "1fabe", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":leafless-tree:"], + "sizes_px": [] + }, + { + "name": "emoji_u2744_fe0f", + "version": 1, + "popularity": 215, + "codepoint": "2744_fe0f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":snowflake:", ":winter:", ":cold:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f30b", + "version": 1, + "popularity": 214, + "codepoint": "1f30b", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":volcano:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f305", + "version": 1, + "popularity": 213, + "codepoint": "1f305", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":sunrise:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f304", + "version": 1, + "popularity": 212, + "codepoint": "1f304", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":sunrise-over-mountains:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f308", + "version": 1, + "popularity": 211, + "codepoint": "1f308", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":rainbow:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fae7", + "version": 1, + "popularity": 210, + "codepoint": "1fae7", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":bubbles:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f30a", + "version": 1, + "popularity": 209, + "codepoint": "1f30a", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":ocean:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f32c_fe0f", + "version": 1, + "popularity": 208, + "codepoint": "1f32c_fe0f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":wind-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f32a_fe0f", + "version": 1, + "popularity": 207, + "codepoint": "1f32a_fe0f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":tornado:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4a7", + "version": 1, + "popularity": 206, + "codepoint": "1f4a7", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":droplet:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f327_fe0f", + "version": 1, + "popularity": 205, + "codepoint": "1f327_fe0f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":rain-cloud:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f329_fe0f", + "version": 1, + "popularity": 204, + "codepoint": "1f329_fe0f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":cloud-with-lightning:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f30d", + "version": 1, + "popularity": 203, + "codepoint": "1f30d", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":globe-showing-Europe-Africa:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f30e", + "version": 1, + "popularity": 202, + "codepoint": "1f30e", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":globe-showing-Americas:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f30f", + "version": 1, + "popularity": 201, + "codepoint": "1f30f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":globe-showing-Asia-Australia:"], + "sizes_px": [] + }, + { + "name": "emoji_u2604_fe0f", + "version": 1, + "popularity": 200, + "codepoint": "2604_fe0f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":comet:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f42e", + "version": 1, + "popularity": 199, + "codepoint": "1f42e", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":cow-face:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f984", + "version": 1, + "popularity": 198, + "codepoint": "1f984", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":unicorn:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f98e", + "version": 1, + "popularity": 197, + "codepoint": "1f98e", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":lizard:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f409", + "version": 1, + "popularity": 196, + "codepoint": "1f409", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":dragon:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f996", + "version": 1, + "popularity": 195, + "codepoint": "1f996", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":t-rex:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f995", + "version": 1, + "popularity": 194, + "codepoint": "1f995", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":dinosaur:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f422", + "version": 1, + "popularity": 193, + "codepoint": "1f422", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":turtle:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f40a", + "version": 1, + "popularity": 192, + "codepoint": "1f40a", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":crocodile:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f40d", + "version": 1, + "popularity": 191, + "codepoint": "1f40d", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":snake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f438", + "version": 1, + "popularity": 190, + "codepoint": "1f438", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":frog:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f407", + "version": 1, + "popularity": 189, + "codepoint": "1f407", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":rabbit:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f400", + "version": 1, + "popularity": 188, + "codepoint": "1f400", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":rat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f429", + "version": 1, + "popularity": 187, + "codepoint": "1f429", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":poodle:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f415", + "version": 1, + "popularity": 186, + "codepoint": "1f415", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":dog:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9ae", + "version": 1, + "popularity": 185, + "codepoint": "1f9ae", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":guide-dog:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f415_200d_1f9ba", + "version": 1, + "popularity": 184, + "codepoint": "1f415_200d_1f9ba", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":service-dog:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f416", + "version": 1, + "popularity": 183, + "codepoint": "1f416", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":pig:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f40e", + "version": 1, + "popularity": 182, + "codepoint": "1f40e", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":racehorse:"], + "sizes_px": [] + }, + { + "name": "emoji_u1facf", + "version": 1, + "popularity": 181, + "codepoint": "1facf", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":donkey:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f402", + "version": 1, + "popularity": 180, + "codepoint": "1f402", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":ox:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f410", + "version": 1, + "popularity": 179, + "codepoint": "1f410", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":goat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f998", + "version": 1, + "popularity": 178, + "codepoint": "1f998", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":kangaroo:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f405", + "version": 1, + "popularity": 177, + "codepoint": "1f405", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":tiger:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f412", + "version": 1, + "popularity": 176, + "codepoint": "1f412", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":monkey:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f98d", + "version": 1, + "popularity": 175, + "codepoint": "1f98d", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":gorilla:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9a7", + "version": 1, + "popularity": 174, + "codepoint": "1f9a7", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":orangutan:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f43f_fe0f", + "version": 1, + "popularity": 173, + "codepoint": "1f43f_fe0f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":chipmunk:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9a6", + "version": 1, + "popularity": 172, + "codepoint": "1f9a6", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":otter:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f987", + "version": 1, + "popularity": 171, + "codepoint": "1f987", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":bat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f426", + "version": 1, + "popularity": 170, + "codepoint": "1f426", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":bird:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f426_200d_2b1b", + "version": 1, + "popularity": 169, + "codepoint": "1f426_200d_2b1b", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":black-bird:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f413", + "version": 1, + "popularity": 168, + "codepoint": "1f413", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":rooster:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f423", + "version": 1, + "popularity": 167, + "codepoint": "1f423", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":hatching-chick:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f424", + "version": 1, + "popularity": 166, + "codepoint": "1f424", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":baby-chick:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f425", + "version": 1, + "popularity": 165, + "codepoint": "1f425", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":hatched-chick:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f985", + "version": 1, + "popularity": 164, + "codepoint": "1f985", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":eagle:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f989", + "version": 1, + "popularity": 163, + "codepoint": "1f989", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":owl:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f54a_fe0f", + "version": 1, + "popularity": 162, + "codepoint": "1f54a_fe0f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":peace:", ":dove:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fabf", + "version": 1, + "popularity": 161, + "codepoint": "1fabf", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":goose:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f99a", + "version": 1, + "popularity": 160, + "codepoint": "1f99a", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":peacock:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f426_200d_1f525", + "version": 1, + "popularity": 159, + "codepoint": "1f426_200d_1f525", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":phoenix:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f9ad", + "version": 1, + "popularity": 158, + "codepoint": "1f9ad", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":seal:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f988", + "version": 1, + "popularity": 157, + "codepoint": "1f988", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":shark:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f42c", + "version": 1, + "popularity": 156, + "codepoint": "1f42c", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":dolphin:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f433", + "version": 1, + "popularity": 155, + "codepoint": "1f433", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":whale:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f41f", + "version": 1, + "popularity": 154, + "codepoint": "1f41f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":fish:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f421", + "version": 1, + "popularity": 153, + "codepoint": "1f421", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":blowfish:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f99e", + "version": 1, + "popularity": 152, + "codepoint": "1f99e", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":lobster:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f980", + "version": 1, + "popularity": 151, + "codepoint": "1f980", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":crab:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f419", + "version": 1, + "popularity": 150, + "codepoint": "1f419", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":octopus:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fabc", + "version": 1, + "popularity": 149, + "codepoint": "1fabc", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":jellyfish:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f982", + "version": 1, + "popularity": 148, + "codepoint": "1f982", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":scorpion:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f577_fe0f", + "version": 1, + "popularity": 147, + "codepoint": "1f577_fe0f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":spider:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f40c", + "version": 1, + "popularity": 146, + "codepoint": "1f40c", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":snail:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f41c", + "version": 1, + "popularity": 145, + "codepoint": "1f41c", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":ant:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f99f", + "version": 1, + "popularity": 144, + "codepoint": "1f99f", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":mosquito:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fab3", + "version": 1, + "popularity": 143, + "codepoint": "1fab3", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":cockroach:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fab0", + "version": 1, + "popularity": 142, + "codepoint": "1fab0", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":fly:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f41d", + "version": 1, + "popularity": 141, + "codepoint": "1f41d", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":bee:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f41e", + "version": 1, + "popularity": 140, + "codepoint": "1f41e", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":lady-bug:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f98b", + "version": 1, + "popularity": 139, + "codepoint": "1f98b", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":butterfly:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f41b", + "version": 1, + "popularity": 138, + "codepoint": "1f41b", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":bug:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fab1", + "version": 1, + "popularity": 137, + "codepoint": "1fab1", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":worm:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f43e", + "version": 1, + "popularity": 136, + "codepoint": "1f43e", + "unsupported_families": [], + "categories": ["Animals and nature"], + "tags": [":paw prints:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f345", + "version": 1, + "popularity": 135, + "codepoint": "1f345", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":tomato:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fadc", + "version": 1, + "popularity": 134, + "codepoint": "1fadc", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":root-vegetable:", ":beet:", ":turnip:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f373", + "version": 1, + "popularity": 133, + "codepoint": "1f373", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":cooking:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f32f", + "version": 1, + "popularity": 132, + "codepoint": "1f32f", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":burrito:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f35d", + "version": 1, + "popularity": 131, + "codepoint": "1f35d", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":spaghetti:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f35c", + "version": 1, + "popularity": 130, + "codepoint": "1f35c", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":steaming-bowl:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f37f", + "version": 1, + "popularity": 129, + "codepoint": "1f37f", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":popcorn:"], + "sizes_px": [] + }, + { + "name": "emoji_u2615", + "version": 1, + "popularity": 128, + "codepoint": "2615", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":hot-beverage:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f37b", + "version": 1, + "popularity": 127, + "codepoint": "1f37b", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":clinking-beer-mugs:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f942", + "version": 1, + "popularity": 126, + "codepoint": "1f942", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":clinking-glasses:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f37e", + "version": 1, + "popularity": 125, + "codepoint": "1f37e", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":bottle-with-popping-cork:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f377", + "version": 1, + "popularity": 124, + "codepoint": "1f377", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":wine-glass:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fad7", + "version": 1, + "popularity": 123, + "codepoint": "1fad7", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":pour:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f379", + "version": 1, + "popularity": 122, + "codepoint": "1f379", + "unsupported_families": [], + "categories": ["Food and drink"], + "tags": [":tropical-drink:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6a7", + "version": 1, + "popularity": 121, + "codepoint": "1f6a7", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":construction:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6a8", + "version": 1, + "popularity": 120, + "codepoint": "1f6a8", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":police-car-light:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6b2", + "version": 1, + "popularity": 119, + "codepoint": "1f6b2", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":bicycle:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f697", + "version": 1, + "popularity": 118, + "codepoint": "1f697", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":automobile:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3ce_fe0f", + "version": 1, + "popularity": 117, + "codepoint": "1f3ce_fe0f", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":racing-car:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f695", + "version": 1, + "popularity": 116, + "codepoint": "1f695", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":taxi:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f68c", + "version": 1, + "popularity": 115, + "codepoint": "1f68c", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":bus:"], + "sizes_px": [] + }, + { + "name": "emoji_u26f5", + "version": 1, + "popularity": 114, + "codepoint": "26f5", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":sailboat:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6f6", + "version": 1, + "popularity": 113, + "codepoint": "1f6f6", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":canoe:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6f8", + "version": 1, + "popularity": 112, + "codepoint": "1f6f8", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":flying-saucer:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f680", + "version": 1, + "popularity": 111, + "codepoint": "1f680", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":rocket:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6eb", + "version": 1, + "popularity": 110, + "codepoint": "1f6eb", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":airplane-departure:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6ec", + "version": 1, + "popularity": 109, + "codepoint": "1f6ec", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":airplane-arrival:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3a2", + "version": 1, + "popularity": 108, + "codepoint": "1f3a2", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":roller-coaster:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3a1", + "version": 1, + "popularity": 107, + "codepoint": "1f3a1", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":ferris-wheel:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3d5_fe0f", + "version": 1, + "popularity": 106, + "codepoint": "1f3d5_fe0f", + "unsupported_families": [], + "categories": ["Travel and places"], + "tags": [":camping:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f388", + "version": 1, + "popularity": 105, + "codepoint": "1f388", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":balloon:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f382", + "version": 1, + "popularity": 104, + "codepoint": "1f382", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":birthday-cake:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f381", + "version": 1, + "popularity": 103, + "codepoint": "1f381", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":wrapped-gift:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f386", + "version": 1, + "popularity": 102, + "codepoint": "1f386", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":fireworks:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa85", + "version": 1, + "popularity": 101, + "codepoint": "1fa85", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":piñata:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faa9", + "version": 1, + "popularity": 100, + "codepoint": "1faa9", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":mirror-ball:", ":disco-ball:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f947", + "version": 1, + "popularity": 99, + "codepoint": "1f947", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":gold-medal:", ":1st-place-medal:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f948", + "version": 1, + "popularity": 98, + "codepoint": "1f948", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":silver-medal:", ":2nd-place-medal:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f949", + "version": 1, + "popularity": 97, + "codepoint": "1f949", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":bronze-medal:", ":3rd-place-medal:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3c6", + "version": 1, + "popularity": 96, + "codepoint": "1f3c6", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":trophy:"], + "sizes_px": [] + }, + { + "name": "emoji_u26bd", + "version": 1, + "popularity": 95, + "codepoint": "26bd", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":soccer-ball:"], + "sizes_px": [] + }, + { + "name": "emoji_u26be", + "version": 1, + "popularity": 94, + "codepoint": "26be", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":baseball:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f94e", + "version": 1, + "popularity": 93, + "codepoint": "1f94e", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":softball:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3be", + "version": 1, + "popularity": 92, + "codepoint": "1f3be", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":tennis:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3f8", + "version": 1, + "popularity": 91, + "codepoint": "1f3f8", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":badminton:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f94d", + "version": 1, + "popularity": 90, + "codepoint": "1f94d", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":lacrosse:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3cf", + "version": 1, + "popularity": 89, + "codepoint": "1f3cf", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":cricket-game:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3d1", + "version": 1, + "popularity": 88, + "codepoint": "1f3d1", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":field-hockey:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3d2", + "version": 1, + "popularity": 87, + "codepoint": "1f3d2", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":ice-hockey:"], + "sizes_px": [] + }, + { + "name": "emoji_u26f8_fe0f", + "version": 1, + "popularity": 86, + "codepoint": "26f8_fe0f", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":ice-skate:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6fc", + "version": 1, + "popularity": 85, + "codepoint": "1f6fc", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":roller-skates:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa70", + "version": 1, + "popularity": 84, + "codepoint": "1fa70", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":ballet-shoes:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6f9", + "version": 1, + "popularity": 83, + "codepoint": "1f6f9", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":skateboard:"], + "sizes_px": [] + }, + { + "name": "emoji_u26f3", + "version": 1, + "popularity": 82, + "codepoint": "26f3", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":flag-in-hole:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3af", + "version": 1, + "popularity": 81, + "codepoint": "1f3af", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":direct-hit:", ":target:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f94f", + "version": 1, + "popularity": 80, + "codepoint": "1f94f", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":flying-disc:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa83", + "version": 1, + "popularity": 79, + "codepoint": "1fa83", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":boomerang:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa81", + "version": 1, + "popularity": 78, + "codepoint": "1fa81", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":kite:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3a3", + "version": 1, + "popularity": 77, + "codepoint": "1f3a3", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":fishing-pole:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f94b", + "version": 1, + "popularity": 76, + "codepoint": "1f94b", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":martial-arts-uniform:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3b1", + "version": 1, + "popularity": 75, + "codepoint": "1f3b1", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":8-ball:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3d3", + "version": 1, + "popularity": 74, + "codepoint": "1f3d3", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":ping-pong:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3b3", + "version": 1, + "popularity": 73, + "codepoint": "1f3b3", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":bowling:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3b2", + "version": 1, + "popularity": 72, + "codepoint": "1f3b2", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":die:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3b0", + "version": 1, + "popularity": 71, + "codepoint": "1f3b0", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":slot-machine:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa84", + "version": 1, + "popularity": 70, + "codepoint": "1fa84", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":wand:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4f8", + "version": 1, + "popularity": 69, + "codepoint": "1f4f8", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":camera-flash:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fadf", + "version": 1, + "popularity": 68, + "codepoint": "1fadf", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":splatter:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3b7", + "version": 1, + "popularity": 67, + "codepoint": "1f3b7", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":saxophone:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3ba", + "version": 1, + "popularity": 66, + "codepoint": "1f3ba", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":trumpet:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3bb", + "version": 1, + "popularity": 65, + "codepoint": "1f3bb", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":violin:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa89", + "version": 1, + "popularity": 64, + "codepoint": "1fa89", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":harp:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f941", + "version": 1, + "popularity": 63, + "codepoint": "1f941", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":drum:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa87", + "version": 1, + "popularity": 62, + "codepoint": "1fa87", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":maracas:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3ac", + "version": 1, + "popularity": 61, + "codepoint": "1f3ac", + "unsupported_families": [], + "categories": ["Activities and events"], + "tags": [":clapper:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f50b", + "version": 1, + "popularity": 60, + "codepoint": "1f50b", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":battery-full:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faab", + "version": 1, + "popularity": 59, + "codepoint": "1faab", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":battery-low:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa99", + "version": 1, + "popularity": 58, + "codepoint": "1fa99", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":coin:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4b8", + "version": 1, + "popularity": 57, + "codepoint": "1f4b8", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":money-with-wings:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f48e", + "version": 1, + "popularity": 56, + "codepoint": "1f48e", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":gem-stone:"], + "sizes_px": [] + }, + { + "name": "emoji_u2696_fe0f", + "version": 1, + "popularity": 55, + "codepoint": "2696_fe0f", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":balance-scale:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4a1", + "version": 1, + "popularity": 54, + "codepoint": "1f4a1", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":light-bulb:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f393", + "version": 1, + "popularity": 53, + "codepoint": "1f393", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":graduation-cap:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f48d", + "version": 1, + "popularity": 52, + "codepoint": "1f48d", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":ring:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faad", + "version": 1, + "popularity": 51, + "codepoint": "1faad", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":fan:"], + "sizes_px": [] + }, + { + "name": "emoji_u2602_fe0f", + "version": 1, + "popularity": 50, + "codepoint": "2602_fe0f", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":umbrella:"], + "sizes_px": [] + }, + { + "name": "emoji_u1fa8f", + "version": 1, + "popularity": 49, + "codepoint": "1fa8f", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":shovel:", ":dig:"], + "sizes_px": [] + }, + { + "name": "emoji_u2699_fe0f", + "version": 1, + "popularity": 48, + "codepoint": "2699_fe0f", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":gear:"], + "sizes_px": [] + }, + { + "name": "emoji_u26d3_fe0f_200d_1f4a5", + "version": 1, + "popularity": 47, + "codepoint": "26d3_fe0f_200d_1f4a5", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":broken-chain:"], + "sizes_px": [] + }, + { + "name": "emoji_u270f_fe0f", + "version": 1, + "popularity": 46, + "codepoint": "270f_fe0f", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":pencil:"], + "sizes_px": [] + }, + { + "name": "emoji_u23f0", + "version": 1, + "popularity": 45, + "codepoint": "23f0", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":alarm-clock:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6ce_fe0f", + "version": 1, + "popularity": 44, + "codepoint": "1f6ce_fe0f", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":bellhop-bell:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f514", + "version": 1, + "popularity": 43, + "codepoint": "1f514", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":bell:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f52e", + "version": 1, + "popularity": 42, + "codepoint": "1f52e", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":crystal-ball:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4a3", + "version": 1, + "popularity": 41, + "codepoint": "1f4a3", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":bomb:"], + "sizes_px": [] + }, + { + "name": "emoji_u1faa4", + "version": 1, + "popularity": 40, + "codepoint": "1faa4", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":mouse-trap:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f512", + "version": 1, + "popularity": 39, + "codepoint": "1f512", + "unsupported_families": [], + "categories": ["Objects"], + "tags": [":locked:"], + "sizes_px": [] + }, + { + "name": "emoji_u2648", + "version": 1, + "popularity": 38, + "codepoint": "2648", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Aries:"], + "sizes_px": [] + }, + { + "name": "emoji_u2649", + "version": 1, + "popularity": 37, + "codepoint": "2649", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Taurus:"], + "sizes_px": [] + }, + { + "name": "emoji_u264a", + "version": 1, + "popularity": 36, + "codepoint": "264a", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Gemini:"], + "sizes_px": [] + }, + { + "name": "emoji_u264b", + "version": 1, + "popularity": 35, + "codepoint": "264b", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Cancer:"], + "sizes_px": [] + }, + { + "name": "emoji_u264c", + "version": 1, + "popularity": 34, + "codepoint": "264c", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Leo:"], + "sizes_px": [] + }, + { + "name": "emoji_u264d", + "version": 1, + "popularity": 33, + "codepoint": "264d", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Virgo:"], + "sizes_px": [] + }, + { + "name": "emoji_u264e", + "version": 1, + "popularity": 32, + "codepoint": "264e", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Libra:"], + "sizes_px": [] + }, + { + "name": "emoji_u264f", + "version": 1, + "popularity": 31, + "codepoint": "264f", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Scorpio:"], + "sizes_px": [] + }, + { + "name": "emoji_u2650", + "version": 1, + "popularity": 30, + "codepoint": "2650", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Sagittarius:"], + "sizes_px": [] + }, + { + "name": "emoji_u2651", + "version": 1, + "popularity": 29, + "codepoint": "2651", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Capricorn:"], + "sizes_px": [] + }, + { + "name": "emoji_u2652", + "version": 1, + "popularity": 28, + "codepoint": "2652", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Aquarius:"], + "sizes_px": [] + }, + { + "name": "emoji_u2653", + "version": 1, + "popularity": 27, + "codepoint": "2653", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Pisces:"], + "sizes_px": [] + }, + { + "name": "emoji_u26ce", + "version": 1, + "popularity": 26, + "codepoint": "26ce", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":Ophiuchus:"], + "sizes_px": [] + }, + { + "name": "emoji_u2757", + "version": 1, + "popularity": 25, + "codepoint": "2757", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":exclamation:", ":exclamation-mark:"], + "sizes_px": [] + }, + { + "name": "emoji_u2753", + "version": 1, + "popularity": 24, + "codepoint": "2753", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":question:", ":question-mark:", ":?:"], + "sizes_px": [] + }, + { + "name": "emoji_u2049_fe0f", + "version": 1, + "popularity": 23, + "codepoint": "2049_fe0f", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":exclamation-question-mark:", ":!?:"], + "sizes_px": [] + }, + { + "name": "emoji_u203c_fe0f", + "version": 1, + "popularity": 22, + "codepoint": "203c_fe0f", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":exclamation-double:", ":!!:"], + "sizes_px": [] + }, + { + "name": "emoji_u274c", + "version": 1, + "popularity": 21, + "codepoint": "274c", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":cross-mark:", ":x:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f198", + "version": 1, + "popularity": 20, + "codepoint": "1f198", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":sos:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f4f4", + "version": 1, + "popularity": 19, + "codepoint": "1f4f4", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":phone-off:"], + "sizes_px": [] + }, + { + "name": "emoji_u2622_fe0f", + "version": 1, + "popularity": 18, + "codepoint": "2622_fe0f", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":radioactive:"], + "sizes_px": [] + }, + { + "name": "emoji_u2623_fe0f", + "version": 1, + "popularity": 17, + "codepoint": "2623_fe0f", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":biohazard:"], + "sizes_px": [] + }, + { + "name": "emoji_u26a0_fe0f", + "version": 1, + "popularity": 16, + "codepoint": "26a0_fe0f", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":warning:"], + "sizes_px": [] + }, + { + "name": "emoji_u2705", + "version": 1, + "popularity": 15, + "codepoint": "2705", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":check-mark:", ":check-mark-green:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f195", + "version": 1, + "popularity": 14, + "codepoint": "1f195", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":new:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f193", + "version": 1, + "popularity": 13, + "codepoint": "1f193", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":free:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f199", + "version": 1, + "popularity": 12, + "codepoint": "1f199", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":up!:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f192", + "version": 1, + "popularity": 11, + "codepoint": "1f192", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":cool:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6ae", + "version": 1, + "popularity": 10, + "codepoint": "1f6ae", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":litter:"], + "sizes_px": [] + }, + { + "name": "emoji_u262e_fe0f", + "version": 1, + "popularity": 9, + "codepoint": "262e_fe0f", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":peace-symbol:"], + "sizes_px": [] + }, + { + "name": "emoji_u262f_fe0f", + "version": 1, + "popularity": 8, + "codepoint": "262f_fe0f", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":yin-yang:"], + "sizes_px": [] + }, + { + "name": "emoji_u267e_fe0f", + "version": 1, + "popularity": 7, + "codepoint": "267e_fe0f", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":infinity:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3b6", + "version": 1, + "popularity": 6, + "codepoint": "1f3b6", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":musical-notes:"], + "sizes_px": [] + }, + { + "name": "emoji_u2795", + "version": 1, + "popularity": 5, + "codepoint": "2795", + "unsupported_families": [], + "categories": ["Symbols"], + "tags": [":plus-sign:", ":+:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3c1", + "version": 1, + "popularity": 4, + "codepoint": "1f3c1", + "unsupported_families": [], + "categories": ["Flags"], + "tags": [":chequered-flag:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f6a9", + "version": 1, + "popularity": 3, + "codepoint": "1f6a9", + "unsupported_families": [], + "categories": ["Flags"], + "tags": [":triangular-flag:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3f4", + "version": 1, + "popularity": 2, + "codepoint": "1f3f4", + "unsupported_families": [], + "categories": ["Flags"], + "tags": [":black-flag:"], + "sizes_px": [] + }, + { + "name": "emoji_u1f3f3_fe0f", + "version": 1, + "popularity": 1, + "codepoint": "1f3f3_fe0f", + "unsupported_families": [], + "categories": ["Flags"], + "tags": [":white-flag:"], + "sizes_px": [] + } + ] +} diff --git a/examples/sveltekit-cloudflare-workers/src/lib/emojis/index.ts b/examples/sveltekit-cloudflare-workers/src/lib/emojis/index.ts new file mode 100644 index 0000000..c9c843f --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/lib/emojis/index.ts @@ -0,0 +1,23 @@ +// animated emojis from +// https://googlefonts.github.io/noto-emoji-animation/ + +import icons from './icons.json'; + +export function emojiToNotoAnimatedWebp(emoji: string | undefined): string | undefined { + if (!emoji) return; + // Convert emoji to lowercase hex codepoints joined by "_" + const codepoints: string[] = []; + for (const char of emoji) { + codepoints.push(char.codePointAt(0)!.toString(16).toLowerCase()); + } + + let key = codepoints.join('_'); + + if (icons.icons.find((v) => v.codepoint == key)) { + return `https://fonts.gstatic.com/s/e/notoemoji/latest/${key}/512.webp`; + } + + key = codepoints.filter((cp) => cp !== 'fe0f' && cp !== 'fe0e').join('_'); + if (icons.icons.find((v) => v.codepoint == key)) + return `https://fonts.gstatic.com/s/e/notoemoji/latest/${key}/512.webp`; +} diff --git a/examples/sveltekit-cloudflare-workers/src/lib/index.ts b/examples/sveltekit-cloudflare-workers/src/lib/index.ts new file mode 100644 index 0000000..856f2b6 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/lib/index.ts @@ -0,0 +1 @@ +// place files you want to import through the `$lib` alias in this folder. diff --git a/examples/sveltekit-cloudflare-workers/src/routes/(oauth)/oauth-client-metadata.json/+server.ts b/examples/sveltekit-cloudflare-workers/src/routes/(oauth)/oauth-client-metadata.json/+server.ts new file mode 100644 index 0000000..44794e4 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/routes/(oauth)/oauth-client-metadata.json/+server.ts @@ -0,0 +1,8 @@ +import { json } from '@sveltejs/kit'; +import { createOAuthClient } from '$lib/atproto/server/oauth'; +import type { RequestHandler } from './$types'; + +export const GET: RequestHandler = async ({ platform }) => { + const oauth = createOAuthClient(platform?.env); + return json(oauth.metadata); +}; diff --git a/examples/sveltekit-cloudflare-workers/src/routes/(oauth)/oauth/callback/+server.ts b/examples/sveltekit-cloudflare-workers/src/routes/(oauth)/oauth/callback/+server.ts new file mode 100644 index 0000000..f6a71e8 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/routes/(oauth)/oauth/callback/+server.ts @@ -0,0 +1,41 @@ +import { redirect } from '@sveltejs/kit'; +import { createOAuthClient } from '$lib/atproto/server/oauth'; +import { setSignedCookie } from '$lib/atproto/server/signed-cookie'; +import { scopes } from '$lib/atproto/settings'; +import { dev } from '$app/environment'; +import type { RequestHandler } from './$types'; + +export const GET: RequestHandler = async ({ url, platform, cookies }) => { + const oauth = createOAuthClient(platform?.env); + + // oauth.callback() validates the state parameter (CSRF protection) and + // exchanges the authorization code for tokens via the token endpoint. + try { + const { session } = await oauth.callback(url.searchParams); + + const cookieOpts = { + path: '/', + httpOnly: true, + secure: !dev, + sameSite: 'lax' as const, + maxAge: 60 * 60 * 24 * 180 // 180 days + }; + + setSignedCookie(cookies, 'did', session.did, cookieOpts); + setSignedCookie(cookies, 'scope', scopes.join(' '), cookieOpts); + } catch (e) { + console.error('OAuth callback failed:', e); + redirect(303, '/?error=auth_failed'); + } + + const returnTo = cookies.get('oauth_return_to'); + if (returnTo) { + cookies.delete('oauth_return_to', { path: '/' }); + const decoded = decodeURIComponent(returnTo); + if (decoded.startsWith('/') && !decoded.startsWith('//')) { + redirect(303, decoded); + } + } + + redirect(303, '/'); +}; diff --git a/examples/sveltekit-cloudflare-workers/src/routes/(oauth)/oauth/jwks.json/+server.ts b/examples/sveltekit-cloudflare-workers/src/routes/(oauth)/oauth/jwks.json/+server.ts new file mode 100644 index 0000000..ae4dd84 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/routes/(oauth)/oauth/jwks.json/+server.ts @@ -0,0 +1,8 @@ +import { json } from '@sveltejs/kit'; +import { createOAuthClient } from '$lib/atproto/server/oauth'; +import type { RequestHandler } from './$types'; + +export const GET: RequestHandler = async ({ platform }) => { + const oauth = createOAuthClient(platform?.env); + return json(oauth.jwks ?? { keys: [] }); +}; diff --git a/examples/sveltekit-cloudflare-workers/src/routes/+layout.server.ts b/examples/sveltekit-cloudflare-workers/src/routes/+layout.server.ts new file mode 100644 index 0000000..0fb3c26 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/routes/+layout.server.ts @@ -0,0 +1,15 @@ +import type { LayoutServerLoad } from './$types'; +import { loadProfile } from '$lib/atproto/server/profile'; + +export const load: LayoutServerLoad = async ({ locals, platform }) => { + if (!locals.did || !locals.client) { + return { did: null, profile: null }; + } + + const profile = await loadProfile(locals.did, platform?.env?.PROFILE_CACHE); + + return { + did: locals.did, + profile + }; +}; diff --git a/examples/sveltekit-cloudflare-workers/src/routes/+layout.svelte b/examples/sveltekit-cloudflare-workers/src/routes/+layout.svelte new file mode 100644 index 0000000..3b11797 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/routes/+layout.svelte @@ -0,0 +1,22 @@ + + +{@render children()} + + + + + + diff --git a/examples/sveltekit-cloudflare-workers/src/routes/+layout.ts b/examples/sveltekit-cloudflare-workers/src/routes/+layout.ts new file mode 100644 index 0000000..77ab0a0 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/routes/+layout.ts @@ -0,0 +1 @@ +export const ssr = true; diff --git a/examples/sveltekit-cloudflare-workers/src/routes/+page.server.ts b/examples/sveltekit-cloudflare-workers/src/routes/+page.server.ts new file mode 100644 index 0000000..7ccf64e --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/routes/+page.server.ts @@ -0,0 +1,91 @@ +import type { Did } from '@atcute/lexicons'; +import { recentRecords } from '$lib/atproto/microcosm'; +import { loadProfile } from '$lib/atproto/server/profile'; +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ locals, platform }) => { + try { + const microcosmPromise = recentRecords<{ status: string; createdAt: string }>( + 'xyz.statusphere.status' + ); + + const userPromise = + locals.client && locals.did + ? locals.client + .get('com.atproto.repo.listRecords', { + params: { + repo: locals.did, + collection: 'xyz.statusphere.status', + limit: 20 + } + }) + .catch(() => null) + : null; + + const [microcosmRecords, userResponse] = await Promise.all([microcosmPromise, userPromise]); + + const microcosmStatuses = microcosmRecords.map((r) => ({ + did: r.did, + rkey: r.rkey, + status: r.record.status, + createdAt: r.record.createdAt + })); + + // Find the oldest microcosm timestamp to use as cutoff for user records + const oldestMicrocosm = + microcosmStatuses.length > 0 + ? Math.min(...microcosmStatuses.map((s) => new Date(s.createdAt).getTime())) + : 0; + + const userStatuses = userResponse?.ok + ? userResponse.data.records + .map((r) => ({ + did: locals.did!, + rkey: r.uri.split('/').pop()!, + status: (r.value as { status: string }).status, + createdAt: (r.value as { createdAt: string }).createdAt + })) + .filter((s) => new Date(s.createdAt).getTime() >= oldestMicrocosm) + : []; + + // Merge and deduplicate by did+rkey, then sort by time descending + const seen = new Set(); + const merged = [...userStatuses, ...microcosmStatuses].filter((s) => { + const key = `${s.did}-${s.rkey}`; + if (seen.has(key)) return false; + seen.add(key); + return true; + }); + + merged.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()); + + // Load profiles for all unique DIDs + const uniqueDids = [...new Set(merged.map((s) => s.did))]; + const profileCache = platform?.env?.PROFILE_CACHE; + const profileEntries = await Promise.all( + uniqueDids.map(async (did) => { + const profile = await loadProfile(did as Did, profileCache); + if (!profile) return null; + return [ + did, + { + handle: profile.handle as string, + displayName: profile.displayName as string | undefined, + avatar: profile.avatar as string | undefined + } + ] as const; + }) + ); + const profiles: Record = {}; + for (const entry of profileEntries) { + if (entry) profiles[entry[0]] = entry[1]; + } + + return { statuses: merged, profiles }; + } catch { + return { + statuses: [] as { did: string; rkey: string; status: string; createdAt: string }[], + profiles: {} as Record + }; + } +}; diff --git a/examples/sveltekit-cloudflare-workers/src/routes/+page.svelte b/examples/sveltekit-cloudflare-workers/src/routes/+page.svelte new file mode 100644 index 0000000..bb0e283 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/routes/+page.svelte @@ -0,0 +1,188 @@ + + +
+

svelte + cloudflare workers statusphere

+ + + + {#if !user.isLoggedIn} + + {:else} +
+ { + const rkey = createTID(); + const createdAt = new Date().toISOString(); + const key = `${user.did!}-${rkey}`; + seenKeys.add(key); + localStatuses = [ + { did: user.did!, rkey, status: emoji.unicode, createdAt }, + ...localStatuses + ]; + open = false; + await putRecord({ + rkey, + collection: 'xyz.statusphere.status', + record: { + status: emoji.unicode, + createdAt + } + }); + }} + bind:open + > + {#snippet child({ props })} + + {/snippet} + + +
+ {/if} + + {#if allStatuses.length > 0} +
    + {#each allStatuses as status, i (`${status.did}-${status.rkey}`)} + {@const profile = + profiles[status.did] ?? + (status.did === user.did && data.profile + ? { displayName: data.profile.displayName, handle: data.profile.handle } + : null)} + {@const animated = emojiToNotoAnimatedWebp(status.status)} +
  • +
    +
    + {#if animated} + {#if i === 0} + {status.status} + {:else} + {status.status} + {/if} + {:else if i === 0} + {status.status} + {:else} + {status.status} + {/if} +
    + {#if i < allStatuses.length - 1} +
    + {/if} +
    +
    + {#if profile} + {profile.displayName || profile.handle} + {:else} + {status.did.slice(0, 20)}... + {/if} + · + + + +
    +
  • + {/each} +
+ {/if} +
diff --git a/examples/sveltekit-cloudflare-workers/src/routes/blobs/+page.server.ts b/examples/sveltekit-cloudflare-workers/src/routes/blobs/+page.server.ts new file mode 100644 index 0000000..9068059 --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/routes/blobs/+page.server.ts @@ -0,0 +1,36 @@ +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ locals }) => { + if (!locals.client || !locals.did) + return { + blobs: [] as { rkey: string; blob: { $type: 'blob'; ref: { $link: string }; mimeType: string; size: number }; createdAt: string }[] + }; + + try { + const blobResponse = await locals.client.get('com.atproto.repo.listRecords', { + params: { + repo: locals.did, + collection: 'social.atmo.test.blob', + limit: 20 + } + }); + + const blobs = blobResponse.ok + ? blobResponse.data.records.map((r) => { + const value = r.value as { + blob: { $type: 'blob'; ref: { $link: string }; mimeType: string; size: number }; + createdAt: string; + }; + return { + rkey: r.uri.split('/').pop()!, + blob: value.blob, + createdAt: value.createdAt + }; + }) + : []; + + return { blobs }; + } catch { + return { blobs: [] }; + } +}; diff --git a/examples/sveltekit-cloudflare-workers/src/routes/blobs/+page.svelte b/examples/sveltekit-cloudflare-workers/src/routes/blobs/+page.svelte new file mode 100644 index 0000000..206270a --- /dev/null +++ b/examples/sveltekit-cloudflare-workers/src/routes/blobs/+page.svelte @@ -0,0 +1,95 @@ + + +
+

blob upload

+ + back to home + + {#if !user.isLoggedIn} +
not logged in
+ + {/if} + + {#if user.isLoggedIn} +
signed in as
+ +
+ + {user.profile?.displayName || user.profile?.handle} +
+ +
+
+ + {#if uploading} + uploading... + {/if} +
+ + {#if data.blobs.length > 0} +
Uploaded blobs:
+
+ {#each data.blobs as blob (blob.rkey)} +
+ uploaded blob +
+ +
+
+ {/each} +
+ {/if} +
+ + + {/if} +
diff --git a/examples/sveltekit-cloudflare-workers/static/favicon.png b/examples/sveltekit-cloudflare-workers/static/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..825b9e65af7c104cfb07089bb28659393b4f2097 GIT binary patch literal 1571 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4i*LmhD`I74h#$ojKx9jP7LeL$-HD>V7=?< z;uunK>uv1q+}9QYp`3aLRhP6(c_0+yMGvW%`8w9Z4+AO$r=LiV^}WjuyMS z-`u@3yY$$SKDCAN>H9tj&u}g}XS4E2pY^*PkNZ3lroTLubH?oMf4#J9vzMpzCckct zowYnCeNLl>-tC#oR|mW7^83!__-WF*w@N!}ZnWO)*sV9e?K!tS_p_50%zk=doa_6a z9Ze7`Oq(1d_U2FyZ`xGx-xFfEE={d84w$f9rS697HscGE-dGl;{V=G?`XscL>&++e z>-U#%oq6{6`Q0U4b%OVNS0!jYj1*aM;g7Z{*A0W>9o{wqst=zQyeQ;ij+$byPs!T7 zP$;gE@43N(Z#KN^`%g~qnDC*fQ@9u5T z`010b%(4WBW*Igy)jqkB43?QUzqIP?pR?n;uR)>M{Z!UJzVqjLRQx?D9Xlud=JZMH zM4Dt}4@n0eu2Ixgk=cKk=N7x!uIU#Qr)QK{iRNADxA(7D>^{r+(1Q28%d+>r`1fM! z3!#PnEzgzrWhp(JYGANY`@x@o);^8RydN}I>CasHT;#z0|7n-*i5nc8wD_Qhgrn&1 z_=)HIc7)82SrZn{n5O;yq=&Wj!=(QfoT>{MZZVX#Y(9Ll{di*M8HGwlu2VN3EWtQvP&QN2PVR8N7!YC#E{m*$kY8i3^zQiv$JVzqYQu{#r;icEl z=UhCnkiGRom%yd1b*>!Dbz(=$xA=OCK9sWW?kjHnIi=(8N8<^v!`m)TWlU#3bX%EA zWW|L?Hd)uCpL{-aJW{t>_loq&RRZ@V7u56iZFu;9u7AgewTA2m_dYzmg!LfHN%jio z6)Tz8tu4PtytF=2_HyzK35Her8CehRz9{eceYP>8gyZOsf1e+R9eAyLo&U`AQ!>jL z>i##s-geN-*K&%b<6Sll}2Yvce^~*xG<6XX?1V3gp#~N zkiz|sN2i}Ey4w@5>yt(|hpKnhq#5tcY68zPo5(r8-F4X1_Ok2&?FGW>zrU(?x;Q#c?bx4-5dPgKtZr*@mZ=`3%X zy6%Z`^e5Hr^Y+>AzJm9>p2Z^BF4@_(4b1il6W?8xzhU;SdYz;2?R&rX$y{t=F!Y`E zR$}w<@9ihF9(X_5v`6rxTqRqD=!eToZeQ5@{QQC0#~w>6ukx<+wTnGF|CY_6xJ%zz zHr<`$x>nEcQ1ZHi?IAA|7rHVEt3Nz@U3=2vrr*f|MGoxkLSkxhhdzJg^6Z@Zq2`!6 zN9X(x&t6IHdUbyJoZ{}h2h3KD+a6rvIIkc7=B91g%$DcR#pk?L*qd_b^D~z6tu4>l zcb}QJe%gmWZyk5-zxe)Gtrh1xH}U_oBV*EcOaCc*(s}2g+Fj}Irl)7WovQcub7w{E upWAk8&OVF%_w#jD-*4ISJB6Y@xbv5oeJi^*U66r+fx*+&&t;ucLK6TBI`Z29 literal 0 HcmV?d00001 diff --git a/examples/sveltekit-cloudflare-workers/static/og.png b/examples/sveltekit-cloudflare-workers/static/og.png new file mode 100644 index 0000000000000000000000000000000000000000..62cbbc5fad01c8f7605857bca64b1066af12afb8 GIT binary patch literal 61667 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�ci>6UV9@evpHD#sN& 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%0A`;->j7qD~&v#J~BQHokhjx4uXF@H)94@80$Q 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