adm.synops.no viser admin-arbeidsflate

- Header viser "Administrasjon" i stedet for "Hjem" på adm.synops.no
- Tom-tilstand foreslår admin-verktøy (Nodeutforsker, Forbruk, AI)
- homeLabel prop i ContextHeader for konfigurerbar tittel
- isAdminHost fra layout server → +page.svelte

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
vegard 2026-03-20 02:18:19 +00:00
parent b8c38a901e
commit 8885a13d9b
2 changed files with 44 additions and 18 deletions

View file

@ -42,6 +42,8 @@
theme?: ThemeConfig; theme?: ThemeConfig;
/** Callback when theme changes */ /** Callback when theme changes */
onThemeChange?: (theme: ThemeConfig) => void; onThemeChange?: (theme: ThemeConfig) => void;
/** Label for home workspace (default "Hjem") */
homeLabel?: string;
/** User's saved theme slots (up to 6) */ /** User's saved theme slots (up to 6) */
savedThemes?: ThemeConfig[]; savedThemes?: ThemeConfig[];
/** Callback when saved themes change */ /** Callback when saved themes change */
@ -61,6 +63,7 @@
activeTraits, activeTraits,
theme = DEFAULT_THEME, theme = DEFAULT_THEME,
onThemeChange, onThemeChange,
homeLabel = 'Hjem',
savedThemes = [], savedThemes = [],
onSavedThemesChange, onSavedThemesChange,
}: Props = $props(); }: Props = $props();
@ -372,7 +375,7 @@
title="Bytt kontekst" title="Bytt kontekst"
> >
<span class="context-selector-title"> <span class="context-selector-title">
{isPersonalWorkspace ? 'Hjem' : (collectionNode?.title || 'Arbeidsflate')} {isPersonalWorkspace ? homeLabel : (collectionNode?.title || 'Arbeidsflate')}
</span> </span>
<span class="context-selector-chevron" class:open={selectorOpen}>&#9662;</span> <span class="context-selector-chevron" class:open={selectorOpen}>&#9662;</span>
</button> </button>
@ -397,7 +400,7 @@
class:current={isPersonalWorkspace} class:current={isPersonalWorkspace}
onclick={() => { selectorOpen = false; goto('/'); }} onclick={() => { selectorOpen = false; goto('/'); }}
> >
<span class="context-selector-item-title">Hjem</span> <span class="context-selector-item-title">{homeLabel}</span>
{#if isPersonalWorkspace} {#if isPersonalWorkspace}
<span class="context-selector-item-check">&#10003;</span> <span class="context-selector-item-check">&#10003;</span>
{/if} {/if}

View file

@ -369,6 +369,7 @@
onThemeChange={handleThemeChange} onThemeChange={handleThemeChange}
{savedThemes} {savedThemes}
onSavedThemesChange={handleSavedThemesChange} onSavedThemesChange={handleSavedThemesChange}
homeLabel={isAdminHost ? 'Administrasjon' : 'Hjem'}
/> />
<!-- Main content --> <!-- Main content -->
@ -388,22 +389,44 @@
{:else if layout.panels.length === 0} {:else if layout.panels.length === 0}
<div class="workspace-empty"> <div class="workspace-empty">
<div class="workspace-empty-inner"> <div class="workspace-empty-inner">
<p class="workspace-empty-title">Din personlige arbeidsflate</p> {#if isAdminHost}
<p class="workspace-empty-desc"> <p class="workspace-empty-title">Administrasjon</p>
Legg til verktøy-paneler for å bygge opp arbeidsflaten din. <p class="workspace-empty-desc">
Arrangementet huskes mellom besøk. Legg til admin-verktøy for å komme i gang.
</p> </p>
<div class="workspace-empty-tools"> <div class="workspace-empty-tools">
{#each Object.entries(TRAIT_PANEL_INFO) as [key, info] (key)} {#each [
<button ['node_explorer', '🔍', 'Nodeutforsker'],
class="workspace-empty-tool" ['usage', '📊', 'Forbruk'],
onclick={() => handleAddPanel(key)} ['ai', '🤖', 'AI-verktøy'],
> ] as [key, icon, label] (key)}
<span class="workspace-empty-tool-icon">{info.icon}</span> <button
<span class="workspace-empty-tool-label">{info.title}</span> class="workspace-empty-tool"
</button> onclick={() => handleAddPanel(key)}
{/each} >
</div> <span class="workspace-empty-tool-icon">{icon}</span>
<span class="workspace-empty-tool-label">{label}</span>
</button>
{/each}
</div>
{:else}
<p class="workspace-empty-title">Din personlige arbeidsflate</p>
<p class="workspace-empty-desc">
Legg til verktøy-paneler for å bygge opp arbeidsflaten din.
Arrangementet huskes mellom besøk.
</p>
<div class="workspace-empty-tools">
{#each Object.entries(TRAIT_PANEL_INFO) as [key, info] (key)}
<button
class="workspace-empty-tool"
onclick={() => handleAddPanel(key)}
>
<span class="workspace-empty-tool-icon">{info.icon}</span>
<span class="workspace-empty-tool-label">{info.title}</span>
</button>
{/each}
</div>
{/if}
</div> </div>
</div> </div>
{:else if isMobile} {:else if isMobile}