diff --git a/packages/mermaid/src/diagrams/mindmap/mindmapDb.ts b/packages/mermaid/src/diagrams/mindmap/mindmapDb.ts index c14fe26e0..a02f0be83 100644 --- a/packages/mermaid/src/diagrams/mindmap/mindmapDb.ts +++ b/packages/mermaid/src/diagrams/mindmap/mindmapDb.ts @@ -5,6 +5,7 @@ import { log } from '../../logger.js'; import type { MindmapNode } from './mindmapTypes.js'; import defaultConfig from '../../defaultConfig.js'; import type { LayoutData, Node, Edge } from '../../rendering-util/types.js'; +import { getUserDefinedConfig } from '../../config.js'; // Extend Node type for mindmap-specific properties export type MindmapLayoutNode = Node & { @@ -325,11 +326,21 @@ export class MindmapDB { const mindmapRoot = this.getMindmap(); const config = getConfig(); + const userDefinedConfig = getUserDefinedConfig(); + const hasUserDefinedLayout = userDefinedConfig.layout !== undefined; + + const finalConfig = { ...config }; + if (!hasUserDefinedLayout) { + finalConfig.layout = 'cose-bilkent'; + } else { + finalConfig.layout = userDefinedConfig.layout; + } + if (!mindmapRoot) { return { nodes: [], edges: [], - config, + config: finalConfig, }; } log.debug('getData: mindmapRoot', mindmapRoot, config); @@ -362,7 +373,7 @@ export class MindmapDB { return { nodes: processedNodes, edges: processedEdges, - config, + config: finalConfig, // Store the root node for mindmap-specific layout algorithms rootNode: mindmapRoot, // Properties required by dagre layout algorithm diff --git a/packages/mermaid/src/diagrams/mindmap/mindmapRenderer.ts b/packages/mermaid/src/diagrams/mindmap/mindmapRenderer.ts index 910bc740b..7a8fcc011 100644 --- a/packages/mermaid/src/diagrams/mindmap/mindmapRenderer.ts +++ b/packages/mermaid/src/diagrams/mindmap/mindmapRenderer.ts @@ -32,7 +32,7 @@ function _updateNodeDimensions(data4Layout: LayoutData, mindmapRoot: FilledMindM export const draw: DrawDefinition = async (text, id, _version, diagObj) => { log.debug('Rendering mindmap diagram\n' + text); - const { securityLevel, mindmap: conf, layout } = getConfig(); + const { securityLevel, mindmap: conf } = getConfig(); // Draw the nodes first to get their dimensions, then update the layout data const db = diagObj.db as MindmapDB; @@ -45,7 +45,7 @@ export const draw: DrawDefinition = async (text, id, _version, diagObj) => { const svg = getDiagramElement(id, securityLevel); data4Layout.type = diagObj.type; - data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout, { + data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(data4Layout.config.layout, { fallback: 'cose-bilkent', }); // For mindmap diagrams, prioritize mindmap-specific layout algorithm configuration diff --git a/packages/mermaid/src/preprocess.ts b/packages/mermaid/src/preprocess.ts index 810dc48f2..2334ff0b1 100644 --- a/packages/mermaid/src/preprocess.ts +++ b/packages/mermaid/src/preprocess.ts @@ -1,5 +1,4 @@ import { cleanupComments } from './diagram-api/comments.js'; -import { detectType } from './diagram-api/detectType.js'; import { extractFrontMatter } from './diagram-api/frontmatter.js'; import type { DiagramMetadata } from './diagram-api/types.js'; import utils, { cleanAndMerge, removeDirectives } from './utils.js'; @@ -19,7 +18,6 @@ const cleanupText = (code: string) => { const processFrontmatter = (code: string) => { const { text, metadata } = extractFrontMatter(code); - const diagramType = detectType(text); const { displayMode, title, config = {} } = metadata; if (displayMode) { // Needs to be supported for legacy reasons @@ -28,9 +26,7 @@ const processFrontmatter = (code: string) => { } config.gantt.displayMode = displayMode; } - if (diagramType === 'mindmap' && !config.layout) { - config.layout = 'cose-bilkent'; // Default layout for mindmap - } + return { title, config, text }; };