mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 21:41:09 +02:00
feat(apps): register agents + timeline as MANA_APPS + broadcast URL fix + members page chrome
Three modules move from "dedicated route only" to "first-class
apps in the launcher". After this they show up in the AppDrawer
pill, can be pinned to workbench scenes, and get a direct URL from
the app switcher.
MANA_APPS entries added:
- agents (/agents) — AI agent management. Icon: smiling robot head
with antenna dot. violet→fuchsia gradient, status
beta, requiredTier beta.
- timeline (/timeline) — Chronological view across modules. Icon: vertical
event dots with connecting axis. amber→orange,
status beta, requiredTier beta.
Plus: broadcast's MANA_APPS entry already existed but had no URL
override, so the auto-derived /broadcast didn't match the real route
at /broadcasts. Added an APP_URL_OVERRIDES entry mapping
id='broadcast' → '/broadcasts' so the app switcher lands the user on
the right page. Icon + module.config stay singular.
Route wiring:
- /agents previously only had /agents/templates/ as a subroute. Added
/agents/+page.svelte that renders the existing ai-agents ListView
(at $lib/modules/ai-agents/), so the top-level URL works from the
AppDrawer.
- /timeline already had a root +page.svelte — no work there.
- /broadcasts already had a root +page.svelte — no work there.
/spaces/members page chrome:
- Swapped the hand-rolled header for @mana/shared-ui PageHeader with
backHref="/", breadcrumb "Workbench › Mitglieder verwalten", and the
space name + type as the description. Feels like a native Mana page
now instead of an orphaned admin route.
- Dropped the ~60 lines of unused .type-chip CSS (moved the chip info
into the PageHeader description string).
- Container bumped to 720px max-width to match other admin pages.
0 errors across 7236 files.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
1861e89d45
commit
9d6a5a53a8
4 changed files with 81 additions and 88 deletions
14
apps/mana/apps/web/src/routes/(app)/agents/+page.svelte
Normal file
14
apps/mana/apps/web/src/routes/(app)/agents/+page.svelte
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
<script lang="ts">
|
||||
/**
|
||||
* /agents — AI Agents top-level route.
|
||||
*
|
||||
* Renders the existing workbench-card ListView from
|
||||
* `$lib/modules/ai-agents/`. The module folder is named `ai-agents`
|
||||
* for internal clarity, but the user-facing MANA_APPS id + route is
|
||||
* plain `agents` so the URL stays short.
|
||||
*/
|
||||
|
||||
import ListView from '$lib/modules/ai-agents/ListView.svelte';
|
||||
</script>
|
||||
|
||||
<ListView />
|
||||
|
|
@ -12,6 +12,7 @@
|
|||
*/
|
||||
|
||||
import { onMount } from 'svelte';
|
||||
import { PageHeader } from '@mana/shared-ui';
|
||||
import { getActiveSpace, authFetch } from '$lib/data/scope';
|
||||
import { SPACE_TYPE_LABELS } from '@mana/shared-branding';
|
||||
|
||||
|
|
@ -143,17 +144,18 @@
|
|||
</script>
|
||||
|
||||
<div class="container">
|
||||
<header class="page-head">
|
||||
<h1>Mitglieder</h1>
|
||||
{#if activeSpace}
|
||||
<p class="subtitle">
|
||||
<strong>{activeSpace.name}</strong>
|
||||
<span class="type-chip" data-type={activeSpace.type}
|
||||
>{SPACE_TYPE_LABELS.de[activeSpace.type]}</span
|
||||
>
|
||||
</p>
|
||||
{/if}
|
||||
</header>
|
||||
<PageHeader
|
||||
title="Mitglieder"
|
||||
description={activeSpace
|
||||
? `${activeSpace.name} · ${SPACE_TYPE_LABELS.de[activeSpace.type]}`
|
||||
: undefined}
|
||||
backHref="/"
|
||||
size="lg"
|
||||
>
|
||||
{#snippet breadcrumb()}
|
||||
<a href="/">Workbench</a> <span class="crumb-sep">›</span> Mitglieder verwalten
|
||||
{/snippet}
|
||||
</PageHeader>
|
||||
|
||||
{#if !activeSpace}
|
||||
<p class="empty">Lade aktiven Space …</p>
|
||||
|
|
@ -263,87 +265,15 @@
|
|||
instead of falling back to hardcoded white. */
|
||||
|
||||
.container {
|
||||
max-width: 640px;
|
||||
max-width: 720px;
|
||||
margin: 0 auto;
|
||||
padding: 1.5rem 1rem 4rem;
|
||||
padding: 0 1rem 4rem;
|
||||
color: hsl(var(--color-foreground));
|
||||
}
|
||||
|
||||
.page-head {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.page-head h1 {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 600;
|
||||
margin: 0 0 0.25rem;
|
||||
color: hsl(var(--color-foreground));
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
margin: 0;
|
||||
color: hsl(var(--color-muted-foreground, 0 0% 55%));
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
|
||||
.type-chip {
|
||||
font-size: 0.6875rem;
|
||||
padding: 0.125rem 0.5rem;
|
||||
border-radius: 9999px;
|
||||
background: hsl(var(--color-muted, 0 0% 94%));
|
||||
color: hsl(var(--color-muted-foreground, 0 0% 45%));
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.02em;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.type-chip[data-type='brand'] {
|
||||
background: hsl(260 60% 95%);
|
||||
color: hsl(260 55% 35%);
|
||||
}
|
||||
.type-chip[data-type='club'] {
|
||||
background: hsl(160 45% 93%);
|
||||
color: hsl(160 55% 28%);
|
||||
}
|
||||
.type-chip[data-type='family'] {
|
||||
background: hsl(30 70% 93%);
|
||||
color: hsl(30 55% 35%);
|
||||
}
|
||||
.type-chip[data-type='team'] {
|
||||
background: hsl(210 55% 93%);
|
||||
color: hsl(210 55% 32%);
|
||||
}
|
||||
.type-chip[data-type='practice'] {
|
||||
background: hsl(340 50% 94%);
|
||||
color: hsl(340 50% 38%);
|
||||
}
|
||||
|
||||
:global(.dark) .type-chip {
|
||||
background: hsl(var(--color-muted, 0 0% 20%));
|
||||
color: hsl(var(--color-muted-foreground, 0 0% 75%));
|
||||
}
|
||||
:global(.dark) .type-chip[data-type='brand'] {
|
||||
background: hsl(260 40% 25%);
|
||||
color: hsl(260 80% 85%);
|
||||
}
|
||||
:global(.dark) .type-chip[data-type='club'] {
|
||||
background: hsl(160 35% 20%);
|
||||
color: hsl(160 70% 80%);
|
||||
}
|
||||
:global(.dark) .type-chip[data-type='family'] {
|
||||
background: hsl(30 40% 22%);
|
||||
color: hsl(30 80% 82%);
|
||||
}
|
||||
:global(.dark) .type-chip[data-type='team'] {
|
||||
background: hsl(210 40% 22%);
|
||||
color: hsl(210 70% 82%);
|
||||
}
|
||||
:global(.dark) .type-chip[data-type='practice'] {
|
||||
background: hsl(340 35% 23%);
|
||||
color: hsl(340 65% 82%);
|
||||
.crumb-sep {
|
||||
margin: 0 0.25rem;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.hint-card {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue