-
Neuen Chat starten
+
Neuen Chat starten
@@ -150,16 +150,16 @@
-
+
Konversationen in diesem Space
{#if conversations.length === 0}
-
+
Noch keine Konversationen in diesem Space.
@@ -180,14 +180,14 @@
{#each conversations as conv (conv.id)}
-
+
{conv.title || 'Neue Konversation'}
- {formatDate(conv.updated_at)}
+ {formatDate(conv.updated_at)}
{/each}
diff --git a/apps/chat/apps/web/src/routes/(protected)/templates/+page.svelte b/apps/chat/apps/web/src/routes/(protected)/templates/+page.svelte
index 8e127c9fd..f43af885a 100644
--- a/apps/chat/apps/web/src/routes/(protected)/templates/+page.svelte
+++ b/apps/chat/apps/web/src/routes/(protected)/templates/+page.svelte
@@ -105,21 +105,21 @@
Vorlagen | ManaChat
-
+
-
Vorlagen
-
+
Vorlagen
+
Erstelle Vorlagen mit benutzerdefinierten System-Prompts für verschiedene
KI-Verhaltensweisen.
{:else if templatesStore.templates.length === 0}
-
+
Keine Vorlagen vorhanden
-
+
Erstelle deine erste Vorlage, um loszulegen
@@ -319,19 +287,7 @@
? 'bg-blue-50 text-blue-600 dark:bg-blue-950 dark:text-blue-400'
: 'bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700'}"
>
-
-
-
+
Favoriten
@@ -350,19 +306,9 @@
placeholder="Prompts..."
class="w-full rounded-lg border border-gray-300 bg-white px-3 py-2 pl-9 text-sm text-gray-900 placeholder-gray-500 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-100 dark:placeholder-gray-400"
/>
-
-
-
+
+
+
@@ -417,19 +363,7 @@
? 'bg-blue-50 text-blue-600 dark:bg-blue-950 dark:text-blue-400'
: 'bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700'}"
>
-
-
-
+
Favoriten
@@ -466,7 +400,7 @@
>
{authStore.user?.email?.charAt(0).toUpperCase()}
@@ -476,19 +410,9 @@
Account
-
+
{#if showUserMenu}
@@ -500,28 +424,14 @@
onclick={() => (showUserMenu = false)}
class="flex items-center gap-3 px-4 py-3 text-sm text-gray-700 transition-colors hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700"
>
-
-
-
+
Profil & Einstellungen
@@ -542,7 +452,7 @@
@@ -561,14 +471,25 @@
? 'bg-blue-50 text-blue-600 dark:bg-blue-950 dark:text-blue-400'
: 'text-gray-700 hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-800'}"
>
-
-
-
+
+ {#if item.iconName === 'gallery'}
+
+ {:else if item.iconName === 'board'}
+
+ {:else if item.iconName === 'explore'}
+
+ {:else if item.iconName === 'generate'}
+
+ {:else if item.iconName === 'upload'}
+
+ {:else if item.iconName === 'tags'}
+
+ {:else if item.iconName === 'archive'}
+
+ {:else if item.iconName === 'subscription'}
+
+ {/if}
+
{item.label}
{/each}
@@ -577,28 +498,16 @@
onclick={() => (showUserMenu = false)}
class="flex items-center gap-3 border-b border-gray-100 px-4 py-3 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-800"
>
-
-
-
+
+
+
Profil & Einstellungen
@@ -619,9 +528,23 @@
? 'text-blue-600 dark:text-blue-400'
: 'text-gray-600 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-800'}"
>
-
-
-
+ {#if item.iconName === 'gallery'}
+
+ {:else if item.iconName === 'board'}
+
+ {:else if item.iconName === 'explore'}
+
+ {:else if item.iconName === 'generate'}
+
+ {:else if item.iconName === 'upload'}
+
+ {:else if item.iconName === 'tags'}
+
+ {:else if item.iconName === 'archive'}
+
+ {:else if item.iconName === 'subscription'}
+
+ {/if}
{item.label}
{/each}
diff --git a/apps/picture/apps/web/src/lib/components/settings/ThemePicker.svelte b/apps/picture/apps/web/src/lib/components/settings/ThemePicker.svelte
index 0a45ab8ea..99db21749 100644
--- a/apps/picture/apps/web/src/lib/components/settings/ThemePicker.svelte
+++ b/apps/picture/apps/web/src/lib/components/settings/ThemePicker.svelte
@@ -1,13 +1,8 @@
Theme
-
+
{#each themeOptions as option}
- {@const isSelected = $themeVariant === option.value}
- {@const themePreview = themes[option.value]}
+ {@const isSelected = theme.variant === option.value}
-
+
{#if isSelected}
{/if}
@@ -98,9 +88,9 @@
Modus
{#each modeOptions as option}
- {@const isSelected = $themeMode === option.value}
+ {@const isSelected = theme.mode === option.value}
- {#if $themeMode === 'system'}
+ {#if theme.mode === 'system'}
-
-
-
+
Das Theme folgt den Systemeinstellungen deines Geräts
diff --git a/apps/picture/apps/web/src/lib/components/tags/TagPills.svelte b/apps/picture/apps/web/src/lib/components/tags/TagPills.svelte
index 6d8c8e3bc..be109bc50 100644
--- a/apps/picture/apps/web/src/lib/components/tags/TagPills.svelte
+++ b/apps/picture/apps/web/src/lib/components/tags/TagPills.svelte
@@ -1,6 +1,7 @@
{#if open}
@@ -54,7 +61,7 @@
bind:this={modalElement}
class="fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4 dark:bg-black/70"
onclick={handleBackdropClick}
- onkeydown={(e) => e.key === 'Enter' && handleBackdropClick(e)}
+ onkeydown={handleKeydown}
role="dialog"
aria-modal="true"
tabindex="-1"
@@ -69,14 +76,7 @@
class="absolute right-4 top-4 z-10 rounded-full bg-black/50 p-2 text-white transition-colors hover:bg-black/70 focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-black/50 dark:bg-gray-800 dark:hover:bg-gray-700"
aria-label="Close"
>
-
-
-
+
{@render children()}
diff --git a/apps/picture/apps/web/src/lib/components/ui/Toast.svelte b/apps/picture/apps/web/src/lib/components/ui/Toast.svelte
index aa5d071b7..5015cbe87 100644
--- a/apps/picture/apps/web/src/lib/components/ui/Toast.svelte
+++ b/apps/picture/apps/web/src/lib/components/ui/Toast.svelte
@@ -1,32 +1,7 @@
diff --git a/apps/picture/apps/web/src/routes/app/+layout.svelte b/apps/picture/apps/web/src/routes/app/+layout.svelte
index a89e0fdfb..f3a860fd2 100644
--- a/apps/picture/apps/web/src/routes/app/+layout.svelte
+++ b/apps/picture/apps/web/src/routes/app/+layout.svelte
@@ -5,7 +5,7 @@
import { PillNavigation } from '@manacore/shared-ui';
import type { PillNavItem, PillNavElement } from '@manacore/shared-ui';
import KeyboardShortcutsModal from '$lib/components/ui/KeyboardShortcutsModal.svelte';
- import { currentTheme, actualMode, toggleThemeMode } from '$lib/stores/theme';
+ import { theme } from '$lib/stores/theme';
import { isUIVisible, toggleUI, showKeyboardShortcuts } from '$lib/stores/ui';
import { viewMode, setViewMode, type ViewMode } from '$lib/stores/view';
import { browser } from '$app/environment';
@@ -42,7 +42,7 @@
}
function handleToggleTheme() {
- toggleThemeMode();
+ theme.toggleMode();
}
// Client-side auth check
@@ -157,7 +157,7 @@
{:else if authStore.user}
-
+
{#if $isUIVisible}
-
-
-
+
Kein Archiv
Archiviere Bilder aus deiner Galerie, um sie organisiert zu halten ohne sie zu löschen
diff --git a/apps/picture/apps/web/src/routes/app/board/+page.svelte b/apps/picture/apps/web/src/routes/app/board/+page.svelte
index ad7204364..8e4160a21 100644
--- a/apps/picture/apps/web/src/routes/app/board/+page.svelte
+++ b/apps/picture/apps/web/src/routes/app/board/+page.svelte
@@ -17,6 +17,7 @@
import Button from '$lib/components/ui/Button.svelte';
import Modal from '$lib/components/ui/Modal.svelte';
import { showToast } from '$lib/stores/toast';
+ import { Plus, SquaresFour, Image, Trash } from '@manacore/shared-icons';
let loadingMore = $state(false);
let observer: IntersectionObserver | null = null;
@@ -172,9 +173,7 @@
@@ -193,19 +192,7 @@
{:else if $boards.length === 0}
-
-
-
+
Keine Boards vorhanden
@@ -237,19 +224,7 @@
/>
{:else}
{/if}
@@ -285,14 +260,7 @@
Duplizieren
diff --git a/apps/picture/apps/web/src/routes/app/board/[id]/+page.svelte b/apps/picture/apps/web/src/routes/app/board/[id]/+page.svelte
index e24f283ac..d48f5988b 100644
--- a/apps/picture/apps/web/src/routes/app/board/[id]/+page.svelte
+++ b/apps/picture/apps/web/src/routes/app/board/[id]/+page.svelte
@@ -19,6 +19,7 @@
import CanvasToolbar from '$lib/components/board/CanvasToolbar.svelte';
import ImagePickerModal from '$lib/components/board/ImagePickerModal.svelte';
import ImagePropertiesPanel from '$lib/components/board/ImagePropertiesPanel.svelte';
+ import { X, SlidersHorizontal } from '@manacore/shared-icons';
const boardId = $derived($page.params.id);
@@ -152,25 +153,9 @@
title={$showPropertiesPanel ? 'Eigenschaften ausblenden' : 'Eigenschaften anzeigen'}
>
{#if $showPropertiesPanel}
-
-
-
-
+
{:else}
-
-
-
-
+
{/if}
diff --git a/apps/picture/apps/web/src/routes/app/explore/+page.svelte b/apps/picture/apps/web/src/routes/app/explore/+page.svelte
index 19da75f4c..4d1f80e82 100644
--- a/apps/picture/apps/web/src/routes/app/explore/+page.svelte
+++ b/apps/picture/apps/web/src/routes/app/explore/+page.svelte
@@ -16,6 +16,7 @@
import ImageSkeleton from '$lib/components/ui/ImageSkeleton.svelte';
import ViewModeSwitcher from '$lib/components/ui/ViewModeSwitcher.svelte';
import ContextMenu from '$lib/components/ui/ContextMenu.svelte';
+ import { MagnifyingGlass, X, Heart } from '@manacore/shared-icons';
import { onMount } from 'svelte';
import type { Database } from '@picture/shared/types';
import type { ViewMode } from '$lib/stores/view';
@@ -179,19 +180,7 @@
placeholder="Bilder suchen..."
class="w-full rounded-full border border-gray-300/50 bg-white/80 px-4 py-2 pl-10 text-sm text-gray-900 placeholder-gray-500 backdrop-blur-xl transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600/50 dark:bg-gray-800/80 dark:text-gray-100 dark:placeholder-gray-400"
/>
-
-
-
+
{#if searchInput}
{/if}
@@ -226,19 +213,7 @@
? 'bg-blue-600 text-white'
: 'bg-gray-100/80 text-gray-700 backdrop-blur-xl hover:bg-gray-200/80 dark:bg-gray-800/80 dark:text-gray-300 dark:hover:bg-gray-700/80'}"
>
-
-
-
+
Favoriten
@@ -267,19 +242,7 @@
{:else if $exploreImages.length === 0}
-
-
-
+
Keine Bilder gefunden
diff --git a/apps/picture/apps/web/src/routes/app/gallery/+page.svelte b/apps/picture/apps/web/src/routes/app/gallery/+page.svelte
index 972e8d665..6c64b5322 100644
--- a/apps/picture/apps/web/src/routes/app/gallery/+page.svelte
+++ b/apps/picture/apps/web/src/routes/app/gallery/+page.svelte
@@ -19,6 +19,7 @@
import ImageSkeleton from '$lib/components/ui/ImageSkeleton.svelte';
import ViewModeSwitcher from '$lib/components/ui/ViewModeSwitcher.svelte';
import TagPills from '$lib/components/tags/TagPills.svelte';
+ import { Heart } from '@manacore/shared-icons';
import { onMount } from 'svelte';
let loadingMore = $state(false);
@@ -130,19 +131,7 @@
? 'bg-blue-600 text-white'
: 'bg-gray-100/80 text-gray-700 backdrop-blur-xl hover:bg-gray-200/80 dark:bg-gray-800/80 dark:text-gray-300 dark:hover:bg-gray-700/80'}"
>
-
-
-
+
Favoriten
diff --git a/apps/picture/apps/web/src/routes/app/generate/+page.svelte b/apps/picture/apps/web/src/routes/app/generate/+page.svelte
index ab7bb8aa9..b57312b3d 100644
--- a/apps/picture/apps/web/src/routes/app/generate/+page.svelte
+++ b/apps/picture/apps/web/src/routes/app/generate/+page.svelte
@@ -1,5 +1,6 @@
@@ -24,74 +25,26 @@
Tips for better results:
-
-
-
-
+
Be specific: Include details about style, mood, colors, and composition
-
-
-
-
+
Use descriptive words: "Vibrant sunset over mountains" is better than "sunset"
-
-
-
-
+
Negative prompts: Use to exclude unwanted elements (e.g., "blurry, distorted,
low quality")
-
-
-
-
+
Try different models: Each model has unique strengths and artistic styles
diff --git a/apps/picture/apps/web/src/routes/app/subscription/+page.svelte b/apps/picture/apps/web/src/routes/app/subscription/+page.svelte
index a5bd0d900..b9fa53030 100644
--- a/apps/picture/apps/web/src/routes/app/subscription/+page.svelte
+++ b/apps/picture/apps/web/src/routes/app/subscription/+page.svelte
@@ -1,6 +1,5 @@
@@ -40,11 +22,7 @@
logo={PictureLogo}
primaryColor="#3b82f6"
onSignUp={handleSignUp}
- onSignUpWithGoogle={PUBLIC_GOOGLE_CLIENT_ID ? handleSignUpWithGoogle : undefined}
- onSignUpWithApple={PUBLIC_APPLE_CLIENT_ID ? handleSignUpWithApple : undefined}
{goto}
- enableGoogle={!!PUBLIC_GOOGLE_CLIENT_ID}
- enableApple={!!PUBLIC_APPLE_CLIENT_ID}
successRedirect="/app/gallery"
loginPath="/auth/login"
lightBackground="#f0f9ff"
diff --git a/apps/presi/apps/web/package.json b/apps/presi/apps/web/package.json
index f488f4270..6edee148b 100644
--- a/apps/presi/apps/web/package.json
+++ b/apps/presi/apps/web/package.json
@@ -16,14 +16,14 @@
"@sveltejs/adapter-auto": "^3.0.0",
"@sveltejs/kit": "^2.0.0",
"@sveltejs/vite-plugin-svelte": "^5.0.0",
+ "@tailwindcss/postcss": "^4.1.17",
"@types/node": "^20.0.0",
- "autoprefixer": "^10.4.16",
"postcss": "^8.4.32",
"prettier": "^3.1.1",
"prettier-plugin-svelte": "^3.1.2",
"svelte": "^5.0.0",
"svelte-check": "^4.0.0",
- "tailwindcss": "^3.4.0",
+ "tailwindcss": "^4.1.17",
"tslib": "^2.4.1",
"typescript": "^5.0.0",
"vite": "^6.0.0"
@@ -33,6 +33,8 @@
"@manacore/shared-auth": "workspace:*",
"@manacore/shared-auth-ui": "workspace:*",
"@manacore/shared-branding": "workspace:*",
+ "@manacore/shared-tailwind": "workspace:*",
+ "@manacore/shared-theme": "workspace:*",
"@manacore/shared-ui": "workspace:*",
"lucide-svelte": "^0.460.0"
},
diff --git a/apps/presi/apps/web/postcss.config.js b/apps/presi/apps/web/postcss.config.js
index 7b75c83af..1970487b5 100644
--- a/apps/presi/apps/web/postcss.config.js
+++ b/apps/presi/apps/web/postcss.config.js
@@ -1,6 +1,5 @@
export default {
plugins: {
- tailwindcss: {},
- autoprefixer: {},
+ '@tailwindcss/postcss': {},
},
};
diff --git a/apps/presi/apps/web/src/app.css b/apps/presi/apps/web/src/app.css
index 0fa2ac658..f311751a8 100644
--- a/apps/presi/apps/web/src/app.css
+++ b/apps/presi/apps/web/src/app.css
@@ -1,44 +1,22 @@
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
+@import "tailwindcss";
+@import "@manacore/shared-tailwind/themes.css";
-:root {
- --color-bg: 250 250 250;
- --color-bg-secondary: 255 255 255;
- --color-text: 15 23 42;
- --color-text-secondary: 100 116 139;
- --color-border: 226 232 240;
- --color-primary: 14 165 233;
-}
+/* Scan shared packages for Tailwind classes */
+@source "../../../../packages/shared-ui/src";
+@source "../../../../packages/shared-auth-ui/src";
+@source "../../../../packages/shared-branding/src";
-.dark {
- --color-bg: 15 23 42;
- --color-bg-secondary: 30 41 59;
- --color-text: 248 250 252;
- --color-text-secondary: 148 163 184;
- --color-border: 51 65 85;
- --color-primary: 56 189 248;
-}
-
-body {
- font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
- background-color: rgb(var(--color-bg));
- color: rgb(var(--color-text));
- min-height: 100vh;
-}
-
-/* Slide aspect ratio container */
+/* Presi-specific styles */
.slide-container {
aspect-ratio: 16 / 9;
max-width: 100%;
}
-/* Presentation mode fullscreen */
.presentation-fullscreen {
position: fixed;
inset: 0;
z-index: 50;
- background-color: rgb(var(--color-bg));
+ background-color: hsl(var(--color-background));
}
/* Custom scrollbar */
@@ -48,14 +26,14 @@ body {
}
::-webkit-scrollbar-track {
- background: rgb(var(--color-bg-secondary));
+ background: hsl(var(--color-surface));
}
::-webkit-scrollbar-thumb {
- background: rgb(var(--color-border));
+ background: hsl(var(--color-border));
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
- background: rgb(var(--color-text-secondary));
+ background: hsl(var(--color-muted-foreground));
}
diff --git a/apps/presi/apps/web/src/lib/stores/theme.ts b/apps/presi/apps/web/src/lib/stores/theme.ts
new file mode 100644
index 000000000..2dbc02e60
--- /dev/null
+++ b/apps/presi/apps/web/src/lib/stores/theme.ts
@@ -0,0 +1,10 @@
+import { createThemeStore } from '@manacore/shared-theme';
+
+export const theme = createThemeStore({
+ appId: 'presi',
+ defaultVariant: 'stone',
+ primaryColor: {
+ light: '220 9% 46%',
+ dark: '220 9% 56%',
+ },
+});
diff --git a/apps/presi/apps/web/src/routes/+layout.svelte b/apps/presi/apps/web/src/routes/+layout.svelte
index fd613a22d..1f506f883 100644
--- a/apps/presi/apps/web/src/routes/+layout.svelte
+++ b/apps/presi/apps/web/src/routes/+layout.svelte
@@ -3,8 +3,10 @@
import { page } from '$app/stores';
import { onMount } from 'svelte';
import { PillNavigation } from '@manacore/shared-ui';
- import type { PillNavItem } from '@manacore/shared-ui';
+ import type { PillNavItem, PillDropdownItem } from '@manacore/shared-ui';
import { auth } from '$lib/stores/auth.svelte';
+ import { theme } from '$lib/stores/theme';
+ import { THEME_DEFINITIONS } from '@manacore/shared-theme';
import {
isSidebarMode as sidebarModeStore,
isNavCollapsed as collapsedStore,
@@ -16,7 +18,21 @@
let loading = $state(true);
let isSidebarMode = $state(false);
let isCollapsed = $state(false);
- let isDark = $state(false);
+
+ // Theme variant dropdown items
+ let themeVariantItems = $derived(
+ theme.variants.map((variant) => ({
+ id: variant,
+ label: `${THEME_DEFINITIONS[variant].emoji} ${THEME_DEFINITIONS[variant].label}`,
+ onClick: () => theme.setVariant(variant),
+ active: theme.variant === variant,
+ }))
+ );
+
+ // Current theme variant label
+ let currentThemeVariantLabel = $derived(
+ `${THEME_DEFINITIONS[theme.variant].emoji} ${THEME_DEFINITIONS[theme.variant].label}`
+ );
// Navigation items for Presi
const navItems: PillNavItem[] = [
@@ -52,9 +68,7 @@
}
function handleToggleTheme() {
- isDark = !isDark;
- localStorage.setItem('theme', isDark ? 'dark' : 'light');
- document.documentElement.classList.toggle('dark', isDark);
+ theme.toggleMode();
}
function handleLogout() {
@@ -74,10 +88,7 @@
auth.init();
// Initialize theme
- isDark =
- localStorage.getItem('theme') === 'dark' ||
- (!localStorage.getItem('theme') && window.matchMedia('(prefers-color-scheme: dark)').matches);
- document.documentElement.classList.toggle('dark', isDark);
+ const cleanup = theme.initialize();
// Initialize sidebar mode from localStorage
const savedSidebar = localStorage.getItem('presi-nav-sidebar');
@@ -94,6 +105,8 @@
}
loading = false;
+
+ return cleanup;
});
@@ -102,12 +115,12 @@
{#if loading || auth.isLoading}
-
+
{:else if auth.isAuthenticated || publicRoutes.includes($page.url.pathname)}
@@ -121,16 +134,19 @@
appName="Presi"
homeRoute="/"
onToggleTheme={handleToggleTheme}
- {isDark}
+ isDark={theme.isDark}
{isSidebarMode}
onModeChange={handleModeChange}
{isCollapsed}
onCollapsedChange={handleCollapsedChange}
showThemeToggle={true}
+ showThemeVariants={true}
+ {themeVariantItems}
+ {currentThemeVariantLabel}
showLanguageSwitcher={false}
showLogout={true}
onLogout={handleLogout}
- primaryColor="#0ea5e9"
+ primaryColor="#64748b"
/>
@@ -146,7 +162,7 @@
{:else}
-
+
{@render children()}
{/if}
diff --git a/apps/presi/apps/web/src/routes/settings/+page.svelte b/apps/presi/apps/web/src/routes/settings/+page.svelte
index 707196535..024313f84 100644
--- a/apps/presi/apps/web/src/routes/settings/+page.svelte
+++ b/apps/presi/apps/web/src/routes/settings/+page.svelte
@@ -1,32 +1,8 @@
+
+
diff --git a/packages/shared-theme-ui/src/components/ThemeColorPreview.svelte b/packages/shared-theme-ui/src/components/ThemeColorPreview.svelte
new file mode 100644
index 000000000..bf9685bef
--- /dev/null
+++ b/packages/shared-theme-ui/src/components/ThemeColorPreview.svelte
@@ -0,0 +1,48 @@
+
+
+
+ {#each colors() as color, i}
+
+ {/each}
+
diff --git a/packages/shared-theme-ui/src/components/ThemeGrid.svelte b/packages/shared-theme-ui/src/components/ThemeGrid.svelte
new file mode 100644
index 000000000..17029ad3c
--- /dev/null
+++ b/packages/shared-theme-ui/src/components/ThemeGrid.svelte
@@ -0,0 +1,58 @@
+
+
+
+ {#each themeData() as theme (theme.variant)}
+ onSelect(theme.variant)}
+ onUnlock={onUnlock ? () => onUnlock(theme.variant) : undefined}
+ translations={cardTranslations}
+ />
+ {/each}
+
diff --git a/packages/shared-theme-ui/src/index.ts b/packages/shared-theme-ui/src/index.ts
index 80f09d003..965241238 100644
--- a/packages/shared-theme-ui/src/index.ts
+++ b/packages/shared-theme-ui/src/index.ts
@@ -1,4 +1,21 @@
-// Theme UI Components
+// Theme UI Components (existing)
export { default as ThemeToggle } from './ThemeToggle.svelte';
export { default as ThemeSelector } from './ThemeSelector.svelte';
export { default as ThemeModeSelector } from './ThemeModeSelector.svelte';
+
+// New Components
+export { default as ThemeColorPreview } from './components/ThemeColorPreview.svelte';
+export { default as ThemeCard } from './components/ThemeCard.svelte';
+export { default as ThemeGrid } from './components/ThemeGrid.svelte';
+
+// Pages
+export { default as ThemePage } from './pages/ThemePage.svelte';
+
+// Types
+export type {
+ ThemeStatus,
+ ThemeCardData,
+ ThemePageProps,
+ ThemePageTranslations,
+} from './types';
+export { defaultTranslations } from './types';
diff --git a/packages/shared-theme-ui/src/pages/ThemePage.svelte b/packages/shared-theme-ui/src/pages/ThemePage.svelte
new file mode 100644
index 000000000..caca77d11
--- /dev/null
+++ b/packages/shared-theme-ui/src/pages/ThemePage.svelte
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+
+ {#if showModeSelector && onModeChange}
+
+
+ {t.modeLabel}
+
+
+ {#each modes as { mode, icon: Icon, label }}
+ onModeChange(mode)}
+ class="flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors
+ {currentMode === mode
+ ? 'bg-surface text-foreground shadow-sm'
+ : 'text-muted-foreground hover:text-foreground'}"
+ >
+
+ {label}
+
+ {/each}
+
+
+ {/if}
+
+
+
+
+ {t.currentTheme}
+
+
+
+
+
diff --git a/packages/shared-theme-ui/src/types.ts b/packages/shared-theme-ui/src/types.ts
new file mode 100644
index 000000000..145df9a32
--- /dev/null
+++ b/packages/shared-theme-ui/src/types.ts
@@ -0,0 +1,87 @@
+import type { ThemeVariant, ThemeMode } from '@manacore/shared-theme';
+
+/**
+ * Theme availability status for store integration
+ */
+export type ThemeStatus = 'available' | 'locked' | 'coming_soon' | 'premium';
+
+/**
+ * Theme card data for displaying in grid/list
+ */
+export interface ThemeCardData {
+ variant: ThemeVariant;
+ status: ThemeStatus;
+ isPremium?: boolean;
+ price?: number;
+ releaseDate?: string;
+}
+
+/**
+ * Props for ThemePage component
+ */
+export interface ThemePageProps {
+ // Theme Store Integration
+ currentVariant: ThemeVariant;
+ onSelectTheme: (variant: ThemeVariant) => void;
+
+ // Theme Data (for store extension)
+ themes?: ThemeCardData[];
+
+ // UI Customization
+ title?: string;
+ subtitle?: string;
+ showModeSelector?: boolean;
+ currentMode?: ThemeMode;
+ onModeChange?: (mode: ThemeMode) => void;
+
+ // Back navigation
+ showBackButton?: boolean;
+ onBack?: () => void;
+
+ // Store Features (preparation)
+ showLockedThemes?: boolean;
+ onUnlockTheme?: (variant: ThemeVariant) => void;
+
+ // Translations
+ translations?: Partial;
+}
+
+/**
+ * Translations for ThemePage
+ */
+export interface ThemePageTranslations {
+ title: string;
+ subtitle: string;
+ modeLabel: string;
+ lightMode: string;
+ darkMode: string;
+ systemMode: string;
+ currentTheme: string;
+ selectTheme: string;
+ locked: string;
+ comingSoon: string;
+ premium: string;
+ unlock: string;
+ lightPreview: string;
+ darkPreview: string;
+}
+
+/**
+ * Default German translations
+ */
+export const defaultTranslations: ThemePageTranslations = {
+ title: 'Theme-Einstellungen',
+ subtitle: 'Wähle dein bevorzugtes Farbschema',
+ modeLabel: 'Modus',
+ lightMode: 'Hell',
+ darkMode: 'Dunkel',
+ systemMode: 'System',
+ currentTheme: 'Aktuelles Theme',
+ selectTheme: 'Auswählen',
+ locked: 'Gesperrt',
+ comingSoon: 'Bald verfügbar',
+ premium: 'Premium',
+ unlock: 'Freischalten',
+ lightPreview: 'Hell',
+ darkPreview: 'Dunkel',
+};
diff --git a/packages/shared-theme/src/constants.ts b/packages/shared-theme/src/constants.ts
index bd5638037..1067f7bf2 100644
--- a/packages/shared-theme/src/constants.ts
+++ b/packages/shared-theme/src/constants.ts
@@ -31,7 +31,7 @@ const lumeLight: ThemeColors = {
primaryForeground: '0 0% 0%', // Black text on gold
secondary: '47 100% 41%', // #D4B200 - Darker gold
secondaryForeground: '0 0% 0%',
- background: '0 0% 87%', // #dddddd - Light gray
+ background: '45 30% 96%', // Warm cream with gold tint
foreground: '0 0% 17%', // #2c2c2c - Dark text
surface: '0 0% 100%', // #ffffff - White
surfaceHover: '0 0% 96%', // #f5f5f5
@@ -52,15 +52,15 @@ const lumeDark: ThemeColors = {
primaryForeground: '0 0% 0%', // Black text on gold
secondary: '47 70% 29%', // #7C6B16 - Muted gold
secondaryForeground: '0 0% 100%',
- background: '0 0% 6%', // #101010 - Very dark
+ background: '40 10% 7%', // Very dark with warm tint
foreground: '0 0% 100%', // #ffffff - White text
- surface: '0 0% 12%', // #1E1E1E - Dark surface
- surfaceHover: '0 0% 16%', // #292929
- surfaceElevated: '0 0% 14%', // #242424
- muted: '0 0% 20%', // #333333
- mutedForeground: '0 0% 60%', // #999999
- border: '0 0% 26%', // #424242
- borderStrong: '0 0% 35%', // #595959
+ surface: '40 8% 12%', // Dark surface with warm tint
+ surfaceHover: '40 8% 16%',
+ surfaceElevated: '40 8% 14%',
+ muted: '40 6% 20%',
+ mutedForeground: '40 5% 60%',
+ border: '40 6% 26%',
+ borderStrong: '40 5% 35%',
error: '6 78% 57%', // #e74c3c
success: '145 63% 49%', // #2ecc71
warning: '48 100% 50%', // #f1c40f
@@ -94,15 +94,15 @@ const natureDark: ThemeColors = {
primaryForeground: '0 0% 100%',
secondary: '122 30% 35%', // Muted green
secondaryForeground: '0 0% 100%',
- background: '0 0% 7%', // #121212
+ background: '120 12% 6%', // Very dark with green tint
foreground: '0 0% 100%', // White
- surface: '120 10% 12%', // Slight green tint
- surfaceHover: '120 10% 16%',
- surfaceElevated: '120 10% 14%',
- muted: '120 10% 20%',
+ surface: '120 10% 11%', // Slight green tint
+ surfaceHover: '120 10% 15%',
+ surfaceElevated: '120 10% 13%',
+ muted: '120 10% 19%',
mutedForeground: '120 10% 60%',
- border: '120 10% 25%',
- borderStrong: '120 10% 35%',
+ border: '120 10% 24%',
+ borderStrong: '120 10% 34%',
error: '0 65% 57%',
success: '122 50% 55%',
warning: '48 100% 50%',
@@ -136,11 +136,11 @@ const stoneDark: ThemeColors = {
primaryForeground: '0 0% 0%',
secondary: '200 12% 35%',
secondaryForeground: '0 0% 100%',
- background: '0 0% 7%', // #121212
+ background: '210 15% 8%', // Very dark with blue-gray tint
foreground: '0 0% 100%',
- surface: '200 10% 12%',
- surfaceHover: '200 10% 16%',
- surfaceElevated: '200 10% 14%',
+ surface: '200 12% 12%',
+ surfaceHover: '200 12% 16%',
+ surfaceElevated: '200 12% 14%',
muted: '200 10% 20%',
mutedForeground: '200 10% 60%',
border: '200 10% 25%',
@@ -178,15 +178,15 @@ const oceanDark: ThemeColors = {
primaryForeground: '0 0% 0%',
secondary: '199 60% 35%',
secondaryForeground: '0 0% 100%',
- background: '0 0% 7%', // #121212
+ background: '200 25% 7%', // Very dark with blue tint
foreground: '0 0% 100%',
- surface: '199 30% 12%', // Slight blue tint
- surfaceHover: '199 30% 16%',
- surfaceElevated: '199 30% 14%',
- muted: '199 20% 20%',
- mutedForeground: '199 20% 60%',
- border: '199 20% 25%',
- borderStrong: '199 20% 35%',
+ surface: '199 20% 11%', // Slight blue tint
+ surfaceHover: '199 20% 15%',
+ surfaceElevated: '199 20% 13%',
+ muted: '199 15% 19%',
+ mutedForeground: '199 15% 60%',
+ border: '199 15% 24%',
+ borderStrong: '199 15% 34%',
error: '4 90% 58%',
success: '145 63% 49%',
warning: '48 100% 50%',
diff --git a/packages/shared-theme/src/store.svelte.ts b/packages/shared-theme/src/store.svelte.ts
index 895a9a112..f68b21e80 100644
--- a/packages/shared-theme/src/store.svelte.ts
+++ b/packages/shared-theme/src/store.svelte.ts
@@ -219,4 +219,12 @@ export const APP_THEME_CONFIGS = {
dark: '280 60% 60%' as HSLValue,
},
},
+ picture: {
+ appId: 'picture',
+ defaultVariant: 'ocean' as ThemeVariant,
+ primaryColor: {
+ light: '217 91% 60%' as HSLValue, // Blue #3b82f6
+ dark: '217 91% 60%' as HSLValue,
+ },
+ },
} as const;
diff --git a/packages/shared-ui/src/navigation/PillDropdown.svelte b/packages/shared-ui/src/navigation/PillDropdown.svelte
index d09ebe058..df16255b7 100644
--- a/packages/shared-ui/src/navigation/PillDropdown.svelte
+++ b/packages/shared-ui/src/navigation/PillDropdown.svelte
@@ -61,6 +61,8 @@
chevronDown: 'M19 9l-7 7-7-7',
globe:
'M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9',
+ palette:
+ 'M7 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zm0 0h12a2 2 0 002-2v-4a2 2 0 00-2-2h-2.343M11 7.343l1.657-1.657a2 2 0 012.828 0l2.829 2.829a2 2 0 010 2.828l-8.486 8.485M7 17h.01',
};
function getIcon(iconName: string) {
diff --git a/packages/shared-ui/src/navigation/PillNavigation.svelte b/packages/shared-ui/src/navigation/PillNavigation.svelte
index 9ba26b61c..9c280f013 100644
--- a/packages/shared-ui/src/navigation/PillNavigation.svelte
+++ b/packages/shared-ui/src/navigation/PillNavigation.svelte
@@ -43,6 +43,12 @@
elements?: PillNavElement[];
/** Show logout button */
showLogout?: boolean;
+ /** Theme variant dropdown items */
+ themeVariantItems?: PillDropdownItem[];
+ /** Current theme variant label */
+ currentThemeVariantLabel?: string;
+ /** Show theme variant selector */
+ showThemeVariants?: boolean;
}
let {
@@ -65,6 +71,9 @@
primaryColor,
elements = [],
showLogout = true,
+ themeVariantItems = [],
+ currentThemeVariantLabel = 'Theme',
+ showThemeVariants = false,
}: Props = $props();
// Type guards for elements
@@ -161,6 +170,8 @@
grid: 'M4 5a1 1 0 011-1h4a1 1 0 011 1v4a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM14 5a1 1 0 011-1h4a1 1 0 011 1v4a1 1 0 01-1 1h-4a1 1 0 01-1-1V5zM4 15a1 1 0 011-1h4a1 1 0 011 1v4a1 1 0 01-1 1H5a1 1 0 01-1-1v-4zM14 15a1 1 0 011-1h4a1 1 0 011 1v4a1 1 0 01-1 1h-4a1 1 0 01-1-1v-4z',
gridSmall:
'M4 5a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM10 5a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 01-1 1h-2a1 1 0 01-1-1V5zM16 5a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 01-1 1h-2a1 1 0 01-1-1V5zM4 11a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1v-2zM10 11a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 01-1 1h-2a1 1 0 01-1-1v-2zM16 11a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 01-1 1h-2a1 1 0 01-1-1v-2z',
+ palette:
+ 'M7 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zm0 0h12a2 2 0 002-2v-4a2 2 0 00-2-2h-2.343M11 7.343l1.657-1.657a2 2 0 012.828 0l2.829 2.829a2 2 0 010 2.828l-8.486 8.485M7 17h.01',
};
function getIconPath(name: string): string {
@@ -297,6 +308,16 @@
/>
{/if}
+
+ {#if showThemeVariants && themeVariantItems.length > 0}
+
+ {/if}
+
{#if showThemeToggle && onToggleTheme}
=0.10.0'}
+ engines: {'0': node >=0.10.0}
'@expo/cli@0.22.26':
resolution: {integrity: sha512-I689wc8Fn/AX7aUGiwrh3HnssiORMJtR2fpksX+JIe8Cj/EDleblYMSwRPd0025wrwOV9UN1KM/RuEt/QjCS3Q==}
@@ -17096,6 +17111,16 @@ snapshots:
transitivePeerDependencies:
- ts-node
+ '@astrojs/tailwind@6.0.2(astro@5.16.0(@netlify/blobs@10.4.1)(@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(@netlify/blobs@10.4.1)(@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(@netlify/blobs@10.4.1)(@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(@netlify/blobs@10.4.1)(@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)
@@ -18997,7 +19022,7 @@ snapshots:
wrap-ansi: 7.0.0
ws: 8.18.3
optionalDependencies:
- expo-router: 6.0.15(jiucxy5ca3jdtbnulaxuc46jdq)
+ expo-router: 6.0.15(5e7ih2rh6mb55wruwvjljgzihq)
react-native: 0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0)
transitivePeerDependencies:
- '@modelcontextprotocol/sdk'
@@ -19074,7 +19099,7 @@ snapshots:
wrap-ansi: 7.0.0
ws: 8.18.3
optionalDependencies:
- expo-router: 6.0.15(dux2nvtiztnejw7mxzfaajqvh4)
+ expo-router: 6.0.15(nttrd3tw67nnyhowcwgdzipb5e)
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0)
transitivePeerDependencies:
- '@modelcontextprotocol/sdk'
@@ -20382,6 +20407,43 @@ snapshots:
- supports-color
- ts-node
+ '@jest/core@30.2.0(esbuild-register@3.6.0(esbuild@0.19.12))(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.9.3))':
+ dependencies:
+ '@jest/console': 30.2.0
+ '@jest/pattern': 30.0.1
+ '@jest/reporters': 30.2.0
+ '@jest/test-result': 30.2.0
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/node': 22.19.1
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ ci-info: 4.3.1
+ exit-x: 0.2.2
+ graceful-fs: 4.2.11
+ jest-changed-files: 30.2.0
+ jest-config: 30.2.0(@types/node@22.19.1)(esbuild-register@3.6.0(esbuild@0.19.12))(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.9.3))
+ jest-haste-map: 30.2.0
+ jest-message-util: 30.2.0
+ jest-regex-util: 30.0.1
+ jest-resolve: 30.2.0
+ jest-resolve-dependencies: 30.2.0
+ jest-runner: 30.2.0
+ jest-runtime: 30.2.0
+ jest-snapshot: 30.2.0
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
+ jest-watcher: 30.2.0
+ micromatch: 4.0.8
+ pretty-format: 30.2.0
+ slash: 3.0.0
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - esbuild-register
+ - supports-color
+ - ts-node
+ optional: true
+
'@jest/core@30.2.0(esbuild-register@3.6.0(esbuild@0.27.0))':
dependencies:
'@jest/console': 30.2.0
@@ -23305,17 +23367,17 @@ snapshots:
react-test-renderer: 19.1.0(react@19.1.0)
redent: 3.0.0
- '@testing-library/react-native@13.3.3(jest@30.2.0(@types/node@20.19.25)(esbuild-register@3.6.0(esbuild@0.27.0)))(react-native@0.81.4(@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)':
+ '@testing-library/react-native@13.3.3(jest@30.2.0(@types/node@22.19.1)(esbuild-register@3.6.0(esbuild@0.19.12))(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.9.3)))(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)':
dependencies:
jest-matcher-utils: 30.2.0
picocolors: 1.1.1
pretty-format: 30.2.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-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)
redent: 3.0.0
optionalDependencies:
- jest: 30.2.0(@types/node@20.19.25)(esbuild-register@3.6.0(esbuild@0.27.0))
+ jest: 30.2.0(@types/node@22.19.1)(esbuild-register@3.6.0(esbuild@0.19.12))(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.9.3))
optional: true
'@testing-library/react-native@13.3.3(jest@30.2.0(@types/node@24.10.1)(esbuild-register@3.6.0(esbuild@0.27.0)))(react-native@0.81.4(@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)':
@@ -24277,11 +24339,11 @@ snapshots:
- vite
optional: true
- '@vitest/browser@3.2.4(playwright@1.57.0)(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))(vitest@3.2.4)':
+ '@vitest/browser@3.2.4(playwright@1.57.0)(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))(vitest@3.2.4)':
dependencies:
'@testing-library/dom': 10.4.1
'@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1)
- '@vitest/mocker': 3.2.4(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))
+ '@vitest/mocker': 3.2.4(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))
'@vitest/utils': 3.2.4
magic-string: 0.30.21
sirv: 3.0.2
@@ -24321,6 +24383,15 @@ snapshots:
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)
+ '@vitest/mocker@3.2.4(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))':
+ dependencies:
+ '@vitest/spy': 3.2.4
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ optionalDependencies:
+ 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)
+ optional: true
+
'@vitest/pretty-format@3.2.4':
dependencies:
tinyrainbow: 2.0.0
@@ -24350,7 +24421,7 @@ snapshots:
sirv: 3.0.2
tinyglobby: 0.2.15
tinyrainbow: 2.0.0
- vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1)
+ vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.1)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1)
'@vitest/utils@3.2.4':
dependencies:
@@ -24944,6 +25015,108 @@ snapshots:
- uploadthing
- yaml
+ astro@5.16.0(@netlify/blobs@10.4.1)(@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.1.0
+ 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(@netlify/blobs@10.4.1)(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(@netlify/blobs@10.4.1)(@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
@@ -26903,9 +27076,9 @@ snapshots:
'@typescript-eslint/eslint-plugin': 8.48.0(@typescript-eslint/parser@8.48.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': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
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-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.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))
eslint-plugin-expo: 1.0.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.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))
eslint-plugin-react-hooks: 5.2.0(eslint@9.39.1(jiti@2.6.1))
globals: 16.5.0
@@ -26920,9 +27093,9 @@ snapshots:
'@typescript-eslint/eslint-plugin': 8.48.0(@typescript-eslint/parser@8.48.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.48.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)(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.48.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-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.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.1(jiti@2.6.1))
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.48.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))
eslint-plugin-react-hooks: 5.2.0(eslint@9.39.1(jiti@2.6.1))
globals: 16.5.0
@@ -26992,7 +27165,7 @@ 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)):
+ eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.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
@@ -27003,7 +27176,22 @@ snapshots:
tinyglobby: 0.2.15
unrs-resolver: 1.11.1
optionalDependencies:
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.48.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.48.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
+ 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.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1))
transitivePeerDependencies:
- supports-color
@@ -27027,25 +27215,25 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.1(@typescript-eslint/parser@8.48.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)):
+ eslint-module-utils@2.12.1(@typescript-eslint/parser@8.48.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.48.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)):
dependencies:
debug: 3.2.7
optionalDependencies:
'@typescript-eslint/parser': 8.48.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)(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.48.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))
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.1(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)):
+ eslint-module-utils@2.12.1(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.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.48.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)))(eslint@9.39.1(jiti@2.6.1)):
dependencies:
debug: 3.2.7
optionalDependencies:
'@typescript-eslint/parser': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.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)(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.48.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))
transitivePeerDependencies:
- supports-color
@@ -27145,7 +27333,7 @@ snapshots:
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.1(jiti@2.6.1)):
+ eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.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)):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.9
@@ -27156,7 +27344,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.48.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))
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.48.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.48.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))
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -27174,7 +27362,7 @@ snapshots:
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1)):
+ eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.9
@@ -27185,7 +27373,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.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1))
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.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.48.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)))(eslint@9.39.1(jiti@2.6.1))
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -28326,21 +28514,21 @@ snapshots:
- '@types/react-dom'
- supports-color
- expo-router@6.0.15(jiucxy5ca3jdtbnulaxuc46jdq):
+ expo-router@6.0.15(nttrd3tw67nnyhowcwgdzipb5e):
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)
+ '@expo/metro-runtime': 6.1.2(expo@54.0.25)(react-dom@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)
'@expo/schema-utils': 0.1.7
'@radix-ui/react-slot': 1.2.0(@types/react@19.2.7)(react@19.1.0)
'@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@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)
- '@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-navigation/native-stack': 7.8.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)
+ '@react-navigation/bottom-tabs': 7.8.6(@react-navigation/native@7.1.21(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-safe-area-context@5.6.2(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-screens@4.16.0(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)
+ '@react-navigation/native': 7.1.21(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
+ '@react-navigation/native-stack': 7.8.0(@react-navigation/native@7.1.21(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-safe-area-context@5.6.2(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-screens@4.16.0(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)
client-only: 0.0.1
debug: 4.4.3
escape-string-regexp: 4.0.0
- expo: 54.0.25(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native-webview@13.12.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)
- expo-constants: 18.0.10(expo@54.0.25)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))
- expo-linking: 8.0.9(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)
+ expo: 54.0.25(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native-webview@13.12.2(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)
+ expo-constants: 18.0.10(expo@54.0.25)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))
+ expo-linking: 8.0.9(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)
expo-server: 1.0.4
fast-deep-equal: 3.1.3
invariant: 2.2.4
@@ -28348,10 +28536,10 @@ snapshots:
query-string: 7.1.3
react: 19.1.0
react-fast-compare: 3.2.2
- react-native: 0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.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)
- 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.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0)
+ react-native-is-edge-to-edge: 1.2.1(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-safe-area-context: 5.6.2(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-screens: 4.16.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
semver: 7.6.3
server-only: 0.0.1
sf-symbols-typescript: 2.1.0
@@ -28359,13 +28547,13 @@ snapshots:
use-latest-callback: 0.2.6(react@19.1.0)
vaul: 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
optionalDependencies:
- '@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.6.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)
- '@testing-library/react-native': 13.3.3(jest@30.2.0(@types/node@20.19.25)(esbuild-register@3.6.0(esbuild@0.27.0)))(react-native@0.81.4(@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)
+ '@react-navigation/drawer': 7.7.4(@react-navigation/native@7.1.21(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-gesture-handler@2.28.0(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-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))(react-native-safe-area-context@5.6.2(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-screens@4.16.0(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)
+ '@testing-library/react-native': 13.3.3(jest@30.2.0(@types/node@22.19.1)(esbuild-register@3.6.0(esbuild@0.19.12))(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.9.3)))(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)
react-dom: 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.6.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-gesture-handler: 2.28.0(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-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)
react-native-web: 0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- react-server-dom-webpack: 19.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(webpack@5.100.2(esbuild@0.27.0))
+ react-server-dom-webpack: 19.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(webpack@5.97.1(esbuild@0.19.12))
transitivePeerDependencies:
- '@react-native-masked-view/masked-view'
- '@types/react'
@@ -30409,15 +30597,15 @@ snapshots:
- supports-color
- ts-node
- jest-cli@30.2.0(@types/node@20.19.25)(esbuild-register@3.6.0(esbuild@0.27.0)):
+ jest-cli@30.2.0(@types/node@22.19.1)(esbuild-register@3.6.0(esbuild@0.19.12))(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))
+ '@jest/core': 30.2.0(esbuild-register@3.6.0(esbuild@0.19.12))(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@20.19.25)(esbuild-register@3.6.0(esbuild@0.27.0))
+ jest-config: 30.2.0(@types/node@22.19.1)(esbuild-register@3.6.0(esbuild@0.19.12))(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
@@ -30580,7 +30768,7 @@ snapshots:
- babel-plugin-macros
- supports-color
- jest-config@30.2.0(@types/node@20.19.25)(esbuild-register@3.6.0(esbuild@0.27.0)):
+ jest-config@30.2.0(@types/node@22.19.1)(esbuild-register@3.6.0(esbuild@0.19.12))(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.9.3)):
dependencies:
'@babel/core': 7.28.5
'@jest/get-type': 30.1.0
@@ -30607,8 +30795,9 @@ snapshots:
slash: 3.0.0
strip-json-comments: 3.1.1
optionalDependencies:
- '@types/node': 20.19.25
- esbuild-register: 3.6.0(esbuild@0.27.0)
+ '@types/node': 22.19.1
+ esbuild-register: 3.6.0(esbuild@0.19.12)
+ ts-node: 10.9.2(@types/node@22.19.1)(typescript@5.9.3)
transitivePeerDependencies:
- babel-plugin-macros
- supports-color
@@ -31269,12 +31458,12 @@ snapshots:
- supports-color
- ts-node
- jest@30.2.0(@types/node@20.19.25)(esbuild-register@3.6.0(esbuild@0.27.0)):
+ jest@30.2.0(@types/node@22.19.1)(esbuild-register@3.6.0(esbuild@0.19.12))(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))
+ '@jest/core': 30.2.0(esbuild-register@3.6.0(esbuild@0.19.12))(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@20.19.25)(esbuild-register@3.6.0(esbuild@0.27.0))
+ jest-cli: 30.2.0(@types/node@22.19.1)(esbuild-register@3.6.0(esbuild@0.19.12))(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.9.3))
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
@@ -34897,6 +35086,16 @@ snapshots:
webpack: 5.100.2(esbuild@0.27.0)
webpack-sources: 3.3.3
+ react-server-dom-webpack@19.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(webpack@5.97.1(esbuild@0.19.12)):
+ dependencies:
+ acorn-loose: 8.5.2
+ neo-async: 2.6.2
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ webpack: 5.97.1(esbuild@0.19.12)
+ webpack-sources: 3.3.3
+ optional: true
+
react-style-singleton@2.2.3(@types/react@18.3.27)(react@18.3.1):
dependencies:
get-nonce: 1.0.1
@@ -37001,6 +37200,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
@@ -37060,6 +37276,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)
@@ -37145,7 +37365,7 @@ snapshots:
optionalDependencies:
'@types/debug': 4.1.12
'@types/node': 24.10.1
- '@vitest/browser': 3.2.4(playwright@1.57.0)(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))(vitest@3.2.4)
+ '@vitest/browser': 3.2.4(playwright@1.57.0)(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))(vitest@3.2.4)
'@vitest/ui': 3.2.4(vitest@3.2.4)
jsdom: 27.2.0
transitivePeerDependencies: