collab/mermaid/docs/diagrams/mindmap-implementation-sequence.mmdblame
View source
6dd74de1---
6dd74de2references:
6dd74de3 - "File: /packages/mermaid/src/diagrams/mindmap/mindmap-definition.ts"
6dd74de4 - "File: /packages/mermaid/src/diagrams/mindmap/mindmapDb.ts"
6dd74de5 - "File: /packages/mermaid/src/diagrams/mindmap/detector.ts"
6dd74de6 - "File: /packages/mermaid/src/diagrams/mindmap/mindmapTypes.ts"
6dd74de7 - "File: /packages/mermaid/src/diagrams/mindmap/mindmapRenderer.ts"
6dd74de8 - "File: /packages/mermaid/src/diagrams/mindmap/styles.ts"
6dd74de9 - "File: /packages/mermaid/src/diagrams/mindmap/svgDraw.ts"
6dd74de10generationTime: 2025-01-28T16:00:00.000Z
6dd74de11---
6dd74de12sequenceDiagram
6dd74de13 participant User as User Input Text
6dd74de14 participant Detector as detector.ts
6dd74de15 participant Loader as DiagramLoader
6dd74de16 participant Definition as mindmap-definition.ts
6dd74de17 participant Parser as parser/mindmap.jison
6dd74de18 participant DB as MindmapDB
6dd74de19 participant Renderer as mindmapRenderer.ts
6dd74de20 participant Cytoscape as cytoscape.js
6dd74de21 participant SVGDraw as svgDraw.ts
6dd74de22 participant Styles as styles.ts
6dd74de23 participant Output as Final SVG
6dd74de24
6dd74de25 Note over User, Output: Mindmap Implementation Flow
6dd74de26
6dd74de27 %% Detection Phase
6dd74de28 User->>Detector: /^\s*mindmap/ text input
6dd74de29 activate Detector
6dd74de30 Detector->>Detector: detector(txt) validates pattern
6dd74de31 Detector->>Loader: loader() function called
6dd74de32 deactivate Detector
6dd74de33
6dd74de34 activate Loader
6dd74de35 Loader->>Definition: import mindmap-definition.js
6dd74de36 deactivate Loader
6dd74de37
6dd74de38 %% Core Structure Setup
6dd74de39 activate Definition
6dd74de40 Definition->>DB: get db() → new MindmapDB()
6dd74de41 Definition->>Renderer: setup renderer
6dd74de42 Definition->>Parser: setup parser
6dd74de43 Definition->>Styles: setup styles
6dd74de44 deactivate Definition
6dd74de45
6dd74de46 %% Database Initialization
6dd74de47 activate DB
6dd74de48 Note over DB: MindmapDB Constructor
6dd74de49 DB->>DB: initialize nodes array
6dd74de50 DB->>DB: setup nodeType constants
6dd74de51 DB->>DB: bind methods
6dd74de52 DB->>DB: clear() state
6dd74de53
6dd74de54 %% Parsing Phase
6dd74de55 activate Parser
6dd74de56 User->>Parser: mindmap syntax text
6dd74de57
6dd74de58 loop For each node in hierarchy
6dd74de59 Parser->>DB: addNode(level, id, descr, type)
6dd74de60 activate DB
6dd74de61 DB->>DB: sanitizeText(id, descr)
6dd74de62 DB->>DB: getType(startStr, endStr)
6dd74de63 Note right of DB: Shape Detection:<br/>[ → RECT<br/>( → ROUNDED_RECT<br/>(( → CIRCLE<br/>)) → BANG<br/>{{ → HEXAGON
6dd74de64 DB->>DB: getParent(level)
6dd74de65 DB->>DB: create MindmapNode
6dd74de66 DB->>DB: add to hierarchy
6dd74de67 deactivate DB
6dd74de68 end
6dd74de69
6dd74de70 opt Icon/Class Decoration
6dd74de71 Parser->>DB: decorateNode(decoration)
6dd74de72 DB->>DB: set icon/class properties
6dd74de73 end
6dd74de74 deactivate Parser
6dd74de75
6dd74de76 %% Data Preparation
6dd74de77 Renderer->>DB: getData() for layout
6dd74de78 activate DB
6dd74de79 DB->>DB: collect all nodes
6dd74de80 DB->>DB: build parent-child relationships
6dd74de81 DB-->>Renderer: return node hierarchy
6dd74de82 deactivate DB
6dd74de83
6dd74de84 %% Rendering Pipeline
6dd74de85 activate Renderer
6dd74de86 Note over Renderer: Rendering Phase
6dd74de87
6dd74de88 Renderer->>Cytoscape: initialize cytoscape
6dd74de89 activate Cytoscape
6dd74de90
6dd74de91 loop For each node in mindmap
6dd74de92 Renderer->>Cytoscape: addNodes(mindmap, cy, conf, level)
6dd74de93 Cytoscape->>Cytoscape: create node data
6dd74de94 Cytoscape->>Cytoscape: set position (x, y)
6dd74de95 end
6dd74de96
6dd74de97 loop For parent-child relationships
6dd74de98 Renderer->>Cytoscape: add edges
6dd74de99 Cytoscape->>Cytoscape: create edge data
6dd74de100 end
6dd74de101
6dd74de102 Renderer->>Cytoscape: configure cose-bilkent layout
6dd74de103 Cytoscape->>Cytoscape: calculate optimal positions
6dd74de104 Cytoscape-->>Renderer: return positioned graph
6dd74de105 deactivate Cytoscape
6dd74de106
6dd74de107 %% SVG Generation
6dd74de108 Renderer->>SVGDraw: drawNodes(db, svg, mindmap, section, conf)
6dd74de109 activate SVGDraw
6dd74de110
6dd74de111 loop For each node recursively
6dd74de112 SVGDraw->>SVGDraw: select shape function
6dd74de113
6dd74de114 alt Default Shape
6dd74de115 SVGDraw->>SVGDraw: defaultBkg() - rounded rectangle
6dd74de116 else Rectangle Shape
6dd74de117 SVGDraw->>SVGDraw: rectBkg() - sharp corners
6dd74de118 else Circle Shape
6dd74de119 SVGDraw->>SVGDraw: circleBkg() - perfect circle
6dd74de120 else Cloud Shape
6dd74de121 SVGDraw->>SVGDraw: cloudBkg() - organic curves
6dd74de122 else Bang Shape
6dd74de123 SVGDraw->>SVGDraw: bangBkg() - explosion style
6dd74de124 else Hexagon Shape
6dd74de125 SVGDraw->>SVGDraw: hexagonBkg() - six sides
6dd74de126 end
6dd74de127
6dd74de128 SVGDraw->>SVGDraw: create SVG elements
6dd74de129 SVGDraw->>SVGDraw: add text labels
6dd74de130 SVGDraw->>SVGDraw: position node
6dd74de131
6dd74de132 opt Node has children
6dd74de133 SVGDraw->>SVGDraw: drawNodes() recursive call
6dd74de134 end
6dd74de135 end
6dd74de136 deactivate SVGDraw
6dd74de137
6dd74de138 %% Edge Rendering
6dd74de139 Renderer->>Renderer: drawEdges(edgesEl, cy)
6dd74de140 loop For each edge
6dd74de141 Renderer->>Renderer: extract edge bounds
6dd74de142 Renderer->>Renderer: draw SVG path
6dd74de143 end
6dd74de144
6dd74de145 %% Styling Application
6dd74de146 Renderer->>Styles: getStyles(options)
6dd74de147 activate Styles
6dd74de148
6dd74de149 Styles->>Styles: genSections(options)
6dd74de150 loop For THEME_COLOR_LIMIT sections
6dd74de151 Styles->>Styles: generate color scale
6dd74de152 Styles->>Styles: create CSS rules
6dd74de153 Note right of Styles: .section-X fills<br/>.edge-depth-X widths<br/>.node-icon-X colors
6dd74de154 end
6dd74de155
6dd74de156 Styles->>Styles: apply theme integration
6dd74de157 Styles-->>Renderer: return compiled CSS
6dd74de158 deactivate Styles
6dd74de159
6dd74de160 %% Final Assembly
6dd74de161 Renderer->>Output: selectSvgElement()
6dd74de162 Renderer->>Output: setupGraphViewbox()
6dd74de163 Renderer->>Output: apply styles
6dd74de164 Renderer->>Output: add interactive elements
6dd74de165 deactivate Renderer
6dd74de166
6dd74de167 activate Output
6dd74de168 Note over Output: Final Mindmap Features
6dd74de169 Output->>Output: responsive layout
6dd74de170 Output->>Output: accessibility attributes
6dd74de171 Output->>Output: hover effects
6dd74de172 Output->>Output: click handling
6dd74de173 Output-->>User: rendered mindmap
6dd74de174 deactivate Output
6dd74de175
6dd74de176 %% Configuration Details
6dd74de177 Note over DB, Styles: Configuration Options
6dd74de178 Note right of DB: Padding Calculations:<br/>Base padding from config<br/>RECT: ×2 padding<br/>ROUNDED_RECT: ×2 padding<br/>HEXAGON: ×2 padding
6dd74de179 Note right of Styles: Section Management:<br/>MAX_SECTIONS = 12<br/>Dynamic color generation<br/>Git theme integration
6dd74de180 Note right of Renderer: Layout Parameters:<br/>Cytoscape configuration<br/>coseBilkent settings<br/>Node spacing rules