diff --git a/chat/apps/web/.env.example b/chat/apps/web/.env.example
new file mode 100644
index 000000000..407c57ecc
--- /dev/null
+++ b/chat/apps/web/.env.example
@@ -0,0 +1,6 @@
+# Supabase Configuration (same as mobile app)
+PUBLIC_SUPABASE_URL=https://your-project.supabase.co
+PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-key
+
+# Chat Backend API
+PUBLIC_BACKEND_URL=http://localhost:3001
diff --git a/chat/apps/web/package.json b/chat/apps/web/package.json
index 7e27dd20e..1a8bc4e3e 100644
--- a/chat/apps/web/package.json
+++ b/chat/apps/web/package.json
@@ -27,6 +27,7 @@
"vite": "^7.1.7"
},
"dependencies": {
+ "@chat/types": "workspace:*",
"@manacore/shared-auth-ui": "workspace:*",
"@manacore/shared-branding": "workspace:*",
"@manacore/shared-i18n": "workspace:*",
@@ -36,6 +37,8 @@
"@manacore/shared-theme": "workspace:*",
"@manacore/shared-theme-ui": "workspace:*",
"@manacore/shared-ui": "workspace:*",
+ "@manacore/shared-utils": "workspace:*",
+ "@supabase/ssr": "^0.6.1",
"@supabase/supabase-js": "^2.81.1",
"marked": "^17.0.0"
}
diff --git a/chat/apps/web/postcss.config.js b/chat/apps/web/postcss.config.js
new file mode 100644
index 000000000..85b958cb5
--- /dev/null
+++ b/chat/apps/web/postcss.config.js
@@ -0,0 +1,5 @@
+export default {
+ plugins: {
+ '@tailwindcss/postcss': {}
+ }
+};
diff --git a/chat/apps/web/src/app.css b/chat/apps/web/src/app.css
index d4b507858..d75fc9594 100644
--- a/chat/apps/web/src/app.css
+++ b/chat/apps/web/src/app.css
@@ -1 +1,8 @@
-@import 'tailwindcss';
+@import "tailwindcss";
+@import "@manacore/shared-tailwind/themes.css";
+
+/* Scan shared packages for Tailwind classes */
+@source "../../../../packages/shared-ui/src";
+@source "../../../../packages/shared-auth-ui/src";
+@source "../../../../packages/shared-branding/src";
+@source "../../../../packages/shared-theme-ui/src";
diff --git a/chat/apps/web/src/app.d.ts b/chat/apps/web/src/app.d.ts
new file mode 100644
index 000000000..422863fe8
--- /dev/null
+++ b/chat/apps/web/src/app.d.ts
@@ -0,0 +1,21 @@
+// See https://svelte.dev/docs/kit/types#app.d.ts
+// for information about these interfaces
+import type { SupabaseClient, Session, User } from '@supabase/supabase-js';
+
+declare global {
+ namespace App {
+ // interface Error {}
+ interface Locals {
+ supabase: SupabaseClient;
+ safeGetSession: () => Promise<{ session: Session | null; user: User | null }>;
+ }
+ interface PageData {
+ session: Session | null;
+ user: User | null;
+ }
+ // interface PageState {}
+ // interface Platform {}
+ }
+}
+
+export {};
diff --git a/chat/apps/web/src/hooks.server.ts b/chat/apps/web/src/hooks.server.ts
new file mode 100644
index 000000000..41e1b0c29
--- /dev/null
+++ b/chat/apps/web/src/hooks.server.ts
@@ -0,0 +1,41 @@
+/**
+ * Server Hooks for SvelteKit
+ * Handles Supabase session management
+ */
+
+import type { Handle } from '@sveltejs/kit';
+import { createSupabaseServerClient } from '$lib/services/supabase';
+
+export const handle: Handle = async ({ event, resolve }) => {
+ // Create Supabase client for this request
+ event.locals.supabase = createSupabaseServerClient(event.cookies);
+
+ // Get session
+ event.locals.safeGetSession = async () => {
+ const {
+ data: { session },
+ } = await event.locals.supabase.auth.getSession();
+
+ if (!session) {
+ return { session: null, user: null };
+ }
+
+ // Validate user (not just reading from cookies)
+ const {
+ data: { user },
+ error,
+ } = await event.locals.supabase.auth.getUser();
+
+ if (error) {
+ return { session: null, user: null };
+ }
+
+ return { session, user };
+ };
+
+ return resolve(event, {
+ filterSerializedResponseHeaders(name) {
+ return name === 'content-range' || name === 'x-supabase-api-version';
+ },
+ });
+};
diff --git a/chat/apps/web/src/lib/components/chat/ChatInput.svelte b/chat/apps/web/src/lib/components/chat/ChatInput.svelte
new file mode 100644
index 000000000..d4e7711fa
--- /dev/null
+++ b/chat/apps/web/src/lib/components/chat/ChatInput.svelte
@@ -0,0 +1,82 @@
+
+
+
+
+
+ Enter zum Senden, Shift+Enter für neue Zeile
+
+
diff --git a/chat/apps/web/src/lib/components/chat/ConversationList.svelte b/chat/apps/web/src/lib/components/chat/ConversationList.svelte
new file mode 100644
index 000000000..cddc5474a
--- /dev/null
+++ b/chat/apps/web/src/lib/components/chat/ConversationList.svelte
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+ {#if isLoading}
+
+ {:else if conversations.length === 0}
+
+
Keine Konversationen
+
Starte einen neuen Chat
+
+ {:else}
+
+ {/if}
+
+
diff --git a/chat/apps/web/src/lib/components/chat/MessageBubble.svelte b/chat/apps/web/src/lib/components/chat/MessageBubble.svelte
new file mode 100644
index 000000000..f51d5322f
--- /dev/null
+++ b/chat/apps/web/src/lib/components/chat/MessageBubble.svelte
@@ -0,0 +1,52 @@
+
+
+
+
+ {#if isUser}
+
{message.message_text}
+ {:else}
+
+ {@html htmlContent}
+
+ {/if}
+
+ {formattedTime}
+
+
+
diff --git a/chat/apps/web/src/lib/components/chat/MessageList.svelte b/chat/apps/web/src/lib/components/chat/MessageList.svelte
new file mode 100644
index 000000000..4ac97ea28
--- /dev/null
+++ b/chat/apps/web/src/lib/components/chat/MessageList.svelte
@@ -0,0 +1,64 @@
+
+
+
+ {#if messages.length === 0}
+
+
+
Keine Nachrichten
+
Starte eine Konversation!
+
+ {:else}
+ {#each messages as message (message.id)}
+
+ {/each}
+ {#if isTyping}
+
+ {/if}
+ {/if}
+
diff --git a/chat/apps/web/src/lib/components/chat/ModelSelector.svelte b/chat/apps/web/src/lib/components/chat/ModelSelector.svelte
new file mode 100644
index 000000000..64de1d1e8
--- /dev/null
+++ b/chat/apps/web/src/lib/components/chat/ModelSelector.svelte
@@ -0,0 +1,55 @@
+
+
+
+
+
+
diff --git a/chat/apps/web/src/lib/components/chat/TypingIndicator.svelte b/chat/apps/web/src/lib/components/chat/TypingIndicator.svelte
new file mode 100644
index 000000000..fd0f43dae
--- /dev/null
+++ b/chat/apps/web/src/lib/components/chat/TypingIndicator.svelte
@@ -0,0 +1,41 @@
+
+
+
+
+
diff --git a/chat/apps/web/src/lib/components/spaces/SpaceCard.svelte b/chat/apps/web/src/lib/components/spaces/SpaceCard.svelte
new file mode 100644
index 000000000..084ac4a71
--- /dev/null
+++ b/chat/apps/web/src/lib/components/spaces/SpaceCard.svelte
@@ -0,0 +1,162 @@
+
+
+ (showMenu = false)} />
+
+ onSelect(space.id)}
+ onkeydown={(e) => e.key === 'Enter' && onSelect(space.id)}
+ role="button"
+ tabindex="0"
+>
+
+
+
+
+
+
+ {space.name}
+
+ {#if isOwner}
+
+ Besitzer
+
+ {/if}
+
+
+ {#if space.description}
+
+ {space.description}
+
+ {/if}
+
+
+ Erstellt: {formatDate(space.created_at)}
+
+
+
+
+
+
+
+ {#if showMenu}
+
e.stopPropagation()}
+ onkeydown={() => {}}
+ role="menu"
+ tabindex="-1"
+ >
+ {#if isOwner}
+
+
+ {:else}
+
+ {/if}
+
+ {/if}
+
+
+
+
diff --git a/chat/apps/web/src/lib/components/spaces/SpaceForm.svelte b/chat/apps/web/src/lib/components/spaces/SpaceForm.svelte
new file mode 100644
index 000000000..4738d5338
--- /dev/null
+++ b/chat/apps/web/src/lib/components/spaces/SpaceForm.svelte
@@ -0,0 +1,102 @@
+
+
+
+
+ {isEditMode ? 'Space bearbeiten' : 'Neuen Space erstellen'}
+
+
+
+
diff --git a/chat/apps/web/src/lib/components/templates/TemplateCard.svelte b/chat/apps/web/src/lib/components/templates/TemplateCard.svelte
new file mode 100644
index 000000000..296d8386f
--- /dev/null
+++ b/chat/apps/web/src/lib/components/templates/TemplateCard.svelte
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {template.name}
+
+ {#if template.is_default}
+
+ Standard
+
+ {/if}
+
+
+ {#if template.description}
+
+ {template.description}
+
+ {/if}
+
+
+ {truncatePrompt(template.system_prompt)}
+
+
+
+
+
+ {#if !template.is_default}
+
+ {/if}
+
+
+
+
+
+
+
+
+
diff --git a/chat/apps/web/src/lib/components/templates/TemplateForm.svelte b/chat/apps/web/src/lib/components/templates/TemplateForm.svelte
new file mode 100644
index 000000000..55e351f99
--- /dev/null
+++ b/chat/apps/web/src/lib/components/templates/TemplateForm.svelte
@@ -0,0 +1,265 @@
+
+
+
+
+ {isEditMode ? 'Vorlage bearbeiten' : 'Neue Vorlage erstellen'}
+
+
+
+
diff --git a/chat/apps/web/src/lib/services/api.ts b/chat/apps/web/src/lib/services/api.ts
new file mode 100644
index 000000000..abf6f99bb
--- /dev/null
+++ b/chat/apps/web/src/lib/services/api.ts
@@ -0,0 +1,52 @@
+/**
+ * Backend API Client for Chat
+ */
+
+import { env } from '$env/dynamic/public';
+
+const BACKEND_URL = env.PUBLIC_BACKEND_URL || 'http://localhost:3001';
+
+interface ApiResponse {
+ data?: T;
+ error?: string;
+}
+
+export async function apiRequest(
+ endpoint: string,
+ options: RequestInit = {}
+): Promise> {
+ try {
+ const response = await fetch(`${BACKEND_URL}${endpoint}`, {
+ ...options,
+ headers: {
+ 'Content-Type': 'application/json',
+ ...options.headers,
+ },
+ });
+
+ if (!response.ok) {
+ const errorText = await response.text();
+ return { error: errorText || `HTTP ${response.status}` };
+ }
+
+ const data = await response.json();
+ return { data };
+ } catch (error) {
+ return { error: error instanceof Error ? error.message : 'Unknown error' };
+ }
+}
+
+export const api = {
+ get: (endpoint: string) => apiRequest(endpoint, { method: 'GET' }),
+ post: (endpoint: string, body: unknown) =>
+ apiRequest(endpoint, {
+ method: 'POST',
+ body: JSON.stringify(body),
+ }),
+ put: (endpoint: string, body: unknown) =>
+ apiRequest(endpoint, {
+ method: 'PUT',
+ body: JSON.stringify(body),
+ }),
+ delete: (endpoint: string) => apiRequest(endpoint, { method: 'DELETE' }),
+};
diff --git a/chat/apps/web/src/lib/services/chat.ts b/chat/apps/web/src/lib/services/chat.ts
new file mode 100644
index 000000000..ec66491ab
--- /dev/null
+++ b/chat/apps/web/src/lib/services/chat.ts
@@ -0,0 +1,46 @@
+/**
+ * Chat Service - AI Completions via Backend
+ */
+
+import { api } from './api';
+import type { ChatMessage, ChatCompletionResponse, AIModel } from '@chat/types';
+
+export interface ChatCompletionRequest {
+ messages: ChatMessage[];
+ modelId: string;
+ temperature?: number;
+ maxTokens?: number;
+}
+
+export const chatService = {
+ /**
+ * Get available AI models
+ */
+ async getModels(): Promise {
+ const { data, error } = await api.get('/api/chat/models');
+ if (error) {
+ console.error('Failed to fetch models:', error);
+ return [];
+ }
+ return data || [];
+ },
+
+ /**
+ * Send chat completion request
+ */
+ async createCompletion(request: ChatCompletionRequest): Promise {
+ const { data, error } = await api.post('/api/chat/completions', {
+ messages: request.messages,
+ modelId: request.modelId,
+ temperature: request.temperature ?? 0.7,
+ maxTokens: request.maxTokens ?? 1000,
+ });
+
+ if (error) {
+ console.error('Chat completion failed:', error);
+ return null;
+ }
+
+ return data || null;
+ },
+};
diff --git a/chat/apps/web/src/lib/services/conversation.ts b/chat/apps/web/src/lib/services/conversation.ts
new file mode 100644
index 000000000..2b6cde68a
--- /dev/null
+++ b/chat/apps/web/src/lib/services/conversation.ts
@@ -0,0 +1,351 @@
+/**
+ * Conversation Service - CRUD operations via Supabase
+ */
+
+import { createSupabaseBrowserClient } from './supabase';
+import { chatService } from './chat';
+import type { Conversation, Message, ChatMessage } from '@chat/types';
+
+let supabase: ReturnType | null = null;
+
+function getSupabase() {
+ if (!supabase) {
+ supabase = createSupabaseBrowserClient();
+ }
+ return supabase;
+}
+
+export const conversationService = {
+ /**
+ * Create a new conversation
+ */
+ async createConversation(
+ userId: string,
+ modelId: string,
+ mode: 'free' | 'guided' | 'template' = 'free',
+ templateId?: string,
+ documentMode: boolean = false,
+ spaceId?: string
+ ): Promise {
+ const sb = getSupabase();
+
+ const { data, error } = await sb
+ .from('conversations')
+ .insert({
+ user_id: userId,
+ model_id: modelId,
+ template_id: templateId,
+ conversation_mode: mode,
+ document_mode: documentMode,
+ space_id: spaceId,
+ })
+ .select('id')
+ .single();
+
+ if (error) {
+ console.error('Error creating conversation:', error);
+ return null;
+ }
+
+ return data.id;
+ },
+
+ /**
+ * Get all active conversations for a user
+ */
+ async getConversations(userId: string, spaceId?: string): Promise {
+ const sb = getSupabase();
+
+ let query = sb
+ .from('conversations')
+ .select('*')
+ .eq('user_id', userId)
+ .eq('is_archived', false);
+
+ if (spaceId) {
+ query = query.eq('space_id', spaceId);
+ }
+
+ const { data, error } = await query.order('updated_at', { ascending: false });
+
+ if (error) {
+ console.error('Error loading conversations:', error);
+ return [];
+ }
+
+ return data as Conversation[];
+ },
+
+ /**
+ * Get archived conversations
+ */
+ async getArchivedConversations(userId: string): Promise {
+ const sb = getSupabase();
+
+ const { data, error } = await sb
+ .from('conversations')
+ .select('*')
+ .eq('user_id', userId)
+ .eq('is_archived', true)
+ .order('updated_at', { ascending: false });
+
+ if (error) {
+ console.error('Error loading archived conversations:', error);
+ return [];
+ }
+
+ return data as Conversation[];
+ },
+
+ /**
+ * Get a single conversation
+ */
+ async getConversation(conversationId: string): Promise {
+ const sb = getSupabase();
+
+ const { data, error } = await sb
+ .from('conversations')
+ .select('*')
+ .eq('id', conversationId)
+ .single();
+
+ if (error) {
+ console.error('Error loading conversation:', error);
+ return null;
+ }
+
+ return data as Conversation;
+ },
+
+ /**
+ * Get messages for a conversation
+ */
+ async getMessages(conversationId: string): Promise {
+ const sb = getSupabase();
+
+ const { data, error } = await sb
+ .from('messages')
+ .select('*')
+ .eq('conversation_id', conversationId)
+ .order('created_at', { ascending: true });
+
+ if (error) {
+ console.error('Error loading messages:', error);
+ return [];
+ }
+
+ return data as Message[];
+ },
+
+ /**
+ * Add a message to a conversation
+ */
+ async addMessage(
+ conversationId: string,
+ sender: 'user' | 'assistant' | 'system',
+ messageText: string
+ ): Promise {
+ const sb = getSupabase();
+
+ const { data, error } = await sb
+ .from('messages')
+ .insert({
+ conversation_id: conversationId,
+ sender,
+ message_text: messageText,
+ })
+ .select('id')
+ .single();
+
+ if (error) {
+ console.error('Error adding message:', error);
+ return null;
+ }
+
+ return data.id;
+ },
+
+ /**
+ * Update conversation title
+ */
+ async updateTitle(conversationId: string, title: string): Promise {
+ const sb = getSupabase();
+
+ const { error } = await sb
+ .from('conversations')
+ .update({ title, updated_at: new Date().toISOString() })
+ .eq('id', conversationId);
+
+ if (error) {
+ console.error('Error updating title:', error);
+ return false;
+ }
+
+ return true;
+ },
+
+ /**
+ * Archive a conversation
+ */
+ async archiveConversation(conversationId: string): Promise {
+ const sb = getSupabase();
+
+ const { error } = await sb
+ .from('conversations')
+ .update({ is_archived: true })
+ .eq('id', conversationId);
+
+ if (error) {
+ console.error('Error archiving conversation:', error);
+ return false;
+ }
+
+ return true;
+ },
+
+ /**
+ * Unarchive a conversation
+ */
+ async unarchiveConversation(conversationId: string): Promise {
+ const sb = getSupabase();
+
+ const { error } = await sb
+ .from('conversations')
+ .update({ is_archived: false })
+ .eq('id', conversationId);
+
+ if (error) {
+ console.error('Error unarchiving conversation:', error);
+ return false;
+ }
+
+ return true;
+ },
+
+ /**
+ * Delete a conversation permanently
+ */
+ async deleteConversation(conversationId: string): Promise {
+ const sb = getSupabase();
+
+ // Delete messages first
+ const { error: messagesError } = await sb
+ .from('messages')
+ .delete()
+ .eq('conversation_id', conversationId);
+
+ if (messagesError) {
+ console.error('Error deleting messages:', messagesError);
+ return false;
+ }
+
+ // Delete conversation
+ const { error: conversationError } = await sb
+ .from('conversations')
+ .delete()
+ .eq('id', conversationId);
+
+ if (conversationError) {
+ console.error('Error deleting conversation:', conversationError);
+ return false;
+ }
+
+ return true;
+ },
+
+ /**
+ * Send a message and get AI response
+ */
+ async sendMessageAndGetResponse(
+ conversationId: string,
+ userMessage: string,
+ modelId: string
+ ): Promise<{
+ userMessageId: string | null;
+ assistantMessageId: string | null;
+ assistantResponse: string;
+ title?: string;
+ }> {
+ // Add user message
+ const userMessageId = await this.addMessage(conversationId, 'user', userMessage);
+
+ // Load all messages for context
+ const messages = await this.getMessages(conversationId);
+
+ // Build chat messages for API
+ const chatMessages: ChatMessage[] = messages.map((m) => ({
+ role: m.sender === 'user' ? 'user' : m.sender === 'assistant' ? 'assistant' : 'system',
+ content: m.message_text,
+ }));
+
+ // Get AI response
+ const response = await chatService.createCompletion({
+ messages: chatMessages,
+ modelId,
+ });
+
+ if (!response) {
+ return {
+ userMessageId,
+ assistantMessageId: null,
+ assistantResponse: 'Fehler beim Abrufen der Antwort.',
+ };
+ }
+
+ // Save assistant message
+ const assistantMessageId = await this.addMessage(conversationId, 'assistant', response.content);
+
+ // Update conversation timestamp
+ const sb = getSupabase();
+ await sb
+ .from('conversations')
+ .update({ updated_at: new Date().toISOString() })
+ .eq('id', conversationId);
+
+ // Generate title if this is a new conversation (first or second message)
+ let title: string | undefined;
+ if (messages.length <= 2) {
+ title = await this.generateTitle(userMessage);
+ if (title) {
+ await this.updateTitle(conversationId, title);
+ }
+ }
+
+ return {
+ userMessageId,
+ assistantMessageId,
+ assistantResponse: response.content,
+ title,
+ };
+ },
+
+ /**
+ * Generate a conversation title based on user message
+ */
+ async generateTitle(userMessage: string): Promise {
+ const titlePrompt = `Schreibe eine kurze, prägnante Überschrift (maximal 5 Wörter) für diesen Chat: "${userMessage}"`;
+
+ const response = await chatService.createCompletion({
+ messages: [{ role: 'user', content: titlePrompt }],
+ modelId: '550e8400-e29b-41d4-a716-446655440004', // GPT-4o-Mini
+ temperature: 0.3,
+ maxTokens: 50,
+ });
+
+ if (!response) {
+ return 'Neue Konversation';
+ }
+
+ // Clean up title
+ let title = response.content
+ .trim()
+ .replace(/^["']|["']$/g, '')
+ .replace(/\.$/g, '');
+
+ if (title.length > 100) {
+ title = title.substring(0, 97) + '...';
+ }
+
+ return title;
+ },
+};
diff --git a/chat/apps/web/src/lib/services/document.ts b/chat/apps/web/src/lib/services/document.ts
new file mode 100644
index 000000000..42ccd2272
--- /dev/null
+++ b/chat/apps/web/src/lib/services/document.ts
@@ -0,0 +1,176 @@
+/**
+ * Document Service - Manage documents in document mode conversations
+ */
+
+import { createSupabaseBrowserClient } from './supabase';
+import type { Document, DocumentWithConversation } from '@chat/types';
+
+let supabase: ReturnType | null = null;
+
+function getSupabase() {
+ if (!supabase) {
+ supabase = createSupabaseBrowserClient();
+ }
+ return supabase;
+}
+
+export const documentService = {
+ /**
+ * Get all documents for a user (latest version of each)
+ */
+ async getUserDocuments(userId: string): Promise {
+ const sb = getSupabase();
+
+ // Get all conversations with document_mode enabled
+ const { data: conversations, error: convError } = await sb
+ .from('conversations')
+ .select('id, title, document_mode')
+ .eq('user_id', userId)
+ .eq('document_mode', true);
+
+ if (convError) {
+ console.error('Error loading conversations:', convError);
+ return [];
+ }
+
+ if (!conversations || conversations.length === 0) {
+ return [];
+ }
+
+ // For each conversation, load the latest document version
+ const documents: DocumentWithConversation[] = [];
+
+ for (const conv of conversations) {
+ const { data: docData, error: docError } = await sb
+ .from('documents')
+ .select('*')
+ .eq('conversation_id', conv.id)
+ .order('version', { ascending: false })
+ .limit(1)
+ .single();
+
+ if (docError && docError.code !== 'PGRST116') {
+ console.error(`Error loading document for conversation ${conv.id}:`, docError);
+ continue;
+ }
+
+ if (docData) {
+ documents.push({
+ ...docData,
+ conversation_title: conv.title || 'Unbenannte Konversation',
+ });
+ }
+ }
+
+ return documents;
+ },
+
+ /**
+ * Get the latest document for a conversation
+ */
+ async getLatestDocument(conversationId: string): Promise {
+ const sb = getSupabase();
+
+ const { data, error } = await sb
+ .from('documents')
+ .select('*')
+ .eq('conversation_id', conversationId)
+ .order('version', { ascending: false })
+ .limit(1)
+ .single();
+
+ if (error) {
+ if (error.code !== 'PGRST116') {
+ console.error('Error loading document:', error);
+ }
+ return null;
+ }
+
+ return data as Document;
+ },
+
+ /**
+ * Create a new document
+ */
+ async createDocument(conversationId: string, content: string): Promise {
+ const sb = getSupabase();
+
+ const { data, error } = await sb
+ .from('documents')
+ .insert({
+ conversation_id: conversationId,
+ version: 1,
+ content,
+ })
+ .select()
+ .single();
+
+ if (error) {
+ console.error('Error creating document:', error);
+ return null;
+ }
+
+ return data as Document;
+ },
+
+ /**
+ * Create a new version of a document
+ */
+ async createDocumentVersion(conversationId: string, content: string): Promise {
+ const sb = getSupabase();
+
+ // Get the current highest version
+ const { data: latestVersionData, error: versionError } = await sb
+ .from('documents')
+ .select('version')
+ .eq('conversation_id', conversationId)
+ .order('version', { ascending: false })
+ .limit(1)
+ .single();
+
+ if (versionError && versionError.code !== 'PGRST116') {
+ console.error('Error loading latest document version:', versionError);
+ return null;
+ }
+
+ const newVersion = (latestVersionData?.version || 0) + 1;
+
+ // Create a new document version
+ const { data, error } = await sb
+ .from('documents')
+ .insert({
+ conversation_id: conversationId,
+ version: newVersion,
+ content,
+ })
+ .select()
+ .single();
+
+ if (error) {
+ console.error('Error creating document version:', error);
+ return null;
+ }
+
+ return data as Document;
+ },
+
+ /**
+ * Get all versions of a document
+ */
+ async getAllDocumentVersions(conversationId: string): Promise {
+ const sb = getSupabase();
+
+ const { data, error } = await sb
+ .from('documents')
+ .select('*')
+ .eq('conversation_id', conversationId)
+ .order('version', { ascending: false });
+
+ if (error) {
+ console.error('Error loading document versions:', error);
+ return [];
+ }
+
+ return data as Document[];
+ },
+};
diff --git a/chat/apps/web/src/lib/services/space.ts b/chat/apps/web/src/lib/services/space.ts
new file mode 100644
index 000000000..e70ebbf62
--- /dev/null
+++ b/chat/apps/web/src/lib/services/space.ts
@@ -0,0 +1,214 @@
+/**
+ * Space Service - CRUD operations via Supabase
+ */
+
+import { createSupabaseBrowserClient } from './supabase';
+import type { Space, SpaceMember, SpaceCreate, SpaceUpdate } from '@chat/types';
+
+let supabase: ReturnType | null = null;
+
+function getSupabase() {
+ if (!supabase) {
+ supabase = createSupabaseBrowserClient();
+ }
+ return supabase;
+}
+
+export const spaceService = {
+ /**
+ * Get all spaces for a user (both owned and member of)
+ */
+ async getUserSpaces(userId: string): Promise {
+ const sb = getSupabase();
+
+ // Get space IDs the user is a member of (with accepted status)
+ const { data: memberData, error: memberError } = await sb
+ .from('space_members')
+ .select('space_id')
+ .eq('user_id', userId)
+ .eq('invitation_status', 'accepted');
+
+ if (memberError) {
+ console.error('Error fetching user space memberships:', memberError);
+ return [];
+ }
+
+ if (!memberData || memberData.length === 0) {
+ return [];
+ }
+
+ const spaceIds = memberData.map((m) => m.space_id);
+
+ // Fetch the actual space data
+ const { data: spaces, error: spacesError } = await sb
+ .from('spaces')
+ .select('*')
+ .in('id', spaceIds)
+ .eq('is_archived', false)
+ .order('created_at', { ascending: false });
+
+ if (spacesError) {
+ console.error('Error fetching spaces:', spacesError);
+ return [];
+ }
+
+ return spaces as Space[];
+ },
+
+ /**
+ * Get a single space by ID
+ */
+ async getSpace(spaceId: string): Promise {
+ const sb = getSupabase();
+
+ const { data, error } = await sb.from('spaces').select('*').eq('id', spaceId).single();
+
+ if (error) {
+ console.error('Error fetching space:', error);
+ return null;
+ }
+
+ return data as Space;
+ },
+
+ /**
+ * Create a new space
+ */
+ async createSpace(space: SpaceCreate): Promise {
+ const sb = getSupabase();
+
+ const { data, error } = await sb
+ .from('spaces')
+ .insert({
+ name: space.name,
+ description: space.description,
+ owner_id: space.owner_id,
+ })
+ .select('id')
+ .single();
+
+ if (error) {
+ console.error('Error creating space:', error);
+ return null;
+ }
+
+ return data.id;
+ },
+
+ /**
+ * Update a space
+ */
+ async updateSpace(spaceId: string, updates: SpaceUpdate): Promise {
+ const sb = getSupabase();
+
+ const { error } = await sb.from('spaces').update(updates).eq('id', spaceId);
+
+ if (error) {
+ console.error('Error updating space:', error);
+ return false;
+ }
+
+ return true;
+ },
+
+ /**
+ * Delete a space
+ */
+ async deleteSpace(spaceId: string): Promise {
+ const sb = getSupabase();
+
+ const { error } = await sb.from('spaces').delete().eq('id', spaceId);
+
+ if (error) {
+ console.error('Error deleting space:', error);
+ return false;
+ }
+
+ return true;
+ },
+
+ /**
+ * Get members of a space
+ */
+ async getSpaceMembers(spaceId: string): Promise {
+ const sb = getSupabase();
+
+ const { data, error } = await sb
+ .from('space_members')
+ .select('*')
+ .eq('space_id', spaceId)
+ .order('role', { ascending: true })
+ .order('joined_at', { ascending: false });
+
+ if (error) {
+ console.error('Error fetching space members:', error);
+ return [];
+ }
+
+ return data as SpaceMember[];
+ },
+
+ /**
+ * Get user's role in a space
+ */
+ async getUserRoleInSpace(
+ spaceId: string,
+ userId: string
+ ): Promise<'owner' | 'admin' | 'member' | 'viewer' | null> {
+ const sb = getSupabase();
+
+ // First check if they're the owner
+ const { data: space, error: spaceError } = await sb
+ .from('spaces')
+ .select('owner_id')
+ .eq('id', spaceId)
+ .single();
+
+ if (spaceError) {
+ console.error('Error checking space ownership:', spaceError);
+ return null;
+ }
+
+ if (space.owner_id === userId) {
+ return 'owner';
+ }
+
+ // If not owner, check membership
+ const { data: member, error: memberError } = await sb
+ .from('space_members')
+ .select('role, invitation_status')
+ .eq('space_id', spaceId)
+ .eq('user_id', userId)
+ .single();
+
+ if (memberError) {
+ return null;
+ }
+
+ if (member && member.invitation_status === 'accepted') {
+ return member.role as 'admin' | 'member' | 'viewer';
+ }
+
+ return null;
+ },
+
+ /**
+ * Leave a space
+ */
+ async leaveSpace(spaceId: string, userId: string): Promise {
+ const sb = getSupabase();
+
+ const { error } = await sb
+ .from('space_members')
+ .delete()
+ .eq('space_id', spaceId)
+ .eq('user_id', userId);
+
+ if (error) {
+ console.error('Error leaving space:', error);
+ return false;
+ }
+
+ return true;
+ },
+};
diff --git a/chat/apps/web/src/lib/services/supabase.ts b/chat/apps/web/src/lib/services/supabase.ts
new file mode 100644
index 000000000..3db9c50a3
--- /dev/null
+++ b/chat/apps/web/src/lib/services/supabase.ts
@@ -0,0 +1,42 @@
+/**
+ * Supabase Client for Chat Web App
+ * Uses the same Supabase instance as the mobile app
+ */
+
+import { createClient } from '@supabase/supabase-js';
+import { createBrowserClient, createServerClient } from '@supabase/ssr';
+import { env } from '$env/dynamic/public';
+import type { Cookies } from '@sveltejs/kit';
+
+const supabaseUrl = env.PUBLIC_SUPABASE_URL || '';
+const supabaseAnonKey = env.PUBLIC_SUPABASE_ANON_KEY || '';
+
+/**
+ * Browser client for client-side operations
+ */
+export function createSupabaseBrowserClient() {
+ return createBrowserClient(supabaseUrl, supabaseAnonKey);
+}
+
+/**
+ * Server client for SSR operations
+ */
+export function createSupabaseServerClient(cookies: Cookies) {
+ return createServerClient(supabaseUrl, supabaseAnonKey, {
+ cookies: {
+ getAll() {
+ return cookies.getAll();
+ },
+ setAll(cookiesToSet) {
+ cookiesToSet.forEach(({ name, value, options }) => {
+ cookies.set(name, value, { ...options, path: '/' });
+ });
+ },
+ },
+ });
+}
+
+/**
+ * Simple client for basic operations (no SSR)
+ */
+export const supabase = createClient(supabaseUrl, supabaseAnonKey);
diff --git a/chat/apps/web/src/lib/services/template.ts b/chat/apps/web/src/lib/services/template.ts
new file mode 100644
index 000000000..c67cdeb2c
--- /dev/null
+++ b/chat/apps/web/src/lib/services/template.ts
@@ -0,0 +1,157 @@
+/**
+ * Template Service - CRUD operations via Supabase
+ */
+
+import { createSupabaseBrowserClient } from './supabase';
+import type { Template, TemplateCreate, TemplateUpdate } from '@chat/types';
+
+let supabase: ReturnType | null = null;
+
+function getSupabase() {
+ if (!supabase) {
+ supabase = createSupabaseBrowserClient();
+ }
+ return supabase;
+}
+
+export const templateService = {
+ /**
+ * Get all templates for a user
+ */
+ async getTemplates(userId: string): Promise {
+ const sb = getSupabase();
+
+ const { data, error } = await sb
+ .from('templates')
+ .select('*')
+ .eq('user_id', userId)
+ .order('name');
+
+ if (error) {
+ console.error('Error loading templates:', error);
+ return [];
+ }
+
+ return data as Template[];
+ },
+
+ /**
+ * Get a single template by ID
+ */
+ async getTemplate(templateId: string): Promise {
+ const sb = getSupabase();
+
+ const { data, error } = await sb
+ .from('templates')
+ .select('*')
+ .eq('id', templateId)
+ .single();
+
+ if (error) {
+ console.error('Error loading template:', error);
+ return null;
+ }
+
+ return data as Template;
+ },
+
+ /**
+ * Get the default template for a user
+ */
+ async getDefaultTemplate(userId: string): Promise {
+ const sb = getSupabase();
+
+ const { data, error } = await sb
+ .from('templates')
+ .select('*')
+ .eq('user_id', userId)
+ .eq('is_default', true)
+ .single();
+
+ if (error) {
+ console.error('Error loading default template:', error);
+ return null;
+ }
+
+ return data as Template;
+ },
+
+ /**
+ * Create a new template
+ */
+ async createTemplate(template: TemplateCreate): Promise {
+ const sb = getSupabase();
+
+ const { data, error } = await sb
+ .from('templates')
+ .insert(template)
+ .select()
+ .single();
+
+ if (error) {
+ console.error('Error creating template:', error);
+ return null;
+ }
+
+ return data as Template;
+ },
+
+ /**
+ * Update a template
+ */
+ async updateTemplate(templateId: string, updates: TemplateUpdate): Promise {
+ const sb = getSupabase();
+
+ const { error } = await sb
+ .from('templates')
+ .update(updates)
+ .eq('id', templateId);
+
+ if (error) {
+ console.error('Error updating template:', error);
+ return false;
+ }
+
+ return true;
+ },
+
+ /**
+ * Delete a template
+ */
+ async deleteTemplate(templateId: string): Promise {
+ const sb = getSupabase();
+
+ const { error } = await sb.from('templates').delete().eq('id', templateId);
+
+ if (error) {
+ console.error('Error deleting template:', error);
+ return false;
+ }
+
+ return true;
+ },
+
+ /**
+ * Set a template as default
+ */
+ async setDefaultTemplate(templateId: string, userId: string): Promise {
+ const sb = getSupabase();
+
+ // First, unset all defaults for this user
+ await sb.from('templates').update({ is_default: false }).eq('user_id', userId);
+
+ // Then set the selected template as default
+ const { error } = await sb
+ .from('templates')
+ .update({ is_default: true })
+ .eq('id', templateId)
+ .eq('user_id', userId);
+
+ if (error) {
+ console.error('Error setting default template:', error);
+ return false;
+ }
+
+ return true;
+ },
+};
diff --git a/chat/apps/web/src/lib/stores/auth.svelte.ts b/chat/apps/web/src/lib/stores/auth.svelte.ts
new file mode 100644
index 000000000..216acd430
--- /dev/null
+++ b/chat/apps/web/src/lib/stores/auth.svelte.ts
@@ -0,0 +1,160 @@
+/**
+ * Auth Store - Manages authentication state using Svelte 5 runes
+ * Compatible with Chat mobile app (same Supabase instance)
+ */
+
+import { createSupabaseBrowserClient } from '$lib/services/supabase';
+import type { Session, User } from '@supabase/supabase-js';
+
+// State
+let session = $state(null);
+let user = $state(null);
+let loading = $state(true);
+let initialized = $state(false);
+
+// Create browser client
+let supabase: ReturnType | null = null;
+
+function getSupabase() {
+ if (!supabase) {
+ supabase = createSupabaseBrowserClient();
+ }
+ return supabase;
+}
+
+export const authStore = {
+ // Getters
+ get session() {
+ return session;
+ },
+ get user() {
+ return user;
+ },
+ get loading() {
+ return loading;
+ },
+ get isAuthenticated() {
+ return !!user;
+ },
+ get initialized() {
+ return initialized;
+ },
+
+ /**
+ * Initialize auth state from Supabase session
+ */
+ async initialize() {
+ if (initialized) return;
+
+ loading = true;
+ try {
+ const sb = getSupabase();
+
+ // Get current session
+ const {
+ data: { session: currentSession },
+ } = await sb.auth.getSession();
+
+ session = currentSession;
+ user = currentSession?.user ?? null;
+
+ // Subscribe to auth changes
+ sb.auth.onAuthStateChange((_event, newSession) => {
+ session = newSession;
+ user = newSession?.user ?? null;
+ });
+
+ initialized = true;
+ } catch (error) {
+ console.error('Failed to initialize auth:', error);
+ session = null;
+ user = null;
+ } finally {
+ loading = false;
+ }
+ },
+
+ /**
+ * Sign in with email and password
+ */
+ async signIn(email: string, password: string) {
+ const sb = getSupabase();
+ const { data, error } = await sb.auth.signInWithPassword({
+ email,
+ password,
+ });
+
+ if (error) {
+ return { success: false, error: error.message };
+ }
+
+ session = data.session;
+ user = data.user;
+ return { success: true, error: null };
+ },
+
+ /**
+ * Sign up with email and password
+ */
+ async signUp(email: string, password: string) {
+ const sb = getSupabase();
+ const { data, error } = await sb.auth.signUp({
+ email,
+ password,
+ options: {
+ data: {
+ email_confirmed: true,
+ },
+ },
+ });
+
+ if (error) {
+ return { success: false, error: error.message, needsVerification: false };
+ }
+
+ // Check if email confirmation is required
+ if (data.user && !data.session) {
+ return { success: true, error: null, needsVerification: true };
+ }
+
+ session = data.session;
+ user = data.user;
+ return { success: true, error: null, needsVerification: false };
+ },
+
+ /**
+ * Sign out
+ */
+ async signOut() {
+ const sb = getSupabase();
+ await sb.auth.signOut();
+ session = null;
+ user = null;
+ },
+
+ /**
+ * Send password reset email
+ */
+ async resetPassword(email: string) {
+ const sb = getSupabase();
+ const { error } = await sb.auth.resetPasswordForEmail(email, {
+ redirectTo: `${window.location.origin}/auth/reset-password`,
+ });
+
+ if (error) {
+ return { success: false, error: error.message };
+ }
+
+ return { success: true, error: null };
+ },
+
+ /**
+ * Set session from server-side data
+ */
+ setSession(newSession: Session | null) {
+ session = newSession;
+ user = newSession?.user ?? null;
+ initialized = true;
+ loading = false;
+ },
+};
diff --git a/chat/apps/web/src/lib/stores/chat.svelte.ts b/chat/apps/web/src/lib/stores/chat.svelte.ts
new file mode 100644
index 000000000..fe87480ea
--- /dev/null
+++ b/chat/apps/web/src/lib/stores/chat.svelte.ts
@@ -0,0 +1,125 @@
+/**
+ * Chat Store - Manages current chat state using Svelte 5 runes
+ */
+
+import { chatService, type ChatCompletionRequest } from '$lib/services/chat';
+import type { Message, AIModel, ChatMessage } from '@chat/types';
+
+// State
+let messages = $state([]);
+let models = $state([]);
+let selectedModelId = $state('');
+let isLoading = $state(false);
+let isSending = $state(false);
+let error = $state(null);
+
+// Temporary message counter for IDs
+let messageCounter = 0;
+
+export const chatStore = {
+ // Getters
+ get messages() {
+ return messages;
+ },
+ get models() {
+ return models;
+ },
+ get selectedModelId() {
+ return selectedModelId;
+ },
+ get selectedModel() {
+ return models.find((m) => m.id === selectedModelId) || null;
+ },
+ get isLoading() {
+ return isLoading;
+ },
+ get isSending() {
+ return isSending;
+ },
+ get error() {
+ return error;
+ },
+
+ // Actions
+ async loadModels() {
+ isLoading = true;
+ error = null;
+ try {
+ models = await chatService.getModels();
+ if (models.length > 0 && !selectedModelId) {
+ selectedModelId = models[0].id;
+ }
+ } catch (e) {
+ error = e instanceof Error ? e.message : 'Failed to load models';
+ } finally {
+ isLoading = false;
+ }
+ },
+
+ setSelectedModel(modelId: string) {
+ selectedModelId = modelId;
+ },
+
+ async sendMessage(text: string) {
+ if (!text.trim() || !selectedModelId) return;
+
+ isSending = true;
+ error = null;
+
+ // Add user message
+ const userMessage: Message = {
+ id: `temp-${++messageCounter}`,
+ conversation_id: '',
+ sender: 'user',
+ message_text: text,
+ created_at: new Date().toISOString(),
+ };
+ messages = [...messages, userMessage];
+
+ try {
+ // Build chat messages for API
+ const chatMessages: ChatMessage[] = messages.map((m) => ({
+ role: m.sender === 'user' ? 'user' : 'assistant',
+ content: m.message_text,
+ }));
+
+ const request: ChatCompletionRequest = {
+ messages: chatMessages,
+ modelId: selectedModelId,
+ };
+
+ const response = await chatService.createCompletion(request);
+
+ if (response) {
+ // Add assistant message
+ const assistantMessage: Message = {
+ id: `temp-${++messageCounter}`,
+ conversation_id: '',
+ sender: 'assistant',
+ message_text: response.content,
+ created_at: new Date().toISOString(),
+ };
+ messages = [...messages, assistantMessage];
+ } else {
+ error = 'Failed to get response';
+ }
+ } catch (e) {
+ error = e instanceof Error ? e.message : 'Failed to send message';
+ } finally {
+ isSending = false;
+ }
+ },
+
+ clearMessages() {
+ messages = [];
+ messageCounter = 0;
+ error = null;
+ },
+
+ reset() {
+ messages = [];
+ messageCounter = 0;
+ error = null;
+ isSending = false;
+ },
+};
diff --git a/chat/apps/web/src/lib/stores/conversations.svelte.ts b/chat/apps/web/src/lib/stores/conversations.svelte.ts
new file mode 100644
index 000000000..b93df09cd
--- /dev/null
+++ b/chat/apps/web/src/lib/stores/conversations.svelte.ts
@@ -0,0 +1,135 @@
+/**
+ * Conversations Store - Manages conversation list using Svelte 5 runes
+ */
+
+import { conversationService } from '$lib/services/conversation';
+import type { Conversation } from '@chat/types';
+
+// State
+let conversations = $state([]);
+let archivedConversations = $state([]);
+let isLoading = $state(false);
+let error = $state(null);
+
+export const conversationsStore = {
+ // Getters
+ get conversations() {
+ return conversations;
+ },
+ get archivedConversations() {
+ return archivedConversations;
+ },
+ get isLoading() {
+ return isLoading;
+ },
+ get error() {
+ return error;
+ },
+
+ /**
+ * Load conversations for a user
+ */
+ async loadConversations(userId: string, spaceId?: string) {
+ isLoading = true;
+ error = null;
+
+ try {
+ conversations = await conversationService.getConversations(userId, spaceId);
+ } catch (e) {
+ error = e instanceof Error ? e.message : 'Failed to load conversations';
+ conversations = [];
+ } finally {
+ isLoading = false;
+ }
+ },
+
+ /**
+ * Load archived conversations
+ */
+ async loadArchivedConversations(userId: string) {
+ isLoading = true;
+ error = null;
+
+ try {
+ archivedConversations = await conversationService.getArchivedConversations(userId);
+ } catch (e) {
+ error = e instanceof Error ? e.message : 'Failed to load archived conversations';
+ archivedConversations = [];
+ } finally {
+ isLoading = false;
+ }
+ },
+
+ /**
+ * Add a new conversation to the list
+ */
+ addConversation(conversation: Conversation) {
+ conversations = [conversation, ...conversations];
+ },
+
+ /**
+ * Update a conversation in the list
+ */
+ updateConversation(conversationId: string, updates: Partial) {
+ conversations = conversations.map((c) =>
+ c.id === conversationId ? { ...c, ...updates } : c
+ );
+ },
+
+ /**
+ * Archive a conversation
+ */
+ async archiveConversation(conversationId: string) {
+ const success = await conversationService.archiveConversation(conversationId);
+
+ if (success) {
+ const conversation = conversations.find((c) => c.id === conversationId);
+ if (conversation) {
+ conversations = conversations.filter((c) => c.id !== conversationId);
+ archivedConversations = [{ ...conversation, is_archived: true }, ...archivedConversations];
+ }
+ }
+
+ return success;
+ },
+
+ /**
+ * Unarchive a conversation
+ */
+ async unarchiveConversation(conversationId: string) {
+ const success = await conversationService.unarchiveConversation(conversationId);
+
+ if (success) {
+ const conversation = archivedConversations.find((c) => c.id === conversationId);
+ if (conversation) {
+ archivedConversations = archivedConversations.filter((c) => c.id !== conversationId);
+ conversations = [{ ...conversation, is_archived: false }, ...conversations];
+ }
+ }
+
+ return success;
+ },
+
+ /**
+ * Delete a conversation
+ */
+ async deleteConversation(conversationId: string) {
+ const success = await conversationService.deleteConversation(conversationId);
+
+ if (success) {
+ conversations = conversations.filter((c) => c.id !== conversationId);
+ archivedConversations = archivedConversations.filter((c) => c.id !== conversationId);
+ }
+
+ return success;
+ },
+
+ /**
+ * Clear all data
+ */
+ reset() {
+ conversations = [];
+ archivedConversations = [];
+ error = null;
+ },
+};
diff --git a/chat/apps/web/src/lib/stores/spaces.svelte.ts b/chat/apps/web/src/lib/stores/spaces.svelte.ts
new file mode 100644
index 000000000..19ad6625e
--- /dev/null
+++ b/chat/apps/web/src/lib/stores/spaces.svelte.ts
@@ -0,0 +1,122 @@
+/**
+ * Spaces Store - Manages space list using Svelte 5 runes
+ */
+
+import { spaceService } from '$lib/services/space';
+import type { Space, SpaceCreate, SpaceUpdate } from '@chat/types';
+
+// State
+let spaces = $state([]);
+let isLoading = $state(false);
+let error = $state(null);
+
+export const spacesStore = {
+ // Getters
+ get spaces() {
+ return spaces;
+ },
+ get isLoading() {
+ return isLoading;
+ },
+ get error() {
+ return error;
+ },
+
+ /**
+ * Load spaces for a user
+ */
+ async loadSpaces(userId: string) {
+ isLoading = true;
+ error = null;
+
+ try {
+ spaces = await spaceService.getUserSpaces(userId);
+ } catch (e) {
+ error = e instanceof Error ? e.message : 'Failed to load spaces';
+ spaces = [];
+ } finally {
+ isLoading = false;
+ }
+ },
+
+ /**
+ * Create a new space
+ */
+ async createSpace(space: SpaceCreate): Promise {
+ error = null;
+
+ try {
+ const spaceId = await spaceService.createSpace(space);
+ if (spaceId) {
+ // Reload spaces to get the new one with full data
+ await this.loadSpaces(space.owner_id);
+ }
+ return spaceId;
+ } catch (e) {
+ error = e instanceof Error ? e.message : 'Failed to create space';
+ return null;
+ }
+ },
+
+ /**
+ * Update a space
+ */
+ async updateSpace(spaceId: string, updates: SpaceUpdate): Promise {
+ error = null;
+
+ try {
+ const success = await spaceService.updateSpace(spaceId, updates);
+ if (success) {
+ spaces = spaces.map((s) => (s.id === spaceId ? { ...s, ...updates } : s));
+ }
+ return success;
+ } catch (e) {
+ error = e instanceof Error ? e.message : 'Failed to update space';
+ return false;
+ }
+ },
+
+ /**
+ * Delete a space
+ */
+ async deleteSpace(spaceId: string): Promise {
+ error = null;
+
+ try {
+ const success = await spaceService.deleteSpace(spaceId);
+ if (success) {
+ spaces = spaces.filter((s) => s.id !== spaceId);
+ }
+ return success;
+ } catch (e) {
+ error = e instanceof Error ? e.message : 'Failed to delete space';
+ return false;
+ }
+ },
+
+ /**
+ * Leave a space
+ */
+ async leaveSpace(spaceId: string, userId: string): Promise {
+ error = null;
+
+ try {
+ const success = await spaceService.leaveSpace(spaceId, userId);
+ if (success) {
+ spaces = spaces.filter((s) => s.id !== spaceId);
+ }
+ return success;
+ } catch (e) {
+ error = e instanceof Error ? e.message : 'Failed to leave space';
+ return false;
+ }
+ },
+
+ /**
+ * Reset store
+ */
+ reset() {
+ spaces = [];
+ error = null;
+ },
+};
diff --git a/chat/apps/web/src/lib/stores/templates.svelte.ts b/chat/apps/web/src/lib/stores/templates.svelte.ts
new file mode 100644
index 000000000..917623f73
--- /dev/null
+++ b/chat/apps/web/src/lib/stores/templates.svelte.ts
@@ -0,0 +1,126 @@
+/**
+ * Templates Store - Manages template list using Svelte 5 runes
+ */
+
+import { templateService } from '$lib/services/template';
+import type { Template, TemplateCreate, TemplateUpdate } from '@chat/types';
+
+// State
+let templates = $state([]);
+let isLoading = $state(false);
+let error = $state(null);
+
+export const templatesStore = {
+ // Getters
+ get templates() {
+ return templates;
+ },
+ get isLoading() {
+ return isLoading;
+ },
+ get error() {
+ return error;
+ },
+
+ /**
+ * Load templates for a user
+ */
+ async loadTemplates(userId: string) {
+ isLoading = true;
+ error = null;
+
+ try {
+ templates = await templateService.getTemplates(userId);
+ } catch (e) {
+ error = e instanceof Error ? e.message : 'Failed to load templates';
+ templates = [];
+ } finally {
+ isLoading = false;
+ }
+ },
+
+ /**
+ * Create a new template
+ */
+ async createTemplate(template: TemplateCreate): Promise {
+ error = null;
+
+ try {
+ const newTemplate = await templateService.createTemplate(template);
+ if (newTemplate) {
+ templates = [...templates, newTemplate].sort((a, b) => a.name.localeCompare(b.name));
+ }
+ return newTemplate;
+ } catch (e) {
+ error = e instanceof Error ? e.message : 'Failed to create template';
+ return null;
+ }
+ },
+
+ /**
+ * Update a template
+ */
+ async updateTemplate(templateId: string, updates: TemplateUpdate): Promise {
+ error = null;
+
+ try {
+ const success = await templateService.updateTemplate(templateId, updates);
+ if (success) {
+ templates = templates
+ .map((t) => (t.id === templateId ? { ...t, ...updates } : t))
+ .sort((a, b) => a.name.localeCompare(b.name));
+ }
+ return success;
+ } catch (e) {
+ error = e instanceof Error ? e.message : 'Failed to update template';
+ return false;
+ }
+ },
+
+ /**
+ * Delete a template
+ */
+ async deleteTemplate(templateId: string): Promise {
+ error = null;
+
+ try {
+ const success = await templateService.deleteTemplate(templateId);
+ if (success) {
+ templates = templates.filter((t) => t.id !== templateId);
+ }
+ return success;
+ } catch (e) {
+ error = e instanceof Error ? e.message : 'Failed to delete template';
+ return false;
+ }
+ },
+
+ /**
+ * Set a template as default
+ */
+ async setDefaultTemplate(templateId: string, userId: string): Promise {
+ error = null;
+
+ try {
+ const success = await templateService.setDefaultTemplate(templateId, userId);
+ if (success) {
+ templates = templates.map((t) => ({
+ ...t,
+ is_default: t.id === templateId,
+ }));
+ }
+ return success;
+ } catch (e) {
+ error = e instanceof Error ? e.message : 'Failed to set default template';
+ return false;
+ }
+ },
+
+ /**
+ * Reset store
+ */
+ reset() {
+ templates = [];
+ error = null;
+ },
+};
diff --git a/chat/apps/web/src/lib/stores/theme.ts b/chat/apps/web/src/lib/stores/theme.ts
new file mode 100644
index 000000000..857578ceb
--- /dev/null
+++ b/chat/apps/web/src/lib/stores/theme.ts
@@ -0,0 +1,10 @@
+import { createThemeStore } from '@manacore/shared-theme';
+
+export const theme = createThemeStore({
+ appId: 'chat',
+ defaultVariant: 'ocean',
+ primaryColor: {
+ light: '217 91% 60%', // Blue
+ dark: '217 91% 60%',
+ },
+});
diff --git a/chat/apps/web/src/routes/(auth)/+layout.svelte b/chat/apps/web/src/routes/(auth)/+layout.svelte
new file mode 100644
index 000000000..d656227e1
--- /dev/null
+++ b/chat/apps/web/src/routes/(auth)/+layout.svelte
@@ -0,0 +1,9 @@
+
+
+
+
+ {@render children()}
+
+
diff --git a/chat/apps/web/src/routes/(auth)/forgot-password/+page.svelte b/chat/apps/web/src/routes/(auth)/forgot-password/+page.svelte
new file mode 100644
index 000000000..cae527146
--- /dev/null
+++ b/chat/apps/web/src/routes/(auth)/forgot-password/+page.svelte
@@ -0,0 +1,101 @@
+
+
+
+ Passwort zurücksetzen | ManaChat
+
+
+
+
+
Passwort zurücksetzen
+
+ Gib deine E-Mail-Adresse ein, um dein Passwort zurückzusetzen
+
+
+
+ {#if success}
+
+
+ Wir haben dir eine E-Mail mit einem Link zum Zurücksetzen deines Passworts gesendet.
+
+
+
+ {:else}
+ {#if error}
+
+ {error}
+
+ {/if}
+
+
+
+
+ {/if}
+
diff --git a/chat/apps/web/src/routes/(auth)/login/+page.svelte b/chat/apps/web/src/routes/(auth)/login/+page.svelte
new file mode 100644
index 000000000..3488b5c7c
--- /dev/null
+++ b/chat/apps/web/src/routes/(auth)/login/+page.svelte
@@ -0,0 +1,56 @@
+
+
+
+ Anmelden | ManaChat
+
+
+
diff --git a/chat/apps/web/src/routes/(auth)/register/+page.svelte b/chat/apps/web/src/routes/(auth)/register/+page.svelte
new file mode 100644
index 000000000..fdb6a8194
--- /dev/null
+++ b/chat/apps/web/src/routes/(auth)/register/+page.svelte
@@ -0,0 +1,156 @@
+
+
+
+ Registrieren | ManaChat
+
+
+
+
+
ManaChat
+
Erstelle dein Konto
+
+
+ {#if success}
+
+
+ Bitte überprüfe deine E-Mails, um dein Konto zu bestätigen.
+
+
+
+ {:else}
+ {#if error}
+
+ {error}
+
+ {/if}
+
+
+
+
+
+ Bereits ein Konto?
+
+ Jetzt anmelden
+
+
+
+ {/if}
+
diff --git a/chat/apps/web/src/routes/(protected)/+layout.server.ts b/chat/apps/web/src/routes/(protected)/+layout.server.ts
new file mode 100644
index 000000000..5411ea201
--- /dev/null
+++ b/chat/apps/web/src/routes/(protected)/+layout.server.ts
@@ -0,0 +1,22 @@
+/**
+ * Protected routes layout server
+ * Validates session and redirects to login if not authenticated
+ */
+
+import { redirect } from '@sveltejs/kit';
+import type { LayoutServerLoad } from './$types';
+
+export const load: LayoutServerLoad = async ({ locals, url }) => {
+ const { session, user } = await locals.safeGetSession();
+
+ if (!session) {
+ // Redirect to login with return URL
+ const redirectTo = encodeURIComponent(url.pathname);
+ redirect(303, `/login?redirectTo=${redirectTo}`);
+ }
+
+ return {
+ session,
+ user,
+ };
+};
diff --git a/chat/apps/web/src/routes/(protected)/+layout.svelte b/chat/apps/web/src/routes/(protected)/+layout.svelte
new file mode 100644
index 000000000..45bb053f9
--- /dev/null
+++ b/chat/apps/web/src/routes/(protected)/+layout.svelte
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+ {@render children()}
+
+
diff --git a/chat/apps/web/src/routes/(protected)/archive/+page.svelte b/chat/apps/web/src/routes/(protected)/archive/+page.svelte
new file mode 100644
index 000000000..7dc807fe4
--- /dev/null
+++ b/chat/apps/web/src/routes/(protected)/archive/+page.svelte
@@ -0,0 +1,166 @@
+
+
+
+ Archiv | ManaChat
+
+
+
+
+
+
+
Archiv
+
+ Deine archivierten Konversationen.
+
+
+
+
+ {#if isLoading}
+
+ {:else if conversations.length === 0}
+
+
+
+
Keine archivierten Konversationen
+
+ Archivierte Gespräche erscheinen hier.
+
+
+ {:else}
+
+
+ {#each conversations as conv (conv.id)}
+
+
+
+
+
+
+
+
+
+ {/each}
+
+ {/if}
+
+
+ {#if conversationsStore.error}
+
+ {conversationsStore.error}
+
+ {/if}
+
+
diff --git a/chat/apps/web/src/routes/(protected)/chat/+layout.svelte b/chat/apps/web/src/routes/(protected)/chat/+layout.svelte
new file mode 100644
index 000000000..93bdd4bcb
--- /dev/null
+++ b/chat/apps/web/src/routes/(protected)/chat/+layout.svelte
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+ {#if showSidebar}
+
+ {/if}
+
+
+
+ {@render children()}
+
+
diff --git a/chat/apps/web/src/routes/(protected)/chat/+page.svelte b/chat/apps/web/src/routes/(protected)/chat/+page.svelte
new file mode 100644
index 000000000..493181e95
--- /dev/null
+++ b/chat/apps/web/src/routes/(protected)/chat/+page.svelte
@@ -0,0 +1,227 @@
+
+
+
+ Chat | ManaChat
+
+
+
+
+
+
+
+
Neuer Chat
+
+
+
+
+
+ {#if templates.length > 0}
+
+ {/if}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {#if error}
+
+ {error}
+
+ {/if}
+
diff --git a/chat/apps/web/src/routes/(protected)/chat/[id]/+page.svelte b/chat/apps/web/src/routes/(protected)/chat/[id]/+page.svelte
new file mode 100644
index 000000000..f67980538
--- /dev/null
+++ b/chat/apps/web/src/routes/(protected)/chat/[id]/+page.svelte
@@ -0,0 +1,403 @@
+
+
+
+ {conversation?.title || 'Chat'} | ManaChat
+
+
+{#if isLoading}
+
+{:else if error && !conversation}
+
+{:else}
+
+
+
+
+
+
+
+
+
+
+ {#if isDocumentMode && showDocumentPanel}
+
+
+
+
+
+
Dokument
+ {#if document}
+
+ v{document.version}
+
+ {/if}
+
+
+
+
+
+
+
+
+
+
+
+
+ {/if}
+
+
+
+ {#if error}
+
+ {error}
+
+ {/if}
+
+
+
+ {#if showVersionsModal}
+
+
+
+
Dokumentversionen
+
+
+
+ {#if documentVersions.length === 0}
+
Keine Versionen vorhanden
+ {:else}
+
+ {#each documentVersions as version (version.id)}
+
+ {/each}
+
+ {/if}
+
+
+
+ {/if}
+{/if}
diff --git a/chat/apps/web/src/routes/(protected)/documents/+page.svelte b/chat/apps/web/src/routes/(protected)/documents/+page.svelte
new file mode 100644
index 000000000..dff6aa698
--- /dev/null
+++ b/chat/apps/web/src/routes/(protected)/documents/+page.svelte
@@ -0,0 +1,176 @@
+
+
+
+ Dokumente | ManaChat
+
+
+
+
+
+
+
+
Dokumente
+
+ Alle Dokumente aus deinen Konversationen im Dokumentmodus.
+
+
+
+
+
+
+ {#if isLoading}
+
+ {:else if documents.length === 0}
+
+
+
+
Keine Dokumente gefunden
+
+ Erstelle ein neues Dokument in einer Konversation mit aktiviertem Dokumentmodus.
+
+
+ {:else}
+
+
+ {#each documents as doc (doc.id)}
+
+ {/each}
+
+ {/if}
+
+
+ {#if error}
+
+ {error}
+
+ {/if}
+
+
diff --git a/chat/apps/web/src/routes/(protected)/profile/+page.svelte b/chat/apps/web/src/routes/(protected)/profile/+page.svelte
new file mode 100644
index 000000000..fe54f8147
--- /dev/null
+++ b/chat/apps/web/src/routes/(protected)/profile/+page.svelte
@@ -0,0 +1,132 @@
+
+
+
+ Profil | ManaChat
+
+
+
+
+
+
+
Profil
+
+ Verwalte dein Konto und deine Einstellungen.
+
+
+
+
+
+
+
+
+
+
+ {authStore.user?.email || 'Benutzer'}
+
+
+ Mitglied seit {formatDate(authStore.user?.created_at)}
+
+
+
+
+
+
+
+
E-Mail
+
{authStore.user?.email || '-'}
+
+
+
+
+
Benutzer-ID
+
{authStore.user?.id || '-'}
+
+
+
+
+
+
+
+
+
+
Einstellungen
+
+
+
+
+
+
Dunkler Modus
+
Aktiviere den dunklen Modus für die App
+
+
+
+
+
+
+
+
+
+
+
diff --git a/chat/apps/web/src/routes/(protected)/spaces/+page.svelte b/chat/apps/web/src/routes/(protected)/spaces/+page.svelte
new file mode 100644
index 000000000..14d086d63
--- /dev/null
+++ b/chat/apps/web/src/routes/(protected)/spaces/+page.svelte
@@ -0,0 +1,175 @@
+
+
+
+ Spaces | ManaChat
+
+
+
+
+
+
+
+
Spaces
+
+ Organisiere deine Konversationen in kollaborativen Arbeitsbereichen.
+
+
+
+
+
+
+ {#if spacesStore.isLoading}
+
+ {:else if spacesStore.spaces.length === 0}
+
+
+
+
Keine Spaces gefunden
+
+ Erstelle einen neuen Space oder frage nach einer Einladung
+
+
+
+ {:else}
+
+
+ {#each spacesStore.spaces as space (space.id)}
+
+ {/each}
+
+ {/if}
+
+
+ {#if spacesStore.error}
+
+ {spacesStore.error}
+
+ {/if}
+
+
+
+
+{#if showForm}
+
+{/if}
diff --git a/chat/apps/web/src/routes/(protected)/spaces/[id]/+page.svelte b/chat/apps/web/src/routes/(protected)/spaces/[id]/+page.svelte
new file mode 100644
index 000000000..506a1de99
--- /dev/null
+++ b/chat/apps/web/src/routes/(protected)/spaces/[id]/+page.svelte
@@ -0,0 +1,188 @@
+
+
+
+ {space?.name || 'Space'} | ManaChat
+
+
+{#if isLoading}
+
+{:else if error}
+
+{:else if space}
+
+
+
+
+
+ {#if space.description}
+
{space.description}
+ {/if}
+
+
+
+
+
Neuen Chat starten
+
+
+
+
+
+
+
+
+
+ Konversationen in diesem Space
+
+
+ {#if conversations.length === 0}
+
+
+
+ Noch keine Konversationen in diesem Space.
+
+
+ {:else}
+
+ {/if}
+
+
+
+{/if}
diff --git a/chat/apps/web/src/routes/(protected)/templates/+page.svelte b/chat/apps/web/src/routes/(protected)/templates/+page.svelte
new file mode 100644
index 000000000..3c7c1eefc
--- /dev/null
+++ b/chat/apps/web/src/routes/(protected)/templates/+page.svelte
@@ -0,0 +1,197 @@
+
+
+
+ Vorlagen | ManaChat
+
+
+
+
+
+
+
+
Vorlagen
+
+ Erstelle Vorlagen mit benutzerdefinierten System-Prompts für verschiedene KI-Verhaltensweisen.
+
+
+
+
+
+
+ {#if templatesStore.isLoading}
+
+ {:else if templatesStore.templates.length === 0}
+
+
+
+
Keine Vorlagen vorhanden
+
+ Erstelle deine erste Vorlage, um loszulegen
+
+
+
+ {:else}
+
+
+ {#each templatesStore.templates as template (template.id)}
+
+ {/each}
+
+ {/if}
+
+
+ {#if templatesStore.error}
+
+ {templatesStore.error}
+
+ {/if}
+
+
+
+
+{#if showForm}
+
+{/if}
diff --git a/chat/apps/web/src/routes/+layout.svelte b/chat/apps/web/src/routes/+layout.svelte
index abfcde074..3eed3aef0 100644
--- a/chat/apps/web/src/routes/+layout.svelte
+++ b/chat/apps/web/src/routes/+layout.svelte
@@ -1,7 +1,14 @@
diff --git a/chat/apps/web/src/routes/+page.svelte b/chat/apps/web/src/routes/+page.svelte
index 0999c00aa..b673a6928 100644
--- a/chat/apps/web/src/routes/+page.svelte
+++ b/chat/apps/web/src/routes/+page.svelte
@@ -1,23 +1,27 @@
- ManaChat - AI Chat Assistant
-
+ ManaChat - AI Chat Assistant
+
-
-
-
ManaChat
-
- AI Chat Assistant - Coming Soon
-
-
-
- The web application is under development.
- Please use the mobile app in the meantime.
-
-
-
-
+
diff --git a/chat/apps/web/vite.config.ts b/chat/apps/web/vite.config.ts
index 56c636cdf..66c75af49 100644
--- a/chat/apps/web/vite.config.ts
+++ b/chat/apps/web/vite.config.ts
@@ -4,6 +4,22 @@ import { defineConfig } from 'vite';
export default defineConfig({
plugins: [sveltekit()],
ssr: {
- noExternal: ['marked']
+ noExternal: [
+ 'marked',
+ '@manacore/shared-theme',
+ '@manacore/shared-auth-ui',
+ '@manacore/shared-branding',
+ '@manacore/shared-ui',
+ '@manacore/shared-theme-ui'
+ ]
+ },
+ optimizeDeps: {
+ exclude: [
+ '@manacore/shared-theme',
+ '@manacore/shared-auth-ui',
+ '@manacore/shared-branding',
+ '@manacore/shared-ui',
+ '@manacore/shared-theme-ui'
+ ]
}
});
diff --git a/chat/backend/package.json b/chat/backend/package.json
index 7098b7ced..6e4a2c84f 100644
--- a/chat/backend/package.json
+++ b/chat/backend/package.json
@@ -5,6 +5,7 @@
"scripts": {
"build": "nest build",
"start": "nest start",
+ "dev": "nest start --watch",
"start:dev": "nest start --watch",
"start:debug": "nest start --debug --watch",
"start:prod": "node dist/main",
diff --git a/chat/packages/chat-types/src/index.ts b/chat/packages/chat-types/src/index.ts
index 6748aaeb9..b90458394 100644
--- a/chat/packages/chat-types/src/index.ts
+++ b/chat/packages/chat-types/src/index.ts
@@ -64,19 +64,45 @@ export interface ChatCompletionResponse {
// Template Types
export interface Template {
id: string;
+ user_id: string;
name: string;
- description: string;
+ description: string | null;
system_prompt: string;
+ initial_question: string | null;
+ model_id: string | null;
+ color: string;
+ is_default: boolean;
+ document_mode: boolean;
created_at: string;
updated_at: string;
}
+export type TemplateCreate = Omit
;
+export type TemplateUpdate = Partial>;
+
// Space Types
export interface Space {
id: string;
name: string;
description?: string;
owner_id: string;
+ is_archived: boolean;
+ created_at: string;
+ updated_at: string;
+}
+
+export type SpaceCreate = Pick;
+export type SpaceUpdate = Partial>;
+
+export interface SpaceMember {
+ id: string;
+ space_id: string;
+ user_id: string;
+ role: 'owner' | 'admin' | 'member' | 'viewer';
+ invitation_status: 'pending' | 'accepted' | 'declined';
+ invited_by?: string;
+ invited_at: string;
+ joined_at?: string;
created_at: string;
updated_at: string;
}
@@ -85,9 +111,12 @@ export interface Space {
export interface Document {
id: string;
conversation_id: string;
- title: string;
content: string;
version: number;
created_at: string;
updated_at: string;
}
+
+export interface DocumentWithConversation extends Document {
+ conversation_title: string;
+}
diff --git a/manadeck/backend/package.json b/manadeck/backend/package.json
index 099227a16..147ad423d 100644
--- a/manadeck/backend/package.json
+++ b/manadeck/backend/package.json
@@ -9,6 +9,7 @@
"build": "nest build",
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
"start": "nest start",
+ "dev": "nest start --watch",
"start:dev": "nest start --watch",
"start:debug": "nest start --debug --watch",
"start:prod": "node dist/main",
diff --git a/package.json b/package.json
index df74b9717..7d683f4b0 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "manacore-monorepo",
"version": "1.0.0",
"private": true,
- "description": "Manacore Monorepo containing maerchenzauber, manacore, manadeck, and memoro",
+ "description": "Manacore Monorepo containing maerchenzauber, manacore, manadeck, memoro, picture, uload, chat, and nutriphi",
"scripts": {
"dev": "turbo run dev",
"build": "turbo run build",
@@ -25,6 +25,7 @@
"dev:maerchenzauber:landing": "pnpm --filter @maerchenzauber/landing dev",
"dev:maerchenzauber:backend": "pnpm --filter @maerchenzauber/backend dev",
"dev:maerchenzauber:mobile": "pnpm --filter @maerchenzauber/mobile dev",
+ "dev:maerchenzauber:app": "turbo run dev --filter=@maerchenzauber/web --filter=@maerchenzauber/backend",
"dev:manacore:web": "pnpm --filter @manacore/web dev",
"dev:manacore:landing": "pnpm --filter @manacore/landing dev",
@@ -34,6 +35,7 @@
"dev:manadeck:landing": "pnpm --filter @manadeck/landing dev",
"dev:manadeck:backend": "pnpm --filter @manadeck/backend dev",
"dev:manadeck:mobile": "pnpm --filter @manadeck/mobile dev",
+ "dev:manadeck:app": "turbo run dev --filter=@manadeck/web --filter=@manadeck/backend",
"dev:memoro:web": "pnpm --filter @memoro/web dev",
"dev:memoro:landing": "pnpm --filter @memoro/landing dev",
@@ -48,7 +50,15 @@
"dev:chat:mobile": "pnpm --filter @chat/mobile dev",
"dev:chat:web": "pnpm --filter @chat/web dev",
"dev:chat:landing": "pnpm --filter @chat/landing dev",
- "dev:chat:backend": "pnpm --filter @chat/backend start:dev"
+ "dev:chat:backend": "pnpm --filter @chat/backend start:dev",
+ "dev:chat:app": "turbo run dev --filter=@chat/web --filter=@chat/backend",
+
+ "nutriphi:dev": "turbo run dev --filter=nutriphi...",
+ "dev:nutriphi:mobile": "pnpm --filter @nutriphi/mobile dev",
+ "dev:nutriphi:web": "pnpm --filter @nutriphi/web dev",
+ "dev:nutriphi:landing": "pnpm --filter @nutriphi/landing dev",
+ "dev:nutriphi:backend": "pnpm --filter @nutriphi/backend start:dev",
+ "dev:nutriphi:app": "turbo run dev --filter=@nutriphi/web --filter=@nutriphi/backend"
},
"devDependencies": {
"prettier": "^3.3.3",
diff --git a/packages/shared-branding/src/config.ts b/packages/shared-branding/src/config.ts
index fe2f45abc..71f1873d3 100644
--- a/packages/shared-branding/src/config.ts
+++ b/packages/shared-branding/src/config.ts
@@ -63,6 +63,18 @@ export const APP_BRANDING: Record = {
logoStroke: true,
logoStrokeWidth: 2,
},
+ chat: {
+ id: 'chat',
+ name: 'ManaChat',
+ tagline: 'AI Chat Assistant',
+ primaryColor: '#0ea5e9',
+ secondaryColor: '#38bdf8',
+ // Chat bubble icon
+ logoPath: 'M8.625 12a.375.375 0 11-.75 0 .375.375 0 01.75 0zm0 0H8.25m4.125 0a.375.375 0 11-.75 0 .375.375 0 01.75 0zm0 0H12m4.125 0a.375.375 0 11-.75 0 .375.375 0 01.75 0zm0 0h-.375M21 12c0 4.556-4.03 8.25-9 8.25a9.764 9.764 0 01-2.555-.337A5.972 5.972 0 015.41 20.97a5.969 5.969 0 01-.474-.065 4.48 4.48 0 00.978-2.025c.09-.457-.133-.901-.467-1.226C3.93 16.178 3 14.189 3 12c0-4.556 4.03-8.25 9-8.25s9 3.694 9 8.25z',
+ logoViewBox: '0 0 24 24',
+ logoStroke: true,
+ logoStrokeWidth: 1.5,
+ },
};
/**
diff --git a/packages/shared-branding/src/index.ts b/packages/shared-branding/src/index.ts
index 55c836a52..c3d928c3b 100644
--- a/packages/shared-branding/src/index.ts
+++ b/packages/shared-branding/src/index.ts
@@ -19,7 +19,8 @@ export {
ManaCoreLogo,
ManaDeckLogo,
StorytellerLogo,
- UloadLogo
+ UloadLogo,
+ ChatLogo
} from './logos';
// Configuration
diff --git a/packages/shared-branding/src/logos/ChatLogo.svelte b/packages/shared-branding/src/logos/ChatLogo.svelte
new file mode 100644
index 000000000..8d58b7539
--- /dev/null
+++ b/packages/shared-branding/src/logos/ChatLogo.svelte
@@ -0,0 +1,13 @@
+
+
+
diff --git a/packages/shared-branding/src/logos/index.ts b/packages/shared-branding/src/logos/index.ts
index b3de1b56f..0b2f2f051 100644
--- a/packages/shared-branding/src/logos/index.ts
+++ b/packages/shared-branding/src/logos/index.ts
@@ -7,3 +7,4 @@ export { default as ManaCoreLogo } from './ManaCoreLogo.svelte';
export { default as ManaDeckLogo } from './ManaDeckLogo.svelte';
export { default as StorytellerLogo } from './StorytellerLogo.svelte';
export { default as UloadLogo } from './UloadLogo.svelte';
+export { default as ChatLogo } from './ChatLogo.svelte';
diff --git a/packages/shared-branding/src/types.ts b/packages/shared-branding/src/types.ts
index 39312253a..5cec9de6f 100644
--- a/packages/shared-branding/src/types.ts
+++ b/packages/shared-branding/src/types.ts
@@ -1,7 +1,7 @@
/**
* App identifiers for branding
*/
-export type AppId = 'memoro' | 'manacore' | 'manadeck' | 'maerchenzauber' | 'uload';
+export type AppId = 'memoro' | 'manacore' | 'manadeck' | 'maerchenzauber' | 'uload' | 'chat';
/**
* App branding configuration
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 23bbaf455..f3badd122 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -33,14 +33,14 @@ importers:
version: link:../../../packages/shared-landing-ui
astro:
specifier: ^5.16.0
- version: 5.16.0(@types/node@24.10.1)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.44.1)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1)
+ version: 5.16.0(@types/node@24.10.1)(ioredis@5.8.2)(jiti@1.21.7)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.44.1)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1)
typescript:
specifier: ^5.0.0
version: 5.9.3
devDependencies:
'@astrojs/tailwind':
specifier: ^6.0.0
- version: 6.0.2(astro@5.16.0(@types/node@24.10.1)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.44.1)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1))(tailwindcss@3.4.18(tsx@4.20.6)(yaml@2.8.1))(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3))
+ version: 6.0.2(astro@5.16.0(@types/node@24.10.1)(ioredis@5.8.2)(jiti@1.21.7)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.44.1)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1))(tailwindcss@3.4.18(tsx@4.20.6)(yaml@2.8.1))(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3))
'@tailwindcss/typography':
specifier: ^0.5.16
version: 0.5.19(tailwindcss@3.4.18(tsx@4.20.6)(yaml@2.8.1))
@@ -165,6 +165,9 @@ importers:
chat/apps/web:
dependencies:
+ '@chat/types':
+ specifier: workspace:*
+ version: link:../../packages/chat-types
'@manacore/shared-auth-ui':
specifier: workspace:*
version: link:../../../packages/shared-auth-ui
@@ -192,6 +195,12 @@ importers:
'@manacore/shared-ui':
specifier: workspace:*
version: link:../../../packages/shared-ui
+ '@manacore/shared-utils':
+ specifier: workspace:*
+ version: link:../../../packages/shared-utils
+ '@supabase/ssr':
+ specifier: ^0.6.1
+ version: 0.6.1(@supabase/supabase-js@2.81.1)
'@supabase/supabase-js':
specifier: ^2.81.1
version: 2.81.1
@@ -1920,11 +1929,332 @@ importers:
specifier: ^7.1.7
version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1)
+ nutriphi: {}
+
+ nutriphi/apps/landing:
+ dependencies:
+ '@astrojs/check':
+ specifier: ^0.9.0
+ version: 0.9.5(prettier-plugin-astro@0.14.1)(prettier@3.6.2)(typescript@5.9.3)
+ '@astrojs/sitemap':
+ specifier: ^3.2.1
+ version: 3.6.0
+ '@manacore/shared-landing-ui':
+ specifier: workspace:*
+ version: link:../../../packages/shared-landing-ui
+ astro:
+ specifier: ^5.16.0
+ version: 5.16.0(@types/node@24.10.1)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.44.1)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1)
+ typescript:
+ specifier: ^5.0.0
+ version: 5.9.3
+ devDependencies:
+ '@astrojs/tailwind':
+ specifier: ^6.0.0
+ version: 6.0.2(astro@5.16.0(@types/node@24.10.1)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.44.1)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1))(tailwindcss@3.4.18(tsx@4.20.6)(yaml@2.8.1))(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3))
+ '@tailwindcss/typography':
+ specifier: ^0.5.16
+ version: 0.5.19(tailwindcss@3.4.18(tsx@4.20.6)(yaml@2.8.1))
+ tailwindcss:
+ specifier: ^3.4.17
+ version: 3.4.18(tsx@4.20.6)(yaml@2.8.1)
+
+ nutriphi/apps/mobile:
+ dependencies:
+ '@expo/vector-icons':
+ specifier: ^14.0.0
+ version: 14.1.0(expo-font@13.3.2(expo@53.0.24)(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ '@google/generative-ai':
+ specifier: ^0.24.1
+ version: 0.24.1
+ '@react-native-async-storage/async-storage':
+ specifier: 2.1.2
+ version: 2.1.2(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))
+ '@react-native-clipboard/clipboard':
+ specifier: ^1.16.2
+ version: 1.16.3(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ '@react-navigation/native':
+ specifier: ^7.0.3
+ version: 7.1.21(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ '@supabase/supabase-js':
+ specifier: ^2.38.4
+ version: 2.81.1
+ expo:
+ specifier: ^53.0.11
+ version: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ expo-blur:
+ specifier: ^14.1.5
+ version: 14.1.5(expo@53.0.24)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ expo-camera:
+ specifier: ^16.1.8
+ version: 16.1.11(expo@53.0.24)(react-native-web@0.20.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ expo-constants:
+ specifier: ~17.1.4
+ version: 17.1.7(expo@53.0.24)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))
+ expo-dev-client:
+ specifier: ~5.2.0
+ version: 5.2.4(expo@53.0.24)
+ expo-dev-launcher:
+ specifier: ^5.0.17
+ version: 5.1.17(expo@53.0.24)
+ expo-file-system:
+ specifier: ^18.1.10
+ version: 18.1.11(expo@53.0.24)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))
+ expo-image-picker:
+ specifier: ^16.1.4
+ version: 16.1.4(expo@53.0.24)
+ expo-linking:
+ specifier: ~7.1.4
+ version: 7.1.7(expo@53.0.24)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ expo-location:
+ specifier: ^18.1.5
+ version: 18.1.6(expo@53.0.24)
+ expo-router:
+ specifier: ~5.1.0
+ version: 5.1.7(duagq234s5dj4m7fdjuubauzmi)
+ expo-sqlite:
+ specifier: ^15.2.12
+ version: 15.2.14(expo@53.0.24)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ expo-status-bar:
+ specifier: ~2.2.3
+ version: 2.2.3(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ expo-symbols:
+ specifier: ~0.4.5
+ version: 0.4.5(expo@53.0.24)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))
+ expo-system-ui:
+ specifier: ~5.0.6
+ version: 5.0.11(expo@53.0.24)(react-native-web@0.20.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))
+ expo-web-browser:
+ specifier: ~14.1.6
+ version: 14.1.6(expo@53.0.24)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))
+ nativewind:
+ specifier: latest
+ version: 4.2.1(react-native-reanimated@3.17.5(@babel/core@7.28.5)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)(tailwindcss@3.4.18(tsx@4.20.6)(yaml@2.8.1))
+ react:
+ specifier: 19.0.0
+ version: 19.0.0
+ react-dom:
+ specifier: 19.0.0
+ version: 19.0.0(react@19.0.0)
+ react-native:
+ specifier: 0.79.3
+ version: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+ react-native-context-menu-view:
+ specifier: ^1.19.0
+ version: 1.20.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react-native-gesture-handler:
+ specifier: ~2.24.0
+ version: 2.24.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react-native-reanimated:
+ specifier: ~3.17.4
+ version: 3.17.5(@babel/core@7.28.5)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react-native-safe-area-context:
+ specifier: 5.4.0
+ version: 5.4.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react-native-screens:
+ specifier: ~4.11.1
+ version: 4.11.1(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react-native-uuid:
+ specifier: ^2.0.3
+ version: 2.0.3
+ react-native-web:
+ specifier: ^0.20.0
+ version: 0.20.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ zustand:
+ specifier: ^4.5.1
+ version: 4.5.7(@types/react@19.0.14)(react@19.0.0)
+ devDependencies:
+ '@babel/core':
+ specifier: ^7.20.0
+ version: 7.28.5
+ '@types/react':
+ specifier: ~19.0.10
+ version: 19.0.14
+ ajv:
+ specifier: ^8.12.0
+ version: 8.17.1
+ eslint:
+ specifier: ^9.25.1
+ version: 9.39.1(jiti@2.6.1)
+ eslint-config-expo:
+ specifier: ^9.2.0
+ version: 9.2.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3)
+ eslint-config-prettier:
+ specifier: ^10.1.2
+ version: 10.1.8(eslint@9.39.1(jiti@2.6.1))
+ prettier:
+ specifier: ^3.2.5
+ version: 3.6.2
+ prettier-plugin-tailwindcss:
+ specifier: ^0.5.11
+ version: 0.5.14(prettier-plugin-astro@0.14.1)(prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.43.14))(prettier@3.6.2)
+ tailwindcss:
+ specifier: ^3.4.0
+ version: 3.4.18(tsx@4.20.6)(yaml@2.8.1)
+ typescript:
+ specifier: ~5.8.3
+ version: 5.8.3
+
+ nutriphi/apps/web:
+ dependencies:
+ '@manacore/shared-auth-ui':
+ specifier: workspace:*
+ version: link:../../../packages/shared-auth-ui
+ '@manacore/shared-branding':
+ specifier: workspace:*
+ version: link:../../../packages/shared-branding
+ '@manacore/shared-i18n':
+ specifier: workspace:*
+ version: link:../../../packages/shared-i18n
+ '@manacore/shared-icons':
+ specifier: workspace:*
+ version: link:../../../packages/shared-icons
+ '@manacore/shared-supabase':
+ specifier: workspace:*
+ version: link:../../../packages/shared-supabase
+ '@manacore/shared-tailwind':
+ specifier: workspace:*
+ version: link:../../../packages/shared-tailwind
+ '@manacore/shared-theme':
+ specifier: workspace:*
+ version: link:../../../packages/shared-theme
+ '@manacore/shared-theme-ui':
+ specifier: workspace:*
+ version: link:../../../packages/shared-theme-ui
+ '@manacore/shared-ui':
+ specifier: workspace:*
+ version: link:../../../packages/shared-ui
+ '@manacore/shared-utils':
+ specifier: workspace:*
+ version: link:../../../packages/shared-utils
+ '@supabase/ssr':
+ specifier: ^0.6.1
+ version: 0.6.1(@supabase/supabase-js@2.81.1)
+ '@supabase/supabase-js':
+ specifier: ^2.81.1
+ version: 2.81.1
+ devDependencies:
+ '@sveltejs/adapter-auto':
+ specifier: ^6.0.0
+ version: 6.1.1(@sveltejs/kit@2.49.0(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.14)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.43.14)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1)))
+ '@sveltejs/kit':
+ specifier: ^2.43.2
+ version: 2.49.0(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.14)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.43.14)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1))
+ '@sveltejs/vite-plugin-svelte':
+ specifier: ^6.2.0
+ version: 6.2.1(svelte@5.43.14)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1))
+ '@tailwindcss/postcss':
+ specifier: ^4.1.17
+ version: 4.1.17
+ '@tailwindcss/typography':
+ specifier: ^0.5.19
+ version: 0.5.19(tailwindcss@4.1.17)
+ autoprefixer:
+ specifier: ^10.4.21
+ version: 10.4.22(postcss@8.5.6)
+ postcss:
+ specifier: ^8.5.6
+ version: 8.5.6
+ svelte:
+ specifier: ^5.39.5
+ version: 5.43.14
+ svelte-check:
+ specifier: ^4.3.2
+ version: 4.3.4(picomatch@4.0.3)(svelte@5.43.14)(typescript@5.9.3)
+ tailwindcss:
+ specifier: ^4.1.17
+ version: 4.1.17
+ typescript:
+ specifier: ^5.9.3
+ version: 5.9.3
+ vite:
+ specifier: ^7.1.7
+ version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1)
+
+ nutriphi/backend:
+ dependencies:
+ '@google/generative-ai':
+ specifier: ^0.24.1
+ version: 0.24.1
+ '@nestjs/common':
+ specifier: ^10.4.15
+ version: 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/config':
+ specifier: ^3.3.0
+ version: 3.3.0(@nestjs/common@10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(rxjs@7.8.2)
+ '@nestjs/core':
+ specifier: ^10.4.15
+ version: 10.4.20(@nestjs/common@10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.20)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/platform-express':
+ specifier: ^10.4.15
+ version: 10.4.20(@nestjs/common@10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.20)
+ '@supabase/supabase-js':
+ specifier: ^2.47.10
+ version: 2.81.1
+ class-transformer:
+ specifier: ^0.5.1
+ version: 0.5.1
+ class-validator:
+ specifier: ^0.14.1
+ version: 0.14.2
+ reflect-metadata:
+ specifier: ^0.2.2
+ version: 0.2.2
+ rxjs:
+ specifier: ^7.8.1
+ version: 7.8.2
+ devDependencies:
+ '@nestjs/cli':
+ specifier: ^10.4.9
+ version: 10.4.9
+ '@nestjs/schematics':
+ specifier: ^10.2.3
+ version: 10.2.3(chokidar@3.6.0)(typescript@5.9.3)
+ '@types/express':
+ specifier: ^5.0.0
+ version: 5.0.5
+ '@types/node':
+ specifier: ^22.10.2
+ version: 22.19.1
+ '@typescript-eslint/eslint-plugin':
+ specifier: ^8.18.1
+ version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/parser':
+ specifier: ^8.18.1
+ version: 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ eslint:
+ specifier: ^9.17.0
+ version: 9.39.1(jiti@2.6.1)
+ eslint-config-prettier:
+ specifier: ^9.1.0
+ version: 9.1.2(eslint@9.39.1(jiti@2.6.1))
+ eslint-plugin-prettier:
+ specifier: ^5.2.1
+ version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))(prettier@3.6.2)
+ prettier:
+ specifier: ^3.4.2
+ version: 3.6.2
+ source-map-support:
+ specifier: ^0.5.21
+ version: 0.5.21
+ ts-loader:
+ specifier: ^9.5.1
+ version: 9.5.4(typescript@5.9.3)(webpack@5.100.2)
+ ts-node:
+ specifier: ^10.9.2
+ version: 10.9.2(@types/node@22.19.1)(typescript@5.9.3)
+ tsconfig-paths:
+ specifier: ^4.2.0
+ version: 4.2.0
+ typescript:
+ specifier: ^5.7.2
+ version: 5.9.3
+
packages/manadeck-database:
dependencies:
drizzle-orm:
specifier: ^0.36.0
- version: 0.36.4(@types/react@19.2.7)(kysely@0.27.6)(postgres@3.4.7)(react@19.1.0)
+ version: 0.36.4(@types/react@19.2.7)(expo-sqlite@15.2.14(expo@54.0.25)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(kysely@0.27.6)(postgres@3.4.7)(react@19.1.0)
postgres:
specifier: ^3.4.5
version: 3.4.7
@@ -2164,7 +2494,7 @@ importers:
dependencies:
drizzle-orm:
specifier: ^0.36.0
- version: 0.36.4(@types/react@19.2.7)(kysely@0.27.6)(postgres@3.4.7)(react@19.1.0)
+ version: 0.36.4(@types/react@19.2.7)(expo-sqlite@15.2.14(expo@54.0.25)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(kysely@0.27.6)(postgres@3.4.7)(react@19.1.0)
postgres:
specifier: ^3.4.5
version: 3.4.7
@@ -2744,7 +3074,7 @@ importers:
version: link:../../../packages/shared-branding
drizzle-orm:
specifier: ^0.44.7
- version: 0.44.7(kysely@0.27.6)(postgres@3.4.7)
+ version: 0.44.7(expo-sqlite@15.2.14(expo@54.0.25)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(kysely@0.27.6)(postgres@3.4.7)
ioredis:
specifier: ^5.7.0
version: 5.8.2
@@ -4845,6 +5175,10 @@ packages:
resolution: {integrity: sha512-I689wc8Fn/AX7aUGiwrh3HnssiORMJtR2fpksX+JIe8Cj/EDleblYMSwRPd0025wrwOV9UN1KM/RuEt/QjCS3Q==}
hasBin: true
+ '@expo/cli@0.24.22':
+ resolution: {integrity: sha512-cEg6/F8ZWjoVkEwm0rXKReWbsCUROFbLFBYht+d5RzHnDwJoTX4QWJKx4m+TGNDPamRUIGw36U4z41Fvev0XmA==}
+ hasBin: true
+
'@expo/cli@54.0.10':
resolution: {integrity: sha512-iw9gAnN6+PKWWLIyYmiskY/wzZjuFMctunqGXuC8BGATWgtr/HpzjVqWbcL3KIX/GvEBCCh74Tkckrh+Ylxh5Q==}
hasBin: true
@@ -4931,6 +5265,9 @@ packages:
'@expo/env@0.4.2':
resolution: {integrity: sha512-TgbCgvSk0Kq0e2fLoqHwEBL4M0ztFjnBEz0YCDm5boc1nvkV1VMuIMteVdeBwnTh8Z0oPJTwHCD49vhMEt1I6A==}
+ '@expo/env@1.0.7':
+ resolution: {integrity: sha512-qSTEnwvuYJ3umapO9XJtrb1fAqiPlmUUg78N0IZXXGwQRt+bkp0OBls+Y5Mxw/Owj8waAM0Z3huKKskRADR5ow==}
+
'@expo/env@2.0.7':
resolution: {integrity: sha512-BNETbLEohk3HQ2LxwwezpG8pq+h7Fs7/vAMP3eAtFT1BCpprLYoBBFZH7gW4aqGfqOcVP4Lc91j014verrYNGg==}
@@ -4938,6 +5275,10 @@ packages:
resolution: {integrity: sha512-gNyn1KnAOpEa8gSNsYqXMTcq0fSwqU/vit6fP5863vLSKxHm/dNt/gm/uZJxrRZxKq71KUJWF6I7d3z8qIfq5g==}
hasBin: true
+ '@expo/fingerprint@0.13.4':
+ resolution: {integrity: sha512-MYfPYBTMfrrNr07DALuLhG6EaLVNVrY/PXjEzsjWdWE4ZFn0yqI0IdHNkJG7t1gePT8iztHc7qnsx+oo/rDo6w==}
+ hasBin: true
+
'@expo/fingerprint@0.15.1':
resolution: {integrity: sha512-U1S9DwiapCHQjHdHDDyO/oXsl/1oEHSHZRRkWDDrHgXRUDiAVIySw9Unvvcr118Ee6/x4NmKSZY1X0VagrqmFg==}
hasBin: true
@@ -4949,6 +5290,9 @@ packages:
'@expo/image-utils@0.6.5':
resolution: {integrity: sha512-RsS/1CwJYzccvlprYktD42KjyfWZECH6PPIEowvoSmXfGLfdViwcUEI4RvBfKX5Jli6P67H+6YmHvPTbGOboew==}
+ '@expo/image-utils@0.7.6':
+ resolution: {integrity: sha512-GKnMqC79+mo/1AFrmAcUcGfbsXXTRqOMNS1umebuevl3aaw+ztsYEFEiuNhHZW7PQ3Xs3URNT513ZxKhznDscw==}
+
'@expo/image-utils@0.8.7':
resolution: {integrity: sha512-SXOww4Wq3RVXLyOaXiCCuQFguCDh8mmaHBv54h/R29wGl4jRY8GEyQEx8SypV/iHt1FbzsU/X3Qbcd9afm2W2w==}
@@ -4980,6 +5324,9 @@ packages:
'@expo/metro-config@0.19.12':
resolution: {integrity: sha512-fhT3x1ikQWHpZgw7VrEghBdscFPz1laRYa8WcVRB18nTTqorF6S8qPYslkJu1faEziHZS7c2uyDzTYnrg/CKbg==}
+ '@expo/metro-config@0.20.17':
+ resolution: {integrity: sha512-lpntF2UZn5bTwrPK6guUv00Xv3X9mkN3YYla+IhEHiYXWyG7WKOtDU0U4KR8h3ubkZ6SPH3snDyRyAzMsWtZFA==}
+
'@expo/metro-config@54.0.6':
resolution: {integrity: sha512-z3wufTr1skM03PI6Dr1ZsrvjAiGKf/w0VQvdZL+mEnKNqRA7Q4bhJDGk1+nzs+WWRWz4vS488uad9ERmSclBmg==}
peerDependencies:
@@ -5001,6 +5348,11 @@ packages:
peerDependencies:
react-native: '*'
+ '@expo/metro-runtime@5.0.5':
+ resolution: {integrity: sha512-P8UFTi+YsmiD1BmdTdiIQITzDMcZgronsA3RTQ4QKJjHM3bas11oGzLQOnFaIZnlEV8Rrr3m1m+RHxvnpL+t/A==}
+ peerDependencies:
+ react-native: '*'
+
'@expo/metro-runtime@6.1.2':
resolution: {integrity: sha512-nvM+Qv45QH7pmYvP8JB1G8JpScrWND3KrMA6ZKe62cwwNiX/BjHU28Ear0v/4bQWXlOY0mv6B8CDIm8JxXde9g==}
peerDependencies:
@@ -5042,6 +5394,9 @@ packages:
'@expo/prebuild-config@8.2.0':
resolution: {integrity: sha512-CxiPpd980s0jyxi7eyN3i/7YKu3XL+8qPjBZUCYtc0+axpGweqIkq2CslyLSKHyqVyH/zlPkbVgWdyiYavFS5Q==}
+ '@expo/prebuild-config@9.0.12':
+ resolution: {integrity: sha512-AKH5Scf+gEMgGxZZaimrJI2wlUJlRoqzDNn7/rkhZa5gUTnO4l6slKak2YdaH+nXlOWCNfAQWa76NnpQIfmv6Q==}
+
'@expo/react-native-action-sheet@4.1.1':
resolution: {integrity: sha512-4KRaba2vhqDRR7ObBj6nrD5uJw8ePoNHdIOMETTpgGTX7StUbrF4j/sfrP1YUyaPEa1P8FXdwG6pB+2WtrJd1A==}
peerDependencies:
@@ -5063,6 +5418,9 @@ packages:
'@expo/server@0.5.3':
resolution: {integrity: sha512-WXsWzeBs5v/h0PUfHyNLLz07rwwO5myQ1A5DGYewyyGLmsyl61yVCe8AgAlp1wkiMsqhj2hZqI2u3K10QnCMrQ==}
+ '@expo/server@0.6.3':
+ resolution: {integrity: sha512-Ea7NJn9Xk1fe4YeJ86rObHSv/bm3u/6WiQPXEqXJ2GrfYpVab2Swoh9/PnSM3KjR64JAgKjArDn1HiPjITCfHA==}
+
'@expo/spawn-async@1.7.2':
resolution: {integrity: sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==}
engines: {node: '>=12'}
@@ -5152,6 +5510,10 @@ packages:
resolution: {integrity: sha512-7XhUbtnlkSEZK15kN3t+tzIMxsbKm/dSkKBFalj+20NvPKe1kBY7mR2P7vuijEn+f06z5+A8bVGKO0v39cr6Wg==}
engines: {node: '>=18.0.0'}
+ '@google/generative-ai@0.24.1':
+ resolution: {integrity: sha512-MqO+MLfM6kjxcKoy0p1wRzG3b4ZZXtPI+z2IE26UogS2Cm/XHO+7gGRBh6gcJsOiIVoH93UwKvW4HdgiOZCy9Q==}
+ engines: {node: '>=18.0.0'}
+
'@grpc/grpc-js@1.14.1':
resolution: {integrity: sha512-sPxgEWtPUR3EnRJCEtbGZG2iX8LQDUls2wUS3o27jg07KqJFMq6YDeWvMo1wfpmy3rqRdS0rivpLwhqQtEyCuQ==}
engines: {node: '>=12.10.0'}
@@ -6306,11 +6668,29 @@ packages:
peerDependencies:
react-native: ^0.0.0-0 || >=0.60 <1.0
+ '@react-native-async-storage/async-storage@2.1.2':
+ resolution: {integrity: sha512-dvlNq4AlGWC+ehtH12p65+17V0Dx7IecOWl6WanF2ja38O1Dcjjvn7jVzkUHJ5oWkQBlyASurTPlTHgKXyYiow==}
+ peerDependencies:
+ react-native: ^0.0.0-0 || >=0.65 <1.0
+
'@react-native-async-storage/async-storage@2.2.0':
resolution: {integrity: sha512-gvRvjR5JAaUZF8tv2Kcq/Gbt3JHwbKFYfmb445rhOj6NUMx3qPLixmDx5pZAyb9at1bYvJ4/eTUipU5aki45xw==}
peerDependencies:
react-native: ^0.0.0-0 || >=0.65 <1.0
+ '@react-native-clipboard/clipboard@1.16.3':
+ resolution: {integrity: sha512-cMIcvoZKIrShzJHEaHbTAp458R9WOv0fB6UyC7Ek4Qk561Ow/DrzmmJmH/rAZg21Z6ixJ4YSdFDC14crqIBmCQ==}
+ peerDependencies:
+ react: '>= 16.9.0'
+ react-native: '>= 0.61.5'
+ react-native-macos: '>= 0.61.0'
+ react-native-windows: '>= 0.61.0'
+ peerDependenciesMeta:
+ react-native-macos:
+ optional: true
+ react-native-windows:
+ optional: true
+
'@react-native-community/datetimepicker@8.4.4':
resolution: {integrity: sha512-bc4ZixEHxZC9/qf5gbdYvIJiLZ5CLmEsC3j+Yhe1D1KC/3QhaIfGDVdUcid0PdlSoGOSEq4VlB93AWyetEyBSQ==}
peerDependencies:
@@ -6358,6 +6738,10 @@ packages:
resolution: {integrity: sha512-o79whsqL5fbPTUQO9w1FptRd4cw1TaeOrXtQSLQeDrMVAenw/wmsjyPK10VKtvqxa1KNMtWEyfgxcM8CVZVFmg==}
engines: {node: '>=18'}
+ '@react-native/assets-registry@0.79.3':
+ resolution: {integrity: sha512-Vy8DQXCJ21YSAiHxrNBz35VqVlZPpRYm50xRTWRf660JwHuJkFQG8cUkrLzm7AUriqUXxwpkQHcY+b0ibw9ejQ==}
+ engines: {node: '>=18'}
+
'@react-native/assets-registry@0.81.4':
resolution: {integrity: sha512-AMcDadefBIjD10BRqkWw+W/VdvXEomR6aEZ0fhQRAv7igrBzb4PTn4vHKYg+sUK0e3wa74kcMy2DLc/HtnGcMA==}
engines: {node: '>= 20.19.4'}
@@ -6374,6 +6758,10 @@ packages:
resolution: {integrity: sha512-vxL/vtDEIYHfWKm5oTaEmwcnNGsua/i9OjIxBDBFiJDu5i5RU3bpmDiXQm/bJxrJNPRp5lW0I0kpGihVhnMAIQ==}
engines: {node: '>=18'}
+ '@react-native/babel-plugin-codegen@0.79.6':
+ resolution: {integrity: sha512-CS5OrgcMPixOyUJ/Sk/HSsKsKgyKT5P7y3CojimOQzWqRZBmoQfxdST4ugj7n1H+ebM2IKqbgovApFbqXsoX0g==}
+ engines: {node: '>=18'}
+
'@react-native/babel-plugin-codegen@0.81.5':
resolution: {integrity: sha512-oF71cIH6je3fSLi6VPjjC3Sgyyn57JLHXs+mHWc9MoCiJJcM4nqsS5J38zv1XQ8d3zOW2JtHro+LF0tagj2bfQ==}
engines: {node: '>= 20.19.4'}
@@ -6390,6 +6778,12 @@ packages:
peerDependencies:
'@babel/core': '*'
+ '@react-native/babel-preset@0.79.6':
+ resolution: {integrity: sha512-H+FRO+r2Ql6b5IwfE0E7D52JhkxjeGSBSUpCXAI5zQ60zSBJ54Hwh2bBJOohXWl4J+C7gKYSAd2JHMUETu+c/A==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@babel/core': '*'
+
'@react-native/babel-preset@0.81.5':
resolution: {integrity: sha512-UoI/x/5tCmi+pZ3c1+Ypr1DaRMDLI3y+Q70pVLLVgrnC3DHsHRIbHcCHIeG/IJvoeFqFM2sTdhSOLJrf8lOPrA==}
engines: {node: '>= 20.19.4'}
@@ -6408,6 +6802,18 @@ packages:
peerDependencies:
'@babel/preset-env': ^7.1.6
+ '@react-native/codegen@0.79.3':
+ resolution: {integrity: sha512-CZejXqKch/a5/s/MO5T8mkAgvzCXgsTkQtpCF15kWR9HN8T+16k0CsN7TXAxXycltoxiE3XRglOrZNEa/TiZUQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@babel/core': '*'
+
+ '@react-native/codegen@0.79.6':
+ resolution: {integrity: sha512-iRBX8Lgbqypwnfba7s6opeUwVyaR23mowh9ILw7EcT2oLz3RqMmjJdrbVpWhGSMGq2qkPfqAH7bhO8C7O+xfjQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@babel/core': '*'
+
'@react-native/codegen@0.81.4':
resolution: {integrity: sha512-LWTGUTzFu+qOQnvkzBP52B90Ym3stZT8IFCzzUrppz8Iwglg83FCtDZAR4yLHI29VY/x/+pkcWAMCl3739XHdw==}
engines: {node: '>= 20.19.4'}
@@ -6429,6 +6835,15 @@ packages:
'@react-native-community/cli-server-api':
optional: true
+ '@react-native/community-cli-plugin@0.79.3':
+ resolution: {integrity: sha512-N/+p4HQqN4yK6IRzn7OgMvUIcrmEWkecglk1q5nj+AzNpfIOzB+mqR20SYmnPfeXF+mZzYCzRANb3KiM+WsSDA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@react-native-community/cli': '*'
+ peerDependenciesMeta:
+ '@react-native-community/cli':
+ optional: true
+
'@react-native/community-cli-plugin@0.81.4':
resolution: {integrity: sha512-8mpnvfcLcnVh+t1ok6V9eozWo8Ut+TZhz8ylJ6gF9d6q9EGDQX6s8jenan5Yv/pzN4vQEKI4ib2pTf/FELw+SA==}
engines: {node: '>= 20.19.4'}
@@ -6461,6 +6876,14 @@ packages:
resolution: {integrity: sha512-0Ru72Bm066xmxFuOXhhvrryxvb57uI79yDSFf+hxRpktkC98NMuRenlJhslMrbJ6WjCu1vOe/9UjWNYyxXTRTA==}
engines: {node: '>=18'}
+ '@react-native/debugger-frontend@0.79.3':
+ resolution: {integrity: sha512-ImNDuEeKH6lEsLXms3ZsgIrNF94jymfuhPcVY5L0trzaYNo9ZFE9Ni2/18E1IbfXxdeIHrCSBJlWD6CTm7wu5A==}
+ engines: {node: '>=18'}
+
+ '@react-native/debugger-frontend@0.79.6':
+ resolution: {integrity: sha512-lIK/KkaH7ueM22bLO0YNaQwZbT/oeqhaghOvmZacaNVbJR1Cdh/XAqjT8FgCS+7PUnbxA8B55NYNKGZG3O2pYw==}
+ engines: {node: '>=18'}
+
'@react-native/debugger-frontend@0.81.4':
resolution: {integrity: sha512-SU05w1wD0nKdQFcuNC9D6De0ITnINCi8MEnx9RsTD2e4wN83ukoC7FpXaPCYyP6+VjFt5tUKDPgP1O7iaNXCqg==}
engines: {node: '>= 20.19.4'}
@@ -6477,6 +6900,14 @@ packages:
resolution: {integrity: sha512-xkd3C3dRcmZLjFTEAOvC14q3apMLouIvJViCZY/p1EfCMrNND31dgE1dYrLTiI045WAWMt5bD15i6f7dE2/QWA==}
engines: {node: '>=18'}
+ '@react-native/dev-middleware@0.79.3':
+ resolution: {integrity: sha512-x88+RGOyG71+idQefnQg7wLhzjn/Scs+re1O5vqCkTVzRAc/f7SdHMlbmECUxJPd08FqMcOJr7/X3nsJBrNuuw==}
+ engines: {node: '>=18'}
+
+ '@react-native/dev-middleware@0.79.6':
+ resolution: {integrity: sha512-BK3GZBa9c7XSNR27EDRtxrgyyA3/mf1j3/y+mPk7Ac0Myu85YNrXnC9g3mL5Ytwo0g58TKrAIgs1fF2Q5Mn6mQ==}
+ engines: {node: '>=18'}
+
'@react-native/dev-middleware@0.81.4':
resolution: {integrity: sha512-hu1Wu5R28FT7nHXs2wWXvQ++7W7zq5GPY83llajgPlYKznyPLAY/7bArc5rAzNB7b0kwnlaoPQKlvD/VP9LZug==}
engines: {node: '>= 20.19.4'}
@@ -6489,6 +6920,10 @@ packages:
resolution: {integrity: sha512-gQI6RcrJbigU8xk7F960C5xQIgvbBj20TUvGecD+N2PHfbLpqR+92cj7hz3UcbrCONmTP40WHnbMMJ8P+kLsrA==}
engines: {node: '>=18'}
+ '@react-native/gradle-plugin@0.79.3':
+ resolution: {integrity: sha512-imfpZLhNBc9UFSzb/MOy2tNcIBHqVmexh/qdzw83F75BmUtLb/Gs1L2V5gw+WI1r7RqDILbWk7gXB8zUllwd+g==}
+ engines: {node: '>=18'}
+
'@react-native/gradle-plugin@0.81.4':
resolution: {integrity: sha512-T7fPcQvDDCSusZFVSg6H1oVDKb/NnVYLnsqkcHsAF2C2KGXyo3J7slH/tJAwNfj/7EOA2OgcWxfC1frgn9TQvw==}
engines: {node: '>= 20.19.4'}
@@ -6501,6 +6936,10 @@ packages:
resolution: {integrity: sha512-+iEikj6c6Zvrg1c3cYMeiPB+5nS8EaIC3jCtP6Muk3qc7c386IymEPM2xycIlfg04DPZvO3D4P2/vaO9/TCnUg==}
engines: {node: '>=18'}
+ '@react-native/js-polyfills@0.79.3':
+ resolution: {integrity: sha512-PEBtg6Kox6KahjCAch0UrqCAmHiNLEbp2SblUEoFAQnov4DSxBN9safh+QSVaCiMAwLjvNfXrJyygZz60Dqz3Q==}
+ engines: {node: '>=18'}
+
'@react-native/js-polyfills@0.81.4':
resolution: {integrity: sha512-sr42FaypKXJHMVHhgSbu2f/ZJfrLzgaoQ+HdpRvKEiEh2mhFf6XzZwecyLBvWqf2pMPZa+CpPfNPiejXjKEy8w==}
engines: {node: '>= 20.19.4'}
@@ -6527,6 +6966,12 @@ packages:
'@react-native/normalize-colors@0.76.9':
resolution: {integrity: sha512-TUdMG2JGk72M9d8DYbubdOlrzTYjw+YMe/xOnLU4viDgWRHsCbtRS9x0IAxRjs3amj/7zmK3Atm8jUPvdAc8qw==}
+ '@react-native/normalize-colors@0.79.3':
+ resolution: {integrity: sha512-T75NIQPRFCj6DFMxtcVMJTZR+3vHXaUMSd15t+CkJpc5LnyX91GVaPxpRSAdjFh7m3Yppl5MpdjV/fntImheYQ==}
+
+ '@react-native/normalize-colors@0.79.6':
+ resolution: {integrity: sha512-0v2/ruY7eeKun4BeKu+GcfO+SHBdl0LJn4ZFzTzjHdWES0Cn+ONqKljYaIv8p9MV2Hx/kcdEvbY4lWI34jC/mQ==}
+
'@react-native/normalize-colors@0.81.4':
resolution: {integrity: sha512-9nRRHO1H+tcFqjb9gAM105Urtgcanbta2tuqCVY0NATHeFPDEAB7gPyiLxCHKMi1NbhP6TH0kxgSWXKZl1cyRg==}
@@ -6544,6 +6989,17 @@ packages:
'@types/react':
optional: true
+ '@react-native/virtualized-lists@0.79.3':
+ resolution: {integrity: sha512-/0rRozkn+iIHya2vnnvprDgT7QkfI54FLrACAN3BLP7MRlfOIGOrZsXpRLndnLBVnjNzkcre84i1RecjoXnwIA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/react': ^19.0.0
+ react: '*'
+ react-native: '*'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
'@react-native/virtualized-lists@0.81.4':
resolution: {integrity: sha512-hBM+rMyL6Wm1Q4f/WpqGsaCojKSNUBqAXLABNGoWm1vabZ7cSnARMxBvA/2vo3hLcoR4v7zDK8tkKm9+O0LjVA==}
engines: {node: '>= 20.19.4'}
@@ -7220,6 +7676,11 @@ packages:
peerDependencies:
'@supabase/supabase-js': ^2.43.4
+ '@supabase/ssr@0.6.1':
+ resolution: {integrity: sha512-QtQgEMvaDzr77Mk3vZ3jWg2/y+D8tExYF7vcJT+wQ8ysuvOeGGjYbZlvj5bHYsj/SpC0bihcisnwPrM4Gp5G4g==}
+ peerDependencies:
+ '@supabase/supabase-js': ^2.43.4
+
'@supabase/storage-js@2.81.1':
resolution: {integrity: sha512-UNmYtjnZnhouqnbEMC1D5YJot7y0rIaZx7FG2Fv8S3hhNjcGVvO+h9We/tggi273BFkiahQPS/uRsapo1cSapw==}
engines: {node: '>=20.0.0'}
@@ -7737,6 +8198,9 @@ packages:
'@types/react@18.3.27':
resolution: {integrity: sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==}
+ '@types/react@19.0.14':
+ resolution: {integrity: sha512-ixLZ7zG7j1fM0DijL9hDArwhwcCb4vqmePgwtV0GfnkHRSCUEv4LvzarcTdhoqgyMznUx/EhoTUv31CKZzkQlw==}
+
'@types/react@19.2.7':
resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==}
@@ -8617,6 +9081,9 @@ packages:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
+ await-lock@2.2.2:
+ resolution: {integrity: sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==}
+
axios@1.13.2:
resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==}
@@ -8715,6 +9182,14 @@ packages:
react-compiler-runtime:
optional: true
+ babel-preset-expo@13.2.4:
+ resolution: {integrity: sha512-3IKORo3KR+4qtLdCkZNDj8KeA43oBn7RRQejFGWfiZgu/NeaRUSri8YwYjZqybm7hn3nmMv9OLahlvXBX23o5Q==}
+ peerDependencies:
+ babel-plugin-react-compiler: ^19.0.0-beta-e993439-20250405
+ peerDependenciesMeta:
+ babel-plugin-react-compiler:
+ optional: true
+
babel-preset-expo@54.0.7:
resolution: {integrity: sha512-JENWk0bvxW4I1ftveO8GRtX2t2TH6N4Z0TPvIHxroZ/4SswUfyNsUNbbP7Fm4erj3ar/JHGri5kTZ+s3xdjHZw==}
peerDependencies:
@@ -10579,6 +11054,13 @@ packages:
react: '*'
react-native: '*'
+ expo-asset@11.1.7:
+ resolution: {integrity: sha512-b5P8GpjUh08fRCf6m5XPVAh7ra42cQrHBIMgH2UXP+xsj4Wufl6pLy6jRF5w6U7DranUMbsXm8TOyq4EHy7ADg==}
+ peerDependencies:
+ expo: '*'
+ react: '*'
+ react-native: '*'
+
expo-asset@12.0.10:
resolution: {integrity: sha512-pZyeJkoDsALh4gpCQDzTA/UCLaPH/1rjQNGubmLn/uDM27S4iYJb/YWw4+CNZOtd5bCUOhDPg5DtGQnydNFSXg==}
peerDependencies:
@@ -10605,6 +11087,13 @@ packages:
react-native-web:
optional: true
+ expo-blur@14.1.5:
+ resolution: {integrity: sha512-CCLJHxN4eoAl06ESKT3CbMasJ98WsjF9ZQEJnuxtDb9ffrYbZ+g9ru84fukjNUOTtc8A8yXE5z8NgY1l0OMrmQ==}
+ peerDependencies:
+ expo: '*'
+ react: '*'
+ react-native: '*'
+
expo-blur@15.0.7:
resolution: {integrity: sha512-SugQQbQd+zRPy8z2G5qDD4NqhcD7srBF7fN7O7yq6q7ZFK59VWvpDxtMoUkmSfdxgqONsrBN/rLdk00USADrMg==}
peerDependencies:
@@ -10617,6 +11106,17 @@ packages:
peerDependencies:
expo: '*'
+ expo-camera@16.1.11:
+ resolution: {integrity: sha512-etA5ZKoC6nPBnWWqiTmlX//zoFZ6cWQCCIdmpUHTGHAKd4qZNCkhPvBWbi8o32pDe57lix1V4+TPFgEcvPwsaA==}
+ peerDependencies:
+ expo: '*'
+ react: '*'
+ react-native: '*'
+ react-native-web: '*'
+ peerDependenciesMeta:
+ react-native-web:
+ optional: true
+
expo-clipboard@8.0.7:
resolution: {integrity: sha512-zvlfFV+wB2QQrQnHWlo0EKHAkdi2tycLtE+EXFUWTPZYkgu1XcH+aiKfd4ul7Z0SDF+1IuwoiW9AA9eO35aj3Q==}
peerDependencies:
@@ -10630,6 +11130,12 @@ packages:
expo: '*'
react-native: '*'
+ expo-constants@17.1.7:
+ resolution: {integrity: sha512-byBjGsJ6T6FrLlhOBxw4EaiMXrZEn/MlUYIj/JAd+FS7ll5X/S4qVRbIimSJtdW47hXMq0zxPfJX6njtA56hHA==}
+ peerDependencies:
+ expo: '*'
+ react-native: '*'
+
expo-constants@18.0.10:
resolution: {integrity: sha512-Rhtv+X974k0Cahmvx6p7ER5+pNhBC0XbP1lRviL2J1Xl4sT2FBaIuIxF/0I0CbhOsySf0ksqc5caFweAy9Ewiw==}
peerDependencies:
@@ -10641,6 +11147,11 @@ packages:
peerDependencies:
expo: '*'
+ expo-dev-client@5.2.4:
+ resolution: {integrity: sha512-s/N/nK5LPo0QZJpV4aPijxyrzV4O49S3dN8D2fljqrX2WwFZzWwFO6dX1elPbTmddxumdcpczsdUPY+Ms8g43g==}
+ peerDependencies:
+ expo: '*'
+
expo-dev-client@6.0.18:
resolution: {integrity: sha512-8QKWvhsoZpMkecAMlmWoRHnaTNiPS3aO7E42spZOMjyiaNRJMHZsnB8W2b63dt3Yg3oLyskLAoI8IOmnqVX8vA==}
peerDependencies:
@@ -10651,6 +11162,11 @@ packages:
peerDependencies:
expo: '*'
+ expo-dev-launcher@5.1.16:
+ resolution: {integrity: sha512-tbCske9pvbozaEblyxoyo/97D6od9Ma4yAuyUnXtRET1CKAPKYS+c4fiZ+I3B4qtpZwN3JNFUjG3oateN0y6Hg==}
+ peerDependencies:
+ expo: '*'
+
expo-dev-launcher@5.1.17:
resolution: {integrity: sha512-3bQWbppf+hQ4k42DywRebbm9code2eJkR56bqknP0rF+E8RE5iVPfX6snQTiQ9v2i69T2YSwew7Th0dLapYjBg==}
peerDependencies:
@@ -10681,6 +11197,11 @@ packages:
peerDependencies:
expo: '*'
+ expo-dev-menu@6.1.14:
+ resolution: {integrity: sha512-yonNMg2GHJZtuisVowdl1iQjZfYP85r1D1IO+ar9D9zlrBPBJhq2XEju52jd1rDmDkmDuEhBSbPNhzIcsBNiPg==}
+ peerDependencies:
+ expo: '*'
+
expo-dev-menu@6.1.15:
resolution: {integrity: sha512-E7F00cXDA17Mg5xo/R0EicCk4WZi2S+xWsjtWm117wG6Kh2qcJdCb6kY7BbdJyeoPe4F3/arh1OK2rbYuySNyw==}
peerDependencies:
@@ -10710,6 +11231,12 @@ packages:
expo: '*'
react-native: '*'
+ expo-file-system@18.1.11:
+ resolution: {integrity: sha512-HJw/m0nVOKeqeRjPjGdvm+zBi5/NxcdPf8M8P3G2JFvH5Z8vBWqVDic2O58jnT1OFEy0XXzoH9UqFu7cHg9DTQ==}
+ peerDependencies:
+ expo: '*'
+ react-native: '*'
+
expo-file-system@19.0.19:
resolution: {integrity: sha512-OrpOV4fEBFMFv+jy7PnENpPbsWoBmqWGidSwh1Ai52PLl6JIInYGfZTc6kqyPNGtFTwm7Y9mSWnE8g+dtLxu7g==}
peerDependencies:
@@ -10722,6 +11249,12 @@ packages:
expo: '*'
react: '*'
+ expo-font@13.3.2:
+ resolution: {integrity: sha512-wUlMdpqURmQ/CNKK/+BIHkDA5nGjMqNlYmW0pJFXY/KE/OG80Qcavdu2sHsL4efAIiNGvYdBS10WztuQYU4X0A==}
+ peerDependencies:
+ expo: '*'
+ react: '*'
+
expo-font@14.0.9:
resolution: {integrity: sha512-xCoQbR/36qqB6tew/LQ6GWICpaBmHLhg/Loix5Rku/0ZtNaXMJv08M9o1AcrdiGTn/Xf/BnLu6DgS45cWQEHZg==}
peerDependencies:
@@ -10734,11 +11267,21 @@ packages:
peerDependencies:
expo: '*'
+ expo-image-loader@5.1.0:
+ resolution: {integrity: sha512-sEBx3zDQIODWbB5JwzE7ZL5FJD+DK3LVLWBVJy6VzsqIA6nDEnSFnsnWyCfCTSvbGigMATs1lgkC2nz3Jpve1Q==}
+ peerDependencies:
+ expo: '*'
+
expo-image-loader@6.0.0:
resolution: {integrity: sha512-nKs/xnOGw6ACb4g26xceBD57FKLFkSwEUTDXEDF3Gtcu3MqF3ZIYd3YM+sSb1/z9AKV1dYT7rMSGVNgsveXLIQ==}
peerDependencies:
expo: '*'
+ expo-image-picker@16.1.4:
+ resolution: {integrity: sha512-bTmmxtw1AohUT+HxEBn2vYwdeOrj1CLpMXKjvi9FKSoSbpcarT4xxI0z7YyGwDGHbrJqyyic3I9TTdP2J2b4YA==}
+ peerDependencies:
+ expo: '*'
+
expo-image-picker@17.0.8:
resolution: {integrity: sha512-489ByhVs2XPoAu9zodivAKLv7hG4S/FOe8hO/C2U6jVxmRjpAKakKNjMml0IwWjf1+c/RYBqm1XxKaZ+vq/fDQ==}
peerDependencies:
@@ -10767,6 +11310,12 @@ packages:
expo: '*'
react: '*'
+ expo-keep-awake@14.1.4:
+ resolution: {integrity: sha512-wU9qOnosy4+U4z/o4h8W9PjPvcFMfZXrlUoKTMBW7F4pLqhkkP/5G4EviPZixv4XWFMjn1ExQ5rV6BX8GwJsWA==}
+ peerDependencies:
+ expo: '*'
+ react: '*'
+
expo-keep-awake@15.0.7:
resolution: {integrity: sha512-CgBNcWVPnrIVII5G54QDqoE125l+zmqR4HR8q+MQaCfHet+dYpS5vX5zii/RMayzGN4jPgA4XYIQ28ePKFjHoA==}
peerDependencies:
@@ -10786,6 +11335,12 @@ packages:
react: '*'
react-native: '*'
+ expo-linking@7.1.7:
+ resolution: {integrity: sha512-ZJaH1RIch2G/M3hx2QJdlrKbYFUTOjVVW4g39hfxrE5bPX9xhZUYXqxqQtzMNl1ylAevw9JkgEfWbBWddbZ3UA==}
+ peerDependencies:
+ react: '*'
+ react-native: '*'
+
expo-linking@8.0.9:
resolution: {integrity: sha512-a0UHhlVyfwIbn8b1PSFPoFiIDJeps2iEq109hVH3CHd0CMKuRxFfNio9Axe2BjXhiJCYWR4OV1iIyzY/GjiVkQ==}
peerDependencies:
@@ -10798,6 +11353,11 @@ packages:
expo: '*'
react: '*'
+ expo-location@18.1.6:
+ resolution: {integrity: sha512-l5dQQ2FYkrBgNzaZN1BvSmdhhcztFOUucu2kEfDBMV4wSIuTIt/CKsho+F3RnAiWgvui1wb1WTTf80E8zq48hA==}
+ peerDependencies:
+ expo: '*'
+
expo-location@19.0.7:
resolution: {integrity: sha512-YNkh4r9E6ECbPkBCAMG5A5yHDgS0pw+Rzyd0l2ZQlCtjkhlODB55nMCKr5CZnUI0mXTkaSm8CwfoCO8n2MpYfg==}
peerDependencies:
@@ -10828,6 +11388,10 @@ packages:
resolution: {integrity: sha512-DezgnEYFQYic8hKGhkbztBA3QUmSftjaNDIKNAtS2iGJmzCcNIkatjN2slFDSWjSTNo8gOvPQyMKfyHWFvLpOQ==}
hasBin: true
+ expo-modules-autolinking@2.1.14:
+ resolution: {integrity: sha512-nT5ERXwc+0ZT/pozDoJjYZyUQu5RnXMk9jDGm5lg+PiKvsrCTSA/2/eftJGMxLkTjVI2MXp5WjSz3JRjbA7UXA==}
+ hasBin: true
+
expo-modules-autolinking@3.0.14:
resolution: {integrity: sha512-/qh1ru2kGPOycGvE9dXEKJZbPmYA5U5UcAlWWFbcq9+VhhWdZWZ0zs7V2JCdl+OvpBDo1y9WbqPP5VHQSYqT+Q==}
hasBin: true
@@ -10843,6 +11407,9 @@ packages:
expo-modules-core@2.2.3:
resolution: {integrity: sha512-01QqZzpP/wWlxnNly4G06MsOBUTbMDj02DQigZoXfDh80vd/rk3/uVXqnZgOdLSggTs6DnvOgAUy0H2q30XdUg==}
+ expo-modules-core@2.5.0:
+ resolution: {integrity: sha512-aIbQxZE2vdCKsolQUl6Q9Farlf8tjh/ROR4hfN1qT7QBGPl1XrJGnaOKkcgYaGrlzCPg/7IBe0Np67GzKMZKKQ==}
+
expo-modules-core@3.0.20:
resolution: {integrity: sha512-AnC7VG8k8ZAAKoNFP5zyCiTlwppp6U3A/z63KtuSjMWlxn5w45FOf2LuyF1SNUqkiARdckuPVNvLGO/I/5vkrg==}
peerDependencies:
@@ -10880,6 +11447,25 @@ packages:
react-native-reanimated:
optional: true
+ expo-router@5.1.7:
+ resolution: {integrity: sha512-E7hIqTZs4Cub4sbYPeednfYPi+2cyRGMdqc5IYBJ/vC+WBKoYJ8C9eU13ZLbPz//ZybSo2Dsm7v89uFIlO2Gow==}
+ peerDependencies:
+ '@react-navigation/drawer': ^7.3.9
+ '@testing-library/jest-native': '*'
+ expo: '*'
+ expo-constants: '*'
+ expo-linking: '*'
+ react-native-reanimated: '*'
+ react-native-safe-area-context: '*'
+ react-native-screens: '*'
+ peerDependenciesMeta:
+ '@react-navigation/drawer':
+ optional: true
+ '@testing-library/jest-native':
+ optional: true
+ react-native-reanimated:
+ optional: true
+
expo-router@6.0.15:
resolution: {integrity: sha512-PAettvLifQzb6hibCmBqxbR9UljlH61GvDRLyarGxs/tG9OpMXCoZHZo8gGCO24K1/6cchBKBcjvQ0PRrKwPew==}
peerDependencies:
@@ -10938,12 +11524,25 @@ packages:
peerDependencies:
expo: '*'
+ expo-sqlite@15.2.14:
+ resolution: {integrity: sha512-6tWnEE0fcir30/e7eVwjeC7eKdncfVnIgo2JvnKpRndedyiFMXLMyOQWNVGnuhnSrPV2BHvGGjLByS/j5VgH4w==}
+ peerDependencies:
+ expo: '*'
+ react: '*'
+ react-native: '*'
+
expo-status-bar@2.0.1:
resolution: {integrity: sha512-AkIPX7jWHRPp83UBZ1iXtVvyr0g+DgBVvIXTtlmPtmUsm8Vq9Bb5IGj86PW8osuFlgoTVAg7HI/+Ok7yEYwiRg==}
peerDependencies:
react: '*'
react-native: '*'
+ expo-status-bar@2.2.3:
+ resolution: {integrity: sha512-+c8R3AESBoduunxTJ8353SqKAKpxL6DvcD8VKBuh81zzJyUUbfB4CVjr1GufSJEKsMzNPXZU+HJwXx7Xh7lx8Q==}
+ peerDependencies:
+ react: '*'
+ react-native: '*'
+
expo-status-bar@3.0.8:
resolution: {integrity: sha512-L248XKPhum7tvREoS1VfE0H6dPCaGtoUWzRsUv7hGKdiB4cus33Rc0sxkWkoQ77wE8stlnUlL5lvmT0oqZ3ZBw==}
peerDependencies:
@@ -10959,6 +11558,12 @@ packages:
expo-structured-headers@5.0.0:
resolution: {integrity: sha512-RmrBtnSphk5REmZGV+lcdgdpxyzio5rJw8CXviHE6qH5pKQQ83fhMEcigvrkBdsn2Efw2EODp4Yxl1/fqMvOZw==}
+ expo-symbols@0.4.5:
+ resolution: {integrity: sha512-ZbgvJfACPfWaJxJrUd0YzDmH9X0Ci7vb5m0/ZpDz/tnF1vQJlkovvpFEHLUmCDSLIN7/fNK8t696KSpzfm8/kg==}
+ peerDependencies:
+ expo: '*'
+ react-native: '*'
+
expo-symbols@1.0.7:
resolution: {integrity: sha512-ZqFUeTXbwO6BrE00n37wTXYfJmsjFrfB446jeB9k9w7aA8a6eugNUIzNsUIUfbFWoOiY4wrGmpLSLPBwk4PH+g==}
peerDependencies:
@@ -10975,6 +11580,16 @@ packages:
react-native-web:
optional: true
+ expo-system-ui@5.0.11:
+ resolution: {integrity: sha512-PG5VdaG5cwBe1Rj02mJdnsihKl9Iw/w/a6+qh2mH3f2K/IvQ+Hf7aG2kavSADtkGNCNj7CEIg7Rn4DQz/SE5rQ==}
+ peerDependencies:
+ expo: '*'
+ react-native: '*'
+ react-native-web: '*'
+ peerDependenciesMeta:
+ react-native-web:
+ optional: true
+
expo-system-ui@6.0.8:
resolution: {integrity: sha512-DzJYqG2fibBSLzPDL4BybGCiilYOtnI1OWhcYFwoM4k0pnEzMBt1Vj8Z67bXglDDuz2HCQPGNtB3tQft5saKqQ==}
peerDependencies:
@@ -10990,6 +11605,11 @@ packages:
peerDependencies:
expo: '*'
+ expo-updates-interface@1.1.0:
+ resolution: {integrity: sha512-DeB+fRe0hUDPZhpJ4X4bFMAItatFBUPjw/TVSbJsaf3Exeami+2qbbJhWkcTMoYHOB73nOIcaYcWXYJnCJXO0w==}
+ peerDependencies:
+ expo: '*'
+
expo-updates-interface@2.0.0:
resolution: {integrity: sha512-pTzAIufEZdVPKql6iMi5ylVSPqV1qbEopz9G6TSECQmnNde2nwq42PxdFBaUEd8IZJ/fdJLQnOT3m6+XJ5s7jg==}
peerDependencies:
@@ -11009,6 +11629,12 @@ packages:
expo: '*'
react-native: '*'
+ expo-web-browser@14.1.6:
+ resolution: {integrity: sha512-/4P8eWqRyfXIMZna3acg320LXNA+P2cwyEVbjDX8vHnWU+UnOtyRKWy3XaAIyMPQ9hVjBNUQTh4MPvtnPRzakw==}
+ peerDependencies:
+ expo: '*'
+ react-native: '*'
+
expo-web-browser@15.0.9:
resolution: {integrity: sha512-Dj8kNFO+oXsxqCDNlUT/GhOrJnm10kAElH++3RplLydogFm5jTzXYWDEeNIDmV+F+BzGYs+sIhxiBf7RyaxXZg==}
peerDependencies:
@@ -11032,6 +11658,23 @@ packages:
react-native-webview:
optional: true
+ expo@53.0.24:
+ resolution: {integrity: sha512-kSjICDHQnU5QpuvSr1MHSyYpn/q2vzHuTKvzxB9fdQhbFYQgh31nebe+jj9+M/tt4tNvoUpV5isxCwua4jsceA==}
+ hasBin: true
+ peerDependencies:
+ '@expo/dom-webview': '*'
+ '@expo/metro-runtime': '*'
+ react: '*'
+ react-native: '*'
+ react-native-webview: '*'
+ peerDependenciesMeta:
+ '@expo/dom-webview':
+ optional: true
+ '@expo/metro-runtime':
+ optional: true
+ react-native-webview:
+ optional: true
+
expo@54.0.12:
resolution: {integrity: sha512-BVvG1A9BlKAOBwczMi7XThOLzI3TUShkV/yRnAMGvQP5SQFDq7UojkZLLG285gg3OvkoqjMUE0tZvVXbvuI4tA==}
hasBin: true
@@ -13190,6 +13833,10 @@ packages:
resolution: {integrity: sha512-oKCQuajU5srm+ZdDcFg86pG/U8hkSjBlkyFjz380SZ4TTIiI5F+OQB830i53D8hmqmcosa4wR/pnKv8y4Q3dLw==}
engines: {node: '>=18.18'}
+ metro-babel-transformer@0.82.5:
+ resolution: {integrity: sha512-W/scFDnwJXSccJYnOFdGiYr9srhbHPdxX9TvvACOFsIXdLilh3XuxQl/wXW6jEJfgIb0jTvoTlwwrqvuwymr6Q==}
+ engines: {node: '>=18.18'}
+
metro-babel-transformer@0.83.1:
resolution: {integrity: sha512-r3xAD3964E8dwDBaZNSO2aIIvWXjIK80uO2xo0/pi3WI8XWT9h5SCjtGWtMtE5PRWw+t20TN0q1WMRsjvhC1rQ==}
engines: {node: '>=20.19.4'}
@@ -13206,6 +13853,10 @@ packages:
resolution: {integrity: sha512-lGWnGVm1UwO8faRZ+LXQUesZSmP1LOg14OVR+KNPBip8kbMECbQJ8c10nGesw28uQT7AE0lwQThZPXlxDyCLKQ==}
engines: {node: '>=18.18'}
+ metro-cache-key@0.82.5:
+ resolution: {integrity: sha512-qpVmPbDJuRLrT4kcGlUouyqLGssJnbTllVtvIgXfR7ZuzMKf0mGS+8WzcqzNK8+kCyakombQWR0uDd8qhWGJcA==}
+ engines: {node: '>=18.18'}
+
metro-cache-key@0.83.1:
resolution: {integrity: sha512-ZUs+GD5CNeDLxx5UUWmfg26IL+Dnbryd+TLqTlZnDEgehkIa11kUSvgF92OFfJhONeXzV4rZDRGNXoo6JT+8Gg==}
engines: {node: '>=20.19.4'}
@@ -13222,6 +13873,10 @@ packages:
resolution: {integrity: sha512-wOsXuEgmZMZ5DMPoz1pEDerjJ11AuMy9JifH4yNW7NmWS0ghCRqvDxk13LsElzLshey8C+my/tmXauXZ3OqZgg==}
engines: {node: '>=18.18'}
+ metro-cache@0.82.5:
+ resolution: {integrity: sha512-AwHV9607xZpedu1NQcjUkua8v7HfOTKfftl6Vc9OGr/jbpiJX6Gpy8E/V9jo/U9UuVYX2PqSUcVNZmu+LTm71Q==}
+ engines: {node: '>=18.18'}
+
metro-cache@0.83.1:
resolution: {integrity: sha512-7N/Ad1PHa1YMWDNiyynTPq34Op2qIE68NWryGEQ4TSE3Zy6a8GpsYnEEZE4Qi6aHgsE+yZHKkRczeBgxhnFIxQ==}
engines: {node: '>=20.19.4'}
@@ -13238,6 +13893,10 @@ packages:
resolution: {integrity: sha512-oDRAzUvj6RNRxratFdcVAqtAsg+T3qcKrGdqGZFUdwzlFJdHGR9Z413sW583uD2ynsuOjA2QB6US8FdwiBdNKg==}
engines: {node: '>=18.18'}
+ metro-config@0.82.5:
+ resolution: {integrity: sha512-/r83VqE55l0WsBf8IhNmc/3z71y2zIPe5kRSuqA5tY/SL/ULzlHUJEMd1szztd0G45JozLwjvrhAzhDPJ/Qo/g==}
+ engines: {node: '>=18.18'}
+
metro-config@0.83.1:
resolution: {integrity: sha512-HJhpZx3wyOkux/jeF1o7akFJzZFdbn6Zf7UQqWrvp7gqFqNulQ8Mju09raBgPmmSxKDl4LbbNeigkX0/nKY1QA==}
engines: {node: '>=20.19.4'}
@@ -13254,6 +13913,10 @@ packages:
resolution: {integrity: sha512-+2R0c8ByfV2N7CH5wpdIajCWa8escUFd8TukfoXyBq/vb6yTCsznoA25FhNXJ+MC/cz1L447Zj3vdUfCXIZBwg==}
engines: {node: '>=18.18'}
+ metro-core@0.82.5:
+ resolution: {integrity: sha512-OJL18VbSw2RgtBm1f2P3J5kb892LCVJqMvslXxuxjAPex8OH7Eb8RBfgEo7VZSjgb/LOf4jhC4UFk5l5tAOHHA==}
+ engines: {node: '>=18.18'}
+
metro-core@0.83.1:
resolution: {integrity: sha512-uVL1eAJcMFd2o2Q7dsbpg8COaxjZBBGaXqO2OHnivpCdfanraVL8dPmY6It9ZeqWLOihUKZ2yHW4b6soVCzH/Q==}
engines: {node: '>=20.19.4'}
@@ -13270,6 +13933,10 @@ packages:
resolution: {integrity: sha512-mW1PKyiO3qZvjeeVjj1brhkmIotObA3/9jdbY1fQQYvEWM6Ml7bN/oJCRDGn2+bJRlG+J8pwyJ+DgdrM4BsKyg==}
engines: {node: '>=18.18'}
+ metro-file-map@0.82.5:
+ resolution: {integrity: sha512-vpMDxkGIB+MTN8Af5hvSAanc6zXQipsAUO+XUx3PCQieKUfLwdoa8qaZ1WAQYRpaU+CJ8vhBcxtzzo3d9IsCIQ==}
+ engines: {node: '>=18.18'}
+
metro-file-map@0.83.1:
resolution: {integrity: sha512-Yu429lnexKl44PttKw3nhqgmpBR+6UQ/tRaYcxPeEShtcza9DWakCn7cjqDTQZtWR2A8xSNv139izJMyQ4CG+w==}
engines: {node: '>=20.19.4'}
@@ -13286,6 +13953,10 @@ packages:
resolution: {integrity: sha512-/mn4AxjANnsSS3/Bb+zA1G5yIS5xygbbz/OuPaJYs0CPcZCaWt66D+65j4Ft/nJkffUxcwE9mk4ubpkl3rjgtw==}
engines: {node: '>=18.18'}
+ metro-minify-terser@0.82.5:
+ resolution: {integrity: sha512-v6Nx7A4We6PqPu/ta1oGTqJ4Usz0P7c+3XNeBxW9kp8zayS3lHUKR0sY0wsCHInxZlNAEICx791x+uXytFUuwg==}
+ engines: {node: '>=18.18'}
+
metro-minify-terser@0.83.1:
resolution: {integrity: sha512-kmooOxXLvKVxkh80IVSYO4weBdJDhCpg5NSPkjzzAnPJP43u6+usGXobkTWxxrAlq900bhzqKek4pBsUchlX6A==}
engines: {node: '>=20.19.4'}
@@ -13302,6 +13973,10 @@ packages:
resolution: {integrity: sha512-6BX8Nq3g3go3FxcyXkVbWe7IgctjDTk6D9flq+P201DfHHQ28J+DWFpVelFcrNTn4tIfbP/Bw7u/0g2BGmeXfQ==}
engines: {node: '>=18.18'}
+ metro-resolver@0.82.5:
+ resolution: {integrity: sha512-kFowLnWACt3bEsuVsaRNgwplT8U7kETnaFHaZePlARz4Fg8tZtmRDUmjaD68CGAwc0rwdwNCkWizLYpnyVcs2g==}
+ engines: {node: '>=18.18'}
+
metro-resolver@0.83.1:
resolution: {integrity: sha512-t8j46kiILAqqFS5RNa+xpQyVjULxRxlvMidqUswPEk5nQVNdlJslqizDm/Et3v/JKwOtQGkYAQCHxP1zGStR/g==}
engines: {node: '>=20.19.4'}
@@ -13318,6 +13993,10 @@ packages:
resolution: {integrity: sha512-M/Gf71ictUKP9+77dV/y8XlAWg7xl76uhU7ggYFUwEdOHHWPG6gLBr1iiK0BmTjPFH8yRo/xyqMli4s3oGorPQ==}
engines: {node: '>=18.18'}
+ metro-runtime@0.82.5:
+ resolution: {integrity: sha512-rQZDoCUf7k4Broyw3Ixxlq5ieIPiR1ULONdpcYpbJQ6yQ5GGEyYjtkztGD+OhHlw81LCR2SUAoPvtTus2WDK5g==}
+ engines: {node: '>=18.18'}
+
metro-runtime@0.83.1:
resolution: {integrity: sha512-3Ag8ZS4IwafL/JUKlaeM6/CbkooY+WcVeqdNlBG0m4S0Qz0om3rdFdy1y6fYBpl6AwXJwWeMuXrvZdMuByTcRA==}
engines: {node: '>=20.19.4'}
@@ -13334,6 +14013,10 @@ packages:
resolution: {integrity: sha512-Jz+CjvCKLNbJZYJTBeN3Kq9kIJf6b61MoLBdaOQZJ5Ajhw6Pf95Nn21XwA8BwfUYgajsi6IXsp/dTZsYJbN00Q==}
engines: {node: '>=18.18'}
+ metro-source-map@0.82.5:
+ resolution: {integrity: sha512-wH+awTOQJVkbhn2SKyaw+0cd+RVSCZ3sHVgyqJFQXIee/yLs3dZqKjjeKKhhVeudgjXo7aE/vSu/zVfcQEcUfw==}
+ engines: {node: '>=18.18'}
+
metro-source-map@0.83.1:
resolution: {integrity: sha512-De7Vbeo96fFZ2cqmI0fWwVJbtHIwPZv++LYlWSwzTiCzxBDJORncN0LcT48Vi2UlQLzXJg+/CuTAcy7NBVh69A==}
engines: {node: '>=20.19.4'}
@@ -13351,6 +14034,11 @@ packages:
engines: {node: '>=18.18'}
hasBin: true
+ metro-symbolicate@0.82.5:
+ resolution: {integrity: sha512-1u+07gzrvYDJ/oNXuOG1EXSvXZka/0JSW1q2EYBWerVKMOhvv9JzDGyzmuV7hHbF2Hg3T3S2uiM36sLz1qKsiw==}
+ engines: {node: '>=18.18'}
+ hasBin: true
+
metro-symbolicate@0.83.1:
resolution: {integrity: sha512-wPxYkONlq/Sv8Ji7vHEx5OzFouXAMQJjpcPW41ySKMLP/Ir18SsiJK2h4YkdKpYrTS1+0xf8oqF6nxCsT3uWtg==}
engines: {node: '>=20.19.4'}
@@ -13370,6 +14058,10 @@ packages:
resolution: {integrity: sha512-MmHhVx/1dJC94FN7m3oHgv5uOjKH8EX8pBeu1pnPMxbJrx6ZuIejO0k84zTSaQTZ8RxX1wqwzWBpXAWPjEX8mA==}
engines: {node: '>=18.18'}
+ metro-transform-plugins@0.82.5:
+ resolution: {integrity: sha512-57Bqf3rgq9nPqLrT2d9kf/2WVieTFqsQ6qWHpEng5naIUtc/Iiw9+0bfLLWSAw0GH40iJ4yMjFcFJDtNSYynMA==}
+ engines: {node: '>=18.18'}
+
metro-transform-plugins@0.83.1:
resolution: {integrity: sha512-1Y+I8oozXwhuS0qwC+ezaHXBf0jXW4oeYn4X39XWbZt9X2HfjodqY9bH9r6RUTsoiK7S4j8Ni2C91bUC+sktJQ==}
engines: {node: '>=20.19.4'}
@@ -13386,6 +14078,10 @@ packages:
resolution: {integrity: sha512-lUFyWVHa7lZFRSLJEv+m4jH8WrR5gU7VIjUlg4XmxQfV8ngY4V10ARKynLhMYPeQGl7Qvf+Ayg0eCZ272YZ4Mg==}
engines: {node: '>=18.18'}
+ metro-transform-worker@0.82.5:
+ resolution: {integrity: sha512-mx0grhAX7xe+XUQH6qoHHlWedI8fhSpDGsfga7CpkO9Lk9W+aPitNtJWNGrW8PfjKEWbT9Uz9O50dkI8bJqigw==}
+ engines: {node: '>=18.18'}
+
metro-transform-worker@0.83.1:
resolution: {integrity: sha512-owCrhPyUxdLgXEEEAL2b14GWTPZ2zYuab1VQXcfEy0sJE71iciD7fuMcrngoufh7e7UHDZ56q4ktXg8wgiYA1Q==}
engines: {node: '>=20.19.4'}
@@ -13403,6 +14099,11 @@ packages:
engines: {node: '>=18.18'}
hasBin: true
+ metro@0.82.5:
+ resolution: {integrity: sha512-8oAXxL7do8QckID/WZEKaIFuQJFUTLzfVcC48ghkHhNK2RGuQq8Xvf4AVd+TUA0SZtX0q8TGNXZ/eba1ckeGCg==}
+ engines: {node: '>=18.18'}
+ hasBin: true
+
metro@0.83.1:
resolution: {integrity: sha512-UGKepmTxoGD4HkQV8YWvpvwef7fUujNtTgG4Ygf7m/M0qjvb9VuDmAsEU+UdriRX7F61pnVK/opz89hjKlYTXA==}
engines: {node: '>=20.19.4'}
@@ -13833,6 +14534,10 @@ packages:
resolution: {integrity: sha512-iNpbeXPLmaiT9I5g16gFFFjsF3sGxLpYG2EGP3dfFB4z+l9X60mp/yRzStHhMtuNt8qmf7Ww80nOPQHngHhnIQ==}
engines: {node: '>=18.18'}
+ ob1@0.82.5:
+ resolution: {integrity: sha512-QyQQ6e66f+Ut/qUVjEce0E/wux5nAGLXYZDn1jr15JWstHsCH3l6VVrg8NKDptW9NEiBXKOJeGF/ydxeSDF3IQ==}
+ engines: {node: '>=18.18'}
+
ob1@0.83.1:
resolution: {integrity: sha512-ngwqewtdUzFyycomdbdIhFLjePPSOt1awKMUXQ0L7iLHgWEPF3DsCerblzjzfAUHaXuvE9ccJymWQ/4PNNqvnQ==}
engines: {node: '>=20.19.4'}
@@ -14640,6 +15345,11 @@ packages:
peerDependencies:
react: ^18.3.1
+ react-dom@19.0.0:
+ resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==}
+ peerDependencies:
+ react: ^19.0.0
+
react-dom@19.1.0:
resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==}
peerDependencies:
@@ -14751,6 +15461,12 @@ packages:
react-native-gesture-handler: '>= 2.0.0'
react-native-reanimated: '>= 2.0.0'
+ react-native-edge-to-edge@1.6.0:
+ resolution: {integrity: sha512-2WCNdE3Qd6Fwg9+4BpbATUxCLcouF6YRY7K+J36KJ4l3y+tWN6XCqAC4DuoGblAAbb2sLkhEDp4FOlbOIot2Og==}
+ peerDependencies:
+ react: '*'
+ react-native: '*'
+
react-native-fit-image@1.5.5:
resolution: {integrity: sha512-Wl3Vq2DQzxgsWKuW4USfck9zS7YzhvLNPpkwUUCF90bL32e1a0zOVQ3WsJILJOwzmPdHfzZmWasiiAUNBkhNkg==}
@@ -14760,6 +15476,12 @@ packages:
react: '*'
react-native: '*'
+ react-native-gesture-handler@2.24.0:
+ resolution: {integrity: sha512-ZdWyOd1C8axKJHIfYxjJKCcxjWEpUtUWgTOVY2wynbiveSQDm8X/PDyAKXSer/GOtIpjudUbACOndZXCN3vHsw==}
+ peerDependencies:
+ react: '*'
+ react-native: '*'
+
react-native-gesture-handler@2.28.0:
resolution: {integrity: sha512-0msfJ1vRxXKVgTgvL+1ZOoYw3/0z1R+Ked0+udoJhyplC2jbVKIJ8Z1bzWdpQRCV3QcQ87Op0zJVE5DhKK2A0A==}
peerDependencies:
@@ -14776,6 +15498,12 @@ packages:
peerDependencies:
react-native: '>=0.42.0'
+ react-native-is-edge-to-edge@1.1.7:
+ resolution: {integrity: sha512-EH6i7E8epJGIcu7KpfXYXiV2JFIYITtq+rVS8uEb+92naMRBdxhTuS8Wn2Q7j9sqyO0B+Xbaaf9VdipIAmGW4w==}
+ peerDependencies:
+ react: '*'
+ react-native: '*'
+
react-native-is-edge-to-edge@1.2.1:
resolution: {integrity: sha512-FLbPWl/MyYQWz+KwqOZsSyj2JmLKglHatd3xLZWskXOpRaio4LfEDEz8E/A6uD8QoTHW6Aobw1jbEwK7KMgR7Q==}
peerDependencies:
@@ -14816,6 +15544,13 @@ packages:
react: '*'
react-native: '*'
+ react-native-reanimated@3.17.5:
+ resolution: {integrity: sha512-SxBK7wQfJ4UoWoJqQnmIC7ZjuNgVb9rcY5Xc67upXAFKftWg0rnkknTw6vgwnjRcvYThrjzUVti66XoZdDJGtw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ react: '*'
+ react-native: '*'
+
react-native-reanimated@4.1.5:
resolution: {integrity: sha512-UA6VUbxwhRjEw2gSNrvhkusUq3upfD3Cv+AnB07V+kC8kpvwRVI+ivwY95ePbWNFkFpP+Y2Sdw1WHpHWEV+P2Q==}
peerDependencies:
@@ -14836,12 +15571,24 @@ packages:
react: '*'
react-native: '*'
+ react-native-safe-area-context@5.4.0:
+ resolution: {integrity: sha512-JaEThVyJcLhA+vU0NU8bZ0a1ih6GiF4faZ+ArZLqpYbL6j7R3caRqj+mE3lEtKCuHgwjLg3bCxLL1GPUJZVqUA==}
+ peerDependencies:
+ react: '*'
+ react-native: '*'
+
react-native-safe-area-context@5.6.2:
resolution: {integrity: sha512-4XGqMNj5qjUTYywJqpdWZ9IG8jgkS3h06sfVjfw5yZQZfWnRFXczi0GnYyFyCc2EBps/qFmoCH8fez//WumdVg==}
peerDependencies:
react: '*'
react-native: '*'
+ react-native-screens@4.11.1:
+ resolution: {integrity: sha512-F0zOzRVa3ptZfLpD0J8ROdo+y1fEPw+VBFq1MTY/iyDu08al7qFUO5hLMd+EYMda5VXGaTFCa8q7bOppUszhJw==}
+ peerDependencies:
+ react: '*'
+ react-native: '*'
+
react-native-screens@4.16.0:
resolution: {integrity: sha512-yIAyh7F/9uWkOzCi1/2FqvNvK6Wb9Y1+Kzn16SuGfN9YFJDTbwlzGRvePCNTOX0recpLQF3kc2FmvMUhyTCH1Q==}
peerDependencies:
@@ -14880,12 +15627,22 @@ packages:
peerDependencies:
react-native: '*'
+ react-native-uuid@2.0.3:
+ resolution: {integrity: sha512-f/YfIS2f5UB+gut7t/9BKGSCYbRA9/74A5R1MDp+FLYsuS+OSWoiM/D8Jko6OJB6Jcu3v6ONuddvZKHdIGpeiw==}
+ engines: {node: '>=10.0.0', npm: '>=6.0.0'}
+
react-native-web@0.19.13:
resolution: {integrity: sha512-etv3bN8rJglrRCp/uL4p7l8QvUNUC++QwDbdZ8CB7BvZiMvsxfFIRM1j04vxNldG3uo2puRd6OSWR3ibtmc29A==}
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
+ react-native-web@0.20.0:
+ resolution: {integrity: sha512-OOSgrw+aON6R3hRosCau/xVxdLzbjEcsLysYedka0ZON4ZZe6n9xgeN9ZkoejhARM36oTlUgHIQqxGutEJ9Wxg==}
+ peerDependencies:
+ react: ^18.0.0 || ^19.0.0
+ react-dom: ^18.0.0 || ^19.0.0
+
react-native-web@0.21.2:
resolution: {integrity: sha512-SO2t9/17zM4iEnFvlu2DA9jqNbzNhoUP+AItkoCOyFmDMOhUnBBznBDCYN92fGdfAkfQlWzPoez6+zLxFNsZEg==}
peerDependencies:
@@ -14932,6 +15689,17 @@ packages:
'@types/react':
optional: true
+ react-native@0.79.3:
+ resolution: {integrity: sha512-EzH1+9gzdyEo9zdP6u7Sh3Jtf5EOMwzy+TK65JysdlgAzfEVfq4mNeXcAZ6SmD+CW6M7ARJbvXLyTD0l2S5rpg==}
+ engines: {node: '>=18'}
+ hasBin: true
+ peerDependencies:
+ '@types/react': ^19.0.0
+ react: ^19.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
react-native@0.81.4:
resolution: {integrity: sha512-bt5bz3A/+Cv46KcjV0VQa+fo7MKxs17RCcpzjftINlen4ZDUl0I6Ut+brQ2FToa5oD0IB0xvQHfmsg2EDqsZdQ==}
engines: {node: '>= 20.19.4'}
@@ -15009,6 +15777,10 @@ packages:
resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
engines: {node: '>=0.10.0'}
+ react@19.0.0:
+ resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==}
+ engines: {node: '>=0.10.0'}
+
react@19.1.0:
resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==}
engines: {node: '>=0.10.0'}
@@ -15372,6 +16144,9 @@ packages:
scheduler@0.24.0-canary-efb381bbf-20230505:
resolution: {integrity: sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==}
+ scheduler@0.25.0:
+ resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==}
+
scheduler@0.26.0:
resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==}
@@ -17764,6 +18539,16 @@ snapshots:
transitivePeerDependencies:
- ts-node
+ '@astrojs/tailwind@6.0.2(astro@5.16.0(@types/node@24.10.1)(ioredis@5.8.2)(jiti@1.21.7)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.44.1)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1))(tailwindcss@3.4.18(tsx@4.20.6)(yaml@2.8.1))(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3))':
+ dependencies:
+ astro: 5.16.0(@types/node@24.10.1)(ioredis@5.8.2)(jiti@1.21.7)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.44.1)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1)
+ autoprefixer: 10.4.22(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-load-config: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3))
+ tailwindcss: 3.4.18(tsx@4.20.6)(yaml@2.8.1)
+ transitivePeerDependencies:
+ - ts-node
+
'@astrojs/tailwind@6.0.2(astro@5.16.0(@types/node@24.10.1)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.44.1)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1))(tailwindcss@3.4.18(tsx@4.20.6)(yaml@2.8.1))(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3))':
dependencies:
astro: 5.16.0(@types/node@24.10.1)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.44.1)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1)
@@ -19823,6 +20608,76 @@ snapshots:
- supports-color
- utf-8-validate
+ '@expo/cli@0.24.22':
+ dependencies:
+ '@0no-co/graphql.web': 1.2.0
+ '@babel/runtime': 7.28.4
+ '@expo/code-signing-certificates': 0.0.5
+ '@expo/config': 11.0.13
+ '@expo/config-plugins': 10.1.2
+ '@expo/devcert': 1.2.0
+ '@expo/env': 1.0.7
+ '@expo/image-utils': 0.7.6
+ '@expo/json-file': 9.1.5
+ '@expo/metro-config': 0.20.17
+ '@expo/osascript': 2.3.7
+ '@expo/package-manager': 1.9.8
+ '@expo/plist': 0.3.5
+ '@expo/prebuild-config': 9.0.12
+ '@expo/schema-utils': 0.1.7
+ '@expo/spawn-async': 1.7.2
+ '@expo/ws-tunnel': 1.0.6
+ '@expo/xcpretty': 4.3.2
+ '@react-native/dev-middleware': 0.79.6
+ '@urql/core': 5.2.0
+ '@urql/exchange-retry': 1.3.2(@urql/core@5.2.0)
+ accepts: 1.3.8
+ arg: 5.0.2
+ better-opn: 3.0.2
+ bplist-creator: 0.1.0
+ bplist-parser: 0.3.2
+ chalk: 4.1.2
+ ci-info: 3.9.0
+ compression: 1.8.1
+ connect: 3.7.0
+ debug: 4.4.3
+ env-editor: 0.4.2
+ freeport-async: 2.0.0
+ getenv: 2.0.0
+ glob: 10.5.0
+ lan-network: 0.1.7
+ minimatch: 9.0.5
+ node-forge: 1.3.1
+ npm-package-arg: 11.0.3
+ ora: 3.4.0
+ picomatch: 3.0.1
+ pretty-bytes: 5.6.0
+ pretty-format: 29.7.0
+ progress: 2.0.3
+ prompts: 2.4.2
+ qrcode-terminal: 0.11.0
+ require-from-string: 2.0.2
+ requireg: 0.2.2
+ resolve: 1.22.11
+ resolve-from: 5.0.0
+ resolve.exports: 2.0.3
+ semver: 7.7.3
+ send: 0.19.1
+ slugify: 1.6.6
+ source-map-support: 0.5.21
+ stacktrace-parser: 0.1.11
+ structured-headers: 0.4.1
+ tar: 7.5.2
+ terminal-link: 2.1.1
+ undici: 6.22.0
+ wrap-ansi: 7.0.0
+ ws: 8.18.3
+ transitivePeerDependencies:
+ - bufferutil
+ - graphql
+ - supports-color
+ - utf-8-validate
+
'@expo/cli@54.0.10(expo-router@6.0.15)(expo@54.0.12)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))':
dependencies:
'@0no-co/graphql.web': 1.2.0
@@ -20285,6 +21140,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@expo/env@1.0.7':
+ dependencies:
+ chalk: 4.1.2
+ debug: 4.4.3
+ dotenv: 16.4.7
+ dotenv-expand: 11.0.7
+ getenv: 2.0.0
+ transitivePeerDependencies:
+ - supports-color
+
'@expo/env@2.0.7':
dependencies:
chalk: 4.1.2
@@ -20310,6 +21175,23 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@expo/fingerprint@0.13.4':
+ dependencies:
+ '@expo/spawn-async': 1.7.2
+ arg: 5.0.2
+ chalk: 4.1.2
+ debug: 4.4.3
+ find-up: 5.0.0
+ getenv: 2.0.0
+ glob: 10.5.0
+ ignore: 5.3.2
+ minimatch: 9.0.5
+ p-limit: 3.1.0
+ resolve-from: 5.0.0
+ semver: 7.7.3
+ transitivePeerDependencies:
+ - supports-color
+
'@expo/fingerprint@0.15.1':
dependencies:
'@expo/spawn-async': 1.7.2
@@ -20355,6 +21237,18 @@ snapshots:
temp-dir: 2.0.0
unique-string: 2.0.0
+ '@expo/image-utils@0.7.6':
+ dependencies:
+ '@expo/spawn-async': 1.7.2
+ chalk: 4.1.2
+ getenv: 2.0.0
+ jimp-compact: 0.16.1
+ parse-png: 2.1.0
+ resolve-from: 5.0.0
+ semver: 7.7.3
+ temp-dir: 2.0.0
+ unique-string: 2.0.0
+
'@expo/image-utils@0.8.7':
dependencies:
'@expo/spawn-async': 1.7.2
@@ -20425,6 +21319,30 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@expo/metro-config@0.20.17':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/generator': 7.28.5
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
+ '@expo/config': 11.0.13
+ '@expo/env': 1.0.7
+ '@expo/json-file': 9.1.5
+ '@expo/spawn-async': 1.7.2
+ chalk: 4.1.2
+ debug: 4.4.3
+ dotenv: 16.4.7
+ dotenv-expand: 11.0.7
+ getenv: 2.0.0
+ glob: 10.5.0
+ jsc-safe-url: 0.2.4
+ lightningcss: 1.27.0
+ minimatch: 9.0.5
+ postcss: 8.4.49
+ resolve-from: 5.0.0
+ transitivePeerDependencies:
+ - supports-color
+
'@expo/metro-config@54.0.6(expo@54.0.12)':
dependencies:
'@babel/code-frame': 7.27.1
@@ -20579,6 +21497,10 @@ snapshots:
dependencies:
react-native: 0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1)
+ '@expo/metro-runtime@5.0.5(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))':
+ dependencies:
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+
'@expo/metro-runtime@6.1.2(expo@52.0.47)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1))(react@18.3.1)':
dependencies:
anser: 1.4.10
@@ -20592,6 +21514,19 @@ snapshots:
react-dom: 18.3.1(react@18.3.1)
optional: true
+ '@expo/metro-runtime@6.1.2(expo@53.0.24)(react-dom@19.0.0(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ anser: 1.4.10
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ pretty-format: 29.7.0
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+ stacktrace-parser: 0.1.11
+ whatwg-fetch: 3.6.20
+ optionalDependencies:
+ react-dom: 19.0.0(react@19.0.0)
+ optional: true
+
'@expo/metro-runtime@6.1.2(expo@54.0.12)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)':
dependencies:
anser: 1.4.10
@@ -20774,6 +21709,21 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@expo/prebuild-config@9.0.12':
+ dependencies:
+ '@expo/config': 11.0.13
+ '@expo/config-plugins': 10.1.2
+ '@expo/config-types': 53.0.5
+ '@expo/image-utils': 0.7.6
+ '@expo/json-file': 9.1.5
+ '@react-native/normalize-colors': 0.79.6
+ debug: 4.4.3
+ resolve-from: 5.0.0
+ semver: 7.7.3
+ xml2js: 0.6.0
+ transitivePeerDependencies:
+ - supports-color
+
'@expo/react-native-action-sheet@4.1.1(@types/react@19.2.7)(react@19.1.0)':
dependencies:
'@types/hoist-non-react-statics': 3.3.7(@types/react@19.2.7)
@@ -20817,6 +21767,15 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@expo/server@0.6.3':
+ dependencies:
+ abort-controller: 3.0.0
+ debug: 4.4.3
+ source-map-support: 0.5.21
+ undici: 6.22.0
+ transitivePeerDependencies:
+ - supports-color
+
'@expo/spawn-async@1.7.2':
dependencies:
cross-spawn: 7.0.6
@@ -20841,6 +21800,12 @@ snapshots:
dependencies:
prop-types: 15.8.1
+ '@expo/vector-icons@14.1.0(expo-font@13.3.2(expo@53.0.24)(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ expo-font: 13.3.2(expo@53.0.24)(react@19.0.0)
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+
'@expo/vector-icons@14.1.0(expo-font@14.0.9(expo@52.0.47)(react-native@0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1))(react@18.3.1))(react-native@0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1))(react@18.3.1)':
dependencies:
expo-font: 14.0.9(expo@52.0.47)(react-native@0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1))(react@18.3.1)
@@ -20957,6 +21922,8 @@ snapshots:
'@google/generative-ai@0.21.0': {}
+ '@google/generative-ai@0.24.1': {}
+
'@grpc/grpc-js@1.14.1':
dependencies:
'@grpc/proto-loader': 0.8.0
@@ -22163,6 +23130,12 @@ snapshots:
'@babel/runtime': 7.28.4
react: 18.3.1
+ '@radix-ui/react-compose-refs@1.1.2(@types/react@19.0.14)(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+ optionalDependencies:
+ '@types/react': 19.0.14
+
'@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.7)(react@19.1.0)':
dependencies:
react: 19.1.0
@@ -22292,6 +23265,13 @@ snapshots:
'@radix-ui/react-compose-refs': 1.0.0(react@18.3.1)
react: 18.3.1
+ '@radix-ui/react-slot@1.2.0(@types/react@19.0.14)(react@19.0.0)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.14)(react@19.0.0)
+ react: 19.0.0
+ optionalDependencies:
+ '@types/react': 19.0.14
+
'@radix-ui/react-slot@1.2.0(@types/react@19.2.7)(react@19.1.0)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.1.0)
@@ -22361,6 +23341,11 @@ snapshots:
merge-options: 3.0.4
react-native: 0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1)
+ '@react-native-async-storage/async-storage@2.1.2(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))':
+ dependencies:
+ merge-options: 3.0.4
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+
'@react-native-async-storage/async-storage@2.2.0(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))':
dependencies:
merge-options: 3.0.4
@@ -22371,6 +23356,11 @@ snapshots:
merge-options: 3.0.4
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0)
+ '@react-native-clipboard/clipboard@1.16.3(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+
'@react-native-community/datetimepicker@8.4.4(expo@54.0.25)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)':
dependencies:
invariant: 2.2.4
@@ -22423,6 +23413,8 @@ snapshots:
'@react-native/assets-registry@0.76.7': {}
+ '@react-native/assets-registry@0.79.3': {}
+
'@react-native/assets-registry@0.81.4': {}
'@react-native/assets-registry@0.81.5': {}
@@ -22441,6 +23433,14 @@ snapshots:
- '@babel/preset-env'
- supports-color
+ '@react-native/babel-plugin-codegen@0.79.6(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/traverse': 7.28.5
+ '@react-native/codegen': 0.79.6(@babel/core@7.28.5)
+ transitivePeerDependencies:
+ - '@babel/core'
+ - supports-color
+
'@react-native/babel-plugin-codegen@0.81.5(@babel/core@7.28.5)':
dependencies:
'@babel/traverse': 7.28.5
@@ -22551,6 +23551,56 @@ snapshots:
- '@babel/preset-env'
- supports-color
+ '@react-native/babel-preset@0.79.6(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-export-default-from': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.5)
+ '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-logical-assignment-operators': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5)
+ '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.5)
+ '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-runtime': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.5)
+ '@babel/template': 7.27.2
+ '@react-native/babel-plugin-codegen': 0.79.6(@babel/core@7.28.5)
+ babel-plugin-syntax-hermes-parser: 0.25.1
+ babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.28.5)
+ react-refresh: 0.14.2
+ transitivePeerDependencies:
+ - supports-color
+
'@react-native/babel-preset@0.81.5(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
@@ -22629,6 +23679,25 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@react-native/codegen@0.79.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ glob: 7.2.3
+ hermes-parser: 0.25.1
+ invariant: 2.2.4
+ nullthrows: 1.1.1
+ yargs: 17.7.2
+
+ '@react-native/codegen@0.79.6(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/parser': 7.28.5
+ glob: 7.2.3
+ hermes-parser: 0.25.1
+ invariant: 2.2.4
+ nullthrows: 1.1.1
+ yargs: 17.7.2
+
'@react-native/codegen@0.81.4(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
@@ -22670,6 +23739,21 @@ snapshots:
- supports-color
- utf-8-validate
+ '@react-native/community-cli-plugin@0.79.3':
+ dependencies:
+ '@react-native/dev-middleware': 0.79.3
+ chalk: 4.1.2
+ debug: 2.6.9
+ invariant: 2.2.4
+ metro: 0.82.5
+ metro-config: 0.82.5
+ metro-core: 0.82.5
+ semver: 7.7.3
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
'@react-native/community-cli-plugin@0.81.4':
dependencies:
'@react-native/dev-middleware': 0.81.4
@@ -22702,6 +23786,10 @@ snapshots:
'@react-native/debugger-frontend@0.76.9': {}
+ '@react-native/debugger-frontend@0.79.3': {}
+
+ '@react-native/debugger-frontend@0.79.6': {}
+
'@react-native/debugger-frontend@0.81.4': {}
'@react-native/debugger-frontend@0.81.5': {}
@@ -22744,6 +23832,42 @@ snapshots:
- supports-color
- utf-8-validate
+ '@react-native/dev-middleware@0.79.3':
+ dependencies:
+ '@isaacs/ttlcache': 1.4.1
+ '@react-native/debugger-frontend': 0.79.3
+ chrome-launcher: 0.15.2
+ chromium-edge-launcher: 0.2.0
+ connect: 3.7.0
+ debug: 2.6.9
+ invariant: 2.2.4
+ nullthrows: 1.1.1
+ open: 7.4.2
+ serve-static: 1.16.2
+ ws: 6.2.3
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ '@react-native/dev-middleware@0.79.6':
+ dependencies:
+ '@isaacs/ttlcache': 1.4.1
+ '@react-native/debugger-frontend': 0.79.6
+ chrome-launcher: 0.15.2
+ chromium-edge-launcher: 0.2.0
+ connect: 3.7.0
+ debug: 2.6.9
+ invariant: 2.2.4
+ nullthrows: 1.1.1
+ open: 7.4.2
+ serve-static: 1.16.2
+ ws: 6.2.3
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
'@react-native/dev-middleware@0.81.4':
dependencies:
'@isaacs/ttlcache': 1.4.1
@@ -22782,12 +23906,16 @@ snapshots:
'@react-native/gradle-plugin@0.76.7': {}
+ '@react-native/gradle-plugin@0.79.3': {}
+
'@react-native/gradle-plugin@0.81.4': {}
'@react-native/gradle-plugin@0.81.5': {}
'@react-native/js-polyfills@0.76.7': {}
+ '@react-native/js-polyfills@0.79.3': {}
+
'@react-native/js-polyfills@0.81.4': {}
'@react-native/js-polyfills@0.81.5': {}
@@ -22810,6 +23938,10 @@ snapshots:
'@react-native/normalize-colors@0.76.9': {}
+ '@react-native/normalize-colors@0.79.3': {}
+
+ '@react-native/normalize-colors@0.79.6': {}
+
'@react-native/normalize-colors@0.81.4': {}
'@react-native/normalize-colors@0.81.5': {}
@@ -22823,6 +23955,15 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.27
+ '@react-native/virtualized-lists@0.79.3(@types/react@19.0.14)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ invariant: 2.2.4
+ nullthrows: 1.1.1
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.14
+
'@react-native/virtualized-lists@0.81.4(@types/react@19.2.7)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)':
dependencies:
invariant: 2.2.4
@@ -22863,6 +24004,19 @@ snapshots:
transitivePeerDependencies:
- '@react-native-masked-view/masked-view'
+ '@react-navigation/bottom-tabs@7.8.6(@react-navigation/native@7.1.21(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-screens@4.11.1(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@react-navigation/elements': 2.8.3(@react-navigation/native@7.1.21(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ '@react-navigation/native': 7.1.21(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ color: 4.2.3
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+ react-native-safe-area-context: 5.4.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react-native-screens: 4.11.1(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ sf-symbols-typescript: 2.1.0
+ transitivePeerDependencies:
+ - '@react-native-masked-view/masked-view'
+
'@react-navigation/bottom-tabs@7.8.6(@react-navigation/native@7.1.21(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)':
dependencies:
'@react-navigation/elements': 2.8.3(@react-navigation/native@7.1.21(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
@@ -22901,6 +24055,18 @@ snapshots:
use-latest-callback: 0.2.6(react@18.3.1)
use-sync-external-store: 1.6.0(react@18.3.1)
+ '@react-navigation/core@7.13.2(react@19.0.0)':
+ dependencies:
+ '@react-navigation/routers': 7.5.2
+ escape-string-regexp: 4.0.0
+ fast-deep-equal: 3.1.3
+ nanoid: 3.3.11
+ query-string: 7.1.3
+ react: 19.0.0
+ react-is: 19.2.0
+ use-latest-callback: 0.2.6(react@19.0.0)
+ use-sync-external-store: 1.6.0(react@19.0.0)
+
'@react-navigation/core@7.13.2(react@19.1.0)':
dependencies:
'@react-navigation/routers': 7.5.2
@@ -22913,6 +24079,23 @@ snapshots:
use-latest-callback: 0.2.6(react@19.1.0)
use-sync-external-store: 1.6.0(react@19.1.0)
+ '@react-navigation/drawer@7.7.4(@react-navigation/native@7.1.21(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-gesture-handler@2.24.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-reanimated@3.17.5(@babel/core@7.28.5)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-screens@4.11.1(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@react-navigation/elements': 2.8.3(@react-navigation/native@7.1.21(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ '@react-navigation/native': 7.1.21(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ color: 4.2.3
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+ react-native-drawer-layout: 4.2.0(react-native-gesture-handler@2.24.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-reanimated@3.17.5(@babel/core@7.28.5)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react-native-gesture-handler: 2.24.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react-native-reanimated: 3.17.5(@babel/core@7.28.5)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react-native-safe-area-context: 5.4.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react-native-screens: 4.11.1(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ use-latest-callback: 0.2.6(react@19.0.0)
+ transitivePeerDependencies:
+ - '@react-native-masked-view/masked-view'
+ optional: true
+
'@react-navigation/drawer@7.7.4(@react-navigation/native@7.1.21(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native-gesture-handler@2.28.0(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.5(@babel/core@7.28.5)(react-native-worklets@0.5.1(@babel/core@7.28.5)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)':
dependencies:
'@react-navigation/elements': 2.8.3(@react-navigation/native@7.1.21(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
@@ -22989,6 +24172,16 @@ snapshots:
use-latest-callback: 0.2.6(react@18.3.1)
use-sync-external-store: 1.6.0(react@18.3.1)
+ '@react-navigation/elements@2.8.3(@react-navigation/native@7.1.21(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@react-navigation/native': 7.1.21(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ color: 4.2.3
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+ react-native-safe-area-context: 5.4.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ use-latest-callback: 0.2.6(react@19.0.0)
+ use-sync-external-store: 1.6.0(react@19.0.0)
+
'@react-navigation/elements@2.8.3(@react-navigation/native@7.1.21(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)':
dependencies:
'@react-navigation/native': 7.1.21(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
@@ -23023,6 +24216,20 @@ snapshots:
transitivePeerDependencies:
- '@react-native-masked-view/masked-view'
+ '@react-navigation/native-stack@7.7.0(@react-navigation/native@7.1.21(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-screens@4.11.1(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@react-navigation/elements': 2.8.3(@react-navigation/native@7.1.21(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ '@react-navigation/native': 7.1.21(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ color: 4.2.3
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+ react-native-safe-area-context: 5.4.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react-native-screens: 4.11.1(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ sf-symbols-typescript: 2.1.0
+ warn-once: 0.1.1
+ transitivePeerDependencies:
+ - '@react-native-masked-view/masked-view'
+
'@react-navigation/native-stack@7.7.0(@react-navigation/native@7.1.21(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)':
dependencies:
'@react-navigation/elements': 2.8.3(@react-navigation/native@7.1.21(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
@@ -23061,6 +24268,16 @@ snapshots:
react-native: 0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1)
use-latest-callback: 0.2.6(react@18.3.1)
+ '@react-navigation/native@7.1.21(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@react-navigation/core': 7.13.2(react@19.0.0)
+ escape-string-regexp: 4.0.0
+ fast-deep-equal: 3.1.3
+ nanoid: 3.3.11
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+ use-latest-callback: 0.2.6(react@19.0.0)
+
'@react-navigation/native@7.1.21(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)':
dependencies:
'@react-navigation/core': 7.13.2(react@19.1.0)
@@ -23794,6 +25011,11 @@ snapshots:
'@types/cookie': 0.6.0
cookie: 0.7.2
+ '@supabase/ssr@0.6.1(@supabase/supabase-js@2.81.1)':
+ dependencies:
+ '@supabase/supabase-js': 2.81.1
+ cookie: 1.0.2
+
'@supabase/storage-js@2.81.1':
dependencies:
tslib: 2.8.1
@@ -24239,7 +25461,7 @@ snapshots:
react-test-renderer: 19.1.0(react@19.1.0)
redent: 3.0.0
optionalDependencies:
- jest: 30.2.0(@types/node@22.19.1)(esbuild-register@3.6.0(esbuild@0.27.0))(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.9.3))
+ jest: 30.2.0(@types/node@22.19.1)(esbuild-register@3.6.0(esbuild@0.27.0))
optional: true
'@testing-library/react-native@13.3.3(jest@30.2.0(esbuild-register@3.6.0(esbuild@0.27.0)))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react-test-renderer@19.1.0(react@19.1.0))(react@19.1.0)':
@@ -24252,7 +25474,7 @@ snapshots:
react-test-renderer: 19.1.0(react@19.1.0)
redent: 3.0.0
optionalDependencies:
- jest: 30.2.0(@types/node@22.19.1)(esbuild-register@3.6.0(esbuild@0.27.0))(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.9.3))
+ jest: 30.2.0(@types/node@22.19.1)(esbuild-register@3.6.0(esbuild@0.27.0))
optional: true
'@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)':
@@ -24529,6 +25751,10 @@ snapshots:
'@types/prop-types': 15.7.15
csstype: 3.2.3
+ '@types/react@19.0.14':
+ dependencies:
+ csstype: 3.2.3
+
'@types/react@19.2.7':
dependencies:
csstype: 3.2.3
@@ -26064,6 +27290,108 @@ snapshots:
- uploadthing
- yaml
+ astro@5.16.0(@types/node@24.10.1)(ioredis@5.8.2)(jiti@1.21.7)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.44.1)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1):
+ dependencies:
+ '@astrojs/compiler': 2.13.0
+ '@astrojs/internal-helpers': 0.7.5
+ '@astrojs/markdown-remark': 6.3.9
+ '@astrojs/telemetry': 3.3.0
+ '@capsizecss/unpack': 3.0.1
+ '@oslojs/encoding': 1.1.0
+ '@rollup/pluginutils': 5.3.0(rollup@4.53.3)
+ acorn: 8.15.0
+ aria-query: 5.3.2
+ axobject-query: 4.1.0
+ boxen: 8.0.1
+ ci-info: 4.3.1
+ clsx: 2.1.1
+ common-ancestor-path: 1.0.1
+ cookie: 1.0.2
+ cssesc: 3.0.0
+ debug: 4.4.3
+ deterministic-object-hash: 2.0.2
+ devalue: 5.5.0
+ diff: 5.2.0
+ dlv: 1.1.3
+ dset: 3.1.4
+ es-module-lexer: 1.7.0
+ esbuild: 0.25.12
+ estree-walker: 3.0.3
+ flattie: 1.1.1
+ fontace: 0.3.1
+ github-slugger: 2.0.0
+ html-escaper: 3.0.3
+ http-cache-semantics: 4.2.0
+ import-meta-resolve: 4.2.0
+ js-yaml: 4.1.1
+ magic-string: 0.30.21
+ magicast: 0.5.1
+ mrmime: 2.0.1
+ neotraverse: 0.6.18
+ p-limit: 6.2.0
+ p-queue: 8.1.1
+ package-manager-detector: 1.5.0
+ piccolore: 0.1.3
+ picomatch: 4.0.3
+ prompts: 2.4.2
+ rehype: 13.0.2
+ semver: 7.7.3
+ shiki: 3.15.0
+ smol-toml: 1.5.2
+ svgo: 4.0.0
+ tinyexec: 1.0.2
+ tinyglobby: 0.2.15
+ tsconfck: 3.1.6(typescript@5.9.3)
+ ultrahtml: 1.6.0
+ unifont: 0.6.0
+ unist-util-visit: 5.0.0
+ unstorage: 1.17.3(ioredis@5.8.2)
+ vfile: 6.0.3
+ vite: 6.4.1(@types/node@24.10.1)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1)
+ vitefu: 1.1.1(vite@6.4.1(@types/node@24.10.1)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1))
+ xxhash-wasm: 1.1.0
+ yargs-parser: 21.1.1
+ yocto-spinner: 0.2.3
+ zod: 3.25.76
+ zod-to-json-schema: 3.25.0(zod@3.25.76)
+ zod-to-ts: 1.2.0(typescript@5.9.3)(zod@3.25.76)
+ optionalDependencies:
+ sharp: 0.34.5
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@types/node'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - db0
+ - idb-keyval
+ - ioredis
+ - jiti
+ - less
+ - lightningcss
+ - rollup
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - typescript
+ - uploadthing
+ - yaml
+
astro@5.16.0(@types/node@24.10.1)(ioredis@5.8.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.44.1)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1):
dependencies:
'@astrojs/compiler': 2.13.0
@@ -26197,6 +27525,8 @@ snapshots:
dependencies:
possible-typed-array-names: 1.1.0
+ await-lock@2.2.2: {}
+
axios@1.13.2:
dependencies:
follow-redirects: 1.15.11(debug@4.4.3)
@@ -26363,6 +27693,33 @@ snapshots:
- '@babel/preset-env'
- supports-color
+ babel-preset-expo@13.2.4(@babel/core@7.28.5):
+ dependencies:
+ '@babel/helper-module-imports': 7.27.1
+ '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.5)
+ '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-syntax-export-default-from': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5)
+ '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-runtime': 7.28.5(@babel/core@7.28.5)
+ '@babel/preset-react': 7.28.5(@babel/core@7.28.5)
+ '@babel/preset-typescript': 7.28.5(@babel/core@7.28.5)
+ '@react-native/babel-preset': 0.79.6(@babel/core@7.28.5)
+ babel-plugin-react-native-web: 0.19.13
+ babel-plugin-syntax-hermes-parser: 0.25.1
+ babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.28.5)
+ debug: 4.4.3
+ react-refresh: 0.14.2
+ resolve-from: 5.0.0
+ transitivePeerDependencies:
+ - '@babel/core'
+ - supports-color
+
babel-preset-expo@54.0.7(@babel/core@7.28.5)(@babel/runtime@7.28.4)(expo@54.0.12)(react-refresh@0.14.2):
dependencies:
'@babel/helper-module-imports': 7.27.1
@@ -27444,15 +28801,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
- drizzle-orm@0.36.4(@types/react@19.2.7)(kysely@0.27.6)(postgres@3.4.7)(react@19.1.0):
+ drizzle-orm@0.36.4(@types/react@19.2.7)(expo-sqlite@15.2.14(expo@54.0.25)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(kysely@0.27.6)(postgres@3.4.7)(react@19.1.0):
optionalDependencies:
'@types/react': 19.2.7
+ expo-sqlite: 15.2.14(expo@54.0.25)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
kysely: 0.27.6
postgres: 3.4.7
react: 19.1.0
- drizzle-orm@0.44.7(kysely@0.27.6)(postgres@3.4.7):
+ drizzle-orm@0.44.7(expo-sqlite@15.2.14(expo@54.0.25)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(kysely@0.27.6)(postgres@3.4.7):
optionalDependencies:
+ expo-sqlite: 15.2.14(expo@54.0.25)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
kysely: 0.27.6
postgres: 3.4.7
@@ -27966,7 +29325,7 @@ snapshots:
'@typescript-eslint/eslint-plugin': 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3)
'@typescript-eslint/parser': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3)
eslint: 9.39.1(jiti@2.6.1)
- eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1))
eslint-plugin-expo: 0.1.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3)
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1))
eslint-plugin-react: 7.37.5(eslint@9.39.1(jiti@2.6.1))
@@ -28060,21 +29419,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)):
- dependencies:
- '@nolyfill/is-core-module': 1.0.39
- debug: 4.4.3
- eslint: 9.39.1(jiti@2.6.1)
- get-tsconfig: 4.13.0
- is-bun-module: 2.0.0
- stable-hash: 0.0.5
- tinyglobby: 0.2.15
- unrs-resolver: 1.11.1
- optionalDependencies:
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1))
- transitivePeerDependencies:
- - supports-color
-
eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)):
dependencies:
'@nolyfill/is-core-module': 1.0.39
@@ -28090,6 +29434,21 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)):
+ dependencies:
+ '@nolyfill/is-core-module': 1.0.39
+ debug: 4.4.3
+ eslint: 9.39.1(jiti@2.6.1)
+ get-tsconfig: 4.13.0
+ is-bun-module: 2.0.0
+ stable-hash: 0.0.5
+ tinyglobby: 0.2.15
+ unrs-resolver: 1.11.1
+ optionalDependencies:
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1))
+ transitivePeerDependencies:
+ - supports-color
+
eslint-module-utils@2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1):
dependencies:
debug: 3.2.7
@@ -28110,14 +29469,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)):
+ eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)):
dependencies:
debug: 3.2.7
optionalDependencies:
'@typescript-eslint/parser': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3)
eslint: 9.39.1(jiti@2.6.1)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1))
transitivePeerDependencies:
- supports-color
@@ -28252,7 +29611,7 @@ snapshots:
doctrine: 2.1.0
eslint: 9.39.1(jiti@2.6.1)
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1))
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -28745,6 +30104,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ expo-asset@11.1.7(expo@53.0.24)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0):
+ dependencies:
+ '@expo/image-utils': 0.7.6
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ expo-constants: 17.1.7(expo@53.0.24)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+ transitivePeerDependencies:
+ - supports-color
+
expo-asset@12.0.10(expo@54.0.12)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0):
dependencies:
'@expo/image-utils': 0.8.7
@@ -28800,6 +30169,12 @@ snapshots:
optionalDependencies:
react-native-web: 0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ expo-blur@14.1.5(expo@53.0.24)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0):
+ dependencies:
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+
expo-blur@15.0.7(expo@54.0.12)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0):
dependencies:
expo: 54.0.12(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
@@ -28830,6 +30205,15 @@ snapshots:
expo: 54.0.25(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
semver: 7.7.3
+ expo-camera@16.1.11(expo@53.0.24)(react-native-web@0.20.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0):
+ dependencies:
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ invariant: 2.2.4
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+ optionalDependencies:
+ react-native-web: 0.20.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+
expo-clipboard@8.0.7(expo@54.0.12)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0):
dependencies:
expo: 54.0.12(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
@@ -28857,6 +30241,15 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ expo-constants@17.1.7(expo@53.0.24)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)):
+ dependencies:
+ '@expo/config': 11.0.13
+ '@expo/env': 1.0.7
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+ transitivePeerDependencies:
+ - supports-color
+
expo-constants@18.0.10(expo@54.0.12)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0)):
dependencies:
'@expo/config': 12.0.10
@@ -28904,6 +30297,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ expo-dev-client@5.2.4(expo@53.0.24):
+ dependencies:
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ expo-dev-launcher: 5.1.16(expo@53.0.24)
+ expo-dev-menu: 6.1.14(expo@53.0.24)
+ expo-dev-menu-interface: 1.10.0(expo@53.0.24)
+ expo-manifests: 0.16.6(expo@53.0.24)
+ expo-updates-interface: 1.1.0(expo@53.0.24)
+ transitivePeerDependencies:
+ - supports-color
+
expo-dev-client@6.0.18(expo@54.0.13):
dependencies:
expo: 54.0.13(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
@@ -28936,6 +30340,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ expo-dev-launcher@5.1.16(expo@53.0.24):
+ dependencies:
+ ajv: 8.11.0
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ expo-dev-menu: 6.1.14(expo@53.0.24)
+ expo-manifests: 0.16.6(expo@53.0.24)
+ resolve-from: 5.0.0
+ transitivePeerDependencies:
+ - supports-color
+
expo-dev-launcher@5.1.17(expo@52.0.47):
dependencies:
ajv: 8.11.0
@@ -28946,6 +30360,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ expo-dev-launcher@5.1.17(expo@53.0.24):
+ dependencies:
+ ajv: 8.11.0
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ expo-dev-menu: 6.1.15(expo@53.0.24)
+ expo-manifests: 0.16.6(expo@53.0.24)
+ resolve-from: 5.0.0
+ transitivePeerDependencies:
+ - supports-color
+
expo-dev-launcher@5.1.17(expo@54.0.25):
dependencies:
ajv: 8.11.0
@@ -28976,6 +30400,10 @@ snapshots:
dependencies:
expo: 52.0.47(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@expo/metro-runtime@6.1.2)(react-native@0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1))(react@18.3.1)
+ expo-dev-menu-interface@1.10.0(expo@53.0.24):
+ dependencies:
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+
expo-dev-menu-interface@1.10.0(expo@54.0.25):
dependencies:
expo: 54.0.25(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
@@ -28997,11 +30425,21 @@ snapshots:
expo: 52.0.47(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@expo/metro-runtime@6.1.2)(react-native@0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1))(react@18.3.1)
expo-dev-menu-interface: 1.9.3(expo@52.0.47)
+ expo-dev-menu@6.1.14(expo@53.0.24):
+ dependencies:
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ expo-dev-menu-interface: 1.10.0(expo@53.0.24)
+
expo-dev-menu@6.1.15(expo@52.0.47):
dependencies:
expo: 52.0.47(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@expo/metro-runtime@6.1.2)(react-native@0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1))(react@18.3.1)
expo-dev-menu-interface: 1.10.0(expo@52.0.47)
+ expo-dev-menu@6.1.15(expo@53.0.24):
+ dependencies:
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ expo-dev-menu-interface: 1.10.0(expo@53.0.24)
+
expo-dev-menu@6.1.15(expo@54.0.25):
dependencies:
expo: 54.0.25(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
@@ -29039,6 +30477,11 @@ snapshots:
react-native: 0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1)
web-streams-polyfill: 3.3.3
+ expo-file-system@18.1.11(expo@53.0.24)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)):
+ dependencies:
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+
expo-file-system@19.0.19(expo@54.0.12)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0)):
dependencies:
expo: 54.0.12(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
@@ -29065,6 +30508,12 @@ snapshots:
fontfaceobserver: 2.3.0
react: 18.3.1
+ expo-font@13.3.2(expo@53.0.24)(react@19.0.0):
+ dependencies:
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ fontfaceobserver: 2.3.0
+ react: 19.0.0
+
expo-font@14.0.9(expo@52.0.47)(react-native@0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1))(react@18.3.1):
dependencies:
expo: 52.0.47(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@expo/metro-runtime@6.1.2)(react-native@0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1))(react@18.3.1)
@@ -29108,6 +30557,10 @@ snapshots:
dependencies:
expo: 54.0.25(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
+ expo-image-loader@5.1.0(expo@53.0.24):
+ dependencies:
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+
expo-image-loader@6.0.0(expo@54.0.13):
dependencies:
expo: 54.0.13(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
@@ -29116,6 +30569,11 @@ snapshots:
dependencies:
expo: 54.0.25(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
+ expo-image-picker@16.1.4(expo@53.0.24):
+ dependencies:
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ expo-image-loader: 5.1.0(expo@53.0.24)
+
expo-image-picker@17.0.8(expo@54.0.13):
dependencies:
expo: 54.0.13(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
@@ -29151,6 +30609,11 @@ snapshots:
expo: 52.0.47(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@expo/metro-runtime@6.1.2)(react-native@0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1))(react@18.3.1)
react: 18.3.1
+ expo-keep-awake@14.1.4(expo@53.0.24)(react@19.0.0):
+ dependencies:
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react: 19.0.0
+
expo-keep-awake@15.0.7(expo@54.0.12)(react@19.1.0):
dependencies:
expo: 54.0.12(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
@@ -29194,6 +30657,16 @@ snapshots:
- expo
- supports-color
+ expo-linking@7.1.7(expo@53.0.24)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0):
+ dependencies:
+ expo-constants: 17.1.7(expo@53.0.24)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))
+ invariant: 2.2.4
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+ transitivePeerDependencies:
+ - expo
+ - supports-color
+
expo-linking@8.0.9(expo@54.0.12)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0):
dependencies:
expo-constants: 18.0.10(expo@54.0.12)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))
@@ -29240,6 +30713,10 @@ snapshots:
react: 19.1.0
rtl-detect: 1.1.2
+ expo-location@18.1.6(expo@53.0.24):
+ dependencies:
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+
expo-location@19.0.7(expo@54.0.12):
dependencies:
expo: 54.0.12(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
@@ -29264,6 +30741,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ expo-manifests@0.16.6(expo@53.0.24):
+ dependencies:
+ '@expo/config': 11.0.13
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ expo-json-utils: 0.15.0
+ transitivePeerDependencies:
+ - supports-color
+
expo-manifests@0.16.6(expo@54.0.25):
dependencies:
'@expo/config': 11.0.13
@@ -29309,6 +30794,16 @@ snapshots:
require-from-string: 2.0.2
resolve-from: 5.0.0
+ expo-modules-autolinking@2.1.14:
+ dependencies:
+ '@expo/spawn-async': 1.7.2
+ chalk: 4.1.2
+ commander: 7.2.0
+ find-up: 5.0.0
+ glob: 10.5.0
+ require-from-string: 2.0.2
+ resolve-from: 5.0.0
+
expo-modules-autolinking@3.0.14:
dependencies:
'@expo/spawn-async': 1.7.2
@@ -29339,6 +30834,10 @@ snapshots:
dependencies:
invariant: 2.2.4
+ expo-modules-core@2.5.0:
+ dependencies:
+ invariant: 2.2.4
+
expo-modules-core@3.0.20(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0):
dependencies:
invariant: 2.2.4
@@ -29393,6 +30892,37 @@ snapshots:
- react-native
- supports-color
+ expo-router@5.1.7(duagq234s5dj4m7fdjuubauzmi):
+ dependencies:
+ '@expo/metro-runtime': 5.0.5(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))
+ '@expo/schema-utils': 0.1.7
+ '@expo/server': 0.6.3
+ '@radix-ui/react-slot': 1.2.0(@types/react@19.0.14)(react@19.0.0)
+ '@react-navigation/bottom-tabs': 7.8.6(@react-navigation/native@7.1.21(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-screens@4.11.1(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ '@react-navigation/native': 7.1.21(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ '@react-navigation/native-stack': 7.7.0(@react-navigation/native@7.1.21(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-screens@4.11.1(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ client-only: 0.0.1
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ expo-constants: 17.1.7(expo@53.0.24)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))
+ expo-linking: 7.1.7(expo@53.0.24)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ invariant: 2.2.4
+ react-fast-compare: 3.2.2
+ react-native-is-edge-to-edge: 1.2.1(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react-native-safe-area-context: 5.4.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react-native-screens: 4.11.1(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ semver: 7.6.3
+ server-only: 0.0.1
+ shallowequal: 1.1.0
+ optionalDependencies:
+ '@react-navigation/drawer': 7.7.4(@react-navigation/native@7.1.21(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-gesture-handler@2.24.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-reanimated@3.17.5(@babel/core@7.28.5)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-screens@4.11.1(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react-native-reanimated: 3.17.5(@babel/core@7.28.5)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ transitivePeerDependencies:
+ - '@react-native-masked-view/masked-view'
+ - '@types/react'
+ - react
+ - react-native
+ - supports-color
+
expo-router@6.0.15(5hugpaxifnwzghcvwd66gl4lyu):
dependencies:
'@expo/metro-runtime': 6.1.2(expo@54.0.25)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
@@ -29648,11 +31178,33 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ expo-sqlite@15.2.14(expo@53.0.24)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0):
+ dependencies:
+ await-lock: 2.2.2
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+
+ expo-sqlite@15.2.14(expo@54.0.25)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0):
+ dependencies:
+ await-lock: 2.2.2
+ expo: 54.0.25(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
+ react: 19.1.0
+ react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0)
+ optional: true
+
expo-status-bar@2.0.1(react-native@0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1))(react@18.3.1):
dependencies:
react: 18.3.1
react-native: 0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1)
+ expo-status-bar@2.2.3(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0):
+ dependencies:
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+ react-native-edge-to-edge: 1.6.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react-native-is-edge-to-edge: 1.2.1(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+
expo-status-bar@3.0.8(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0):
dependencies:
react: 19.1.0
@@ -29672,6 +31224,12 @@ snapshots:
expo-structured-headers@5.0.0: {}
+ expo-symbols@0.4.5(expo@53.0.24)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)):
+ dependencies:
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+ sf-symbols-typescript: 2.1.0
+
expo-symbols@1.0.7(expo@54.0.12)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0)):
dependencies:
expo: 54.0.12(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
@@ -29707,6 +31265,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ expo-system-ui@5.0.11(expo@53.0.24)(react-native-web@0.20.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)):
+ dependencies:
+ '@react-native/normalize-colors': 0.79.6
+ debug: 4.4.3
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+ optionalDependencies:
+ react-native-web: 0.20.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ transitivePeerDependencies:
+ - supports-color
+
expo-system-ui@6.0.8(expo@54.0.12)(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0)):
dependencies:
'@react-native/normalize-colors': 0.81.5
@@ -29755,6 +31324,10 @@ snapshots:
dependencies:
expo: 52.0.47(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@expo/metro-runtime@6.1.2)(react-native@0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1))(react@18.3.1)
+ expo-updates-interface@1.1.0(expo@53.0.24):
+ dependencies:
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+
expo-updates-interface@2.0.0(expo@54.0.13):
dependencies:
expo: 54.0.13(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
@@ -29790,6 +31363,11 @@ snapshots:
expo: 52.0.47(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@expo/metro-runtime@6.1.2)(react-native@0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1))(react@18.3.1)
react-native: 0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1)
+ expo-web-browser@14.1.6(expo@53.0.24)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)):
+ dependencies:
+ expo: 53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+
expo-web-browser@15.0.9(expo@54.0.12)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0)):
dependencies:
expo: 54.0.12(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
@@ -29840,6 +31418,37 @@ snapshots:
- supports-color
- utf-8-validate
+ expo@53.0.24(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0):
+ dependencies:
+ '@babel/runtime': 7.28.4
+ '@expo/cli': 0.24.22
+ '@expo/config': 11.0.13
+ '@expo/config-plugins': 10.1.2
+ '@expo/fingerprint': 0.13.4
+ '@expo/metro-config': 0.20.17
+ '@expo/vector-icons': 14.1.0(expo-font@13.3.2(expo@53.0.24)(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ babel-preset-expo: 13.2.4(@babel/core@7.28.5)
+ expo-asset: 11.1.7(expo@53.0.24)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ expo-constants: 17.1.7(expo@53.0.24)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))
+ expo-file-system: 18.1.11(expo@53.0.24)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))
+ expo-font: 13.3.2(expo@53.0.24)(react@19.0.0)
+ expo-keep-awake: 14.1.4(expo@53.0.24)(react@19.0.0)
+ expo-modules-autolinking: 2.1.14
+ expo-modules-core: 2.5.0
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+ react-native-edge-to-edge: 1.6.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ whatwg-url-without-unicode: 8.0.0-3
+ optionalDependencies:
+ '@expo/metro-runtime': 6.1.2(expo@53.0.24)(react-dom@19.0.0(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ transitivePeerDependencies:
+ - '@babel/core'
+ - babel-plugin-react-compiler
+ - bufferutil
+ - graphql
+ - supports-color
+ - utf-8-validate
+
expo@54.0.12(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0):
dependencies:
'@babel/runtime': 7.28.4
@@ -31583,6 +33192,26 @@ snapshots:
- supports-color
- ts-node
+ jest-cli@30.2.0(@types/node@22.19.1)(esbuild-register@3.6.0(esbuild@0.27.0)):
+ dependencies:
+ '@jest/core': 30.2.0(esbuild-register@3.6.0(esbuild@0.27.0))(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.9.3))
+ '@jest/test-result': 30.2.0
+ '@jest/types': 30.2.0
+ chalk: 4.1.2
+ exit-x: 0.2.2
+ import-local: 3.2.0
+ jest-config: 30.2.0(@types/node@22.19.1)(esbuild-register@3.6.0(esbuild@0.27.0))(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.9.3))
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - esbuild-register
+ - supports-color
+ - ts-node
+ optional: true
+
jest-cli@30.2.0(@types/node@22.19.1)(esbuild-register@3.6.0(esbuild@0.27.0))(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.9.3)):
dependencies:
'@jest/core': 30.2.0(esbuild-register@3.6.0(esbuild@0.27.0))(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.9.3))
@@ -32208,6 +33837,20 @@ snapshots:
- supports-color
- ts-node
+ jest@30.2.0(@types/node@22.19.1)(esbuild-register@3.6.0(esbuild@0.27.0)):
+ dependencies:
+ '@jest/core': 30.2.0(esbuild-register@3.6.0(esbuild@0.27.0))(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.9.3))
+ '@jest/types': 30.2.0
+ import-local: 3.2.0
+ jest-cli: 30.2.0(@types/node@22.19.1)(esbuild-register@3.6.0(esbuild@0.27.0))
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - esbuild-register
+ - supports-color
+ - ts-node
+ optional: true
+
jest@30.2.0(@types/node@22.19.1)(esbuild-register@3.6.0(esbuild@0.27.0))(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.9.3)):
dependencies:
'@jest/core': 30.2.0(esbuild-register@3.6.0(esbuild@0.27.0))(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.9.3))
@@ -33033,6 +34676,15 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ metro-babel-transformer@0.82.5:
+ dependencies:
+ '@babel/core': 7.28.5
+ flow-enums-runtime: 0.0.6
+ hermes-parser: 0.29.1
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - supports-color
+
metro-babel-transformer@0.83.1:
dependencies:
'@babel/core': 7.28.5
@@ -33064,6 +34716,10 @@ snapshots:
dependencies:
flow-enums-runtime: 0.0.6
+ metro-cache-key@0.82.5:
+ dependencies:
+ flow-enums-runtime: 0.0.6
+
metro-cache-key@0.83.1:
dependencies:
flow-enums-runtime: 0.0.6
@@ -33082,6 +34738,15 @@ snapshots:
flow-enums-runtime: 0.0.6
metro-core: 0.81.5
+ metro-cache@0.82.5:
+ dependencies:
+ exponential-backoff: 3.1.3
+ flow-enums-runtime: 0.0.6
+ https-proxy-agent: 7.0.6
+ metro-core: 0.82.5
+ transitivePeerDependencies:
+ - supports-color
+
metro-cache@0.83.1:
dependencies:
exponential-backoff: 3.1.3
@@ -33124,6 +34789,21 @@ snapshots:
- supports-color
- utf-8-validate
+ metro-config@0.82.5:
+ dependencies:
+ connect: 3.7.0
+ cosmiconfig: 5.2.1
+ flow-enums-runtime: 0.0.6
+ jest-validate: 29.7.0
+ metro: 0.82.5
+ metro-cache: 0.82.5
+ metro-core: 0.82.5
+ metro-runtime: 0.82.5
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
metro-config@0.83.1:
dependencies:
connect: 3.7.0
@@ -33175,6 +34855,12 @@ snapshots:
lodash.throttle: 4.1.1
metro-resolver: 0.81.5
+ metro-core@0.82.5:
+ dependencies:
+ flow-enums-runtime: 0.0.6
+ lodash.throttle: 4.1.1
+ metro-resolver: 0.82.5
+
metro-core@0.83.1:
dependencies:
flow-enums-runtime: 0.0.6
@@ -33207,6 +34893,20 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ metro-file-map@0.82.5:
+ dependencies:
+ debug: 4.4.3
+ fb-watchman: 2.0.2
+ flow-enums-runtime: 0.0.6
+ graceful-fs: 4.2.11
+ invariant: 2.2.4
+ jest-worker: 29.7.0
+ micromatch: 4.0.8
+ nullthrows: 1.1.1
+ walker: 1.0.8
+ transitivePeerDependencies:
+ - supports-color
+
metro-file-map@0.83.1:
dependencies:
debug: 4.4.3
@@ -33254,6 +34954,11 @@ snapshots:
flow-enums-runtime: 0.0.6
terser: 5.44.1
+ metro-minify-terser@0.82.5:
+ dependencies:
+ flow-enums-runtime: 0.0.6
+ terser: 5.44.1
+
metro-minify-terser@0.83.1:
dependencies:
flow-enums-runtime: 0.0.6
@@ -33273,6 +34978,10 @@ snapshots:
dependencies:
flow-enums-runtime: 0.0.6
+ metro-resolver@0.82.5:
+ dependencies:
+ flow-enums-runtime: 0.0.6
+
metro-resolver@0.83.1:
dependencies:
flow-enums-runtime: 0.0.6
@@ -33290,6 +34999,11 @@ snapshots:
'@babel/runtime': 7.28.4
flow-enums-runtime: 0.0.6
+ metro-runtime@0.82.5:
+ dependencies:
+ '@babel/runtime': 7.28.4
+ flow-enums-runtime: 0.0.6
+
metro-runtime@0.83.1:
dependencies:
'@babel/runtime': 7.28.4
@@ -33320,6 +35034,21 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ metro-source-map@0.82.5:
+ dependencies:
+ '@babel/traverse': 7.28.5
+ '@babel/traverse--for-generate-function-map': '@babel/traverse@7.28.5'
+ '@babel/types': 7.28.5
+ flow-enums-runtime: 0.0.6
+ invariant: 2.2.4
+ metro-symbolicate: 0.82.5
+ nullthrows: 1.1.1
+ ob1: 0.82.5
+ source-map: 0.5.7
+ vlq: 1.0.1
+ transitivePeerDependencies:
+ - supports-color
+
metro-source-map@0.83.1:
dependencies:
'@babel/traverse': 7.28.5
@@ -33376,6 +35105,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ metro-symbolicate@0.82.5:
+ dependencies:
+ flow-enums-runtime: 0.0.6
+ invariant: 2.2.4
+ metro-source-map: 0.82.5
+ nullthrows: 1.1.1
+ source-map: 0.5.7
+ vlq: 1.0.1
+ transitivePeerDependencies:
+ - supports-color
+
metro-symbolicate@0.83.1:
dependencies:
flow-enums-runtime: 0.0.6
@@ -33420,6 +35160,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ metro-transform-plugins@0.82.5:
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/generator': 7.28.5
+ '@babel/template': 7.27.2
+ '@babel/traverse': 7.28.5
+ flow-enums-runtime: 0.0.6
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - supports-color
+
metro-transform-plugins@0.83.1:
dependencies:
'@babel/core': 7.28.5
@@ -33473,6 +35224,26 @@ snapshots:
- supports-color
- utf-8-validate
+ metro-transform-worker@0.82.5:
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/generator': 7.28.5
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
+ flow-enums-runtime: 0.0.6
+ metro: 0.82.5
+ metro-babel-transformer: 0.82.5
+ metro-cache: 0.82.5
+ metro-cache-key: 0.82.5
+ metro-minify-terser: 0.82.5
+ metro-source-map: 0.82.5
+ metro-transform-plugins: 0.82.5
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
metro-transform-worker@0.83.1:
dependencies:
'@babel/core': 7.28.5
@@ -33580,6 +35351,53 @@ snapshots:
- supports-color
- utf-8-validate
+ metro@0.82.5:
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/core': 7.28.5
+ '@babel/generator': 7.28.5
+ '@babel/parser': 7.28.5
+ '@babel/template': 7.27.2
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
+ accepts: 1.3.8
+ chalk: 4.1.2
+ ci-info: 2.0.0
+ connect: 3.7.0
+ debug: 4.4.3
+ error-stack-parser: 2.1.4
+ flow-enums-runtime: 0.0.6
+ graceful-fs: 4.2.11
+ hermes-parser: 0.29.1
+ image-size: 1.2.1
+ invariant: 2.2.4
+ jest-worker: 29.7.0
+ jsc-safe-url: 0.2.4
+ lodash.throttle: 4.1.1
+ metro-babel-transformer: 0.82.5
+ metro-cache: 0.82.5
+ metro-cache-key: 0.82.5
+ metro-config: 0.82.5
+ metro-core: 0.82.5
+ metro-file-map: 0.82.5
+ metro-resolver: 0.82.5
+ metro-runtime: 0.82.5
+ metro-source-map: 0.82.5
+ metro-symbolicate: 0.82.5
+ metro-transform-plugins: 0.82.5
+ metro-transform-worker: 0.82.5
+ mime-types: 2.1.35
+ nullthrows: 1.1.1
+ serialize-error: 2.1.0
+ source-map: 0.5.7
+ throat: 5.0.0
+ ws: 7.5.10
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
metro@0.83.1:
dependencies:
'@babel/code-frame': 7.27.1
@@ -34139,6 +35957,20 @@ snapshots:
- react-native-svg
- supports-color
+ nativewind@4.2.1(react-native-reanimated@3.17.5(@babel/core@7.28.5)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)(tailwindcss@3.4.18(tsx@4.20.6)(yaml@2.8.1)):
+ dependencies:
+ comment-json: 4.4.1
+ debug: 4.4.3
+ react-native-css-interop: 0.2.1(react-native-reanimated@3.17.5(@babel/core@7.28.5)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)(tailwindcss@3.4.18(tsx@4.20.6)(yaml@2.8.1))
+ tailwindcss: 3.4.18(tsx@4.20.6)(yaml@2.8.1)
+ transitivePeerDependencies:
+ - react
+ - react-native
+ - react-native-reanimated
+ - react-native-safe-area-context
+ - react-native-svg
+ - supports-color
+
nativewind@4.2.1(react-native-reanimated@4.1.5(@babel/core@7.28.5)(react-native-worklets@0.5.1(@babel/core@7.28.5)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native-svg@15.12.1(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)(tailwindcss@3.4.18(tsx@4.20.6)(yaml@2.8.1)):
dependencies:
comment-json: 4.4.1
@@ -34287,6 +36119,10 @@ snapshots:
dependencies:
flow-enums-runtime: 0.0.6
+ ob1@0.82.5:
+ dependencies:
+ flow-enums-runtime: 0.0.6
+
ob1@0.83.1:
dependencies:
flow-enums-runtime: 0.0.6
@@ -35025,6 +36861,11 @@ snapshots:
react: 18.3.1
scheduler: 0.23.2
+ react-dom@19.0.0(react@19.0.0):
+ dependencies:
+ react: 19.0.0
+ scheduler: 0.25.0
+
react-dom@19.1.0(react@19.1.0):
dependencies:
react: 19.1.0
@@ -35036,6 +36877,10 @@ snapshots:
dependencies:
react: 18.3.1
+ react-freeze@1.0.4(react@19.0.0):
+ dependencies:
+ react: 19.0.0
+
react-freeze@1.0.4(react@19.1.0):
dependencies:
react: 19.1.0
@@ -35102,6 +36947,11 @@ snapshots:
- react
- react-native
+ react-native-context-menu-view@1.20.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0):
+ dependencies:
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+
react-native-context-menu-view@1.20.0(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0):
dependencies:
react: 19.1.0
@@ -35124,6 +36974,23 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ react-native-css-interop@0.2.1(react-native-reanimated@3.17.5(@babel/core@7.28.5)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)(tailwindcss@3.4.18(tsx@4.20.6)(yaml@2.8.1)):
+ dependencies:
+ '@babel/helper-module-imports': 7.27.1
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
+ debug: 4.4.3
+ lightningcss: 1.27.0
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+ react-native-reanimated: 3.17.5(@babel/core@7.28.5)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ semver: 7.7.3
+ tailwindcss: 3.4.18(tsx@4.20.6)(yaml@2.8.1)
+ optionalDependencies:
+ react-native-safe-area-context: 5.4.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ transitivePeerDependencies:
+ - supports-color
+
react-native-css-interop@0.2.1(react-native-reanimated@4.1.5(@babel/core@7.28.5)(react-native-worklets@0.5.1(@babel/core@7.28.5)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native-svg@15.12.1(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)(tailwindcss@3.4.18(tsx@4.20.6)(yaml@2.8.1)):
dependencies:
'@babel/helper-module-imports': 7.27.1
@@ -35195,6 +37062,16 @@ snapshots:
react-native-reanimated: 3.16.2(@babel/core@7.28.5)(react-native@0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1))(react@18.3.1)
use-latest-callback: 0.2.6(react@18.3.1)
+ react-native-drawer-layout@4.2.0(react-native-gesture-handler@2.24.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native-reanimated@3.17.5(@babel/core@7.28.5)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0):
+ dependencies:
+ color: 4.2.3
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+ react-native-gesture-handler: 2.24.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ react-native-reanimated: 3.17.5(@babel/core@7.28.5)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ use-latest-callback: 0.2.6(react@19.0.0)
+ optional: true
+
react-native-drawer-layout@4.2.0(react-native-gesture-handler@2.28.0(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.5(@babel/core@7.28.5)(react-native-worklets@0.5.1(@babel/core@7.28.5)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0):
dependencies:
color: 4.2.3
@@ -35224,6 +37101,11 @@ snapshots:
react-native-reanimated: 4.1.5(@babel/core@7.28.5)(react-native-worklets@0.6.1(@babel/core@7.28.5)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
use-latest-callback: 0.2.6(react@19.1.0)
+ react-native-edge-to-edge@1.6.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0):
+ dependencies:
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+
react-native-fit-image@1.5.5:
dependencies:
prop-types: 15.8.1
@@ -35237,6 +37119,14 @@ snapshots:
react: 18.3.1
react-native: 0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1)
+ react-native-gesture-handler@2.24.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0):
+ dependencies:
+ '@egjs/hammerjs': 2.0.17
+ hoist-non-react-statics: 3.3.2
+ invariant: 2.2.4
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+
react-native-gesture-handler@2.28.0(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0):
dependencies:
'@egjs/hammerjs': 2.0.17
@@ -35264,11 +37154,21 @@ snapshots:
dependencies:
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0)
+ react-native-is-edge-to-edge@1.1.7(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0):
+ dependencies:
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+
react-native-is-edge-to-edge@1.2.1(react-native@0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1))(react@18.3.1):
dependencies:
react: 18.3.1
react-native: 0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(react@18.3.1)
+ react-native-is-edge-to-edge@1.2.1(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0):
+ dependencies:
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+
react-native-is-edge-to-edge@1.2.1(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0):
dependencies:
react: 19.1.0
@@ -35353,6 +37253,26 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ react-native-reanimated@3.17.5(@babel/core@7.28.5)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0):
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.5)
+ '@babel/preset-typescript': 7.28.5(@babel/core@7.28.5)
+ convert-source-map: 2.0.0
+ invariant: 2.2.4
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+ react-native-is-edge-to-edge: 1.1.7(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ transitivePeerDependencies:
+ - supports-color
+
react-native-reanimated@4.1.5(@babel/core@7.28.5)(react-native-worklets@0.5.1(@babel/core@7.28.5)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0):
dependencies:
'@babel/core': 7.28.5
@@ -35399,6 +37319,11 @@ snapshots:
react: 19.1.0
react-native: 0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0)
+ react-native-safe-area-context@5.4.0(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0):
+ dependencies:
+ react: 19.0.0
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+
react-native-safe-area-context@5.6.2(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0):
dependencies:
react: 19.1.0
@@ -35414,6 +37339,14 @@ snapshots:
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0)
+ react-native-screens@4.11.1(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0):
+ dependencies:
+ react: 19.0.0
+ react-freeze: 1.0.4(react@19.0.0)
+ react-native: 0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0)
+ react-native-is-edge-to-edge: 1.2.1(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ warn-once: 0.1.1
+
react-native-screens@4.16.0(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0):
dependencies:
react: 19.1.0
@@ -35482,6 +37415,8 @@ snapshots:
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0)
whatwg-url-without-unicode: 8.0.0-3
+ react-native-uuid@2.0.3: {}
+
react-native-web@0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@babel/runtime': 7.28.4
@@ -35497,6 +37432,21 @@ snapshots:
transitivePeerDependencies:
- encoding
+ react-native-web@0.20.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
+ dependencies:
+ '@babel/runtime': 7.28.4
+ '@react-native/normalize-colors': 0.74.89
+ fbjs: 3.0.5
+ inline-style-prefixer: 7.0.1
+ memoize-one: 6.0.0
+ nullthrows: 1.1.1
+ postcss-value-parser: 4.2.0
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ styleq: 0.1.3
+ transitivePeerDependencies:
+ - encoding
+
react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
'@babel/runtime': 7.28.4
@@ -35660,6 +37610,54 @@ snapshots:
- supports-color
- utf-8-validate
+ react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0):
+ dependencies:
+ '@jest/create-cache-key-function': 29.7.0
+ '@react-native/assets-registry': 0.79.3
+ '@react-native/codegen': 0.79.3(@babel/core@7.28.5)
+ '@react-native/community-cli-plugin': 0.79.3
+ '@react-native/gradle-plugin': 0.79.3
+ '@react-native/js-polyfills': 0.79.3
+ '@react-native/normalize-colors': 0.79.3
+ '@react-native/virtualized-lists': 0.79.3(@types/react@19.0.14)(react-native@0.79.3(@babel/core@7.28.5)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)
+ abort-controller: 3.0.0
+ anser: 1.4.10
+ ansi-regex: 5.0.1
+ babel-jest: 29.7.0(@babel/core@7.28.5)
+ babel-plugin-syntax-hermes-parser: 0.25.1
+ base64-js: 1.5.1
+ chalk: 4.1.2
+ commander: 12.1.0
+ event-target-shim: 5.0.1
+ flow-enums-runtime: 0.0.6
+ glob: 7.2.3
+ invariant: 2.2.4
+ jest-environment-node: 29.7.0
+ memoize-one: 5.2.1
+ metro-runtime: 0.82.5
+ metro-source-map: 0.82.5
+ nullthrows: 1.1.1
+ pretty-format: 29.7.0
+ promise: 8.3.0
+ react: 19.0.0
+ react-devtools-core: 6.1.5
+ react-refresh: 0.14.2
+ regenerator-runtime: 0.13.11
+ scheduler: 0.25.0
+ semver: 7.7.3
+ stacktrace-parser: 0.1.11
+ whatwg-fetch: 3.6.20
+ ws: 6.2.3
+ yargs: 17.7.2
+ optionalDependencies:
+ '@types/react': 19.0.14
+ transitivePeerDependencies:
+ - '@babel/core'
+ - '@react-native-community/cli'
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0):
dependencies:
'@jest/create-cache-key-function': 29.7.0
@@ -35861,6 +37859,8 @@ snapshots:
dependencies:
loose-envify: 1.4.0
+ react@19.0.0: {}
+
react@19.1.0: {}
read-cache@1.0.0:
@@ -36340,6 +38340,8 @@ snapshots:
dependencies:
loose-envify: 1.4.0
+ scheduler@0.25.0: {}
+
scheduler@0.26.0: {}
schema-utils@3.3.0:
@@ -37897,6 +39899,10 @@ snapshots:
dependencies:
react: 18.3.1
+ use-latest-callback@0.2.6(react@19.0.0):
+ dependencies:
+ react: 19.0.0
+
use-latest-callback@0.2.6(react@19.1.0):
dependencies:
react: 19.1.0
@@ -37913,6 +39919,10 @@ snapshots:
dependencies:
react: 18.3.1
+ use-sync-external-store@1.6.0(react@19.0.0):
+ dependencies:
+ react: 19.0.0
+
use-sync-external-store@1.6.0(react@19.1.0):
dependencies:
react: 19.1.0
@@ -38069,6 +40079,23 @@ snapshots:
tsx: 4.20.6
yaml: 2.8.1
+ vite@6.4.1(@types/node@24.10.1)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1):
+ dependencies:
+ esbuild: 0.25.12
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+ postcss: 8.5.6
+ rollup: 4.53.3
+ tinyglobby: 0.2.15
+ optionalDependencies:
+ '@types/node': 24.10.1
+ fsevents: 2.3.3
+ jiti: 1.21.7
+ lightningcss: 1.30.2
+ terser: 5.44.1
+ tsx: 4.20.6
+ yaml: 2.8.1
+
vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1):
dependencies:
esbuild: 0.25.12
@@ -38145,6 +40172,10 @@ snapshots:
optionalDependencies:
vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1)
+ vitefu@1.1.1(vite@6.4.1(@types/node@24.10.1)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1)):
+ optionalDependencies:
+ vite: 6.4.1(@types/node@24.10.1)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1)
+
vitefu@1.1.1(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1)):
optionalDependencies:
vite: 6.4.1(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1)
@@ -38760,6 +40791,13 @@ snapshots:
zod@4.1.12: {}
+ zustand@4.5.7(@types/react@19.0.14)(react@19.0.0):
+ dependencies:
+ use-sync-external-store: 1.6.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.14
+ react: 19.0.0
+
zustand@4.5.7(@types/react@19.2.7)(react@19.1.0):
dependencies:
use-sync-external-store: 1.6.0(react@19.1.0)
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 02dbb2f91..88e4dccdc 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -7,6 +7,7 @@ packages:
- 'picture'
- 'uload'
- 'chat'
+ - 'nutriphi'
# Sub-apps within projects
- 'maerchenzauber/apps/*'
@@ -21,6 +22,8 @@ packages:
- 'chat/apps/*'
- 'chat/backend'
- 'chat/packages/*'
+ - 'nutriphi/apps/*'
+ - 'nutriphi/backend'
# Shared packages
- 'packages/*'