diff --git a/frontend/src/lib/components/traits/MindMapTrait.svelte b/frontend/src/lib/components/traits/MindMapTrait.svelte
new file mode 100644
index 0000000..01e28c0
--- /dev/null
+++ b/frontend/src/lib/components/traits/MindMapTrait.svelte
@@ -0,0 +1,638 @@
+
+
+
+
+
+
+
+
+ {#if !treeData}
+
+
Ingen data tilgjengelig.
+
Velg en node som rot for tankekartet.
+
+ {/if}
+
+
+
+
+
+ Klikk = ny rot · Dobbeltklikk = åpne
+
+
+
+
diff --git a/frontend/src/lib/traits.ts b/frontend/src/lib/traits.ts
index f58212e..d30678e 100644
--- a/frontend/src/lib/traits.ts
+++ b/frontend/src/lib/traits.ts
@@ -14,7 +14,7 @@ export const traitCatalog: TraitCategory[] = [
{ label: 'Lyd & video', traits: ['podcast', 'recording', 'transcription', 'tts', 'clips', 'playlist'] },
{ label: 'Kommunikasjon', traits: ['chat', 'forum', 'comments', 'guest_input', 'announcements', 'polls', 'qa'] },
{ label: 'Organisering', traits: ['kanban', 'calendar', 'timeline', 'table', 'gallery', 'bookmarks', 'tags'] },
- { label: 'Kunnskap', traits: ['knowledge_graph', 'wiki', 'glossary', 'faq', 'bibliography'] },
+ { label: 'Kunnskap', traits: ['knowledge_graph', 'mindmap', 'wiki', 'glossary', 'faq', 'bibliography'] },
{ label: 'Automatisering & AI', traits: ['auto_tag', 'auto_summarize', 'digest', 'bridge', 'moderation'] },
{ label: 'Tilgang & fellesskap', traits: ['membership', 'roles', 'invites', 'paywall', 'directory'] },
{ label: 'Ekstern integrasjon', traits: ['webhook', 'import', 'export', 'ical_sync'] },
diff --git a/frontend/src/lib/workspace/types.ts b/frontend/src/lib/workspace/types.ts
index 46fa31d..a9c9296 100644
--- a/frontend/src/lib/workspace/types.ts
+++ b/frontend/src/lib/workspace/types.ts
@@ -55,6 +55,7 @@ export const TRAIT_PANEL_INFO: Record = {
studio: { title: 'Studio', icon: '🎛️', defaultWidth: 550, defaultHeight: 450 },
mixer: { title: 'Mikser', icon: '🎚️', defaultWidth: 450, defaultHeight: 400 },
orchestration: { title: 'Orkestrering', icon: '⚡', defaultWidth: 550, defaultHeight: 500 },
+ mindmap: { title: 'Tankekart', icon: '🧠', defaultWidth: 600, defaultHeight: 500 },
};
/** Default info for unknown traits */
diff --git a/frontend/src/routes/collection/[id]/+page.svelte b/frontend/src/routes/collection/[id]/+page.svelte
index 0cbfcbb..c9308af 100644
--- a/frontend/src/routes/collection/[id]/+page.svelte
+++ b/frontend/src/routes/collection/[id]/+page.svelte
@@ -35,6 +35,7 @@
import StudioTrait from '$lib/components/traits/StudioTrait.svelte';
import MixerTrait from '$lib/components/traits/MixerTrait.svelte';
import OrchestrationTrait from '$lib/components/traits/OrchestrationTrait.svelte';
+ import MindMapTrait from '$lib/components/traits/MindMapTrait.svelte';
import GenericTrait from '$lib/components/traits/GenericTrait.svelte';
import TraitAdmin from '$lib/components/traits/TraitAdmin.svelte';
import NodeUsage from '$lib/components/NodeUsage.svelte';
@@ -71,7 +72,7 @@
/** Traits with dedicated components */
const knownTraits = new Set([
'editor', 'chat', 'kanban', 'podcast', 'publishing',
- 'rss', 'calendar', 'recording', 'transcription', 'studio', 'mixer', 'orchestration'
+ 'rss', 'calendar', 'recording', 'transcription', 'studio', 'mixer', 'orchestration', 'mindmap'
]);
/** Count of child nodes */
@@ -357,6 +358,8 @@
{:else if trait === 'orchestration'}
+ {:else if trait === 'mindmap'}
+
{/if}
{:else}
@@ -414,6 +417,8 @@
{:else if trait === 'orchestration'}
+ {:else if trait === 'mindmap'}
+
{/if}
{:else}
diff --git a/tasks.md b/tasks.md
index 410e949..63a3686 100644
--- a/tasks.md
+++ b/tasks.md
@@ -361,8 +361,7 @@ Ref: `docs/features/tankekart.md`. Tankekart-panel som viser noder og edges
i radial layout med en rotnode i sentrum. Ingen ny backend — ren frontend-
visning av eksisterende grafdata.
-- [~] 27.1 MindMap Svelte-komponent: radial/tree-layout av noder rundt en rotnode. Hent relaterte noder (1-2 hopp) via WebSocket. d3-hierarchy eller trigonometri for layout. Pan/zoom via canvas-primitiv. Klikk node = ny rot, dobbeltklikk = åpne i editor.
- > Påbegynt: 2026-03-18T19:26
+- [x] 27.1 MindMap Svelte-komponent: radial/tree-layout av noder rundt en rotnode. Hent relaterte noder (1-2 hopp) via WebSocket. d3-hierarchy eller trigonometri for layout. Pan/zoom via canvas-primitiv. Klikk node = ny rot, dobbeltklikk = åpne i editor.
- [ ] 27.2 BlockShell-panel: MindMap som BlockShell-panel i arbeidsflaten med fullskjerm, resize, drag-handle. Rotnode fra kontekst-header. Responsivt.
- [ ] 27.3 MindMap-trait: `mindmap`-trait for samlingsnoder. Vises i trait-velger ved opprettelse. Konfigurasjon: default dybde (1-3 hopp), layout-stil (radial/tree).