synops/frontend/src/lib/traits.ts
vegard 8f7d2d7fe8 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
2026-03-18 19:44:30 +00:00

217 lines
4.8 KiB
TypeScript

/**
* Shared trait catalog and package definitions.
* Used by collection/new (package selector) and TraitAdmin (trait management).
*/
export interface TraitCategory {
label: string;
traits: string[];
}
export const traitCatalog: TraitCategory[] = [
{ label: 'Innhold & redigering', traits: ['editor', 'versioning', 'collaboration', 'translation', 'templates'] },
{ label: 'Publisering & distribusjon', traits: ['publishing', 'rss', 'newsletter', 'custom_domain', 'analytics', 'embed', 'api'] },
{ 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', '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'] },
];
export interface Package {
id: string;
name: string;
description: string;
icon: string;
traits: Record<string, Record<string, unknown>>;
}
export const packages: Package[] = [
{
id: 'nettmagasin',
name: 'Nettmagasin',
description: 'Publiser artikler med RSS, kommentarer og nyhetsbrev',
icon: '📰',
traits: {
editor: { preset: 'longform' },
publishing: {},
rss: {},
comments: {},
analytics: {},
custom_domain: {},
newsletter: {},
},
},
{
id: 'podcaststudio',
name: 'Podcaststudio',
description: 'Podcast med opptak, transkripsjon og kunnskapsgraf',
icon: '🎙️',
traits: {
podcast: {},
recording: {},
transcription: {},
editor: { preset: 'shownotes' },
rss: {},
analytics: {},
clips: {},
knowledge_graph: {},
mindmap: { default_depth: 2, layout: 'radial' },
},
},
{
id: 'nyhetsbrev',
name: 'Nyhetsbrev',
description: 'Skriv og distribuer nyhetsbrev med analyse',
icon: '✉️',
traits: {
editor: { preset: 'longform' },
newsletter: {},
analytics: {},
versioning: {},
},
},
{
id: 'wiki',
name: 'Wiki',
description: 'Samarbeidende kunnskapsbase med versjonering',
icon: '📚',
traits: {
wiki: {},
editor: { preset: 'longform' },
collaboration: {},
versioning: {},
knowledge_graph: {},
mindmap: { default_depth: 2, layout: 'tree' },
glossary: {},
},
},
{
id: 'diskusjonsklubb',
name: 'Diskusjonsklubb',
description: 'Forum, chat og avstemninger for en gruppe',
icon: '💬',
traits: {
forum: {},
chat: {},
polls: {},
membership: {},
roles: {},
directory: {},
},
},
{
id: 'kursplattform',
name: 'Kursplattform',
description: 'Kursinnhold med spillelister, Q&A og betaling',
icon: '🎓',
traits: {
editor: { preset: 'longform' },
playlist: {},
qa: {},
membership: {},
paywall: {},
templates: {},
},
},
{
id: 'moteplass',
name: 'Møteplass',
description: 'Opptak, chat, kanban og kalender for møter',
icon: '🤝',
traits: {
recording: {},
chat: {},
kanban: {},
calendar: {},
auto_summarize: {},
guest_input: {},
},
},
{
id: 'fotoblogg',
name: 'Fotoblogg',
description: 'Bildegalleri med publisering og kommentarer',
icon: '📷',
traits: {
gallery: {},
publishing: {},
comments: {},
custom_domain: {},
rss: {},
},
},
{
id: 'prosjektstyring',
name: 'Prosjektstyring',
description: 'Kanban, kalender og chat for teamarbeid',
icon: '📋',
traits: {
kanban: {},
calendar: {},
chat: {},
table: {},
tags: {},
roles: {},
},
},
{
id: 'forskning',
name: 'Åpen forskning',
description: 'Akademisk publisering med versjonering og bibliografi',
icon: '🔬',
traits: {
editor: { preset: 'longform' },
versioning: {},
bibliography: {},
publishing: {},
comments: {},
collaboration: {},
api: {},
},
},
{
id: 'community-radio',
name: 'Community radio',
description: 'Opptak, podcast, chat og avstemninger',
icon: '📻',
traits: {
recording: {},
podcast: {},
chat: {},
polls: {},
membership: {},
clips: {},
playlist: {},
},
},
{
id: 'bokmerke-vegg',
name: 'Bokmerke-vegg',
description: 'Kuraterte lenker med tags og kommentarer',
icon: '🔖',
traits: {
bookmarks: {},
tags: {},
publishing: {},
rss: {},
comments: {},
},
},
{
id: 'redaksjon',
name: 'Redaksjon',
description: 'Redaksjonelt arbeid med chat, kanban og kalender',
icon: '🗞️',
traits: {
chat: {},
kanban: {},
calendar: {},
editor: { preset: 'longform' },
knowledge_graph: {},
guest_input: {},
},
},
];