diff --git a/apps/manacore/apps/web/src/lib/components/onboarding/steps/CompleteStep.svelte b/apps/manacore/apps/web/src/lib/components/onboarding/steps/CompleteStep.svelte index 70f1e3e45..7b5d64002 100644 --- a/apps/manacore/apps/web/src/lib/components/onboarding/steps/CompleteStep.svelte +++ b/apps/manacore/apps/web/src/lib/components/onboarding/steps/CompleteStep.svelte @@ -33,7 +33,7 @@
diff --git a/apps/manacore/apps/web/src/lib/components/workbench/AppPage.svelte b/apps/manacore/apps/web/src/lib/components/workbench/AppPage.svelte index b209c0837..7d46ba2db 100644 --- a/apps/manacore/apps/web/src/lib/components/workbench/AppPage.svelte +++ b/apps/manacore/apps/web/src/lib/components/workbench/AppPage.svelte @@ -1,8 +1,10 @@ - - {#if loadError} -
-

App konnte nicht geladen werden

-
- {:else if AppComponent} - - {:else} -
- +
+ + + {#if loadError} +
+

App konnte nicht geladen werden

+
+ {:else if ListComponent} +
+ +
+ {:else} +
+ +
+ {/if} +
+ + + {#if overlay?.component} + {@const OverlayComponent = overlay.component} +
+
+ + {#if hasPrev} + + {/if} + + +
+ + {appName} + {#if siblingIds.length > 1} + + {currentSiblingIndex() + 1}/{siblingIds.length} + + {/if} + +
+ + +
+ {#key overlay.params[siblingKey] ?? ''} + + {/key} +
+ + + {#if hasNext} + + {/if} +
{/if} - +
diff --git a/apps/manacore/apps/web/src/lib/components/workbench/app-registry.ts b/apps/manacore/apps/web/src/lib/components/workbench/app-registry.ts index 64bb418af..97e328fe7 100644 --- a/apps/manacore/apps/web/src/lib/components/workbench/app-registry.ts +++ b/apps/manacore/apps/web/src/lib/components/workbench/app-registry.ts @@ -1,16 +1,24 @@ /** - * App Component Registry — Maps app IDs to lazy-loaded AppView components. + * App Component Registry — Maps app IDs to lazy-loaded views. * - * Each entry provides the dynamic import for embedding in the workbench carousel. + * Each entry provides a default `load` (list view) and optional named `views` + * for in-panel navigation (detail, create, edit, etc.). */ import type { Component } from 'svelte'; +export interface ViewEntry { + load: () => Promise<{ default: Component }>; +} + export interface AppEntry { id: string; name: string; color: string; + /** Default view loader (list/main view). */ load: () => Promise<{ default: Component }>; + /** Named views for in-panel navigation. Fallback: { list: load }. */ + views?: Record; } export const APP_REGISTRY: AppEntry[] = [ @@ -19,18 +27,30 @@ export const APP_REGISTRY: AppEntry[] = [ name: 'Todo', color: '#8B5CF6', load: () => import('$lib/modules/todo/AppView.svelte'), + views: { + list: { load: () => import('$lib/modules/todo/AppView.svelte') }, + detail: { load: () => import('$lib/modules/todo/views/DetailView.svelte') }, + }, }, { id: 'calendar', name: 'Kalender', color: '#3B82F6', load: () => import('$lib/modules/calendar/AppView.svelte'), + views: { + list: { load: () => import('$lib/modules/calendar/AppView.svelte') }, + detail: { load: () => import('$lib/modules/calendar/views/DetailView.svelte') }, + }, }, { id: 'contacts', name: 'Kontakte', color: '#22C55E', load: () => import('$lib/modules/contacts/AppView.svelte'), + views: { + list: { load: () => import('$lib/modules/contacts/AppView.svelte') }, + detail: { load: () => import('$lib/modules/contacts/views/DetailView.svelte') }, + }, }, { id: 'chat', diff --git a/apps/manacore/apps/web/src/lib/components/workbench/nav-stack.ts b/apps/manacore/apps/web/src/lib/components/workbench/nav-stack.ts new file mode 100644 index 000000000..70548ad0c --- /dev/null +++ b/apps/manacore/apps/web/src/lib/components/workbench/nav-stack.ts @@ -0,0 +1,20 @@ +/** + * Panel Navigation Stack — Types for in-panel view navigation. + * + * Each workbench panel manages its own navigation stack. + * Views are pushed/popped within the panel (list → detail → edit). + */ + +import type { Component } from 'svelte'; + +export interface NavFrame { + viewName: string; + params: Record; + component: Component | null; +} + +export interface ViewProps { + navigate: (viewName: string, params?: Record) => void; + goBack: () => void; + params: Record; +} diff --git a/apps/manacore/apps/web/src/lib/config/apps.ts b/apps/manacore/apps/web/src/lib/config/apps.ts index e3bc50eec..0c54e1f79 100644 --- a/apps/manacore/apps/web/src/lib/config/apps.ts +++ b/apps/manacore/apps/web/src/lib/config/apps.ts @@ -64,7 +64,7 @@ export const appConfigs: Record = { color: '#10B981', }, ], - dashboardRoute: '/dashboard', + dashboardRoute: '/', }, // ============================================ @@ -104,7 +104,7 @@ export const appConfigs: Record = { color: '#10B981', }, ], - dashboardRoute: '/dashboard', + dashboardRoute: '/', website: 'https://chat.mana.how', }, @@ -142,7 +142,7 @@ export const appConfigs: Record = { color: '#F59E0B', }, ], - dashboardRoute: '/dashboard', + dashboardRoute: '/', website: 'https://picture.mana.how', }, @@ -180,7 +180,7 @@ export const appConfigs: Record = { color: '#10B981', }, ], - dashboardRoute: '/dashboard', + dashboardRoute: '/', website: 'https://presi.mana.how', }, @@ -219,7 +219,7 @@ export const appConfigs: Record = { color: '#0EA5E9', }, ], - dashboardRoute: '/dashboard', + dashboardRoute: '/', website: 'https://mail.mana.how', }, @@ -260,7 +260,7 @@ export const appConfigs: Record = { color: '#F59E0B', }, ], - dashboardRoute: '/dashboard', + dashboardRoute: '/', website: 'https://cards.mana.how', }, @@ -298,7 +298,7 @@ export const appConfigs: Record = { color: '#EC4899', }, ], - dashboardRoute: '/dashboard', + dashboardRoute: '/', website: 'https://todo.mana.how', }, @@ -337,7 +337,7 @@ export const appConfigs: Record = { color: '#8B5CF6', }, ], - dashboardRoute: '/dashboard', + dashboardRoute: '/', website: 'https://calendar.mana.how', }, @@ -375,7 +375,7 @@ export const appConfigs: Record = { color: '#EC4899', }, ], - dashboardRoute: '/dashboard', + dashboardRoute: '/', website: 'https://contacts.mana.how', }, @@ -414,7 +414,7 @@ export const appConfigs: Record = { color: '#8B5CF6', }, ], - dashboardRoute: '/dashboard', + dashboardRoute: '/', website: 'https://finance.mana.how', }, @@ -457,7 +457,7 @@ export const appConfigs: Record = { color: '#10B981', }, ], - dashboardRoute: '/dashboard', + dashboardRoute: '/', website: 'https://zitare.mana.how', }, @@ -495,7 +495,7 @@ export const appConfigs: Record = { color: '#F59E0B', }, ], - dashboardRoute: '/dashboard', + dashboardRoute: '/', website: 'https://storage.mana.how', }, @@ -534,7 +534,7 @@ export const appConfigs: Record = { color: '#6366F1', }, ], - dashboardRoute: '/dashboard', + dashboardRoute: '/', website: 'https://moodlit.mana.how', }, }; @@ -589,7 +589,7 @@ export const defaultManaConfig: AppConfig = { color: '#F59E0B', }, ], - dashboardRoute: '/dashboard', + dashboardRoute: '/', }; /** diff --git a/apps/manacore/apps/web/src/lib/modules/calendar/AppView.svelte b/apps/manacore/apps/web/src/lib/modules/calendar/AppView.svelte index 5a4da0927..0fb5e9d38 100644 --- a/apps/manacore/apps/web/src/lib/modules/calendar/AppView.svelte +++ b/apps/manacore/apps/web/src/lib/modules/calendar/AppView.svelte @@ -1,6 +1,7 @@ + +
+ {#if !event} +

Termin nicht gefunden

+ {:else} + + (focused = true)} + onblur={saveField} + placeholder="Titel..." + /> + + +
+
+ +
+ (focused = true)} + onblur={saveField} + /> + {#if !editAllDay} +
+ (focused = true)} + onblur={saveField} + /> + + (focused = true)} + onblur={saveField} + /> +
+ {/if} + +
+
+ +
+ + (focused = true)} + onblur={saveField} + placeholder="Ort hinzufügen..." + /> +
+ + {#if event.recurrenceRule} +
+ 🔁 + {event.recurrenceRule} +
+ {/if} +
+ + +
+ + +
+ + +
+ {#if event.createdAt} + Erstellt: {new Date(event.createdAt).toLocaleDateString('de')} + {/if} + {#if event.updatedAt} + Bearbeitet: {new Date(event.updatedAt).toLocaleDateString('de')} + {/if} +
+ + +
+ {#if confirmDelete} +

Termin wirklich löschen?

+
+ + +
+ {:else} + + {/if} +
+ {/if} +
+ + diff --git a/apps/manacore/apps/web/src/lib/modules/contacts/AppView.svelte b/apps/manacore/apps/web/src/lib/modules/contacts/AppView.svelte index 29bfb2448..482b4c246 100644 --- a/apps/manacore/apps/web/src/lib/modules/contacts/AppView.svelte +++ b/apps/manacore/apps/web/src/lib/modules/contacts/AppView.svelte @@ -1,6 +1,7 @@ + +
+ {#if !contact} +

Kontakt nicht gefunden

+ {:else} + +
+
{initials(contact)}
+
+ (focused = true)} + onblur={saveField} + placeholder="Vorname" + /> + (focused = true)} + onblur={saveField} + placeholder="Nachname" + /> +
+ +
+ + +
+
+ + (focused = true)} + onblur={saveField} + placeholder="E-Mail" + type="email" + /> +
+ +
+ + (focused = true)} + onblur={saveField} + placeholder="Telefon" + type="tel" + /> +
+ +
+ + (focused = true)} + onblur={saveField} + placeholder="Mobil" + type="tel" + /> +
+ +
+ +
+ (focused = true)} + onblur={saveField} + placeholder="Firma" + /> + (focused = true)} + onblur={saveField} + placeholder="Position" + /> +
+
+ +
+ +
+ (focused = true)} + onblur={saveField} + placeholder="Straße" + /> +
+ (focused = true)} + onblur={saveField} + placeholder="PLZ" + /> + (focused = true)} + onblur={saveField} + placeholder="Stadt" + /> +
+ (focused = true)} + onblur={saveField} + placeholder="Land" + /> +
+
+ +
+ + (focused = true)} + onblur={saveField} + placeholder="Website" + type="url" + /> +
+ +
+ 🎂 + (focused = true)} + onblur={saveField} + type="date" + /> +
+
+ + +
+ + +
+ + +
+ {#if contact.createdAt} + Erstellt: {new Date(contact.createdAt).toLocaleDateString('de')} + {/if} + {#if contact.updatedAt} + Bearbeitet: {new Date(contact.updatedAt).toLocaleDateString('de')} + {/if} +
+ + +
+ {#if confirmDelete} +

Kontakt wirklich löschen?

+
+ + +
+ {:else} + + {/if} +
+ {/if} +
+ + diff --git a/apps/manacore/apps/web/src/lib/modules/todo/AppView.svelte b/apps/manacore/apps/web/src/lib/modules/todo/AppView.svelte index 982012936..0d8e359d6 100644 --- a/apps/manacore/apps/web/src/lib/modules/todo/AppView.svelte +++ b/apps/manacore/apps/web/src/lib/modules/todo/AppView.svelte @@ -1,6 +1,7 @@ @@ -87,8 +92,24 @@
{#each filtered() as task (task.id)} - + (focused = true)} + onblur={saveField} + placeholder="Titel..." + /> +
+ + +
+
+ Priorität + +
+ +
+ Fällig + (focused = true)} + onblur={saveField} + /> +
+ + {#if task.estimatedDuration} +
+ Dauer + {task.estimatedDuration} Min. +
+ {/if} +
+ + +
+ + +
+ + + {#if task.subtasks && task.subtasks.length > 0} +
+ +
+ {#each task.subtasks as subtask (subtask.id)} + + {/each} +
+
+ {/if} + + +
+ Erstellt: {new Date(task.createdAt ?? '').toLocaleDateString('de')} + {#if task.updatedAt} + Bearbeitet: {new Date(task.updatedAt).toLocaleDateString('de')} + {/if} +
+ + +
+ {#if confirmDelete} +

Aufgabe wirklich löschen?

+
+ + +
+ {:else} + + {/if} +
+ {/if} +
+ + diff --git a/apps/manacore/apps/web/src/routes/(app)/home/+page.svelte b/apps/manacore/apps/web/src/routes/(app)/+page.svelte similarity index 100% rename from apps/manacore/apps/web/src/routes/(app)/home/+page.svelte rename to apps/manacore/apps/web/src/routes/(app)/+page.svelte diff --git a/apps/manacore/apps/web/src/routes/(app)/admin/+layout.svelte b/apps/manacore/apps/web/src/routes/(app)/admin/+layout.svelte index b0359e1c8..232d13ef0 100644 --- a/apps/manacore/apps/web/src/routes/(app)/admin/+layout.svelte +++ b/apps/manacore/apps/web/src/routes/(app)/admin/+layout.svelte @@ -11,7 +11,7 @@ let isAdmin = $derived(authStore.user?.role === 'admin'); $effect(() => { if (authStore.initialized && !authStore.loading && !isAdmin) { - goto('/home'); + goto('/'); } }); diff --git a/apps/manacore/apps/web/src/routes/(app)/dashboard/+page.server.ts b/apps/manacore/apps/web/src/routes/(app)/dashboard/+page.server.ts deleted file mode 100644 index f79496808..000000000 --- a/apps/manacore/apps/web/src/routes/(app)/dashboard/+page.server.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { PageServerLoad } from './$types'; - -/** - * Dashboard page server load - * - * Note: Auth is now handled client-side via Mana Core Auth. - * Data fetching will need to be done client-side with the auth token. - */ -export const load: PageServerLoad = async () => { - // Return empty data - auth is handled client-side - // TODO: Implement client-side data fetching with Mana Core Auth token - return { - profile: null, - organizationCount: 0, - teamCount: 0, - }; -}; diff --git a/apps/manacore/apps/web/src/routes/(app)/dashboard/+page.svelte b/apps/manacore/apps/web/src/routes/(app)/dashboard/+page.svelte deleted file mode 100644 index 212ff6b31..000000000 --- a/apps/manacore/apps/web/src/routes/(app)/dashboard/+page.svelte +++ /dev/null @@ -1,86 +0,0 @@ - - -
-
- -
- {#if tilingStore.isEditing} - - {/if} - -
-
- - {#if tilingStore.initialized} -
- {#if isMobile} - -
- {#each mobileLeaves as leaf (leaf.id)} -
- -
- {/each} -
- {:else} - - {/if} -
- {/if} -
diff --git a/apps/manacore/apps/web/src/routes/(app)/help/+page.svelte b/apps/manacore/apps/web/src/routes/(app)/help/+page.svelte index 376407803..8adbb02ec 100644 --- a/apps/manacore/apps/web/src/routes/(app)/help/+page.svelte +++ b/apps/manacore/apps/web/src/routes/(app)/help/+page.svelte @@ -25,7 +25,7 @@ appId="manacore" {translations} showBackButton - onBack={() => goto('/dashboard')} + onBack={() => goto('/')} showGettingStarted={false} showChangelog={false} defaultSection="faq" diff --git a/apps/manacore/apps/web/src/routes/(app)/themes/+page.svelte b/apps/manacore/apps/web/src/routes/(app)/themes/+page.svelte index 1ac868d82..bcbf769d5 100644 --- a/apps/manacore/apps/web/src/routes/(app)/themes/+page.svelte +++ b/apps/manacore/apps/web/src/routes/(app)/themes/+page.svelte @@ -15,5 +15,5 @@ currentMode={theme.mode} onModeChange={(m) => theme.setMode(m)} showBackButton={true} - onBack={() => goto('/dashboard')} + onBack={() => goto('/')} /> diff --git a/apps/manacore/apps/web/src/routes/(auth)/+layout.svelte b/apps/manacore/apps/web/src/routes/(auth)/+layout.svelte index 87fa3096b..b21104fd9 100644 --- a/apps/manacore/apps/web/src/routes/(auth)/+layout.svelte +++ b/apps/manacore/apps/web/src/routes/(auth)/+layout.svelte @@ -12,7 +12,7 @@ onMount(async () => { await authStore.initialize(); if (authStore.isAuthenticated) { - goto('/home'); + goto('/'); } }); diff --git a/apps/manacore/apps/web/src/routes/(auth)/login/+page.svelte b/apps/manacore/apps/web/src/routes/(auth)/login/+page.svelte index c7debd0f3..46e7fc1e5 100644 --- a/apps/manacore/apps/web/src/routes/(auth)/login/+page.svelte +++ b/apps/manacore/apps/web/src/routes/(auth)/login/+page.svelte @@ -38,7 +38,7 @@ onVerifyBackupCode={(code) => authStore.verifyBackupCode(code)} onSendMagicLink={(email) => authStore.sendMagicLink(email)} {goto} - successRedirect="/home" + successRedirect="/" registerPath="/register" forgotPasswordPath="/forgot-password" lightBackground="#f3f4f6" diff --git a/apps/manacore/apps/web/src/routes/(auth)/register/+page.svelte b/apps/manacore/apps/web/src/routes/(auth)/register/+page.svelte index 2d4348924..43e8e5867 100644 --- a/apps/manacore/apps/web/src/routes/(auth)/register/+page.svelte +++ b/apps/manacore/apps/web/src/routes/(auth)/register/+page.svelte @@ -35,7 +35,7 @@ onResendVerification={handleResendVerification} baseSignupCredits={25} {goto} - successRedirect="/dashboard" + successRedirect="/" loginPath="/login" lightBackground="#f3f4f6" darkBackground="#121212" diff --git a/apps/manacore/apps/web/src/routes/+error.svelte b/apps/manacore/apps/web/src/routes/+error.svelte index 5a2ba65b2..b61b686f0 100644 --- a/apps/manacore/apps/web/src/routes/+error.svelte +++ b/apps/manacore/apps/web/src/routes/+error.svelte @@ -5,5 +5,5 @@
diff --git a/apps/manacore/apps/web/src/routes/+page.svelte b/apps/manacore/apps/web/src/routes/+page.svelte deleted file mode 100644 index b847b8a48..000000000 --- a/apps/manacore/apps/web/src/routes/+page.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - -
-
-

ManaCore

-

Redirecting...

-
-
diff --git a/apps/manacore/apps/web/src/routes/auth/callback/+page.svelte b/apps/manacore/apps/web/src/routes/auth/callback/+page.svelte index 1b99f3096..3b34d19a4 100644 --- a/apps/manacore/apps/web/src/routes/auth/callback/+page.svelte +++ b/apps/manacore/apps/web/src/routes/auth/callback/+page.svelte @@ -26,7 +26,7 @@ } // Determine redirect destination - let redirectUrl = next || '/dashboard'; + let redirectUrl = next || '/'; // For email verification/signup, redirect to welcome page if (type === 'signup' || type === 'email_verification') { diff --git a/apps/manacore/apps/web/src/routes/welcome/+page.svelte b/apps/manacore/apps/web/src/routes/welcome/+page.svelte index 4b3214df0..e72a2c2c4 100644 --- a/apps/manacore/apps/web/src/routes/welcome/+page.svelte +++ b/apps/manacore/apps/web/src/routes/welcome/+page.svelte @@ -25,12 +25,12 @@ localStorage.setItem(STORAGE_KEYS.HAS_SEEN_WELCOME, 'true'); // Redirect to app's dashboard - goto(appConfig?.dashboardRoute || '/dashboard'); + goto(appConfig?.dashboardRoute || '/'); } function handleSkip() { localStorage.setItem(STORAGE_KEYS.HAS_SEEN_WELCOME, 'true'); - goto(appConfig?.dashboardRoute || '/dashboard'); + goto(appConfig?.dashboardRoute || '/'); }