synops/frontend/src/lib/components/traits/GenericTrait.svelte
vegard 263f63bec8 Trait-aware frontend: samlingssider med dynamiske trait-paneler (oppgave 13.2)
Samlingsnoder med `metadata.traits` rendres nå som egne sider på
/collection/[id]. Hvert trait-navn mappes til en dedikert Svelte-komponent
som viser relevant UI. Traits uten egen komponent vises med et generisk panel.

Komponenter for 9 traits: editor, chat, kanban, podcast, publishing,
rss, calendar, recording, transcription. Mottak-siden viser traits som
pills og lenker til samlingssiden.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 00:20:35 +00:00

29 lines
706 B
Svelte

<script lang="ts">
import TraitPanel from './TraitPanel.svelte';
interface Props {
name: string;
config: Record<string, unknown>;
}
let { name, config }: Props = $props();
const configKeys = $derived(Object.keys(config));
</script>
<TraitPanel {name} label={name}>
{#snippet children()}
{#if configKeys.length > 0}
<dl class="space-y-1 text-sm">
{#each configKeys as key (key)}
<div class="flex gap-2">
<dt class="text-xs text-gray-500">{key}:</dt>
<dd class="text-xs text-gray-700">{JSON.stringify(config[key])}</dd>
</div>
{/each}
</dl>
{:else}
<p class="text-xs text-gray-400">Aktivert, ingen konfigurasjon.</p>
{/if}
{/snippet}
</TraitPanel>