diff --git a/apps/mana/apps/web/src/lib/app-registry/apps.ts b/apps/mana/apps/web/src/lib/app-registry/apps.ts index 672910175..c40b57c7b 100644 --- a/apps/mana/apps/web/src/lib/app-registry/apps.ts +++ b/apps/mana/apps/web/src/lib/app-registry/apps.ts @@ -1278,6 +1278,16 @@ registerApp({ ], }); +registerApp({ + id: 'spaces', + name: 'Spaces', + color: '#14b8a6', + icon: UserCircle, + views: { + list: { load: () => import('$lib/modules/spaces/ListView.svelte') }, + }, +}); + registerApp({ id: 'quiz', name: 'Quiz', diff --git a/apps/mana/apps/web/src/lib/components/layout/SpaceSwitcher.svelte b/apps/mana/apps/web/src/lib/components/layout/SpaceSwitcher.svelte index e0e3c3e61..4797c6ab0 100644 --- a/apps/mana/apps/web/src/lib/components/layout/SpaceSwitcher.svelte +++ b/apps/mana/apps/web/src/lib/components/layout/SpaceSwitcher.svelte @@ -211,7 +211,7 @@ {#if active && active.type !== 'personal'} - +
- - {#snippet breadcrumb()} - Workbench Mitglieder verwalten - {/snippet} - - - {#if !activeSpace} -

Lade aktiven Space …

- {:else if activeSpace.type === 'personal'} -
-

- Dein Personal-Space kann keine weiteren Mitglieder haben — er ist bewusst nur für dich. Für - geteilte Bereiche (Familie, Team, Marke, Verein) lege einen neuen Space an und lade dann - hier ein. -

-
- {:else} - {#if canManage} -
-

Einladen

-
- - - -
- {#if inviteError}

{inviteError}

{/if} - {#if inviteSuccess}

{inviteSuccess}

{/if} -
- {/if} - -
-

Mitglieder ({members.length})

- {#if loading} -

Lädt …

- {:else if loadError} -

{loadError}

- {:else if members.length === 0} -

Nur du bist Mitglied.

- {:else} - - {/if} -
- - {#if invitations.length > 0} -
-

Offene Einladungen ({invitations.length})

- -
- {/if} - {/if} -
- - + diff --git a/packages/shared-branding/src/app-icons.ts b/packages/shared-branding/src/app-icons.ts index f029e3c4c..3db382492 100644 --- a/packages/shared-branding/src/app-icons.ts +++ b/packages/shared-branding/src/app-icons.ts @@ -260,6 +260,13 @@ export const APP_ICONS = { // while still reading as "chronological" in the AI Workbench family. `` ), + spaces: svgToDataUrl( + // Three people-silhouettes clustered in the tile — the Spaces primitive + // is about shared workspaces, so the icon emphasises "group". Teal→indigo + // gradient sits next to contacts (green) and chat (indigo) in the + // communication family without competing with either. + `` + ), } as const; export type AppIconId = keyof typeof APP_ICONS; diff --git a/packages/shared-branding/src/mana-apps.ts b/packages/shared-branding/src/mana-apps.ts index be48c8de6..a0df94963 100644 --- a/packages/shared-branding/src/mana-apps.ts +++ b/packages/shared-branding/src/mana-apps.ts @@ -1105,6 +1105,23 @@ export const MANA_APPS: ManaApp[] = [ status: 'beta', requiredTier: 'beta', }, + { + id: 'spaces', + name: 'Spaces', + description: { + de: 'Geteilte Bereiche & Mitglieder', + en: 'Shared spaces & members', + }, + longDescription: { + de: 'Verwalte den aktiven Space und seine Mitglieder — lade Personen per E-Mail ein, vergib Rollen (Admin/Mitglied) und widerrufe offene Einladungen. Personal-Spaces zeigen nur den Hinweis, dass sie bewusst nur für dich sind; geteilte Spaces (Familie, Team, Marke, Verein, Praxis) bekommen das volle Member-Management.', + en: 'Manage the active Space and its members — invite people by email, assign roles (admin/member) and revoke pending invitations. Personal spaces are single-user by design; shared spaces (family, team, brand, club, practice) get full member management.', + }, + icon: APP_ICONS.spaces, + color: '#14b8a6', + comingSoon: false, + status: 'beta', + requiredTier: 'beta', + }, ]; /**