@5cover/mermaid-ast 0.0.0-stage → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/README.md +38 -2
  2. package/dist/block.d.ts +157 -0
  3. package/dist/block.d.ts.map +1 -0
  4. package/dist/block.js +295 -0
  5. package/dist/c4.d.ts +270 -0
  6. package/dist/c4.d.ts.map +1 -0
  7. package/dist/c4.js +541 -0
  8. package/dist/class-diagram.d.ts +129 -0
  9. package/dist/class-diagram.d.ts.map +1 -0
  10. package/dist/class-diagram.js +341 -0
  11. package/dist/diagram-wrapper.d.ts +66 -0
  12. package/dist/diagram-wrapper.d.ts.map +1 -0
  13. package/dist/diagram-wrapper.js +59 -0
  14. package/dist/er-diagram.d.ts +214 -0
  15. package/dist/er-diagram.d.ts.map +1 -0
  16. package/dist/er-diagram.js +405 -0
  17. package/dist/flowchart-compress.d.ts +45 -0
  18. package/dist/flowchart-compress.d.ts.map +1 -0
  19. package/dist/flowchart-compress.js +182 -0
  20. package/dist/flowchart-graph-ops.d.ts +58 -0
  21. package/dist/flowchart-graph-ops.d.ts.map +1 -0
  22. package/dist/flowchart-graph-ops.js +262 -0
  23. package/dist/flowchart-types.d.ts +58 -0
  24. package/dist/flowchart-types.d.ts.map +1 -0
  25. package/dist/flowchart-types.js +6 -0
  26. package/dist/flowchart.d.ts +310 -0
  27. package/dist/flowchart.d.ts.map +1 -0
  28. package/dist/flowchart.js +624 -0
  29. package/dist/gantt.d.ts +199 -0
  30. package/dist/gantt.d.ts.map +1 -0
  31. package/dist/gantt.js +452 -0
  32. package/dist/gitgraph.d.ts +171 -0
  33. package/dist/gitgraph.d.ts.map +1 -0
  34. package/dist/gitgraph.js +287 -0
  35. package/dist/index.d.ts +64 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +65 -0
  38. package/dist/journey.d.ts +154 -0
  39. package/dist/journey.d.ts.map +1 -0
  40. package/dist/journey.js +323 -0
  41. package/dist/kanban.d.ts +137 -0
  42. package/dist/kanban.d.ts.map +1 -0
  43. package/dist/kanban.js +296 -0
  44. package/dist/mindmap.d.ts +142 -0
  45. package/dist/mindmap.d.ts.map +1 -0
  46. package/dist/mindmap.js +350 -0
  47. package/dist/parser/block-parser.d.ts +15 -0
  48. package/dist/parser/block-parser.d.ts.map +1 -0
  49. package/dist/parser/block-parser.js +324 -0
  50. package/dist/parser/c4-parser.d.ts +15 -0
  51. package/dist/parser/c4-parser.d.ts.map +1 -0
  52. package/dist/parser/c4-parser.js +406 -0
  53. package/dist/parser/class-parser.d.ts +15 -0
  54. package/dist/parser/class-parser.d.ts.map +1 -0
  55. package/dist/parser/class-parser.js +312 -0
  56. package/dist/parser/er-parser.d.ts +17 -0
  57. package/dist/parser/er-parser.d.ts.map +1 -0
  58. package/dist/parser/er-parser.js +131 -0
  59. package/dist/parser/flowchart-parser.d.ts +17 -0
  60. package/dist/parser/flowchart-parser.d.ts.map +1 -0
  61. package/dist/parser/flowchart-parser.js +496 -0
  62. package/dist/parser/gantt-parser.d.ts +17 -0
  63. package/dist/parser/gantt-parser.d.ts.map +1 -0
  64. package/dist/parser/gantt-parser.js +190 -0
  65. package/dist/parser/gitgraph-parser.d.ts +15 -0
  66. package/dist/parser/gitgraph-parser.d.ts.map +1 -0
  67. package/dist/parser/gitgraph-parser.js +127 -0
  68. package/dist/parser/index.d.ts +44 -0
  69. package/dist/parser/index.d.ts.map +1 -0
  70. package/dist/parser/index.js +158 -0
  71. package/dist/parser/journey-parser.d.ts +17 -0
  72. package/dist/parser/journey-parser.d.ts.map +1 -0
  73. package/dist/parser/journey-parser.js +107 -0
  74. package/dist/parser/kanban-parser.d.ts +17 -0
  75. package/dist/parser/kanban-parser.d.ts.map +1 -0
  76. package/dist/parser/kanban-parser.js +139 -0
  77. package/dist/parser/mindmap-parser.d.ts +17 -0
  78. package/dist/parser/mindmap-parser.d.ts.map +1 -0
  79. package/dist/parser/mindmap-parser.js +204 -0
  80. package/dist/parser/pie-parser.d.ts +24 -0
  81. package/dist/parser/pie-parser.d.ts.map +1 -0
  82. package/dist/parser/pie-parser.js +54 -0
  83. package/dist/parser/quadrant-parser.d.ts +17 -0
  84. package/dist/parser/quadrant-parser.d.ts.map +1 -0
  85. package/dist/parser/quadrant-parser.js +102 -0
  86. package/dist/parser/requirement-parser.d.ts +17 -0
  87. package/dist/parser/requirement-parser.d.ts.map +1 -0
  88. package/dist/parser/requirement-parser.js +172 -0
  89. package/dist/parser/sankey-parser.d.ts +17 -0
  90. package/dist/parser/sankey-parser.d.ts.map +1 -0
  91. package/dist/parser/sankey-parser.js +62 -0
  92. package/dist/parser/sequence-parser.d.ts +16 -0
  93. package/dist/parser/sequence-parser.d.ts.map +1 -0
  94. package/dist/parser/sequence-parser.js +563 -0
  95. package/dist/parser/state-parser.d.ts +17 -0
  96. package/dist/parser/state-parser.d.ts.map +1 -0
  97. package/dist/parser/state-parser.js +220 -0
  98. package/dist/parser/timeline-parser.d.ts +17 -0
  99. package/dist/parser/timeline-parser.d.ts.map +1 -0
  100. package/dist/parser/timeline-parser.js +108 -0
  101. package/dist/parser/xychart-parser.d.ts +17 -0
  102. package/dist/parser/xychart-parser.d.ts.map +1 -0
  103. package/dist/parser/xychart-parser.js +124 -0
  104. package/dist/pie.d.ts +137 -0
  105. package/dist/pie.d.ts.map +1 -0
  106. package/dist/pie.js +223 -0
  107. package/dist/quadrant.d.ts +122 -0
  108. package/dist/quadrant.d.ts.map +1 -0
  109. package/dist/quadrant.js +260 -0
  110. package/dist/renderer/block-renderer.d.ts +16 -0
  111. package/dist/renderer/block-renderer.d.ts.map +1 -0
  112. package/dist/renderer/block-renderer.js +280 -0
  113. package/dist/renderer/c4-renderer.d.ts +12 -0
  114. package/dist/renderer/c4-renderer.d.ts.map +1 -0
  115. package/dist/renderer/c4-renderer.js +305 -0
  116. package/dist/renderer/class-renderer.d.ts +12 -0
  117. package/dist/renderer/class-renderer.d.ts.map +1 -0
  118. package/dist/renderer/class-renderer.js +210 -0
  119. package/dist/renderer/doc.d.ts +372 -0
  120. package/dist/renderer/doc.d.ts.map +1 -0
  121. package/dist/renderer/doc.js +364 -0
  122. package/dist/renderer/er-renderer.d.ts +19 -0
  123. package/dist/renderer/er-renderer.d.ts.map +1 -0
  124. package/dist/renderer/er-renderer.js +148 -0
  125. package/dist/renderer/flowchart-cross.d.ts +34 -0
  126. package/dist/renderer/flowchart-cross.d.ts.map +1 -0
  127. package/dist/renderer/flowchart-cross.js +157 -0
  128. package/dist/renderer/flowchart-renderer.d.ts +12 -0
  129. package/dist/renderer/flowchart-renderer.d.ts.map +1 -0
  130. package/dist/renderer/flowchart-renderer.js +646 -0
  131. package/dist/renderer/gantt-renderer.d.ts +19 -0
  132. package/dist/renderer/gantt-renderer.d.ts.map +1 -0
  133. package/dist/renderer/gantt-renderer.js +121 -0
  134. package/dist/renderer/gitgraph-renderer.d.ts +12 -0
  135. package/dist/renderer/gitgraph-renderer.d.ts.map +1 -0
  136. package/dist/renderer/gitgraph-renderer.js +119 -0
  137. package/dist/renderer/index.d.ts +30 -0
  138. package/dist/renderer/index.d.ts.map +1 -0
  139. package/dist/renderer/index.js +102 -0
  140. package/dist/renderer/journey-renderer.d.ts +19 -0
  141. package/dist/renderer/journey-renderer.d.ts.map +1 -0
  142. package/dist/renderer/journey-renderer.js +40 -0
  143. package/dist/renderer/kanban-renderer.d.ts +12 -0
  144. package/dist/renderer/kanban-renderer.d.ts.map +1 -0
  145. package/dist/renderer/kanban-renderer.js +74 -0
  146. package/dist/renderer/mindmap-renderer.d.ts +19 -0
  147. package/dist/renderer/mindmap-renderer.d.ts.map +1 -0
  148. package/dist/renderer/mindmap-renderer.js +78 -0
  149. package/dist/renderer/pie-renderer.d.ts +12 -0
  150. package/dist/renderer/pie-renderer.d.ts.map +1 -0
  151. package/dist/renderer/pie-renderer.js +25 -0
  152. package/dist/renderer/quadrant-renderer.d.ts +12 -0
  153. package/dist/renderer/quadrant-renderer.d.ts.map +1 -0
  154. package/dist/renderer/quadrant-renderer.js +68 -0
  155. package/dist/renderer/requirement-renderer.d.ts +12 -0
  156. package/dist/renderer/requirement-renderer.d.ts.map +1 -0
  157. package/dist/renderer/requirement-renderer.js +116 -0
  158. package/dist/renderer/sankey-renderer.d.ts +15 -0
  159. package/dist/renderer/sankey-renderer.d.ts.map +1 -0
  160. package/dist/renderer/sankey-renderer.js +31 -0
  161. package/dist/renderer/sequence-renderer.d.ts +12 -0
  162. package/dist/renderer/sequence-renderer.d.ts.map +1 -0
  163. package/dist/renderer/sequence-renderer.js +270 -0
  164. package/dist/renderer/state-diagram-renderer.d.ts +12 -0
  165. package/dist/renderer/state-diagram-renderer.d.ts.map +1 -0
  166. package/dist/renderer/state-diagram-renderer.js +175 -0
  167. package/dist/renderer/state-renderer.d.ts +12 -0
  168. package/dist/renderer/state-renderer.d.ts.map +1 -0
  169. package/dist/renderer/state-renderer.js +127 -0
  170. package/dist/renderer/timeline-renderer.d.ts +22 -0
  171. package/dist/renderer/timeline-renderer.d.ts.map +1 -0
  172. package/dist/renderer/timeline-renderer.js +33 -0
  173. package/dist/renderer/xychart-renderer.d.ts +12 -0
  174. package/dist/renderer/xychart-renderer.d.ts.map +1 -0
  175. package/dist/renderer/xychart-renderer.js +85 -0
  176. package/dist/requirement.d.ts +258 -0
  177. package/dist/requirement.d.ts.map +1 -0
  178. package/dist/requirement.js +416 -0
  179. package/dist/sankey.d.ts +120 -0
  180. package/dist/sankey.d.ts.map +1 -0
  181. package/dist/sankey.js +217 -0
  182. package/dist/sequence.d.ts +134 -0
  183. package/dist/sequence.d.ts.map +1 -0
  184. package/dist/sequence.js +457 -0
  185. package/dist/state-diagram.d.ts +117 -0
  186. package/dist/state-diagram.d.ts.map +1 -0
  187. package/dist/state-diagram.js +331 -0
  188. package/dist/timeline.d.ts +154 -0
  189. package/dist/timeline.d.ts.map +1 -0
  190. package/dist/timeline.js +340 -0
  191. package/dist/types/block.d.ts +184 -0
  192. package/dist/types/block.d.ts.map +1 -0
  193. package/dist/types/block.js +66 -0
  194. package/dist/types/c4.d.ts +227 -0
  195. package/dist/types/c4.d.ts.map +1 -0
  196. package/dist/types/c4.js +62 -0
  197. package/dist/types/class.d.ts +64 -0
  198. package/dist/types/class.d.ts.map +1 -0
  199. package/dist/types/class.js +17 -0
  200. package/dist/types/er.d.ts +105 -0
  201. package/dist/types/er.d.ts.map +1 -0
  202. package/dist/types/er.js +19 -0
  203. package/dist/types/flowchart.d.ts +107 -0
  204. package/dist/types/flowchart.d.ts.map +1 -0
  205. package/dist/types/flowchart.js +22 -0
  206. package/dist/types/gantt.d.ts +101 -0
  207. package/dist/types/gantt.d.ts.map +1 -0
  208. package/dist/types/gantt.js +18 -0
  209. package/dist/types/gitgraph.d.ts +73 -0
  210. package/dist/types/gitgraph.d.ts.map +1 -0
  211. package/dist/types/gitgraph.js +14 -0
  212. package/dist/types/index.d.ts +123 -0
  213. package/dist/types/index.d.ts.map +1 -0
  214. package/dist/types/index.js +132 -0
  215. package/dist/types/journey.d.ts +44 -0
  216. package/dist/types/journey.d.ts.map +1 -0
  217. package/dist/types/journey.js +14 -0
  218. package/dist/types/kanban.d.ts +77 -0
  219. package/dist/types/kanban.d.ts.map +1 -0
  220. package/dist/types/kanban.js +53 -0
  221. package/dist/types/mindmap.d.ts +45 -0
  222. package/dist/types/mindmap.d.ts.map +1 -0
  223. package/dist/types/mindmap.js +13 -0
  224. package/dist/types/pie.d.ts +37 -0
  225. package/dist/types/pie.d.ts.map +1 -0
  226. package/dist/types/pie.js +16 -0
  227. package/dist/types/quadrant.d.ts +66 -0
  228. package/dist/types/quadrant.d.ts.map +1 -0
  229. package/dist/types/quadrant.js +15 -0
  230. package/dist/types/render-options.d.ts +103 -0
  231. package/dist/types/render-options.d.ts.map +1 -0
  232. package/dist/types/render-options.js +52 -0
  233. package/dist/types/requirement.d.ts +102 -0
  234. package/dist/types/requirement.d.ts.map +1 -0
  235. package/dist/types/requirement.js +20 -0
  236. package/dist/types/sankey.d.ts +40 -0
  237. package/dist/types/sankey.d.ts.map +1 -0
  238. package/dist/types/sankey.js +15 -0
  239. package/dist/types/sequence.d.ts +188 -0
  240. package/dist/types/sequence.d.ts.map +1 -0
  241. package/dist/types/sequence.js +17 -0
  242. package/dist/types/state.d.ts +150 -0
  243. package/dist/types/state.d.ts.map +1 -0
  244. package/dist/types/state.js +20 -0
  245. package/dist/types/timeline.d.ts +51 -0
  246. package/dist/types/timeline.d.ts.map +1 -0
  247. package/dist/types/timeline.js +14 -0
  248. package/dist/types/xychart.d.ts +84 -0
  249. package/dist/types/xychart.d.ts.map +1 -0
  250. package/dist/types/xychart.js +14 -0
  251. package/dist/utils.d.ts +29 -0
  252. package/dist/utils.d.ts.map +1 -0
  253. package/dist/utils.js +30 -0
  254. package/dist/vendored/AGENTS.md +34 -0
  255. package/dist/vendored/LICENSE +21 -0
  256. package/dist/vendored/VERSION +1 -0
  257. package/dist/vendored/grammars/block.jison +293 -0
  258. package/dist/vendored/grammars/c4.jison +322 -0
  259. package/dist/vendored/grammars/class.jison +440 -0
  260. package/dist/vendored/grammars/er.jison +336 -0
  261. package/dist/vendored/grammars/flowchart.jison +635 -0
  262. package/dist/vendored/grammars/gantt.jison +188 -0
  263. package/dist/vendored/grammars/journey.jison +69 -0
  264. package/dist/vendored/grammars/kanban.jison +166 -0
  265. package/dist/vendored/grammars/mindmap.jison +127 -0
  266. package/dist/vendored/grammars/quadrant.jison +189 -0
  267. package/dist/vendored/grammars/requirement.jison +267 -0
  268. package/dist/vendored/grammars/sankey.jison +67 -0
  269. package/dist/vendored/grammars/sequence.jison +421 -0
  270. package/dist/vendored/grammars/state.jison +353 -0
  271. package/dist/vendored/grammars/timeline.jison +87 -0
  272. package/dist/vendored/grammars/xychart.jison +177 -0
  273. package/dist/vendored/parsers/block.js +900 -0
  274. package/dist/vendored/parsers/c4.js +915 -0
  275. package/dist/vendored/parsers/class.js +1011 -0
  276. package/dist/vendored/parsers/er.js +979 -0
  277. package/dist/vendored/parsers/flowchart.js +1136 -0
  278. package/dist/vendored/parsers/gantt.js +802 -0
  279. package/dist/vendored/parsers/journey.js +655 -0
  280. package/dist/vendored/parsers/kanban.js +745 -0
  281. package/dist/vendored/parsers/mindmap.js +703 -0
  282. package/dist/vendored/parsers/quadrant.js +784 -0
  283. package/dist/vendored/parsers/requirement.js +871 -0
  284. package/dist/vendored/parsers/sankey.js +616 -0
  285. package/dist/vendored/parsers/sequence.js +1090 -0
  286. package/dist/vendored/parsers/state.js +928 -0
  287. package/dist/vendored/parsers/timeline.js +666 -0
  288. package/dist/vendored/parsers/xychart.js +763 -0
  289. package/dist/vendored/sync-info.json +88 -0
  290. package/dist/xychart.d.ts +234 -0
  291. package/dist/xychart.d.ts.map +1 -0
  292. package/dist/xychart.js +442 -0
  293. package/package.json +84 -4
package/README.md CHANGED
@@ -1,3 +1,39 @@
1
- # Temporary Holding Version
1
+ # Mermaid Tools Monorepo
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ This repository contains tools for working with Mermaid diagrams.
4
+
5
+ ## Packages
6
+
7
+ | Package | Description | npm | JSR |
8
+ |---------|-------------|-----|-----|
9
+ | [mermaid-ast](./packages/mermaid-ast/) | Parse and render Mermaid diagrams to/from AST | [![npm](https://img.shields.io/npm/v/mermaid-ast)](https://www.npmjs.com/package/mermaid-ast) | [![JSR](https://jsr.io/badges/@emily/mermaid-ast)](https://jsr.io/@emily/mermaid-ast) |
10
+ | [mermaid-svg](./packages/mermaid-svg/) | Render Mermaid diagrams to SVG | - | - |
11
+
12
+ ## mermaid-ast
13
+
14
+ **Parses all 18 diagram types supported by mermaid.js and renders them back to text.**
15
+
16
+ Features:
17
+ - Full round-trip fidelity: `render(parse(text))` produces semantically equivalent diagrams
18
+ - Wrapper classes for programmatic diagram manipulation
19
+ - Works in Bun, Node.js, and Deno
20
+
21
+ See the [mermaid-ast README](./packages/mermaid-ast/README.md) for full documentation, API reference, and examples.
22
+
23
+ ## Development
24
+
25
+ ```bash
26
+ bun install # Install dependencies
27
+ just test # Run all tests
28
+ just # See all available commands
29
+ ```
30
+
31
+ ## Releasing
32
+
33
+ > **IMPORTANT:** Follow the release procedure exactly. Do not release manually.
34
+ >
35
+ > See [.agents/procedures/release.md](.agents/procedures/release.md) for the complete release procedure.
36
+
37
+ ## License
38
+
39
+ MIT
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Block Diagram Wrapper Class
3
+ *
4
+ * Provides a fluent API for creating and manipulating block-beta diagrams.
5
+ */
6
+ import { DiagramWrapper } from './diagram-wrapper.js';
7
+ import type { BlockAST, BlockArrowDirection, BlockComposite, BlockEdge, BlockEdgeType, BlockNode, BlockNodeShape, BlockSpace } from './types/block.js';
8
+ import type { RenderOptions } from './types/render-options.js';
9
+ /**
10
+ * Options for adding a node
11
+ */
12
+ export interface AddBlockNodeOptions {
13
+ /** Node label (defaults to id if not provided) */
14
+ label?: string;
15
+ /** Node shape */
16
+ shape?: BlockNodeShape;
17
+ /** Width in columns */
18
+ widthInColumns?: number;
19
+ /** Directions for block arrows */
20
+ directions?: BlockArrowDirection[];
21
+ }
22
+ /**
23
+ * Options for adding an edge
24
+ */
25
+ export interface AddBlockEdgeOptions {
26
+ /** Edge label */
27
+ label?: string;
28
+ /** Edge type */
29
+ edgeType?: BlockEdgeType;
30
+ }
31
+ /**
32
+ * Block diagram wrapper class
33
+ */
34
+ export declare class Block extends DiagramWrapper<BlockAST> {
35
+ private constructor();
36
+ /**
37
+ * Creates an empty block diagram
38
+ */
39
+ static create(): Block;
40
+ /**
41
+ * Creates a Block from an existing AST
42
+ */
43
+ static from(ast: BlockAST): Block;
44
+ /**
45
+ * Parses Mermaid block-beta syntax into a Block
46
+ */
47
+ static parse(text: string): Block;
48
+ /**
49
+ * Renders the block diagram to Mermaid syntax
50
+ */
51
+ render(options?: RenderOptions): string;
52
+ /**
53
+ * Creates a deep clone of this diagram
54
+ */
55
+ clone(): Block;
56
+ /**
57
+ * Sets the number of columns for the layout
58
+ */
59
+ setColumns(columns: number | 'auto'): this;
60
+ /**
61
+ * Gets the current column setting
62
+ */
63
+ getColumns(): number | 'auto' | undefined;
64
+ /**
65
+ * Adds a node to the diagram
66
+ */
67
+ addNode(id: string, options?: AddBlockNodeOptions): this;
68
+ /**
69
+ * Gets a node by id
70
+ */
71
+ getNode(id: string): BlockNode | undefined;
72
+ /**
73
+ * Finds all nodes in the diagram (including nested)
74
+ */
75
+ findNodes(): BlockNode[];
76
+ /**
77
+ * Removes a node by id
78
+ */
79
+ removeNode(id: string): this;
80
+ /**
81
+ * Gets the number of nodes
82
+ */
83
+ get nodeCount(): number;
84
+ /**
85
+ * Adds an edge between two nodes
86
+ */
87
+ addEdge(from: string, to: string, options?: AddBlockEdgeOptions): this;
88
+ /**
89
+ * Finds all edges in the diagram
90
+ */
91
+ findEdges(): BlockEdge[];
92
+ /**
93
+ * Removes an edge by id or by source/target
94
+ */
95
+ removeEdge(idOrFrom: string, to?: string): this;
96
+ /**
97
+ * Gets the number of edges
98
+ */
99
+ get edgeCount(): number;
100
+ /**
101
+ * Adds a space block for layout
102
+ */
103
+ addSpace(width?: number): this;
104
+ /**
105
+ * Finds all space blocks
106
+ */
107
+ findSpaces(): BlockSpace[];
108
+ /**
109
+ * Adds a composite (nested) block
110
+ */
111
+ addComposite(id: string, label?: string): this;
112
+ /**
113
+ * Gets a composite block by id
114
+ */
115
+ getComposite(id: string): BlockComposite | undefined;
116
+ /**
117
+ * Finds all composite blocks
118
+ */
119
+ findComposites(): BlockComposite[];
120
+ /**
121
+ * Defines a CSS class
122
+ */
123
+ defineClass(name: string, css: string): this;
124
+ /**
125
+ * Applies a class to nodes
126
+ */
127
+ applyClass(nodeIds: string | string[], className: string): this;
128
+ /**
129
+ * Applies inline styles to nodes
130
+ */
131
+ applyStyles(nodeIds: string | string[], styles: string): this;
132
+ /**
133
+ * Gets all defined classes
134
+ */
135
+ getClassDefs(): Map<string, string>;
136
+ /**
137
+ * Sets the accessibility title
138
+ */
139
+ setAccTitle(title: string): this;
140
+ /**
141
+ * Gets the accessibility title
142
+ */
143
+ getAccTitle(): string | undefined;
144
+ /**
145
+ * Sets the accessibility description
146
+ */
147
+ setAccDescr(descr: string): this;
148
+ /**
149
+ * Gets the accessibility description
150
+ */
151
+ getAccDescr(): string | undefined;
152
+ /**
153
+ * Gets the total number of elements
154
+ */
155
+ get elementCount(): number;
156
+ }
157
+ //# sourceMappingURL=block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../src/block.ts"],"names":[],"mappings":"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"}
package/dist/block.js ADDED
@@ -0,0 +1,295 @@
1
+ /**
2
+ * Block Diagram Wrapper Class
3
+ *
4
+ * Provides a fluent API for creating and manipulating block-beta diagrams.
5
+ */
6
+ import { DiagramWrapper } from './diagram-wrapper.js';
7
+ import { parseBlock } from './parser/block-parser.js';
8
+ import { renderBlock } from './renderer/block-renderer.js';
9
+ import { createEmptyBlockAST, isBlockComposite, isBlockEdge, isBlockNode, isBlockSpace, } from './types/block.js';
10
+ /**
11
+ * Block diagram wrapper class
12
+ */
13
+ export class Block extends DiagramWrapper {
14
+ constructor(ast) {
15
+ super(ast);
16
+ }
17
+ /**
18
+ * Creates an empty block diagram
19
+ */
20
+ static create() {
21
+ return new Block(createEmptyBlockAST());
22
+ }
23
+ /**
24
+ * Creates a Block from an existing AST
25
+ */
26
+ static from(ast) {
27
+ return new Block(ast);
28
+ }
29
+ /**
30
+ * Parses Mermaid block-beta syntax into a Block
31
+ */
32
+ static parse(text) {
33
+ return new Block(parseBlock(text));
34
+ }
35
+ /**
36
+ * Renders the block diagram to Mermaid syntax
37
+ */
38
+ render(options) {
39
+ return renderBlock(this.ast, options);
40
+ }
41
+ /**
42
+ * Creates a deep clone of this diagram
43
+ */
44
+ clone() {
45
+ return Block.parse(this.render());
46
+ }
47
+ // ============ Column Operations ============
48
+ /**
49
+ * Sets the number of columns for the layout
50
+ */
51
+ setColumns(columns) {
52
+ // Remove any existing column settings
53
+ this.ast.elements = this.ast.elements.filter((e) => !('type' in e && e.type === 'column-setting'));
54
+ // Add new column setting at the beginning
55
+ const setting = {
56
+ type: 'column-setting',
57
+ columns: columns === 'auto' ? -1 : columns,
58
+ };
59
+ this.ast.elements.unshift(setting);
60
+ return this;
61
+ }
62
+ /**
63
+ * Gets the current column setting
64
+ */
65
+ getColumns() {
66
+ const setting = this.ast.elements.find((e) => 'type' in e && e.type === 'column-setting');
67
+ if (!setting)
68
+ return undefined;
69
+ return setting.columns === -1 ? 'auto' : setting.columns;
70
+ }
71
+ // ============ Node Operations ============
72
+ /**
73
+ * Adds a node to the diagram
74
+ */
75
+ addNode(id, options) {
76
+ const node = {
77
+ id,
78
+ label: options?.label,
79
+ shape: options?.shape || 'square',
80
+ widthInColumns: options?.widthInColumns || 1,
81
+ directions: options?.directions,
82
+ };
83
+ this.ast.elements.push(node);
84
+ return this;
85
+ }
86
+ /**
87
+ * Gets a node by id
88
+ */
89
+ getNode(id) {
90
+ return this.findNodes().find((n) => n.id === id);
91
+ }
92
+ /**
93
+ * Finds all nodes in the diagram (including nested)
94
+ */
95
+ findNodes() {
96
+ const nodes = [];
97
+ const collectNodes = (elements) => {
98
+ for (const elem of elements) {
99
+ if (isBlockNode(elem)) {
100
+ nodes.push(elem);
101
+ }
102
+ else if (isBlockComposite(elem)) {
103
+ collectNodes(elem.children);
104
+ }
105
+ }
106
+ };
107
+ collectNodes(this.ast.elements);
108
+ return nodes;
109
+ }
110
+ /**
111
+ * Removes a node by id
112
+ */
113
+ removeNode(id) {
114
+ this.ast.elements = this.ast.elements.filter((e) => !isBlockNode(e) || e.id !== id);
115
+ return this;
116
+ }
117
+ /**
118
+ * Gets the number of nodes
119
+ */
120
+ get nodeCount() {
121
+ return this.findNodes().length;
122
+ }
123
+ // ============ Edge Operations ============
124
+ /**
125
+ * Adds an edge between two nodes
126
+ */
127
+ addEdge(from, to, options) {
128
+ const edge = {
129
+ id: `${from}-${to}`,
130
+ start: from,
131
+ end: to,
132
+ label: options?.label,
133
+ edgeType: options?.edgeType || 'arrow',
134
+ };
135
+ this.ast.elements.push(edge);
136
+ return this;
137
+ }
138
+ /**
139
+ * Finds all edges in the diagram
140
+ */
141
+ findEdges() {
142
+ return this.ast.elements.filter(isBlockEdge);
143
+ }
144
+ /**
145
+ * Removes an edge by id or by source/target
146
+ */
147
+ removeEdge(idOrFrom, to) {
148
+ if (to) {
149
+ // Remove by source/target
150
+ this.ast.elements = this.ast.elements.filter((e) => !isBlockEdge(e) || !(e.start === idOrFrom && e.end === to));
151
+ }
152
+ else {
153
+ // Remove by id
154
+ this.ast.elements = this.ast.elements.filter((e) => !isBlockEdge(e) || e.id !== idOrFrom);
155
+ }
156
+ return this;
157
+ }
158
+ /**
159
+ * Gets the number of edges
160
+ */
161
+ get edgeCount() {
162
+ return this.findEdges().length;
163
+ }
164
+ // ============ Space Operations ============
165
+ /**
166
+ * Adds a space block for layout
167
+ */
168
+ addSpace(width = 1) {
169
+ const space = {
170
+ id: `space_${Date.now()}`,
171
+ type: 'space',
172
+ width,
173
+ };
174
+ this.ast.elements.push(space);
175
+ return this;
176
+ }
177
+ /**
178
+ * Finds all space blocks
179
+ */
180
+ findSpaces() {
181
+ return this.ast.elements.filter(isBlockSpace);
182
+ }
183
+ // ============ Composite Block Operations ============
184
+ /**
185
+ * Adds a composite (nested) block
186
+ */
187
+ addComposite(id, label) {
188
+ const composite = {
189
+ id,
190
+ type: 'composite',
191
+ label,
192
+ children: [],
193
+ };
194
+ this.ast.elements.push(composite);
195
+ return this;
196
+ }
197
+ /**
198
+ * Gets a composite block by id
199
+ */
200
+ getComposite(id) {
201
+ return this.ast.elements.find((e) => isBlockComposite(e) && e.id === id);
202
+ }
203
+ /**
204
+ * Finds all composite blocks
205
+ */
206
+ findComposites() {
207
+ return this.ast.elements.filter(isBlockComposite);
208
+ }
209
+ // ============ Style Operations ============
210
+ /**
211
+ * Defines a CSS class
212
+ */
213
+ defineClass(name, css) {
214
+ const classDef = {
215
+ type: 'classDef',
216
+ id: name,
217
+ css,
218
+ };
219
+ this.ast.classDefs.set(name, css);
220
+ this.ast.elements.push(classDef);
221
+ return this;
222
+ }
223
+ /**
224
+ * Applies a class to nodes
225
+ */
226
+ applyClass(nodeIds, className) {
227
+ const ids = Array.isArray(nodeIds) ? nodeIds.join(', ') : nodeIds;
228
+ const applyClass = {
229
+ type: 'applyClass',
230
+ id: ids,
231
+ styleClass: className,
232
+ };
233
+ for (const nodeId of Array.isArray(nodeIds) ? nodeIds : [nodeIds]) {
234
+ this.ast.classAssignments.set(nodeId, className);
235
+ }
236
+ this.ast.elements.push(applyClass);
237
+ return this;
238
+ }
239
+ /**
240
+ * Applies inline styles to nodes
241
+ */
242
+ applyStyles(nodeIds, styles) {
243
+ const ids = Array.isArray(nodeIds) ? nodeIds.join(', ') : nodeIds;
244
+ const applyStyles = {
245
+ type: 'applyStyles',
246
+ id: ids,
247
+ stylesStr: styles,
248
+ };
249
+ for (const nodeId of Array.isArray(nodeIds) ? nodeIds : [nodeIds]) {
250
+ this.ast.styleAssignments.set(nodeId, styles);
251
+ }
252
+ this.ast.elements.push(applyStyles);
253
+ return this;
254
+ }
255
+ /**
256
+ * Gets all defined classes
257
+ */
258
+ getClassDefs() {
259
+ return new Map(this.ast.classDefs);
260
+ }
261
+ // ============ Accessibility ============
262
+ /**
263
+ * Sets the accessibility title
264
+ */
265
+ setAccTitle(title) {
266
+ this.ast.accTitle = title;
267
+ return this;
268
+ }
269
+ /**
270
+ * Gets the accessibility title
271
+ */
272
+ getAccTitle() {
273
+ return this.ast.accTitle;
274
+ }
275
+ /**
276
+ * Sets the accessibility description
277
+ */
278
+ setAccDescr(descr) {
279
+ this.ast.accDescr = descr;
280
+ return this;
281
+ }
282
+ /**
283
+ * Gets the accessibility description
284
+ */
285
+ getAccDescr() {
286
+ return this.ast.accDescr;
287
+ }
288
+ // ============ Element Count ============
289
+ /**
290
+ * Gets the total number of elements
291
+ */
292
+ get elementCount() {
293
+ return this.ast.elements.length;
294
+ }
295
+ }