The recipes.blue monorepo recipes.blue
recipes appview atproto

feat: oauth setup

+22
Caddyfile
··· 26 26 } 27 27 28 28 reverse_proxy http://host.docker.internal:5173 29 + 30 + handle_path /xrpc/* { 31 + rewrite * /xrpc{uri} 32 + reverse_proxy http://host.docker.internal:8080 33 + } 34 + handle_path /oauth/* { 35 + rewrite * /oauth{uri} 36 + reverse_proxy http://host.docker.internal:8080 37 + } 38 + } 39 + 40 + http://*.trycloudflare.com { 41 + reverse_proxy http://host.docker.internal:5173 42 + 43 + handle_path /xrpc/* { 44 + rewrite * /xrpc{uri} 45 + reverse_proxy http://host.docker.internal:8080 46 + } 47 + handle_path /oauth/* { 48 + rewrite * /oauth{uri} 49 + reverse_proxy http://host.docker.internal:8080 50 + } 29 51 } 30 52 31 53 acme.dev.hayden.moe {
+9
apps/api/migrations/0001_ancient_polaris.sql
··· 1 + CREATE TABLE `auth_session` ( 2 + `key` text PRIMARY KEY NOT NULL, 3 + `session` text NOT NULL 4 + ); 5 + --> statement-breakpoint 6 + CREATE TABLE `auth_state` ( 7 + `key` text PRIMARY KEY NOT NULL, 8 + `state` text NOT NULL 9 + );
+148
apps/api/migrations/meta/0001_snapshot.json
··· 1 + { 2 + "version": "6", 3 + "dialect": "sqlite", 4 + "id": "e48d1172-ebce-45bf-8598-4a852aa61d44", 5 + "prevId": "4c6d1917-abfe-4ae1-ba3d-6017f11a8f9f", 6 + "tables": { 7 + "auth_session": { 8 + "name": "auth_session", 9 + "columns": { 10 + "key": { 11 + "name": "key", 12 + "type": "text", 13 + "primaryKey": true, 14 + "notNull": true, 15 + "autoincrement": false 16 + }, 17 + "session": { 18 + "name": "session", 19 + "type": "text", 20 + "primaryKey": false, 21 + "notNull": true, 22 + "autoincrement": false 23 + } 24 + }, 25 + "indexes": {}, 26 + "foreignKeys": {}, 27 + "compositePrimaryKeys": {}, 28 + "uniqueConstraints": {}, 29 + "checkConstraints": {} 30 + }, 31 + "auth_state": { 32 + "name": "auth_state", 33 + "columns": { 34 + "key": { 35 + "name": "key", 36 + "type": "text", 37 + "primaryKey": true, 38 + "notNull": true, 39 + "autoincrement": false 40 + }, 41 + "state": { 42 + "name": "state", 43 + "type": "text", 44 + "primaryKey": false, 45 + "notNull": true, 46 + "autoincrement": false 47 + } 48 + }, 49 + "indexes": {}, 50 + "foreignKeys": {}, 51 + "compositePrimaryKeys": {}, 52 + "uniqueConstraints": {}, 53 + "checkConstraints": {} 54 + }, 55 + "recipes": { 56 + "name": "recipes", 57 + "columns": { 58 + "id": { 59 + "name": "id", 60 + "type": "integer", 61 + "primaryKey": true, 62 + "notNull": true, 63 + "autoincrement": false 64 + }, 65 + "rkey": { 66 + "name": "rkey", 67 + "type": "text", 68 + "primaryKey": false, 69 + "notNull": true, 70 + "autoincrement": false 71 + }, 72 + "title": { 73 + "name": "title", 74 + "type": "text", 75 + "primaryKey": false, 76 + "notNull": true, 77 + "autoincrement": false 78 + }, 79 + "description": { 80 + "name": "description", 81 + "type": "text", 82 + "primaryKey": false, 83 + "notNull": false, 84 + "autoincrement": false 85 + }, 86 + "ingredients": { 87 + "name": "ingredients", 88 + "type": "text", 89 + "primaryKey": false, 90 + "notNull": true, 91 + "autoincrement": false 92 + }, 93 + "steps": { 94 + "name": "steps", 95 + "type": "text", 96 + "primaryKey": false, 97 + "notNull": true, 98 + "autoincrement": false 99 + }, 100 + "created_at": { 101 + "name": "created_at", 102 + "type": "text", 103 + "primaryKey": false, 104 + "notNull": true, 105 + "autoincrement": false 106 + }, 107 + "author_did": { 108 + "name": "author_did", 109 + "type": "text", 110 + "primaryKey": false, 111 + "notNull": true, 112 + "autoincrement": false 113 + } 114 + }, 115 + "indexes": { 116 + "recipes_id_unique": { 117 + "name": "recipes_id_unique", 118 + "columns": [ 119 + "id" 120 + ], 121 + "isUnique": true 122 + }, 123 + "recipes_rkey_author_did_unique": { 124 + "name": "recipes_rkey_author_did_unique", 125 + "columns": [ 126 + "rkey", 127 + "author_did" 128 + ], 129 + "isUnique": true 130 + } 131 + }, 132 + "foreignKeys": {}, 133 + "compositePrimaryKeys": {}, 134 + "uniqueConstraints": {}, 135 + "checkConstraints": {} 136 + } 137 + }, 138 + "views": {}, 139 + "enums": {}, 140 + "_meta": { 141 + "schemas": {}, 142 + "tables": {}, 143 + "columns": {} 144 + }, 145 + "internal": { 146 + "indexes": {} 147 + } 148 + }
+8 -1
apps/api/migrations/meta/_journal.json
··· 8 8 "when": 1733263246874, 9 9 "tag": "0000_empty_silver_fox", 10 10 "breakpoints": true 11 + }, 12 + { 13 + "idx": 1, 14 + "version": "6", 15 + "when": 1733660667552, 16 + "tag": "0001_ancient_polaris", 17 + "breakpoints": true 11 18 } 12 19 ] 13 - } 20 + }
+5
apps/api/package.json
··· 16 16 "db:studio": "NODE_OPTIONS=--use-openssl-ca drizzle-kit studio" 17 17 }, 18 18 "dependencies": { 19 + "@atcute/client": "^2.0.6", 20 + "@atproto/api": "^0.13.19", 21 + "@atproto/jwk-jose": "^0.1.2", 22 + "@atproto/oauth-client-node": "^0.2.3", 19 23 "@hono/node-server": "^1.13.7", 20 24 "@libsql/client": "^0.14.0", 21 25 "@skyware/jetstream": "^0.2.1", 22 26 "bufferutil": "^4.0.8", 23 27 "drizzle-orm": "^0.37.0", 24 28 "hono": "^4.6.12", 29 + "hono-sessions": "^0.7.0", 25 30 "jose": "^5.9.6", 26 31 "pino": "^9.5.0", 27 32 "ws": "^8.18.0",
+34
apps/api/src/auth/client.ts
··· 1 + import { JoseKey } from "@atproto/jwk-jose"; 2 + import { NodeOAuthClient } from "@atproto/oauth-client-node"; 3 + import env from "../config/env.js"; 4 + import { SessionStore, StateStore } from "./storage.js"; 5 + import { Context } from "hono"; 6 + 7 + export const getClient = async (ctx: Context) => { 8 + let appUrl = 'https://cookware.hayden.moe'; 9 + if (env.ENV == 'development') { 10 + appUrl = `https://${ctx.req.header('Host')}`; 11 + } 12 + 13 + return new NodeOAuthClient({ 14 + clientMetadata: { 15 + client_id: `${appUrl}/oauth/client-metadata.json`, 16 + client_name: 'Cookware', 17 + client_uri: appUrl, 18 + redirect_uris: [`${appUrl}/oauth/callback`], 19 + response_types: ['code'], 20 + application_type: 'web', 21 + grant_types: ['authorization_code', 'refresh_token'], 22 + scope: 'atproto transition:generic', 23 + token_endpoint_auth_method: 'private_key_jwt', 24 + token_endpoint_auth_signing_alg: 'ES256', 25 + dpop_bound_access_tokens: true, 26 + jwks_uri: `${appUrl}/oauth/jwks.json`, 27 + }, 28 + keyset: await Promise.all([ 29 + JoseKey.fromImportable(env.JWKS_PRIVATE_KEY, 'cookware_jwks_1'), 30 + ]), 31 + sessionStore: new SessionStore(), 32 + stateStore: new StateStore(), 33 + }); 34 + };
+80
apps/api/src/auth/index.ts
··· 1 + import { Hono } from "hono"; 2 + import { getDidFromHandleOrDid } from "../util/did.js"; 3 + import { getClient } from "./client.js"; 4 + import { z } from "zod"; 5 + import { Session } from "hono-sessions"; 6 + import { CookwareSession, getSessionAgent } from "../util/api.js"; 7 + 8 + export const authApp = new Hono<{ 9 + Variables: { 10 + session: Session<CookwareSession>, 11 + session_key_rotation: boolean, 12 + }, 13 + }>(); 14 + 15 + authApp.get('/client-metadata.json', async ctx => { 16 + const client = await getClient(ctx); 17 + return ctx.json(client.clientMetadata); 18 + }); 19 + 20 + authApp.get('/jwks.json', async ctx => { 21 + const client = await getClient(ctx); 22 + return ctx.json(client.jwks); 23 + }); 24 + 25 + const loginSchema = z.object({ 26 + actor: z.string(), 27 + }); 28 + 29 + authApp.get('/me', async ctx => { 30 + const agent = await getSessionAgent(ctx); 31 + if (!agent) { 32 + ctx.status(401); 33 + return ctx.json({ 34 + error: 'unauthenticated', 35 + message: 'You must be authenticated to access this resource.', 36 + }); 37 + } 38 + 39 + const profile = await agent.getProfile({ actor: agent.did! }); 40 + return ctx.json(profile.data); 41 + }); 42 + 43 + authApp.post('/login', async ctx => { 44 + const client = await getClient(ctx); 45 + const { actor } = loginSchema.parse(await ctx.req.raw.json()); 46 + 47 + const did = await getDidFromHandleOrDid(actor); 48 + if (!did) { 49 + ctx.status(400); 50 + return ctx.json({ 51 + error: 'DID_NOT_FOUND' as const, 52 + message: 'No account with that handle was found.', 53 + }); 54 + } 55 + 56 + const url = await client.authorize(did, { 57 + scope: 'atproto transition:generic', 58 + }); 59 + return ctx.json({ url }); 60 + }); 61 + 62 + authApp.get('/callback', async ctx => { 63 + const client = await getClient(ctx); 64 + const params = new URLSearchParams(ctx.req.url.split('?')[1]); 65 + 66 + const { session } = await client.callback(params); 67 + const currentSession = ctx.get('session') as Session<CookwareSession>; 68 + const did = currentSession.get('did'); 69 + if (did) { 70 + ctx.status(400); 71 + return ctx.json({ 72 + error: 'session_exists', 73 + message: 'Session already exists!', 74 + }); 75 + } 76 + 77 + currentSession.set('did', session.did); 78 + 79 + return ctx.redirect('/'); 80 + });
+56
apps/api/src/auth/storage.ts
··· 1 + import type { 2 + NodeSavedSession, 3 + NodeSavedSessionStore, 4 + NodeSavedState, 5 + NodeSavedStateStore, 6 + } from '@atproto/oauth-client-node' 7 + import { db } from '../db/index.js' 8 + import { eq } from 'drizzle-orm'; 9 + import { authSessionTable, authStateTable } from '../db/schema.js'; 10 + 11 + export class StateStore implements NodeSavedStateStore { 12 + constructor() {} 13 + async get(key: string): Promise<NodeSavedState | undefined> { 14 + const result = await db.query.authStateTable.findFirst({ 15 + where: eq(authStateTable.key, key), 16 + }); 17 + if (!result) return 18 + return result.state 19 + } 20 + 21 + async set(key: string, state: NodeSavedState) { 22 + await db.insert(authStateTable).values({ 23 + key, state: state, 24 + }).onConflictDoUpdate({ 25 + target: authStateTable.key, 26 + set: { state }, 27 + }); 28 + } 29 + 30 + async del(key: string) { 31 + await db.delete(authStateTable).where(eq(authStateTable.key, key)); 32 + } 33 + } 34 + 35 + export class SessionStore implements NodeSavedSessionStore { 36 + async get(key: string): Promise<NodeSavedSession | undefined> { 37 + const result = await db.query.authSessionTable.findFirst({ 38 + where: eq(authSessionTable.key, key), 39 + }); 40 + if (!result) return 41 + return result.session 42 + } 43 + 44 + async set(key: string, session: NodeSavedSession) { 45 + await db.insert(authSessionTable) 46 + .values({ key, session }) 47 + .onConflictDoUpdate({ 48 + target: authSessionTable.key, 49 + set: { session }, 50 + }); 51 + } 52 + 53 + async del(key: string) { 54 + await db.delete(authSessionTable).where(eq(authSessionTable.key, key)); 55 + } 56 + }
+6 -1
apps/api/src/config/env.ts
··· 4 4 PORT: z.coerce.number().lte(65535).default(8080), 5 5 HOST: z.string().ip().default('0.0.0.0'), 6 6 7 - CORS_ORIGINS: z.array(z.string()).default(['http://localhost:5173']), 7 + CORS_ORIGINS: z.array(z.string()).default(['http://localhost:5173', 'https://cookware.dev.hayden.moe']), 8 8 9 9 TURSO_CONNECTION_URL: z.string().default('https://turso.dev.hayden.moe'), 10 10 TURSO_AUTH_TOKEN: z.string().or(z.undefined()), ··· 14 14 .url() 15 15 .default('wss://jetstream1.us-east.bsky.network/subscribe'), 16 16 PLC_DIRECTORY_URL: z.string().url().default('https://plc.directory'), 17 + 18 + JWKS_PRIVATE_KEY: z.string().default('{"kty":"EC","x":"pew2xWIyBQ4XSY4gcCuTJBI-oC5rQqQlcDxIN8nN834","y":"aiJFNEFWyKKWGiFKPRvLAU4wdhsfgysfTfTuzTC4LNQ","crv":"P-256","d":"QS-q9RzH1u2Oj8gDiUzLk1qpGxZjKSf-3Z1oKCRL_jQ"}'), 19 + 20 + SESSION_KEY: z.string().default('bJVS+Dx03A3QWWfW3A5Om5DGx1GKptx+1IGAXzOTpw8='), 21 + SESSION_TTL: z.number().default(((60 * 60) * 24) * 5), // expire in 5 days 17 22 18 23 ENV: z 19 24 .union([
+11
apps/api/src/db/schema.ts
··· 2 2 import { customType, int, sqliteTable, text, unique } from "drizzle-orm/sqlite-core"; 3 3 import { DID } from "../util/did.js"; 4 4 import { Ingredient, Step } from "@cookware/lexicons"; 5 + import { NodeSavedSession, NodeSavedState } from "@atproto/oauth-client-node"; 5 6 6 7 const did = customType<{ data: DID }>({ 7 8 dataType() { ··· 31 32 }, t => ({ 32 33 unique_author_rkey: unique().on(t.rkey, t.authorDid), 33 34 })); 35 + 36 + export const authStateTable = sqliteTable("auth_state", { 37 + key: text().primaryKey(), 38 + state: text({ mode: 'json' }).$type<NodeSavedState>().notNull(), 39 + }); 40 + 41 + export const authSessionTable = sqliteTable("auth_session", { 42 + key: text().primaryKey(), 43 + session: text({ mode: 'json' }).$type<NodeSavedSession>().notNull(), 44 + });
+66 -2
apps/api/src/index.ts
··· 5 5 import env from "./config/env.js"; 6 6 import { xrpcApp } from "./xrpc/index.js"; 7 7 import { cors } from "hono/cors"; 8 + import { authApp } from "./auth/index.js"; 9 + import { ZodError } from "zod"; 10 + import { CookieStore, Session, sessionMiddleware } from "hono-sessions"; 11 + import { CookwareSession } from "./util/api.js"; 8 12 9 - const app = new Hono(); 13 + const app = new Hono<{ 14 + Variables: { 15 + session: Session<CookwareSession>, 16 + session_key_rotation: boolean, 17 + }, 18 + }>(); 19 + 20 + const store = new CookieStore({ 21 + sessionCookieName: 'cookware-session', 22 + }); 23 + 24 + app.use(async (c, next) => { 25 + if ( 26 + c.req.path == '/oauth/client-metadata.json' 27 + || c.req.path == '/oauth/jwks.json' 28 + ) return next(); 29 + 30 + const mw = sessionMiddleware({ 31 + store, 32 + encryptionKey: env.SESSION_KEY, // Required for CookieStore, recommended for others 33 + expireAfterSeconds: 900, // Expire session after 15 minutes of inactivity 34 + cookieOptions: { 35 + sameSite: 'strict', // Recommended for basic CSRF protection in modern browsers 36 + path: '/', // Required for this library to work properly 37 + httpOnly: true, // Recommended to avoid XSS attacks 38 + secure: true, 39 + }, 40 + }); 41 + return mw(c, next); 42 + }); 10 43 11 44 app.use(cors({ 12 - origin: env.CORS_ORIGINS, 45 + origin: (origin, _ctx) => { 46 + if (env.ENV == 'development') origin; 47 + 48 + return env.CORS_ORIGINS.includes(origin) 49 + ? origin 50 + : 'https://cookware.hayden.moe'; 51 + }, 52 + allowHeaders: ['Content-Type', 'Accept'], 53 + allowMethods: ['POST', 'GET', 'OPTIONS'], 54 + exposeHeaders: ['Content-Length'], 55 + maxAge: 600, 13 56 credentials: true, 14 57 })); 15 58 16 59 app.route('/xrpc', xrpcApp); 60 + app.route('/oauth', authApp); 61 + 62 + app.use(async (ctx, next) => { 63 + try { 64 + await next(); 65 + } catch (e) { 66 + if (e instanceof ZodError) { 67 + ctx.status(400); 68 + return ctx.json({ 69 + error: 'invalid_data', 70 + message: e.message, 71 + }); 72 + } 73 + 74 + ctx.status(500); 75 + return ctx.json({ 76 + error: 'internal_server_error', 77 + message: 'The server could not process the request.', 78 + }); 79 + } 80 + }); 17 81 18 82 newIngester().start(); 19 83 serve({
+23
apps/api/src/util/api.ts
··· 1 + import { Context } from "hono"; 2 + import { Session } from "hono-sessions"; 3 + import { getClient } from "../auth/client.js"; 4 + import { Agent } from "@atproto/api"; 5 + import { authLogger } from "../logger.js"; 6 + 7 + export type CookwareSession = { did: string; }; 8 + 9 + export const getSessionAgent = async (ctx: Context) => { 10 + const client = await getClient(ctx); 11 + const session = ctx.get('session') as Session<CookwareSession>; 12 + const did = session.get('did'); 13 + if (!did) return null; 14 + 15 + try { 16 + const oauthSession = await client.restore(did); 17 + return oauthSession ? new Agent(oauthSession) : null; 18 + } catch (err) { 19 + authLogger.warn({ err, did }, 'oauth restore failed'); 20 + session.deleteSession(); 21 + return null; 22 + } 23 + };
+93 -2
apps/api/src/util/did.ts
··· 16 16 } 17 17 18 18 export const getDidDoc = async (did: DID) => { 19 - const url = env.PLC_DIRECTORY_URL; 20 - const response = await fetch(`${url}/${did}`); 19 + let url = `${env.PLC_DIRECTORY_URL}/${did}`; 20 + if (did.startsWith('did:web')) { 21 + url = `https://${did.split(':')[2]}/.well-known/did.json`; 22 + } 23 + 24 + const response = await fetch(url); 21 25 22 26 return PlcDocument.parse(await response.json()); 23 27 }; ··· 42 46 }), 43 47 ), 44 48 }); 49 + 50 + const DnsQueryResponse = z.object({ 51 + Answer: z.array( 52 + z.object({ 53 + name: z.string(), 54 + type: z.number(), 55 + TTL: z.number(), 56 + data: z.string(), 57 + }), 58 + ), 59 + }); 60 + 61 + async function getAtprotoDidFromDns(handle: string) { 62 + const url = new URL("https://cloudflare-dns.com/dns-query"); 63 + url.searchParams.set("type", "TXT"); 64 + url.searchParams.set("name", `_atproto.${handle}`); 65 + 66 + const response = await fetch(url, { 67 + headers: { 68 + Accept: "application/dns-json", 69 + }, 70 + }); 71 + 72 + const { Answer } = DnsQueryResponse.parse(await response.json()); 73 + // Answer[0].data is "\"did=...\"" (with quotes) 74 + const val = Answer[0]?.data 75 + ? JSON.parse(Answer[0]?.data).split("did=")[1] 76 + : null; 77 + 78 + return val ? parseDid(val) : null; 79 + } 80 + 81 + const getAtprotoFromHttps = async (handle: string) => { 82 + let res; 83 + const timeoutSignal = AbortSignal.timeout(1500); 84 + try { 85 + res = await fetch(`https://${handle}/.well-known/atproto-did`, { 86 + signal: timeoutSignal, 87 + }); 88 + } catch (_e) { 89 + // We're caching failures here, we should at some point invalidate the cache by listening to handle changes on the network 90 + return null; 91 + } 92 + 93 + if (!res.ok) { 94 + return null; 95 + } 96 + return parseDid((await res.text()).trim()); 97 + }; 98 + 99 + export const getVerifiedDid = async (handle: string) => { 100 + const [dnsDid, httpDid] = await Promise.all([ 101 + getAtprotoDidFromDns(handle).catch((_) => { 102 + return null; 103 + }), 104 + getAtprotoFromHttps(handle).catch(() => { 105 + return null; 106 + }), 107 + ]); 108 + 109 + if (dnsDid && httpDid && dnsDid !== httpDid) { 110 + return null; 111 + } 112 + 113 + const did = dnsDid ?? (httpDid ? parseDid(httpDid) : null); 114 + if (!did) { 115 + return null; 116 + } 117 + 118 + const plcDoc = await getDidDoc(did); 119 + const plcHandle = plcDoc.alsoKnownAs 120 + .find((handle) => handle.startsWith("at://")) 121 + ?.replace("at://", ""); 122 + 123 + if (!plcHandle) return null; 124 + 125 + return plcHandle.toLowerCase() === handle.toLowerCase() ? did : null; 126 + }; 127 + 128 + export const getDidFromHandleOrDid = async (handleOrDid: string) => { 129 + const decodedHandleOrDid = decodeURIComponent(handleOrDid); 130 + if (isDid(decodedHandleOrDid)) { 131 + return decodedHandleOrDid; 132 + } 133 + 134 + return getVerifiedDid(decodedHandleOrDid); 135 + };
+6 -1
apps/api/src/xrpc/index.ts
··· 2 2 import { db } from '../db/index.js'; 3 3 import { recipeTable } from '../db/schema.js'; 4 4 import { and, eq, sql } from 'drizzle-orm'; 5 - import { parseDid } from '../util/did.js'; 5 + import { getDidDoc, parseDid } from '../util/did.js'; 6 6 7 7 export const xrpcApp = new Hono(); 8 8 ··· 53 53 }); 54 54 } 55 55 56 + const author = await getDidDoc(recipe.authorDid); 57 + 56 58 return ctx.json({ 57 59 recipe: { 60 + author: { 61 + handle: author.alsoKnownAs[0]?.substring(5), 62 + }, 58 63 title: recipe.title, 59 64 description: recipe.description, 60 65 ingredients: recipe.ingredients,
+8 -5
apps/web/package.json
··· 12 12 "dependencies": { 13 13 "@atcute/client": "^2.0.6", 14 14 "@atcute/oauth-browser-client": "^1.0.7", 15 - "@cookware/lexicons": "workspace:^", 16 15 "@radix-ui/react-avatar": "^1.1.1", 17 16 "@radix-ui/react-collapsible": "^1.1.1", 18 17 "@radix-ui/react-dialog": "^1.1.2", 19 18 "@radix-ui/react-dropdown-menu": "^2.1.2", 19 + "@radix-ui/react-label": "^2.1.0", 20 20 "@radix-ui/react-separator": "^1.1.0", 21 21 "@radix-ui/react-slot": "^1.1.0", 22 22 "@radix-ui/react-tooltip": "^1.1.4", 23 23 "@tanstack/react-query": "^5.62.2", 24 24 "@tanstack/react-query-devtools": "^5.62.2", 25 25 "@tanstack/react-router": "^1.85.5", 26 + "axios": "^1.7.9", 26 27 "class-variance-authority": "^0.7.1", 27 28 "clsx": "^2.1.1", 28 29 "lucide-react": "^0.464.0", 29 - "react": "^18.3.1", 30 - "react-dom": "^18.3.1", 30 + "react-dom": "19.0.0-rc-f994737d14-20240522", 31 31 "tailwind-merge": "^2.5.5", 32 32 "tailwindcss-animate": "^1.0.7" 33 33 }, 34 34 "devDependencies": { 35 + "@atcute/bluesky": "^1.0.9", 36 + "@cookware/lexicons": "workspace:*", 35 37 "@eslint/js": "^9.15.0", 36 38 "@tanstack/eslint-plugin-query": "^5.62.1", 37 39 "@tanstack/router-devtools": "^1.85.5", 38 40 "@tanstack/router-plugin": "^1.85.3", 39 41 "@types/node": "^22.10.1", 40 - "@types/react": "^18.3.12", 41 - "@types/react-dom": "^18.3.1", 42 + "@types/react": "^19.0.0", 43 + "@types/react-dom": "^19.0.0", 42 44 "@vitejs/plugin-react-swc": "^3.5.0", 43 45 "autoprefixer": "^10.4.20", 44 46 "eslint": "^9.15.0", ··· 46 48 "eslint-plugin-react-refresh": "^0.4.14", 47 49 "globals": "^15.12.0", 48 50 "postcss": "^8.4.49", 51 + "react": "19.0.0-rc-7283a213-20241206", 49 52 "tailwindcss": "^3.4.16", 50 53 "typescript": "~5.6.2", 51 54 "typescript-eslint": "^8.15.0",
+1 -5
apps/web/src/components/app-sidebar.tsx
··· 13 13 SidebarFooter, 14 14 SidebarRail, 15 15 } from "@/components/ui/sidebar" 16 - import { Button } from "./ui/button" 17 16 18 17 const data = { 19 18 user: { ··· 76 75 <NavMain items={data.navMain} /> 77 76 </SidebarContent> 78 77 <SidebarFooter> 79 - <NavUser user={data.user} /> 80 - <Button asChild> 81 - <a href="/" className="w-full">Log in</a> 82 - </Button> 78 + <NavUser /> 83 79 </SidebarFooter> 84 80 <SidebarRail /> 85 81 </Sidebar>
+65 -70
apps/web/src/components/nav-user.tsx
··· 2 2 3 3 import { 4 4 BadgeCheck, 5 - Bell, 6 5 ChevronsUpDown, 7 - CreditCard, 8 6 LogOut, 9 - Sparkles, 10 7 } from "lucide-react" 11 8 12 9 import { ··· 29 26 SidebarMenuItem, 30 27 useSidebar, 31 28 } from "@/components/ui/sidebar" 29 + import { useQuery } from "@tanstack/react-query" 30 + import axios from "axios"; 31 + import type { AppBskyActorGetProfile } from "@atcute/client/lexicons" 32 + import QueryPlaceholder from "./query-placeholder" 33 + import { Button } from "./ui/button" 34 + import { Link } from "@tanstack/react-router" 32 35 33 - export function NavUser({ 34 - user, 35 - }: { 36 - user: { 37 - name: string 38 - email: string 39 - avatar: string 40 - } 41 - }) { 36 + export function NavUser() { 42 37 const { isMobile } = useSidebar() 43 38 39 + const userQuery = useQuery({ 40 + queryKey: ['/oauth/me'], 41 + queryFn: async () => { 42 + const res = await axios.get<AppBskyActorGetProfile.Output>('/oauth/me'); 43 + return res.data; 44 + }, 45 + }); 46 + const { data } = userQuery; 47 + 44 48 return ( 45 49 <SidebarMenu> 46 50 <SidebarMenuItem> 47 - <DropdownMenu> 48 - <DropdownMenuTrigger asChild> 49 - <SidebarMenuButton 50 - size="lg" 51 - className="data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground" 52 - > 53 - <Avatar className="h-8 w-8 rounded-lg"> 54 - <AvatarImage src={user.avatar} alt={user.name} /> 55 - <AvatarFallback className="rounded-lg">CN</AvatarFallback> 56 - </Avatar> 57 - <div className="grid flex-1 text-left text-sm leading-tight"> 58 - <span className="truncate font-semibold">{user.name}</span> 59 - <span className="truncate text-xs">{user.email}</span> 60 - </div> 61 - <ChevronsUpDown className="ml-auto size-4" /> 62 - </SidebarMenuButton> 63 - </DropdownMenuTrigger> 64 - <DropdownMenuContent 65 - className="w-[--radix-dropdown-menu-trigger-width] min-w-56 rounded-lg" 66 - side={isMobile ? "bottom" : "right"} 67 - align="end" 68 - sideOffset={4} 69 - > 70 - <DropdownMenuLabel className="p-0 font-normal"> 71 - <div className="flex items-center gap-2 px-1 py-1.5 text-left text-sm"> 51 + <QueryPlaceholder query={userQuery} 52 + noData={ 53 + <Button asChild> 54 + <Link href="/login" className="w-full">Log in</Link> 55 + </Button> 56 + } 57 + > 58 + <DropdownMenu> 59 + <DropdownMenuTrigger asChild> 60 + <SidebarMenuButton 61 + size="lg" 62 + className="data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground" 63 + > 72 64 <Avatar className="h-8 w-8 rounded-lg"> 73 - <AvatarImage src={user.avatar} alt={user.name} /> 74 - <AvatarFallback className="rounded-lg">CN</AvatarFallback> 65 + <AvatarImage src={data?.avatar} alt={data?.displayName ?? `@${data?.handle}`} /> 66 + <AvatarFallback className="rounded-lg">{data?.handle.substring(2)}</AvatarFallback> 75 67 </Avatar> 76 68 <div className="grid flex-1 text-left text-sm leading-tight"> 77 - <span className="truncate font-semibold">{user.name}</span> 78 - <span className="truncate text-xs">{user.email}</span> 69 + <span className="truncate font-semibold">{data?.displayName ?? `@${data?.handle}`}</span> 79 70 </div> 80 - </div> 81 - </DropdownMenuLabel> 82 - <DropdownMenuSeparator /> 83 - <DropdownMenuGroup> 71 + <ChevronsUpDown className="ml-auto size-4" /> 72 + </SidebarMenuButton> 73 + </DropdownMenuTrigger> 74 + <DropdownMenuContent 75 + className="w-[--radix-dropdown-menu-trigger-width] min-w-56 rounded-lg" 76 + side={isMobile ? "bottom" : "right"} 77 + align="end" 78 + sideOffset={4} 79 + > 80 + <DropdownMenuLabel className="p-0 font-normal"> 81 + <div className="flex items-center gap-2 px-1 py-1.5 text-left text-sm"> 82 + <Avatar className="h-8 w-8 rounded-lg"> 83 + <AvatarImage src={data?.avatar} alt={data?.displayName ?? `@${data?.handle}`} /> 84 + <AvatarFallback className="rounded-lg">{data?.handle.substring(2)}</AvatarFallback> 85 + </Avatar> 86 + <div className="grid flex-1 text-left text-sm leading-tight"> 87 + <span className="truncate font-semibold">{data?.displayName ?? `@${data?.handle}`}</span> 88 + </div> 89 + </div> 90 + </DropdownMenuLabel> 91 + <DropdownMenuSeparator /> 92 + <DropdownMenuGroup> 93 + <DropdownMenuItem> 94 + <BadgeCheck /> 95 + Account 96 + </DropdownMenuItem> 97 + </DropdownMenuGroup> 98 + <DropdownMenuSeparator /> 84 99 <DropdownMenuItem> 85 - <Sparkles /> 86 - Upgrade to Pro 100 + <LogOut /> 101 + Log out 87 102 </DropdownMenuItem> 88 - </DropdownMenuGroup> 89 - <DropdownMenuSeparator /> 90 - <DropdownMenuGroup> 91 - <DropdownMenuItem> 92 - <BadgeCheck /> 93 - Account 94 - </DropdownMenuItem> 95 - <DropdownMenuItem> 96 - <CreditCard /> 97 - Billing 98 - </DropdownMenuItem> 99 - <DropdownMenuItem> 100 - <Bell /> 101 - Notifications 102 - </DropdownMenuItem> 103 - </DropdownMenuGroup> 104 - <DropdownMenuSeparator /> 105 - <DropdownMenuItem> 106 - <LogOut /> 107 - Log out 108 - </DropdownMenuItem> 109 - </DropdownMenuContent> 110 - </DropdownMenu> 103 + </DropdownMenuContent> 104 + </DropdownMenu> 105 + </QueryPlaceholder> 111 106 </SidebarMenuItem> 112 107 </SidebarMenu> 113 108 )
+4 -2
apps/web/src/components/query-placeholder.tsx
··· 1 1 import type { UseQueryResult } from '@tanstack/react-query'; 2 - import { PropsWithChildren } from 'react'; 2 + import { PropsWithChildren, ReactNode } from 'react'; 3 3 import { Skeleton } from './ui/skeleton'; 4 4 import { Alert, AlertDescription, AlertTitle } from './ui/alert'; 5 5 import { AlertCircle } from 'lucide-react'; ··· 9 9 query: UseQueryResult<TData, TError>; 10 10 cards?: boolean; 11 11 cardsCount?: number; 12 + noData?: ReactNode; 12 13 }>; 13 14 14 15 const QueryPlaceholder = <TData = {}, TError = Error>( ··· 17 18 children, 18 19 cards = false, 19 20 cardsCount = 3, 21 + noData = <></>, 20 22 }: QueryPlaceholderProps<TData, TError> 21 23 ) => { 22 24 if (query.isPending || query.isLoading) { ··· 50 52 } else if (query.data) { 51 53 return children; 52 54 } 53 - return <></>; 55 + return noData; 54 56 }; 55 57 56 58 export default QueryPlaceholder;
+24
apps/web/src/components/ui/label.tsx
··· 1 + import * as React from "react" 2 + import * as LabelPrimitive from "@radix-ui/react-label" 3 + import { cva, type VariantProps } from "class-variance-authority" 4 + 5 + import { cn } from "@/lib/utils" 6 + 7 + const labelVariants = cva( 8 + "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70" 9 + ) 10 + 11 + const Label = React.forwardRef< 12 + React.ElementRef<typeof LabelPrimitive.Root>, 13 + React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & 14 + VariantProps<typeof labelVariants> 15 + >(({ className, ...props }, ref) => ( 16 + <LabelPrimitive.Root 17 + ref={ref} 18 + className={cn(labelVariants(), className)} 19 + {...props} 20 + /> 21 + )) 22 + Label.displayName = LabelPrimitive.Root.displayName 23 + 24 + export { Label }
+1 -1
apps/web/src/lib/utils.ts
··· 5 5 return twMerge(clsx(inputs)) 6 6 } 7 7 8 - export const SERVER_URL = `api.dev.hayden.moe`; 8 + export const SERVER_URL = `convenient-newport-amateur-schedules.trycloudflare.com`;
+1 -1
apps/web/src/main.tsx
··· 17 17 } 18 18 } 19 19 20 - const creds = new CredentialManager({ service: `https://${SERVER_URL}` }); 20 + const creds = new CredentialManager({ service: `https://${SERVER_URL}/api/` }); 21 21 const rpc = new XRPC({ handler: creds }); 22 22 const queryClient = new QueryClient(); 23 23
+28 -3
apps/web/src/routeTree.gen.ts
··· 18 18 // Create Virtual Routes 19 19 20 20 const appIndexLazyImport = createFileRoute('/(app)/')() 21 + const authLoginLazyImport = createFileRoute('/(auth)/login')() 21 22 22 23 // Create/Update Routes 23 24 ··· 29 30 } as any) 30 31 .lazy(() => import('./routes/(app)/index.lazy').then((d) => d.Route)) 31 32 33 + const authLoginLazyRoute = authLoginLazyImport 34 + .update({ 35 + id: '/(auth)/login', 36 + path: '/login', 37 + getParentRoute: () => rootRoute, 38 + } as any) 39 + .lazy(() => import('./routes/(auth)/login.lazy').then((d) => d.Route)) 40 + 32 41 const appRecipesDidRkeyRoute = appRecipesDidRkeyImport.update({ 33 42 id: '/(app)/recipes/$did/$rkey', 34 43 path: '/recipes/$did/$rkey', ··· 39 48 40 49 declare module '@tanstack/react-router' { 41 50 interface FileRoutesByPath { 51 + '/(auth)/login': { 52 + id: '/(auth)/login' 53 + path: '/login' 54 + fullPath: '/login' 55 + preLoaderRoute: typeof authLoginLazyImport 56 + parentRoute: typeof rootRoute 57 + } 42 58 '/(app)/': { 43 59 id: '/(app)/' 44 60 path: '/' ··· 59 75 // Create and export the route tree 60 76 61 77 export interface FileRoutesByFullPath { 78 + '/login': typeof authLoginLazyRoute 62 79 '/': typeof appIndexLazyRoute 63 80 '/recipes/$did/$rkey': typeof appRecipesDidRkeyRoute 64 81 } 65 82 66 83 export interface FileRoutesByTo { 84 + '/login': typeof authLoginLazyRoute 67 85 '/': typeof appIndexLazyRoute 68 86 '/recipes/$did/$rkey': typeof appRecipesDidRkeyRoute 69 87 } 70 88 71 89 export interface FileRoutesById { 72 90 __root__: typeof rootRoute 91 + '/(auth)/login': typeof authLoginLazyRoute 73 92 '/(app)/': typeof appIndexLazyRoute 74 93 '/(app)/recipes/$did/$rkey': typeof appRecipesDidRkeyRoute 75 94 } 76 95 77 96 export interface FileRouteTypes { 78 97 fileRoutesByFullPath: FileRoutesByFullPath 79 - fullPaths: '/' | '/recipes/$did/$rkey' 98 + fullPaths: '/login' | '/' | '/recipes/$did/$rkey' 80 99 fileRoutesByTo: FileRoutesByTo 81 - to: '/' | '/recipes/$did/$rkey' 82 - id: '__root__' | '/(app)/' | '/(app)/recipes/$did/$rkey' 100 + to: '/login' | '/' | '/recipes/$did/$rkey' 101 + id: '__root__' | '/(auth)/login' | '/(app)/' | '/(app)/recipes/$did/$rkey' 83 102 fileRoutesById: FileRoutesById 84 103 } 85 104 86 105 export interface RootRouteChildren { 106 + authLoginLazyRoute: typeof authLoginLazyRoute 87 107 appIndexLazyRoute: typeof appIndexLazyRoute 88 108 appRecipesDidRkeyRoute: typeof appRecipesDidRkeyRoute 89 109 } 90 110 91 111 const rootRouteChildren: RootRouteChildren = { 112 + authLoginLazyRoute: authLoginLazyRoute, 92 113 appIndexLazyRoute: appIndexLazyRoute, 93 114 appRecipesDidRkeyRoute: appRecipesDidRkeyRoute, 94 115 } ··· 103 124 "__root__": { 104 125 "filePath": "__root.tsx", 105 126 "children": [ 127 + "/(auth)/login", 106 128 "/(app)/", 107 129 "/(app)/recipes/$did/$rkey" 108 130 ] 131 + }, 132 + "/(auth)/login": { 133 + "filePath": "(auth)/login.lazy.tsx" 109 134 }, 110 135 "/(app)/": { 111 136 "filePath": "(app)/index.lazy.tsx"
+2 -2
apps/web/src/routes/(app)/recipes.$did.$rkey.tsx
··· 45 45 </BreadcrumbItem> 46 46 <BreadcrumbSeparator className="hidden md:block" /> 47 47 <BreadcrumbItem className="hidden md:block"> 48 - <BreadcrumbLink asChild><Link href={`/profiles/${did}`}>{did}</Link></BreadcrumbLink> 48 + <BreadcrumbLink asChild><Link href={`/profiles/${did}`}>{query.data ? query.data.data.recipe.author.handle : did}</Link></BreadcrumbLink> 49 49 </BreadcrumbItem> 50 50 <BreadcrumbSeparator className="hidden md:block" /> 51 51 <BreadcrumbItem> 52 - <BreadcrumbPage>{rkey}</BreadcrumbPage> 52 + <BreadcrumbPage>{query.data ? query.data.data.recipe.title : rkey}</BreadcrumbPage> 53 53 </BreadcrumbItem> 54 54 </BreadcrumbList> 55 55 </Breadcrumb>
+83
apps/web/src/routes/(auth)/login.lazy.tsx
··· 1 + import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from '@/components/ui/breadcrumb'; 2 + import { Button } from '@/components/ui/button'; 3 + import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@/components/ui/card'; 4 + import { Input } from '@/components/ui/input'; 5 + import { Label } from '@/components/ui/label'; 6 + import { Separator } from '@/components/ui/separator'; 7 + import { SidebarTrigger } from '@/components/ui/sidebar'; 8 + import { SERVER_URL } from '@/lib/utils'; 9 + import { useMutation } from '@tanstack/react-query'; 10 + import { createLazyFileRoute } from '@tanstack/react-router' 11 + import { useState } from 'react'; 12 + 13 + export const Route = createLazyFileRoute('/(auth)/login')({ 14 + component: RouteComponent, 15 + }) 16 + 17 + function RouteComponent() { 18 + const [handle, setHandle] = useState(''); 19 + 20 + const { mutate, isPending } = useMutation({ 21 + mutationKey: ['login'], 22 + mutationFn: async () => { 23 + const res = await fetch(`https://${SERVER_URL}/oauth/login`, { 24 + method: 'POST', 25 + body: JSON.stringify({ actor: handle }), 26 + redirect: 'manual', 27 + headers: { 28 + 'Content-Type': 'application/json', 29 + 'Accept': 'application/json', 30 + }, 31 + }); 32 + return res.json() 33 + }, 34 + onSuccess: (resp: { url: string }) => { 35 + document.location.href = resp.url; 36 + }, 37 + }); 38 + 39 + return ( 40 + <> 41 + <header className="flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-[[data-collapsible=icon]]/sidebar-wrapper:h-12"> 42 + <div className="flex items-center gap-2 px-4"> 43 + <SidebarTrigger className="-ml-1" /> 44 + <Separator orientation="vertical" className="mr-2 h-4" /> 45 + <Breadcrumb> 46 + <BreadcrumbList> 47 + <BreadcrumbItem> 48 + <BreadcrumbPage>Log in</BreadcrumbPage> 49 + </BreadcrumbItem> 50 + </BreadcrumbList> 51 + </Breadcrumb> 52 + </div> 53 + </header> 54 + <div className="flex flex-1 flex-col items-center justify-center gap-4 p-4 pt-0"> 55 + <Card className="max-w-xl w-full"> 56 + <CardHeader> 57 + <CardTitle>Log in</CardTitle> 58 + <CardDescription> 59 + Don't have an account? <a className="font-bold text-primary" href="https://bsky.app/" target="_blank">Sign up on Bluesky!</a> 60 + </CardDescription> 61 + </CardHeader> 62 + <CardContent> 63 + <div className="flex flex-col gap-2"> 64 + <Label htmlFor="handle">Handle</Label> 65 + <Input 66 + type="text" 67 + id="handle" 68 + name="handle" 69 + placeholder="johndoe.bsky.social" 70 + required 71 + value={handle} 72 + onChange={e => setHandle(e.currentTarget.value)} 73 + /> 74 + </div> 75 + </CardContent> 76 + <CardFooter> 77 + <Button onClick={() => mutate()} disabled={isPending}>Log in</Button> 78 + </CardFooter> 79 + </Card> 80 + </div> 81 + </> 82 + ); 83 + }
+1
apps/web/src/vite-env.d.ts
··· 1 1 /// <reference types="vite/client" /> 2 2 /// <reference types="@cookware/lexicons" /> 3 + /// <reference types="@atcute/bluesky/lexicons" />
+2 -11
docker-compose.yaml
··· 25 25 volumes: 26 26 - libsql:/var/lib/sqld 27 27 28 - api_tunnel: 28 + tunnel: 29 29 image: cloudflare/cloudflared 30 30 restart: unless-stopped 31 - command: tunnel --url http://host.docker.internal:8080 32 - extra_hosts: 33 - - "host.docker.internal:host-gateway" 34 - 35 - web_tunnel: 36 - image: cloudflare/cloudflared 37 - restart: unless-stopped 38 - command: tunnel --url http://host.docker.internal:5173 39 - extra_hosts: 40 - - "host.docker.internal:host-gateway" 31 + command: tunnel --url http://caddy 41 32 42 33 volumes: 43 34 caddy_data: {}
+12 -1
lexicons/moe/hayden/cookware/getRecipe.json
··· 34 34 }, 35 35 "result": { 36 36 "type": "object", 37 - "required": ["title", "ingredients", "steps"], 37 + "required": ["author", "title", "ingredients", "steps"], 38 38 "properties": { 39 + "author": { 40 + "type": "ref", 41 + "ref": "#authorInfo" 42 + }, 39 43 "title": { "type": "string" }, 40 44 "description": { "type": "string" }, 41 45 "ingredients": { ··· 52 56 "ref": "moe.hayden.cookware.defs#step" 53 57 } 54 58 } 59 + } 60 + }, 61 + "authorInfo": { 62 + "type": "object", 63 + "required": ["handle"], 64 + "properties": { 65 + "handle": { "type": "string" } 55 66 } 56 67 } 57 68 }
+5
libs/lexicons/src/atcute.ts
··· 48 48 interface Output { 49 49 recipe: Result; 50 50 } 51 + interface AuthorInfo { 52 + [Brand.Type]?: "moe.hayden.cookware.getRecipe#authorInfo"; 53 + handle: string; 54 + } 51 55 interface Result { 52 56 [Brand.Type]?: "moe.hayden.cookware.getRecipe#result"; 57 + author: AuthorInfo; 53 58 ingredients: MoeHaydenCookwareDefs.Ingredient[]; 54 59 steps: MoeHaydenCookwareDefs.Step[]; 55 60 title: string;
+693 -323
pnpm-lock.yaml
··· 10 10 11 11 apps/api: 12 12 dependencies: 13 + '@atcute/client': 14 + specifier: ^2.0.6 15 + version: 2.0.6 16 + '@atproto/api': 17 + specifier: ^0.13.19 18 + version: 0.13.19 19 + '@atproto/jwk-jose': 20 + specifier: ^0.1.2 21 + version: 0.1.2 22 + '@atproto/oauth-client-node': 23 + specifier: ^0.2.3 24 + version: 0.2.3 13 25 '@hono/node-server': 14 26 specifier: ^1.13.7 15 27 version: 1.13.7(hono@4.6.12) ··· 24 36 version: 4.0.8 25 37 drizzle-orm: 26 38 specifier: ^0.37.0 27 - version: 0.37.0(@libsql/client@0.14.0(bufferutil@4.0.8))(@types/react@18.3.12)(react@18.3.1) 39 + version: 0.37.0(@libsql/client@0.14.0(bufferutil@4.0.8))(@types/react@19.0.1)(react@19.0.0) 28 40 hono: 29 41 specifier: ^4.6.12 30 42 version: 4.6.12 43 + hono-sessions: 44 + specifier: ^0.7.0 45 + version: 0.7.0 31 46 jose: 32 47 specifier: ^5.9.6 33 48 version: 5.9.6 ··· 86 101 '@atcute/oauth-browser-client': 87 102 specifier: ^1.0.7 88 103 version: 1.0.7 89 - '@cookware/lexicons': 90 - specifier: workspace:^ 91 - version: link:../../libs/lexicons 92 104 '@radix-ui/react-avatar': 93 105 specifier: ^1.1.1 94 - version: 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 106 + version: 1.1.1(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 95 107 '@radix-ui/react-collapsible': 96 108 specifier: ^1.1.1 97 - version: 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 109 + version: 1.1.1(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 98 110 '@radix-ui/react-dialog': 99 111 specifier: ^1.1.2 100 - version: 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 112 + version: 1.1.2(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 101 113 '@radix-ui/react-dropdown-menu': 102 114 specifier: ^2.1.2 103 - version: 2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 115 + version: 2.1.2(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 116 + '@radix-ui/react-label': 117 + specifier: ^2.1.0 118 + version: 2.1.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 104 119 '@radix-ui/react-separator': 105 120 specifier: ^1.1.0 106 - version: 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 121 + version: 1.1.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 107 122 '@radix-ui/react-slot': 108 123 specifier: ^1.1.0 109 - version: 1.1.0(@types/react@18.3.12)(react@18.3.1) 124 + version: 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 110 125 '@radix-ui/react-tooltip': 111 126 specifier: ^1.1.4 112 - version: 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 127 + version: 1.1.4(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 113 128 '@tanstack/react-query': 114 129 specifier: ^5.62.2 115 - version: 5.62.2(react@18.3.1) 130 + version: 5.62.2(react@19.0.0-rc-7283a213-20241206) 116 131 '@tanstack/react-query-devtools': 117 132 specifier: ^5.62.2 118 - version: 5.62.2(@tanstack/react-query@5.62.2(react@18.3.1))(react@18.3.1) 133 + version: 5.62.2(@tanstack/react-query@5.62.2(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 119 134 '@tanstack/react-router': 120 135 specifier: ^1.85.5 121 - version: 1.85.5(@tanstack/router-generator@1.85.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 136 + version: 1.85.5(@tanstack/router-generator@1.85.3)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 137 + axios: 138 + specifier: ^1.7.9 139 + version: 1.7.9 122 140 class-variance-authority: 123 141 specifier: ^0.7.1 124 142 version: 0.7.1 ··· 127 145 version: 2.1.1 128 146 lucide-react: 129 147 specifier: ^0.464.0 130 - version: 0.464.0(react@18.3.1) 131 - react: 132 - specifier: ^18.3.1 133 - version: 18.3.1 148 + version: 0.464.0(react@19.0.0-rc-7283a213-20241206) 134 149 react-dom: 135 - specifier: ^18.3.1 136 - version: 18.3.1(react@18.3.1) 150 + specifier: 19.0.0-rc-f994737d14-20240522 151 + version: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 137 152 tailwind-merge: 138 153 specifier: ^2.5.5 139 154 version: 2.5.5 ··· 141 156 specifier: ^1.0.7 142 157 version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@22.10.1)(typescript@5.6.3))) 143 158 devDependencies: 159 + '@atcute/bluesky': 160 + specifier: ^1.0.9 161 + version: 1.0.9(@atcute/client@2.0.6) 162 + '@cookware/lexicons': 163 + specifier: workspace:* 164 + version: link:../../libs/lexicons 144 165 '@eslint/js': 145 166 specifier: ^9.15.0 146 167 version: 9.16.0 ··· 149 170 version: 5.62.1(eslint@9.16.0(jiti@2.4.1))(typescript@5.6.3) 150 171 '@tanstack/router-devtools': 151 172 specifier: ^1.85.5 152 - version: 1.85.5(@tanstack/react-router@1.85.5(@tanstack/router-generator@1.85.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 173 + version: 1.85.5(@tanstack/react-router@1.85.5(@tanstack/router-generator@1.85.3)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206))(csstype@3.1.3)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 153 174 '@tanstack/router-plugin': 154 175 specifier: ^1.85.3 155 176 version: 1.85.3(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1)) ··· 157 178 specifier: ^22.10.1 158 179 version: 22.10.1 159 180 '@types/react': 160 - specifier: ^18.3.12 161 - version: 18.3.12 181 + specifier: ^19.0.0 182 + version: 19.0.1 162 183 '@types/react-dom': 163 - specifier: ^18.3.1 164 - version: 18.3.1 184 + specifier: ^19.0.0 185 + version: 19.0.1 165 186 '@vitejs/plugin-react-swc': 166 187 specifier: ^3.5.0 167 188 version: 3.7.2(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1)) ··· 183 204 postcss: 184 205 specifier: ^8.4.49 185 206 version: 8.4.49 207 + react: 208 + specifier: 19.0.0-rc-7283a213-20241206 209 + version: 19.0.0-rc-7283a213-20241206 186 210 tailwindcss: 187 211 specifier: ^3.4.16 188 212 version: 3.4.16(ts-node@10.9.2(@swc/core@1.9.3)(@types/node@22.10.1)(typescript@5.6.3)) ··· 241 265 '@atcute/oauth-browser-client@1.0.7': 242 266 resolution: {integrity: sha512-ikf3FscGZXYU+S0K4n9eDUMg6pS//g/Zr159+bznxO3Wn2JYBohEIxzy29OIEExXD/qAYMq9kfqvo2d0gs4JWQ==} 243 267 268 + '@atproto-labs/did-resolver@0.1.6': 269 + resolution: {integrity: sha512-qddGpcjKj9SUMlZW1d+/dY/03CDVcmOAlAozXEXsU2H5OT1vFAdMmOp0VbwK0y99RH3DvAQtyQKiRzoPFqp8rA==} 270 + 271 + '@atproto-labs/fetch-node@0.1.4': 272 + resolution: {integrity: sha512-hwYx0XpgIl2zydRy13DtWvywruuHk1EX+yCjqjgUIezUm8fi35ZN4QvR6INEm0MpN2MD/kQsImPbd8ZftzZ3zw==} 273 + 274 + '@atproto-labs/fetch@0.1.2': 275 + resolution: {integrity: sha512-7mQQIRtVenqtdBQKCqoLjyAhPS2aA56EGEjyz5zB3sramM3qkrvzyusr55GAzGDS0tvB6cy9cDEtSLmfK7LUnA==} 276 + 277 + '@atproto-labs/handle-resolver-node@0.1.8': 278 + resolution: {integrity: sha512-AlH7qRtmhZFRCcv1HK9OYiZpTFGcX39zjzzANq42zVLlfqoJr3ugnv7mAXGHE8woVguKtbypHnrVCDceoBAs2w==} 279 + 280 + '@atproto-labs/handle-resolver@0.1.4': 281 + resolution: {integrity: sha512-tnGUD2mQ6c8xHs3eeVJgwYqM3FHoTZZbOcOGKqO1A5cuIG+gElwEhpWwpwX5LI7FF4J8eS9BOHLl3NFS7Q8QXg==} 282 + 283 + '@atproto-labs/identity-resolver@0.1.7': 284 + resolution: {integrity: sha512-aRmY0cp+aFDgxAD62jjCPUDJMqryuXmt0hK9ls8LHeSzszr58BFDwybLaW6Izz2KISQlzu75Ia0c6uRymdmcYA==} 285 + 286 + '@atproto-labs/pipe@0.1.0': 287 + resolution: {integrity: sha512-ghOqHFyJlQVFPESzlVHjKroP0tPzbmG5Jms0dNI9yLDEfL8xp4OFPWLX4f6T8mRq69wWs4nIDM3sSsFbFqLa1w==} 288 + 289 + '@atproto-labs/simple-store-memory@0.1.1': 290 + resolution: {integrity: sha512-PCRqhnZ8NBNBvLku53O56T0lsVOtclfIrQU/rwLCc4+p45/SBPrRYNBi6YFq5rxZbK6Njos9MCmILV/KLQxrWA==} 291 + 292 + '@atproto-labs/simple-store@0.1.1': 293 + resolution: {integrity: sha512-WKILW2b3QbAYKh+w5U2x6p5FqqLl0nAeLwGeDY+KjX01K4Dq3vQTR9b/qNp0jZm48CabPQVrqCv0PPU9LgRRRg==} 294 + 295 + '@atproto/api@0.13.19': 296 + resolution: {integrity: sha512-rLWQBZaOIk3ds1Fx9CwrdyX3X2GbdSEvVJ9mdSPNX40joiEaE1ljGMOcziFipbvZacXynozE4E0Sb1CgOhzfmA==} 297 + 298 + '@atproto/common-web@0.3.1': 299 + resolution: {integrity: sha512-N7wiTnus5vAr+lT//0y8m/FaHHLJ9LpGuEwkwDAeV3LCiPif4m/FS8x/QOYrx1PdZQwKso95RAPzCGWQBH5j6Q==} 300 + 301 + '@atproto/did@0.1.3': 302 + resolution: {integrity: sha512-ULD8Gw/KRRwLFZ2Z2L4DjmdOMrg8IYYlcjdSc+GQ2/QJSVnD2zaJJVTLd3vls121wGt/583rNaiZTT2DpBze4w==} 303 + 304 + '@atproto/jwk-jose@0.1.2': 305 + resolution: {integrity: sha512-lDwc/6lLn2aZ/JpyyggyjLFsJPMntrVzryyGUx5aNpuTS8SIuc4Ky0REhxqfLopQXJJZCuRRjagHG3uP05/moQ==} 306 + 307 + '@atproto/jwk-webcrypto@0.1.2': 308 + resolution: {integrity: sha512-vTBUbUZXh0GI+6KJiPGukmI4BQEHFAij8fJJ4WnReF/hefAs3ISZtrWZHGBebz+q2EcExYlnhhlmxvDzV7veGw==} 309 + 310 + '@atproto/jwk@0.1.1': 311 + resolution: {integrity: sha512-6h/bj1APUk7QcV9t/oA6+9DB5NZx9SZru9x+/pV5oHFI9Xz4ZuM5+dq1PfsJV54pZyqdnZ6W6M717cxoC7q7og==} 312 + 313 + '@atproto/lexicon@0.4.3': 314 + resolution: {integrity: sha512-lFVZXe1S1pJP0dcxvJuHP3r/a+EAIBwwU7jUK+r8iLhIja+ml6NmYv8KeFHmIJATh03spEQ9s02duDmFVdCoXg==} 315 + 316 + '@atproto/oauth-client-node@0.2.3': 317 + resolution: {integrity: sha512-crHxZaP9T/i7O9fOhALcFtW1EP/tVblDnWoaIiZ3vL/hvVLwSUad/wvG2WPcVURzLSbigDInhn7rZZSzLxJacg==} 318 + 319 + '@atproto/oauth-client@0.3.3': 320 + resolution: {integrity: sha512-qC6ekTdbUrXxDwuUC9jInWw7TuJYkl/EuReoLcvZ7dv9KbCUEuoYT0TNROLGp24cxRH65q/PVlp10Ov7lkxteg==} 321 + 322 + '@atproto/oauth-types@0.2.1': 323 + resolution: {integrity: sha512-hDisUXzcq5KU1HMuCYZ8Kcz7BePl7V11bFjjgZvND3mdSphiyBpJ8MCNn3QzAa6cXpFo0w9PDcYMAlCCRZHdVw==} 324 + 325 + '@atproto/syntax@0.3.1': 326 + resolution: {integrity: sha512-fzW0Mg1QUOVCWUD3RgEsDt6d1OZ6DdFmbKcDdbzUfh0t4rhtRAC05KbZYmxuMPWDAiJ4BbbQ5dkAc/mNypMXkw==} 327 + 328 + '@atproto/xrpc@0.6.4': 329 + resolution: {integrity: sha512-9ZAJ8nsXTqC4XFyS0E1Wlg7bAvonhXQNQ3Ocs1L1LIwFLXvsw/4fNpIHXxvXvqTCVeyHLbImOnE9UiO1c/qIYA==} 330 + 244 331 '@babel/code-frame@7.26.2': 245 332 resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 246 333 engines: {node: '>=6.9.0'} ··· 1233 1320 '@types/react': 1234 1321 optional: true 1235 1322 1323 + '@radix-ui/react-label@2.1.0': 1324 + resolution: {integrity: sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw==} 1325 + peerDependencies: 1326 + '@types/react': '*' 1327 + '@types/react-dom': '*' 1328 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1329 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1330 + peerDependenciesMeta: 1331 + '@types/react': 1332 + optional: true 1333 + '@types/react-dom': 1334 + optional: true 1335 + 1236 1336 '@radix-ui/react-menu@2.1.2': 1237 1337 resolution: {integrity: sha512-lZ0R4qR2Al6fZ4yCCZzu/ReTFrylHFxIqy7OezIpWF4bL0o9biKo0pFIvkaew3TyZ9Fy5gYVrR5zCGZBVbO1zg==} 1238 1338 peerDependencies: ··· 1694 1794 '@types/node@22.10.1': 1695 1795 resolution: {integrity: sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==} 1696 1796 1697 - '@types/prop-types@15.7.13': 1698 - resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} 1797 + '@types/react-dom@19.0.1': 1798 + resolution: {integrity: sha512-hljHij7MpWPKF6u5vojuyfV0YA4YURsQG7KT6SzV0Zs2BXAtgdTxG6A229Ub/xiWV4w/7JL8fi6aAyjshH4meA==} 1699 1799 1700 - '@types/react-dom@18.3.1': 1701 - resolution: {integrity: sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==} 1702 - 1703 - '@types/react@18.3.12': 1704 - resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} 1800 + '@types/react@19.0.1': 1801 + resolution: {integrity: sha512-YW6614BDhqbpR5KtUYzTA+zlA7nayzJRA9ljz9CQoxthR0sDisYZLuvSMsil36t4EH/uAt8T52Xb4sVw17G+SQ==} 1705 1802 1706 1803 '@types/ws@8.5.13': 1707 1804 resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} ··· 1826 1923 resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} 1827 1924 engines: {node: '>=10'} 1828 1925 1926 + asynckit@0.4.0: 1927 + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 1928 + 1829 1929 atomic-sleep@1.0.0: 1830 1930 resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} 1831 1931 engines: {node: '>=8.0.0'} ··· 1837 1937 peerDependencies: 1838 1938 postcss: ^8.1.0 1839 1939 1940 + await-lock@2.2.2: 1941 + resolution: {integrity: sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==} 1942 + 1943 + axios@1.7.9: 1944 + resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} 1945 + 1840 1946 babel-dead-code-elimination@1.0.6: 1841 1947 resolution: {integrity: sha512-JxFi9qyRJpN0LjEbbjbN8g0ux71Qppn9R8Qe3k6QzHg2CaKsbUQtbn307LQGiDLGjV6JCtEFqfxzVig9MyDCHQ==} 1842 1948 ··· 1919 2025 colorette@2.0.20: 1920 2026 resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} 1921 2027 2028 + combined-stream@1.0.8: 2029 + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 2030 + engines: {node: '>= 0.8'} 2031 + 1922 2032 commander@4.1.1: 1923 2033 resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 1924 2034 engines: {node: '>= 6'} ··· 1967 2077 deep-is@0.1.4: 1968 2078 resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1969 2079 2080 + delayed-stream@1.0.0: 2081 + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 2082 + engines: {node: '>=0.4.0'} 2083 + 1970 2084 detect-libc@2.0.2: 1971 2085 resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} 1972 2086 engines: {node: '>=8'} ··· 2242 2356 flatted@3.3.2: 2243 2357 resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} 2244 2358 2359 + follow-redirects@1.15.9: 2360 + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} 2361 + engines: {node: '>=4.0'} 2362 + peerDependencies: 2363 + debug: '*' 2364 + peerDependenciesMeta: 2365 + debug: 2366 + optional: true 2367 + 2245 2368 foreground-child@3.3.0: 2246 2369 resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} 2247 2370 engines: {node: '>=14'} 2371 + 2372 + form-data@4.0.1: 2373 + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} 2374 + engines: {node: '>= 6'} 2248 2375 2249 2376 formdata-polyfill@4.0.10: 2250 2377 resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} ··· 2320 2447 help-me@5.0.0: 2321 2448 resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} 2322 2449 2450 + hono-sessions@0.7.0: 2451 + resolution: {integrity: sha512-bclJUXaBq66R7jEjccqs/tc9WPJiS/wbWV5rrSMuYkTTCRF24wUi2nHjIummb7yzSpkT3GqLRifZkvNbzSMTzg==} 2452 + 2323 2453 hono@4.6.12: 2324 2454 resolution: {integrity: sha512-eHtf4kSDNw6VVrdbd5IQi16r22m3s7mWPLd7xOMhg1a/Yyb1A0qpUFq8xYMX4FMuDe1nTKeMX5rTx7Nmw+a+Ag==} 2325 2455 engines: {node: '>=16.9.0'} ··· 2339 2469 invariant@2.2.4: 2340 2470 resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} 2341 2471 2472 + ipaddr.js@2.2.0: 2473 + resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} 2474 + engines: {node: '>= 10'} 2475 + 2476 + iron-webcrypto@0.10.1: 2477 + resolution: {integrity: sha512-QGOS8MRMnj/UiOa+aMIgfyHcvkhqNUsUxb1XzskENvbo+rEfp6TOwqd1KPuDzXC4OnGHcMSVxDGRoilqB8ViqA==} 2478 + 2342 2479 is-binary-path@2.1.0: 2343 2480 resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 2344 2481 engines: {node: '>=8'} ··· 2365 2502 2366 2503 isexe@2.0.0: 2367 2504 resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 2505 + 2506 + iso-datestring-validator@2.2.2: 2507 + resolution: {integrity: sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==} 2368 2508 2369 2509 jackspeak@3.4.3: 2370 2510 resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} ··· 2480 2620 resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 2481 2621 engines: {node: '>=8.6'} 2482 2622 2623 + mime-db@1.52.0: 2624 + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 2625 + engines: {node: '>= 0.6'} 2626 + 2627 + mime-types@2.1.35: 2628 + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 2629 + engines: {node: '>= 0.6'} 2630 + 2483 2631 minimatch@10.0.1: 2484 2632 resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} 2485 2633 engines: {node: 20 || >=22} ··· 2500 2648 2501 2649 ms@2.1.3: 2502 2650 resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 2651 + 2652 + multiformats@9.9.0: 2653 + resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} 2503 2654 2504 2655 mz@2.7.0: 2505 2656 resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} ··· 2703 2854 promise-limit@2.7.0: 2704 2855 resolution: {integrity: sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==} 2705 2856 2857 + proxy-from-env@1.1.0: 2858 + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} 2859 + 2860 + psl@1.15.0: 2861 + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} 2862 + 2706 2863 pump@3.0.2: 2707 2864 resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} 2708 2865 ··· 2716 2873 quick-format-unescaped@4.0.4: 2717 2874 resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} 2718 2875 2719 - react-dom@18.3.1: 2720 - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} 2876 + react-dom@19.0.0-rc-f994737d14-20240522: 2877 + resolution: {integrity: sha512-J4CsfTSptPKkhaPbaR6n/KohQiHZTrRZ8GL4H8rbAqN/Qpy69g2MIoLBr5/PUX21ye6JxC1ZRWJFna7Xdg1pdA==} 2721 2878 peerDependencies: 2722 - react: ^18.3.1 2879 + react: 19.0.0-rc-f994737d14-20240522 2723 2880 2724 2881 react-remove-scroll-bar@2.3.6: 2725 2882 resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} ··· 2751 2908 '@types/react': 2752 2909 optional: true 2753 2910 2754 - react@18.3.1: 2755 - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} 2911 + react@19.0.0: 2912 + resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} 2913 + engines: {node: '>=0.10.0'} 2914 + 2915 + react@19.0.0-rc-7283a213-20241206: 2916 + resolution: {integrity: sha512-Jl/WSFghvrXr58g29BOBctG+uh3qvB05O149bsYVzv1OAOWe8ADElQn0ujSHjxcWAgU5UzsCqqRauzngjd/hgw==} 2756 2917 engines: {node: '>=0.10.0'} 2757 2918 2758 2919 read-cache@1.0.0: ··· 2806 2967 resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} 2807 2968 engines: {node: '>=10'} 2808 2969 2809 - scheduler@0.23.2: 2810 - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} 2970 + scheduler@0.25.0-rc-f994737d14-20240522: 2971 + resolution: {integrity: sha512-qS+xGFF7AljP2APO2iJe8zESNsK20k25MACz+WGOXPybUsRdi1ssvaoF93im2nSX2q/XT3wKkjdz6RQfbmaxdw==} 2811 2972 2812 2973 secure-json-parse@2.7.0: 2813 2974 resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} ··· 2924 3085 resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} 2925 3086 engines: {node: '>=12.0.0'} 2926 3087 3088 + tlds@1.255.0: 3089 + resolution: {integrity: sha512-tcwMRIioTcF/FcxLev8MJWxCp+GUALRhFEqbDoZrnowmKSGqPrl5pqS+Sut2m8BgJ6S4FExCSSpGffZ0Tks6Aw==} 3090 + hasBin: true 3091 + 2927 3092 to-regex-range@5.0.1: 2928 3093 resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2929 3094 engines: {node: '>=8.0'} ··· 3009 3174 engines: {node: '>=14.17'} 3010 3175 hasBin: true 3011 3176 3177 + uint8arrays@3.0.0: 3178 + resolution: {integrity: sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==} 3179 + 3012 3180 undici-types@6.20.0: 3013 3181 resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 3182 + 3183 + undici@6.21.0: 3184 + resolution: {integrity: sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==} 3185 + engines: {node: '>=18.17'} 3014 3186 3015 3187 unplugin@1.16.0: 3016 3188 resolution: {integrity: sha512-5liCNPuJW8dqh3+DM6uNM2EI3MLLpCKp/KY+9pB5M2S2SR2qvvDHhKgBOaTWEbZTAws3CXfB0rKTIolWKL05VQ==} ··· 3187 3359 '@atcute/client': 2.0.6 3188 3360 nanoid: 5.0.9 3189 3361 3362 + '@atproto-labs/did-resolver@0.1.6': 3363 + dependencies: 3364 + '@atproto-labs/fetch': 0.1.2 3365 + '@atproto-labs/pipe': 0.1.0 3366 + '@atproto-labs/simple-store': 0.1.1 3367 + '@atproto-labs/simple-store-memory': 0.1.1 3368 + '@atproto/did': 0.1.3 3369 + zod: 3.23.8 3370 + 3371 + '@atproto-labs/fetch-node@0.1.4': 3372 + dependencies: 3373 + '@atproto-labs/fetch': 0.1.2 3374 + '@atproto-labs/pipe': 0.1.0 3375 + ipaddr.js: 2.2.0 3376 + psl: 1.15.0 3377 + undici: 6.21.0 3378 + 3379 + '@atproto-labs/fetch@0.1.2': 3380 + dependencies: 3381 + '@atproto-labs/pipe': 0.1.0 3382 + optionalDependencies: 3383 + zod: 3.23.8 3384 + 3385 + '@atproto-labs/handle-resolver-node@0.1.8': 3386 + dependencies: 3387 + '@atproto-labs/fetch-node': 0.1.4 3388 + '@atproto-labs/handle-resolver': 0.1.4 3389 + '@atproto/did': 0.1.3 3390 + 3391 + '@atproto-labs/handle-resolver@0.1.4': 3392 + dependencies: 3393 + '@atproto-labs/simple-store': 0.1.1 3394 + '@atproto-labs/simple-store-memory': 0.1.1 3395 + '@atproto/did': 0.1.3 3396 + zod: 3.23.8 3397 + 3398 + '@atproto-labs/identity-resolver@0.1.7': 3399 + dependencies: 3400 + '@atproto-labs/did-resolver': 0.1.6 3401 + '@atproto-labs/handle-resolver': 0.1.4 3402 + '@atproto/syntax': 0.3.1 3403 + 3404 + '@atproto-labs/pipe@0.1.0': {} 3405 + 3406 + '@atproto-labs/simple-store-memory@0.1.1': 3407 + dependencies: 3408 + '@atproto-labs/simple-store': 0.1.1 3409 + lru-cache: 10.4.3 3410 + 3411 + '@atproto-labs/simple-store@0.1.1': {} 3412 + 3413 + '@atproto/api@0.13.19': 3414 + dependencies: 3415 + '@atproto/common-web': 0.3.1 3416 + '@atproto/lexicon': 0.4.3 3417 + '@atproto/syntax': 0.3.1 3418 + '@atproto/xrpc': 0.6.4 3419 + await-lock: 2.2.2 3420 + multiformats: 9.9.0 3421 + tlds: 1.255.0 3422 + zod: 3.23.8 3423 + 3424 + '@atproto/common-web@0.3.1': 3425 + dependencies: 3426 + graphemer: 1.4.0 3427 + multiformats: 9.9.0 3428 + uint8arrays: 3.0.0 3429 + zod: 3.23.8 3430 + 3431 + '@atproto/did@0.1.3': 3432 + dependencies: 3433 + zod: 3.23.8 3434 + 3435 + '@atproto/jwk-jose@0.1.2': 3436 + dependencies: 3437 + '@atproto/jwk': 0.1.1 3438 + jose: 5.9.6 3439 + 3440 + '@atproto/jwk-webcrypto@0.1.2': 3441 + dependencies: 3442 + '@atproto/jwk': 0.1.1 3443 + '@atproto/jwk-jose': 0.1.2 3444 + 3445 + '@atproto/jwk@0.1.1': 3446 + dependencies: 3447 + multiformats: 9.9.0 3448 + zod: 3.23.8 3449 + 3450 + '@atproto/lexicon@0.4.3': 3451 + dependencies: 3452 + '@atproto/common-web': 0.3.1 3453 + '@atproto/syntax': 0.3.1 3454 + iso-datestring-validator: 2.2.2 3455 + multiformats: 9.9.0 3456 + zod: 3.23.8 3457 + 3458 + '@atproto/oauth-client-node@0.2.3': 3459 + dependencies: 3460 + '@atproto-labs/did-resolver': 0.1.6 3461 + '@atproto-labs/handle-resolver-node': 0.1.8 3462 + '@atproto-labs/simple-store': 0.1.1 3463 + '@atproto/did': 0.1.3 3464 + '@atproto/jwk': 0.1.1 3465 + '@atproto/jwk-jose': 0.1.2 3466 + '@atproto/jwk-webcrypto': 0.1.2 3467 + '@atproto/oauth-client': 0.3.3 3468 + '@atproto/oauth-types': 0.2.1 3469 + 3470 + '@atproto/oauth-client@0.3.3': 3471 + dependencies: 3472 + '@atproto-labs/did-resolver': 0.1.6 3473 + '@atproto-labs/fetch': 0.1.2 3474 + '@atproto-labs/handle-resolver': 0.1.4 3475 + '@atproto-labs/identity-resolver': 0.1.7 3476 + '@atproto-labs/simple-store': 0.1.1 3477 + '@atproto-labs/simple-store-memory': 0.1.1 3478 + '@atproto/did': 0.1.3 3479 + '@atproto/jwk': 0.1.1 3480 + '@atproto/oauth-types': 0.2.1 3481 + '@atproto/xrpc': 0.6.4 3482 + multiformats: 9.9.0 3483 + zod: 3.23.8 3484 + 3485 + '@atproto/oauth-types@0.2.1': 3486 + dependencies: 3487 + '@atproto/jwk': 0.1.1 3488 + zod: 3.23.8 3489 + 3490 + '@atproto/syntax@0.3.1': {} 3491 + 3492 + '@atproto/xrpc@0.6.4': 3493 + dependencies: 3494 + '@atproto/lexicon': 0.4.3 3495 + zod: 3.23.8 3496 + 3190 3497 '@babel/code-frame@7.26.2': 3191 3498 dependencies: 3192 3499 '@babel/helper-validator-identifier': 7.25.9 ··· 3646 3953 '@floating-ui/core': 1.6.8 3647 3954 '@floating-ui/utils': 0.2.8 3648 3955 3649 - '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 3956 + '@floating-ui/react-dom@2.1.2(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 3650 3957 dependencies: 3651 3958 '@floating-ui/dom': 1.6.12 3652 - react: 18.3.1 3653 - react-dom: 18.3.1(react@18.3.1) 3959 + react: 19.0.0-rc-7283a213-20241206 3960 + react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 3654 3961 3655 3962 '@floating-ui/utils@0.2.8': {} 3656 3963 ··· 3777 4084 3778 4085 '@radix-ui/primitive@1.1.0': {} 3779 4086 3780 - '@radix-ui/react-arrow@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 4087 + '@radix-ui/react-arrow@1.1.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 3781 4088 dependencies: 3782 - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3783 - react: 18.3.1 3784 - react-dom: 18.3.1(react@18.3.1) 4089 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4090 + react: 19.0.0-rc-7283a213-20241206 4091 + react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 3785 4092 optionalDependencies: 3786 - '@types/react': 18.3.12 3787 - '@types/react-dom': 18.3.1 4093 + '@types/react': 19.0.1 4094 + '@types/react-dom': 19.0.1 3788 4095 3789 - '@radix-ui/react-avatar@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 4096 + '@radix-ui/react-avatar@1.1.1(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 3790 4097 dependencies: 3791 - '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) 3792 - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3793 - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3794 - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3795 - react: 18.3.1 3796 - react-dom: 18.3.1(react@18.3.1) 4098 + '@radix-ui/react-context': 1.1.1(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4099 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4100 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4101 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4102 + react: 19.0.0-rc-7283a213-20241206 4103 + react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 3797 4104 optionalDependencies: 3798 - '@types/react': 18.3.12 3799 - '@types/react-dom': 18.3.1 4105 + '@types/react': 19.0.1 4106 + '@types/react-dom': 19.0.1 3800 4107 3801 - '@radix-ui/react-collapsible@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 4108 + '@radix-ui/react-collapsible@1.1.1(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 3802 4109 dependencies: 3803 4110 '@radix-ui/primitive': 1.1.0 3804 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3805 - '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) 3806 - '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3807 - '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3808 - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3809 - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3810 - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3811 - react: 18.3.1 3812 - react-dom: 18.3.1(react@18.3.1) 4111 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4112 + '@radix-ui/react-context': 1.1.1(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4113 + '@radix-ui/react-id': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4114 + '@radix-ui/react-presence': 1.1.1(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4115 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4116 + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4117 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4118 + react: 19.0.0-rc-7283a213-20241206 4119 + react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 3813 4120 optionalDependencies: 3814 - '@types/react': 18.3.12 3815 - '@types/react-dom': 18.3.1 4121 + '@types/react': 19.0.1 4122 + '@types/react-dom': 19.0.1 3816 4123 3817 - '@radix-ui/react-collection@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 4124 + '@radix-ui/react-collection@1.1.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 3818 4125 dependencies: 3819 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3820 - '@radix-ui/react-context': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3821 - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3822 - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3823 - react: 18.3.1 3824 - react-dom: 18.3.1(react@18.3.1) 4126 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4127 + '@radix-ui/react-context': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4128 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4129 + '@radix-ui/react-slot': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4130 + react: 19.0.0-rc-7283a213-20241206 4131 + react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 3825 4132 optionalDependencies: 3826 - '@types/react': 18.3.12 3827 - '@types/react-dom': 18.3.1 4133 + '@types/react': 19.0.1 4134 + '@types/react-dom': 19.0.1 3828 4135 3829 - '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.12)(react@18.3.1)': 4136 + '@radix-ui/react-compose-refs@1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206)': 3830 4137 dependencies: 3831 - react: 18.3.1 4138 + react: 19.0.0-rc-7283a213-20241206 3832 4139 optionalDependencies: 3833 - '@types/react': 18.3.12 4140 + '@types/react': 19.0.1 3834 4141 3835 - '@radix-ui/react-context@1.1.0(@types/react@18.3.12)(react@18.3.1)': 4142 + '@radix-ui/react-context@1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206)': 3836 4143 dependencies: 3837 - react: 18.3.1 4144 + react: 19.0.0-rc-7283a213-20241206 3838 4145 optionalDependencies: 3839 - '@types/react': 18.3.12 4146 + '@types/react': 19.0.1 3840 4147 3841 - '@radix-ui/react-context@1.1.1(@types/react@18.3.12)(react@18.3.1)': 4148 + '@radix-ui/react-context@1.1.1(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206)': 3842 4149 dependencies: 3843 - react: 18.3.1 4150 + react: 19.0.0-rc-7283a213-20241206 3844 4151 optionalDependencies: 3845 - '@types/react': 18.3.12 4152 + '@types/react': 19.0.1 3846 4153 3847 - '@radix-ui/react-dialog@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 4154 + '@radix-ui/react-dialog@1.1.2(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 3848 4155 dependencies: 3849 4156 '@radix-ui/primitive': 1.1.0 3850 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3851 - '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) 3852 - '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3853 - '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.12)(react@18.3.1) 3854 - '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3855 - '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3856 - '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3857 - '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3858 - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3859 - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3860 - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) 4157 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4158 + '@radix-ui/react-context': 1.1.1(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4159 + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4160 + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4161 + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4162 + '@radix-ui/react-id': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4163 + '@radix-ui/react-portal': 1.1.2(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4164 + '@radix-ui/react-presence': 1.1.1(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4165 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4166 + '@radix-ui/react-slot': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4167 + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 3861 4168 aria-hidden: 1.2.4 3862 - react: 18.3.1 3863 - react-dom: 18.3.1(react@18.3.1) 3864 - react-remove-scroll: 2.6.0(@types/react@18.3.12)(react@18.3.1) 4169 + react: 19.0.0-rc-7283a213-20241206 4170 + react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 4171 + react-remove-scroll: 2.6.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 3865 4172 optionalDependencies: 3866 - '@types/react': 18.3.12 3867 - '@types/react-dom': 18.3.1 4173 + '@types/react': 19.0.1 4174 + '@types/react-dom': 19.0.1 3868 4175 3869 - '@radix-ui/react-direction@1.1.0(@types/react@18.3.12)(react@18.3.1)': 4176 + '@radix-ui/react-direction@1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206)': 3870 4177 dependencies: 3871 - react: 18.3.1 4178 + react: 19.0.0-rc-7283a213-20241206 3872 4179 optionalDependencies: 3873 - '@types/react': 18.3.12 4180 + '@types/react': 19.0.1 3874 4181 3875 - '@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 4182 + '@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 3876 4183 dependencies: 3877 4184 '@radix-ui/primitive': 1.1.0 3878 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3879 - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3880 - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3881 - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3882 - react: 18.3.1 3883 - react-dom: 18.3.1(react@18.3.1) 4185 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4186 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4187 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4188 + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4189 + react: 19.0.0-rc-7283a213-20241206 4190 + react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 3884 4191 optionalDependencies: 3885 - '@types/react': 18.3.12 3886 - '@types/react-dom': 18.3.1 4192 + '@types/react': 19.0.1 4193 + '@types/react-dom': 19.0.1 3887 4194 3888 - '@radix-ui/react-dropdown-menu@2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 4195 + '@radix-ui/react-dropdown-menu@2.1.2(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 3889 4196 dependencies: 3890 4197 '@radix-ui/primitive': 1.1.0 3891 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3892 - '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) 3893 - '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3894 - '@radix-ui/react-menu': 2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3895 - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3896 - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3897 - react: 18.3.1 3898 - react-dom: 18.3.1(react@18.3.1) 4198 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4199 + '@radix-ui/react-context': 1.1.1(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4200 + '@radix-ui/react-id': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4201 + '@radix-ui/react-menu': 2.1.2(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4202 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4203 + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4204 + react: 19.0.0-rc-7283a213-20241206 4205 + react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 3899 4206 optionalDependencies: 3900 - '@types/react': 18.3.12 3901 - '@types/react-dom': 18.3.1 4207 + '@types/react': 19.0.1 4208 + '@types/react-dom': 19.0.1 3902 4209 3903 - '@radix-ui/react-focus-guards@1.1.1(@types/react@18.3.12)(react@18.3.1)': 4210 + '@radix-ui/react-focus-guards@1.1.1(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206)': 3904 4211 dependencies: 3905 - react: 18.3.1 4212 + react: 19.0.0-rc-7283a213-20241206 4213 + optionalDependencies: 4214 + '@types/react': 19.0.1 4215 + 4216 + '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 4217 + dependencies: 4218 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4219 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4220 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4221 + react: 19.0.0-rc-7283a213-20241206 4222 + react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 3906 4223 optionalDependencies: 3907 - '@types/react': 18.3.12 4224 + '@types/react': 19.0.1 4225 + '@types/react-dom': 19.0.1 3908 4226 3909 - '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 4227 + '@radix-ui/react-id@1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206)': 3910 4228 dependencies: 3911 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3912 - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3913 - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3914 - react: 18.3.1 3915 - react-dom: 18.3.1(react@18.3.1) 4229 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4230 + react: 19.0.0-rc-7283a213-20241206 3916 4231 optionalDependencies: 3917 - '@types/react': 18.3.12 3918 - '@types/react-dom': 18.3.1 4232 + '@types/react': 19.0.1 3919 4233 3920 - '@radix-ui/react-id@1.1.0(@types/react@18.3.12)(react@18.3.1)': 4234 + '@radix-ui/react-label@2.1.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 3921 4235 dependencies: 3922 - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3923 - react: 18.3.1 4236 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4237 + react: 19.0.0-rc-7283a213-20241206 4238 + react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 3924 4239 optionalDependencies: 3925 - '@types/react': 18.3.12 4240 + '@types/react': 19.0.1 4241 + '@types/react-dom': 19.0.1 3926 4242 3927 - '@radix-ui/react-menu@2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 4243 + '@radix-ui/react-menu@2.1.2(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 3928 4244 dependencies: 3929 4245 '@radix-ui/primitive': 1.1.0 3930 - '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3931 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3932 - '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) 3933 - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3934 - '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3935 - '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.12)(react@18.3.1) 3936 - '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3937 - '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3938 - '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3939 - '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3940 - '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3941 - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3942 - '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3943 - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3944 - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) 4246 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4247 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4248 + '@radix-ui/react-context': 1.1.1(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4249 + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4250 + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4251 + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4252 + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4253 + '@radix-ui/react-id': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4254 + '@radix-ui/react-popper': 1.2.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4255 + '@radix-ui/react-portal': 1.1.2(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4256 + '@radix-ui/react-presence': 1.1.1(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4257 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4258 + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4259 + '@radix-ui/react-slot': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4260 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 3945 4261 aria-hidden: 1.2.4 3946 - react: 18.3.1 3947 - react-dom: 18.3.1(react@18.3.1) 3948 - react-remove-scroll: 2.6.0(@types/react@18.3.12)(react@18.3.1) 4262 + react: 19.0.0-rc-7283a213-20241206 4263 + react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 4264 + react-remove-scroll: 2.6.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 3949 4265 optionalDependencies: 3950 - '@types/react': 18.3.12 3951 - '@types/react-dom': 18.3.1 4266 + '@types/react': 19.0.1 4267 + '@types/react-dom': 19.0.1 3952 4268 3953 - '@radix-ui/react-popper@1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 4269 + '@radix-ui/react-popper@1.2.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 3954 4270 dependencies: 3955 - '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3956 - '@radix-ui/react-arrow': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3957 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3958 - '@radix-ui/react-context': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3959 - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3960 - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3961 - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3962 - '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3963 - '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.12)(react@18.3.1) 4271 + '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4272 + '@radix-ui/react-arrow': 1.1.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4273 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4274 + '@radix-ui/react-context': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4275 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4276 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4277 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4278 + '@radix-ui/react-use-rect': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4279 + '@radix-ui/react-use-size': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 3964 4280 '@radix-ui/rect': 1.1.0 3965 - react: 18.3.1 3966 - react-dom: 18.3.1(react@18.3.1) 4281 + react: 19.0.0-rc-7283a213-20241206 4282 + react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 3967 4283 optionalDependencies: 3968 - '@types/react': 18.3.12 3969 - '@types/react-dom': 18.3.1 4284 + '@types/react': 19.0.1 4285 + '@types/react-dom': 19.0.1 3970 4286 3971 - '@radix-ui/react-portal@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 4287 + '@radix-ui/react-portal@1.1.2(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 3972 4288 dependencies: 3973 - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 3974 - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3975 - react: 18.3.1 3976 - react-dom: 18.3.1(react@18.3.1) 4289 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4290 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4291 + react: 19.0.0-rc-7283a213-20241206 4292 + react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 3977 4293 optionalDependencies: 3978 - '@types/react': 18.3.12 3979 - '@types/react-dom': 18.3.1 4294 + '@types/react': 19.0.1 4295 + '@types/react-dom': 19.0.1 3980 4296 3981 - '@radix-ui/react-presence@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 4297 + '@radix-ui/react-presence@1.1.1(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 3982 4298 dependencies: 3983 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3984 - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3985 - react: 18.3.1 3986 - react-dom: 18.3.1(react@18.3.1) 4299 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4300 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4301 + react: 19.0.0-rc-7283a213-20241206 4302 + react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 3987 4303 optionalDependencies: 3988 - '@types/react': 18.3.12 3989 - '@types/react-dom': 18.3.1 4304 + '@types/react': 19.0.1 4305 + '@types/react-dom': 19.0.1 3990 4306 3991 - '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 4307 + '@radix-ui/react-primitive@2.0.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 3992 4308 dependencies: 3993 - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) 3994 - react: 18.3.1 3995 - react-dom: 18.3.1(react@18.3.1) 4309 + '@radix-ui/react-slot': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4310 + react: 19.0.0-rc-7283a213-20241206 4311 + react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 3996 4312 optionalDependencies: 3997 - '@types/react': 18.3.12 3998 - '@types/react-dom': 18.3.1 4313 + '@types/react': 19.0.1 4314 + '@types/react-dom': 19.0.1 3999 4315 4000 - '@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 4316 + '@radix-ui/react-roving-focus@1.1.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 4001 4317 dependencies: 4002 4318 '@radix-ui/primitive': 1.1.0 4003 - '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 4004 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) 4005 - '@radix-ui/react-context': 1.1.0(@types/react@18.3.12)(react@18.3.1) 4006 - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) 4007 - '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) 4008 - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 4009 - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) 4010 - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) 4011 - react: 18.3.1 4012 - react-dom: 18.3.1(react@18.3.1) 4319 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4320 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4321 + '@radix-ui/react-context': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4322 + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4323 + '@radix-ui/react-id': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4324 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4325 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4326 + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4327 + react: 19.0.0-rc-7283a213-20241206 4328 + react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 4013 4329 optionalDependencies: 4014 - '@types/react': 18.3.12 4015 - '@types/react-dom': 18.3.1 4330 + '@types/react': 19.0.1 4331 + '@types/react-dom': 19.0.1 4016 4332 4017 - '@radix-ui/react-separator@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 4333 + '@radix-ui/react-separator@1.1.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 4018 4334 dependencies: 4019 - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 4020 - react: 18.3.1 4021 - react-dom: 18.3.1(react@18.3.1) 4335 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4336 + react: 19.0.0-rc-7283a213-20241206 4337 + react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 4022 4338 optionalDependencies: 4023 - '@types/react': 18.3.12 4024 - '@types/react-dom': 18.3.1 4339 + '@types/react': 19.0.1 4340 + '@types/react-dom': 19.0.1 4025 4341 4026 - '@radix-ui/react-slot@1.1.0(@types/react@18.3.12)(react@18.3.1)': 4342 + '@radix-ui/react-slot@1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206)': 4027 4343 dependencies: 4028 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) 4029 - react: 18.3.1 4344 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4345 + react: 19.0.0-rc-7283a213-20241206 4030 4346 optionalDependencies: 4031 - '@types/react': 18.3.12 4347 + '@types/react': 19.0.1 4032 4348 4033 - '@radix-ui/react-tooltip@1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 4349 + '@radix-ui/react-tooltip@1.1.4(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 4034 4350 dependencies: 4035 4351 '@radix-ui/primitive': 1.1.0 4036 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) 4037 - '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) 4038 - '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 4039 - '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) 4040 - '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 4041 - '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 4042 - '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 4043 - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 4044 - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) 4045 - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) 4046 - '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 4047 - react: 18.3.1 4048 - react-dom: 18.3.1(react@18.3.1) 4352 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4353 + '@radix-ui/react-context': 1.1.1(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4354 + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4355 + '@radix-ui/react-id': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4356 + '@radix-ui/react-popper': 1.2.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4357 + '@radix-ui/react-portal': 1.1.2(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4358 + '@radix-ui/react-presence': 1.1.1(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4359 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4360 + '@radix-ui/react-slot': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4361 + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4362 + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4363 + react: 19.0.0-rc-7283a213-20241206 4364 + react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 4049 4365 optionalDependencies: 4050 - '@types/react': 18.3.12 4051 - '@types/react-dom': 18.3.1 4366 + '@types/react': 19.0.1 4367 + '@types/react-dom': 19.0.1 4052 4368 4053 - '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.12)(react@18.3.1)': 4369 + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206)': 4054 4370 dependencies: 4055 - react: 18.3.1 4371 + react: 19.0.0-rc-7283a213-20241206 4056 4372 optionalDependencies: 4057 - '@types/react': 18.3.12 4373 + '@types/react': 19.0.1 4058 4374 4059 - '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.12)(react@18.3.1)': 4375 + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206)': 4060 4376 dependencies: 4061 - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) 4062 - react: 18.3.1 4377 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4378 + react: 19.0.0-rc-7283a213-20241206 4063 4379 optionalDependencies: 4064 - '@types/react': 18.3.12 4380 + '@types/react': 19.0.1 4065 4381 4066 - '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.12)(react@18.3.1)': 4382 + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206)': 4067 4383 dependencies: 4068 - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) 4069 - react: 18.3.1 4384 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4385 + react: 19.0.0-rc-7283a213-20241206 4070 4386 optionalDependencies: 4071 - '@types/react': 18.3.12 4387 + '@types/react': 19.0.1 4072 4388 4073 - '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.12)(react@18.3.1)': 4389 + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206)': 4074 4390 dependencies: 4075 - react: 18.3.1 4391 + react: 19.0.0-rc-7283a213-20241206 4076 4392 optionalDependencies: 4077 - '@types/react': 18.3.12 4393 + '@types/react': 19.0.1 4078 4394 4079 - '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.12)(react@18.3.1)': 4395 + '@radix-ui/react-use-rect@1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206)': 4080 4396 dependencies: 4081 4397 '@radix-ui/rect': 1.1.0 4082 - react: 18.3.1 4398 + react: 19.0.0-rc-7283a213-20241206 4083 4399 optionalDependencies: 4084 - '@types/react': 18.3.12 4400 + '@types/react': 19.0.1 4085 4401 4086 - '@radix-ui/react-use-size@1.1.0(@types/react@18.3.12)(react@18.3.1)': 4402 + '@radix-ui/react-use-size@1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206)': 4087 4403 dependencies: 4088 - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) 4089 - react: 18.3.1 4404 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 4405 + react: 19.0.0-rc-7283a213-20241206 4090 4406 optionalDependencies: 4091 - '@types/react': 18.3.12 4407 + '@types/react': 19.0.1 4092 4408 4093 - '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 4409 + '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 4094 4410 dependencies: 4095 - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 4096 - react: 18.3.1 4097 - react-dom: 18.3.1(react@18.3.1) 4411 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4412 + react: 19.0.0-rc-7283a213-20241206 4413 + react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 4098 4414 optionalDependencies: 4099 - '@types/react': 18.3.12 4100 - '@types/react-dom': 18.3.1 4415 + '@types/react': 19.0.1 4416 + '@types/react-dom': 19.0.1 4101 4417 4102 4418 '@radix-ui/rect@1.1.0': {} 4103 4419 ··· 4228 4544 4229 4545 '@tanstack/query-devtools@5.61.4': {} 4230 4546 4231 - '@tanstack/react-query-devtools@5.62.2(@tanstack/react-query@5.62.2(react@18.3.1))(react@18.3.1)': 4547 + '@tanstack/react-query-devtools@5.62.2(@tanstack/react-query@5.62.2(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 4232 4548 dependencies: 4233 4549 '@tanstack/query-devtools': 5.61.4 4234 - '@tanstack/react-query': 5.62.2(react@18.3.1) 4235 - react: 18.3.1 4550 + '@tanstack/react-query': 5.62.2(react@19.0.0-rc-7283a213-20241206) 4551 + react: 19.0.0-rc-7283a213-20241206 4236 4552 4237 - '@tanstack/react-query@5.62.2(react@18.3.1)': 4553 + '@tanstack/react-query@5.62.2(react@19.0.0-rc-7283a213-20241206)': 4238 4554 dependencies: 4239 4555 '@tanstack/query-core': 5.62.2 4240 - react: 18.3.1 4556 + react: 19.0.0-rc-7283a213-20241206 4241 4557 4242 - '@tanstack/react-router@1.85.5(@tanstack/router-generator@1.85.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 4558 + '@tanstack/react-router@1.85.5(@tanstack/router-generator@1.85.3)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 4243 4559 dependencies: 4244 4560 '@tanstack/history': 1.85.3 4245 - '@tanstack/react-store': 0.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 4561 + '@tanstack/react-store': 0.6.1(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4246 4562 jsesc: 3.0.2 4247 - react: 18.3.1 4248 - react-dom: 18.3.1(react@18.3.1) 4563 + react: 19.0.0-rc-7283a213-20241206 4564 + react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 4249 4565 tiny-invariant: 1.3.3 4250 4566 tiny-warning: 1.0.3 4251 4567 optionalDependencies: 4252 4568 '@tanstack/router-generator': 1.85.3 4253 4569 4254 - '@tanstack/react-store@0.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 4570 + '@tanstack/react-store@0.6.1(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 4255 4571 dependencies: 4256 4572 '@tanstack/store': 0.6.0 4257 - react: 18.3.1 4258 - react-dom: 18.3.1(react@18.3.1) 4259 - use-sync-external-store: 1.2.2(react@18.3.1) 4573 + react: 19.0.0-rc-7283a213-20241206 4574 + react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 4575 + use-sync-external-store: 1.2.2(react@19.0.0-rc-7283a213-20241206) 4260 4576 4261 - '@tanstack/router-devtools@1.85.5(@tanstack/react-router@1.85.5(@tanstack/router-generator@1.85.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 4577 + '@tanstack/router-devtools@1.85.5(@tanstack/react-router@1.85.5(@tanstack/router-generator@1.85.3)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206))(csstype@3.1.3)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206)': 4262 4578 dependencies: 4263 - '@tanstack/react-router': 1.85.5(@tanstack/router-generator@1.85.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 4579 + '@tanstack/react-router': 1.85.5(@tanstack/router-generator@1.85.3)(react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206))(react@19.0.0-rc-7283a213-20241206) 4264 4580 clsx: 2.1.1 4265 4581 goober: 2.1.16(csstype@3.1.3) 4266 - react: 18.3.1 4267 - react-dom: 18.3.1(react@18.3.1) 4582 + react: 19.0.0-rc-7283a213-20241206 4583 + react-dom: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206) 4268 4584 transitivePeerDependencies: 4269 4585 - csstype 4270 4586 ··· 4341 4657 dependencies: 4342 4658 undici-types: 6.20.0 4343 4659 4344 - '@types/prop-types@15.7.13': {} 4345 - 4346 - '@types/react-dom@18.3.1': 4660 + '@types/react-dom@19.0.1': 4347 4661 dependencies: 4348 - '@types/react': 18.3.12 4662 + '@types/react': 19.0.1 4349 4663 4350 - '@types/react@18.3.12': 4664 + '@types/react@19.0.1': 4351 4665 dependencies: 4352 - '@types/prop-types': 15.7.13 4353 4666 csstype: 3.1.3 4354 4667 4355 4668 '@types/ws@8.5.13': ··· 4489 4802 dependencies: 4490 4803 tslib: 2.8.1 4491 4804 4805 + asynckit@0.4.0: {} 4806 + 4492 4807 atomic-sleep@1.0.0: {} 4493 4808 4494 4809 autoprefixer@10.4.20(postcss@8.4.49): ··· 4501 4816 postcss: 8.4.49 4502 4817 postcss-value-parser: 4.2.0 4503 4818 4819 + await-lock@2.2.2: {} 4820 + 4821 + axios@1.7.9: 4822 + dependencies: 4823 + follow-redirects: 1.15.9 4824 + form-data: 4.0.1 4825 + proxy-from-env: 1.1.0 4826 + transitivePeerDependencies: 4827 + - debug 4828 + 4504 4829 babel-dead-code-elimination@1.0.6: 4505 4830 dependencies: 4506 4831 '@babel/core': 7.26.0 ··· 4588 4913 4589 4914 colorette@2.0.20: {} 4590 4915 4916 + combined-stream@1.0.8: 4917 + dependencies: 4918 + delayed-stream: 1.0.0 4919 + 4591 4920 commander@4.1.1: {} 4592 4921 4593 4922 concat-map@0.0.1: {} ··· 4618 4947 4619 4948 deep-is@0.1.4: {} 4620 4949 4950 + delayed-stream@1.0.0: {} 4951 + 4621 4952 detect-libc@2.0.2: {} 4622 4953 4623 4954 detect-node-es@1.1.0: {} ··· 4637 4968 transitivePeerDependencies: 4638 4969 - supports-color 4639 4970 4640 - drizzle-orm@0.37.0(@libsql/client@0.14.0(bufferutil@4.0.8))(@types/react@18.3.12)(react@18.3.1): 4971 + drizzle-orm@0.37.0(@libsql/client@0.14.0(bufferutil@4.0.8))(@types/react@19.0.1)(react@19.0.0): 4641 4972 optionalDependencies: 4642 4973 '@libsql/client': 0.14.0(bufferutil@4.0.8) 4643 - '@types/react': 18.3.12 4644 - react: 18.3.1 4974 + '@types/react': 19.0.1 4975 + react: 19.0.0 4645 4976 4646 4977 eastasianwidth@0.2.0: {} 4647 4978 ··· 4902 5233 4903 5234 flatted@3.3.2: {} 4904 5235 5236 + follow-redirects@1.15.9: {} 5237 + 4905 5238 foreground-child@3.3.0: 4906 5239 dependencies: 4907 5240 cross-spawn: 7.0.6 4908 5241 signal-exit: 4.1.0 5242 + 5243 + form-data@4.0.1: 5244 + dependencies: 5245 + asynckit: 0.4.0 5246 + combined-stream: 1.0.8 5247 + mime-types: 2.1.35 4909 5248 4910 5249 formdata-polyfill@4.0.10: 4911 5250 dependencies: ··· 4972 5311 4973 5312 help-me@5.0.0: {} 4974 5313 5314 + hono-sessions@0.7.0: 5315 + dependencies: 5316 + hono: 4.6.12 5317 + iron-webcrypto: 0.10.1 5318 + 4975 5319 hono@4.6.12: {} 4976 5320 4977 5321 ignore@5.3.2: {} ··· 4987 5331 dependencies: 4988 5332 loose-envify: 1.4.0 4989 5333 5334 + ipaddr.js@2.2.0: {} 5335 + 5336 + iron-webcrypto@0.10.1: {} 5337 + 4990 5338 is-binary-path@2.1.0: 4991 5339 dependencies: 4992 5340 binary-extensions: 2.3.0 ··· 5006 5354 is-number@7.0.0: {} 5007 5355 5008 5356 isexe@2.0.0: {} 5357 + 5358 + iso-datestring-validator@2.2.2: {} 5009 5359 5010 5360 jackspeak@3.4.3: 5011 5361 dependencies: ··· 5092 5442 dependencies: 5093 5443 yallist: 3.1.1 5094 5444 5095 - lucide-react@0.464.0(react@18.3.1): 5445 + lucide-react@0.464.0(react@19.0.0-rc-7283a213-20241206): 5096 5446 dependencies: 5097 - react: 18.3.1 5447 + react: 19.0.0-rc-7283a213-20241206 5098 5448 5099 5449 make-error@1.3.6: {} 5100 5450 ··· 5105 5455 braces: 3.0.3 5106 5456 picomatch: 2.3.1 5107 5457 5458 + mime-db@1.52.0: {} 5459 + 5460 + mime-types@2.1.35: 5461 + dependencies: 5462 + mime-db: 1.52.0 5463 + 5108 5464 minimatch@10.0.1: 5109 5465 dependencies: 5110 5466 brace-expansion: 2.0.1 ··· 5122 5478 minipass@7.1.2: {} 5123 5479 5124 5480 ms@2.1.3: {} 5481 + 5482 + multiformats@9.9.0: {} 5125 5483 5126 5484 mz@2.7.0: 5127 5485 dependencies: ··· 5305 5663 5306 5664 promise-limit@2.7.0: {} 5307 5665 5666 + proxy-from-env@1.1.0: {} 5667 + 5668 + psl@1.15.0: 5669 + dependencies: 5670 + punycode: 2.3.1 5671 + 5308 5672 pump@3.0.2: 5309 5673 dependencies: 5310 5674 end-of-stream: 1.4.4 ··· 5316 5680 5317 5681 quick-format-unescaped@4.0.4: {} 5318 5682 5319 - react-dom@18.3.1(react@18.3.1): 5683 + react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-7283a213-20241206): 5320 5684 dependencies: 5321 - loose-envify: 1.4.0 5322 - react: 18.3.1 5323 - scheduler: 0.23.2 5685 + react: 19.0.0-rc-7283a213-20241206 5686 + scheduler: 0.25.0-rc-f994737d14-20240522 5324 5687 5325 - react-remove-scroll-bar@2.3.6(@types/react@18.3.12)(react@18.3.1): 5688 + react-remove-scroll-bar@2.3.6(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206): 5326 5689 dependencies: 5327 - react: 18.3.1 5328 - react-style-singleton: 2.2.1(@types/react@18.3.12)(react@18.3.1) 5690 + react: 19.0.0-rc-7283a213-20241206 5691 + react-style-singleton: 2.2.1(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 5329 5692 tslib: 2.8.1 5330 5693 optionalDependencies: 5331 - '@types/react': 18.3.12 5694 + '@types/react': 19.0.1 5332 5695 5333 - react-remove-scroll@2.6.0(@types/react@18.3.12)(react@18.3.1): 5696 + react-remove-scroll@2.6.0(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206): 5334 5697 dependencies: 5335 - react: 18.3.1 5336 - react-remove-scroll-bar: 2.3.6(@types/react@18.3.12)(react@18.3.1) 5337 - react-style-singleton: 2.2.1(@types/react@18.3.12)(react@18.3.1) 5698 + react: 19.0.0-rc-7283a213-20241206 5699 + react-remove-scroll-bar: 2.3.6(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 5700 + react-style-singleton: 2.2.1(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 5338 5701 tslib: 2.8.1 5339 - use-callback-ref: 1.3.2(@types/react@18.3.12)(react@18.3.1) 5340 - use-sidecar: 1.1.2(@types/react@18.3.12)(react@18.3.1) 5702 + use-callback-ref: 1.3.2(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 5703 + use-sidecar: 1.1.2(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206) 5341 5704 optionalDependencies: 5342 - '@types/react': 18.3.12 5705 + '@types/react': 19.0.1 5343 5706 5344 - react-style-singleton@2.2.1(@types/react@18.3.12)(react@18.3.1): 5707 + react-style-singleton@2.2.1(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206): 5345 5708 dependencies: 5346 5709 get-nonce: 1.0.1 5347 5710 invariant: 2.2.4 5348 - react: 18.3.1 5711 + react: 19.0.0-rc-7283a213-20241206 5349 5712 tslib: 2.8.1 5350 5713 optionalDependencies: 5351 - '@types/react': 18.3.12 5714 + '@types/react': 19.0.1 5352 5715 5353 - react@18.3.1: 5354 - dependencies: 5355 - loose-envify: 1.4.0 5716 + react@19.0.0: 5717 + optional: true 5718 + 5719 + react@19.0.0-rc-7283a213-20241206: {} 5356 5720 5357 5721 read-cache@1.0.0: 5358 5722 dependencies: ··· 5415 5779 5416 5780 safe-stable-stringify@2.5.0: {} 5417 5781 5418 - scheduler@0.23.2: 5419 - dependencies: 5420 - loose-envify: 1.4.0 5782 + scheduler@0.25.0-rc-f994737d14-20240522: {} 5421 5783 5422 5784 secure-json-parse@2.7.0: {} 5423 5785 ··· 5546 5908 fdir: 6.4.2(picomatch@4.0.2) 5547 5909 picomatch: 4.0.2 5548 5910 5911 + tlds@1.255.0: {} 5912 + 5549 5913 to-regex-range@5.0.1: 5550 5914 dependencies: 5551 5915 is-number: 7.0.0 ··· 5659 6023 5660 6024 typescript@5.7.2: {} 5661 6025 6026 + uint8arrays@3.0.0: 6027 + dependencies: 6028 + multiformats: 9.9.0 6029 + 5662 6030 undici-types@6.20.0: {} 6031 + 6032 + undici@6.21.0: {} 5663 6033 5664 6034 unplugin@1.16.0: 5665 6035 dependencies: ··· 5676 6046 dependencies: 5677 6047 punycode: 2.3.1 5678 6048 5679 - use-callback-ref@1.3.2(@types/react@18.3.12)(react@18.3.1): 6049 + use-callback-ref@1.3.2(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206): 5680 6050 dependencies: 5681 - react: 18.3.1 6051 + react: 19.0.0-rc-7283a213-20241206 5682 6052 tslib: 2.8.1 5683 6053 optionalDependencies: 5684 - '@types/react': 18.3.12 6054 + '@types/react': 19.0.1 5685 6055 5686 - use-sidecar@1.1.2(@types/react@18.3.12)(react@18.3.1): 6056 + use-sidecar@1.1.2(@types/react@19.0.1)(react@19.0.0-rc-7283a213-20241206): 5687 6057 dependencies: 5688 6058 detect-node-es: 1.1.0 5689 - react: 18.3.1 6059 + react: 19.0.0-rc-7283a213-20241206 5690 6060 tslib: 2.8.1 5691 6061 optionalDependencies: 5692 - '@types/react': 18.3.12 6062 + '@types/react': 19.0.1 5693 6063 5694 - use-sync-external-store@1.2.2(react@18.3.1): 6064 + use-sync-external-store@1.2.2(react@19.0.0-rc-7283a213-20241206): 5695 6065 dependencies: 5696 - react: 18.3.1 6066 + react: 19.0.0-rc-7283a213-20241206 5697 6067 5698 6068 util-deprecate@1.0.2: {} 5699 6069