From a459c436c99cf5b5ecce1dbf47d1bba038fdef66 Mon Sep 17 00:00:00 2001 From: darshanr0107 Date: Mon, 15 Sep 2025 12:00:46 +0530 Subject: [PATCH] docs: fix rendering and ensure tidytree layout is applied on-behalf-of: @Mermaid-Chart --- .../mermaid/src/diagrams/mindmap/mindmapDb.ts | 19 ++++++++++++++++--- .../src/diagrams/mindmap/mindmapTypes.ts | 1 + .../src/docs/.vitepress/theme/mermaid.ts | 8 +++++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/packages/mermaid/src/diagrams/mindmap/mindmapDb.ts b/packages/mermaid/src/diagrams/mindmap/mindmapDb.ts index aebdba71b..a86c3fdc5 100644 --- a/packages/mermaid/src/diagrams/mindmap/mindmapDb.ts +++ b/packages/mermaid/src/diagrams/mindmap/mindmapDb.ts @@ -37,6 +37,7 @@ export class MindmapDB { private nodes: MindmapNode[] = []; private count = 0; private elements: Record = {}; + private baseLevel?: number; public readonly nodeType: typeof nodeType; constructor() { @@ -54,6 +55,7 @@ export class MindmapDB { this.nodes = []; this.count = 0; this.elements = {}; + this.baseLevel = undefined; } public getParent(level: number): MindmapNode | null { @@ -72,6 +74,17 @@ export class MindmapDB { public addNode(level: number, id: string, descr: string, type: number): void { log.info('addNode', level, id, descr, type); + let isRoot = false; + + if (this.nodes.length === 0) { + this.baseLevel = level; + level = 0; + isRoot = true; + } else if (this.baseLevel !== undefined) { + level = level - this.baseLevel; + isRoot = false; + } + const conf = getConfig(); let padding = conf.mindmap?.padding ?? defaultConfig.mindmap.padding; @@ -92,6 +105,7 @@ export class MindmapDB { children: [], width: conf.mindmap?.maxNodeWidth ?? defaultConfig.mindmap.maxNodeWidth, padding, + isRoot, }; const parent = this.getParent(level); @@ -99,7 +113,7 @@ export class MindmapDB { parent.children.push(node); this.nodes.push(node); } else { - if (this.nodes.length === 0) { + if (isRoot) { this.nodes.push(node); } else { throw new Error( @@ -204,8 +218,7 @@ export class MindmapDB { // Build CSS classes for the node const cssClasses = ['mindmap-node']; - // Add section-specific classes - if (node.level === 0) { + if (node.isRoot === true) { // Root node gets special classes cssClasses.push('section-root', 'section--1'); } else if (node.section !== undefined) { diff --git a/packages/mermaid/src/diagrams/mindmap/mindmapTypes.ts b/packages/mermaid/src/diagrams/mindmap/mindmapTypes.ts index be8effab1..aeed2358f 100644 --- a/packages/mermaid/src/diagrams/mindmap/mindmapTypes.ts +++ b/packages/mermaid/src/diagrams/mindmap/mindmapTypes.ts @@ -15,6 +15,7 @@ export interface MindmapNode { icon?: string; x?: number; y?: number; + isRoot?: boolean; } export type FilledMindMapNode = RequiredDeep; diff --git a/packages/mermaid/src/docs/.vitepress/theme/mermaid.ts b/packages/mermaid/src/docs/.vitepress/theme/mermaid.ts index 2357fe384..4b44f20b4 100644 --- a/packages/mermaid/src/docs/.vitepress/theme/mermaid.ts +++ b/packages/mermaid/src/docs/.vitepress/theme/mermaid.ts @@ -1,7 +1,13 @@ import mermaid, { type MermaidConfig } from 'mermaid'; import zenuml from '../../../../../mermaid-zenuml/dist/mermaid-zenuml.core.mjs'; +import tidyTreeLayout from '../../../../../mermaid-layout-tidy-tree/dist/mermaid-layout-tidy-tree.core.mjs'; +import layouts from '../../../../../mermaid-layout-elk/dist/mermaid-layout-elk.core.mjs'; -const init = mermaid.registerExternalDiagrams([zenuml]); +const init = Promise.all([ + mermaid.registerExternalDiagrams([zenuml]), + mermaid.registerLayoutLoaders(layouts), + mermaid.registerLayoutLoaders(tidyTreeLayout), +]); mermaid.registerIconPacks([ { name: 'logos',