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/README.md CHANGED
@@ -1,15 +1,15 @@
1
1
  <div align="center">
2
2
 
3
3
  <picture>
4
- <source media="(prefers-color-scheme: dark)" srcset="logo-lockup-dark.svg">
5
- <img src="logo-lockup-light.svg" alt="ZombieMermaid" height="48">
4
+ <source media="(prefers-color-scheme: dark)" srcset="public/logo-lockup-dark.svg">
5
+ <img src="public/logo-lockup-light.svg" alt="ZombieMermaid" height="48">
6
6
  </picture>
7
7
 
8
8
  **Render Mermaid diagrams as beautiful SVGs or ASCII art**
9
9
 
10
10
  Ultra-fast, fully themeable, zero DOM dependencies. A maintained fork of [`beautiful-mermaid`](https://github.com/lukilabs/beautiful-mermaid) that refuses to die.
11
11
 
12
- ![Raw Mermaid source rendering into a themed, animated diagram, drawn by zombie-mermaid itself](hero.svg)
12
+ ![Raw Mermaid source rendering into a themed, animated diagram, drawn by zombie-mermaid itself](public/hero.svg)
13
13
 
14
14
  [![Live Demo](https://img.shields.io/badge/Live_Demo-view_the_sample_gallery-1f6feb?style=for-the-badge)](https://dfadler.github.io/zombie-mermaid/)
15
15
  [![Beautiful Mermaid Fork Fixes](https://img.shields.io/badge/Beautiful_Mermaid_Fork_Fixes-before%2Fafter_evidence-1f6feb?style=for-the-badge)](https://dfadler.github.io/zombie-mermaid/fork-fixes.html)
@@ -242,7 +242,7 @@ Thank you Alexander for the excellent foundation!
242
242
 
243
243
  ## Contributing
244
244
 
245
- See [CONTRIBUTING.md](CONTRIBUTING.md) for local setup, the test/lint workflow, and how changesets and releases work ([RELEASING.md](RELEASING.md)). Security issues should go through [SECURITY.md](SECURITY.md) instead of a public issue. Released versions are tracked in [CHANGELOG.md](CHANGELOG.md).
245
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for local setup, the test/lint workflow, and how changesets and releases work ([RELEASING.md](docs/RELEASING.md)). Security issues should go through [SECURITY.md](SECURITY.md) instead of a public issue. Released versions are tracked in [CHANGELOG.md](CHANGELOG.md).
246
246
 
247
247
  ---
248
248
 
package/dist/ascii.cjs CHANGED
@@ -1,11 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function e(e,t){let n=e.match(/^click\s+([\w\p{L}-]+)\s+(.*)$/iu);if(!n)return;let r=n[1],i=n[2].trim(),a={...t.get(r)},o=i.match(/^(?:call|callback)\s+(.+?)\s*$/i);if(o){let e=o[1].match(/^(.*?\))\s+"([^"]*)"\s*$/);e?(a.callback=e[1].trim(),a.tooltip=e[2]):a.callback=o[1].trim(),t.set(r,a);return}i=i.replace(/^href\s+/i,``);let s=[...i.matchAll(/"([^"]*)"/g)].map(e=>e[1]);s.length>0&&(a.href=s[0]),s.length>1&&(a.tooltip=s[1]);let c=i.match(/(_blank|_self|_parent|_top)\s*$/i);c&&(a.target=c[1].toLowerCase()),(a.href!==void 0||a.tooltip!==void 0)&&t.set(r,a)}function t(e){if(!e||/[\x00-\x1F\x7F]/.test(e))return;let t=e.trim();if(/^[./#?]/.test(t))return t;let n=t.match(/^([a-zA-Z][a-zA-Z0-9+.-]*):/)?.[1];return n===void 0||/^(https?|mailto)$/i.test(n)?t:void 0}var n=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,r=/^rgba?\(\s*([\d.]+%?)\s*[, ]\s*([\d.]+%?)\s*[, ]\s*([\d.]+%?)\s*(?:[,/]\s*([\d.]+%?)\s*)?\)$/i;function i(e){let t=n.exec(e.trim());if(!t)return null;let r=t[1];if(r===void 0)return null;let i=r;return(i.length===3||i.length===4)&&(i=i.split(``).map(e=>e+e).join(``)),{r:parseInt(i.slice(0,2),16),g:parseInt(i.slice(2,4),16),b:parseInt(i.slice(4,6),16),a:i.length===8?parseInt(i.slice(6,8),16)/255:1}}function a(e){return e.endsWith(`%`)?Number(e.slice(0,-1))/100*255:Number(e)}function o(e){return e===void 0?1:e.endsWith(`%`)?Number(e.slice(0,-1))/100:Number(e)}function s(e){let t=e.trim();if(t.toLowerCase()===`transparent`)return{r:0,g:0,b:0,a:0};let n=i(t);if(n)return n;let s=r.exec(t);if(s){let[,e,t,n,r]=s;if(e===void 0||t===void 0||n===void 0)return null;let i={r:a(e),g:a(t),b:a(n),a:o(r)};return[i.r,i.g,i.b,i.a].some(e=>Number.isNaN(e))?null:i}return null}function c(e,t,n,r){let i,a;n===void 0&&r===void 0?(i=50,a=50):n===void 0?(a=r??50,i=100-a):r===void 0?(i=n,a=100-i):(i=n,a=r);let o=i+a;if(o===0)return null;let s=o<100?o/100:1;i/=o,a/=o;let c=e.a*i+t.a*a,l=(n,r)=>c===0?0:(n*e.a*i+r*t.a*a)/c;return{r:l(e.r,t.r),g:l(e.g,t.g),b:l(e.b,t.b),a:c*s}}function l(e,t,n){let r=s(e),i=s(t);if(!r||!i)return e;let a=c(r,i,n,100-n);return a?d(a):e}var u=e=>Math.min(255,Math.max(0,Math.round(e)));function d(e){let t=u(e.r),n=u(e.g),r=u(e.b),i=Math.min(1,Math.max(0,e.a));return i>=1?`#`+[t,n,r].map(e=>e.toString(16).padStart(2,`0`)).join(``):`rgba(${t}, ${n}, ${r}, ${Number(i.toFixed(3))})`}var f=/^[&#](?:#?[0-9]+|#?[xX][0-9a-fA-F]+|[a-zA-Z][a-zA-Z0-9]*);/,p=new Set([`&`,`#`]);function m(e){let t=null;for(let n=0;n<e.length;n++){let r=e[n];if(t!==null){r===t&&(t=null);continue}if(r===`"`||r===`'`){t=r;continue}if(p.has(r)){let t=f.exec(e.slice(n));if(t){n+=t[0].length-1;continue}}if(r===`%`&&e[n+1]===`%`)return n}return-1}function h(e){let t=[],n=``,r=null;for(let i=0;i<e.length;i++){let a=e[i];if(r!==null){n+=a,a===r&&(r=null);continue}if(a===`"`||a===`'`){r=a,n+=a;continue}if(p.has(a)){let t=f.exec(e.slice(i));if(t){n+=t[0],i+=t[0].length-1;continue}}if(a===`;`){t.push(n),n=``;continue}n+=a}return t.push(n),t}function g(e){let t=[],n=e.split(`
2
- `);for(let e=0;e<n.length;e++){let r=n[e].trim(),i=e+1,a=m(r);if(a!==-1&&(r=r.slice(0,a).trim()),r.length===0)continue;let o=[];for(let e of h(r)){let t=e.trim();t.length!==0&&o.push({text:t,line:i})}o.length>0&&t.push(o)}return t}function _(e){return g(e).flat()}function v(e){let t=_(e)[0]?.text.toLowerCase()??``;return/^xychart(?:-beta)?(?:\s|$)/.test(t)?`xychart`:/^sequencediagram\s*$/.test(t)?`sequence`:/^classdiagram\s*$/.test(t)?`class`:/^erdiagram\s*$/.test(t)?`er`:`flowchart`}function y(e){return e===`TD`||e===`TB`||e===`LR`||e===`BT`||e===`RL`}function b(e){let t=e?.toUpperCase();if(t===void 0||!y(t))throw Error(`Invalid direction: "${e}"`);return t}function x(e,t){return t===void 0||!y(t)?e:{...e,direction:t}}var S=new Set([`linear`,`basis`,`natural`,`step`,`stepBefore`,`stepAfter`]),C={theme:"colors come from the caller's bg/fg render options, which are usually CSS variables so a diagram inherits the host page's light/dark. A diagram-supplied theme would hard-code colors that fight it. Mermaid's theme names (default/dark/forest/neutral) also have no equivalent in this renderer's palettes — pass `bg`/`fg`, or a THEMES entry, instead",securitylevel:`this renderer emits static SVG and never executes diagram-supplied script, so there is no sandbox to configure`,defaultrenderer:`ELK is the only layout engine; dagre/elk selection has no effect`,fontfamily:"use the `font` render option instead",htmllabels:`labels are always rendered as SVG text; there is no HTML label mode`,maxtextsize:`no text-size limit is enforced`,startonload:`not a browser auto-render integration`},w=/^\s*%%\{\s*(?:init|initialize)\s*:\s*([\s\S]*?)\}%%/i;function T(e){let t=``,n=null;for(let r=0;r<e.length;r++){let i=e[r];if(n!==null){if(i===`\\`&&r+1<e.length){let n=e[r+1];t+=n===`'`?`'`:`\\${n}`,r++}else i===n?(n=null,t+=`"`):t+=i===`"`?`\\"`:i;continue}if(i===`"`||i===`'`){n=i,t+=`"`;continue}if(/[A-Za-z_$]/.test(i)){let n=r;for(;n<e.length&&/[\w$-]/.test(e[n]);)n++;let i=e.slice(r,n),a=n;for(;a<e.length&&/\s/.test(e[a]);)a++;if(e[a]===`:`){t+=`"${i}"`,r=n-1;continue}t+=/^(true|false|null)$/i.test(i)?i.toLowerCase():`"${i}"`,r=n-1;continue}t+=i}return t}function E(e){let t=e.match(w);if(!t)return;let n;try{n=JSON.parse(T(t[1]))}catch{return}if(typeof n!=`object`||!n)return;let r={ignored:[]},i={...n};for(let[e,t]of Object.entries(i)){let n=e.toLowerCase();if(n===`theme`&&typeof t==`string`){r.theme=t,r.ignored.push(e);continue}if(n===`flowchart`&&typeof t==`object`&&t){let e={...t};for(let[t,n]of Object.entries(e)){if(t.toLowerCase()===`curve`&&typeof n==`string`){S.has(n)&&(r.curve=n);continue}t.toLowerCase()in C&&r.ignored.push(t)}continue}n in C&&r.ignored.push(e)}return r}function D(e){let t={ignored:[]};for(let n of e){let e=E(n);e&&(e.theme!==void 0&&(t.theme=e.theme),e.curve!==void 0&&(t.curve=e.curve),t.ignored.push(...e.ignored))}return t}function O(e){return e>=4352&&e<=4447||e>=11904&&e<=12031||e>=12032&&e<=12255||e>=12288&&e<=12351||e>=12352&&e<=12447||e>=12448&&e<=12543||e>=12544&&e<=12591||e>=12592&&e<=12687||e>=12688&&e<=12799||e>=12800&&e<=13311||e>=13312&&e<=19903||e>=19968&&e<=40959||e>=44032&&e<=55215||e>=63744&&e<=64255||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=131072}var ee=/\p{Emoji_Presentation}/u,k=/\p{Extended_Pictographic}/u;function A(e){return e>=9632&&e<=9727}function te(e){if(ee.test(e))return!0;let t=e.codePointAt(0);return t!==void 0&&A(t)?!1:k.test(e)}function j(e){let t=e.codePointAt(0);return t===void 0?!1:O(t)||te(e)}function M(e){let t=e.startsWith(`"`)&&e.endsWith(`"`)?e.slice(1,-1):e;return(t.length>=2&&t.startsWith("`")&&t.endsWith("`")?t.slice(1,-1):t).replace(/<br\s*\/?>/gi,`
3
- `).replace(/\\n/g,`
4
- `).replace(/<\/?(?:sub|sup|small|mark)\s*>/gi,``).replace(/\*\*(.+?)\*\*/g,`<b>$1</b>`).replace(/(?<!\*)\*([^\s*](?:[^*]*[^\s*])?)\*(?!\*)/g,`<i>$1</i>`).replace(/~~(.+?)~~/g,`<s>$1</s>`)}function ne(e){return e.replace(/<\/?(?:b|strong|i|em|u|s|del)\s*>/gi,``)}function N(e){let t=e.replace(/;\s*$/,``),n={};for(let e of t.split(`,`)){let t=e.indexOf(`:`);if(t>0){let r=e.slice(0,t).trim(),i=e.slice(t+1).trim();r&&i&&(n[r]=i)}}return n}function P(e,t){let n=e.match(/^classDef\s+([\w,-]+)\s+(.+)$/);if(!n)return!1;let r=N(n[2]);for(let e of n[1].split(`,`)){let n=e.trim();n&&t.classDefs.set(n,r)}return!0}function re(e,t){let n=e.match(/^class\s+([\w,-]+)\s+([\w-]+)\s*;?\s*$/);if(!n)return!1;let r=n[2];for(let e of n[1].split(`,`))t.classAssignments.set(e.trim(),r);return!0}function ie(e,t){let n=e.match(/^cssClass\s+"([^"]*)"\s+([\w-]+)\s*;?\s*$/);if(!n)return!1;let r=n[2];for(let e of n[1].split(`,`)){let n=e.trim();n&&t.classAssignments.set(n,r)}return!0}function F(e,t){let n=e.match(/^style\s+([\w,-]+)\s+(.+)$/);if(!n)return!1;let r=N(n[2]);for(let e of n[1].split(`,`).map(e=>e.trim()))t.nodeStyles.set(e,{...t.nodeStyles.get(e),...r});return!0}function I(e){let t=e.match(/^(.+?):::([\w][\w-]*)$/);return t?{id:t[1],className:t[2]}:{id:e}}var ae={text:100,textSec:60,textMuted:40,textFaint:25,line:50,arrow:85,nodeFill:3,nodeStroke:20,groupHeader:5,innerStroke:12,keyBadge:10},oe=`<\\|--|<\\|\\.\\.|\\*--|o--|-->|--\\*|--o|--\\|>|\\.\\.>|\\.\\.\\|>|<--|<\\.\\.?|--`,se=new RegExp(oe);function ce(t){let n={classes:[],relationships:[],namespaces:[],interactions:new Map,classDefs:new Map,classAssignments:new Map,nodeStyles:new Map,notes:[]},r=new Map,i=null,a=null,o=0,s;for(let l=1;l<t.length;l++){let u=t[l],d=u.text;if(a&&o>0){if(d===`}`){o--,o===0&&(a=null,s=void 0);continue}let e=d.match(/^<<(\w+)>>$/);if(e){a.annotation=e[1];continue}if(d.startsWith(`<<`))throw Error(`Line ${u.line}: Malformed class annotation "${d}" — expected "<<name>>" (e.g. "<<interface>>").`);L(a,d,u.line);continue}if(/^click\s+/i.test(d)){e(d,n.interactions);continue}let f=d.match(/^note\s+(?:for\s+(\S+)\s+)?"([^"]*)"\s*$/);if(f){let e=f[1];n.notes.push({text:M(f[2]),...e?{forClass:e}:{}});continue}if(P(d,n)||F(d,n)||ie(d,n)||re(d,n))continue;let p=d.match(/^namespace\s+(\S+)\s*\{$/);if(p){i={name:p[1],classIds:[]};continue}if(d===`}`&&i){n.namespaces.push(i),i=null;continue}let m=d.match(/^class\s+(\S+?)(?:\s*~(\w+)~)?\s*\{$/);if(m){let e=c(m[1],m[2]);a=r.get(e)??null,o=1,s=u.line;continue}let h=d.match(/^class\s+(\S+?)(?:\s*~(\w+)~)?\s*$/);if(h){c(h[1],h[2]);continue}let g=d.match(/^class\s+(\S+?)\s*\{\s*(.*?)\s*\}$/);if(g){let e=c(g[1],void 0),t=r.get(e),n=g[2],i=n.match(/^<<(\w+)>>$/);if(t&&i)t.annotation=i[1];else if(t&&n.startsWith(`<<`))throw Error(`Line ${u.line}: Malformed class annotation "${n}" — expected "<<name>>" (e.g. "<<interface>>").`);else t&&n&&L(t,n,u.line);continue}let _=d.match(/^(\S+?)\s*:\s*(.+)$/);if(_){let e=_[2];if(!e.match(/<\|--|--|\*--|o--|-->|\.\.>|\.\.\|>/)){L(le(r,_[1]),e,u.line);continue}}let v=me(d);if(v){v.from=c(v.from,void 0,!1),v.to=c(v.to,void 0,!1),n.relationships.push(v);continue}if(se.test(d))throw Error(`Line ${u.line}: Malformed class-diagram relationship "${d}". Expected "FROM ARROW TO" (optionally with cardinalities and a ": label"), e.g. "Animal <|-- Dog" or 'A "1" --> "*" B : label'. ARROW must be one of <|--, <|.., *--, o--, -->, --*, --o, --|>, ..>, ..|>, <--, <.., or --.`)}if(a!==null)throw Error(`Line ${s}: Unclosed class body for "${a.id}" — expected a closing "}" before the diagram ends.`);return n.classes=[...r.values()],n;function c(e,t,a=!0){let{id:o,className:s}=I(e),c=o,l=t;if(!l){let e=o.match(/^(.+?)~(\w+)~$/);e&&(c=e[1],l=e[2])}let u=le(r,c);return l&&(u.label=`${c}<${l}>`),s&&n.classAssignments.set(c,s),a&&i&&i.classIds.push(c),c}}function L(e,t,n){let r=pe(t,n);r&&(r.isMethod?e.methods.push(r.member):e.attributes.push(r.member))}function le(e,t){let n=e.get(t);return n||(n={id:t,label:t,attributes:[],methods:[]},e.set(t,n)),n}function ue(e,t){return Math.max(0,e.split(t).length-1)}function de(e){let t=ue(e,`~`);if(t<=1)return e;let n=e,r=!1;t%2!=0&&n.startsWith(`~`)&&(n=n.slice(1),r=!0);let i=[...n],a=i.indexOf(`~`),o=i.lastIndexOf(`~`);for(;a!==-1&&o!==-1&&a!==o;)i[a]=`<`,i[o]=`>`,a=i.indexOf(`~`),o=i.lastIndexOf(`~`);return r&&i.unshift(`~`),i.join(``)}function fe(e){let t=e.split(/(,)/),n=[];for(let e=0;e<t.length;e++){let r=t[e];if(r===`,`&&e>0&&e+1<t.length){let i=t[e-1],a=t[e+1];ue(i,`~`)===1&&ue(a,`~`)===1&&(r=`${i},${a}`,e++,n.pop())}n.push(de(r))}return n.join(``)}function pe(e,t){let n=e.trim().replace(/;$/,``);if(!n)return null;let r=``,i=n,a=i[0];if((a===`+`||a===`-`||a===`#`||a===`~`)&&(r=a,i=i.slice(1).trim()),i.includes(`(`)&&!i.includes(`)`))throw Error(`Line ${t}: Malformed class member "${n}" — unclosed "(" in a method signature. Expected e.g. "+eat() void" or "+eat(Food f) void".`);let o=i.match(/^(.+?)\(([^)]*)\)(?:\s*(.+))?$/);if(o){let e=fe(o[1].trim()),t=o[2]?.trim(),n=t?fe(t):void 0,a=o[3]?.trim(),s=a?fe(a):void 0,c=e.endsWith(`$`)||i.includes(`$`),l=e.endsWith(`*`)||i.includes(`*`);return{member:{visibility:r,name:e.replace(/[$*]$/,``),type:s||void 0,isStatic:c,isAbstract:l,isMethod:!0,params:n},isMethod:!0}}let s=fe(i).split(/\s+/),c,l;s.length>=2?(l=s[0],c=s.slice(1).join(` `)):c=s[0]??i;let u=c.endsWith(`$`),d=c.endsWith(`*`);return{member:{visibility:r,name:c.replace(/[$*]$/,``),type:l||void 0,isStatic:u,isAbstract:d,isMethod:!1},isMethod:!1}}function me(e){let t=e.match(RegExp(`^(\\S+?)\\s+(?:"([^"]*?)"\\s+)?(${oe})\\s+(?:"([^"]*?)"\\s+)?(\\S+?)(?::::([\\w][\\w-]*))?(?:\\s*:\\s*(.+))?$`));if(!t)return null;let n=t[1],r=t[2],i=r?M(r):void 0,a=t[3].trim(),o=t[4],s=o?M(o):void 0,c=t[6]?`${t[5]}:::${t[6]}`:t[5],l=t[7]?.trim(),u=l?M(l):void 0,d=he(a);return d?{from:n,to:c,type:d.type,markerAt:d.markerAt,label:u,fromCardinality:i,toCardinality:s}:null}function he(e){switch(e.trim()){case`<|--`:return{type:`inheritance`,markerAt:`from`};case`--|>`:return{type:`inheritance`,markerAt:`to`};case`<|..`:return{type:`realization`,markerAt:`from`};case`..|>`:return{type:`realization`,markerAt:`to`};case`*--`:return{type:`composition`,markerAt:`from`};case`--*`:return{type:`composition`,markerAt:`to`};case`o--`:return{type:`aggregation`,markerAt:`from`};case`--o`:return{type:`aggregation`,markerAt:`to`};case`-->`:return{type:`association`,markerAt:`to`};case`<--`:return{type:`association`,markerAt:`from`};case`..>`:return{type:`dependency`,markerAt:`to`};case`<..`:return{type:`dependency`,markerAt:`from`};case`--`:return{type:`association`,markerAt:`to`};default:return null}}function ge(e){return`${e.visibility?`${e.visibility} `:``}${e.isMethod?`${e.name}(${e.params||``})`:e.name}${e.type?`: ${e.type}`:``}`}function _e(e){let t={entities:[],relationships:[]},n=new Map,r=null;for(let i=1;i<e.length;i++){let a=e[i],o=a.text;if(r){if(o===`}`){r=null;continue}let e=R(o);e&&r.attributes.push(e);continue}let s=o.match(/^direction\s+(TD|TB|LR|BT|RL)\s*$/i);if(s){t.direction=b(s[1]);continue}let c=o.match(/^(\S+?)(?:\[(.+)\])?\s*\{(.*)$/);if(c){let e=c[1],t=c[2],i=ve(n,e,t===void 0?void 0:M(t.trim().replace(/^["']|["']$/g,``))),a=c[3].trim(),o=a.endsWith(`}`),s=o?a.slice(0,-1).trim():a;for(let e of s.split(`;`).map(e=>e.trim()).filter(Boolean)){let t=R(e);t&&i.attributes.push(t)}o||(r=i);continue}let l=ye(o,a.line);if(l){ve(n,l.entity1),ve(n,l.entity2),t.relationships.push(l);continue}}return t.entities=[...n.values()],t}function ve(e,t,n){let r=e.get(t);return r?n!==void 0&&(r.label=n):(r={id:t,label:n??t,attributes:[]},e.set(t,r)),r}function R(e){let t=e.match(/^(\S+)\s+(\S+)(?:\s+(.+))?$/);if(!t)return null;let n=t[1],r=t[2],i=t[3]?.trim()??``,a=[],o,s=i.match(/"([^"]*)"/);s&&(o=M(s[1]));let c=i.replace(/"[^"]*"/,``).trim();for(let e of c.split(/\s+/)){let t=e.toUpperCase();(t===`PK`||t===`FK`||t===`UK`)&&a.push(t)}return{type:n,name:r,keys:a,comment:o}}function ye(e,t){let n=e.match(/^(\S+)\s+(\S*(?:--|\.\.)\S*)\s+(\S+)\s*(?::\s*(.*))?$/);if(!n)return null;let r=n[1],i=n[2],a=n[3],o=n[4]!==void 0,s=n[4]?.trim()??``,c=i.match(/^([|o}{]*)(--|\.\.?)([|o}{]*)$/),l=c?be(c[1]):null,u=c?xe(c[3]):null;if(!l||!u)throw Error(`Line ${t}: Invalid ER relationship cardinality "${i}" in "${e}". Left side must be one of ||, |o, }|, }o; right side must be one of ||, o|, |{, o{ (e.g. "||--o{").`);if(!o||s.length===0)throw Error(`Line ${t}: ER relationship "${r} ${i} ${a}" is missing a ": label" — expected e.g. "${r} ${i} ${a} : label".`);return{entity1:r,entity2:a,cardinality1:l,cardinality2:u,label:M(s.replace(/^["']|["']$/g,``)),identifying:c[2]===`--`}}function be(e){return e===`||`?`one`:e===`|o`?`zero-one`:e===`}|`?`many`:e===`}o`?`zero-many`:null}function xe(e){return e===`||`?`one`:e===`o|`?`zero-one`:e===`|{`?`many`:e===`o{`?`zero-many`:null}var Se=new Set(`aliceblue antiquewhite aqua aquamarine azure beige bisque black blanchedalmond blue blueviolet brown burlywood cadetblue chartreuse chocolate coral cornflowerblue cornsilk crimson cyan darkblue darkcyan darkgoldenrod darkgray darkgreen darkgrey darkkhaki darkmagenta darkolivegreen darkorange darkorchid darkred darksalmon darkseagreen darkslateblue darkslategray darkslategrey darkturquoise darkviolet deeppink deepskyblue dimgray dimgrey dodgerblue firebrick floralwhite forestgreen fuchsia gainsboro ghostwhite gold goldenrod gray green greenyellow grey honeydew hotpink indianred indigo ivory khaki lavender lavenderblush lawngreen lemonchiffon lightblue lightcoral lightcyan lightgoldenrodyellow lightgray lightgreen lightgrey lightpink lightsalmon lightseagreen lightskyblue lightslategray lightslategrey lightsteelblue lightyellow lime limegreen linen magenta maroon mediumaquamarine mediumblue mediumorchid mediumpurple mediumseagreen mediumslateblue mediumspringgreen mediumturquoise mediumvioletred midnightblue mintcream mistyrose moccasin navajowhite navy oldlace olive olivedrab orange orangered orchid palegoldenrod palegreen paleturquoise palevioletred papayawhip peachpuff peru pink plum powderblue purple rebeccapurple red rosybrown royalblue saddlebrown salmon sandybrown seagreen seashell sienna silver skyblue slateblue slategray slategrey snow springgreen steelblue tan teal thistle tomato turquoise violet wheat white whitesmoke yellow yellowgreen`.split(` `)),Ce=/^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,we=/^(?:rgba?|hsla?)\(\s*[\d.%]+(?:[\s,/]+[\d.%]+){2,3}\s*\)$/i;function Te(e){return Se.has(e.toLowerCase())||Ce.test(e)||we.test(e)}function Ee(e){let t=e.trim(),n=t.match(/^((?:rgba?|hsla?)\s*\([^)]*\)|#[0-9a-fA-F]+|\S+)?(.*)$/),r=n?.[1]??``,i=n?.[2]?.trim()??``;return r.toLowerCase()===`transparent`?{label:i}:r!==``&&Te(r)?{color:r,label:i}:{label:t}}function z(e){return e===`loop`||e===`alt`||e===`opt`||e===`par`||e===`critical`||e===`break`||e===`rect`}function De(e){if(!z(e))throw Error(`Invalid block type: "${e}"`);return e}var Oe=/^(.+?)\s*(<<->>|<<-->>|--?>?>)\s*([+-]?)(.+?)\s*:\s*(.+)$/,ke=/^(.+?)\s*(<<->>|<<-->>|--?>?>|--?[)x]|--?>>|--?>)\s*([+-]?)(.+?)\s*:\s*(.+)$/;function Ae(e){let t={actors:[],messages:[],blocks:[],notes:[],activations:[],boxes:[]},n={open:void 0,membership:new Map},r=0,i,a=new Set,o=[],s={enabled:!1,next:1,step:1},c,l;for(let u=1;u<e.length;u++){let d=e[u],f=d.text,p=f.match(/^box(?:\s+(.*))?$/);if(p){if(n.open!==void 0)throw Error(`Line ${d.line}: Sequence diagram: a box cannot be nested inside another box — close the open box with "end" first`);let{color:e,label:a}=Ee(p[1]??``),s={label:M(a),actorIds:[]};e!==void 0&&(s.color=e),t.boxes.push(s),n.open=t.boxes.length-1,r=o.length,i=d.line;continue}let m=f.match(/^create\s+(participant|actor)\s+(\S+?)(?:\s+as\s+(.+))?$/);if(m){let e=m[1]===`actor`?`actor`:`participant`,r=m[2];if(a.has(r))throw Error(`Line ${d.line}: It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior`);a.add(r),t.actors.push({id:r,label:M(m[3]?.trim()??r),type:e}),Ne(t,n,r,d.line),c=r;continue}let h=f.match(/^destroy\s+(.+)$/);if(h){let e=h[1].trim();Me(t,a,n,e,d.line),l=e;continue}let g=f.match(/^autonumber(?:\s+(off|\d+(?:\.\d{1,2})?)(?:\s+(\d+(?:\.\d{1,2})?))?)?$/);if(g){let e=g[1],t=g[2];e===`off`?s.enabled=!1:(s.enabled=!0,s.next=e===void 0?1:Number(e),s.step=t===void 0?1:Number(t));continue}let _=f.match(/^(participant|actor)\s+(\S+?)(?:\s+as\s+(.+))?$/);if(_){let e=_[1]===`actor`?`actor`:`participant`,r=_[2],i=M(_[3]?.trim()??r);a.has(r)||(a.add(r),t.actors.push({id:r,label:i,type:e})),Ne(t,n,r,d.line);continue}let v=f.match(/^Note\s+(left of|right of|over)\s+([^:]+):\s*(.+)$/i);if(v){let e=v[1].toLowerCase(),r=v[2].trim(),i=M(v[3].trim()),o=r.split(`,`).map(e=>e.trim());for(let e of o)Me(t,a,n,e,d.line);let s=`over`;e===`left of`?s=`left`:e===`right of`&&(s=`right`),t.notes.push({actorIds:o,text:i,position:s,afterIndex:t.messages.length-1});continue}let y=f.match(/^(loop|alt|opt|par|critical|break|rect)\s*(.*)$/);if(y){let e=De(y[1]),n=M(y[2]?.trim()??``);o.push({type:e,label:n,startIndex:t.messages.length,dividers:[],line:d.line});continue}let b=f.match(/^(else|and)\s*(.*)$/);if(b&&o.length>0){let e=M(b[2]?.trim()??``);o[o.length-1].dividers.push({index:t.messages.length,label:e});continue}if(f===`end`&&n.open!==void 0&&o.length===r){n.open=void 0,i=void 0;continue}if(f===`end`&&o.length>0){let e=o.pop();t.blocks.push({type:e.type,label:e.label,startIndex:e.startIndex,endIndex:Math.max(t.messages.length-1,e.startIndex),dividers:e.dividers});continue}if(f===`end`)throw Error(`Line ${d.line}: Sequence diagram: "end" does not match any open block ("loop"/"alt"/"opt"/"par"/"critical"/"break"/"rect") or "box" — nothing is currently open to close.`);let x=f.match(/^(activate|deactivate)\s+(.+)$/);if(x){let e=x[2].trim();Me(t,a,n,e,d.line),t.activations.push({actorId:e,kind:x[1]===`activate`?`start`:`end`,afterIndex:t.messages.length-1});continue}let S=f.match(Oe)??f.match(ke);if(S){let e=S[2],r=S[4][0];if(r===`>`||r===`)`)throw Error(`Line ${d.line}: Malformed sequence-diagram arrow in "${f}" — "${e}${r}" is not a recognized arrow. Expected one of: ->, -->, ->>, -->>, -x, --x, -), --), <<->>, <<-->>.`);Pe(t,a,n,s,S[1],S[2],S[3],S[4],S[5],d.line);let i=t.messages.length-1,o=t.messages[i];if(c!==void 0){if(o.to!==c)throw Error(`Line ${d.line}: The created participant ${c} does not have an associated creating message after its declaration. Please check the sequence diagram.`);je(t,c).createdAt=i,c=void 0}if(l!==void 0){if(o.from!==l&&o.to!==l)throw Error(`Line ${d.line}: The destroyed participant ${l} does not have an associated destroying message after its declaration. Please check the sequence diagram.`);je(t,l).destroyedAt=i,l=void 0}continue}}if(o.length>0){let e=o[o.length-1];throw Error(`Line ${e.line}: Sequence diagram: unclosed "${e.type}" block — expected a matching "end" before the diagram ends.`)}if(n.open!==void 0){let e=t.boxes[n.open];throw Error(`Line ${i}: Sequence diagram: unclosed "box${e.label?` ${e.label}`:``}" — expected a matching "end" before the diagram ends.`)}return t}function je(e,t){let n=e.actors.find(e=>e.id===t);if(n===void 0)throw Error(`Sequence diagram: unknown actor "${t}"`);return n}function Me(e,t,n,r,i){t.has(r)||(t.add(r),e.actors.push({id:r,label:r,type:`participant`})),Ne(e,n,r,i)}function Ne(e,t,n,r){let i=t.open;if(i===void 0)return;let a=t.membership.get(n);if(a!==i){if(a!==void 0){let t=e.boxes[a].label,o=e.boxes[i].label;throw Error(`Line ${r}: A same participant should only be defined in one Box: ${n} can't be in '${t}' and in '${o}' at the same time.`)}t.membership.set(n,i),e.boxes[i].actorIds.push(n)}}function Pe(e,t,n,r,i,a,o,s,c,l){Me(e,t,n,i,l),Me(e,t,n,s,l);let u=a===`<<->>`||a===`<<-->>`,d=u?a===`<<-->>`?`dashed`:`solid`:a.startsWith(`--`)?`dashed`:`solid`,f=a.includes(`>>`)||a.includes(`x`)?`filled`:`open`,p=a.includes(`x`),m={from:i,to:s,label:M(c.trim()),lineStyle:d,arrowHead:f};p&&(m.isLost=!0),u&&(m.bidirectional=!0),o===`+`&&(m.activate=!0),o===`-`&&(m.deactivate=!0),r.enabled&&(m.seqNumber=r.next,r.next=Math.round((r.next+r.step)*100)/100),e.messages.push(m)}function Fe(e){let t={},n={},r=[],i,a=!1;for(let o of e){let e=o.text;if(/^xychart(-beta)?\b/i.test(e)){/\bhorizontal\b/i.test(e)&&(a=!0);continue}let s=e.match(/^title\s+"([^"]+)"/);if(s){i=s[1];continue}let c=e.match(/^x-axis\s+(?:"([^"]*)"\s*)?\[([^\]]+)\]/);if(c){c[1]&&(t.title=c[1]),t.categories=c[2].split(`,`).map(e=>e.trim());continue}let l=e.match(/^x-axis\s+(?:"([^"]*)"\s+)?(-?\d+(?:\.\d+)?)\s*-->\s*(-?\d+(?:\.\d+)?)/);if(l){l[1]&&(t.title=l[1]),t.range={min:parseFloat(l[2]),max:parseFloat(l[3])};continue}let u=e.match(/^y-axis\s+(?:"([^"]*)"\s+)?(-?\d+(?:\.\d+)?)\s*-->\s*(-?\d+(?:\.\d+)?)/);if(u){u[1]&&(n.title=u[1]),n.range={min:parseFloat(u[2]),max:parseFloat(u[3])};continue}let d=e.match(/^y-axis\s+"([^"]+)"\s*$/);if(d){n.title=d[1];continue}let f=e.match(/^bar\s+\[([^\]]+)\]/);if(f){r.push({type:`bar`,data:Ie(f[1],`bar`,e,o.line)});continue}let p=e.match(/^line\s+\[([^\]]+)\]/);if(p){r.push({type:`line`,data:Ie(p[1],`line`,e,o.line)});continue}let m=e.match(/^(x-axis|y-axis|bar|line|title)\b/i);if(m)throw Re(m[1].toLowerCase(),e,o.line)}if(!n.range&&r.length>0){let e=r.flatMap(e=>e.data),t=Math.min(...e),i=Math.max(...e),a=i-t||1;t-=a*.1,i+=a*.1,t>0&&t<a*.5&&(t=0),n.range={min:t,max:i}}return n.range||={min:0,max:100},{title:i,horizontal:a,xAxis:t,yAxis:n,series:r}}function Ie(e,t,n,r){return e.split(`,`).map((e,i)=>{let a=e.trim(),o=parseFloat(a);if(a.length===0||Number.isNaN(o))throw Error(`Line ${r}: Invalid numeric value ${JSON.stringify(a)} at position ${i+1} in "${n}". Every value in a ${t} [...] list must be a number.`);return o})}var Le={"x-axis":`x-axis [A, B, C] (categories) or x-axis 0 --> 100 (numeric range), either optionally preceded by a quoted title`,"y-axis":`y-axis 0 --> 100 (numeric range) or y-axis "Title" (title only), optionally preceded by a quoted title before a range`,bar:`bar [10, 20, 30] — a comma-separated numeric array in square brackets`,line:`line [10, 20, 30] — a comma-separated numeric array in square brackets`,title:`title "Chart Title" — a double-quoted string`};function Re(e,t,n){let r=Le[e]??e;return Error(`Line ${n}: Malformed xychart-beta "${e}" directive: "${t}". Expected: ${r}.`)}var ze=`#3b82f6`;function Be(e){let t=e.replace(`#`,``),n=parseInt(t.substring(0,2),16)/255,r=parseInt(t.substring(2,4),16)/255,i=parseInt(t.substring(4,6),16)/255,a=Math.max(n,r,i),o=Math.min(n,r,i),s=(a+o)/2;if(a===o)return[0,0,s*100];let c=a-o,l=s>.5?c/(2-a-o):c/(a+o),u;return u=a===n?((r-i)/c+(r<i?6:0))/6:a===r?((i-n)/c+2)/6:((n-r)/c+4)/6,[u*360,l*100,s*100]}function Ve(e,t,n){let r=t/100,i=n/100,a=(1-Math.abs(2*i-1))*r,o=a*(1-Math.abs(e/60%2-1)),s=i-a/2,c,l,u;e<60?(c=a,l=o,u=0):e<120?(c=o,l=a,u=0):e<180?(c=0,l=a,u=o):e<240?(c=0,l=o,u=a):e<300?(c=o,l=0,u=a):(c=a,l=0,u=o);let d=e=>Math.round((e+s)*255).toString(16).padStart(2,`0`);return`#${d(c)}${d(l)}${d(u)}`}function He(e){return/^#[0-9a-fA-F]{6}$/.test(e)}function Ue(e){return Be(e)[2]<50}function We(e,t,n){if(e===0)return t;let r=He(t)?t:ze,i=n&&He(n)?n:void 0,[a,o]=Be(r),s=Math.max(55,Math.min(85,o)),c=Math.ceil(e/2),l=e%2==1,u=i&&Ue(i)?!l:l,d=u?Math.max(25,48-c*13):Math.min(78,55+c*11);return Ve(((a+(u?-8:12)*c)%360+360)%360,s,d)}var Ge={rect:`rectangle`,rectangle:`rectangle`,proc:`rectangle`,process:`rectangle`,"normal-rect":`rectangle`,rounded:`rounded`,event:`rounded`,"rounded-rect":`rounded`,stadium:`stadium`,pill:`stadium`,terminal:`stadium`,subproc:`subroutine`,subprocess:`subroutine`,subroutine:`subroutine`,"framed-rectangle":`subroutine`,"fr-rect":`subroutine`,cyl:`cylinder`,cylinder:`cylinder`,db:`cylinder`,database:`cylinder`,"h-cyl":`cylinder`,das:`cylinder`,"horizontal-cylinder":`cylinder`,"lin-cyl":`cylinder`,"lined-cylinder":`cylinder`,disk:`cylinder`,circ:`circle`,circle:`circle`,start:`circle`,"dbl-circ":`doublecircle`,"double-circle":`doublecircle`,stop:`doublecircle`,"f-circ":`filled-circle`,"filled-circle":`filled-circle`,junction:`filled-circle`,"cross-circ":`crossed-circle`,"crossed-circle":`crossed-circle`,summary:`crossed-circle`,diam:`diamond`,diamond:`diamond`,decision:`diamond`,question:`diamond`,hex:`hexagon`,hexagon:`hexagon`,prepare:`hexagon`,odd:`asymmetric`,"rect-left-inv-arrow":`asymmetric`,"lean-r":`parallelogram`,"lean-right":`parallelogram`,"in-out":`parallelogram`,"lean-l":`parallelogram-alt`,"lean-left":`parallelogram-alt`,"out-in":`parallelogram-alt`,"trap-b":`trapezoid`,"trapezoid-bottom":`trapezoid`,priority:`trapezoid`,"trap-t":`trapezoid-alt`,"trapezoid-top":`trapezoid-alt`,manual:`trapezoid-alt`,"curv-trap":`trapezoid-alt`,"curved-trapezoid":`trapezoid-alt`,display:`trapezoid-alt`,doc:`document`,document:`document`,"lin-doc":`document`,"lined-document":`document`,"tag-doc":`document`,"tagged-document":`document`,docs:`stacked-document`,documents:`stacked-document`,"st-doc":`stacked-document`,"stacked-document":`stacked-document`,"notch-rect":`card`,card:`card`,"notched-rectangle":`card`,"lin-rect":`lined-process`,"lined-rectangle":`lined-process`,"lin-proc":`lined-process`,"shaded-process":`lined-process`,"div-rect":`divided-process`,"divided-rectangle":`divided-process`,"div-proc":`divided-process`,"tag-rect":`rectangle`,"tagged-rectangle":`rectangle`,"tag-proc":`rectangle`,procs:`stacked-process`,processes:`stacked-process`,"st-rect":`stacked-process`,"stacked-rectangle":`stacked-process`,tri:`triangle`,triangle:`triangle`,extract:`triangle`,"flip-tri":`flipped-triangle`,"flipped-triangle":`flipped-triangle`,"manual-file":`flipped-triangle`,"win-pane":`window-pane`,"window-pane":`window-pane`,"internal-storage":`window-pane`,fork:`fork-join`,join:`fork-join`,"long-rect":`fork-join`,"notch-pent":`notched-pentagon`,"loop-limit":`notched-pentagon`,"notched-pentagon":`notched-pentagon`,"sl-rect":`sloped-rectangle`,"sloped-rectangle":`sloped-rectangle`,"manual-input":`sloped-rectangle`,flag:`flag`,"paper-tape":`flag`,"bow-rect":`bow-tie-rectangle`,"bow-tie-rectangle":`bow-tie-rectangle`,"stored-data":`bow-tie-rectangle`,delay:`half-rounded-rectangle`,"half-rounded-rectangle":`half-rounded-rectangle`,brace:`brace`,"brace-l":`brace`,comment:`brace`,"brace-r":`brace-right`,braces:`braces`,bolt:`bolt`,"com-link":`bolt`,"lightning-bolt":`bolt`,text:`text`,anchor:`anchor`};function Ke(e){return Ge[e.trim().toLowerCase()]}function qe(e){let t={};for(let n of Je(e,`,`)){let e=n.trim();if(e.length===0)continue;let r=Ye(e,`:`);if(r===-1){t.shape??=Xe(e);continue}let i=e.slice(0,r).trim().toLowerCase(),a=Xe(e.slice(r+1).trim());i.length>0&&(t[i]=a)}return t}function Je(e,t){let n=[],r=``,i=null;for(let a of e){if(i!==null){r+=a,a===i&&(i=null);continue}if(a===`"`||a===`'`){i=a,r+=a;continue}if(a===t){n.push(r),r=``;continue}r+=a}return n.push(r),n}function Ye(e,t){let n=null;for(let r=0;r<e.length;r++){let i=e[r];if(n!==null){i===n&&(n=null);continue}if(i===`"`||i===`'`){n=i;continue}if(i===t)return r}return-1}function Xe(e){return e.length>=2&&(e.startsWith(`"`)&&e.endsWith(`"`)||e.startsWith(`'`)&&e.endsWith(`'`))?e.slice(1,-1):e}function Ze(e){if(!e.startsWith(`@{`))return;let t=0,n=null;for(let r=1;r<e.length;r++){let i=e[r];if(n!==null){i===n&&(n=null);continue}if(i===`"`||i===`'`){n=i;continue}if(i===`{`){t++;continue}if(i===`}`&&(t--,t===0))return{body:e.slice(2,r),length:r+1}}}function Qe(e){return[e.length-1,(e[0]?.length??1)-1]}var $e=`\x1B]8;;\x1B\\`;function et(e){return`\x1b]8;;${e.replace(/[^\x21-\x7e]/gu,e=>encodeURIComponent(e))}\x1b\\`}var tt=/\x1b\]8;[^\x07\x1b]*(?:\x1b\\|\x07)/g;function nt(e){return e.replace(tt,``)}function rt(e,t){let n=[];for(let r=0;r<=e;r++){let e=[];for(let n=0;n<=t;n++)e.push(null);n.push(e)}return n}function it(e,t,n,r){let i=e[t];i===void 0||n<0||n>=i.length||(i[n]=r)}function at(e){for(let t of e)t.reverse();return e}function ot(e,t,n,r,i){let[a,o]=Qe(t),s=Math.max(1,i?.from??1),c=Math.min(o-1,i?.to??o-1);for(let i=s;i<=c;i++){let o=-1,s=-1;for(let e=1;e<=a-1;e++)t[e]?.[i]!==` `&&(o===-1&&(o=e),s=e);if(o!==-1)for(let t=o;t<=s;t++)it(e,t+n.x,i+n.y,r)}}function st(e,n){let[r,i]=Qe(e.canvas),a=rt(r,i);for(let r of e.nodes){if(!r.drawing||!r.drawingCoord)continue;let e=t(n.get(r.name)?.href);e!==void 0&&ot(a,r.drawing,r.drawingCoord,e)}return a}var ct=class{current=null;advance(e){if(e===this.current)return``;let t=this.current===null?``:$e;return e!==null&&(t+=et(e)),this.current=e,t}finish(){let e=this.current===null?``:$e;return this.current=null,e}};function lt(e,t){let n=new ct,r=``;for(let[i,a]of e.entries())r+=n.advance(t[i]??null)+a;return r+n.finish()}var ut={fg:`#27272a`,border:`#a1a1aa`,line:`#71717a`,arrow:`#52525b`,corner:`#71717a`,junction:`#a1a1aa`};function dt(e){let t=e.line??l(e.fg,e.bg,ae.line),n=e.border??l(e.fg,e.bg,ae.nodeStroke);return{fg:e.fg,border:n,line:t,arrow:e.accent??l(e.fg,e.bg,ae.arrow),accent:e.accent,bg:e.bg,corner:t,junction:n}}function ft(){let e=globalThis.process;if(e){if(!e.stdout?.isTTY)return`none`;let t=e.env?.COLORTERM?.toLowerCase()??``,n=e.env?.TERM?.toLowerCase()??``;return t===`truecolor`||t===`24bit`?`truecolor`:n.includes(`256color`)||n.includes(`256`)?`ansi256`:n&&n!==`dumb`?`ansi16`:`none`}return typeof document<`u`?`html`:`none`}function pt(e){return i(e.startsWith(`#`)?e:`#${e}`)??{r:0,g:0,b:0}}var mt=`\x1B[`,ht=`${mt}0m`;function gt(e){let{r:t,g:n,b:r}=pt(e);return`${mt}38;2;${t};${n};${r}m`}function _t(e,t,n){let r=(e+t+n)/3;if(Math.max(Math.abs(e-r),Math.abs(t-r),Math.abs(n-r))<10){let e=Math.round(r/255*23);return 232+Math.min(23,Math.max(0,e))}let i=e=>e<48?0:e<115?1:Math.min(5,Math.floor((e-35)/40)),a=i(e),o=i(t),s=i(n);return 16+36*a+6*o+s}function vt(e){let{r:t,g:n,b:r}=pt(e);return`${mt}38;5;${_t(t,n,r)}m`}function yt(e){let{r:t,g:n,b:r}=pt(e),i=.299*t+.587*n+.114*r,a=i>100?0:60,o;return o=t>180&&n<100&&r<100?31:n>180&&t<100&&r<100?32:t>150&&n>150&&r<100?33:r>180&&t<100&&n<100?34:t>150&&r>150&&n<100?35:n>150&&r>150&&t<100?36:i>200?37:i<50?30:37,`${mt}${o+a}m`}function bt(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`)}function xt(e,t){return`<span style="color:${e}">${bt(t)}</span>`}function St(e,t){switch(e){case`text`:return t.fg;case`border`:return t.border;case`line`:return t.line;case`arrow`:return t.arrow;case`corner`:return t.corner??t.line;case`junction`:return t.junction??t.border;default:return t.fg}}function Ct(e,t,n){if(n===`none`)return``;let r=St(e,t);switch(n){case`truecolor`:return gt(r);case`ansi256`:return vt(r);case`ansi16`:return yt(r);default:return``}}function wt(e,t,n,r,i){if(r===`none`)return i?lt(e,i):e.join(``);if(r===`html`)return Tt(e,t,n);let a=new ct,o=``,s=null,c=``;for(let[l,u]of e.entries()){let e=t[l]??null,d=i?a.advance(i[l]??null):``;if(u===` `){c.length>0&&(o+=s===null?c:Ct(s,n,r)+c+ht,c=``,s=null),o+=d+u;continue}if(e===s){c+=d+u;continue}c.length>0&&(o+=s===null?c:Ct(s,n,r)+c+ht),c=d+u,s=e}return c.length>0&&s!==null?o+=Ct(s,n,r)+c+ht:c.length>0&&(o+=c),o+a.finish()}function Tt(e,t,n){let r=``,i=null,a=``,o=()=>{a.length!==0&&(r+=i===null?bt(a):xt(St(i,n),a),a=``,i=null)};for(let[n,s]of e.entries()){let e=t[n]??null;if(s===` `){o(),r+=` `;continue}if(e===i){a+=s;continue}o(),a=s,i=e}return o(),r}function Et(e,t,n){if(n===`none`||e.length===0)return e;if(n===`html`)return xt(t,e);let r;switch(n){case`truecolor`:r=gt(t);break;case`ansi256`:r=vt(t);break;case`ansi16`:r=yt(t);break;default:return e}return`${r}${e}${ht}`}var Dt=/\p{Mn}|\p{Me}/u;function Ot(e){return Dt.test(e)}var kt=new Intl.Segmenter(void 0,{granularity:`grapheme`}),At=`️`;function jt(e){let t=[];for(let{segment:n}of kt.segment(e))t.push(n);return t}function Mt(e){if(e.includes(At))return 2;let t=!1,n=!1;for(let r of e)j(r)&&(t=!0),Ot(r)||(n=!0);return t?2:+!!n}function B(e){let t=0;for(let n of jt(e))t+=Mt(n);return t}function Nt(e){let t=[];for(let n of jt(e)){let e=Mt(n);e!==0&&(t.push(n),e===2&&t.push(``))}return t}function V(e,t){let n=[];for(let r=0;r<=e;r++){let e=[];for(let n=0;n<=t;n++)e.push(` `);n.push(e)}return n}function H(e){let[t,n]=Lt(e);return V(t,n)}function Pt(e,t){let n=[];for(let r=0;r<=e;r++){let e=[];for(let n=0;n<=t;n++)e.push(null);n.push(e)}return n}function Ft(e,t,n){let r=e.length-1,i=(e[0]?.length??1)-1,a=Pt(Math.max(t,r),Math.max(n,i));for(let t=0;t<a.length;t++)for(let n=0;n<(a[0]?.length??0);n++)t<e.length&&n<(e[0]?.length??0)&&(a[t][n]=e[t][n]);return e.length=0,e.push(...a),e}function It(e,t,n,r){(t>=e.length||n>=(e[0]?.length??0))&&Ft(e,t,n),e[t][n]=r}function Lt(e){return[e.length-1,(e[0]?.length??1)-1]}function Rt(e,t,n){let[r,i]=Lt(e),a=V(Math.max(t,r),Math.max(n,i));for(let t=0;t<a.length;t++)for(let n=0;n<(a[0]?.length??0);n++)t<e.length&&n<(e[0]?.length??0)&&(a[t][n]=e[t][n]);return e.length=0,e.push(...a),e}function U(e,t,n,r,i){let[a,o]=Lt(e);t<0||t>a||n<0||n>o||(e[t][n]=r,i&&It(i.roleCanvas,t,n,i.role))}var zt=new Set([`─`,`│`,`┌`,`┐`,`└`,`┘`,`├`,`┤`,`┬`,`┴`,`┼`,`╴`,`╵`,`╶`,`╷`]);function Bt(e){return zt.has(e)}function Vt(e){return/^[a-zA-Z0-9]$/.test(e)}var Ht={"─":{"│":`┼`,"┌":`┬`,"┐":`┬`,"└":`┴`,"┘":`┴`,"├":`┼`,"┤":`┼`,"┬":`┬`,"┴":`┴`},"│":{"─":`┼`,"┌":`├`,"┐":`┤`,"└":`├`,"┘":`┤`,"├":`├`,"┤":`┤`,"┬":`┼`,"┴":`┼`},"┌":{"─":`┬`,"│":`├`,"┐":`┬`,"└":`├`,"┘":`┼`,"├":`├`,"┤":`┼`,"┬":`┬`,"┴":`┼`},"┐":{"─":`┬`,"│":`┤`,"┌":`┬`,"└":`┼`,"┘":`┤`,"├":`┼`,"┤":`┤`,"┬":`┬`,"┴":`┼`},"└":{"─":`┴`,"│":`├`,"┌":`├`,"┐":`┼`,"┘":`┴`,"├":`├`,"┤":`┼`,"┬":`┼`,"┴":`┴`},"┘":{"─":`┴`,"│":`┤`,"┌":`┼`,"┐":`┤`,"└":`┴`,"├":`┼`,"┤":`┤`,"┬":`┼`,"┴":`┴`},"├":{"─":`┼`,"│":`├`,"┌":`├`,"┐":`┼`,"└":`├`,"┘":`┼`,"┤":`┼`,"┬":`┼`,"┴":`┼`},"┤":{"─":`┼`,"│":`┤`,"┌":`┼`,"┐":`┤`,"└":`┼`,"┘":`┤`,"├":`┼`,"┬":`┼`,"┴":`┼`},"┬":{"─":`┬`,"│":`┼`,"┌":`┬`,"┐":`┬`,"└":`┼`,"┘":`┼`,"├":`┼`,"┤":`┼`,"┴":`┼`},"┴":{"─":`┴`,"│":`┼`,"┌":`┼`,"┐":`┼`,"└":`┴`,"┘":`┴`,"├":`┼`,"┤":`┼`,"┬":`┼`}};function Ut(e,t){return Ht[e]?.[t]??e}function Wt(e,t,n,...r){let[i,a]=Lt(e);for(let e of r){let[n,r]=Lt(e);i=Math.max(i,n+t.x),a=Math.max(a,r+t.y)}let o=V(i,a);for(let t=0;t<=i;t++)for(let n=0;n<=a;n++)t<e.length&&n<(e[0]?.length??0)&&(o[t][n]=e[t][n]);for(let e of r)for(let r=0;r<e.length;r++)for(let i=0;i<(e[0]?.length??0);i++){let a=e[r][i];if(a!==` `){let e=r+t.x,s=i+t.y,c=o[e][s];!n&&Bt(a)&&Bt(c)?o[e][s]=Ut(c,a):Vt(c)&&Vt(a)||(o[e][s]=a)}}return o}function Gt(e,t){let[n,r]=Lt(e),i=[],a=t?.roleCanvas,o=t?.colorMode??`none`,s=t?.theme??ut,c=o===`html`?void 0:t?.linkCanvas;for(let t=0;t<=r;t++)if(o===`none`||!a){let r=[];for(let i=0;i<=n;i++)r.push(e[i][t]);if(c){let e=r.map((e,n)=>c[n]?.[t]??null);i.push(lt(r,e))}else i.push(r.join(``))}else{let r=[],l=[],u=[];for(let i=0;i<=n;i++)r.push(e[i][t]),l.push(a[i]?.[t]??null),u.push(c?.[i]?.[t]??null);i.push(wt(r,l,s,o,c?u:void 0))}return i.join(`
5
- `)}var Kt={"▲":`▼`,"▼":`▲`,"◤":`◣`,"◣":`◤`,"◥":`◢`,"◢":`◥`,"^":`v`,v:`^`,"┌":`└`,"└":`┌`,"┐":`┘`,"┘":`┐`,"┬":`┴`,"┴":`┬`,"╵":`╷`,"╷":`╵`};function qt(e){for(let t of e)t.reverse();for(let t of e)for(let[e,n]of t.entries()){let r=Kt[n];r&&(t[e]=r)}return e}function Jt(e){for(let t of e)t.reverse();return e}function Yt(e,t,n,r=!1){let i=Nt(n);Rt(e,t.x+i.length,t.y);for(let[n,a]of i.entries()){let i=t.x+n,o=e[i][t.y];(r||o===` `)&&(e[i][t.y]=a)}}function Xt(e,t,n){let r=0,i=0;for(let e of t.values())r+=e;for(let e of n.values())i+=e;Rt(e,r-1,i-1)}function Zt(e,t,n){let r=0,i=0;for(let e of t.values())r+=e;for(let e of n.values())i+=e;Ft(e,r-1,i-1)}var Qt=60,$t=20,en={hLine:`─`,vLine:`│`,origin:`┼`,yTick:`┤`,xTick:`┬`,bar:`█`,grid:`·`,cornerTL:`╭`,cornerTR:`╮`,cornerBL:`╰`,cornerBR:`╯`},tn={hLine:`-`,vLine:`|`,origin:`+`,yTick:`+`,xTick:`+`,bar:`#`,grid:`.`,cornerTL:`+`,cornerTR:`+`,cornerBL:`+`,cornerBR:`+`};function nn(e,t){let n=t.accent??`#3b82f6`;return e<=1?[n]:Array.from({length:e},(e,r)=>We(r,n,t.bg))}function rn(e,t){switch(e){case`text`:return t.fg;case`border`:return t.border;case`line`:return t.line;case`arrow`:return t.arrow;case`corner`:return t.corner??t.line;case`junction`:return t.junction??t.border;default:return t.fg}}function an(e,t,n,r){let i=Fe(_(e)),a=t.useAscii?tn:en;return i.horizontal?sn(i,a,n,r):on(i,a,n,r)}function on(e,t,n,r){let i=vn(e);if(i===0)return``;let a=e.yAxis.range;if(!a)throw Error(`XY chart: y-axis range was not set by the parser`);let o=bn(a.min,a.max),s=o.map(e=>xn(e)),c=Math.max(...s.map(e=>e.length))+1,l=Math.max(Qt,i*6),u=$t,d=Math.floor(l/i),f=yn(e,i),p=!!e.title,m=!!e.xAxis.title,h=!!e.yAxis.title,g=e.series.length>1,_=p?0:-1,v=(p?2:0)+ +!!g,y=h?2:0,b=y+c+1,x=b+d*i+2,S=v+u,C=S+1,w=m?C+1:-1,T=C+1+ +!!m+0,E=dn(x,T),D=fn(x,T),O=pn(x,T),ee=nn(e.series.length,r),k=e=>{let t=(e-a.min)/(a.max-a.min||1);return Math.round(t*19)},A=e=>b+Math.floor(d*(e+.5));e.title&&_>=0&&hn(E,D,_,Math.floor(x/2-e.title.length/2),e.title,`text`),g&&un(E,D,O,e,+!!p,x,t,ee);for(let e=0;e<u;e++)W(E,D,v+(19-e),b-1,t.vLine,`border`);W(E,D,S,b-1,t.origin,`border`);for(let e of o){let n=k(e);if(n<0||n>=u)continue;let r=v+(19-n),i=xn(e);W(E,D,r,b-1,n===0?t.origin:t.yTick,`border`);let a=y+c-i.length;hn(E,D,r,Math.max(0,a),i,`text`)}for(let e=b;e<b+d*i;e++)W(E,D,S,e,t.hLine,`border`);for(let e=0;e<i;e++){let n=A(e);W(E,D,S,n,t.xTick,`border`);let r=f[e],i=n-Math.floor(r.length/2);hn(E,D,C,Math.max(0,i),r,`text`)}if(e.xAxis.title&&w>=0){let t=e.xAxis.title;hn(E,D,w,Math.floor(x/2-t.length/2),t,`text`)}if(e.yAxis.title){let t=e.yAxis.title,n=v+Math.max(0,Math.floor((u-t.length)/2));for(let e=0;e<t.length;e++){let r=n+e;if(r>=v+u)break;W(E,D,r,0,t[e],`text`)}}for(let e of o){let n=k(e);if(n<0||n>=u)continue;let r=v+(19-n);for(let e=b;e<b+d*i;e++)mn(E,r,e)===` `&&W(E,D,r,e,t.grid,`line`)}let te=[];for(let t=0;t<e.series.length;t++)e.series[t].type===`bar`&&te.push({data:e.series[t].data,globalIdx:t});if(te.length>0){let e=Math.max(1,d-2),n=Math.max(1,Math.min(e,8)),r=k(Math.max(0,a.min));for(let e=0;e<te.length;e++){let i=te[e],a=ee[i.globalIdx];for(let e=0;e<i.data.length;e++){let o=A(e)-Math.floor(n/2),s=k(i.data[e]),c=Math.min(r,s),l=Math.max(r,s);for(let e=c;e<=l;e++){let r=v+(19-e);for(let e=o;e<o+n;e++)W(E,D,r,e,t.bar,`arrow`,O,a)}}}}let j=[];for(let t=0;t<e.series.length;t++)e.series[t].type===`line`&&j.push({data:e.series[t].data,globalIdx:t});for(let e of j){if(e.data.length===0)continue;let n=ee[e.globalIdx];cn(E,D,e.data,A,k,v,u,b,d*i,t,O,n)}return gn(E,D,O,n,r)}function sn(e,t,n,r){let i=vn(e);if(i===0)return``;let a=e.yAxis.range;if(!a)throw Error(`XY chart: y-axis range was not set by the parser`);let o=bn(a.min,a.max),s=yn(e,i),c=Math.max(...s.map(e=>e.length))+1,l=Math.max(Qt,40),u=Math.max(2,Math.floor($t/i)),d=u*i,f=!!e.title,p=!!e.yAxis.title,m=e.series.length>1,h=(f?2:0)+ +!!m,g=c+1,_=g+l+2,v=h+d+2+ +!!p,y=h+d,b=dn(_,v),x=fn(_,v),S=pn(_,v),C=nn(e.series.length,r),w=e=>{let t=(e-a.min)/(a.max-a.min||1);return g+Math.round(t*59)},T=e=>h+Math.floor(u*(e+.5));e.title&&hn(b,x,0,Math.floor(_/2-e.title.length/2),e.title,`text`),m&&un(b,x,S,e,+!!f,_,t,C);for(let e=h;e<h+d;e++)W(b,x,e,g-1,t.vLine,`border`);W(b,x,y,g-1,t.origin,`border`);for(let e=0;e<i;e++){let t=T(e),n=s[e],r=c-n.length;hn(b,x,t,Math.max(0,r),n,`text`)}for(let e=g;e<g+l;e++)W(b,x,y,e,t.hLine,`border`);for(let e of o){let n=w(e);if(n<g||n>=g+l)continue;W(b,x,y,n,t.xTick,`border`);let r=xn(e);hn(b,x,y+1,n-Math.floor(r.length/2),r,`text`)}if(e.yAxis.title){let t=e.yAxis.title;hn(b,x,v-1,Math.floor(_/2-t.length/2),t,`text`)}for(let e of o){let n=w(e);if(!(n<g||n>=g+l))for(let e=h;e<h+d;e++)mn(b,e,n)===` `&&W(b,x,e,n,t.grid,`line`)}let E=[];for(let t=0;t<e.series.length;t++)e.series[t].type===`bar`&&E.push({data:e.series[t].data,globalIdx:t});if(E.length>0){let e=w(Math.max(0,a.min));for(let n=0;n<E.length;n++){let r=E[n],i=C[r.globalIdx];for(let n=0;n<r.data.length;n++){let a=T(n),o=w(r.data[n]),s=Math.min(e,o),c=Math.max(e,o);for(let e=a;e<a+1;e++)for(let n=s;n<=c;n++)W(b,x,e,n,t.bar,`arrow`,S,i)}}}let D=[];for(let t=0;t<e.series.length;t++)e.series[t].type===`line`&&D.push({data:e.series[t].data,globalIdx:t});for(let e of D){if(e.data.length===0)continue;let n=C[e.globalIdx];ln(b,x,e.data,T,w,h,d,g,l,t,S,n)}return gn(b,x,S,n,r)}function cn(e,t,n,r,i,a,o,s,c,l,u,d){if(n.length===0)return;let f=n.map((e,t)=>({col:r(t),row:i(e)})),p=(n,r,i)=>{let l=a+(o-1-r);l>=0&&n>=s&&n<s+c&&W(e,t,l,n,i,`arrow`,u,d)};if(f.length===1){p(f[0].col,f[0].row,l.hLine);return}for(let e=0;e<f.length-1;e++){let t=f[e],n=f[e+1];if(t.row===n.row){for(let e=t.col;e<=n.col;e++)p(e,t.row,l.hLine);continue}let r=Math.round((t.col+n.col)/2),i=n.row>t.row;for(let e=t.col;e<r;e++)p(e,t.row,l.hLine);i?p(r,t.row,l.cornerBR):p(r,t.row,l.cornerTR);let a=Math.min(t.row,n.row),o=Math.max(t.row,n.row);for(let e=a+1;e<o;e++)p(r,e,l.vLine);i?p(r,n.row,l.cornerTL):p(r,n.row,l.cornerBL);for(let e=r+1;e<=n.col;e++)p(e,n.row,l.hLine);if(e===0){let e=Math.max(s,t.col-Math.floor((n.col-t.col)/4));for(let n=e;n<t.col;n++)p(n,t.row,l.hLine)}if(e===f.length-2){let e=Math.min(s+c-1,n.col+Math.floor((n.col-t.col)/4));for(let t=n.col+1;t<=e;t++)p(t,n.row,l.hLine)}}}function ln(e,t,n,r,i,a,o,s,c,l,u,d){if(n.length===0)return;let f=n.map((e,t)=>({row:r(t),col:i(e)})),p=(n,r,i)=>{n>=a&&n<a+o&&r>=s&&r<s+c&&W(e,t,n,r,i,`arrow`,u,d)};if(f.length===1){p(f[0].row,f[0].col,l.vLine);return}for(let e=0;e<f.length-1;e++){let t=f[e],n=f[e+1];if(t.col===n.col){for(let e=t.row;e<=n.row;e++)p(e,t.col,l.vLine);continue}let r=Math.round((t.row+n.row)/2),i=n.col>t.col;for(let e=t.row;e<r;e++)p(e,t.col,l.vLine);i?p(r,t.col,l.cornerBL):p(r,t.col,l.cornerBR);let a=Math.min(t.col,n.col),o=Math.max(t.col,n.col);for(let e=a+1;e<o;e++)p(r,e,l.hLine);i?p(r,n.col,l.cornerTR):p(r,n.col,l.cornerTL);for(let e=r+1;e<=n.row;e++)p(e,n.col,l.vLine)}}function un(e,t,n,r,i,a,o,s){let c=[],l=0,u=0;for(let e=0;e<r.series.length;e++)r.series[e].type===`bar`?(c.push({symbol:o.bar,label:`Bar ${l+1}`,globalIdx:e}),l++):(c.push({symbol:o.hLine,label:`Line ${u+1}`,globalIdx:e}),u++);let d=0;for(let e=0;e<c.length;e++)e>0&&(d+=2),d+=2+c[e].label.length;let f=Math.max(0,Math.floor(a/2-d/2));for(let r=0;r<c.length;r++){r>0&&(f+=2);let a=c[r];W(e,t,i,f,a.symbol,`arrow`,n,s[a.globalIdx]),f+=1,f+=1,hn(e,t,i,f,a.label,`text`),f+=a.label.length}}function dn(e,t){return V(e-1,t-1)}function fn(e,t){return Pt(e-1,t-1)}function pn(e,t){return Array.from({length:e},()=>Array.from({length:t}).fill(null))}function W(e,t,n,r,i,a,o,s){r>=0&&r<e.length&&n>=0&&n<(e[0]?.length??0)&&(U(e,r,n,i,{role:a,roleCanvas:t}),o&&s&&(o[r][n]=s))}function mn(e,t,n){return n>=0&&n<e.length&&t>=0&&t<e[0].length?e[n][t]:` `}function hn(e,t,n,r,i,a){for(let o=0;o<i.length;o++)W(e,t,n,r+o,i[o],a)}function gn(e,t,n,r,i){if(e.length===0)return``;let a=e[0].length,o=e.length,s=[];for(let c=0;c<a;c++){let a=[],l=[],u=[];for(let r=0;r<o;r++)a.push(e[r][c]),l.push(t[r][c]),u.push(n[r][c]);let d=a.length-1;for(;d>=0&&a[d]===` `;)d--;d<0?s.push(``):s.push(_n(a.slice(0,d+1),l.slice(0,d+1),u.slice(0,d+1),i,r))}for(;s.length>0&&s[s.length-1]===``;)s.pop();return s.join(`
6
- `)}function _n(e,t,n,r,i){if(i===`none`)return e.join(``);let a=``,o=null,s=``;for(let c=0;c<e.length;c++){let l=e[c];if(l===` `){s.length>0&&(a+=o?Et(s,o,i):s,s=``,o=null),a+=` `;continue}let u=n[c]??null,d=t[c]??null,f=u??(d?rn(d,r):null);f===o?s+=l:(s.length>0&&(a+=o?Et(s,o,i):s),s=l,o=f)}return s.length>0&&(a+=o?Et(s,o,i):s),a}function vn(e){if(e.xAxis.categories)return e.xAxis.categories.length;for(let t of e.series)if(t.data.length>0)return t.data.length;return 0}function yn(e,t){if(e.xAxis.categories)return e.xAxis.categories;if(e.xAxis.range){let{min:n,max:r}=e.xAxis.range,i=t>1?(r-n)/(t-1):0;return Array.from({length:t},(e,t)=>xn(n+i*t))}return Array.from({length:t},(e,t)=>String(t+1))}function bn(e,t){let n=t-e;if(n<=0)return[e];let r=n/6,i=10**Math.floor(Math.log10(r)),a=r/i,o;o=a<=1.5?i:a<=3?2*i:a<=7?5*i:10*i;let s=Math.ceil(e/o)*o,c=[];for(let e=s;e<=t+o*.001;e+=o)c.push(Math.round(e*1e10)/1e10);return c}function xn(e){return Number.isInteger(e)?String(e):e.toFixed(+(Math.abs(e)<10))}var G={x:1,y:0},K={x:1,y:2},q={x:0,y:1},J={x:2,y:1},Sn={x:2,y:0},Cn={x:0,y:0},wn={x:2,y:2},Tn={x:0,y:2},En={x:1,y:1};function Y(e,t){return e.x===t.x&&e.y===t.y}function Dn(e){return Y(e,G)||Y(e,K)||Y(e,q)||Y(e,J)}function On(e){if(!Dn(e))throw Error(`Expected a cardinal direction (Up/Down/Left/Right); got {x:${e.x}, y:${e.y}}`);return e}function kn(e,t,n,r){return Math.max(r,n+(e-t))}function An(e,t){return e.x===t.x&&e.y===t.y}function jn(e,t){return e.x===t.x&&e.y===t.y}function Mn(e,t){return{x:e.x+t.x,y:e.y+t.y}}function Nn(e){return`${e.x},${e.y}`}function X(e){let t=e.gridCoord;if(t===null)throw Error(`Node "${e.name}" has no gridCoord; grid layout must run before it is read`);return t}var Pn={name:``,styles:{}},Fn=class{#e=new Set;has(e){return this.#e.has(e)}add(e){this.#e.add(e)}delete(e){this.#e.delete(e)}keys(){return this.#e.keys()}};function In(){return new Fn}function Ln(e){let t=In();for(let n of e.keys())t.add(n);return t}function Rn(e,t){return e.has(Nn(t))}function zn(e,t){return t.x<0||t.y<0?!1:!Rn(e,t)}function Bn(e,t,n=3){for(let r=0;r<n;r++)for(let i=0;i<n;i++)if(Rn(e,{x:t.x+r,y:t.y+i}))return!1;return!0}function Vn(e,t,n=3){if(!Bn(e,t,n))throw Error(`Grid block at (${t.x},${t.y}) is already occupied`);for(let r=0;r<n;r++)for(let i=0;i<n;i++){let n={x:t.x+r,y:t.y+i};e.add(Nn(n))}}var Hn=1e5;function Un(e){if(e.length===0)return[];let t=[e[0]];for(let n=1;n<e.length;n++){let r=e[n-1],i=e[n],a=r.x,o=r.y,s=Math.abs(i.x-r.x),c=Math.abs(i.y-r.y),l=r.x<i.x?1:-1,u=r.y<i.y?1:-1,d=s-c,f=0;for(;a!==i.x||o!==i.y;){if(f>=Hn)throw Error(`pathCells: segment from (${r.x},${r.y}) to (${i.x},${i.y}) did not reach its endpoint within ${Hn} steps`);let e=2*d;e>-c&&(d-=c,a+=l),e<s&&(d+=s,o+=u),t.push({x:a,y:o}),f++}}return t}var Wn=class{items=[];get length(){return this.items.length}push(e){this.items.push(e),this.bubbleUp(this.items.length-1)}pop(){if(this.items.length===0)return;let e=this.items[0],t=this.items.pop();return this.items.length>0&&(this.items[0]=t,this.sinkDown(0)),e}bubbleUp(e){let t=e;for(;t>0;){let e=t-1>>1;if(this.items[t].priority<this.items[e].priority)[this.items[t],this.items[e]]=[this.items[e],this.items[t]],t=e;else break}}sinkDown(e){let t=this.items.length,n=e;for(;;){let e=n,r=2*n+1,i=2*n+2;if(r<t&&this.items[r].priority<this.items[e].priority&&(e=r),i<t&&this.items[i].priority<this.items[e].priority&&(e=i),e!==n)[this.items[n],this.items[e]]=[this.items[e],this.items[n]],n=e;else break}}};function Gn(e,t){let n=Math.abs(e.x-t.x),r=Math.abs(e.y-t.y);return n===0||r===0?n+r:n+r+1}var Kn=[{x:1,y:0},{x:-1,y:0},{x:0,y:1},{x:0,y:-1}],qn=5e4,Jn=2e5;function Yn(e=Jn){return{remaining:e}}function Xn(e,t,n,r){if(r&&r.remaining<=0)return null;let i=new Wn;i.push({coord:t,priority:0});let a=new Map;a.set(Nn(t),0);let o=new Map;o.set(Nn(t),null);let s=0;for(;i.length>0;){if(++s>qn)return null;if(r){if(r.remaining<=0)return null;r.remaining--}let t=i.pop().coord;if(An(t,n)){let e=[],n=t;for(;n!==null;)e.unshift(n),n=o.get(Nn(n))??null;return e}let c=a.get(Nn(t));if(c===void 0)throw Error(`A* pathfinding: missing cost for visited cell ${Nn(t)}`);for(let r of Kn){let s={x:t.x+r.x,y:t.y+r.y};if(!zn(e,s)&&!An(s,n))continue;let l=c+1,u=Nn(s),d=a.get(u);if(d===void 0||l<d){a.set(u,l);let e=l+Gn(s,n);i.push({coord:s,priority:e}),o.set(u,t)}}}return null}function Zn(e){if(e.length<=2)return e;let t=new Set,n=e[0],r=e[1];for(let i=2;i<e.length;i++){let a=e[i],o=r.x-n.x,s=r.y-n.y,c=a.x-r.x,l=a.y-r.y;o===c&&s===l&&t.add(i-1),n=r,r=a}return e.filter((e,n)=>!t.has(n))}function Qn(e,t,n,r){if(t.x===n.x&&t.y===n.y)return!0;let i=t.x===n.x;if(!i&&t.y!==n.y)return!1;let a=i?n.y>t.y?1:-1:n.x>t.x?1:-1,o=i?t.y:t.x,s=i?n.y:n.x;for(o+=a;;o+=a){let n=o===s,a=i?{x:t.x,y:o}:{x:o,y:t.y};if(!(n&&!r)&&!zn(e,a))return!1;if(n)break}return!0}function $n(e,t,n,r){let i=r?{x:n.x,y:t.y}:{x:t.x,y:n.y};return!Qn(e,t,i,!0)||!Qn(e,i,n,!1)?null:[t,i,n]}function er(e,t,n,r){if(t.x===n.x||t.y===n.y)return null;let i=Y(r,q)||Y(r,J);return $n(e.grid,t,n,i)??$n(e.grid,t,n,!i)}function tr(e,t,n,r){if(!e.pathBudget)throw Error(`routeEdge requires graph.pathBudget to be set; call createPathBudget() (see grid.ts createMapping) before routing edges`);let i=er(e,t,n,r)??Xn(e.grid,t,n,e.pathBudget);return i?Zn(i):null}function nr(e){if(e.config.graphDirection!==`TD`)return[];let t=[],n=new Set,r=new Map;for(let t of e.edges){if(t.from===t.to)continue;let e=r.get(t.to)??[];e.push(t),r.set(t.to,e)}for(let[i,a]of r){if(a.length<2||!rr(a,e)||a.some(e=>n.has(e)))continue;let r={type:`fan-in`,edges:[...a],sharedNode:i,otherNodes:a.map(e=>e.from),junctionPoint:null,sharedPath:[],junctionDir:En,sharedNodeDir:En};for(let e of a)e.bundle=r,n.add(e);t.push(r)}let i=new Map;for(let t of e.edges){if(t.from===t.to||n.has(t))continue;let e=i.get(t.from)??[];e.push(t),i.set(t.from,e)}for(let[r,a]of i){if(a.length<2||!rr(a,e))continue;let i={type:`fan-out`,edges:[...a],sharedNode:r,otherNodes:a.map(e=>e.to),junctionPoint:null,sharedPath:[],junctionDir:En,sharedNodeDir:En};for(let e of a)e.bundle=i,n.add(e);t.push(i)}return t}function rr(e,t){if(e.length<2)return!1;let n=e[0].style,r=Q(t,e[0].from),i=Q(t,e[0].to);for(let a of e){if(a.style!==n||a.text.length>0)return!1;let e=Q(t,a.from),o=Q(t,a.to);if(e!==r||o!==i||e!==o)return!1}let a=e.every(t=>t.to===e[0].to),o=a?e.map(e=>e.from):e.map(e=>e.to);if(new Set(o).size!==o.length||e.some(e=>e.parallelLane))return!1;let s=t.config.graphDirection===`LR`?`x`:`y`,c=(a?e[0].to:e[0].from).gridCoord;if(!c)return!1;for(let t of e){let e=(a?t.from:t.to).gridCoord;if(!e)return!1;if(a){if(e[s]>=c[s])return!1}else if(e[s]<=c[s])return!1}return!0}function ir(e,t){let n=e.config.graphDirection,r=X(t.sharedNode);if(t.type===`fan-in`){if(n===`TD`){let e=r.y-1;return{x:r.x+1,y:e}}return{x:r.x-1,y:r.y+1}}if(n===`TD`){let e=r.y+3;return{x:r.x+1,y:e}}return{x:r.x+3,y:r.y+1}}function ar(e,t){let n=e.config.graphDirection;t.junctionPoint=ir(e,t);let r=t.junctionPoint;if(t.type===`fan-in`){t.junctionDir=n===`TD`?G:q,t.sharedNodeDir=n===`TD`?K:J;let i=X(t.sharedNode),a=On(n===`TD`?G:q),o=Mn(i,a);t.sharedPath=tr(e,r,o,a)??[r,o];for(let i of t.edges){let o=X(i.from),s=On(n===`TD`?K:J),c=Mn(o,s);i.pathToJunction=tr(e,c,r,s)??[c,r],i.startDir=s,i.endDir=a,i.path=[...i.pathToJunction,...t.sharedPath.slice(1)]}}else{t.junctionDir=n===`TD`?K:J,t.sharedNodeDir=n===`TD`?G:q;let i=X(t.sharedNode),a=On(n===`TD`?K:J),o=Mn(i,a);t.sharedPath=tr(e,o,r,a)??[o,r];for(let i of t.edges){let o=X(i.to),s=On(n===`TD`?G:q),c=Mn(o,s);i.pathToJunction=tr(e,r,c,s)??[r,c],i.startDir=a,i.endDir=s,i.path=[...t.sharedPath,...i.pathToJunction.slice(1)]}}}function or(e){for(let t of e.bundles)ar(e,t)}function sr(){return new Map}function cr(e,t,n,r){for(let i of Un(n)){if(Rn(e,i))continue;let n=t.get(Nn(i));if(n!==void 0&&n!==r)return i}return null}function lr(e,t,n,r){for(let i of Un(n)){if(Rn(e,i))continue;let n=Nn(i);t.has(n)||t.set(n,r)}}function Z(e){return e.split(`
7
- `)}function ur(e){let t=Z(e);return Math.max(...t.map(e=>B(e)),0)}function dr(e){return Z(e).length}var fr={rectangle:{unicode:{tl:`┌`,tr:`┐`,bl:`└`,br:`┘`},ascii:{tl:`+`,tr:`+`,bl:`+`,br:`+`}},rounded:{unicode:{tl:`╭`,tr:`╮`,bl:`╰`,br:`╯`},ascii:{tl:`.`,tr:`.`,bl:`'`,br:`'`}},circle:{unicode:{tl:`◯`,tr:`◯`,bl:`◯`,br:`◯`},ascii:{tl:`o`,tr:`o`,bl:`o`,br:`o`}},doublecircle:{unicode:{tl:`◎`,tr:`◎`,bl:`◎`,br:`◎`},ascii:{tl:`@`,tr:`@`,bl:`@`,br:`@`}},diamond:{unicode:{tl:`◇`,tr:`◇`,bl:`◇`,br:`◇`},ascii:{tl:`<`,tr:`>`,bl:`<`,br:`>`}},hexagon:{unicode:{tl:`⌜`,tr:`⌝`,bl:`⌞`,br:`⌟`},ascii:{tl:`*`,tr:`*`,bl:`*`,br:`*`}},stadium:{unicode:{tl:`(`,tr:`)`,bl:`(`,br:`)`},ascii:{tl:`(`,tr:`)`,bl:`(`,br:`)`}},subroutine:{unicode:{tl:`╟`,tr:`╢`,bl:`╟`,br:`╢`},ascii:{tl:`|`,tr:`|`,bl:`|`,br:`|`}},cylinder:{unicode:{tl:`╭`,tr:`╮`,bl:`╰`,br:`╯`},ascii:{tl:`.`,tr:`.`,bl:`'`,br:`'`}},asymmetric:{unicode:{tl:`▷`,tr:`┐`,bl:`▷`,br:`┘`},ascii:{tl:`>`,tr:`+`,bl:`>`,br:`+`}},trapezoid:{unicode:{tl:`/`,tr:`\\`,bl:`└`,br:`┘`},ascii:{tl:`/`,tr:`\\`,bl:`+`,br:`+`}},"trapezoid-alt":{unicode:{tl:`┌`,tr:`┐`,bl:`\\`,br:`/`},ascii:{tl:`+`,tr:`+`,bl:`\\`,br:`/`}},parallelogram:{unicode:{tl:`/`,tr:`/`,bl:`/`,br:`/`},ascii:{tl:`/`,tr:`/`,bl:`/`,br:`/`}},"parallelogram-alt":{unicode:{tl:`\\`,tr:`\\`,bl:`\\`,br:`\\`},ascii:{tl:`\\`,tr:`\\`,bl:`\\`,br:`\\`}},"state-start":{unicode:{tl:`●`,tr:`●`,bl:`●`,br:`●`},ascii:{tl:`*`,tr:`*`,bl:`*`,br:`*`}},"state-end":{unicode:{tl:`◉`,tr:`◉`,bl:`◉`,br:`◉`},ascii:{tl:`@`,tr:`@`,bl:`@`,br:`@`}},document:{unicode:{tl:`┌`,tr:`┐`,bl:`╰`,br:`╮`},ascii:{tl:`+`,tr:`+`,bl:`'`,br:`~`}},"stacked-document":{unicode:{tl:`┌`,tr:`╗`,bl:`╰`,br:`╮`},ascii:{tl:`+`,tr:`#`,bl:`'`,br:`~`}},"stacked-process":{unicode:{tl:`┌`,tr:`╗`,bl:`└`,br:`╝`},ascii:{tl:`+`,tr:`#`,bl:`+`,br:`#`}},card:{unicode:{tl:`╱`,tr:`┐`,bl:`└`,br:`┘`},ascii:{tl:`/`,tr:`+`,bl:`+`,br:`+`}},"lined-process":{unicode:{tl:`┌`,tr:`┐`,bl:`└`,br:`┘`},ascii:{tl:`+`,tr:`+`,bl:`+`,br:`+`}},"divided-process":{unicode:{tl:`┌`,tr:`┐`,bl:`└`,br:`┘`},ascii:{tl:`+`,tr:`+`,bl:`+`,br:`+`}},"window-pane":{unicode:{tl:`┌`,tr:`┐`,bl:`└`,br:`┘`},ascii:{tl:`+`,tr:`+`,bl:`+`,br:`+`}},triangle:{unicode:{tl:`╱`,tr:`╲`,bl:`└`,br:`┘`},ascii:{tl:`/`,tr:`\\`,bl:`+`,br:`+`}},"flipped-triangle":{unicode:{tl:`┌`,tr:`┐`,bl:`╲`,br:`╱`},ascii:{tl:`+`,tr:`+`,bl:`\\`,br:`/`}},"filled-circle":{unicode:{tl:`●`,tr:`●`,bl:`●`,br:`●`},ascii:{tl:`*`,tr:`*`,bl:`*`,br:`*`}},"crossed-circle":{unicode:{tl:`╳`,tr:`╳`,bl:`╳`,br:`╳`},ascii:{tl:`X`,tr:`X`,bl:`X`,br:`X`}},"fork-join":{unicode:{tl:`━`,tr:`━`,bl:`━`,br:`━`},ascii:{tl:`=`,tr:`=`,bl:`=`,br:`=`}},"notched-pentagon":{unicode:{tl:`╱`,tr:`╲`,bl:`└`,br:`┘`},ascii:{tl:`/`,tr:`\\`,bl:`+`,br:`+`}},"sloped-rectangle":{unicode:{tl:`╱`,tr:`┐`,bl:`└`,br:`┘`},ascii:{tl:`/`,tr:`+`,bl:`+`,br:`+`}},flag:{unicode:{tl:`╭`,tr:`╮`,bl:`╰`,br:`╯`},ascii:{tl:`~`,tr:`~`,bl:`~`,br:`~`}},"bow-tie-rectangle":{unicode:{tl:`╲`,tr:`╱`,bl:`╱`,br:`╲`},ascii:{tl:`\\`,tr:`/`,bl:`/`,br:`\\`}},"half-rounded-rectangle":{unicode:{tl:`┌`,tr:`╮`,bl:`└`,br:`╯`},ascii:{tl:`+`,tr:`.`,bl:`+`,br:`'`}},brace:{unicode:{tl:`╭`,tr:`┐`,bl:`╰`,br:`┘`},ascii:{tl:`{`,tr:`+`,bl:`{`,br:`+`}},"brace-right":{unicode:{tl:`┌`,tr:`╮`,bl:`└`,br:`╯`},ascii:{tl:`+`,tr:`}`,bl:`+`,br:`}`}},braces:{unicode:{tl:`╭`,tr:`╮`,bl:`╰`,br:`╯`},ascii:{tl:`{`,tr:`}`,bl:`{`,br:`}`}},bolt:{unicode:{tl:`╱`,tr:`╲`,bl:`╲`,br:`╱`},ascii:{tl:`/`,tr:`\\`,bl:`\\`,br:`/`}},text:{unicode:{tl:` `,tr:` `,bl:` `,br:` `},ascii:{tl:` `,tr:` `,bl:` `,br:` `}},anchor:{unicode:{tl:` `,tr:` `,bl:` `,br:` `},ascii:{tl:` `,tr:` `,bl:` `,br:` `}}};function pr(e,t){let n=fr[e]??fr.rectangle;return t?n.ascii:n.unicode}function mr(e,t){let n=Z(e),r=Math.max(...n.map(e=>B(e)),0),i=n.length,a=2*t.padding+r,o=a+2,s=i+2*t.padding,c=s%2==0?s+1:s;return{width:o,height:c+2,labelArea:{x:1+t.padding,y:1+t.padding,width:r,height:i},gridColumns:[1,a,1],gridRows:[1,c,1]}}function hr(e,t,n,r){let{width:i,height:a}=t,o=V(i-1,a-1),s={x:0,y:0},c={x:i-1,y:a-1},l=r?`-`:`─`,u=r?`|`:`│`;for(let e=s.x+1;e<c.x;e++)o[e][s.y]=l,o[e][c.y]=l;for(let e=s.y+1;e<c.y;e++)o[s.x][e]=u,o[c.x][e]=u;o[s.x][s.y]=n.tl,o[c.x][s.y]=n.tr,o[s.x][c.y]=n.bl,o[c.x][c.y]=n.br;let d=Z(e),f=i-1,p=a-1,m=Math.floor(p/2)-Math.floor((d.length-1)/2);for(let e=0;e<d.length;e++){let t=d[e],n=Math.floor(f/2)-Math.ceil(B(t)/2)+1,r=Nt(t);for(let t=0;t<r.length;t++){let i=n+t,a=m+e;i>=0&&i<o.length&&a>=0&&a<o[0].length&&(o[i][a]=r[t])}}return o}function gr(e,t,n){let{width:r,height:i}=t,a=n.x+Math.floor(r/2),o=n.y+Math.floor(i/2);return Y(e,G)?{x:a,y:n.y}:Y(e,K)?{x:a,y:n.y+i-1}:Y(e,q)?{x:n.x,y:o}:Y(e,J)?{x:n.x+r-1,y:o}:Y(e,Cn)?{x:n.x,y:n.y}:Y(e,Sn)?{x:n.x+r-1,y:n.y}:Y(e,Tn)?{x:n.x,y:n.y+i-1}:Y(e,wn)?{x:n.x+r-1,y:n.y+i-1}:{x:a,y:o}}var _r={getDimensions:mr,render(e,t,n){return hr(e,t,pr(`rectangle`,n.useAscii),n.useAscii)},getAttachmentPoint:gr},vr=new Map([[`rectangle`,_r],[`rounded`,{getDimensions:mr,render(e,t,n){return hr(e,t,pr(`rounded`,n.useAscii),n.useAscii)},getAttachmentPoint:gr}],[`diamond`,{getDimensions:mr,render(e,t,n){return hr(e,t,pr(`diamond`,n.useAscii),n.useAscii)},getAttachmentPoint:gr}],[`stadium`,{getDimensions(e,t){let n=Z(e),r=Math.max(...n.map(e=>B(e)),0),i=n.length,a=2*t.padding+r,o=a+4,s=i+2*t.padding;return{width:o,height:Math.max(s+2,3),labelArea:{x:2+t.padding,y:1+t.padding,width:r,height:i},gridColumns:[2,a,2],gridRows:[1,s,1]}},render(e,t,n){let{width:r,height:i}=t,a=V(r-1,i-1),o=Math.floor(i/2),s=n.useAscii?`-`:`─`;if(i===3)a[0][o]=`(`,a[r-1][o]=`)`;else if(n.useAscii){for(let e=0;e<i;e++)a[0][e]=`(`,a[r-1][e]=`)`;for(let e=1;e<r-1;e++)a[e][0]=s,a[e][i-1]=s}else{a[0][0]=`╭`;for(let e=1;e<r-1;e++)a[e][0]=s;a[r-1][0]=`╮`;for(let e=1;e<i-1;e++)a[0][e]=`│`,a[r-1][e]=`│`;a[0][i-1]=`╰`;for(let e=1;e<r-1;e++)a[e][i-1]=s;a[r-1][i-1]=`╯`}let c=Z(e),l=o-Math.floor((c.length-1)/2);for(let e=0;e<c.length;e++){let t=c[e],n=Math.floor(r/2)-Math.floor(B(t)/2),o=Nt(t);for(let t=0;t<o.length;t++){let s=n+t,c=l+e;s>0&&s<r-1&&c>=0&&c<i&&(a[s][c]=o[t])}}return a},getAttachmentPoint:gr}],[`circle`,{getDimensions:mr,render(e,t,n){return hr(e,t,pr(`circle`,n.useAscii),n.useAscii)},getAttachmentPoint:gr}],[`subroutine`,{getDimensions(e,t){let n=Z(e),r=Math.max(...n.map(e=>B(e)),0),i=n.length,a=2*t.padding+r,o=a+4,s=i+2*t.padding;return{width:o,height:s+2,labelArea:{x:2+t.padding,y:1+t.padding,width:r,height:i},gridColumns:[2,a,2],gridRows:[1,s,1]}},render(e,t,n){let{width:r,height:i}=t,a=V(r-1,i-1),o=n.useAscii?`-`:`─`,s=n.useAscii?`|`:`│`;a[0][0]=n.useAscii?`+`:`┌`,a[1][0]=n.useAscii?`+`:`┬`;for(let e=2;e<r-2;e++)a[e][0]=o;a[r-2][0]=n.useAscii?`+`:`┬`,a[r-1][0]=n.useAscii?`+`:`┐`;for(let e=1;e<i-1;e++)a[0][e]=s,a[1][e]=s,a[r-2][e]=s,a[r-1][e]=s;a[0][i-1]=n.useAscii?`+`:`└`,a[1][i-1]=n.useAscii?`+`:`┴`;for(let e=2;e<r-2;e++)a[e][i-1]=o;a[r-2][i-1]=n.useAscii?`+`:`┴`,a[r-1][i-1]=n.useAscii?`+`:`┘`;let c=Z(e),l=Math.floor(i/2)-Math.floor((c.length-1)/2);for(let e=0;e<c.length;e++){let t=c[e],n=Math.floor(r/2)-Math.floor(B(t)/2),o=Nt(t);for(let t=0;t<o.length;t++){let s=n+t,c=l+e;s>1&&s<r-2&&c>0&&c<i-1&&(a[s][c]=o[t])}}return a},getAttachmentPoint:gr}],[`doublecircle`,{getDimensions:mr,render(e,t,n){return hr(e,t,pr(`doublecircle`,n.useAscii),n.useAscii)},getAttachmentPoint:gr}],[`hexagon`,{getDimensions:mr,render(e,t,n){return hr(e,t,pr(`hexagon`,n.useAscii),n.useAscii)},getAttachmentPoint:gr}],[`cylinder`,{getDimensions(e,t){let n=Z(e),r=Math.max(...n.map(e=>B(e)),0),i=n.length,a=2*t.padding+r,o=a+2,s=i+2*t.padding+2;return{width:o,height:s+2,labelArea:{x:1+t.padding,y:2+t.padding,width:r,height:i},gridColumns:[1,a,1],gridRows:[2,s-2,2]}},render(e,t,n){let{width:r,height:i}=t,a=V(r-1,i-1),o=n.useAscii?`-`:`─`,s=n.useAscii?`|`:`│`;a[0][0]=n.useAscii?`.`:`╭`;for(let e=1;e<r-1;e++)a[e][0]=o;a[r-1][0]=n.useAscii?`.`:`╮`,a[0][1]=s;for(let e=1;e<r-1;e++)a[e][1]=o;a[r-1][1]=s;for(let e=2;e<i-2;e++)a[0][e]=s,a[r-1][e]=s;a[0][i-2]=s;for(let e=1;e<r-1;e++)a[e][i-2]=o;a[r-1][i-2]=s,a[0][i-1]=n.useAscii?`'`:`╰`;for(let e=1;e<r-1;e++)a[e][i-1]=o;a[r-1][i-1]=n.useAscii?`'`:`╯`;let c=Z(e),l=Math.floor(i/2)-Math.floor((c.length-1)/2);for(let e=0;e<c.length;e++){let t=c[e],n=Math.floor(r/2)-Math.floor(B(t)/2),o=Nt(t);for(let t=0;t<o.length;t++){let s=n+t,c=l+e;s>0&&s<r-1&&c>1&&c<i-2&&(a[s][c]=o[t])}}return a},getAttachmentPoint:gr}],[`asymmetric`,{getDimensions:mr,render(e,t,n){return hr(e,t,pr(`asymmetric`,n.useAscii),n.useAscii)},getAttachmentPoint:gr}],[`trapezoid`,{getDimensions:mr,render(e,t,n){return hr(e,t,pr(`trapezoid`,n.useAscii),n.useAscii)},getAttachmentPoint:gr}],[`trapezoid-alt`,{getDimensions:mr,render(e,t,n){return hr(e,t,pr(`trapezoid-alt`,n.useAscii),n.useAscii)},getAttachmentPoint:gr}],[`parallelogram`,{getDimensions:mr,render(e,t,n){return hr(e,t,pr(`parallelogram`,n.useAscii),n.useAscii)},getAttachmentPoint:gr}],[`parallelogram-alt`,{getDimensions:mr,render(e,t,n){return hr(e,t,pr(`parallelogram-alt`,n.useAscii),n.useAscii)},getAttachmentPoint:gr}],[`state-start`,{getDimensions(e,t){return{width:5,height:3,labelArea:{x:2,y:1,width:1,height:1},gridColumns:[1,3,1],gridRows:[1,1,1]}},render(e,t,n){let{width:r,height:i}=t,a=V(r-1,i-1),o=Math.floor(r/2);return n.useAscii?(a[0][0]=`.`,a[1][0]=`-`,a[2][0]=`-`,a[3][0]=`-`,a[4][0]=`.`,a[0][1]=`|`,a[o][1]=`*`,a[4][1]=`|`,a[0][2]=`'`,a[1][2]=`-`,a[2][2]=`-`,a[3][2]=`-`,a[4][2]=`'`):(a[0][0]=`╭`,a[1][0]=`─`,a[2][0]=`─`,a[3][0]=`─`,a[4][0]=`╮`,a[0][1]=`│`,a[o][1]=`●`,a[4][1]=`│`,a[0][2]=`╰`,a[1][2]=`─`,a[2][2]=`─`,a[3][2]=`─`,a[4][2]=`╯`),a},getAttachmentPoint(e,t,n){let{width:r,height:i}=t,a=n.x+Math.floor(r/2),o=n.y+Math.floor(i/2);return Y(e,G)?{x:a,y:n.y}:Y(e,K)?{x:a,y:n.y+i-1}:Y(e,q)?{x:n.x,y:o}:Y(e,J)?{x:n.x+r-1,y:o}:{x:a,y:o}}}],[`state-end`,{getDimensions(e,t){return{width:5,height:3,labelArea:{x:2,y:1,width:1,height:1},gridColumns:[1,3,1],gridRows:[1,1,1]}},render(e,t,n){let{width:r,height:i}=t,a=V(r-1,i-1),o=Math.floor(r/2);return n.useAscii?(a[0][0]=`#`,a[1][0]=`=`,a[2][0]=`=`,a[3][0]=`=`,a[4][0]=`#`,a[0][1]=`#`,a[o][1]=`*`,a[4][1]=`#`,a[0][2]=`#`,a[1][2]=`=`,a[2][2]=`=`,a[3][2]=`=`,a[4][2]=`#`):(a[0][0]=`╔`,a[1][0]=`═`,a[2][0]=`═`,a[3][0]=`═`,a[4][0]=`╗`,a[0][1]=`║`,a[o][1]=`◎`,a[4][1]=`║`,a[0][2]=`╚`,a[1][2]=`═`,a[2][2]=`═`,a[3][2]=`═`,a[4][2]=`╝`),a},getAttachmentPoint(e,t,n){let{width:r,height:i}=t,a=n.x+Math.floor(r/2),o=n.y+Math.floor(i/2);return Y(e,G)?{x:a,y:n.y}:Y(e,K)?{x:a,y:n.y+i-1}:Y(e,q)?{x:n.x,y:o}:Y(e,J)?{x:n.x+r-1,y:o}:{x:a,y:o}}}]]);function yr(e){return vr.get(e)??_r}function br(e,t,n){return yr(e).getDimensions(t,n)}function xr(e,t,n,r){return yr(e).getAttachmentPoint(t,n,r)}function Sr(e,t,n){let r=n?{x:t.x+n.x,y:t.y+n.y}:t,i=0;for(let t=0;t<r.x;t++)i+=e.columnWidth.get(t)??0;let a=0;for(let t=0;t<r.y;t++)a+=e.rowHeight.get(t)??0;let o=e.columnWidth.get(r.x)??0,s=e.rowHeight.get(r.y)??0;return{x:i+Math.floor(o/2)+e.offsetX,y:a+Math.floor(s/2)+e.offsetY}}function Cr(e,t){return t.map(t=>Sr(e,t))}function wr(e,t,n,r){let i=r??Pr(e,t);return Bn(e.grid,n,3)?(Vn(e.grid,n,3),t.gridCoord=n,n):i===`LR`?wr(e,t,{x:n.x,y:n.y+4},i):wr(e,t,{x:n.x+4,y:n.y},i)}function Tr(e,t){let n=X(t),r=e.config.boxBorderPadding,i=br(t.shape,t.displayLabel,{useAscii:e.config.useAscii,padding:r}),a=i.gridColumns,o=i.gridRows;for(let t=0;t<a.length;t++){let r=n.x+t,i=e.columnWidth.get(r)??0;e.columnWidth.set(r,Math.max(i,a[t]))}for(let t=0;t<o.length;t++){let r=n.y+t,i=e.rowHeight.get(r)??0;e.rowHeight.set(r,Math.max(i,o[t]))}if(n.x>0){let t=e.columnWidth.get(n.x-1)??0;e.columnWidth.set(n.x-1,Math.max(t,e.config.paddingX))}if(n.y>0){let r=e.config.paddingY;Fr(e,t)&&(r+=4);let i=e.rowHeight.get(n.y-1)??0;e.rowHeight.set(n.y-1,Math.max(i,r))}}function Er(e,t){for(let n of t)e.columnWidth.has(n.x)||e.columnWidth.set(n.x,Math.floor(e.config.paddingX/2)),e.rowHeight.has(n.y)||e.rowHeight.set(n.y,Math.floor(e.config.paddingY/2))}var Dr=8;function Or(e,t,n,r){let i=[];try{for(let a=0;a<Dr;a++){let a=cr(r,n,t.path,t.style);if(!a)return;e.grid.add(Nn(a)),i.push(a),ci(e,t)}}finally{for(let t of i)e.grid.delete(Nn(t))}}function kr(e,t){return e.subgraphs.some(e=>e.nodes.includes(t))}function Q(e,t){let n=null;for(let r of e.subgraphs)r.nodes.includes(t)&&(!n||Ar(n,r))&&(n=r);return n}function Ar(e,t){let n=t;for(;n!==null;){if(n===e)return!0;n=n.parent}return!1}function jr(e,t){let n=Q(e,t);if(!n)return null;let r=n;for(;r.parent;)r=r.parent;return r}function Mr(e){let t=[...e.nodes];for(let n of e.children)t.push(...Mr(n));return t}function Nr(e,t,n){if(t===n)return!0;let r=new Set([t]),i=[t];for(;i.length>0;){let t=i.shift();for(let a of Xr(e,t)){if(a===n)return!0;r.has(a)||(r.add(a),i.push(a))}}return!1}function Pr(e,t){let n=Q(e,t);return n?.direction?n.direction:e.config.graphDirection}function Fr(e,t){let n=Q(e,t);if(!n)return!1;let r=!1;for(let i of e.edges)if(i.to===t&&Q(e,i.from)!==n){r=!0;break}if(!r)return!1;let i=X(t).y;for(let r of n.nodes){if(r===t||!r.gridCoord)continue;let a=!1;for(let t of e.edges)if(t.to===r&&Q(e,t.from)!==n){a=!0;break}if(a&&r.gridCoord.y<i)return!1}return!0}function Ir(e,t){if(t.nodes.length===0)return;let n=1e6,r=1e6,i=-1e6,a=-1e6;for(let o of t.children)Ir(e,o),o.nodes.length>0&&(n=Math.min(n,o.minX),r=Math.min(r,o.minY),i=Math.max(i,o.maxX),a=Math.max(a,o.maxY));for(let e of t.nodes){if(!e.drawingCoord||!e.drawing)continue;let t=e.drawingCoord.x,o=e.drawingCoord.y,s=t+e.drawing.length-1,c=o+e.drawing[0].length-1;n=Math.min(n,t),r=Math.min(r,o),i=Math.max(i,s),a=Math.max(a,c)}t.minX=n-2,t.minY=r-2-2,t.maxX=i+2,t.maxY=a+2;let o=Math.max(0,...Z(t.name).map(e=>B(e))),s=t.maxX-t.minX,c=o+1;if(c>s){let e=c-s,n=Math.floor(e/2),r=e-n;t.minX-=n,t.maxX+=r}}function Lr(e){let t=e.subgraphs.filter(e=>e.parent===null&&e.nodes.length>0);for(let e=0;e<t.length;e++)for(let n=e+1;n<t.length;n++){let r=t[e],i=t[n];r.minX<i.maxX&&r.maxX>i.minX&&(r.maxY>=i.minY-1&&r.minY<i.minY?i.minY=r.maxY+1+1:i.maxY>=r.minY-1&&i.minY<r.minY&&(r.minY=i.maxY+1+1)),r.minY<i.maxY&&r.maxY>i.minY&&(r.maxX>=i.minX-1&&r.minX<i.minX?i.minX=r.maxX+1+1:i.maxX>=r.minX-1&&i.minX<r.minX&&(r.minX=i.maxX+1+1))}}function Rr(e){for(let t of e.subgraphs)Ir(e,t);Lr(e)}function zr(e){if(e.subgraphs.length===0)return;let t=0,n=0;for(let r of e.subgraphs)t=Math.min(t,r.minX),n=Math.min(n,r.minY);let r=-t,i=-n;if(r!==0||i!==0){e.offsetX=r,e.offsetY=i;for(let t of e.subgraphs)t.minX+=r,t.minY+=i,t.maxX+=r,t.maxY+=i;for(let t of e.nodes)t.drawingCoord&&(t.drawingCoord.x+=r,t.drawingCoord.y+=i)}}function Br(e,t){let n=t=>{let n=Xr(e,t);return n.length>0?n[0].name:null},r=new Map,i=t.map((e,t)=>{let i=n(e);if(i===null)return t;let a=r.get(i);return a===void 0?(r.set(i,t),t):a});return t.map((e,t)=>({node:e,i:t})).sort((e,t)=>i[e.i]-i[t.i]||e.i-t.i).map(({node:e})=>e)}function Vr(e,t){let n=new Set,r=t=>{let r=[t];for(;r.length>0;){let t=r.shift();if(!n.has(t.name)){n.add(t.name);for(let n of Xr(e,t))r.push(n)}}};for(let e of t)r(e);let i=[...t];for(let t of e.nodes)n.has(t.name)||(i.push(t),r(t));return i}function Hr(e,t){return e.nodes.find(e=>e.gridCoord!==null&&e.gridCoord.x===t.x&&e.gridCoord.y===t.y)}function Ur(e,t,n,r,i){let a=r===`x`?`y`:`x`,o=i=>{let o=4;for(;;){let s=t[r]+i*o;if(s<0)return null;let c=r===`x`?{x:s,y:t[a]}:{x:t[a],y:s};if(Bn(e.grid,c,3))return c;let l=Hr(e,c);if(!l||jr(e,l)!==n)return null;o+=4}};return o(i)??o(i*-1)}function Wr(e,t,n,r){let i=jr(e,t);if(!i)return;let a=n.get(i);if(!a)return;n.delete(i);let o=X(t),s=Pr(e,t)===`LR`?`y`:`x`;for(let t of a){let n=Pr(e,t),a=Ur(e,o,i,s,1);wr(e,e.nodes[t.index],a??o,n),r.add(t)}}function Gr(e,t){let n=!0;for(;n;){n=!1;let r=t=>e.config.graphDirection===`LR`?t.gridCoord?.y??0:t.gridCoord?.x??0,i=e.nodes.filter(e=>e.gridCoord!==null).sort((e,t)=>r(e)-r(t));for(let r of i){let i=r.gridCoord;if(i===null)continue;let a=[...Xr(e,r)].sort((t,n)=>Yr(e,t,n));for(let o of a){if(o.gridCoord!==null)continue;let a=Q(e,r),s=Q(e,o),c=a&&a===s&&a.direction?a.direction:e.config.graphDirection,l=c===`LR`?i.x+4:i.y+4,u;u=c===e.config.graphDirection?t[l]??0:c===`LR`?i.y:i.x;let d=c===`LR`?{x:l,y:u}:{x:u,y:l};wr(e,e.nodes[o.index],d,c),c===e.config.graphDirection&&(t[l]=u+4),n=!0}}}}function Kr(e){let t=e.config.graphDirection,n=[],r=new Set;for(let t of e.edges)t.from!==t.to&&r.add(t.to.name);let i=Vr(e,e.nodes.filter(e=>!r.has(e.name))).filter(t=>{let n=Q(e,t);if(!n)return!0;for(let r of e.edges)if(r.to===t&&Q(e,r.from)!==n)return!1;return!0}),a=new Set(i),o=[],s=[];for(let t of i){let n=jr(e,t);n!==null&&Mr(n).some(n=>n!==t&&!a.has(n)&&!Nr(e,t,n))?o.push(t):s.push(t)}let c=Br(e,s),l=new Map;for(let t of o){let n=jr(e,t),r=l.get(n);r?r.push(t):l.set(n,[t])}let u=new Set,d=!1,f=!1;for(let t of c)kr(e,t)?Xr(e,t).length>0&&(f=!0):d=!0;let p=t===`LR`&&d&&f,m,h=[];p?(m=c.filter(t=>!kr(e,t)),h=c.filter(t=>kr(e,t))):m=c;for(let r of m){let i=t===`LR`?{x:0,y:n[0]??0}:{x:n[0]??0,y:0};wr(e,e.nodes[r.index],i),n[0]=(n[0]??0)+4,Wr(e,r,l,u)}if(p&&h.length>0)for(let r of h){let i=t===`LR`?{x:4,y:n[4]??0}:{x:n[4]??0,y:4};wr(e,e.nodes[r.index],i),n[4]=(n[4]??0)+4,Wr(e,r,l,u)}Gr(e,n);for(let t of o){if(u.has(t))continue;let r=jr(e,t),i=Pr(e,t),a=Mr(r).filter(e=>e!==t&&e.gridCoord!==null),o;if(a.length>0){let t=a[0];for(let e of a)(i===`LR`?e.gridCoord.x<t.gridCoord.x:e.gridCoord.y<t.gridCoord.y)&&(t=e);let n=i===`LR`?`y`:`x`;o=Ur(e,t.gridCoord,r,n,1)??{x:t.gridCoord.x,y:t.gridCoord.y}}else o=i===`LR`?{x:0,y:n[0]??0}:{x:n[0]??0,y:0},n[0]=(n[0]??0)+4;wr(e,e.nodes[t.index],o,i)}Gr(e,n);for(let t of e.nodes)Tr(e,t);e.pathBudget=Yn(),oi(e),e.bundles=nr(e),or(e);let g=sr(),_=Ln(e.grid);for(let t of e.edges){if(t.bundle&&t.path.length>0){Er(e,t.path),lr(_,g,t.path,t.style),di(e,t);continue}ci(e,t),Or(e,t,g,_),Er(e,t.path),lr(_,g,t.path,t.style),di(e,t)}for(let t of e.nodes)t.drawingCoord=Sr(e,X(t)),t.drawing=Hi(t,e);Xt(e.canvas,e.columnWidth,e.rowHeight),Zt(e.roleCanvas,e.columnWidth,e.rowHeight),Rr(e),zr(e)}function qr(e,t){return e.edges.filter(e=>e.from.name===t.name)}function Jr(e,t){let n=Q(e,t),r=[],i=n;for(;i!==null;)r.unshift(i),i=i.parent;return r}function Yr(e,t,n){let r=Jr(e,t),i=Jr(e,n),a=0;for(;a<r.length&&a<i.length&&r[a]===i[a];)a++;let o=r[a],s=i[a];return!o||!s||o===s?0:e.subgraphs.indexOf(s)-e.subgraphs.indexOf(o)}function Xr(e,t){return qr(e,t).map(e=>e.to)}function Zr(e){return e===G?K:e===K?G:e===q?J:e===J?q:e===Sn?Tn:e===Cn?wn:e===wn?Cn:e===Tn?Sn:En}function $(e,t){return e.x===t.x?e.y<t.y?K:G:e.y===t.y?e.x<t.x?J:q:e.x<t.x?e.y<t.y?wn:Sn:e.y<t.y?Tn:Cn}function Qr(e){return e===`LR`?[J,K,K,J]:[K,J,J,K]}function $r(e,t){if(e.from===e.to)return Qr(t);let n=$(X(e.from),X(e.to)),r,i,a,o,s=t===`LR`?Y(n,q)||Y(n,Cn)||Y(n,Tn):Y(n,G)||Y(n,Cn)||Y(n,Sn);return Y(n,wn)?t===`LR`?(r=K,i=q,a=J,o=G):(r=J,i=G,a=K,o=q):Y(n,Sn)?t===`LR`?(r=G,i=q,a=J,o=K):(r=J,i=K,a=G,o=q):Y(n,Tn)?t===`LR`?(r=K,i=K,a=q,o=G):(r=q,i=G,a=K,o=J):Y(n,Cn)?t===`LR`?(r=K,i=K,a=q,o=K):(r=J,i=J,a=G,o=J):s?t===`LR`&&Y(n,q)?(r=K,i=K,a=q,o=J):t===`TD`&&Y(n,G)?(r=J,i=J,a=G,o=K):(r=n,i=Zr(n),a=n,o=Zr(n)):(r=n,i=Zr(n),a=n,o=Zr(n)),[r,i,a,o]}var ei=2,ti=200;function ni(e,t){let n=e.gridCoord;return n?t.x>=n.x&&t.x<=n.x+2&&t.y>=n.y&&t.y<=n.y+2:!1}function ri(e,t,n=[]){for(let r=1;r<t.length-1;r++){let i=t[r];if(Rn(e.grid,i)&&!n.some(e=>ni(e,i)))return!1}return!0}function ii(e){let t=e.from.gridCoord,n=e.to.gridCoord;return!t||!n?!1:t.y===n.y&&t.x!==n.x}function ai(e){let t=e.from.name,n=e.to.name;return ii(e)&&n<t?JSON.stringify([n,t]):JSON.stringify([t,n])}function oi(e){let t=new Map;for(let n of e.edges){if(n.from===n.to)continue;let e=ai(n),r=t.get(e);r?r.push(n):t.set(e,[n])}for(let e of t.values()){if(e.length<2)continue;let t=new Set;for(let n=0;n<e.length;n++)e[n].parallelLane={index:n,total:e.length,usedOffsets:t}}}function si(e,t,n,r,i){let a=Mn(X(t.from),n),o=Mn(X(t.to),r),s=Y(n,q)||Y(n,J),c=[t.from,t.to],l=t.parallelLane.usedOffsets,u=Y(n,J)?1:Y(n,q)?-1:Y(n,K)?1:-1,d=Y(r,J)?1:Y(r,q)?-1:Y(r,K)?1:-1,f=s?{x:a.x+u,y:a.y}:{x:a.x,y:a.y+u},p=s?{x:o.x+d,y:o.y}:{x:o.x,y:o.y+d},m=[a,o],h=[a,o],g=ei*i;for(let t=0;t<ti;t++){let n=g+t;if(l.has(n))continue;let r=a.y+n,i=a.x+n,u=s?[{x:a.x,y:r},{x:o.x,y:r}]:[{x:i,y:a.y},{x:i,y:o.y}],d=Zn([a,...u,o]);if(ri(e,Un(d),c))return l.add(n),{path:d,labelSegment:u};m=d,h=u;let _=s?f.x!==p.x:f.y!==p.y,v=s?_?[{x:f.x,y:r},{x:p.x,y:r}]:[{x:f.x,y:r},{x:f.x,y:r}]:_?[{x:i,y:f.y},{x:i,y:p.y}]:[{x:i,y:f.y},{x:i,y:f.y}],y=Zn(s?[a,f,{x:f.x,y:r},{x:p.x,y:r},p,o]:[a,f,{x:i,y:f.y},{x:i,y:p.y},p,o]);if(ri(e,Un(y),c))return l.add(n),{path:y,labelSegment:v};m=y,h=v}return{path:m,labelSegment:h}}function ci(e,t){let n=Q(e,t.from),r=Q(e,t.to),[i,a,o,s]=$r(t,n&&n===r&&n.direction?n.direction:e.config.graphDirection);if(t.parallelLane&&t.parallelLane.index>0){let n=Y(i,a),r=n?o:i,c=n?s:a;t.startDir=r,t.endDir=c;let l=si(e,t,r,c,t.parallelLane.index);t.path=l.path,t.text.length>0&&pi(e,t,l.labelSegment,B(t.text));return}let c=Mn(X(t.from),i),l=Mn(X(t.to),a),u=tr(e,c,l,On(i)),d=tr(e,Mn(X(t.from),o),Mn(X(t.to),s),On(o));if(u!==null&&d!==null){u.length<=d.length?(t.startDir=i,t.endDir=a,t.path=u):(t.startDir=o,t.endDir=s,t.path=d);return}if(u!==null){t.startDir=i,t.endDir=a,t.path=u;return}if(d!==null){t.startDir=o,t.endDir=s,t.path=d;return}t.startDir=i,t.endDir=a,t.path=[c,l]}function li(e,t){for(let n of e.nodes){let e=n.gridCoord;if(e&&t>=e.x&&t<=e.x+2)return!0}return!1}function ui(e,t,n,r){if(!li(e,r))return r;for(let i=1;i<=n-t;i++){let a=r+i;if(a<=n&&!li(e,a))return a;let o=r-i;if(o>=t&&!li(e,o))return o}return r}function di(e,t){if(t.text.length===0||t.parallelLane&&t.parallelLane.index>0)return;let n=B(t.text),r=fi(t.path),i=r.length,a=[];for(let t=1;t<i;t++){let n=r[t-1],i=r[t],o=[n,i],s=mi(e,o),c=n.x===i.x;a.push({line:o,width:s,index:t,isVertical:c})}let o=t=>ri(e,Un(t)),s=e=>e.index===1||e.index===a.length,c=a.filter(e=>e.width>=n&&!s(e)&&o(e.line)),l;if(c.length>0)c.sort((e,t)=>t.index-e.index),l=c[0].line;else{let e=a.filter(e=>e.width>=n&&o(e.line));if(e.length>0)e.sort((e,t)=>t.index-e.index),l=e[0].line;else{let e=a.filter(e=>!s(e)&&o(e.line)),n=a.filter(e=>o(e.line)),r=e.length>0?e:n.length>0?n:a;if(r.sort((e,t)=>t.width-e.width),r.length>0)l=r[0].line;else{let e=t.path[0]??{x:0,y:0};l=[e,e]}}}pi(e,t,l,n)}function fi(e){let t=[];for(let n of e){let e=t[t.length-1];e&&e.x!==n.x&&e.y!==n.y&&t.push({x:n.x,y:e.y}),t.push(n)}return t}function pi(e,t,n,r){let i=Math.min(n[0].x,n[1].x),a=Math.max(n[0].x,n[1].x),o=ui(e,i,a,i+Math.floor((a-i)/2)),s=e.columnWidth.get(o)??0;e.columnWidth.set(o,Math.max(s,r+2)),t.labelLine=[n[0],n[1]]}function mi(e,t){let n=0,r=Math.min(t[0].x,t[1].x),i=Math.max(t[0].x,t[1].x);for(let t=r;t<=i;t++)n+=e.columnWidth.get(t)??0;return n}var hi={solid:{h:{unicode:`─`,ascii:`-`},v:{unicode:`│`,ascii:`|`}},dotted:{h:{unicode:`┄`,ascii:`.`},v:{unicode:`┆`,ascii:`:`}},thick:{h:{unicode:`━`,ascii:`=`},v:{unicode:`┃`,ascii:`‖`}},invisible:{h:{unicode:` `,ascii:` `},v:{unicode:` `,ascii:` `}}};function gi(e,t,n,r,i,a,o=`solid`){let s=$(t,n),c=[],l=hi[o],u=a?l.h.ascii:l.h.unicode,d=a?l.v.ascii:l.v.unicode;if(Y(s,G))for(let a=t.y-r;a>=n.y-i;a--)c.push({x:t.x,y:a}),U(e,t.x,a,d);else if(Y(s,K))for(let a=t.y+r;a<=n.y+i;a++)c.push({x:t.x,y:a}),U(e,t.x,a,d);else if(Y(s,q))for(let a=t.x-r;a>=n.x-i;a--)c.push({x:a,y:t.y}),U(e,a,t.y,u);else if(Y(s,J))for(let a=t.x+r;a<=n.x+i;a++)c.push({x:a,y:t.y}),U(e,a,t.y,u);else if(Y(s,Cn)){for(let i=t.x-r;i>=n.x;i--)c.push({x:i,y:t.y}),U(e,i,t.y,u);for(let r=t.y-1;r>=n.y-i;r--)c.push({x:n.x,y:r}),U(e,n.x,r,d)}else if(Y(s,Sn)){for(let i=t.x+r;i<=n.x;i++)c.push({x:i,y:t.y}),U(e,i,t.y,u);for(let r=t.y-1;r>=n.y-i;r--)c.push({x:n.x,y:r}),U(e,n.x,r,d)}else if(Y(s,Tn)){for(let i=t.x-r;i>=n.x;i--)c.push({x:i,y:t.y}),U(e,i,t.y,u);for(let r=t.y+1;r<=n.y+i;r++)c.push({x:n.x,y:r}),U(e,n.x,r,d)}else if(Y(s,wn)){if(n.x-t.x<=1)for(let a=t.y+r;a<=n.y+i;a++)c.push({x:t.x,y:a}),U(e,t.x,a,d);else{for(let i=t.x+r;i<=n.x;i++)c.push({x:i,y:t.y}),U(e,i,t.y,u);for(let r=t.y+1;r<=n.y+i;r++)c.push({x:n.x,y:r}),U(e,n.x,r,d)}}return c}function _i(e,t){if(t.path.length===0){let t=H(e.canvas);return[t,t,t,t,t,t]}let n=Di(e,t),[r,i,a]=yi(e,t.path,t.style),o=i.length>0,s=t.style===`invisible`,c=o&&!s?Si(e,t.path,i[0],t.from):H(e.canvas),l;l=t.hasArrowEnd&&o?wi(e,i[i.length-1],a[a.length-1],t.endMarker):H(e.canvas);let u;if(t.hasArrowStart&&o){let n=i[0][0],r=vi(a[0]),o={x:n.x,y:n.y};Y(a[0],J)?o.x=n.x-1:Y(a[0],q)?o.x=n.x+1:Y(a[0],K)?o.y=n.y-1:Y(a[0],G)&&(o.y=n.y+1),u=wi(e,[n,o],r,t.startMarker)}else u=H(e.canvas);let d=s?H(e.canvas):Ti(e,t.path);return[r,c,l,u,d,n]}function vi(e){return Y(e,G)?K:Y(e,K)?G:Y(e,q)?J:Y(e,J)?q:Y(e,Cn)?wn:Y(e,Sn)?Tn:Y(e,Tn)?Sn:Y(e,wn)?Cn:En}function yi(e,t,n=`solid`){let r=H(e.canvas),i=t[0],a=[],o=[];for(let s=1;s<t.length;s++){let c=t[s],l=Sr(e,i),u=Sr(e,c);if(jn(l,u)){i=c;continue}let d=$(i,c),f=gi(r,l,u,1,-1,e.config.useAscii,n);f.length===0&&f.push(l),a.push(f),o.push(d),i=c}return[r,a,o]}var bi=new Set([`│`,`┃`,`║`,`┆`,`┊`,`|`,`‖`]),xi=new Set([`─`,`━`,`═`,`╌`,`┄`,`-`,`=`]);function Si(e,t,n,r){let i=H(e.canvas),a=e.config.useAscii;if(r.shape===`state-start`||r.shape===`state-end`)return i;let o=n[0],s=$(t[0],t[1]),c=a?`+`:null,l=(t,n)=>e.canvas[t]?.[n];if(Y(s,G)){let e=o.x,t=o.y+1,n=l(e,t);U(i,e,t,n!==void 0&&xi.has(n)?c??`┴`:a?`|`:`│`)}else if(Y(s,K)){let e=o.x,t=o.y-1,n=l(e,t);U(i,e,t,n!==void 0&&xi.has(n)?c??`┬`:a?`|`:`│`)}else if(Y(s,q)||Y(s,J)){let e=r.drawingCoord,t=r.drawing;if(e===null||t===null)throw Error(`drawBoxStart: node "${r.name}" has no drawingCoord/drawing assigned`);let n=t.length,u=Y(s,q)?e.x:e.x+n-1,d=o.y,f=l(u,d);U(i,u,d,f!==void 0&&bi.has(f)?c??(Y(s,q)?`┤`:`├`):a?`-`:`─`)}return i}function Ci(e,t){if(t===`circle`)return e?`o`:`○`;if(t===`cross`)return e?`x`:`✕`}function wi(e,t,n,r){let i=H(e.canvas);if(t.length===0)return i;let a=t[0],o=t[t.length-1],s=$(a,o);(t.length===1||Y(s,En))&&(s=n);let c,l=Ci(e.config.useAscii,r);return c=l===void 0?e.config.useAscii?Y(s,G)?`^`:Y(s,K)?`v`:Y(s,q)?`<`:Y(s,J)?`>`:Y(n,G)?`^`:Y(n,K)?`v`:Y(n,q)?`<`:Y(n,J)?`>`:`*`:Y(s,G)?`▲`:Y(s,K)?`▼`:Y(s,q)?`◄`:Y(s,J)?`►`:Y(s,Sn)?`◥`:Y(s,Cn)?`◤`:Y(s,wn)?`◢`:Y(s,Tn)?`◣`:Y(n,G)?`▲`:Y(n,K)?`▼`:Y(n,q)?`◄`:Y(n,J)?`►`:Y(n,Sn)?`◥`:Y(n,Cn)?`◤`:Y(n,wn)?`◢`:Y(n,Tn)?`◣`:`●`:l,U(i,o.x,o.y,c),i}function Ti(e,t){let n=H(e.canvas);for(let r=1;r<t.length-1;r++){let i=t[r],a=Sr(e,i),o=$(t[r-1],i),s=$(i,t[r+1]),c;c=e.config.useAscii?`+`:Y(o,J)&&Y(s,K)||Y(o,G)&&Y(s,q)?`┐`:Y(o,J)&&Y(s,G)||Y(o,K)&&Y(s,q)?`┘`:Y(o,q)&&Y(s,K)||Y(o,G)&&Y(s,J)?`┌`:Y(o,q)&&Y(s,G)||Y(o,K)&&Y(s,J)?`└`:`+`,U(n,a.x,a.y,c)}return n}function Ei(e,t){return e.edges.some(e=>e!==t&&e.from===t.to&&e.to===t.from)}function Di(e,t){let n=H(e.canvas);if(t.text.length===0)return n;let r=Cr(e,t.labelLine),i;if(t.path.length>=2){let e=t.path[0].y,n=t.path[t.path.length-1].y;n<e?i=!0:n>e&&(i=!1)}let a=Ei(e,t);return Oi(n,r,t.text,i,a),n}function Oi(e,t,n,r,i=!1){if(t.length<2)return;let a=Math.min(t[0].x,t[1].x),o=Math.max(t[0].x,t[1].x),s=Math.min(t[0].y,t[1].y),c=Math.max(t[0].y,t[1].y),l=a+Math.floor((o-a)/2),u=s+Math.floor((c-s)/2);if(r!==void 0&&a===o){let e=c-s,t=Math.max(1,Math.floor(e/4));(i?r:!r)?u-=t:u+=t}let d=Z(n),f=u-Math.floor((d.length-1)/2);for(let t=0;t<d.length;t++){let n=d[t];Yt(e,{x:l-Math.floor(B(n)/2),y:f+t},n)}}function ki(e,t,n){let r=X(t),i=0;for(let t=0;t<2;t++)i+=e.columnWidth.get(r.x+t)??0;let a=0;for(let t=0;t<2;t++)a+=e.rowHeight.get(r.y+t)??0;let o={width:i+1,height:a+1,labelArea:{x:0,y:0,width:0,height:0},gridColumns:[0,0,0],gridRows:[0,0,0]},s=t.drawingCoord;if(s===null)throw Error(`Node "${t.name}" has no drawingCoord; grid layout must run before bundled-edge drawing`);return xr(t.shape,n,o,s)}function Ai(e,t,n){let r=H(e.canvas),i=t.pathToJunction;if(!i||i.length===0)return[r,r,r,r,r,r];let a=H(e.canvas),o=e.config.useAscii,s=i.map((r,a)=>n.type===`fan-in`&&a===0?ki(e,t.from,t.startDir):n.type===`fan-out`&&a===i.length-1?ki(e,t.to,t.endDir):Sr(e,r));for(let e=1;e<s.length;e++){let n=s[e-1],r=s[e];jn(n,r)||gi(a,n,r,1,-1,o,t.style)}let c=H(e.canvas);for(let t=1;t<i.length-1;t++){let n=i[t],r=Sr(e,n),a=$(i[t-1],n),s=$(n,i[t+1]),l;l=o?`+`:Y(a,J)&&Y(s,K)||Y(a,G)&&Y(s,q)?`┐`:Y(a,J)&&Y(s,G)||Y(a,K)&&Y(s,q)?`┘`:Y(a,q)&&Y(s,K)||Y(a,G)&&Y(s,J)?`┌`:Y(a,q)&&Y(s,G)||Y(a,K)&&Y(s,J)?`└`:`+`,U(c,r.x,r.y,l)}let l=H(e.canvas);if(n.type===`fan-in`&&i.length>=2){let e=s[0],t=$(i[0],i[1]),n=o?`+`:null;Y(t,G)?U(l,e.x,e.y,n??`┴`):Y(t,K)?U(l,e.x,e.y,n??`┬`):Y(t,q)?U(l,e.x,e.y,n??`┤`):Y(t,J)&&U(l,e.x,e.y,n??`├`)}return[a,l,r,r,c,H(e.canvas)]}function ji(e,t){let n=H(e.canvas),r=H(e.canvas);if(t.sharedPath.length<2)return[n,r];let i=e.config.useAscii,a=t.edges[0]?.style??`solid`,o=e.config.graphDirection,s=t.sharedPath.map((n,r)=>{if(t.type===`fan-in`&&r===t.sharedPath.length-1){let n=o===`TD`?G:q;return ki(e,t.sharedNode,n)}if(t.type===`fan-out`&&r===0){let n=o===`TD`?K:J;return ki(e,t.sharedNode,n)}return Sr(e,n)});for(let e=1;e<s.length;e++){let t=s[e-1],r=s[e];jn(t,r)||gi(n,t,r,1,-1,i,a)}for(let n=1;n<t.sharedPath.length-1;n++){let a=t.sharedPath[n],o=Sr(e,a),s=$(t.sharedPath[n-1],a),c=$(a,t.sharedPath[n+1]),l;l=i?`+`:Y(s,J)&&Y(c,K)||Y(s,G)&&Y(c,q)?`┐`:Y(s,J)&&Y(c,G)||Y(s,K)&&Y(c,q)?`┘`:Y(s,q)&&Y(c,K)||Y(s,G)&&Y(c,J)?`┌`:Y(s,q)&&Y(c,G)||Y(s,K)&&Y(c,J)?`└`:`+`,U(r,o.x,o.y,l)}return[n,r]}function Mi(e,t){let n=H(e.canvas);if(t.sharedPath.length<2)return n;let r=t.sharedPath.length-1,i=t.sharedPath[r-1],a=t.sharedPath[r],o=$(i,a),s=e.config.graphDirection,c=s===`TD`?G:q,l=ki(e,t.sharedNode,c);s===`TD`?--l.y:--l.x;let u=t.edges[0]?.endMarker,d=t.edges.every(e=>e.endMarker===u)?u:void 0,f=Ci(e.config.useAscii,d),p;return p=f===void 0?e.config.useAscii?Y(o,G)?`^`:Y(o,K)?`v`:Y(o,q)?`<`:Y(o,J)?`>`:`v`:Y(o,G)?`▲`:Y(o,K)?`▼`:Y(o,q)?`◄`:Y(o,J)?`►`:`▼`:f,U(n,l.x,l.y,p),n}function Ni(e,t){let n=H(e.canvas);if(!t.pathToJunction||t.pathToJunction.length<2)return n;let r=t.pathToJunction.length-1,i=t.pathToJunction[r-1],a=t.pathToJunction[r],o=$(i,a),s=e.config.graphDirection,c=s===`TD`?G:q,l=ki(e,t.to,c);s===`TD`?--l.y:--l.x;let u=Ci(e.config.useAscii,t.endMarker),d;return d=u===void 0?e.config.useAscii?Y(o,G)?`^`:Y(o,K)?`v`:Y(o,q)?`<`:Y(o,J)?`>`:`v`:Y(o,G)?`▲`:Y(o,K)?`▼`:Y(o,q)?`◄`:Y(o,J)?`►`:`▼`:u,U(n,l.x,l.y,d),n}function Pi(e){return Y(e,G)?K:Y(e,K)?G:Y(e,q)?J:Y(e,J)?q:e}function Fi(e,t){let n=H(e.canvas);if(t.sharedPath.length<2)return n;let r=t.sharedPath[0],i=t.sharedPath[1],a=Pi($(r,i)),o=e.config.graphDirection,s=o===`TD`?K:J,c=ki(e,t.sharedNode,s);o===`TD`?c.y+=1:c.x+=1;let l;return l=e.config.useAscii?Y(a,G)?`^`:Y(a,K)?`v`:Y(a,q)?`<`:Y(a,J)?`>`:`^`:Y(a,G)?`▲`:Y(a,K)?`▼`:Y(a,q)?`◄`:Y(a,J)?`►`:`▲`,U(n,c.x,c.y,l),n}function Ii(e,t){let n=H(e.canvas);if(!t.pathToJunction||t.pathToJunction.length<2)return n;let r=t.pathToJunction[0],i=t.pathToJunction[1],a=Pi($(r,i)),o=ki(e,t.from,t.startDir);Y(t.startDir,G)?--o.y:Y(t.startDir,K)?o.y+=1:Y(t.startDir,q)?--o.x:Y(t.startDir,J)&&(o.x+=1);let s;return s=e.config.useAscii?Y(a,G)?`^`:Y(a,K)?`v`:Y(a,q)?`<`:Y(a,J)?`>`:`v`:Y(a,G)?`▲`:Y(a,K)?`▼`:Y(a,q)?`◄`:Y(a,J)?`►`:`▼`,U(n,o.x,o.y,s),n}function Li(e,t){let n=H(e.canvas);if(!t.junctionPoint)return n;let r=Sr(e,t.junctionPoint),i=e.config.useAscii,a=!1,o=!1,s=!1,c=!1;if(t.sharedPath.length>=2){let e=t.type===`fan-in`?0:t.sharedPath.length-1,n=t.type===`fan-in`?1:t.sharedPath.length-2,r=$(t.sharedPath[e],t.sharedPath[n]);Y(r,K)?o=!0:Y(r,G)?a=!0:Y(r,J)?c=!0:Y(r,q)&&(s=!0)}for(let e of t.edges)if(e.pathToJunction&&e.pathToJunction.length>=2){let n=t.type===`fan-in`?e.pathToJunction.length-1:0,r=t.type===`fan-in`?e.pathToJunction.length-2:1,i=$(e.pathToJunction[r],e.pathToJunction[n]);Y(i,K)?a=!0:Y(i,G)?o=!0:Y(i,J)?s=!0:Y(i,q)&&(c=!0)}let l;return l=i?`+`:a&&o&&s&&c?`┼`:o&&s&&c&&!a?`┬`:a&&s&&c&&!o?`┴`:a&&o&&c&&!s?`├`:a&&o&&s&&!c?`┤`:s&&c?`─`:a&&o?`│`:o&&c?`┌`:o&&s?`┐`:a&&c?`└`:a&&s?`┘`:`┼`,U(n,r.x,r.y,l),n}function Ri(e,t){let n=e.maxX-e.minX,r=e.maxY-e.minY;if(n<=0||r<=0)return V(0,0);let i={x:0,y:0},a={x:n,y:r},o=V(n,r);if(t.config.useAscii){for(let e=i.x+1;e<a.x;e++)U(o,e,i.y,`-`);for(let e=i.x+1;e<a.x;e++)U(o,e,a.y,`-`);for(let e=i.y+1;e<a.y;e++)U(o,i.x,e,`|`);for(let e=i.y+1;e<a.y;e++)U(o,a.x,e,`|`);U(o,i.x,i.y,`+`),U(o,a.x,i.y,`+`),U(o,i.x,a.y,`+`),U(o,a.x,a.y,`+`)}else{for(let e=i.x+1;e<a.x;e++)U(o,e,i.y,`─`);for(let e=i.x+1;e<a.x;e++)U(o,e,a.y,`─`);for(let e=i.y+1;e<a.y;e++)U(o,i.x,e,`│`);for(let e=i.y+1;e<a.y;e++)U(o,a.x,e,`│`);U(o,i.x,i.y,`┌`),U(o,a.x,i.y,`┐`),U(o,i.x,a.y,`└`),U(o,a.x,a.y,`┘`)}return o}function zi(e,t){let n=e.maxX-e.minX,r=e.maxY-e.minY;if(n<=0||r<=0)return[V(0,0),{x:0,y:0},[]];let i=V(n,r),a=[],o=Z(e.name);for(let e=0;e<o.length;e++){let t=o[e],s=1+e,c=1+Math.ceil((n-1-B(t))/2);c<1&&(c=1);let l=Nt(t);for(let e=0;e<l.length;e++)c+e>=n||s>=r||(U(i,c+e,s,l[e]),a.push({x:c+e,y:s}))}return[i,{x:e.minX,y:e.minY},a]}function Bi(e,t){return Vi(e,t)}function Vi(e,t){let n=X(e),r=t.config.useAscii,i=0;for(let e=0;e<2;e++)i+=t.columnWidth.get(n.x+e)??0;let a=0;for(let e=0;e<2;e++)a+=t.rowHeight.get(n.y+e)??0;let o={x:0,y:0},s={x:i,y:a},c=V(Math.max(o.x,s.x),Math.max(o.y,s.y)),l=pr(e.shape,r),u=e.shape===`state-end`,d=r?u?`=`:`-`:u?`═`:`─`,f=r?u?`‖`:`|`:u?`║`:`│`,p=u?r?{tl:`#`,tr:`#`,bl:`#`,br:`#`}:{tl:`╔`,tr:`╗`,bl:`╚`,br:`╝`}:l;for(let e=o.x+1;e<s.x;e++)U(c,e,o.y,d);for(let e=o.x+1;e<s.x;e++)U(c,e,s.y,d);for(let e=o.y+1;e<s.y;e++)U(c,o.x,e,f);for(let e=o.y+1;e<s.y;e++)U(c,s.x,e,f);U(c,o.x,o.y,p.tl),U(c,s.x,o.y,p.tr),U(c,o.x,s.y,p.bl),U(c,s.x,s.y,p.br);let m=e.displayLabel,h=Z(m),g=o.y+Math.floor(a/2)-Math.floor((h.length-1)/2);for(let e=0;e<h.length;e++){let t=h[e],n=B(t),r=o.x+Math.floor(i/2)-Math.ceil(n/2)+1,a=Nt(t);for(let t=0;t<a.length;t++)U(c,r+t,g+e,a[t])}return c}function Hi(e,t){return Bi(e,t)}function Ui(e){return/^[┌┐└┘├┤┬┴┼│─╭╮╰╯+\-|]$/.test(e)?`border`:`text`}function Wi(e,t=1){let n=Math.max(0,t),r=0;for(let t of e)for(let e of t)r=Math.max(r,B(e));let i=0;for(let t of e)i+=Math.max(t.length,1);return{width:r+2*n+2,height:i+(e.length-1)+2}}function Gi(e,t,n=1){let r=Math.max(0,n),{width:i,height:a}=Wi(e,r),o=t?`-`:`─`,s=t?`|`:`│`,c=t?`+`:`┌`,l=t?`+`:`┐`,u=t?`+`:`└`,d=t?`+`:`┘`,f=t?`+`:`├`,p=t?`+`:`┤`,m=V(i-1,a-1);U(m,0,0,c);for(let e=1;e<i-1;e++)U(m,e,0,o);U(m,i-1,0,l),U(m,0,a-1,u);for(let e=1;e<i-1;e++)U(m,e,a-1,o);U(m,i-1,a-1,d);for(let e=1;e<a-1;e++)U(m,0,e,s),U(m,i-1,e,s);let h=1;for(let t=0;t<e.length;t++){let n=e[t],a=n.length>0?n:[``];for(let e of a){let t=1+r,n=Nt(e);for(let e=0;e<n.length;e++)U(m,t+e,h,n[e]);h++}if(t<e.length-1){U(m,0,h,f);for(let e=1;e<i-1;e++)U(m,e,h,o);U(m,i-1,h,p),h++}}return m}function Ki(e){function t(e){return e.parent===null?0:1+t(e.parent)}let n=[...e];return n.sort((e,n)=>t(e)-t(n)),n}function qi(e,t,n,r){for(let i=0;i<t.length;i++)for(let a=0;a<(t[0]?.length??0);a++){let o=t[i]?.[a];if(o&&o!==` `){let t=i+n.x,o=a+n.y;t>=0&&o>=0&&It(e,t,o,r)}}}function Ji(e,t,n,r){for(let i of t)qi(e,i,n,r)}function Yi(e,t,n){let r=e=>/^[┌┐└┘├┤┬┴┼│─╭╮╰╯+\-|.':]$/.test(e);for(let i=0;i<t.length;i++)for(let a=0;a<(t[0]?.length??0);a++){let o=t[i]?.[a];if(o&&o!==` `){let t=i+n.x,s=a+n.y;t>=0&&s>=0&&It(e,t,s,r(o)?`border`:`text`)}}}function Xi(e){let t=e.config.useAscii,n={x:0,y:0},r=Ki(e.subgraphs);for(let n of r){let r=Ri(n,e),i={x:n.minX,y:n.minY};e.canvas=Wt(e.canvas,i,t,r),qi(e.roleCanvas,r,i,`border`)}for(let n of e.nodes)!n.drawn&&n.drawingCoord&&n.drawing&&(e.canvas=Wt(e.canvas,n.drawingCoord,t,n.drawing),Yi(e.roleCanvas,n.drawing,n.drawingCoord),n.drawn=!0);let i=[],a=[],o=[],s=[],c=[],l=[],u=[],d=new Set;for(let t of e.edges)if(t.bundle&&t.pathToJunction){let n=t.bundle,[r,f,,,p,m]=Ai(e,t,n);if(i.push(r),a.push(p),c.push(f),l.push(m),n.type===`fan-in`&&t.hasArrowStart){let n=Ii(e,t);s.push(n)}if(!d.has(n)){d.add(n);let[t,r]=ji(e,n);if(i.push(t),a.push(r),n.type===`fan-in`){let t=Mi(e,n);o.push(t)}if(n.type===`fan-out`&&n.edges.every(e=>e.hasArrowStart)){let t=Fi(e,n);s.push(t)}let c=Li(e,n);u.push(c)}if(n.type===`fan-out`&&t.hasArrowEnd){let n=Ni(e,t);o.push(n)}}else{let[n,r,u,d,f,p]=_i(e,t);i.push(n),a.push(f),o.push(u),s.push(d),c.push(r),l.push(p)}e.canvas=Wt(e.canvas,n,t,...i),Ji(e.roleCanvas,i,n,`line`),e.canvas=Wt(e.canvas,n,t,...a),Ji(e.roleCanvas,a,n,`corner`),e.canvas=Wt(e.canvas,n,t,...u),Ji(e.roleCanvas,u,n,`junction`),e.canvas=Wt(e.canvas,n,t,...o),Ji(e.roleCanvas,o,n,`arrow`),e.canvas=Wt(e.canvas,n,t,...c),Ji(e.roleCanvas,c,n,`junction`),e.canvas=Wt(e.canvas,n,t,...s),Ji(e.roleCanvas,s,n,`arrow`),e.canvas=Wt(e.canvas,n,t,...l),Ji(e.roleCanvas,l,n,`text`);for(let n of e.subgraphs){if(n.nodes.length===0)continue;let[r,i,a]=zi(n,e);e.canvas=Wt(e.canvas,i,t,r),qi(e.roleCanvas,r,i,`text`);for(let{x:t,y:n}of a){let a=r[t]?.[n];a===` `&&(U(e.canvas,t+i.x,n+i.y,a),It(e.roleCanvas,t+i.x,n+i.y,`text`))}}return e.canvas}function Zi(e,t,n,r){if(r(e))return e;let i=Math.max(e-t,n-e);for(let a=1;a<=i;a++){let i=e+a;if(i<=n&&r(i))return i;let o=e-a;if(o>=t&&r(o))return o}}function Qi(e){return`${e.keys.length>0?e.keys.join(`,`)+` `:` `}${e.type} ${e.name}`}function $i(e){let t=Z(e.label),n=e.attributes.map(Qi);return n.length===0?[t]:[t,n]}function ea(e,t,n=!1,r=!1){if(t)switch(e){case`one`:return r?`+`:`|`;case`zero-one`:return n?`o|`:`|o`;case`many`:return n?`<`:`>`;case`zero-many`:return n?`o<`:`>o`}else switch(e){case`one`:return r?`┼`:`│`;case`zero-one`:return n?`○│`:`│○`;case`many`:return n?`╟`:`╢`;case`zero-many`:return n?`○╟`:`╢○`}}function ta(e){let t=new Set,n=[],r=new Map;for(let t of e.entities)r.set(t.id,new Set);for(let t of e.relationships)r.get(t.entity1)?.add(t.entity2),r.get(t.entity2)?.add(t.entity1);function i(e,n){let i=[e];for(;i.length>0;){let e=i.pop();if(!t.has(e)){t.add(e),n.add(e);for(let n of r.get(e)??[])t.has(n)||i.push(n)}}}for(let r of e.entities)if(!t.has(r.id)){let e=new Set;i(r.id,e),e.size>0&&n.push(e)}return n}function na(e,t,n){let r=e.get(t);if(r===void 0)throw Error(`ER diagram layout: missing ${n} for entity "${t}"`);return r}function ra(e,t,n,r){let i=_e(_(e));if(i.entities.length===0)return``;let a=t.useAscii,o=kn(t.paddingX,5,6,6),s=kn(t.paddingY,5,4,2),c=kn(t.paddingY,5,2,1),l=Math.max(...[`one`,`zero-one`,`many`,`zero-many`].flatMap(e=>[ea(e,a,!1).length,ea(e,a,!0).length])),u=new Map,d=new Map,f=new Map,p=new Map;for(let e of i.entities){p.set(e.id,e);let n=$i(e);u.set(e.id,n);let{width:r,height:i}=Wi(n,t.boxBorderPadding);d.set(e.id,r),f.set(e.id,i)}let m=new Map;for(let e of i.relationships){if(!e.label)continue;let t=[e.entity1,e.entity2].sort().join(`|`),n=ur(e.label);m.set(t,Math.max(m.get(t)??0,n))}let h=ta(i),g=new Map,v=0;for(let e of h){let t=i.entities.filter(t=>e.has(t.id)),n=Math.max(2,Math.ceil(Math.sqrt(t.length))),r=0,a=0,l=0;for(let e=0;e<t.length;e++){let i=t[e],c=na(d,i.id,`box width`),p=na(f,i.id,`box height`);l>=n&&(v+=a+s,r=0,a=0,l=0),g.set(i.id,{entity:i,sections:na(u,i.id,`sections`),x:r,y:v,width:c,height:p});let h=o,_=l+1>=n,y=t[e+1];if(!_&&y){let e=[i.id,y.id].sort().join(`|`),t=m.get(e)??0;t>0&&(h=Math.max(h,t+2))}r+=c+h,a=Math.max(a,p),l++}v+=a+c}let y=0,b=0;for(let e of g.values())y=Math.max(y,e.x+e.width),b=Math.max(b,e.y+e.height);y+=4,b+=2;let x=V(y-1,b-1),S=Pt(y-1,b-1);function C(e,t,n,r){U(x,e,t,n,{role:r,roleCanvas:S})}function w(e,t){let n=S[e]?.[t];return n===`text`||n===`border`}function T(e,t,n,r,i){for(let a=0;a<e.length;a++){let e=t+a;if(!(e<r||e>i)&&w(e,n))return!1}return!0}function E(e,t,n,r,i){for(let a=0;a<e.length;a++){let e=t+a;if(!(e<r||e>i)&&(w(e,n)||S[e]?.[n]===`arrow`||D.has(`${e},${n}`)))return!1}return!0}for(let e of g.values()){let n=Gi(e.sections,a,t.boxBorderPadding);for(let t=0;t<n.length;t++)for(let r=0;r<n[0].length;r++){let i=n[t][r];if(i!==` `){let n=e.x+t,a=e.y+r;n<y&&a<b&&C(n,a,i,Ui(i))}}}let D=new Set;for(let e of g.values())for(let t=0;t<e.height;t++)for(let n=0;n<e.width;n++)D.add(`${e.x+n},${e.y+t}`);function O(e,t,n,r){D.has(`${e},${t}`)||(r===`text`||S[e]?.[t]!==`text`)&&C(e,t,n,r)}function ee(e,t,n,r){S[e-1]?.[t]!==`text`&&S[e+1]?.[t]!==`text`&&O(e,t,n,r)}function k(e,t,n,r){for(let i=n;i<=r;i++)for(let n=e;n<=t;n++){let e=x[n]?.[i];if(e!==void 0&&e!==` `)return!1}return!0}let A=[];function te(e,t,n){for(let r of A)if(Math.abs(r.x-e)===1&&t<=r.yEnd&&n>=r.yStart)return!0;return!1}function j(e,t,n){for(let r of A)if(!(Math.abs(r.x-e)>1)&&t<=r.yEnd&&n>=r.yStart)return!0;return!1}function M(e,t,n){A.push({x:e,yStart:t,yEnd:n})}let ne=a?`-`:`─`,N=a?`|`:`│`,P=a?`.`:`╌`,re=a?`:`:`┊`;function ie(e,t){return a?`+`:e===`down`?t===`right`?`┌`:`┐`:t===`right`?`└`:`┘`}function F(e,t,n,r){O(e,t,ie(n,r),`line`)}let I=new Map,ae=new Map;for(let e of i.relationships){let t=g.get(e.entity1),n=g.get(e.entity2);if(!t||!n)continue;let r=t.y+Math.floor(t.height/2),i=n.y+Math.floor(n.height/2);if(Math.abs(r-i)<Math.max(t.height,n.height))continue;let[a,o]=r<i?[t,n]:[n,t],s=a.x+Math.floor(a.width/2),c=o.x+Math.floor(o.width/2),l=ae.get(a.entity.id);l||(l=[],ae.set(a.entity.id,l)),l.push({rel:e,otherCenterX:c});let u=I.get(o.entity.id);u||(u=[],I.set(o.entity.id,u)),u.push({rel:e,otherCenterX:s})}function oe(e,t,n){let r=n.get(e.entity.id),i=e.x+Math.floor(e.width/2);if(!r||r.length<=1)return i;let a=[...r].sort((e,t)=>e.otherCenterX-t.otherCenterX),o=a.findIndex(e=>e.rel===t);if(o===-1)return i;let s=Math.min(1,Math.floor((e.width-1)/2)),c=Math.max(0,e.width-1-s*2),l=a.length>1?c/(a.length-1):0;return e.x+s+Math.round(o*l)}for(let e of i.relationships){let t=g.get(e.entity1),n=g.get(e.entity2);if(!t||!n)continue;let r=e.identifying?ne:P,i=e.identifying?N:re,o=t.x+Math.floor(t.width/2),c=t.y+Math.floor(t.height/2),u=n.x+Math.floor(n.width/2),d=n.y+Math.floor(n.height/2);if(Math.abs(c-d)<Math.max(t.height,n.height)){let[c,d]=o<u?[t,n]:[n,t],[f,p]=o<u?[e.cardinality1,e.cardinality2]:[e.cardinality2,e.cardinality1],m=c.x+c.width,h=d.x-1,_=c.y+Math.floor(c.height/2),v;for(let e of g.values())e!==c&&e!==d&&e.y===c.y&&e.x<h+1&&e.x+e.width>m&&(v=Math.max(v??0,e.y+e.height));let y=h-m+1,b=+(y>=l+1),C=ea(f,a,!1),w=ea(p,a,!0),E=+(y>=3&&C[0]===N),D=+(y>=3&&w[w.length-1]===N),A=m+E,te=h-D,j;if(v===void 0){for(let e=m;e<=h;e++)ee(e,_,r,`line`);if(j=_+1,e.label){let t=m+b,n=h-b,r=Z(e.label).length,i=_+1+Math.max(s-1,1);for(;j<i&&!k(t,n,j,j+r-1);)j++}}else{let t=Math.max(c.y+c.height,d.y+d.height,v),n=e.label?Z(e.label).length:0,a=t+1,o=t+Math.max(s*3,4);for(;a<o&&!k(m,h,a,a+n);)a++;Rt(x,h+1,a+n+1),Ft(S,h+1,a+n+1);for(let e=_;e<=a;e++)O(m,e,i,`line`),O(h,e,i,`line`);for(let e=m;e<=h;e++)ee(e,a,r,`line`);m!==h&&(F(m,a,`up`,`right`),F(h,a,`up`,`left`)),j=a+1}for(let e=0;e<C.length;e++)O(A+e,_,C[e],`arrow`);for(let e=0;e<w.length;e++)O(te-w.length+1+e,_,w[e],`arrow`);if(e.label){let t=Z(e.label),n=Math.floor((m+h)/2),r=m+b,i=h-b;for(let e=0;e<t.length;e++){let a=t[e],o=Nt(a),s=Math.max(r,n-Math.floor(o.length/2)),c=j+e;if(Rt(x,Math.max(s+o.length,1),Math.max(c+1,1)),Ft(S,Math.max(s+o.length,1),Math.max(c+1,1)),T(o,s,c,r,i))for(let e=0;e<o.length;e++){let t=s+e;t>=r&&t<=i&&O(t,c,o[e],`text`)}}}}else{let[o,s]=c<d?[t,n]:[n,t],[l,u]=c<d?[e.cardinality1,e.cardinality2]:[e.cardinality2,e.cardinality1],f=o.y+o.height,p=s.y-1,m=oe(o,e,ae),h=oe(s,e,I);function se(e,t,n){for(let r=t;r<=n;r++)if(D.has(`${e},${r}`))return!1;return!0}let _=f,v=p,y=Math.max(...[...g.values()].filter(e=>e.y===o.y).map(e=>e.y+e.height)),b=s.y,w=Math.max(f,y+1),T=Math.min(p,b-1);function ce(e,t,n){let r=Math.floor(w<=T?(w+T)/2:(f+p)/2);if(w>T)return r;for(let r=w;r<=T;r++)if(k(e,t,r,r+n))return r;return r}let A=m!==h,ne=Math.min(m,h),N=Math.max(m,h),P=A?ce(ne,N,0):p,re=A?P-1:p,ie=!se(m,w,T)||!se(h,w,T)||te(m,f,A?P:p)||A&&te(h,P,p),L=m;if(ie){let e=x.length,t;for(let n=0;n<=e;n++){let e=m+n;if(se(e,f,p)&&!j(e,f,p)){t=e;break}let r=m-n;if(n>0&&se(r,f,p)&&!j(r,f,p)){t=r;break}}L=t??m;for(let e=f;e<=_;e++)O(m,e,i,`line`);for(let e=Math.min(m,L);e<=Math.max(m,L);e++)ee(e,_,r,`line`);for(let e=_;e<=v;e++)O(L,e,i,`line`);for(let e=Math.min(L,h);e<=Math.max(L,h);e++)ee(e,v,r,`line`);for(let e=v;e<=p;e++)O(h,e,i,`line`);if(m!==L){let e=L>m?`right`:`left`,t=e===`right`?`left`:`right`;F(m,_,`up`,e),F(L,_,`down`,t)}if(L!==h){let e=h>L?`right`:`left`,t=e===`right`?`left`:`right`;F(L,v,`up`,e),F(h,v,`down`,t)}M(L,_,v)}else{for(let e=f;e<=re;e++)O(m,e,i,`line`);if(M(m,f,A?P:re),A){for(let e=ne;e<=N;e++)ee(e,P,r,`line`);for(let e=P+1;e<=p;e++)O(h,e,i,`line`);M(h,P,p);let e=h>m?`right`:`left`,t=e===`right`?`left`:`right`;F(m,P,`up`,e),F(h,P,`down`,t),L=h}}let le=ea(l,a,!1,!0);for(let e=0;e<le.length;e++)O(m-Math.floor(le.length/2)+e,_,le[e],`arrow`);let ue=m===h?m:h,de=ea(u,a,!0,!0);for(let e=0;e<de.length;e++)O(ue-Math.floor(de.length/2)+e,v,de[e],`arrow`);if(e.label){let t=Z(e.label),n=Math.max(le.length-1-Math.floor(le.length/2),de.length-1-Math.floor(de.length/2)),r=L+n+2,i=t.map(e=>Nt(e)),a=r+Math.max(...i.map(e=>e.length))-1,o=t.length,s=Math.floor((f+p)/2)-Math.floor((o-1)/2);a>=0&&(Rt(x,a+1,p+1),Ft(S,a+1,p+1));let c=null;for(let e=0;e<=p-f&&c===null;e++){let t=e===0?[s]:[s+e,s-e];for(let e of t)if(!(e<f||e+o-1>p)&&i.every((t,n)=>E(t,r,e+n,0,a))){c=e;break}}if(c!==null)for(let e=0;e<o;e++){let t=i[e],n=c+e;for(let e=0;e<t.length;e++){let i=r+e;i>=0&&O(i,n,t[e],`text`)}S[r-1]?.[n]===`line`&&C(r-1,n,` `,`line`);let a=r+t.length;S[a]?.[n]===`line`&&C(a,n,` `,`line`)}}}}return Gt(x,{roleCanvas:S,colorMode:n,theme:r})}var ia=4,aa=[`O`,`/|\\`,`/ \\`],oa=3,sa=4;function ca(e){return e.seqNumber===void 0?ia:ia+String(e.seqNumber).length}function la(e,t,n,r){let i=Ae(_(e));if(i.actors.length===0)return``;let a=t.useAscii,o=a?`-`:`─`,s=a?`|`:`│`,c=a?`+`:`┌`,l=a?`+`:`┐`,u=a?`+`:`└`,d=a?`+`:`┘`,f=a?`+`:`┬`,p=a?`+`:`┴`,m=a?`+`:`├`,h=a?`+`:`┤`,g=new Map;i.actors.forEach((e,t)=>g.set(e.id,t));function v(e){let t=g.get(e);if(t===void 0)throw Error(`Sequence diagram: unknown actor "${e}"`);return t}function y(e){let t=ur(e.label?`${e.type} [${e.label}]`:e.type);for(let n of e.dividers)n.label&&(t=Math.max(t,ur(`[${n.label}]`)));return t}let b=Math.max(0,t.boxBorderPadding),x=e=>Math.max(ur(e.label),e.type===`actor`?oa:0),S=e=>dr(e.label)+(e.type===`actor`?aa.length:0),C=i.actors.map(e=>x(e)+2*b+2),w=C.map(e=>Math.ceil(e/2)),T=i.actors.map(e=>S(e)+2),E=Math.max(...T,3),D=(e,t)=>t-Math.floor(C[e]/2),O=Math.floor((E-1)/2),ee=E-1-O,k=new Map,A=new Map;i.actors.forEach((e,t)=>{e.createdAt!==void 0&&k.set(e.createdAt,t),e.destroyedAt!==void 0&&A.set(e.destroyedAt,t)});let te=new Map,j=new Map,M=i.boxes.filter(e=>e.actorIds.length>0).map(e=>{let t=e.actorIds.map(v);return{label:e.label,lo:Math.min(...t),hi:Math.max(...t)}}),ne=M.length>0,N=i.actors.map((e,t)=>M.findIndex(e=>e.lo<=t&&t<=e.hi)),P=+!!ne,re=e=>e===``?0:ur(e)+6,ie=Array(Math.max(i.actors.length-1,0)).fill(0);for(let e of i.messages){let t=v(e.from),n=v(e.to);if(t===n)continue;let r=Math.min(t,n),i=Math.max(t,n),a=ur(e.label)+4,o=i-r,s=Math.ceil(a/o);for(let e=r;e<i;e++)ie[e]=Math.max(ie[e],s)}function F(e){let t=Z(e.text);return Math.max(...t.map(e=>B(e)))+2+2*b}let I=Array(i.actors.length).fill(0),ae=Array(i.actors.length).fill(0),oe=Array(i.actors.length).fill(0),se=Array(i.actors.length).fill(0);for(let e of i.notes)if(e.position===`left`||e.position===`right`){let t=v(e.actorIds[0]),n=F(e);e.position===`left`?I[t]=Math.max(I[t],n):ae[t]=Math.max(ae[t],n)}else if(e.position===`over`&&e.actorIds.length===1){let t=v(e.actorIds[0]),n=F(e),r=Math.floor(n/2),i=n-r;oe[t]=Math.max(oe[t],r),se[t]=Math.max(se[t],i)}let ce=kn(t.paddingX,5,10,4),L=[Math.max(w[0]+(N[0]===-1?0:2),I[0]+1,oe[0])];for(let e=1;e<i.actors.length;e++){let t=N[e-1],n=N[e],r=t===n?0:(t===-1?0:1)+(n===-1?0:1),i=r===0?0:r*2-1,a=Math.max(ae[e-1],I[e],se[e-1],oe[e])+2,o=Math.max(w[e-1]+w[e]+2+i,ie[e-1]+2,a,ce);L[e]=L[e-1]+o}let le=e=>D(e.lo,L[e.lo])-1-1,ue=e=>Math.max(D(e.hi,L[e.hi])+C[e.hi]-1+1+1,le(e)+re(e.label)-1);for(let e of M){if(e.hi+1>=i.actors.length)continue;let t=D(e.hi+1,L[e.hi+1]),n=N[e.hi+1]===-1?0:2,r=ue(e)+1+1+n-t;if(r>0){let t=L.slice(e.hi+1).map(e=>e+r);L.splice(e.hi+1,t.length,...t)}}for(let e of i.blocks){let t=-1,n=-1,r=1/0,a=-1;for(let o=e.startIndex;o<=e.endIndex&&!(o>=i.messages.length);o++){let e=i.messages[o],s=v(e.from),c=v(e.to);if(t=t===-1?Math.min(s,c):Math.min(t,s,c),n=Math.max(n,s,c),r=Math.min(r,L[Math.min(s,c)]),a=Math.max(a,L[Math.max(s,c)]),s===c){let t=L[s]+ia+2+ur(e.label);a=Math.max(a,t)}}if(n===-1||n+1>=i.actors.length)continue;let o=Math.max(0,r-sa),s=a+sa,c=o+1+y(e),l=Math.max(s,c),u=L[n+1],d=l+2-u;if(d>0){let e=L.slice(n+1).map(e=>e+d);L.splice(n+1,e.length,...e)}}let de=[],fe=[],pe=new Map,me=new Map,he=new Map,ge=[],_e=P,ve=_e+E,R=ve+P,ye=kn(t.paddingY,5,1,0),be=Math.max(ye,1);for(let e of i.notes){if(e.afterIndex!==-1)continue;R+=ye;let t=Z(e.text),n=F(e),r=t.length+2,i=g.get(e.actorIds[0])??0,a;if(e.position===`left`)a=L[i]-n-1;else if(e.position===`right`)a=L[i]+2;else if(e.actorIds.length>=2){let t=g.get(e.actorIds[1])??i;a=Math.floor((L[i]+L[t])/2)-Math.floor(n/2)}else a=L[i]-Math.floor(n/2);a=Math.max(0,a),ge.push({x:a,y:R,width:n,height:r,lines:t}),R+=r}for(let e=0;e<i.messages.length;e++){for(let t=0;t<i.blocks.length;t++)i.blocks[t].startIndex===e&&(R+=ye+1,pe.set(t,R-1));for(let t=0;t<i.blocks.length;t++)for(let n=0;n<i.blocks[t].dividers.length;n++)i.blocks[t].dividers[n].index===e&&(R+=ye,he.set(`${t}:${n}`,R),R+=be);R+=ye;let t=i.messages[e],n=t.from===t.to,r=dr(t.label),a=n?void 0:k.get(e),o=A.get(e);if(n)fe[e]=R+1,de[e]=R,R+=2+r;else{let t=a===void 0?0:O,n=a===void 0?0:ee;fe[e]=R,de[e]=R+r+t,R+=r+t+1+n,a!==void 0&&te.set(a,de[e]-t)}o!==void 0&&(j.set(o,R),R+=1);for(let t=0;t<i.notes.length;t++)if(i.notes[t].afterIndex===e){R+=ye;let e=i.notes[t],n=Z(e.text),r=F(e),a=n.length+2,o=g.get(e.actorIds[0])??0,s;if(e.position===`left`)s=L[o]-r-1;else if(e.position===`right`)s=L[o]+2;else if(e.actorIds.length>=2){let t=g.get(e.actorIds[1])??o;s=Math.floor((L[o]+L[t])/2)-Math.floor(r/2)}else s=L[o]-Math.floor(r/2);s=Math.max(0,s),ge.push({x:s,y:R,width:r,height:a,lines:n}),R+=a}for(let t=0;t<i.blocks.length;t++)i.blocks[t].endIndex===e&&(R+=ye,me.set(t,R),R+=be)}R+=be;let xe=R,Se=xe+P,Ce=Se+E+P,we=(L[L.length-1]??0)+(w[w.length-1]??0)+2;for(let e of M)we=Math.max(we,ue(e)+2);for(let e=0;e<i.messages.length;e++){let t=i.messages[e];if(t.from===t.to){let e=L[v(t.from)]+ca(t)+2+2+ur(t.label);we=Math.max(we,e+1)}}for(let e of ge)we=Math.max(we,e.x+e.width+1);let Te=V(we,Ce-1),Ee=Pt(we,Ce-1);function z(e,t,n,r){U(Te,e,t,n,{role:r,roleCanvas:Ee})}function De(e,t,n,r,i){let a=Nt(n);for(let n=0;n<a.length;n++){let o=e+n;if(i!==void 0&&o>=i||a[n+1]===``&&i!==void 0&&o+1>=i)break;z(o,t,a[n],r)}}function Oe(e,t,n,r,i){let a=r===`actor`?aa:[],f=[...a,...Z(n)],p=Math.max(ur(n),a.length>0?oa:0),m=p+2*b+2,h=i,g=h-2,_=e-Math.floor(m/2);z(_,t,c,`border`);for(let e=1;e<m-1;e++)z(_+e,t,o,`border`);z(_+m-1,t,l,`border`);for(let e=0;e<g;e++){let n=t+1+e;z(_,n,s,`border`),z(_+m-1,n,s,`border`);let r=f[e];r!==void 0&&De(_+1+b+Math.floor((p-B(r))/2),n,r,`text`)}let v=t+h-1;z(_,v,u,`border`);for(let e=1;e<m-1;e++)z(_+e,v,o,`border`);z(_+m-1,v,d,`border`)}let ke=e=>{let t=te.get(e);return t===void 0?ve:t+E},je=e=>j.get(e)??xe;for(let e=0;e<i.actors.length;e++){let t=L[e];for(let n=ke(e);n<=je(e);n++)z(t,n,s,`line`)}let Me=a?`+`:`┼`;function Ne(e,t,n){let r=le(e),i=ue(e),a=t+E+1;z(r,t,c,`border`),z(i,t,l,`border`),z(r,a,u,`border`),z(i,a,d,`border`);for(let e=r+1;e<i;e++)z(e,t,o,`border`),z(e,a,o,`border`);for(let e=t+1;e<a;e++)z(r,e,s,`border`),z(i,e,s,`border`);n!==``&&De(r+2,t,` ${Z(n)[0]} `,`text`);for(let n=e.lo;n<=e.hi;n++){let e=L[n];ke(n)<=t&&t<=je(n)&&z(e,t,Me,`junction`),ke(n)<=a&&a<=je(n)&&z(e,a,Me,`junction`)}}for(let e of M)Ne(e,0,e.label),Ne(e,xe,``);for(let e=0;e<i.actors.length;e++){let t=i.actors[e],n=te.get(e)??_e,r=j.has(e);Oe(L[e],n,t.label,t.type,E),r||Oe(L[e],Se,t.label,t.type,E),a||(z(L[e],n+E-1,f,`junction`),r||z(L[e],Se,p,`junction`))}for(let e=0;e<i.messages.length;e++){let t=i.messages[e],n=v(t.from),r=v(t.to),c=L[n],l=L[r],u=n===r,d=t.lineStyle===`dashed`,f=t.arrowHead===`filled`,p=t.isLost===!0,h=a?`x`:`✕`,g=d?a?`.`:`╌`:o;if(u){let n=de[e],r=ca(t),i=t.seqNumber===void 0?void 0:String(t.seqNumber),o=Z(t.label);z(c,n,m,`junction`);let l=c+1;if(i!==void 0){for(let e=0;e<i.length;e++)z(c+1+e,n,i[e],`text`);l=c+1+i.length}for(let e=l;e<c+r;e++)z(e,n,g,`line`);z(c+r,n,a?`+`:`┐`,`corner`);let u=c+r+2;for(let e=0;e<o.length;e++){let t=n+1+e;z(c+r,t,s,`line`),De(u,t,o[e],`text`,we)}let d=n+1+o.length;z(c,d,p?h:f?a?`<`:`◀`:a?`<`:`◁`,`arrow`);for(let e=c+1;e<c+r;e++)z(e,d,g,`line`);z(c+r,d,a?`+`:`┘`,`corner`)}else{let n=fe[e],i=de[e],o=c<l,s=k.get(e)===r,u=l;if(s){let e=D(r,l),t=e+C[r]-1;u=o?e-1:t+1}let d=Math.floor((c+l)/2),m=Z(t.label);for(let e=0;e<m.length;e++){let t=m[e];De(d-Math.floor(B(t)/2),n+e,t,`text`,we)}if(o){for(let e=c+1;e<u;e++)z(e,i,g,`line`);z(u,i,p?h:f?a?`>`:`▶`:a?`>`:`▷`,`arrow`),t.bidirectional&&z(c,i,a?`<`:`◀`,`arrow`)}else{for(let e=u+1;e<c;e++)z(e,i,g,`line`);z(u,i,p?h:f?a?`<`:`◀`:a?`<`:`◁`,`arrow`),t.bidirectional&&z(c,i,a?`>`:`▶`,`arrow`)}if(t.seqNumber!==void 0){let e=String(t.seqNumber);if(o){let t=c+1;if(t+e.length<l)for(let n=0;n<e.length;n++)z(t+n,i,e[n],`text`)}else{let t=c-e.length;if(t>u)for(let n=0;n<e.length;n++)z(t+n,i,e[n],`text`)}}}}for(let[e,t]of j)z(L[e],t,a?`x`:`✕`,`arrow`);let Pe=we-1;for(let e=0;e<i.blocks.length;e++){let t=i.blocks[e],n=pe.get(e),r=me.get(e);if(n===void 0||r===void 0)continue;let a=we,f=0;for(let e=t.startIndex;e<=t.endIndex&&!(e>=i.messages.length);e++){let t=i.messages[e],n=g.get(t.from)??0,r=g.get(t.to)??0;if(a=Math.min(a,L[Math.min(n,r)]),f=Math.max(f,L[Math.max(n,r)]),n===r){let e=L[n]+ca(t)+2+ur(t.label);f=Math.max(f,e)}}let p=a-sa,_=f+sa,v=1/0,b=-1/0;for(let e of L)e>f&&e<v&&(v=e),e<a&&e>b&&(b=e);_>=v&&(_=Math.max(f,v-sa)),p<=b&&(p=Math.min(a,b+sa)),p=Math.max(0,p),_>Pe&&(Rt(Te,_+1,Ce-1),Ft(Ee,_+1,Ce-1),Pe=_);let x=t.label?`${t.type} [${t.label}]`:t.type,S=p+1+y(t);if(S>_){_=S;let[e]=Lt(Te);_>e&&(Rt(Te,_,Ce-1),Ft(Ee,_,Ce-1)),we=Math.max(we,_+1),Pe=Math.max(Pe,_)}z(p,n,c,`border`);for(let e=p+1;e<_;e++)z(e,n,o,`border`);z(_,n,l,`border`);let C=Z(x);for(let e=0;e<C.length&&n+e<r;e++)De(p+1,n+e,C[e],`text`,_);z(p,r,u,`border`);for(let e=p+1;e<_;e++)z(e,r,o,`border`);z(_,r,d,`border`);for(let e=n+1;e<r;e++)z(p,e,s,`border`),z(_,e,s,`border`);for(let n=0;n<t.dividers.length;n++){let r=he.get(`${e}:${n}`);if(r===void 0)continue;let i=Fe();z(p,r,m,`junction`);for(let e=p+1;e<_;e++)z(e,r,i,`line`);z(_,r,h,`junction`);let a=t.dividers[n].label;if(a){let e=`[${a}]`;De(p+1,r,e,`text`,_)}}}for(let e of ge){Rt(Te,e.x+e.width,e.y+e.height),Ft(Ee,e.x+e.width,e.y+e.height),z(e.x,e.y,c,`border`);for(let t=1;t<e.width-1;t++)z(e.x+t,e.y,o,`border`);z(e.x+e.width-1,e.y,l,`border`);for(let t=0;t<e.lines.length;t++){let n=e.y+1+t;z(e.x,n,s,`border`),z(e.x+e.width-1,n,s,`border`);for(let t=e.x+1;t<e.x+e.width-1;t++)z(t,n,` `,`text`);De(e.x+1+b,n,e.lines[t],`text`)}let t=e.y+e.height-1;z(e.x,t,u,`border`);for(let n=1;n<e.width-1;n++)z(e.x+n,t,o,`border`);z(e.x+e.width-1,t,d,`border`)}return Gt(Te,{roleCanvas:Ee,colorMode:n,theme:r});function Fe(){return a?`-`:`╌`}}function ua(e,t){return e.rowStart<=t.rowEnd&&t.rowStart<=e.rowEnd}function da(e,t){let n=e.map(e=>({item:e,geom:t(e)})).sort((e,t)=>e.geom.idealMid-t.geom.idealMid),r=(e,t)=>{let r=n[e];if(r)for(let i=e+t;i>=0&&i<n.length;i+=t){let e=n[i];if(e&&ua(e.geom,r.geom))return e.geom}},i=new Map;for(let[e,t]of n.entries()){let n=t.geom,a=r(e,-1),o=r(e,1),s=a&&a.end>=n.start?Math.floor((a.idealMid+n.idealMid)/2)+1:-1/0,c=o&&n.end>=o.start?Math.floor((n.idealMid+o.idealMid)/2):1/0;i.set(t.item,{left:s,right:c})}return i}function fa(e){let t=[];e.annotation&&t.push(`<<${e.annotation}>>`);let n=Z(e.label);t.push(...n);let r=e.attributes.map(ge),i=e.methods.map(ge),a=[t];return r.length>0&&a.push(r),i.length>0&&a.push(i),a}function pa(e,t){return{type:e,markerAt:t,dashed:e===`dependency`||e===`realization`}}function ma(e,t,n){switch(e){case`inheritance`:case`realization`:return n===`down`?t?`^`:`△`:n===`up`?t?`v`:`▽`:n===`left`?t?`>`:`◁`:t?`<`:`▷`;case`composition`:return t?`*`:`◆`;case`aggregation`:return t?`o`:`◇`;case`association`:case`dependency`:return n===`down`?t?`v`:`▼`:n===`up`?t?`^`:`▲`:n===`left`?t?`<`:`◀`:t?`>`:`▶`}}function ha(e,t,n,r,i){let a=e+t.length-1,o=r>e,s=i<a;if(!o&&!s)return{start:e,cells:t};let c=o?r:e,l=Math.max(0,(s?i:a)-c+1),u=+!!o+ +!!s;if(l===0)return{start:c,cells:[]};if(l<u)return{start:c,cells:[`…`]};let d=Math.max(0,l-u),f=Nt(n),p=f.length<=d?f:o&&!s?f.slice(f.length-d):f.slice(0,d),m=[...o?[`…`]:[],...p,...s?[`…`]:[]];return{start:c+Math.max(0,Math.floor((l-m.length)/2)),cells:m}}function ga(e){return Math.max(...Z(e).map(e=>B(e)))+2}function _a(e,n,r,i,a={}){let{diagram:o,notesById:s}=va(ce(_(e)));if(o.classes.length===0)return``;let c=n.useAscii,l=kn(n.paddingX,5,4,1),u=kn(n.paddingY,5,3,1),d=new Map,f=new Map,p=new Map;for(let e of o.classes){let t=fa(e);d.set(e.id,t);let{width:r,height:i}=Wi(t,n.boxBorderPadding);f.set(e.id,r),p.set(e.id,i)}let m=new Map;for(let e of o.classes)m.set(e.id,e);let h=new Map,g=new Map;for(let e of o.relationships){let t=e.from,n=e.to,r=h.get(n)??new Set;h.set(n,r),r.add(t);let i=g.get(t)??new Set;g.set(t,i),i.add(n)}let v=new Map,y=o.classes.filter(e=>!h.has(e.id)||h.get(e.id).size===0).map(e=>e.id);for(let e of y)v.set(e,0);let b=o.classes.length-1,x=0;for(;x<y.length;){let e=y[x++],t=g.get(e);if(t)for(let n of t){let t=(v.get(e)??0)+1;t>b||(!v.has(n)||v.get(n)<t)&&(v.set(n,t),y.push(n))}}for(let e of o.classes)v.has(e.id)||v.set(e.id,0);ya(s,v);let S=Math.max(...v.values(),0),C=Array.from({length:S+1},()=>[]);for(let e of o.classes)C[v.get(e.id)].push(e.id);let w=new Map,T=new Map;{let e=new Map;o.relationships.forEach((t,n)=>{let r=[t.from,t.to].sort().join(`::`),i=e.get(r)??[];i.push(n),e.set(r,i)});for(let t of e.values()){if(t.length<2)continue;let e=t.length,n=Math.max(...t.map(e=>{let t=o.relationships[e].label;return t?ga(t):3}))+1;t.forEach((t,r)=>{w.set(t,Math.round((r-(e-1)/2)*n)),T.set(t,(e-1)*n)})}}let E=new Map,D=new Map,O=new Map,ee=new Map;{let e=(e,t,n)=>{let r=new Map;o.relationships.forEach((t,n)=>{if(w.has(n)||!m.has(t.from)||!m.has(t.to))return;let i=v.get(t.from)??0;if((v.get(t.to)??0)-i!==1)return;let a=e(t),o=r.get(a)??[];o.push(n),r.set(a,o)});for(let e of r.values()){if(e.length<2)continue;let r=e.length,i=Math.max(...e.map(e=>{let t=o.relationships[e].label;return t?ga(t):3}))+1;e.forEach((e,a)=>{t.set(e,Math.round((a-(r-1)/2)*i)),n.set(e,(r-1)*i)})}};e(e=>e.to,O,ee),e(e=>e.from,E,D)}let k=new Map;for(let e of o.classes)k.set(e.id,{left:0,right:0});o.relationships.forEach((e,t)=>{if(!m.has(e.from)||!m.has(e.to))return;let n=e.label?ga(e.label):1,r=w.get(t)??E.get(t)??0,i=w.get(t)??O.get(t)??0,a=k.get(e.from);a.left=Math.max(a.left,Math.floor(n/2)-r),a.right=Math.max(a.right,r+n-1-Math.floor(n/2));let o=k.get(e.to);o.left=Math.max(o.left,Math.floor(n/2)-i),o.right=Math.max(o.right,i+n-1-Math.floor(n/2))});let A=new Map,te=0,j=0;for(let e=0;e<=S;e++){let t=C[e];if(t.length===0)continue;let n=e=>{let t=h.get(e);return t&&t.size>0?[...t].sort().join(`,`):`root:${e}`},r=new Map;for(let e of t){let t=n(e),i=r.get(t);i||(i=[],r.set(t,i)),i.push(e)}let i=new Map,a=new Map,o=new Map;{let e=0;for(let n of t){let t=f.get(n),r=k.get(n),s=Math.max(0,r.left-Math.floor(t/2)),c=Math.max(0,r.right-(t-1-Math.floor(t/2)));i.set(n,e),a.set(n,s+t+c),o.set(n,s),e+=s+t+c+l}}let s=0,c=0,g=(e,t)=>{let n=m.get(e),r=f.get(e),i=p.get(e),u=o.get(e),h=a.get(e);A.set(e,{cls:n,sections:d.get(e),x:t+u,y:te,width:r,height:i}),j=Math.max(j,t+h),s=t+h+l,c=Math.max(c,i)},_=new Set;for(let c of t){if(_.has(c))continue;let t=n(c),u=h.get(c),d=u?[...u].filter(t=>v.get(t)<e):[];if(d.length===0){g(c,Math.max(i.get(c),s,0)),_.add(c);continue}let p=r.get(t),m=d.map(e=>{let t=A.get(e);return t.x+Math.floor(t.width/2)}),y=Math.round(m.reduce((e,t)=>e+t,0)/m.length),b=0;for(let e=0;e<p.length;e++)b+=a.get(p[e]),e<p.length-1&&(b+=l);let x=o.get(p[0]),S=p[p.length-1],C=a.get(S)-o.get(S)-f.get(S),w=b-x-C,T=y-x-Math.floor(w/2),E=Math.max(T,s,0);for(let e of p)g(e,E),_.add(e),E=s}te+=c+u}let M=j,ne=0;for(let e of A.values())M=Math.max(M,e.x+e.width),ne=Math.max(ne,e.y+e.height);M+=4,ne+=2;let N=V(M-1,ne-1),P=Pt(M-1,ne-1);function re(e,t,n,r){U(N,e,t,n,{role:r,roleCanvas:P})}let ie=a.hyperlinks?rt(M-1,ne-1):void 0;for(let e of A.values()){let r=Gi(e.sections,c,n.boxBorderPadding);for(let t=0;t<r.length;t++)for(let n=0;n<r[0].length;n++){let i=r[t][n];if(i!==` `){let r=e.x+t,a=e.y+n;r<M&&a<ne&&re(r,a,i,Ui(i))}}if(ie){let n=t(o.interactions.get(e.cls.id)?.href),i=e.sections[0];if(n!==void 0&&i!==void 0){let t=1+ +!!e.cls.annotation;ot(ie,r,{x:e.x,y:e.y},n,{from:t,to:i.length})}}}let F=new Set;for(let e of A.values())for(let t=0;t<e.height;t++)for(let n=0;n<e.width;n++)F.add(`${e.x+n},${e.y+t}`);function I(e,t,n,r){F.has(`${e},${t}`)||re(e,t,n,r)}function ae(e,t,n){for(let[r,i]of A.entries())if(!n?.has(r)&&e>=i.x&&e<=i.x+i.width-1&&t>=i.y&&t<=i.y+i.height-1)return!0;return!1}function oe(e,t,n,r){return Zi(e,0,e+M+9,e=>{for(let i=Math.min(t,n);i<=Math.max(t,n);i++)if(ae(e,i,r))return!1;return!0})??M+2}let se=c?`-`:`─`,L=c?`|`:`│`,le=c?`.`:`╌`,ue=c?`:`:`┊`;function de(e,t,n){let r=Math.floor(n/2),i=n-1-r,a=t>r+i?(r+i)/t:1;return Math.max(-r,Math.min(i,Math.round(e*a)))}function fe(e,t,n){let r=w.get(e)??E.get(e)??0,i=w.get(e)??O.get(e)??0,a=T.get(e)??D.get(e)??0,o=T.get(e)??ee.get(e)??0,s=t.x+Math.floor(t.width/2),c=n.x+Math.floor(n.width/2);return{fromCX:s+r,toCX:c+i,fromAnchorX:s+de(r,a,t.width),toAnchorX:c+de(i,o,n.width)}}function pe(e,t,n,r){if(F.has(`${e},${t}`)||P[e]?.[t]===`arrow`)return;let i=N[e]?.[t];if(!c&&i!==void 0&&Bt(i)&&Bt(n)){let a=Ut(i,n);re(e,t,a,a===n?r:`junction`);return}re(e,t,n,r)}function me(e,t,n,r,i){if(t===n)return;let a=Math.min(t,n),o=Math.max(t,n);for(let t=a+1;t<o;t++)pe(t,e,r,`line`);if(c){pe(t,e,r,`line`),pe(n,e,r,`line`);return}let s=n>t,l=i?s?`└`:`┘`:s?`┌`:`┐`,u=i?s?`┐`:`┌`:s?`┘`:`└`;pe(t,e,l,`corner`),pe(n,e,u,`corner`)}let he=new Map,ge=new Map;o.relationships.forEach((e,t)=>{let n=A.get(e.from),r=A.get(e.to);if(!n||!r)return;let i=pa(e.type,e.markerAt),a=i.dashed?le:se,o=i.dashed?ue:L,s=new Set([e.from,e.to]),{fromCX:l,toCX:u,fromAnchorX:d,toAnchorX:f}=fe(t,n,r),p=n.y+n.height-1,m=r.y;if(p<m){let e=oe(l,p+1,m-1,s),n=e!==l;if(e>=M&&Rt(N,e+2,ne),n){let n=p+1,r=m-1;he.set(t,{routeX:e,exitY:n,entryY:r,fromAnchorX:d,toAnchorX:f,clearSide:e>l?`right`:`left`});let s=Math.min(d,e),u=Math.max(d,e);for(let e=s;e<=u;e++)I(e,n,a,`line`);!c&&n<(N[0]?.length??0)&&(d<e?(I(d,n,`└`,`corner`),I(e,n,`┐`,`corner`)):(I(d,n,`┘`,`corner`),I(e,n,`┌`,`corner`)));for(let t=n+1;t<=r;t++)I(e,t,o,`line`);if(e!==f){let t=Math.min(e,f),n=Math.max(e,f);for(let e=t;e<=n;e++)I(e,r,a,`line`);!c&&r<(N[0]?.length??0)&&(e<f?(I(e,r,`└`,`corner`),I(f,r,`┐`,`corner`)):(I(e,r,`┘`,`corner`),I(f,r,`┌`,`corner`)))}if(i.markerAt===`to`){let e=i.type===`inheritance`||i.type===`realization`;I(f,r,ma(i.type,c,e?`up`:`down`),`arrow`)}if(i.markerAt===`from`){let e=ma(i.type,c,`down`);I(d,p+1,e,`arrow`)}}else{let e=p+Math.floor((m-p)/2),t=l!==d,n=u!==f;me(p+1,d,l,a,!0);for(let n=p+(t?2:1);n<=e;n++)I(l,n,o,`line`);if(l!==u&&e<(N[0]?.length??0)){let t=Math.min(l,u),n=Math.max(l,u);for(let r=t;r<=n;r++)I(r,e,a,`line`);c||(I(l,e,l<u?`└`:`┘`,`corner`),I(u,e,l<u?`┐`:`┌`,`corner`))}for(let t=e+1;t<m-+!!n;t++)I(u,t,o,`line`);if(me(m-1,f,u,a,!1),i.markerAt===`to`){let e=i.type===`inheritance`||i.type===`realization`;I(f,m-1,ma(i.type,c,e?`up`:`down`),`arrow`)}i.markerAt===`from`&&I(d,p+1,ma(i.type,c,`down`),`arrow`)}}else if(r.y+r.height-1<n.y){let e=n.y,t=r.y+r.height-1,s=t+Math.floor((e-t)/2),p=l!==d,m=u!==f;me(e-1,d,l,a,!1);for(let t=e-(p?2:1);t>=s;t--)I(l,t,o,`line`);if(l!==u){let e=Math.min(l,u),t=Math.max(l,u);for(let n=e;n<=t;n++)I(n,s,a,`line`);!c&&s>=0&&s<ne&&(I(l,s,l<u?`┌`:`┐`,`corner`),I(u,s,l<u?`┘`:`└`,`corner`))}for(let e=s-1;e>t+ +!!m;e--)I(u,e,o,`line`);if(me(t+1,f,u,a,!0),i.markerAt===`from`){let t=ma(i.type,c,`up`),n=e-1;for(let e=0;e<t.length;e++)I(d-Math.floor(t.length/2)+e,n,t[e],`arrow`)}if(i.markerAt===`to`){let e=i.type===`inheritance`||i.type===`realization`?`down`:`up`,n=ma(i.type,c,e),r=t+1;for(let e=0;e<n.length;e++)I(f-Math.floor(n.length/2)+e,r,n[e],`arrow`)}}else{let s=r.y+r.height-1,m=Math.min(l,u),h=Math.max(l,u),g=Math.max(p,s);for(let[t,r]of A.entries())t!==e.from&&t!==e.to&&r.y===n.y&&r.x<h+1&&r.x+r.width>m&&(g=Math.max(g,r.y+r.height-1));let _=g+2;ge.set(t,_),Rt(N,M,_+1),Ft(P,M,_+1);let v=l!==d,y=u!==f;me(p+1,d,l,a,!0);for(let e=p+(v?2:1);e<=_;e++)I(l,e,o,`line`);for(let e=m;e<=h;e++)I(e,_,a,`line`);for(let e=_-1;e>=s+(y?2:1);e--)I(u,e,o,`line`);if(me(s+1,f,u,a,!0),i.markerAt===`from`){let e=ma(i.type,c,`down`),t=p+1;for(let n=0;n<e.length;n++)I(d-Math.floor(e.length/2)+n,t,e[n],`arrow`)}if(i.markerAt===`to`){let e=i.type===`inheritance`||i.type===`realization`,t=ma(i.type,c,e?`down`:`up`),n=r.y+r.height;for(let e=0;e<t.length;e++)I(f-Math.floor(t.length/2)+e,n,t[e],`arrow`)}}});function _e(e,t,n,r){let{fromCX:i,toCX:a}=fe(e,t,n),o=t.y+t.height-1,s=n.y;if(o<s){let t=he.get(e);if(t){let e=t.exitY+1,n=t.entryY;if(n>=e)return{idealMidX:t.clearSide===`right`?t.routeX+1+Math.floor(r/2):t.routeX-1-Math.ceil(r/2),baseMidY:Math.floor((e+n)/2)};let i=Math.abs(t.routeX-t.fromAnchorX);return Math.abs(t.toAnchorX-t.routeX)>=i?{idealMidX:Math.floor((t.routeX+t.toAnchorX)/2),baseMidY:t.entryY}:{idealMidX:Math.floor((t.fromAnchorX+t.routeX)/2),baseMidY:t.exitY}}return{idealMidX:Math.floor((i+a)/2),baseMidY:Math.floor((o+1+s-1)/2)}}if(n.y+n.height-1<t.y){let e=n.y+n.height-1;return{idealMidX:Math.floor((i+a)/2),baseMidY:Math.floor((e+1+t.y-1)/2)}}return{idealMidX:Math.floor((i+a)/2),baseMidY:ge.get(e)??Math.max(o,n.y+n.height-1)+2}}function ve(e,t,n,r,i,a,o){let s=r,c=Math.floor(a/2),l=e.y+e.height-1,u=t.y,d=!1;for(let e=0;e<a;e++){let t=s-c+e,r=n-Math.floor(i/2),a=Math.max(0,r);for(let e=a;e<a+i;e++)if(ae(e,t,o)){d=!0;break}if(d)break}if(d){let e=l+1,t=u-1;for(let r=e;r<=t;r++){let e=!0,t=n-Math.floor(i/2),a=Math.max(0,t);for(let t=a;t<a+i;t++)if(ae(t,r,o)){e=!1;break}if(e){s=r;break}}}return s}let R=new Map,ye=[];for(let[e,t]of o.relationships.entries()){if(!t.label)continue;let n=A.get(t.from),r=A.get(t.to);if(!n||!r)continue;let i=Z(t.label),a=Math.floor(i.length/2),o=Math.max(...i.map(B))+2,{idealMidX:s,baseMidY:c}=_e(e,n,r,o),l=new Set([t.from,t.to]),u=ve(n,r,s,c,o,i.length,l);R.set(t,u);let d=Math.max(0,s-Math.floor(o/2));ye.push({rel:t,idealMidX:s,naturalStart:d,naturalEnd:d+o-1,rowStart:u-a,rowEnd:u+a})}let be=da(ye,e=>({idealMid:e.idealMidX,start:e.naturalStart,end:e.naturalEnd,rowStart:e.rowStart,rowEnd:e.rowEnd})),xe=new Map;for(let e of ye){let t=be.get(e);t&&xe.set(e.rel,t)}for(let[e,t]of o.relationships.entries()){let n=A.get(t.from),r=A.get(t.to);if(!(!n||!r)&&t.label){let i=Z(t.label),{idealMidX:a}=_e(e,n,r,Math.max(...i.map(e=>B(e)))+2),o=R.get(t)-Math.floor(i.length/2),s=xe.get(t);for(let e=0;e<i.length;e++){let t=o+e,n=i[e],r=Nt(` ${n} `),{start:c,cells:l}=ha(Math.max(0,a-Math.floor(r.length/2)),r,n,Math.max(0,s.left),s.right),u=c+l.length;u>0&&t>=0&&(Rt(N,Math.max(u,1),Math.max(t+1,1)),Ft(P,Math.max(u,1),Math.max(t+1,1)));for(let e=0;e<l.length;e++){let n=c+e;n>=0&&t>=0&&re(n,t,l[e],`text`)}}}}return ba(s,A,N,c,re),Gt(N,{roleCanvas:P,colorMode:r,theme:i,linkCanvas:ie})}function va(e){let t=new Map;if(e.notes.length===0)return{diagram:e,notesById:t};let n=(e,n)=>{let r=`note ${e}`;return t.set(r,n),{id:r,label:n.text,attributes:[],methods:[]}},r=new Set(e.classes.map(e=>e.id)),i=[];for(let t of e.classes){i.push(t);for(let[r,a]of e.notes.entries())a.forClass===t.id&&i.push(n(r,a))}for(let[t,a]of e.notes.entries())(a.forClass===void 0||!r.has(a.forClass))&&i.push(n(t,a));return{diagram:{...e,classes:i},notesById:t}}function ya(e,t){for(let[n,r]of e){if(r.forClass===void 0)continue;let e=t.get(r.forClass);e!==void 0&&t.set(n,e)}}function ba(e,t,n,r,i){if(e.size===0)return;let a=pr(`rounded`,r),o=r?`.`:`╌`;for(let[r,s]of e){let e=t.get(r);if(!e)continue;let c=e.x+e.width-1,l=e.y+e.height-1;if(i(e.x,e.y,a.tl,`border`),i(c,e.y,a.tr,`border`),i(e.x,l,a.bl,`border`),i(c,l,a.br,`border`),s.forClass===void 0)continue;let u=t.get(s.forClass);if(!u||u.x+u.width>e.x||u.y!==e.y)continue;let d=u.y+1;for(let t=u.x+u.width;t<e.x;t++)n[t]?.[d]===` `&&i(t,d,o,`line`)}}function xa(e){let t=e.trim();return t.length>=2&&(t[0]===`"`&&t[t.length-1]===`"`||t[0]===`'`&&t[t.length-1]===`'`)?t.slice(1,-1):t}var Sa=`"graph <dir>"/"flowchart <dir>" (dir: TD, TB, LR, BT, RL), "stateDiagram-v2", "sequenceDiagram", "classDiagram", "erDiagram", "xychart-beta"`;function Ca(e){let t=e.trim().toLowerCase();if(/^sequence/.test(t))return`sequenceDiagram`;if(/^class/.test(t))return`classDiagram`;if(/^er/.test(t))return`erDiagram`;if(/^xychart/.test(t))return`xychart-beta`;if(/^state/.test(t))return`stateDiagram-v2`}var wa=/^(?:[\w-]+@)?<?(?:-{2,}|={2,}|-\.+-?|~{3,})/;function Ta(e){let t=[];for(let n of e)n.forEach((e,n)=>{if(n===0&&t.length>0&&wa.test(e.text)){let n=t[t.length-1];t[t.length-1]={text:`${n.text} ${e.text}`,line:n.line}}else t.push(e)});return t}function Ea(e){let t=D(e.split(`
8
- `).map(e=>e.trim())),n=Ta(g(e));if(n.length===0)throw Error(`Empty mermaid diagram`);let r=n[0],i=/^stateDiagram(-v2)?\s*$/i.test(r.text)?Oa(n):Da(n);return i.initConfig=t,i}function Da(e){let t=e[0];if(t===void 0)throw Error(`parseFlowchart called with no lines`);let n=t.text,r=n.match(/^(?:graph|flowchart)\s+(TD|TB|LR|BT|RL)\s*$/i);if(!r){let e=n.match(/^(?:graph|flowchart)\b\s*(.*)$/i);if(e){let r=e[1].trim();throw Error(r.length>0?`Line ${t.line}: Invalid direction "${r}" in header "${n}". Expected one of: TD, TB, LR, BT, RL.`:`Line ${t.line}: Missing direction in header "${n}". Expected e.g. "graph TD" or "flowchart LR" — one of: TD, TB, LR, BT, RL.`)}let r=Ca(n),i=r&&r.toLowerCase()!==n.trim().toLowerCase()?` Did you mean "${r}"?`:``;throw Error(`Line ${t.line}: Invalid mermaid header: "${n}".${i} Supported headers: ${Sa}.`)}let i={direction:b(r[1]),nodes:new Map,edges:[],subgraphs:[],classDefs:new Map,classAssignments:new Map,nodeStyles:new Map,linkStyles:new Map,interactions:new Map},a=[];for(let t=1;t<e.length;t++){let n=e[t].text;if(P(n,i)||re(n,i)||F(n,i))continue;if(/^click\s+/i.test(n)){Ba(n,i);continue}if(Ha(n,i))continue;let r=n.match(/^linkStyle\s+(default|[\d,\s]+)\s+(.+)$/);if(r){let e=r[1].trim(),t=N(r[2]);if(e==="default")i.linkStyles.set(`default`,{...i.linkStyles.get(`default`),...t});else{let n=e.split(`,`).map(e=>parseInt(e.trim(),10));for(let e of n)isNaN(e)||i.linkStyles.set(e,{...i.linkStyles.get(e),...t})}continue}let o=n.match(/^direction\s+(TD|TB|LR|BT|RL)\s*$/i);if(o&&a.length>0){a[a.length-1].direction=b(o[1]);continue}let s=n.match(/^subgraph\s+(.+)$/);if(s){let e=s[1].trim(),t=e.match(/^([^\s[]+)\s*\[(.+)\]$/),n,r;t?(n=t[1],r=M(xa(t[2]))):(r=M(xa(e)),n=r.replace(/\s+/g,`_`).replace(/[^\p{L}\p{N}_-]/gu,``));let i={id:n,label:r,nodeIds:[],children:[]};a.push(i);continue}if(n===`end`){let e=a.pop();e&&(a.length>0?a[a.length-1].children.push(e):i.subgraphs.push(e));continue}Ka(n,i,a)}return i}function Oa(e){let t={direction:`TD`,nodes:new Map,edges:[],subgraphs:[],classDefs:new Map,classAssignments:new Map,nodeStyles:new Map,linkStyles:new Map,interactions:new Map},n=[],r=new Set,i=0,a=0;for(let o=1;o<e.length;o++){let s=e[o].text,c=s.match(/^direction\s+(TD|TB|LR|BT|RL)\s*$/i);if(c){n.length>0?n[n.length-1].direction=b(c[1]):t.direction=b(c[1]);continue}let l=s.match(/^linkStyle\s+(default|[\d,\s]+)\s+(.+)$/);if(l){let e=l[1].trim(),n=N(l[2]);if(e==="default")t.linkStyles.set(`default`,{...t.linkStyles.get(`default`),...n});else{let r=e.split(`,`).map(e=>parseInt(e.trim(),10));for(let e of r)isNaN(e)||t.linkStyles.set(e,{...t.linkStyles.get(e),...n})}continue}if(Ha(s,t))continue;let u=s.match(/^state\s+(?:"([^"]+)"\s+as\s+)?([\w\p{L}]+)\s*\{$/u);if(u){let e=u[1]??u[2],i=u[2],a={id:i,label:e,nodeIds:[],children:[]};n.push(a),r.add(i),t.nodes.delete(i);continue}if(s===`}`){let e=n.pop();e&&(n.length>0?n[n.length-1].children.push(e):t.subgraphs.push(e));continue}let d=s.match(/^state\s+"([^"]+)"\s+as\s+([\w\p{L}]+)\s*$/u);if(d){let e=M(d[1]),r=d[2];ka(t,n,{id:r,label:e,shape:`rounded`});continue}let f=s.match(/^(\[\*\]|[\w\p{L}-]+)\s*(?:([\w-]+)@)?-->\s*(\[\*\]|[\w\p{L}-]+)(?:\s*:\s*(.+))?$/u);if(f){let e=f[1],o=f[2],s=f[3],c=f[4]?.trim(),l=c?M(c):void 0;e===`[*]`?(i++,e=`_start${i>1?i:``}`,ka(t,n,{id:e,label:``,shape:`state-start`})):r.has(e)||Aa(t,n,e),s===`[*]`?(a++,s=`_end${a>1?a:``}`,ka(t,n,{id:s,label:``,shape:`state-end`})):r.has(s)||Aa(t,n,s),t.edges.push({source:e,target:s,label:l,style:`solid`,hasArrowStart:!1,hasArrowEnd:!0,...o===void 0?{}:{id:o}});continue}let p=s.match(/^([\w\p{L}-]+)\s*:\s*(.+)$/u);if(p){let e=p[1];ka(t,n,{id:e,label:M(p[2].trim()),shape:`rounded`});continue}}return t}function ka(e,t,n){if(e.nodes.has(n.id)||e.nodes.set(n.id,n),t.length>0){let e=t[t.length-1];e.nodeIds.includes(n.id)||e.nodeIds.push(n.id)}}function Aa(e,t,n){if(!e.nodes.has(n))ka(e,t,{id:n,label:n,shape:`rounded`});else if(t.length>0){let e=t[t.length-1];e.nodeIds.includes(n)||e.nodeIds.push(n)}}var ja=/^(<|o|x)?(-{2,}|={2,}|-\.+-|~{3,})(>|o|x)?(?:\|([^|]*)\|)?/,Ma=new Set([`--`,`==`]);function Na(e){if(e===`o`)return`circle`;if(e===`x`)return`cross`}var Pa=/^(<|o|x)?(--|-\.|==)\s+(.+?)\s+(-{2,}[>ox]|={2,}[>ox]|\.+-[>ox]|-{3,}|={3,}|-\.+-)/,Fa=[{regex:/^([\w\p{L}-]+)\(\(\(((?:"[^"]*"|(?!\)\)\)).)+)\)\)\)/u,shape:`doublecircle`},{regex:/^([\w\p{L}-]+)\(\[((?:"[^"]*"|(?!\]\)).)+)\]\)/u,shape:`stadium`},{regex:/^([\w\p{L}-]+)\(\(((?:"[^"]*"|(?!\)\)).)+)\)\)/u,shape:`circle`},{regex:/^([\w\p{L}-]+)\[\[((?:"[^"]*"|(?!\]\]).)+)\]\]/u,shape:`subroutine`},{regex:/^([\w\p{L}-]+)\[\(((?:"[^"]*"|(?!\)\]).)+)\)\]/u,shape:`cylinder`},{regex:/^([\w\p{L}-]+)\[\/((?:"[^"]*"|(?![\\/]\]).)+)([\\/])\]/u,shape:e=>e===`\\`?`trapezoid`:`parallelogram`},{regex:/^([\w\p{L}-]+)\[\\((?:"[^"]*"|(?![\\/]\]).)+)([\\/])\]/u,shape:e=>e===`/`?`trapezoid-alt`:`parallelogram-alt`},{regex:/^([\w\p{L}-]+)>((?:"[^"]*"|(?!\]).)+)\]/u,shape:`asymmetric`},{regex:/^([\w\p{L}-]+)\{\{((?:"[^"]*"|(?!\}\}).)+)\}\}/u,shape:`hexagon`},{regex:/^([\w\p{L}-]+)\[((?:"[^"]*"|(?!\]).)+)\]/u,shape:`rectangle`},{regex:/^([\w\p{L}-]+)\(((?:"[^"]*"|(?!\)).)+)\)/u,shape:`rounded`},{regex:/^([\w\p{L}-]+)\{((?:"[^"]*"|(?!\}).)+)\}/u,shape:`diamond`}],Ia=/^([\w\p{L}]+(?:-[\w\p{L}]+)*)/u,La=/^([\w\p{L}-]+)(?=@\{)/u;function Ra(e){if(e.shape)return Ke(e.shape)??`rectangle`;if(e.icon!==void 0||e.img!==void 0)switch(e.form?.toLowerCase()){case`circle`:return`circle`;case`rounded`:return`rounded`;default:return`rectangle`}return`rectangle`}function za(e,t){return t.label!==void 0&&t.label.length>0?t.label:t.icon?t.icon:t.img?t.img:e}function Ba(t,n){e(t,n.interactions)}var Va=/^([\w-]+)(?=@\{)/;function Ha(e,t){let n=e.match(Va);if(!n||!t.edges.some(e=>e.id===n[1]))return!1;let r=Ze(e.slice(n[1].length));return r?(Ua(t,n[1],qe(r.body)),!0):!1}function Ua(e,t,n){for(let r of e.edges)r.id===t&&(n.animate!==void 0&&(r.animate=n.animate.toLowerCase()!==`false`),n.animation!==void 0&&(r.animate=!0))}var Wa=/^:::([\w][\w-]*)/,Ga=/^([\w\p{L}-]+):::([\w][\w-]*)/u;function Ka(e,t,n){let r=e.trim(),i=qa(r,t,n);if(!i||i.ids.length===0)return;r=i.remaining.trim();let a=i.ids;for(;r.length>0;){let e,i,o,s,c,l,u,d=r.match(/^([\w-]+)@(?=[-=<~ox])/);d&&(u=d[1],r=r.slice(d[0].length));let f=r.match(ja),p=f?.[2],m=f?.[1],h=f?.[3];if(f&&p!==void 0&&!(m===void 0&&h===void 0&&Ma.has(p))){e=m!==void 0,c=Na(m);let t=f[4]?.trim();s=t?M(t):void 0,r=r.slice(f[0].length).trim(),i=Za(p),o=h!==void 0,l=Na(h)}else{let t=r.match(Pa);if(!t)break;e=!!t[1],c=Na(t[1]);let n=t[3].trim();s=n?M(n):void 0;let a=t[2],u=t[4];r=r.slice(t[0].length).trim(),i=Qa(a,u),l=Na(u.slice(-1)),o=u.endsWith(`>`)||l!==void 0}let g=qa(r,t,n);if(!g||g.ids.length===0)break;r=g.remaining.trim();for(let n of a)for(let r of g.ids)t.edges.push({source:n,target:r,label:s,style:i,hasArrowStart:e,hasArrowEnd:o,...c===void 0?{}:{startMarker:c},...l===void 0?{}:{endMarker:l},...u===void 0?{}:{id:u}});a=g.ids}}function qa(e,t,n){let r=Ja(e,t,n);if(!r)return null;let i=[r.id],a=r.remaining.trim();for(;a.startsWith(`&`);){a=a.slice(1).trim();let e=Ja(a,t,n);if(!e)break;i.push(e.id),a=e.remaining.trim()}return{ids:i,remaining:a}}function Ja(e,t,n){let r=null,i=e,a,o=i.match(Ga);o&&(a=o[2],i=o[1]+i.slice(o[0].length));let s=i.match(La);if(s){let e=s[1],a=Ze(i.slice(e.length));if(a){let o=qe(a.body);Ya(t,n,{id:e,label:M(za(e,o)),shape:Ra(o)}),r=e,i=i.slice(e.length+a.length)}}if(r===null)for(let{regex:e,shape:a}of Fa){let o=i.match(e);if(o){r=o[1];let e=M(o[2]),s=typeof a==`function`?a(o[3]??``):a;Ya(t,n,{id:r,label:e,shape:s}),i=i.slice(o[0].length);break}}if(r===null){let e=i.match(Ia);e&&(r=e[1],t.nodes.has(r)||Ya(t,n,{id:r,label:r,shape:`rectangle`}),i=i.slice(e[0].length))}if(r===null)return null;a&&t.classAssignments.set(r,a);let c=i.match(Wa);return c&&(t.classAssignments.set(r,c[1]),i=i.slice(c[0].length)),{id:r,remaining:i}}function Ya(e,t,n){e.nodes.has(n.id)||e.nodes.set(n.id,n),Xa(t,n.id)}function Xa(e,t){if(e.length>0){let n=e[e.length-1];n.nodeIds.includes(t)||n.nodeIds.push(t)}}function Za(e){return e.startsWith(`~`)?`invisible`:e.includes(`.`)?`dotted`:e.startsWith(`=`)?`thick`:`solid`}function Qa(e,t){return e.includes(`.`)||t.includes(`.`)?`dotted`:e.startsWith(`=`)||t.startsWith(`=`)?`thick`:`solid`}function $a(e,t){let n=new Set,r=new Map;for(let t of e.subgraphs)eo(t,n,r);let i=new Map,a=0;for(let[t,r]of e.nodes){if(n.has(t))continue;let e={name:t,displayLabel:ne(r.label),shape:r.shape,index:a,gridCoord:null,drawingCoord:null,drawing:null,drawn:!1,styleClassName:``,styleClass:Pn};i.set(t,e),a++}let o=[...i.values()],s=[];for(let t of e.edges){let a=t.source,o=t.target;if(n.has(a)){let t=r.get(a),n=t?ro(t,e,`exit`):void 0;n&&(a=n)}if(n.has(o)){let t=r.get(o),n=t?ro(t,e,`entry`):void 0;n&&(o=n)}let c=i.get(a),l=i.get(o);!c||!l||s.push({from:c,to:l,text:t.label?ne(t.label):``,path:[],labelLine:[],startDir:{x:0,y:0},endDir:{x:0,y:0},style:t.style,hasArrowStart:t.hasArrowStart,hasArrowEnd:t.hasArrowEnd,...t.startMarker===void 0?{}:{startMarker:t.startMarker},...t.endMarker===void 0?{}:{endMarker:t.endMarker}})}let c=[];for(let t of e.subgraphs)io(t,null,i,c,e);ao(e.subgraphs,c,i);let l=e.classDefs.get(`default`);if(l)for(let e of i.values())e.styleClassName=`default`,e.styleClass={name:`default`,styles:l};for(let[t,n]of e.classAssignments){let r=i.get(t),a=e.classDefs.get(n);r&&a&&(r.styleClassName=n,r.styleClass={name:n,styles:l?{...l,...a}:a})}return{nodes:o,edges:s,canvas:V(0,0),roleCanvas:Pt(0,0),grid:In(),columnWidth:new Map,rowHeight:new Map,subgraphs:c,config:t,offsetX:0,offsetY:0,bundles:[]}}function eo(e,t,n){t.add(e.id),n.set(e.id,e);for(let r of e.children)eo(r,t,n)}function to(e,t){for(let n of e.nodeIds)t.add(n);for(let n of e.children)to(n,t)}function no(e,t){let n=new Set;if(to(e,n),n.size===0)return!0;let r=t=>n.has(t)||t===e.id;return!t.edges.some(e=>r(e.source)!==r(e.target))}function ro(e,t,n){let r=new Set;if(to(e,r),r.size===0)return;let i=[...t.nodes.keys()].filter(e=>r.has(e));if(i.length===0)return;let a=i.filter(e=>n===`entry`?!t.edges.some(t=>t.target===e&&r.has(t.source)):!t.edges.some(t=>t.source===e&&r.has(t.target))),o=a.length>0?a:i;return n===`entry`?o[0]:o[o.length-1]}function io(e,t,n,r,i){let a;e.direction&&no(e,i)&&(a=e.direction===`LR`||e.direction===`RL`?`LR`:`TD`);let o={name:e.label,nodes:[],parent:t,children:[],minX:0,minY:0,maxX:0,maxY:0,direction:a};for(let t of e.nodeIds){let e=n.get(t);e&&o.nodes.push(e)}r.push(o);for(let t of e.children){let e=io(t,o,n,r,i);o.children.push(e);for(let t of e.nodes)o.nodes.includes(t)||o.nodes.push(t)}return o}function ao(e,t,n){let r=new Map;so(e,t,r);let i=new Map;function a(e){let t=r.get(e);if(t){for(let t of e.children)a(t);for(let n of e.nodeIds)i.has(n)||i.set(n,t)}}for(let t of e)a(t);for(let e of t)e.nodes=e.nodes.filter(t=>{let r;for(let[e,i]of n)if(i===t){r=e;break}if(!r)return!1;let a=i.get(r);return!a||oo(e,a)})}function oo(e,t){let n=t;for(;n!==null;){if(n===e)return!0;n=n.parent}return!1}function so(e,t,n){let r=[];function i(e){for(let t of e)r.push(t),i(t.children)}i(e);for(let e=0;e<r.length&&e<t.length;e++){let i=r[e],a=t[e];!i||!a||n.set(i,a)}}function co(e,t,n,r,i={}){let a=x(Ea(e),i.direction);t.graphDirection=a.direction===`LR`||a.direction===`RL`?`LR`:`TD`;let o=$a(a,t);Kr(o),Xi(o);let s=i.hyperlinks?st(o,a.interactions):void 0;return a.direction===`BT`&&(qt(o.canvas),Jt(o.roleCanvas),s&&at(s)),Gt(o.canvas,{roleCanvas:o.roleCanvas,colorMode:n,theme:r,linkCanvas:s})}var lo={xychart:(e,t,n,r)=>an(e,t,n,r),er:(e,t,n,r)=>ra(e,t,n,r),sequence:(e,t,n,r)=>la(e,t,n,r),class:(e,t,n,r,i)=>_a(e,t,n,r,i),flowchart:(e,t,n,r,i)=>co(e,t,n,r,i)},uo=/\x1b\[[0-9;]*m/g;function fo(e){let t=e.split(`
9
- `),n=t.reduce((e,t)=>Math.max(e,nt(t.replace(uo,``)).length),0),r=String(Math.max(0,t.length-1)).length,i=` `.repeat(r+1);return[i+Array.from({length:n},(e,t)=>String(Math.floor(t/10)%10)).join(``),i+Array.from({length:n},(e,t)=>String(t%10)).join(``),...t.map((e,t)=>`${String(t).padStart(r,` `)} ${e}`)].join(`
10
- `)}function po(e,t={}){let n={useAscii:t.useAscii??!1,paddingX:t.paddingX??5,paddingY:t.paddingY??5,boxBorderPadding:t.boxBorderPadding??1,graphDirection:`TD`},r=t.colorMode===`auto`||t.colorMode===void 0?ft():t.colorMode,i={...ut,...t.theme},a=lo[v(e)](e,n,r,i,{hyperlinks:t.hyperlinks??!1,direction:t.direction});return t.showCoords?fo(a):a}var mo=po;exports.DEFAULT_ASCII_THEME=ut,exports.detectColorMode=ft,exports.diagramColorsToAsciiTheme=dt,exports.renderMermaidASCII=po,exports.renderMermaidAscii=mo;
11
- //# sourceMappingURL=ascii.cjs.map
1
+ var e=require("@zombie-mermaid/ascii-renderer");Object.keys(e).forEach(function(t){t!=="default"&&!Object.prototype.hasOwnProperty.call(exports,t)&&Object.defineProperty(exports,t,{enumerable:!0,get:function(){return e[t]}})});
package/dist/ascii.d.cts CHANGED
@@ -1,170 +1,4 @@
1
- export declare interface AsciiRenderOptions {
2
- /** true = ASCII chars (+,-,|,>), false = Unicode box-drawing (┌,─,│,►). Default: false */
3
- useAscii?: boolean;
4
- /** Horizontal spacing between nodes. Default: 5 */
5
- paddingX?: number;
6
- /** Vertical spacing between nodes. Default: 5 */
7
- paddingY?: number;
8
- /** Padding inside node boxes. Default: 1 */
9
- boxBorderPadding?: number;
10
- /**
11
- * Color mode for output.
12
- * - 'none': No colors (plain text)
13
- * - 'auto': Auto-detect (terminal ANSI capabilities, or HTML in browsers)
14
- * - 'ansi16': 16-color ANSI
15
- * - 'ansi256': 256-color xterm
16
- * - 'truecolor': 24-bit RGB
17
- * - 'html': HTML <span> tags with inline color styles (for browser rendering)
18
- * Default: 'auto'
19
- */
20
- colorMode?: ColorMode | 'auto';
21
- /** Theme colors for ASCII output. Uses default theme if not provided. */
22
- theme?: Partial<AsciiTheme>;
23
- /**
24
- * Overlay spreadsheet-style row/column indices on the rendered output, to
25
- * help debug layout spacing. Off by default.
26
- */
27
- showCoords?: boolean;
28
- /**
29
- * Force the diagram's layout direction, overriding the one its source
30
- * declares (a flowchart's `graph LR` header, or a state diagram's
31
- * top-level `direction LR` line). Applied after parsing and before
32
- * layout — the source text is never rewritten. Replaces only the
33
- * top-level direction: a nested subgraph's or composite state's own
34
- * `direction` line still applies on top of it, exactly as it does on top
35
- * of the diagram's own header.
36
- *
37
- * Flowchart and state diagrams only in ASCII output. The ASCII ER layout
38
- * has no direction concept (it already ignores a source `direction`
39
- * line), and sequence/class/XY-chart diagrams have none to override, so
40
- * all of those ignore this option (no error; output is identical with or
41
- * without it). Same semantics as `RenderOptions.direction` for SVG. See
42
- * issue #276.
43
- */
44
- direction?: Direction;
45
- /**
46
- * Emit OSC 8 terminal hyperlinks: each node whose `click` directive
47
- * declared an http/https/mailto/relative href gets its label wrapped in
48
- * an `ESC ] 8 ; ; <url> ESC \` … `ESC ] 8 ; ; ESC \` pair, which
49
- * terminals that support OSC 8 (iTerm2, WezTerm, kitty, Windows
50
- * Terminal, VTE-based terminals) render as a clickable link. The
51
- * sequences are zero-width and never affect layout; `click ... call fn()`
52
- * bindings emit nothing. Off by default — not every terminal or pager
53
- * handles OSC 8 gracefully (`less` needs `-R`), and no capability
54
- * detection is attempted here; the caller decides. Ignored when
55
- * `colorMode` is 'html'.
56
- */
57
- hyperlinks?: boolean;
58
- }
59
1
 
60
- /**
61
- * Theme colors for ASCII output — hex color strings.
62
- * Derived from the SVG theme system for visual consistency.
63
- */
64
- export declare interface AsciiTheme {
65
- /** Text color (node labels, edge labels) */
66
- fg: string;
67
- /** Box border color (node borders, subgraph borders) */
68
- border: string;
69
- /** Edge line color (paths between nodes) */
70
- line: string;
71
- /** Arrowhead color (▲▼◄► or ^v<>) */
72
- arrow: string;
73
- /** Theme accent color (optional, used by xycharts for series 0) */
74
- accent?: string;
75
- /** Background color (optional, used by xycharts for dark-mode-aware shading) */
76
- bg?: string;
77
- /** Corner character color (optional, defaults to line) */
78
- corner?: string;
79
- /** Junction character color (optional, defaults to border) */
80
- junction?: string;
81
- }
82
-
83
- /** Color mode for output. */
84
- export declare type ColorMode = 'none' | 'ansi16' | 'ansi256' | 'truecolor' | 'html';
85
-
86
- /**
87
- * Default ASCII theme derived from the SVG renderer's color palette.
88
- * Uses the same mixing ratios to maintain visual consistency.
89
- */
90
- export declare const DEFAULT_ASCII_THEME: AsciiTheme;
91
-
92
- /**
93
- * Detect the best color mode for the current environment.
94
- *
95
- * Terminal detection order:
96
- * 1. COLORTERM=truecolor or COLORTERM=24bit → truecolor
97
- * 2. TERM contains "256color" → ansi256
98
- * 3. TERM is set and not "dumb" → ansi16
99
- *
100
- * Browser: returns 'html' (uses <span> tags with inline styles).
101
- * Unknown/piped: returns 'none'.
102
- */
103
- export declare function detectColorMode(): ColorMode;
104
-
105
- /**
106
- * Diagram color configuration.
107
- *
108
- * Required: bg + fg give you a clean mono diagram.
109
- * Optional: line, accent, muted, surface, border bring in richer color
110
- * from Shiki themes or custom palettes. Each falls back to a color-mix()
111
- * derivation from bg + fg if not set.
112
- */
113
- declare interface DiagramColors {
114
- /** Background color → CSS variable --bg */
115
- bg: string;
116
- /** Foreground / primary text color → CSS variable --fg */
117
- fg: string;
118
- /** Edge/connector color → CSS variable --line */
119
- line?: string;
120
- /** Arrow heads, highlights, special nodes → CSS variable --accent */
121
- accent?: string;
122
- /** Secondary text, edge labels → CSS variable --muted */
123
- muted?: string;
124
- /** Node/box fill tint → CSS variable --surface */
125
- surface?: string;
126
- /** Node/group stroke color → CSS variable --border */
127
- border?: string;
128
- }
129
-
130
- /**
131
- * Derive an AsciiTheme from SVG DiagramColors using the same mixing ratios.
132
- * Honors optional enrichment colors (line, accent, border) when present,
133
- * otherwise falls back to color-mix derivation — matching SVG behavior.
134
- */
135
- export declare function diagramColorsToAsciiTheme(colors: DiagramColors): AsciiTheme;
136
-
137
- declare type Direction = 'TD' | 'TB' | 'LR' | 'BT' | 'RL';
138
-
139
- /**
140
- * Render Mermaid diagram text to an ASCII/Unicode string.
141
- *
142
- * Synchronous — no async layout engine needed (unlike the SVG renderer).
143
- * Auto-detects diagram type from the header line and dispatches to
144
- * the appropriate renderer.
145
- *
146
- * @param text - Mermaid source text (any supported diagram type)
147
- * @param options - Rendering options
148
- * @returns Multi-line ASCII/Unicode string
149
- *
150
- * @example
151
- * ```ts
152
- * const result = renderMermaidASCII(`
153
- * graph LR
154
- * A --> B --> C
155
- * `, { useAscii: true })
156
- *
157
- * // Output:
158
- * // +---+ +---+ +---+
159
- * // | | | | | |
160
- * // | A |---->| B |---->| C |
161
- * // | | | | | |
162
- * // +---+ +---+ +---+
163
- * ```
164
- */
165
- export declare function renderMermaidASCII(text: string, options?: AsciiRenderOptions): string;
166
-
167
- /** @deprecated Use `renderMermaidASCII` */
168
- export declare const renderMermaidAscii: typeof renderMermaidASCII;
2
+ export * from "@zombie-mermaid/ascii-renderer";
169
3
 
170
4
  export { }