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 history.length > 0} + + {/if} + {#if rootId !== collection?.id} + + {/if} + {rootTitle} +
+
+ {nodeCount} noder + + + +
+
+ + +
+ {#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).