MindMap-trait for samlingsnoder (oppgave 27.3)
Gjør mindmap til et offisielt trait som kan velges ved opprettelse av samlingsnoder. Frontend-komponenten (27.1) og BlockShell-panelet (27.2) var allerede på plass — dette kobler traiten inn i backend- validering og pakke-definisjoner. Endringer: - Lagt til "mindmap" i VALID_TRAITS (intentions.rs) - Validering av konfig: default_depth 1-3, layout radial/tree - Inkludert mindmap i Podcaststudio- og Wiki-pakker (traits.ts) - Oppdatert trait-katalog i docs/primitiver/traits.md
This commit is contained in:
parent
49d8599056
commit
8f7d2d7fe8
4 changed files with 26 additions and 5 deletions
|
|
@ -136,6 +136,7 @@ Fravær av en trait betyr at funksjonaliteten er deaktivert. Ingen boolean
|
||||||
| Trait | Frontend | Backend |
|
| Trait | Frontend | Backend |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `knowledge_graph` | Visuell graf, auto-tagging | NER, embedding-generering |
|
| `knowledge_graph` | Visuell graf, auto-tagging | NER, embedding-generering |
|
||||||
|
| `mindmap` | Radial/tree-layout av noder rundt rot, pan/zoom, dybde 1-3 hopp | Validering av konfig (dybde, layout) |
|
||||||
| `wiki` | Slug-baserte sider, kryssreferanser, "finnes ikke ennå"-lenker | Slug-unikhet, backlink-indeks |
|
| `wiki` | Slug-baserte sider, kryssreferanser, "finnes ikke ennå"-lenker | Slug-unikhet, backlink-indeks |
|
||||||
| `glossary` | Begrepsliste, hover-definisjoner i annet innhold | Begrep-matching i tekst |
|
| `glossary` | Begrepsliste, hover-definisjoner i annet innhold | Begrep-matching i tekst |
|
||||||
| `faq` | Spørsmål/svar-par med søk | Søkeindeksering |
|
| `faq` | Spørsmål/svar-par med søk | Søkeindeksering |
|
||||||
|
|
@ -180,9 +181,9 @@ Brukeren kan legge til eller fjerne traits etterpå.
|
||||||
| Pakke | Traits |
|
| Pakke | Traits |
|
||||||
|---|---|
|
|---|---|
|
||||||
| **Nettmagasin** | editor(longform), publishing, rss, comments, analytics, custom_domain, newsletter |
|
| **Nettmagasin** | editor(longform), publishing, rss, comments, analytics, custom_domain, newsletter |
|
||||||
| **Podcaststudio** | podcast, recording, transcription, mixer, editor(shownotes), rss, analytics, clips, knowledge_graph |
|
| **Podcaststudio** | podcast, recording, transcription, mixer, editor(shownotes), rss, analytics, clips, knowledge_graph, mindmap |
|
||||||
| **Nyhetsbrev** | editor(longform), newsletter, analytics, versioning |
|
| **Nyhetsbrev** | editor(longform), newsletter, analytics, versioning |
|
||||||
| **Wiki** | wiki, editor(longform), collaboration, versioning, knowledge_graph, glossary |
|
| **Wiki** | wiki, editor(longform), collaboration, versioning, knowledge_graph, mindmap, glossary |
|
||||||
| **Diskusjonsklubb** | forum, chat, polls, membership, roles, directory |
|
| **Diskusjonsklubb** | forum, chat, polls, membership, roles, directory |
|
||||||
| **Kursplattform** | editor(longform), playlist, qa, membership, paywall, templates |
|
| **Kursplattform** | editor(longform), playlist, qa, membership, paywall, templates |
|
||||||
| **Møteplass** | recording, mixer, chat, kanban, calendar, auto_summarize, guest_input |
|
| **Møteplass** | recording, mixer, chat, kanban, calendar, auto_summarize, guest_input |
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,7 @@ export const packages: Package[] = [
|
||||||
analytics: {},
|
analytics: {},
|
||||||
clips: {},
|
clips: {},
|
||||||
knowledge_graph: {},
|
knowledge_graph: {},
|
||||||
|
mindmap: { default_depth: 2, layout: 'radial' },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -83,6 +84,7 @@ export const packages: Package[] = [
|
||||||
collaboration: {},
|
collaboration: {},
|
||||||
versioning: {},
|
versioning: {},
|
||||||
knowledge_graph: {},
|
knowledge_graph: {},
|
||||||
|
mindmap: { default_depth: 2, layout: 'tree' },
|
||||||
glossary: {},
|
glossary: {},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ const VALID_TRAITS: &[&str] = &[
|
||||||
// Organisering
|
// Organisering
|
||||||
"kanban", "calendar", "timeline", "table", "gallery", "bookmarks", "tags",
|
"kanban", "calendar", "timeline", "table", "gallery", "bookmarks", "tags",
|
||||||
// Kunnskap
|
// Kunnskap
|
||||||
"knowledge_graph", "wiki", "glossary", "faq", "bibliography",
|
"knowledge_graph", "mindmap", "wiki", "glossary", "faq", "bibliography",
|
||||||
// Automatisering & AI
|
// Automatisering & AI
|
||||||
"auto_tag", "auto_summarize", "digest", "bridge", "moderation", "ai_tool", "orchestration",
|
"auto_tag", "auto_summarize", "digest", "bridge", "moderation", "ai_tool", "orchestration",
|
||||||
// Tilgang & fellesskap
|
// Tilgang & fellesskap
|
||||||
|
|
@ -90,6 +90,25 @@ fn validate_collection_traits(
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Valider mindmap-konfigurasjon: dybde 1-3, layout radial/tree
|
||||||
|
if let Some(mindmap) = traits_obj.get("mindmap") {
|
||||||
|
if let Some(depth) = mindmap.get("default_depth") {
|
||||||
|
if let Some(d) = depth.as_i64() {
|
||||||
|
if !(1..=3).contains(&d) {
|
||||||
|
return Err("mindmap.default_depth må være 1, 2 eller 3".to_string());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if let Some(layout) = mindmap.get("layout").and_then(|v| v.as_str()) {
|
||||||
|
if layout != "radial" && layout != "tree" {
|
||||||
|
return Err(format!(
|
||||||
|
"mindmap.layout må være \"radial\" eller \"tree\", fikk \"{}\"",
|
||||||
|
layout
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Valider custom_domain DNS hvis satt i publishing-trait
|
// Valider custom_domain DNS hvis satt i publishing-trait
|
||||||
if let Some(publishing) = traits_obj.get("publishing") {
|
if let Some(publishing) = traits_obj.get("publishing") {
|
||||||
if let Some(domain) = publishing.get("custom_domain").and_then(|v| v.as_str()) {
|
if let Some(domain) = publishing.get("custom_domain").and_then(|v| v.as_str()) {
|
||||||
|
|
|
||||||
3
tasks.md
3
tasks.md
|
|
@ -363,8 +363,7 @@ visning av eksisterende grafdata.
|
||||||
|
|
||||||
- [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.
|
- [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.
|
||||||
- [x] 27.2 BlockShell-panel: MindMap som BlockShell-panel i arbeidsflaten med fullskjerm, resize, drag-handle. Rotnode fra kontekst-header. Responsivt.
|
- [x] 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).
|
- [x] 27.3 MindMap-trait: `mindmap`-trait for samlingsnoder. Vises i trait-velger ved opprettelse. Konfigurasjon: default dybde (1-3 hopp), layout-stil (radial/tree).
|
||||||
> Påbegynt: 2026-03-18T19:40
|
|
||||||
|
|
||||||
## Fase 28: Manglende CLI-verktøy + AI-rutingskontroll
|
## Fase 28: Manglende CLI-verktøy + AI-rutingskontroll
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue