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
@@ -1,149 +0,0 @@
1
- // ============================================================================
2
- // ASCII edge style tests — dotted and thick line rendering
3
- // ============================================================================
4
-
5
- import { describe, it, expect } from 'vitest'
6
- import { renderMermaidASCII } from '@zombie-mermaid/ascii-renderer'
7
-
8
- describe('ASCII edge styles', () => {
9
- describe('solid edges (default)', () => {
10
- it('renders solid edges with ─ in unicode mode', () => {
11
- const result = renderMermaidASCII(`
12
- graph LR
13
- A --> B
14
- `)
15
- expect(result).toContain('─')
16
- expect(result).not.toContain('┄')
17
- expect(result).not.toContain('━')
18
- })
19
-
20
- it('renders solid edges with - in ascii mode', () => {
21
- const result = renderMermaidASCII(
22
- `
23
- graph LR
24
- A --> B
25
- `,
26
- { useAscii: true },
27
- )
28
- expect(result).toContain('-')
29
- })
30
- })
31
-
32
- describe('dotted edges (-.->)', () => {
33
- it('renders dotted edges with ┄ in unicode mode', () => {
34
- const result = renderMermaidASCII(`
35
- graph LR
36
- A -.-> B
37
- `)
38
- // Should contain dotted horizontal line character
39
- expect(result).toContain('┄')
40
- })
41
-
42
- it('renders dotted edges with . in ascii mode', () => {
43
- const result = renderMermaidASCII(
44
- `
45
- graph LR
46
- A -.-> B
47
- `,
48
- { useAscii: true },
49
- )
50
- // Should contain dots for dotted lines
51
- expect(result).toContain('.')
52
- })
53
-
54
- it('renders dotted vertical edges with ┆ in unicode mode', () => {
55
- const result = renderMermaidASCII(`
56
- graph TD
57
- A -.-> B
58
- `)
59
- // Should contain dotted vertical line character
60
- expect(result).toContain('┆')
61
- })
62
-
63
- it('renders dotted vertical edges with : in ascii mode', () => {
64
- const result = renderMermaidASCII(
65
- `
66
- graph TD
67
- A -.-> B
68
- `,
69
- { useAscii: true },
70
- )
71
- // Should contain colons for dotted vertical lines
72
- expect(result).toContain(':')
73
- })
74
-
75
- it('renders dotted edges with labels', () => {
76
- const result = renderMermaidASCII(`
77
- graph LR
78
- A -.->|optional| B
79
- `)
80
- expect(result).toContain('┄')
81
- expect(result).toContain('optional')
82
- })
83
- })
84
-
85
- describe('thick edges (==>)', () => {
86
- it('renders thick edges with ━ in unicode mode', () => {
87
- const result = renderMermaidASCII(`
88
- graph LR
89
- A ==> B
90
- `)
91
- // Should contain thick horizontal line character
92
- expect(result).toContain('━')
93
- })
94
-
95
- it('renders thick edges with = in ascii mode', () => {
96
- const result = renderMermaidASCII(
97
- `
98
- graph LR
99
- A ==> B
100
- `,
101
- { useAscii: true },
102
- )
103
- // Should contain equals for thick lines
104
- expect(result).toContain('=')
105
- })
106
-
107
- it('renders thick vertical edges with ┃ in unicode mode', () => {
108
- const result = renderMermaidASCII(`
109
- graph TD
110
- A ==> B
111
- `)
112
- // Should contain thick vertical line character
113
- expect(result).toContain('┃')
114
- })
115
- })
116
-
117
- describe('mixed edge styles', () => {
118
- it('renders different styles in the same diagram', () => {
119
- const result = renderMermaidASCII(`
120
- graph LR
121
- A --> B
122
- B -.-> C
123
- C ==> D
124
- `)
125
- // Should have all three line types
126
- expect(result).toContain('─') // solid
127
- expect(result).toContain('┄') // dotted
128
- expect(result).toContain('━') // thick
129
- })
130
-
131
- it('renders mixed styles in ascii mode', () => {
132
- const result = renderMermaidASCII(
133
- `
134
- graph LR
135
- A --> B
136
- B -.-> C
137
- C ==> D
138
- `,
139
- { useAscii: true },
140
- )
141
- // Note: ASCII mode uses - for solid, . for dotted, = for thick
142
- // We just check that the diagram renders without error
143
- expect(result).toContain('A')
144
- expect(result).toContain('B')
145
- expect(result).toContain('C')
146
- expect(result).toContain('D')
147
- })
148
- })
149
- })
@@ -1,101 +0,0 @@
1
- /**
2
- * Regression tests for issue #214 — ASCII renderer boxes several columns too
3
- * wide for composed emoji / grapheme clusters (ZWJ sequences, flags,
4
- * skin-tone modifiers).
5
- *
6
- * `displayWidth()` used to add up "wide" columns per JS code point rather
7
- * than per rendered grapheme cluster, so a multi-code-point emoji sequence —
8
- * which a real terminal renders as a single glyph occupying at most 2
9
- * columns — was counted once per code point:
10
- *
11
- * | Input | Code points | old displayWidth | actual columns |
12
- * |---------------------------|------------|-------------------|-----------------|
13
- * | 👨‍👩‍👧 (ZWJ family) | 5 | 8 | 2 |
14
- * | 🇺🇸 (regional indicators) | 2 | 4 | 2 |
15
- * | 👍🏽 (skin-tone modifier) | 2 | 4 | 2 |
16
- * | 日本 (plain CJK, contrast) | 2 | 4 | 4 |
17
- *
18
- * `terminalDisplayWidth` re-implements the "how many terminal columns does
19
- * this string occupy" calculation independently of
20
- * `src/ascii/display-width.ts`, so these tests verify the *rendered output*
21
- * against an authority separate from the implementation under test.
22
- */
23
- import { describe, it, expect } from 'vitest'
24
- import { renderMermaidASCII } from '@zombie-mermaid/ascii-renderer'
25
- import { displayWidth } from '../../packages/ascii-renderer/src/display-width.ts'
26
- import {
27
- terminalDisplayWidth,
28
- assertUniformDisplayWidth,
29
- } from './helpers/terminal-display-width.ts'
30
-
31
- // 👨‍👩‍👧 — MAN, ZWJ, WOMAN, ZWJ, GIRL (5 code points, 1 grapheme cluster).
32
- const ZWJ_FAMILY = '\u{1F468}' + '‍' + '\u{1F469}' + '‍' + '\u{1F467}'
33
- // 🇺🇸 — REGIONAL INDICATOR U + REGIONAL INDICATOR S (2 code points, 1 cluster).
34
- const FLAG_US = '\u{1F1FA}' + '\u{1F1F8}'
35
- // 👍🏽 — THUMBS UP + MEDIUM SKIN TONE modifier (2 code points, 1 cluster).
36
- const THUMB_MEDIUM = '\u{1F44D}' + '\u{1F3FD}'
37
-
38
- describe('ASCII renderer — composed emoji cluster width (issue #214)', () => {
39
- it.each([
40
- ['ZWJ family emoji', ZWJ_FAMILY, 5, 2],
41
- ['regional-indicator flag', FLAG_US, 2, 2],
42
- ['skin-tone-modified emoji', THUMB_MEDIUM, 2, 2],
43
- ['plain CJK (contrast)', '日本', 2, 4],
44
- ])(
45
- '%s: %j has %i code points and measures as %i columns',
46
- (_label, text, codePointCount, expectedWidth) => {
47
- expect([...text].length).toBe(codePointCount)
48
- expect(displayWidth(text)).toBe(expectedWidth)
49
- expect(terminalDisplayWidth(text)).toBe(expectedWidth)
50
- },
51
- )
52
-
53
- for (const useAscii of [false, true]) {
54
- describe(useAscii ? 'ASCII charset' : 'Unicode charset', () => {
55
- it('renders the issue repro (family emoji + CJK) with all rows at equal terminal width', () => {
56
- const mermaid = `flowchart TD\n A[${ZWJ_FAMILY} team] --> B[日本]`
57
- const ascii = renderMermaidASCII(mermaid, {
58
- useAscii,
59
- colorMode: 'none',
60
- })
61
- assertUniformDisplayWidth(ascii)
62
- expect(ascii).toContain(ZWJ_FAMILY)
63
- expect(ascii).toContain('日本')
64
- })
65
-
66
- it('sizes a flag-emoji label box to 2 columns, not 4', () => {
67
- const mermaid = `flowchart TD\n A[${FLAG_US}] --> B[ok]`
68
- const ascii = renderMermaidASCII(mermaid, {
69
- useAscii,
70
- colorMode: 'none',
71
- })
72
- assertUniformDisplayWidth(ascii)
73
- expect(ascii).toContain(FLAG_US)
74
- })
75
-
76
- it('sizes a skin-tone-modifier label box to 2 columns, not 4', () => {
77
- const mermaid = `flowchart TD\n A[${THUMB_MEDIUM}] --> B[ok]`
78
- const ascii = renderMermaidASCII(mermaid, {
79
- useAscii,
80
- colorMode: 'none',
81
- })
82
- assertUniformDisplayWidth(ascii)
83
- expect(ascii).toContain(THUMB_MEDIUM)
84
- })
85
- })
86
- }
87
-
88
- it('renders a class diagram compartment box with a composed emoji member at uniform width', () => {
89
- const mermaid = `classDiagram\n class Team {\n +String ${ZWJ_FAMILY}\n }`
90
- const ascii = renderMermaidASCII(mermaid, { colorMode: 'none' })
91
- assertUniformDisplayWidth(ascii)
92
- expect(ascii).toContain(ZWJ_FAMILY)
93
- })
94
-
95
- it('renders an ER diagram compartment box with a composed emoji attribute at uniform width', () => {
96
- const mermaid = `erDiagram\n ITEM {\n string ${FLAG_US}\n }`
97
- const ascii = renderMermaidASCII(mermaid, { colorMode: 'none' })
98
- assertUniformDisplayWidth(ascii)
99
- expect(ascii).toContain(FLAG_US)
100
- })
101
- })
@@ -1,251 +0,0 @@
1
- // ============================================================================
2
- // ASCII ER diagram box-occupancy invariants
3
- //
4
- // Generalizes issue #350's fix (src/ascii/er-diagram.ts's `setCGuarded`/
5
- // `boxCells`/`regionClear` occupancy guard — see
6
- // ascii-er-relationship-label-corruption-350.test.ts for the original fixed
7
- // repro) from a single fixed repro into a swept matrix: no two entity boxes
8
- // ever overlap, and no relationship label ever lands inside an entity box it
9
- // isn't attached to. svg-samples.visual.test.ts / ascii-samples.visual.test.ts
10
- // only self-diff against a committed baseline screenshot, so they can't catch
11
- // this shape of regression on their own — these assertions check the
12
- // renderer's own occupancy guarantee directly, on any diagram shape, not just
13
- // the one screenshot on file.
14
- // ============================================================================
15
-
16
- import { describe, it, expect } from 'vitest'
17
- import { renderMermaidASCII } from '@zombie-mermaid/ascii-renderer'
18
- import {
19
- findBoxRect,
20
- findTextRect,
21
- rectsOverlap,
22
- } from './helpers/ascii-form.ts'
23
-
24
- /** Assert no two named entity boxes in `ascii` overlap. */
25
- function expectNoBoxOverlap(ascii: string, names: string[]): void {
26
- const rects = names.map((n) => ({ n, r: findBoxRect(ascii, n) }))
27
- for (let i = 0; i < rects.length; i++) {
28
- for (let j = i + 1; j < rects.length; j++) {
29
- expect(
30
- rectsOverlap(rects[i]!.r, rects[j]!.r),
31
- `${rects[i]!.n} and ${rects[j]!.n} boxes overlap`,
32
- ).toBe(false)
33
- }
34
- }
35
- }
36
-
37
- /** Assert `label` doesn't land inside any of `names`' boxes. */
38
- function expectLabelOutsideBoxes(
39
- ascii: string,
40
- label: string,
41
- names: string[],
42
- ): void {
43
- const labelRect = findTextRect(ascii, label)
44
- for (const name of names) {
45
- const boxRect = findBoxRect(ascii, name)
46
- expect(
47
- rectsOverlap(labelRect, boxRect),
48
- `label "${label}" lands inside ${name}'s box`,
49
- ).toBe(false)
50
- }
51
- }
52
-
53
- describe('ASCII ER diagrams — entity boxes never overlap (issue #350 family)', () => {
54
- it('2 entities, 1 direct relationship, short label', () => {
55
- const src = `erDiagram
56
- A ||--o{ B : owns`
57
- const ascii = renderMermaidASCII(src, { useAscii: true })
58
- expectNoBoxOverlap(ascii, ['A', 'B'])
59
- })
60
-
61
- it('2 entities, direct, long label', () => {
62
- const src = `erDiagram
63
- A ||--o{ B : ships_to_a_regional_warehouse`
64
- const ascii = renderMermaidASCII(src, { useAscii: true })
65
- expectNoBoxOverlap(ascii, ['A', 'B'])
66
- })
67
-
68
- it('2 entities, direct, long identifier names', () => {
69
- const src = `erDiagram
70
- CUSTOMER_ACCOUNT_PROFILE ||--o{ SHIPPING_ADDRESS_RECORD : has`
71
- const ascii = renderMermaidASCII(src, { useAscii: true })
72
- expectNoBoxOverlap(ascii, [
73
- 'CUSTOMER_ACCOUNT_PROFILE',
74
- 'SHIPPING_ADDRESS_RECORD',
75
- ])
76
- })
77
-
78
- it('3 entities, adjacent-only chain (smoke case)', () => {
79
- const src = `erDiagram
80
- A ||--o{ B : one
81
- B ||--o{ C : two`
82
- const ascii = renderMermaidASCII(src, { useAscii: true })
83
- expectNoBoxOverlap(ascii, ['A', 'B', 'C'])
84
- })
85
-
86
- it('3 entities same row, A-C skipping B (direct issue #350 shape)', () => {
87
- const src = `erDiagram
88
- A ||--o{ B : one
89
- A ||--o| C : skips_b`
90
- const ascii = renderMermaidASCII(src, { useAscii: true })
91
- expectNoBoxOverlap(ascii, ['A', 'B', 'C'])
92
- expectLabelOutsideBoxes(ascii, 'skips_b', ['B'])
93
- })
94
-
95
- it('3 entities, A-C skip B, long multi-word label', () => {
96
- const src = `erDiagram
97
- A ||--o{ B : one
98
- A ||--o| C : a_very_long_descriptive_relationship_name`
99
- const ascii = renderMermaidASCII(src, { useAscii: true })
100
- expectNoBoxOverlap(ascii, ['A', 'B', 'C'])
101
- expectLabelOutsideBoxes(
102
- ascii,
103
- 'a_very_long_descriptive_relationship_name',
104
- ['B'],
105
- )
106
- })
107
-
108
- it('3 entities, A-C skip B, long names', () => {
109
- const src = `erDiagram
110
- ALPHA_ENTITY ||--o{ BRAVO_ENTITY : one
111
- ALPHA_ENTITY ||--o| CHARLIE_ENTITY : skips_b`
112
- const ascii = renderMermaidASCII(src, { useAscii: true })
113
- expectNoBoxOverlap(ascii, [
114
- 'ALPHA_ENTITY',
115
- 'BRAVO_ENTITY',
116
- 'CHARLIE_ENTITY',
117
- ])
118
- })
119
-
120
- it('5 entities, 3-per-row layout, A-C skip B in row 1', () => {
121
- const src = `erDiagram
122
- A ||--o{ B : one
123
- A ||--o| C : skips_b
124
- A ||--o{ D : two
125
- A ||--o{ E : three`
126
- const ascii = renderMermaidASCII(src, { useAscii: true })
127
- expectNoBoxOverlap(ascii, ['A', 'B', 'C', 'D', 'E'])
128
- })
129
-
130
- it('5 entities, two same-row obstructed pairs sharing the row-gap band', () => {
131
- const src = `erDiagram
132
- A ||--o{ B : one
133
- A ||--o| C : first_skip
134
- D ||--o{ E : two
135
- A ||--o{ D : bridge
136
- D ||--o| B : second_skip`
137
- const ascii = renderMermaidASCII(src, { useAscii: true })
138
- expectNoBoxOverlap(ascii, ['A', 'B', 'C', 'D', 'E'])
139
- const firstSkip = findTextRect(ascii, 'first_skip')
140
- const secondSkip = findTextRect(ascii, 'second_skip')
141
- expect(
142
- rectsOverlap(firstSkip, secondSkip),
143
- 'first_skip and second_skip labels overlap each other',
144
- ).toBe(false)
145
- })
146
-
147
- it('5 entities, vertical relationship whose row-mate is taller', () => {
148
- const src = `erDiagram
149
- A ||--o{ B : one
150
- A {
151
- string id
152
- string a1
153
- string a2
154
- string a3
155
- string a4
156
- string a5
157
- }
158
- C ||--o{ D : two
159
- A ||--o| D : cross_row`
160
- const ascii = renderMermaidASCII(src, { useAscii: true })
161
- expectNoBoxOverlap(ascii, ['A', 'B', 'C', 'D'])
162
- })
163
-
164
- it('7 entities, multi-row skip spanning 3 rows', () => {
165
- const src = `erDiagram
166
- A ||--o{ B : r1a
167
- A ||--o{ C : r1b
168
- D ||--o{ E : r2a
169
- D ||--o{ F : r2b
170
- G ||--o{ A : r3
171
- G ||--o| D : long_skip_across_rows`
172
- const ascii = renderMermaidASCII(src, { useAscii: true })
173
- expectNoBoxOverlap(ascii, ['A', 'B', 'C', 'D', 'E', 'F', 'G'])
174
- })
175
-
176
- it('4 entities, mixed same-row + cross-row + diagonal relationship', () => {
177
- const src = `erDiagram
178
- A ||--o{ B : same_row
179
- C ||--o{ D : same_row_2
180
- A ||--o| D : diagonal`
181
- const ascii = renderMermaidASCII(src, { useAscii: true })
182
- expectNoBoxOverlap(ascii, ['A', 'B', 'C', 'D'])
183
- })
184
-
185
- it('2 entities, parallel relationships (2 labels, same pair)', () => {
186
- const src = `erDiagram
187
- A ||--o{ B : places_order
188
- A ||--o{ B : returns_item`
189
- const ascii = renderMermaidASCII(src, { useAscii: true })
190
- const label1 = findTextRect(ascii, 'places_order')
191
- const label2 = findTextRect(ascii, 'returns_item')
192
- expect(
193
- rectsOverlap(label1, label2),
194
- 'the two relationship labels overlap',
195
- ).toBe(false)
196
- })
197
-
198
- it("3 entities, two-char crow's-foot markers, minimal gap", () => {
199
- const src = `erDiagram
200
- A }o--o{ B : m2m
201
- B }o--o{ C : m2m2`
202
- const ascii = renderMermaidASCII(src, { useAscii: true })
203
- expectNoBoxOverlap(ascii, ['A', 'B', 'C'])
204
- })
205
-
206
- it('6 entities, 2 disconnected components, each with same-row obstruction', () => {
207
- const src = `erDiagram
208
- A ||--o{ B : one
209
- A ||--o| C : skip_1
210
-
211
- D ||--o{ E : two
212
- D ||--o| F : skip_2`
213
- const ascii = renderMermaidASCII(src, { useAscii: true })
214
- expectNoBoxOverlap(ascii, ['A', 'B', 'C', 'D', 'E', 'F'])
215
- })
216
-
217
- it('3 entities, A-C skip B, B has zero attributes (short box)', () => {
218
- const src = `erDiagram
219
- A ||--o{ B : one
220
- A ||--o| C : skip_short_b`
221
- const ascii = renderMermaidASCII(src, { useAscii: true })
222
- expectNoBoxOverlap(ascii, ['A', 'B', 'C'])
223
- })
224
-
225
- it('3 entities, A-C skip B, B has 8 attributes (tall box)', () => {
226
- const src = `erDiagram
227
- A ||--o{ B : one
228
- B {
229
- string id
230
- string b1
231
- string b2
232
- string b3
233
- string b4
234
- string b5
235
- string b6
236
- string b7
237
- }
238
- A ||--o| C : skip_tall_b`
239
- const ascii = renderMermaidASCII(src, { useAscii: true })
240
- expectNoBoxOverlap(ascii, ['A', 'B', 'C'])
241
- })
242
-
243
- it('4 entities in one row, A-D skipping 2 (B and C)', () => {
244
- const src = `erDiagram
245
- A ||--o{ B : one
246
- B ||--o{ C : two
247
- A ||--o| D : skip_two`
248
- const ascii = renderMermaidASCII(src, { useAscii: true })
249
- expectNoBoxOverlap(ascii, ['A', 'B', 'C', 'D'])
250
- })
251
- })
@@ -1,40 +0,0 @@
1
- // ============================================================================
2
- // ASCII ER diagram crow's-foot cardinality marker tests
3
- // ============================================================================
4
-
5
- import { describe, it, expect } from 'vitest'
6
- import { renderMermaidASCII } from '@zombie-mermaid/ascii-renderer'
7
-
8
- describe('ASCII ER crow-foot cardinality markers', () => {
9
- it('mirrors the zero-one marker orientation on the left side (regression)', () => {
10
- // Left-side markers sit at the left entity's right edge, pointing away
11
- // from it (line nearest the entity, circle furthest): "|o". Before the
12
- // fix, getCrowsFootChars() always returned "o|" regardless of side,
13
- // which is only correct on the right side.
14
- const ascii = renderMermaidASCII(
15
- `erDiagram
16
- WIDGET |o--|| GADGET : rel`,
17
- { useAscii: true },
18
- )
19
- expect(ascii).toContain('|o')
20
-
21
- const unicode = renderMermaidASCII(`erDiagram
22
- WIDGET |o--|| GADGET : rel`)
23
- expect(unicode).toContain('│○')
24
- })
25
-
26
- it('keeps the zero-one marker orientation on the right side', () => {
27
- // Right-side markers sit at the right entity's left edge, pointing away
28
- // from it: circle nearest the entity, line furthest: "o|".
29
- const ascii = renderMermaidASCII(
30
- `erDiagram
31
- WIDGET ||--o| GADGET : rel`,
32
- { useAscii: true },
33
- )
34
- expect(ascii).toContain('o|')
35
-
36
- const unicode = renderMermaidASCII(`erDiagram
37
- WIDGET ||--o| GADGET : rel`)
38
- expect(unicode).toContain('○│')
39
- })
40
- })