zombie-mermaid 2.2.3 → 2.2.6

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 (321) hide show
  1. package/README.md +4 -4
  2. package/dist/ascii.cjs +1 -11
  3. package/dist/ascii.d.cts +1 -167
  4. package/dist/ascii.d.ts +1 -167
  5. package/dist/ascii.js +1 -6591
  6. package/dist/cli.js +836 -10946
  7. package/dist/index.cjs +2 -81
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.cts +42 -680
  10. package/dist/index.d.ts +42 -680
  11. package/dist/index.js +408 -10002
  12. package/dist/index.js.map +1 -1
  13. package/dist/mcp.cjs +1 -17909
  14. package/dist/mcp.d.cts +1 -11
  15. package/dist/mcp.d.ts +1 -11
  16. package/dist/mcp.js +1 -17884
  17. package/package.json +29 -29
  18. package/src/__tests__/workspace-package-boundaries.test.ts +15 -16
  19. package/src/__tests__/xychart-parser-categories.test.ts +78 -0
  20. package/src/ascii-entry.ts +14 -0
  21. package/src/cli/html-viewer.ts +5 -0
  22. package/src/mcp-entry.ts +21 -0
  23. package/dist/ascii.cjs.map +0 -1
  24. package/dist/ascii.js.map +0 -1
  25. package/dist/mcp.cjs.map +0 -1
  26. package/dist/mcp.js.map +0 -1
  27. package/packages/ascii-renderer/LICENSE +0 -22
  28. package/packages/ascii-renderer/src/ansi.ts +0 -490
  29. package/packages/ascii-renderer/src/canvas.ts +0 -658
  30. package/packages/ascii-renderer/src/class-diagram.ts +0 -2001
  31. package/packages/ascii-renderer/src/converter.ts +0 -446
  32. package/packages/ascii-renderer/src/coords.ts +0 -58
  33. package/packages/ascii-renderer/src/display-width.ts +0 -151
  34. package/packages/ascii-renderer/src/draw-arrows.ts +0 -549
  35. package/packages/ascii-renderer/src/draw-boxes.ts +0 -267
  36. package/packages/ascii-renderer/src/draw-bundles.ts +0 -611
  37. package/packages/ascii-renderer/src/draw-lines.ts +0 -174
  38. package/packages/ascii-renderer/src/draw-subgraphs.ts +0 -108
  39. package/packages/ascii-renderer/src/draw.ts +0 -337
  40. package/packages/ascii-renderer/src/edge-bundling.ts +0 -435
  41. package/packages/ascii-renderer/src/edge-cell-styles.ts +0 -81
  42. package/packages/ascii-renderer/src/edge-routing.ts +0 -1049
  43. package/packages/ascii-renderer/src/er-diagram.ts +0 -1488
  44. package/packages/ascii-renderer/src/flowchart.ts +0 -94
  45. package/packages/ascii-renderer/src/grid-occupancy.ts +0 -234
  46. package/packages/ascii-renderer/src/grid.ts +0 -1267
  47. package/packages/ascii-renderer/src/hyperlinks.ts +0 -248
  48. package/packages/ascii-renderer/src/index.ts +0 -163
  49. package/packages/ascii-renderer/src/lane-search.ts +0 -68
  50. package/packages/ascii-renderer/src/multiline-utils.ts +0 -82
  51. package/packages/ascii-renderer/src/pathfinder.ts +0 -448
  52. package/packages/ascii-renderer/src/registry.ts +0 -88
  53. package/packages/ascii-renderer/src/sequence.ts +0 -1318
  54. package/packages/ascii-renderer/src/shapes/circle.ts +0 -31
  55. package/packages/ascii-renderer/src/shapes/corners.ts +0 -273
  56. package/packages/ascii-renderer/src/shapes/diamond.ts +0 -31
  57. package/packages/ascii-renderer/src/shapes/hexagon.ts +0 -31
  58. package/packages/ascii-renderer/src/shapes/index.ts +0 -123
  59. package/packages/ascii-renderer/src/shapes/rectangle.ts +0 -199
  60. package/packages/ascii-renderer/src/shapes/rounded.ts +0 -31
  61. package/packages/ascii-renderer/src/shapes/special.ts +0 -352
  62. package/packages/ascii-renderer/src/shapes/stadium.ts +0 -122
  63. package/packages/ascii-renderer/src/shapes/state.ts +0 -204
  64. package/packages/ascii-renderer/src/shapes/types.ts +0 -78
  65. package/packages/ascii-renderer/src/territory.ts +0 -136
  66. package/packages/ascii-renderer/src/types.ts +0 -454
  67. package/packages/ascii-renderer/src/validate.ts +0 -189
  68. package/packages/ascii-renderer/src/xychart.ts +0 -1085
  69. package/packages/core/LICENSE +0 -22
  70. package/packages/core/src/click-directive.ts +0 -106
  71. package/packages/core/src/color-utils.ts +0 -205
  72. package/packages/core/src/diagram-type.ts +0 -35
  73. package/packages/core/src/direction-override.ts +0 -46
  74. package/packages/core/src/direction.ts +0 -56
  75. package/packages/core/src/index.ts +0 -34
  76. package/packages/core/src/init-directive.ts +0 -248
  77. package/packages/core/src/multiline-utils.ts +0 -275
  78. package/packages/core/src/statements.ts +0 -197
  79. package/packages/core/src/style-directives.ts +0 -214
  80. package/packages/core/src/text-metrics.ts +0 -498
  81. package/packages/core/src/theme.ts +0 -696
  82. package/packages/core/src/types.ts +0 -670
  83. package/packages/mcp/LICENSE +0 -22
  84. package/packages/mcp/src/index.ts +0 -17
  85. package/packages/mcp/src/server.ts +0 -135
  86. package/packages/mcp/src/tools/check-sequence-activations.ts +0 -91
  87. package/packages/mcp/src/tools/fix-sequence-activations.ts +0 -77
  88. package/packages/mcp/src/tools/render-ascii.ts +0 -99
  89. package/packages/mcp/src/tools/render-svg.ts +0 -95
  90. package/packages/mermaid-parser/LICENSE +0 -22
  91. package/packages/mermaid-parser/src/class/format.ts +0 -15
  92. package/packages/mermaid-parser/src/class/parser.ts +0 -593
  93. package/packages/mermaid-parser/src/class/types.ts +0 -166
  94. package/packages/mermaid-parser/src/er/parser.ts +0 -286
  95. package/packages/mermaid-parser/src/er/types.ts +0 -99
  96. package/packages/mermaid-parser/src/expanded-shapes.ts +0 -376
  97. package/packages/mermaid-parser/src/index.ts +0 -48
  98. package/packages/mermaid-parser/src/sequence/activation-check.ts +0 -149
  99. package/packages/mermaid-parser/src/sequence/activation-fix.ts +0 -112
  100. package/packages/mermaid-parser/src/sequence/box-color.ts +0 -85
  101. package/packages/mermaid-parser/src/sequence/parser.ts +0 -613
  102. package/packages/mermaid-parser/src/sequence/types.ts +0 -242
  103. package/packages/mermaid-parser/src/xychart/colors.ts +0 -177
  104. package/packages/mermaid-parser/src/xychart/parser.ts +0 -203
  105. package/packages/mermaid-parser/src/xychart/types.ts +0 -150
  106. package/packages/svg-renderer/LICENSE +0 -22
  107. package/packages/svg-renderer/src/class/layout.ts +0 -360
  108. package/packages/svg-renderer/src/class/renderer.ts +0 -636
  109. package/packages/svg-renderer/src/edge-curves.ts +0 -204
  110. package/packages/svg-renderer/src/elk-instance.ts +0 -292
  111. package/packages/svg-renderer/src/er/layout.ts +0 -200
  112. package/packages/svg-renderer/src/er/renderer.ts +0 -493
  113. package/packages/svg-renderer/src/index.ts +0 -58
  114. package/packages/svg-renderer/src/layout-engine/constants.ts +0 -19
  115. package/packages/svg-renderer/src/layout-engine/edge-bundling.ts +0 -379
  116. package/packages/svg-renderer/src/layout-engine/elk-adapter-utils.ts +0 -81
  117. package/packages/svg-renderer/src/layout-engine/elk-graph-builder.ts +0 -240
  118. package/packages/svg-renderer/src/layout-engine/from-elk.ts +0 -685
  119. package/packages/svg-renderer/src/layout-engine/layer-alignment.ts +0 -174
  120. package/packages/svg-renderer/src/layout-engine/to-elk.ts +0 -695
  121. package/packages/svg-renderer/src/layout-engine.ts +0 -74
  122. package/packages/svg-renderer/src/layout.ts +0 -8
  123. package/packages/svg-renderer/src/renderer.ts +0 -1485
  124. package/packages/svg-renderer/src/resolve-colors.ts +0 -339
  125. package/packages/svg-renderer/src/sequence/layout.ts +0 -698
  126. package/packages/svg-renderer/src/sequence/renderer.ts +0 -546
  127. package/packages/svg-renderer/src/shape-clipping.ts +0 -197
  128. package/packages/svg-renderer/src/styles.ts +0 -118
  129. package/packages/svg-renderer/src/xychart/layout.ts +0 -682
  130. package/packages/svg-renderer/src/xychart/renderer.ts +0 -684
  131. package/src/__tests__/ascii-canvas-write.test.ts +0 -137
  132. package/src/__tests__/ascii-charset-border-junctions.test.ts +0 -63
  133. package/src/__tests__/ascii-cjk-width.test.ts +0 -150
  134. package/src/__tests__/ascii-class-box-occupancy.test.ts +0 -462
  135. package/src/__tests__/ascii-class-column-width-488-489.test.ts +0 -639
  136. package/src/__tests__/ascii-class-cross-level-jog-corruption.test.ts +0 -187
  137. package/src/__tests__/ascii-class-detour-label-routing-487.test.ts +0 -114
  138. package/src/__tests__/ascii-class-diagram-compartments.test.ts +0 -70
  139. package/src/__tests__/ascii-class-label-box-collision.test.ts +0 -60
  140. package/src/__tests__/ascii-class-label-row-collision-531.test.ts +0 -135
  141. package/src/__tests__/ascii-class-label-territory-row-awareness.test.ts +0 -57
  142. package/src/__tests__/ascii-class-padding.test.ts +0 -104
  143. package/src/__tests__/ascii-class-parent-alignment-971.test.ts +0 -139
  144. package/src/__tests__/ascii-class-parent-alignment-972.test.ts +0 -208
  145. package/src/__tests__/ascii-class-reciprocal-relationships-448.test.ts +0 -169
  146. package/src/__tests__/ascii-combining-mark-width.test.ts +0 -70
  147. package/src/__tests__/ascii-coords-overlay.test.ts +0 -64
  148. package/src/__tests__/ascii-decision-lr-box-start.test.ts +0 -106
  149. package/src/__tests__/ascii-display-width-unit.test.ts +0 -154
  150. package/src/__tests__/ascii-draw-arrows-coverage.test.ts +0 -171
  151. package/src/__tests__/ascii-draw-arrows-single-point-path.test.ts +0 -112
  152. package/src/__tests__/ascii-edge-bundling-rank-violation-454.test.ts +0 -72
  153. package/src/__tests__/ascii-edge-ending-glyphs.test.ts +0 -206
  154. package/src/__tests__/ascii-edge-label-diagonal-fallback-418.test.ts +0 -95
  155. package/src/__tests__/ascii-edge-routing-fixes.test.ts +0 -178
  156. package/src/__tests__/ascii-edge-routing-single-point-path.test.ts +0 -107
  157. package/src/__tests__/ascii-edge-styles.test.ts +0 -149
  158. package/src/__tests__/ascii-emoji-cluster-width.test.ts +0 -101
  159. package/src/__tests__/ascii-er-box-occupancy.test.ts +0 -251
  160. package/src/__tests__/ascii-er-cardinality.test.ts +0 -40
  161. package/src/__tests__/ascii-er-corner-glyphs.test.ts +0 -249
  162. package/src/__tests__/ascii-er-jog-stray-line.test.ts +0 -111
  163. package/src/__tests__/ascii-er-label-padding.test.ts +0 -118
  164. package/src/__tests__/ascii-er-padding.test.ts +0 -114
  165. package/src/__tests__/ascii-er-relationship-label-corruption-350.test.ts +0 -458
  166. package/src/__tests__/ascii-er-relationship-overwrite.test.ts +0 -325
  167. package/src/__tests__/ascii-er-stray-connectors.test.ts +0 -347
  168. package/src/__tests__/ascii-er-unrelated-stem-separation-411.test.ts +0 -98
  169. package/src/__tests__/ascii-er-vertical-one-marker.test.ts +0 -110
  170. package/src/__tests__/ascii-label-line-terminal-fallback.test.ts +0 -172
  171. package/src/__tests__/ascii-lane-search.test.ts +0 -207
  172. package/src/__tests__/ascii-multibox-cjk-width.test.ts +0 -184
  173. package/src/__tests__/ascii-multiline.test.ts +0 -291
  174. package/src/__tests__/ascii-padding-edge-cases.test.ts +0 -154
  175. package/src/__tests__/ascii-pathfinder-route-edge.test.ts +0 -194
  176. package/src/__tests__/ascii-sequence-alt-else-label.test.ts +0 -236
  177. package/src/__tests__/ascii-sequence-block-wall-clearance.test.ts +0 -217
  178. package/src/__tests__/ascii-sequence-box-group.test.ts +0 -159
  179. package/src/__tests__/ascii-sequence-cjk-width.test.ts +0 -235
  180. package/src/__tests__/ascii-sequence-create-destroy.test.ts +0 -114
  181. package/src/__tests__/ascii-sequence-form-invariants.test.ts +0 -432
  182. package/src/__tests__/ascii-sequence-mermaid-parity.test.ts +0 -219
  183. package/src/__tests__/ascii-sequence-notes.test.ts +0 -61
  184. package/src/__tests__/ascii-sequence-padding.test.ts +0 -119
  185. package/src/__tests__/ascii-sequence-self-arrow.test.ts +0 -206
  186. package/src/__tests__/ascii-shape-diamond.test.ts +0 -38
  187. package/src/__tests__/ascii-shape-rectangle.test.ts +0 -258
  188. package/src/__tests__/ascii-shape-rounded.test.ts +0 -36
  189. package/src/__tests__/ascii-shapes-circle.test.ts +0 -41
  190. package/src/__tests__/ascii-shapes-hexagon.test.ts +0 -42
  191. package/src/__tests__/ascii-shapes-special.test.ts +0 -349
  192. package/src/__tests__/ascii-shapes-stadium.test.ts +0 -217
  193. package/src/__tests__/ascii-shapes-state.test.ts +0 -234
  194. package/src/__tests__/ascii-state-bidirectional-label-swap-530.test.ts +0 -130
  195. package/src/__tests__/ascii-subgraph-direction-honored-445.test.ts +0 -90
  196. package/src/__tests__/ascii-subgraph-label-border-clip.test.ts +0 -152
  197. package/src/__tests__/ascii-subgraph-title-padding.test.ts +0 -77
  198. package/src/__tests__/ascii-territory-unit.test.ts +0 -219
  199. package/src/__tests__/ascii-validate.test.ts +0 -220
  200. package/src/__tests__/ascii.test.ts +0 -328
  201. package/src/__tests__/box-color.test.ts +0 -80
  202. package/src/__tests__/class-arrow-directions.test.ts +0 -505
  203. package/src/__tests__/click-directive.test.ts +0 -63
  204. package/src/__tests__/color-utils.test.ts +0 -186
  205. package/src/__tests__/diagram-type.test.ts +0 -28
  206. package/src/__tests__/draw-lines.test.ts +0 -93
  207. package/src/__tests__/edge-cell-styles.test.ts +0 -180
  208. package/src/__tests__/elk-adapter-utils.test.ts +0 -166
  209. package/src/__tests__/grid-occupancy.test.ts +0 -240
  210. package/src/__tests__/helpers/ascii-form.ts +0 -142
  211. package/src/__tests__/helpers/terminal-display-width.ts +0 -74
  212. package/src/__tests__/mcp-check-sequence-activations-tool.test.ts +0 -85
  213. package/src/__tests__/mcp-fix-sequence-activations-tool.test.ts +0 -134
  214. package/src/__tests__/mcp-server.test.ts +0 -163
  215. package/src/__tests__/pathfinder.test.ts +0 -246
  216. package/src/__tests__/sequence-activation-fix.test.ts +0 -91
  217. package/src/__tests__/testdata/ascii/ampersand_lhs.txt +0 -18
  218. package/src/__tests__/testdata/ascii/ampersand_lhs_and_rhs.txt +0 -18
  219. package/src/__tests__/testdata/ascii/ampersand_rhs.txt +0 -18
  220. package/src/__tests__/testdata/ascii/ampersand_td_fanin.txt +0 -18
  221. package/src/__tests__/testdata/ascii/ampersand_td_fanout.txt +0 -18
  222. package/src/__tests__/testdata/ascii/ampersand_without_edge.txt +0 -18
  223. package/src/__tests__/testdata/ascii/back_reference_from_child.txt +0 -10
  224. package/src/__tests__/testdata/ascii/backlink_from_bottom.txt +0 -22
  225. package/src/__tests__/testdata/ascii/backlink_from_top.txt +0 -22
  226. package/src/__tests__/testdata/ascii/backlink_with_short_y_padding.txt +0 -20
  227. package/src/__tests__/testdata/ascii/cls_all_relationships.txt +0 -19
  228. package/src/__tests__/testdata/ascii/cls_annotation.txt +0 -29
  229. package/src/__tests__/testdata/ascii/cls_association.txt +0 -14
  230. package/src/__tests__/testdata/ascii/cls_basic.txt +0 -15
  231. package/src/__tests__/testdata/ascii/cls_dependency.txt +0 -14
  232. package/src/__tests__/testdata/ascii/cls_inheritance.txt +0 -20
  233. package/src/__tests__/testdata/ascii/cls_methods.txt +0 -21
  234. package/src/__tests__/testdata/ascii/comments.txt +0 -23
  235. package/src/__tests__/testdata/ascii/custom_padding.txt +0 -10
  236. package/src/__tests__/testdata/ascii/duplicate_labels.txt +0 -19
  237. package/src/__tests__/testdata/ascii/er_attributes.txt +0 -21
  238. package/src/__tests__/testdata/ascii/er_basic.txt +0 -8
  239. package/src/__tests__/testdata/ascii/er_identifying.txt +0 -18
  240. package/src/__tests__/testdata/ascii/flowchart_tb_simple.txt +0 -29
  241. package/src/__tests__/testdata/ascii/graph_bt_direction.txt +0 -28
  242. package/src/__tests__/testdata/ascii/graph_tb_direction.txt +0 -26
  243. package/src/__tests__/testdata/ascii/nested_subgraphs_with_labels.txt +0 -36
  244. package/src/__tests__/testdata/ascii/preserve_order_of_definition.txt +0 -23
  245. package/src/__tests__/testdata/ascii/self_reference.txt +0 -10
  246. package/src/__tests__/testdata/ascii/self_reference_with_edge.txt +0 -10
  247. package/src/__tests__/testdata/ascii/seq_basic.txt +0 -17
  248. package/src/__tests__/testdata/ascii/seq_multiple_messages.txt +0 -25
  249. package/src/__tests__/testdata/ascii/seq_self_message.txt +0 -18
  250. package/src/__tests__/testdata/ascii/single_node.txt +0 -8
  251. package/src/__tests__/testdata/ascii/single_node_longer_name.txt +0 -8
  252. package/src/__tests__/testdata/ascii/subgraph_complex_mixed.txt +0 -38
  253. package/src/__tests__/testdata/ascii/subgraph_complex_nested.txt +0 -49
  254. package/src/__tests__/testdata/ascii/subgraph_direction_override.txt +0 -47
  255. package/src/__tests__/testdata/ascii/subgraph_empty.txt +0 -10
  256. package/src/__tests__/testdata/ascii/subgraph_mixed_nodes.txt +0 -20
  257. package/src/__tests__/testdata/ascii/subgraph_mixed_nodes_td.txt +0 -48
  258. package/src/__tests__/testdata/ascii/subgraph_multiple_edges.txt +0 -32
  259. package/src/__tests__/testdata/ascii/subgraph_multiple_nodes.txt +0 -16
  260. package/src/__tests__/testdata/ascii/subgraph_nested.txt +0 -24
  261. package/src/__tests__/testdata/ascii/subgraph_nested_with_external.txt +0 -30
  262. package/src/__tests__/testdata/ascii/subgraph_node_outside_lr.txt +0 -17
  263. package/src/__tests__/testdata/ascii/subgraph_single_node.txt +0 -16
  264. package/src/__tests__/testdata/ascii/subgraph_td_direction.txt +0 -26
  265. package/src/__tests__/testdata/ascii/subgraph_td_multiple.txt +0 -44
  266. package/src/__tests__/testdata/ascii/subgraph_td_multiple_paddingy.txt +0 -42
  267. package/src/__tests__/testdata/ascii/subgraph_three_levels_nested.txt +0 -32
  268. package/src/__tests__/testdata/ascii/subgraph_three_separate.txt +0 -24
  269. package/src/__tests__/testdata/ascii/subgraph_two_separate.txt +0 -20
  270. package/src/__tests__/testdata/ascii/subgraph_with_labels.txt +0 -20
  271. package/src/__tests__/testdata/ascii/three_nodes.txt +0 -9
  272. package/src/__tests__/testdata/ascii/three_nodes_single_line.txt +0 -8
  273. package/src/__tests__/testdata/ascii/two_layer_single_graph.txt +0 -19
  274. package/src/__tests__/testdata/ascii/two_layer_single_graph_longer_names.txt +0 -19
  275. package/src/__tests__/testdata/ascii/two_nodes_linked.txt +0 -8
  276. package/src/__tests__/testdata/ascii/two_nodes_longer_names.txt +0 -8
  277. package/src/__tests__/testdata/ascii/two_root_nodes.txt +0 -19
  278. package/src/__tests__/testdata/ascii/two_root_nodes_longer_names.txt +0 -19
  279. package/src/__tests__/testdata/ascii/two_single_root_nodes.txt +0 -19
  280. package/src/__tests__/testdata/unicode/ampersand_lhs.txt +0 -18
  281. package/src/__tests__/testdata/unicode/ampersand_lhs_and_rhs.txt +0 -18
  282. package/src/__tests__/testdata/unicode/ampersand_rhs.txt +0 -18
  283. package/src/__tests__/testdata/unicode/ampersand_without_edge.txt +0 -18
  284. package/src/__tests__/testdata/unicode/back_reference_from_child.txt +0 -10
  285. package/src/__tests__/testdata/unicode/backlink_from_bottom.txt +0 -22
  286. package/src/__tests__/testdata/unicode/backlink_from_top.txt +0 -22
  287. package/src/__tests__/testdata/unicode/cls_all_relationships.txt +0 -19
  288. package/src/__tests__/testdata/unicode/cls_annotation.txt +0 -29
  289. package/src/__tests__/testdata/unicode/cls_association.txt +0 -14
  290. package/src/__tests__/testdata/unicode/cls_basic.txt +0 -15
  291. package/src/__tests__/testdata/unicode/cls_dependency.txt +0 -14
  292. package/src/__tests__/testdata/unicode/cls_inheritance.txt +0 -20
  293. package/src/__tests__/testdata/unicode/cls_methods.txt +0 -21
  294. package/src/__tests__/testdata/unicode/comments.txt +0 -23
  295. package/src/__tests__/testdata/unicode/duplicate_labels.txt +0 -19
  296. package/src/__tests__/testdata/unicode/er_attributes.txt +0 -21
  297. package/src/__tests__/testdata/unicode/er_basic.txt +0 -8
  298. package/src/__tests__/testdata/unicode/er_identifying.txt +0 -18
  299. package/src/__tests__/testdata/unicode/graph_bt_direction.txt +0 -28
  300. package/src/__tests__/testdata/unicode/preserve_order_of_definition.txt +0 -23
  301. package/src/__tests__/testdata/unicode/self_reference.txt +0 -10
  302. package/src/__tests__/testdata/unicode/self_reference_with_edge.txt +0 -10
  303. package/src/__tests__/testdata/unicode/seq_basic.txt +0 -17
  304. package/src/__tests__/testdata/unicode/seq_multiple_messages.txt +0 -25
  305. package/src/__tests__/testdata/unicode/seq_self_message.txt +0 -18
  306. package/src/__tests__/testdata/unicode/single_node.txt +0 -8
  307. package/src/__tests__/testdata/unicode/single_node_longer_name.txt +0 -8
  308. package/src/__tests__/testdata/unicode/three_nodes.txt +0 -9
  309. package/src/__tests__/testdata/unicode/three_nodes_single_line.txt +0 -8
  310. package/src/__tests__/testdata/unicode/two_layer_single_graph.txt +0 -19
  311. package/src/__tests__/testdata/unicode/two_layer_single_graph_longer_names.txt +0 -19
  312. package/src/__tests__/testdata/unicode/two_nodes_linked.txt +0 -8
  313. package/src/__tests__/testdata/unicode/two_nodes_longer_names.txt +0 -8
  314. package/src/__tests__/testdata/unicode/two_root_nodes.txt +0 -19
  315. package/src/__tests__/testdata/unicode/two_root_nodes_longer_names.txt +0 -19
  316. package/src/__tests__/testdata/unicode/two_single_root_nodes.txt +0 -19
  317. package/src/__tests__/text-metrics.test.ts +0 -473
  318. package/src/__tests__/theme-palette-contrast.test.ts +0 -84
  319. package/src/__tests__/theme.test.ts +0 -132
  320. package/src/__tests__/xychart-ascii.test.ts +0 -376
  321. package/src/__tests__/xychart-colors.test.ts +0 -149
package/dist/index.d.cts CHANGED
@@ -1,322 +1,50 @@
1
- import { ElkNode } from 'elkjs';
1
+ import { AsciiRenderOptions } from '@zombie-mermaid/ascii-renderer';
2
+ import { ClassRenderOptions } from '@zombie-mermaid/core';
3
+ import { CommonRenderOptions } from '@zombie-mermaid/core';
4
+ import { createLayoutCache } from '@zombie-mermaid/svg-renderer';
5
+ import { DEFAULTS } from '@zombie-mermaid/core';
6
+ import { DiagramColors } from '@zombie-mermaid/core';
7
+ import { Direction } from '@zombie-mermaid/core';
8
+ import { ErRenderOptions } from '@zombie-mermaid/core';
9
+ import { FlowchartRenderOptions } from '@zombie-mermaid/core';
10
+ import { fromShikiTheme } from '@zombie-mermaid/core';
11
+ import { LayoutCache } from '@zombie-mermaid/svg-renderer';
12
+ import { MermaidGraph } from '@zombie-mermaid/core';
13
+ import { NodeInteraction } from '@zombie-mermaid/core';
14
+ import { PositionedGraph } from '@zombie-mermaid/core';
15
+ import { renderMermaidASCII } from '@zombie-mermaid/ascii-renderer';
16
+ import { renderMermaidAscii } from '@zombie-mermaid/ascii-renderer';
17
+ import { RenderOptions } from '@zombie-mermaid/core';
18
+ import { SequenceRenderOptions } from '@zombie-mermaid/core';
19
+ import { ThemeName } from '@zombie-mermaid/core';
20
+ import { THEMES } from '@zombie-mermaid/core';
21
+ import { XyChartRenderOptions } from '@zombie-mermaid/core';
2
22
 
3
- export declare interface AsciiRenderOptions {
4
- /** true = ASCII chars (+,-,|,>), false = Unicode box-drawing (┌,─,│,►). Default: false */
5
- useAscii?: boolean;
6
- /** Horizontal spacing between nodes. Default: 5 */
7
- paddingX?: number;
8
- /** Vertical spacing between nodes. Default: 5 */
9
- paddingY?: number;
10
- /** Padding inside node boxes. Default: 1 */
11
- boxBorderPadding?: number;
12
- /**
13
- * Color mode for output.
14
- * - 'none': No colors (plain text)
15
- * - 'auto': Auto-detect (terminal ANSI capabilities, or HTML in browsers)
16
- * - 'ansi16': 16-color ANSI
17
- * - 'ansi256': 256-color xterm
18
- * - 'truecolor': 24-bit RGB
19
- * - 'html': HTML <span> tags with inline color styles (for browser rendering)
20
- * Default: 'auto'
21
- */
22
- colorMode?: ColorMode | 'auto';
23
- /** Theme colors for ASCII output. Uses default theme if not provided. */
24
- theme?: Partial<AsciiTheme>;
25
- /**
26
- * Overlay spreadsheet-style row/column indices on the rendered output, to
27
- * help debug layout spacing. Off by default.
28
- */
29
- showCoords?: boolean;
30
- /**
31
- * Force the diagram's layout direction, overriding the one its source
32
- * declares (a flowchart's `graph LR` header, or a state diagram's
33
- * top-level `direction LR` line). Applied after parsing and before
34
- * layout — the source text is never rewritten. Replaces only the
35
- * top-level direction: a nested subgraph's or composite state's own
36
- * `direction` line still applies on top of it, exactly as it does on top
37
- * of the diagram's own header.
38
- *
39
- * Flowchart and state diagrams only in ASCII output. The ASCII ER layout
40
- * has no direction concept (it already ignores a source `direction`
41
- * line), and sequence/class/XY-chart diagrams have none to override, so
42
- * all of those ignore this option (no error; output is identical with or
43
- * without it). Same semantics as `RenderOptions.direction` for SVG. See
44
- * issue #276.
45
- */
46
- direction?: Direction;
47
- /**
48
- * Emit OSC 8 terminal hyperlinks: each node whose `click` directive
49
- * declared an http/https/mailto/relative href gets its label wrapped in
50
- * an `ESC ] 8 ; ; <url> ESC \` … `ESC ] 8 ; ; ESC \` pair, which
51
- * terminals that support OSC 8 (iTerm2, WezTerm, kitty, Windows
52
- * Terminal, VTE-based terminals) render as a clickable link. The
53
- * sequences are zero-width and never affect layout; `click ... call fn()`
54
- * bindings emit nothing. Off by default — not every terminal or pager
55
- * handles OSC 8 gracefully (`less` needs `-R`), and no capability
56
- * detection is attempted here; the caller decides. Ignored when
57
- * `colorMode` is 'html'.
58
- */
59
- hyperlinks?: boolean;
60
- }
23
+ export { AsciiRenderOptions }
61
24
 
62
- /**
63
- * Theme colors for ASCII output — hex color strings.
64
- * Derived from the SVG theme system for visual consistency.
65
- */
66
- declare interface AsciiTheme {
67
- /** Text color (node labels, edge labels) */
68
- fg: string;
69
- /** Box border color (node borders, subgraph borders) */
70
- border: string;
71
- /** Edge line color (paths between nodes) */
72
- line: string;
73
- /** Arrowhead color (▲▼◄► or ^v<>) */
74
- arrow: string;
75
- /** Theme accent color (optional, used by xycharts for series 0) */
76
- accent?: string;
77
- /** Background color (optional, used by xycharts for dark-mode-aware shading) */
78
- bg?: string;
79
- /** Corner character color (optional, defaults to line) */
80
- corner?: string;
81
- /** Junction character color (optional, defaults to border) */
82
- junction?: string;
83
- }
84
-
85
- /**
86
- * Options applicable to class diagrams (`classDiagram`). Class diagrams use
87
- * fixed internal padding/spacing (not `padding`/`nodeSpacing`/
88
- * `layerSpacing`) and have no `direction` or `curve` concept; `interactivity`
89
- * gates `click`-based links only — there's no edge-animation concept to gate.
90
- */
91
- export declare type ClassRenderOptions = CommonRenderOptions & Pick<RenderOptions, 'fontSizes' | 'interactivity' | 'layoutCache'>;
92
-
93
- /** Color mode for output. */
94
- declare type ColorMode = 'none' | 'ansi16' | 'ansi256' | 'truecolor' | 'html';
95
-
96
- /**
97
- * Options every diagram type honors: theming (colors, font), the shared
98
- * strict-CSP/accessibility/output controls, and the post-render
99
- * `resolveColors` pass. Every other `RenderOptions` field applies to only a
100
- * subset of diagram types — see the per-type types below.
101
- */
102
- export declare type CommonRenderOptions = Pick<RenderOptions, 'bg' | 'fg' | 'line' | 'accent' | 'muted' | 'surface' | 'border' | 'font' | 'transparent' | 'embedSource' | 'resolveColors' | 'nonce' | 'styleAttribute' | 'title' | 'decorative'>;
103
-
104
- /**
105
- * Create a new opt-in layout cache with a bounded size (default 20
106
- * entries). Once full, the least-recently-used entry is evicted to make
107
- * room for a new one.
108
- *
109
- * Pass the result to `elkLayoutSync()` directly, or via
110
- * `RenderOptions.layoutCache` (threaded through by `layoutGraphSync()`,
111
- * `layoutClassDiagramSync()`, and `layoutErDiagramSync()`) to memoize
112
- * layout across repeated renders of the same diagram + options.
113
- */
114
- export declare function createLayoutCache(maxSize?: number): LayoutCache;
115
-
116
- /** How an edge path is interpolated between its routed points. */
117
- declare type CurveStyle = 'linear' | 'basis' | 'natural' | 'step' | 'stepBefore' | 'stepAfter';
118
-
119
- /** Default bg/fg when no colors are provided (zinc light) */
120
- export declare const DEFAULTS: Readonly<{
121
- bg: string;
122
- fg: string;
123
- }>;
25
+ export { ClassRenderOptions }
124
26
 
125
- /**
126
- * Diagram color configuration.
127
- *
128
- * Required: bg + fg give you a clean mono diagram.
129
- * Optional: line, accent, muted, surface, border bring in richer color
130
- * from Shiki themes or custom palettes. Each falls back to a color-mix()
131
- * derivation from bg + fg if not set.
132
- */
133
- export declare interface DiagramColors {
134
- /** Background color → CSS variable --bg */
135
- bg: string;
136
- /** Foreground / primary text color → CSS variable --fg */
137
- fg: string;
138
- /** Edge/connector color → CSS variable --line */
139
- line?: string;
140
- /** Arrow heads, highlights, special nodes → CSS variable --accent */
141
- accent?: string;
142
- /** Secondary text, edge labels → CSS variable --muted */
143
- muted?: string;
144
- /** Node/box fill tint → CSS variable --surface */
145
- surface?: string;
146
- /** Node/group stroke color → CSS variable --border */
147
- border?: string;
148
- }
149
-
150
- export declare type Direction = 'TD' | 'TB' | 'LR' | 'BT' | 'RL';
27
+ export { CommonRenderOptions }
151
28
 
152
- declare type EdgeStyle = 'solid' | 'dotted' | 'thick'
153
- /** `A ~~~ B` — participates in layout but draws no line or arrowhead. */
154
- | 'invisible';
29
+ export { createLayoutCache }
155
30
 
156
- /**
157
- * Options applicable to ER diagrams (`erDiagram`). ER diagrams use fixed
158
- * internal padding/spacing and ignore `curve` and `interactivity` (no
159
- * animated edges or `click` links in this renderer's ER support), but do
160
- * honor `direction` (applied before layout via `withDirectionOverride`).
161
- */
162
- export declare type ErRenderOptions = CommonRenderOptions & Pick<RenderOptions, 'direction' | 'fontSizes' | 'layoutCache'>;
163
-
164
- /**
165
- * Options applicable to flowchart (`graph` / `flowchart`) and state
166
- * (`stateDiagram-v2`) diagrams — both share `DiagramType: 'flowchart'` and
167
- * the same layout/render pipeline (src/layout-engine.ts, src/renderer.ts),
168
- * so they share one option shape. `componentSpacing` is currently a no-op
169
- * everywhere (accepted for forward compatibility only) but grouped here
170
- * since it's spacing-shaped like `padding`/`nodeSpacing`/`layerSpacing`.
171
- */
172
- export declare type FlowchartRenderOptions = CommonRenderOptions & Pick<RenderOptions, 'padding' | 'nodeSpacing' | 'layerSpacing' | 'componentSpacing' | 'mergeEdges' | 'direction' | 'curve' | 'fontSizes' | 'interactivity' | 'layoutCache'>;
173
-
174
- /**
175
- * Extract diagram colors from a Shiki theme object.
176
- * Works with any VS Code / TextMate theme loaded by Shiki.
177
- *
178
- * Maps editor UI colors to diagram roles:
179
- * editor.background → bg
180
- * editor.foreground → fg
181
- * editorLineNumber.fg → line (optional)
182
- * focusBorder / keyword → accent (optional)
183
- * comment token → muted (optional)
184
- * editor.selectionBackground→ surface (optional)
185
- * editorWidget.border → border (optional)
186
- *
187
- * @example
188
- * ```ts
189
- * import { getSingletonHighlighter } from 'shiki'
190
- * import { fromShikiTheme } from 'zombie-mermaid'
191
- *
192
- * const hl = await getSingletonHighlighter({ themes: ['tokyo-night'] })
193
- * const colors = fromShikiTheme(hl.getTheme('tokyo-night'))
194
- * const svg = renderMermaidSVG(code, colors)
195
- * ```
196
- */
197
- export declare function fromShikiTheme(theme: ShikiThemeLike): DiagramColors;
31
+ export { DEFAULTS }
198
32
 
199
- /** Configuration a diagram can set for itself via `%%{init: ...}%%`. */
200
- declare interface InitConfig {
201
- theme?: string;
202
- /** Flowchart edge interpolation. */
203
- curve?: CurveStyle;
204
- /** Recognized but not acted on — see `IGNORED_KEYS`. */
205
- ignored: string[];
206
- }
33
+ export { DiagramColors }
207
34
 
208
- /**
209
- * Opt-in bounded LRU cache for `elkLayoutSync()` results.
210
- *
211
- * Off by default — `elkLayoutSync()` only consults a cache when one is
212
- * explicitly passed in, so existing callers see no behavior change.
213
- * Create one with `createLayoutCache()` and reuse it across renders (e.g.
214
- * module scope, or a `useRef` in React) — a fresh cache per render defeats
215
- * the point.
216
- *
217
- * The `map`/`maxSize` fields are implementation detail exposed only so
218
- * `elkLayoutSync()` (and tests) can read/mutate them directly without a
219
- * class; treat a `LayoutCache` as opaque from outside this module.
220
- */
221
- export declare interface LayoutCache {
222
- /* Excluded from this release type: map */
223
- /* Excluded from this release type: maxSize */
224
- }
35
+ export { Direction }
225
36
 
226
- declare interface MermaidEdge {
227
- source: string;
228
- target: string;
229
- label?: string;
230
- style: EdgeStyle;
231
- /** Whether to render an arrowhead at the start (source end) of the edge */
232
- hasArrowStart: boolean;
233
- /** Whether to render an arrowhead at the end (target end) of the edge */
234
- hasArrowEnd: boolean;
235
- /**
236
- * Terminator shape at the source end when it's a circle/cross marker
237
- * (`o--`/`x--`) rather than a plain arrowhead. Undefined for a regular
238
- * `<`-style arrowhead or no marker at all — `hasArrowStart` alone still
239
- * governs whether anything is drawn there. Currently consumed by the
240
- * ASCII renderer only (see issue #330); the SVG renderer still draws a
241
- * plain arrowhead for these.
242
- */
243
- startMarker?: 'circle' | 'cross';
244
- /** Terminator shape at the target end (`--o`/`--x`). See `startMarker`. */
245
- endMarker?: 'circle' | 'cross';
246
- /** Edge id from `A e1@--> B` (Mermaid v11.10.0+), for `e1@{ ... }` and CSS targeting */
247
- id?: string;
248
- /** Set by `e1@{ animate: true }` — renders as a marching-ants dash */
249
- animate?: boolean;
250
- }
37
+ export { ErRenderOptions }
251
38
 
252
- export declare interface MermaidGraph {
253
- direction: Direction;
254
- nodes: Map<string, MermaidNode>;
255
- edges: MermaidEdge[];
256
- subgraphs: MermaidSubgraph[];
257
- classDefs: Map<string, Record<string, string>>;
258
- /** Maps node IDs to their class names (from `class X className` or `:::className` shorthand) */
259
- classAssignments: Map<string, string>;
260
- /** Maps node IDs to inline styles (from `style X fill:#f00,stroke:#333`) */
261
- nodeStyles: Map<string, Record<string, string>>;
262
- /** Maps edge indices (or 'default') to inline styles from `linkStyle` directives */
263
- linkStyles: Map<number | 'default', Record<string, string>>;
264
- /** Maps node IDs to interactions declared by `click` statements */
265
- interactions: Map<string, NodeInteraction>;
266
- /** Configuration the diagram set for itself via `%%{init: ...}%%` */
267
- initConfig?: InitConfig;
268
- }
39
+ export { FlowchartRenderOptions }
269
40
 
270
- declare interface MermaidNode {
271
- id: string;
272
- label: string;
273
- shape: NodeShape;
274
- }
41
+ export { fromShikiTheme }
275
42
 
276
- declare interface MermaidSubgraph {
277
- id: string;
278
- label: string;
279
- nodeIds: string[];
280
- children: MermaidSubgraph[];
281
- /** Optional direction override for this subgraph's internal layout */
282
- direction?: Direction;
283
- }
43
+ export { LayoutCache }
284
44
 
285
- /**
286
- * An interaction attached to a node by a `click` statement.
287
- *
288
- * This renderer emits static SVG and never executes diagram-supplied script,
289
- * so a `call`/callback binding is parsed but not invoked — see
290
- * docs/diagrams.md and docs/decisions/no-script-interactivity.md. An `href`
291
- * becomes a real SVG link and a tooltip becomes a `<title>`.
292
- */
293
- export declare interface NodeInteraction {
294
- /** `click A "https://..."` — rendered as an <a> wrapper */
295
- href?: string;
296
- /** Link target, e.g. `_blank` */
297
- target?: string;
298
- /** Tooltip text — rendered as a <title> child */
299
- tooltip?: string;
300
- /**
301
- * `click A call fn()` — the raw expression text (`fn()`), exposed as data
302
- * only. Nothing in the rendered SVG carries it and the library never
303
- * evaluates it; a host that trusts its diagram source reads it from
304
- * `parseMermaid(source).interactions` and binds behaviour to the node's
305
- * `data-id` attribute itself:
306
- *
307
- * ```ts
308
- * for (const [id, { callback }] of parseMermaid(source).interactions) {
309
- * if (callback === 'showDetail()') {
310
- * svgRoot.querySelector(`[data-id="${id}"]`)
311
- * ?.addEventListener('click', () => showDetail(id))
312
- * }
313
- * }
314
- * ```
315
- */
316
- callback?: string;
317
- }
45
+ export { MermaidGraph }
318
46
 
319
- declare type NodeShape = 'rectangle' | 'rounded' | 'diamond' | 'stadium' | 'circle' | 'subroutine' | 'doublecircle' | 'hexagon' | 'cylinder' | 'asymmetric' | 'trapezoid' | 'trapezoid-alt' | 'parallelogram' | 'parallelogram-alt' | 'state-start' | 'state-end' | 'document' | 'stacked-document' | 'stacked-process' | 'card' | 'lined-process' | 'divided-process' | 'window-pane' | 'triangle' | 'flipped-triangle' | 'filled-circle' | 'crossed-circle' | 'fork-join' | 'notched-pentagon' | 'sloped-rectangle' | 'flag' | 'bow-tie-rectangle' | 'half-rounded-rectangle' | 'brace' | 'brace-right' | 'braces' | 'bolt' | 'text' | 'anchor';
47
+ export { NodeInteraction }
320
48
 
321
49
  /**
322
50
  * Parse Mermaid text into a logical graph structure.
@@ -325,97 +53,14 @@ declare type NodeShape = 'rectangle' | 'rounded' | 'diamond' | 'stadium' | 'circ
325
53
  */
326
54
  export declare function parseMermaid(text: string): MermaidGraph;
327
55
 
328
- declare interface Point {
329
- x: number;
330
- y: number;
331
- }
332
-
333
- declare interface PositionedEdge {
334
- source: string;
335
- target: string;
336
- label?: string;
337
- style: EdgeStyle;
338
- hasArrowStart: boolean;
339
- hasArrowEnd: boolean;
340
- /** Full path including bends — array of {x, y} points */
341
- points: Point[];
342
- /** Layout-computed label center position (avoids label-label collisions) */
343
- labelPosition?: Point;
344
- /** Inline styles resolved from `linkStyle` directives — override theme defaults */
345
- inlineStyle?: Record<string, string>;
346
- /** Edge id from `A e1@--> B`, emitted as data-id for CSS targeting */
347
- id?: string;
348
- /** Set by `e1@{ animate: true }` — renders as a marching-ants dash */
349
- animate?: boolean;
350
- }
351
-
352
- export declare interface PositionedGraph {
353
- width: number;
354
- height: number;
355
- nodes: PositionedNode[];
356
- edges: PositionedEdge[];
357
- groups: PositionedGroup[];
358
- }
359
-
360
- declare interface PositionedGroup {
361
- id: string;
362
- label: string;
363
- x: number;
364
- y: number;
365
- width: number;
366
- height: number;
367
- children: PositionedGroup[];
368
- }
369
-
370
- declare interface PositionedNode {
371
- id: string;
372
- label: string;
373
- shape: NodeShape;
374
- x: number;
375
- y: number;
376
- width: number;
377
- height: number;
378
- /** Inline styles resolved from classDef + explicit `style` statements — override theme defaults */
379
- inlineStyle?: Record<string, string>;
380
- /** Custom class name assigned via `class A className` or `:::className` shorthand — emitted onto the rendered element's `class` attribute so external CSS can target it */
381
- className?: string;
382
- /** Interaction from a `click` statement — an href wraps the node in an <a> */
383
- interaction?: NodeInteraction;
384
- }
56
+ export { PositionedGraph }
385
57
 
386
58
  /** @deprecated Use `renderMermaidSVGAsync` */
387
59
  export declare const renderMermaid: typeof renderMermaidSVGAsync;
388
60
 
389
- /**
390
- * Render Mermaid diagram text to an ASCII/Unicode string.
391
- *
392
- * Synchronous — no async layout engine needed (unlike the SVG renderer).
393
- * Auto-detects diagram type from the header line and dispatches to
394
- * the appropriate renderer.
395
- *
396
- * @param text - Mermaid source text (any supported diagram type)
397
- * @param options - Rendering options
398
- * @returns Multi-line ASCII/Unicode string
399
- *
400
- * @example
401
- * ```ts
402
- * const result = renderMermaidASCII(`
403
- * graph LR
404
- * A --> B --> C
405
- * `, { useAscii: true })
406
- *
407
- * // Output:
408
- * // +---+ +---+ +---+
409
- * // | | | | | |
410
- * // | A |---->| B |---->| C |
411
- * // | | | | | |
412
- * // +---+ +---+ +---+
413
- * ```
414
- */
415
- export declare function renderMermaidASCII(text: string, options?: AsciiRenderOptions): string;
61
+ export { renderMermaidASCII }
416
62
 
417
- /** @deprecated Use `renderMermaidASCII` */
418
- export declare const renderMermaidAscii: typeof renderMermaidASCII;
63
+ export { renderMermaidAscii }
419
64
 
420
65
  /**
421
66
  * Render Mermaid diagram text to an SVG string — synchronously.
@@ -474,286 +119,9 @@ export declare function renderMermaidSVGAsync(text: string, options?: RenderOpti
474
119
  /** @deprecated Use `renderMermaidSVG` */
475
120
  export declare const renderMermaidSync: typeof renderMermaidSVG;
476
121
 
477
- export declare interface RenderOptions {
478
- /** Background color → CSS variable --bg. Default: '#FFFFFF' */
479
- bg?: string;
480
- /** Foreground / primary text color → CSS variable --fg. Default: '#27272A' */
481
- fg?: string;
482
- /** Edge/connector color → CSS variable --line */
483
- line?: string;
484
- /** Arrow heads, highlights → CSS variable --accent */
485
- accent?: string;
486
- /** Secondary text, edge labels → CSS variable --muted */
487
- muted?: string;
488
- /** Node/box fill tint → CSS variable --surface */
489
- surface?: string;
490
- /** Node/group stroke color → CSS variable --border */
491
- border?: string;
492
- /** Font family for all text. Default: 'Inter' */
493
- font?: string;
494
- /** Canvas padding in px. Default: 40. Flowchart/state diagrams only — class/ER diagrams use fixed internal padding. */
495
- padding?: number;
496
- /** Horizontal spacing between sibling nodes. Default: 28. Flowchart/state diagrams only — class/ER diagrams use fixed internal spacing. */
497
- nodeSpacing?: number;
498
- /** Vertical spacing between layers. Default: 48. Flowchart/state diagrams only — class/ER diagrams use fixed internal spacing. */
499
- layerSpacing?: number;
500
- /** Currently unused — accepted for forward compatibility but not read anywhere. */
501
- componentSpacing?: number;
502
- /** Whether to bundle overlapping fan-out/fan-in edge paths into shared trunks to reduce visual clutter. Default: true */
503
- mergeEdges?: boolean;
504
- /**
505
- * Force the diagram's layout direction, overriding the one its source
506
- * declares — a flowchart's `graph LR` / `flowchart TD` header, or a state
507
- * diagram's / ER diagram's top-level `direction LR` line. Applied after
508
- * parsing and before layout, so the source text is never rewritten and
509
- * `parseMermaid()` output is unaffected.
510
- *
511
- * Replaces only the *top-level* direction. A nested subgraph's or
512
- * composite state's own `direction` line still applies on top of this
513
- * override, exactly as it does on top of the diagram's own header — the
514
- * override behaves as if the caller had written that direction in the
515
- * source header, nothing more.
516
- *
517
- * Flowchart, state, and ER diagrams only — the three diagram types that
518
- * have a direction concept to override. Sequence, class, and XY-chart
519
- * diagrams ignore it (no error; output is identical with or without it).
520
- *
521
- * Unset (the default) keeps the source's direction, so existing output is
522
- * unchanged. See issue #276.
523
- */
524
- direction?: Direction;
525
- /** Render with transparent background (no background style on SVG). Default: false */
526
- transparent?: boolean;
527
- /**
528
- * Render-target-scoped interactivity level. Declarative only — this
529
- * library never emits `<script>`; see
530
- * docs/decisions/no-script-interactivity.md for the tier model this maps
531
- * to (tier 1: `<title>`/text; tier 2: `<a href>`, CSS `:hover`, CSS
532
- * animation; tier 3: `click ... call fn()`, recorded as data, never
533
- * executed). Default: `'static'`.
534
- *
535
- * - `'none'` — strips flowchart/state-diagram edge animation
536
- * (`e1@{ animate: true }`), and strips `click`-based links
537
- * (`<a href>`) and `<title>` tooltips. Intended for print/rasterized
538
- * output: a CSS `@keyframes` animation would otherwise silently
539
- * render as a single static frame with no indication that motion
540
- * was intended, and a link is meaningless once rasterized.
541
- * - `'static'` — default. Tier 1 + tier 2 minus motion: `click`-based
542
- * links and `<title>` tooltips still render, but flowchart/state-diagram
543
- * edge animation does not — a diagram that opts into
544
- * `e1@{ animate: true }` renders as a still line unless `'full'` is
545
- * requested. xychart hover tooltips stay off unless requested via
546
- * `'full'` or the deprecated `interactive: true` below. This is a
547
- * breaking change from earlier releases, where `'static'` (and the
548
- * default) still animated — animation is tier-2 *motion*, which the
549
- * stricter `'static'` reading excludes; see the ADR.
550
- * - `'full'` — also enables flowchart/state-diagram edge animation and
551
- * xychart hover tooltips.
552
- */
553
- interactivity?: 'none' | 'static' | 'full';
554
- /**
555
- * @deprecated Use `interactivity` instead. Enable hover tooltips on chart
556
- * data points (xychart only). Default: false.
557
- *
558
- * When `interactivity` is not set, this boolean still controls xychart
559
- * tooltips as before (`true` behaves like `interactivity: 'full'` for
560
- * that one effect). When `interactivity` *is* set, it takes precedence
561
- * and this field is ignored.
562
- */
563
- interactive?: boolean;
564
- /** Stamp the original diagram source onto the root `<svg>` as a `data-src` attribute (HTML-escaped). Default: false */
565
- embedSource?: boolean;
566
- /**
567
- * Replace every CSS `var(--…)` and `color-mix(…)` in the output with its
568
- * computed sRGB value (`#rrggbb`, or `rgba()` when translucent), using
569
- * the same mix percentages the `<style>` block declares (see
570
- * `MIX` in src/theme.ts — there is one table, not a copy). Default: false.
571
- *
572
- * Browsers evaluate both natively, so the default output stays a live
573
- * function of its CSS custom properties (docs/theming.md). Rasterizers
574
- * and non-browser SVG consumers — resvg, librsvg, Inkscape, ImageMagick —
575
- * implement neither and render the whole theme as black; turn this on
576
- * for any output headed to one of them (GitHub issue #456).
577
- *
578
- * Trade-off: the result is a fixed palette. Overriding `--bg`/`--fg` on
579
- * the embedded SVG no longer restyles it, and passing a `var(...)`
580
- * reference as a color (the React live-theming pattern) has nothing to
581
- * resolve against — such references, and any `var()` this library did
582
- * not declare itself (e.g. a host-page font variable), are left as-is.
583
- */
584
- resolveColors?: boolean;
585
- /**
586
- * CSP nonce to stamp on every `<style>` element in the output (see GitHub
587
- * issue #216).
588
- *
589
- * The renderer styles its SVG with an inline `<style>` element (the theme
590
- * block; flowcharts with `e1@{ animate: true }` edges and xycharts add a
591
- * second one). A host page whose `Content-Security-Policy` has a
592
- * `style-src` without `'unsafe-inline'` blocks those, and the diagram
593
- * silently renders unstyled. The standard fix is a per-response nonce:
594
- * the host generates one, lists it as `style-src 'nonce-<value>'`, and
595
- * puts `nonce="<value>"` on each element it wants to allow. Pass that
596
- * value here and every emitted `<style>` gets it — one `<style>` left
597
- * un-nonced is enough to lose the whole diagram's styling, so this is
598
- * applied at the single shared emission point rather than per diagram
599
- * type.
600
- *
601
- * The value is attribute-escaped on output. An empty string is treated as
602
- * unset. Default: undefined (no `nonce` attribute).
603
- *
604
- * A nonce only authorises `<style>` *elements* — it cannot authorise a
605
- * `style="…"` *attribute* (browsers apply nonces to elements only), so the
606
- * root `<svg style="--bg: …">` attribute stays blocked under the same
607
- * policy. Pair this with `styleAttribute: false` and put the theme
608
- * variables in your own stylesheet; see that option.
609
- */
610
- nonce?: string;
611
- /**
612
- * Emit the root `<svg style="--bg: …; --fg: …; background: var(--bg)">`
613
- * attribute. Default: true.
614
- *
615
- * That attribute is how the theme colours reach the SVG: every rule in
616
- * the embedded `<style>` block resolves against the `--bg`/`--fg`/…
617
- * custom properties it sets. Under a strict `Content-Security-Policy`
618
- * (`style-src` without `'unsafe-inline'`) the browser drops it, and no
619
- * `nonce` can rescue it — nonces apply to elements, never attributes —
620
- * so the diagram loses its colours even when the `<style>` element itself
621
- * is allowed (see GitHub issue #216).
622
- *
623
- * Set this to `false` to leave the attribute out entirely. The host must
624
- * then define the same custom properties on the SVG or an ancestor from
625
- * its own (nonced or external) stylesheet; `themeCssVariables(options)`
626
- * returns the exact declaration list the attribute would have carried,
627
- * so the two can't drift:
628
- *
629
- * ```ts
630
- * const opts = { bg: '#fff', fg: '#000', nonce, styleAttribute: false }
631
- * const svg = renderMermaidSVG(code, opts)
632
- * const css = `.diagram svg { ${themeCssVariables(opts)} }`
633
- * // `<style nonce="…">${css}</style>` + `<div class="diagram">${svg}</div>`
634
- * ```
635
- *
636
- * With the attribute gone, the SVG has no inline `background` either; the
637
- * declarations from `themeCssVariables()` include it (unless
638
- * `transparent`) so the host's rule restores it. Only the *root* `style`
639
- * attribute is affected: a per-node `style A font-family:…` override
640
- * still renders as that node's own `style` attribute, since it's diagram
641
- * content rather than theming, and under such a CSP it is simply ignored
642
- * by the browser. `nonce` and this option are independent — a host using
643
- * hashes rather than nonces may want only this one.
644
- */
645
- styleAttribute?: boolean;
646
- /**
647
- * Accessible name for the rendered SVG (see GitHub issue #215). Rendered
648
- * as `role="img"` + `aria-labelledby` pointing at a `<title>` child
649
- * holding this text — the standard SVG/WAI-ARIA technique for naming an
650
- * inline image. Without a name, assistive tech either treats the SVG as a
651
- * plain group (every node/edge label announced individually, out of
652
- * reading order) or skips it — a WCAG 1.1.1 failure for diagrams embedded
653
- * in a page.
654
- *
655
- * Supply your own description of what the diagram shows (e.g. "Flowchart:
656
- * Build → Test → Ship") — this library does not auto-generate one, since a
657
- * fabricated summary like "flowchart with 3 nodes" would be a confidently
658
- * useless accessible name. When omitted, the SVG still gets `role="img"`
659
- * (so it's read as one image, not a leaky group) but claims no name — the
660
- * same as an `<img>` with no `alt`.
661
- *
662
- * Ignored when `decorative` is true. Default: undefined (no name).
663
- *
664
- * If the diagram has a `click A "url"` link, `role="img"` is never
665
- * applied regardless of this option — see `decorative` below.
666
- */
667
- title?: string;
668
- /**
669
- * Mark the diagram as decorative — already described in surrounding
670
- * prose, so it shouldn't be announced as its own image. Emits
671
- * `aria-hidden="true"` on the root `<svg>` instead of
672
- * `role`/`aria-labelledby`/`<title>`; `title`, if also given, is ignored.
673
- * Default: false
674
- *
675
- * Silently overridden (no `aria-hidden`) if the diagram has any
676
- * `click A "url"` link: that renders as a real, focusable `<a href>`
677
- * inside the SVG, and `aria-hidden="true"` on an ancestor of a focusable
678
- * element is an explicit WAI-ARIA violation — assistive tech would drop
679
- * the link from the accessibility tree while it stays reachable by Tab.
680
- * `title`, if also given, still applies in that case (see #239).
681
- */
682
- decorative?: boolean;
683
- /**
684
- * Edge path interpolation for flowcharts and state diagrams.
685
- * Default: 'linear'. A diagram's own
686
- * `%%{init: {"flowchart": {"curve": ...}}}%%` supplies this when the caller
687
- * does not; an explicit value here always wins.
688
- */
689
- curve?: CurveStyle;
690
- /**
691
- * Font size overrides (px). Fields left unspecified fall back to their
692
- * default. Applies to all diagram types (flowchart, sequence, class, ER).
693
- */
694
- fontSizes?: {
695
- /** Node label text. Default: 13 */
696
- nodeLabel?: number;
697
- /** Edge label text. Default: 11 */
698
- edgeLabel?: number;
699
- /** Subgraph header text. Default: 12 */
700
- groupHeader?: number;
701
- };
702
- /**
703
- * Sequence-diagram layout overrides (px). Fields left unspecified fall
704
- * back to their default. Sequence diagrams only.
705
- */
706
- sequence?: {
707
- /** Vertical space per message row. Default: 40 */
708
- messageRowHeight?: number;
709
- /** Vertical space between actor boxes and the first message. Default: 20 */
710
- headerGap?: number;
711
- /** Actor box height. Default: 40 */
712
- actorHeight?: number;
713
- /** Gap between a message arrow and a note positioned directly after it. Default: 8 */
714
- noteOffsetAfterMessage?: number;
715
- /** Gap between consecutively stacked notes. Default: 4 */
716
- noteStackGap?: number;
717
- };
718
- /**
719
- * Opt-in ELK layout cache (see `createLayoutCache()`). When set,
720
- * `layoutGraphSync()` / `layoutClassDiagramSync()` / `layoutErDiagramSync()`
721
- * (flowchart/state, class, and ER diagrams — the ELK-based layout
722
- * engines) skip re-running ELK layout on a cache hit, keyed on a
723
- * deterministic serialization of the fully-resolved ELK input graph
724
- * (diagram structure + every layout-affecting option already baked in).
725
- *
726
- * Unset (the default) preserves the original always-recompute behavior
727
- * exactly — this cache is entirely opt-in. Create one instance and
728
- * reuse it across renders (e.g. module scope, or a `useRef` in React);
729
- * passing a freshly-created cache on every call defeats the point,
730
- * since it starts empty each time.
731
- */
732
- layoutCache?: LayoutCache;
733
- }
122
+ export { RenderOptions }
734
123
 
735
- /**
736
- * Options applicable to sequence diagrams (`sequenceDiagram`). Sequence
737
- * diagrams ignore `direction`, `curve`, spacing/`layoutCache` (a
738
- * non-ELK layout), and `interactivity` (no animated edges or `click` links
739
- * in this renderer's sequence support).
740
- */
741
- export declare type SequenceRenderOptions = CommonRenderOptions & Pick<RenderOptions, 'fontSizes' | 'sequence'>;
742
-
743
- /**
744
- * Minimal subset of Shiki's ThemeRegistrationResolved that we need.
745
- * We don't import from shiki to avoid a hard dependency.
746
- */
747
- declare interface ShikiThemeLike {
748
- type?: string;
749
- colors?: Record<string, string>;
750
- tokenColors?: Array<{
751
- scope?: string | string[];
752
- settings?: {
753
- foreground?: string;
754
- };
755
- }>;
756
- }
124
+ export { SequenceRenderOptions }
757
125
 
758
126
  /**
759
127
  * The exact CSS declaration list the root `<svg style="…">` attribute would
@@ -783,16 +151,10 @@ declare interface ShikiThemeLike {
783
151
  */
784
152
  export declare function themeCssVariables(options?: RenderOptions): string;
785
153
 
786
- export declare type ThemeName = keyof typeof THEMES;
154
+ export { ThemeName }
787
155
 
788
- export declare const THEMES: Record<string, DiagramColors>;
156
+ export { THEMES }
789
157
 
790
- /**
791
- * Options applicable to XY charts (`xychart-beta`). XY charts have no
792
- * spacing/`direction`/`curve`/`fontSizes`/`layoutCache` concept (layout is
793
- * a fixed pixel computation, not ELK-based); `interactivity` (preferred) and
794
- * the deprecated `interactive` boolean both gate hover tooltips only.
795
- */
796
- export declare type XyChartRenderOptions = CommonRenderOptions & Pick<RenderOptions, 'interactivity' | 'interactive'>;
158
+ export { XyChartRenderOptions }
797
159
 
798
160
  export { }