@zombie-mermaid/ascii-renderer 2.2.1

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 (232) hide show
  1. package/LICENSE +22 -0
  2. package/dist/index.cjs +8 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.d.cts +146 -0
  5. package/dist/index.d.ts +146 -0
  6. package/dist/index.js +5392 -0
  7. package/dist/index.js.map +1 -0
  8. package/package.json +36 -0
  9. package/src/__tests__/ascii-arrowhead-direction-1083.test.ts +51 -0
  10. package/src/__tests__/ascii-canvas-first-claim-wins-1093.test.ts +89 -0
  11. package/src/__tests__/ascii-canvas-size-offset-1093.test.ts +95 -0
  12. package/src/__tests__/ascii-canvas-write.test.ts +132 -0
  13. package/src/__tests__/ascii-chain-edge-overlap-1067.test.ts +100 -0
  14. package/src/__tests__/ascii-charset-border-junctions.test.ts +63 -0
  15. package/src/__tests__/ascii-cjk-width.test.ts +150 -0
  16. package/src/__tests__/ascii-class-box-occupancy.test.ts +462 -0
  17. package/src/__tests__/ascii-class-column-width-488-489.test.ts +639 -0
  18. package/src/__tests__/ascii-class-cross-level-jog-corruption.test.ts +187 -0
  19. package/src/__tests__/ascii-class-detour-label-routing-487.test.ts +114 -0
  20. package/src/__tests__/ascii-class-diagram-compartments.test.ts +70 -0
  21. package/src/__tests__/ascii-class-label-box-collision.test.ts +60 -0
  22. package/src/__tests__/ascii-class-label-row-collision-531.test.ts +135 -0
  23. package/src/__tests__/ascii-class-label-territory-row-awareness.test.ts +57 -0
  24. package/src/__tests__/ascii-class-padding.test.ts +104 -0
  25. package/src/__tests__/ascii-class-parent-alignment-971.test.ts +139 -0
  26. package/src/__tests__/ascii-class-parent-alignment-972.test.ts +208 -0
  27. package/src/__tests__/ascii-class-reciprocal-relationships-448.test.ts +169 -0
  28. package/src/__tests__/ascii-combining-mark-width.test.ts +70 -0
  29. package/src/__tests__/ascii-coords-overlay.test.ts +64 -0
  30. package/src/__tests__/ascii-decision-lr-box-start.test.ts +106 -0
  31. package/src/__tests__/ascii-display-width-unit.test.ts +154 -0
  32. package/src/__tests__/ascii-draw-arrows-coverage.test.ts +224 -0
  33. package/src/__tests__/ascii-draw-arrows-single-point-path.test.ts +105 -0
  34. package/src/__tests__/ascii-edge-bundling-rank-violation-454.test.ts +72 -0
  35. package/src/__tests__/ascii-edge-ending-glyphs.test.ts +206 -0
  36. package/src/__tests__/ascii-edge-label-diagonal-fallback-418.test.ts +95 -0
  37. package/src/__tests__/ascii-edge-routing-fixes.test.ts +178 -0
  38. package/src/__tests__/ascii-edge-routing-single-point-path.test.ts +103 -0
  39. package/src/__tests__/ascii-edge-style-consistency-1067.test.ts +89 -0
  40. package/src/__tests__/ascii-edge-styles.test.ts +149 -0
  41. package/src/__tests__/ascii-emoji-cluster-width.test.ts +101 -0
  42. package/src/__tests__/ascii-er-box-occupancy.test.ts +251 -0
  43. package/src/__tests__/ascii-er-cardinality.test.ts +40 -0
  44. package/src/__tests__/ascii-er-corner-glyphs.test.ts +249 -0
  45. package/src/__tests__/ascii-er-jog-stray-line.test.ts +111 -0
  46. package/src/__tests__/ascii-er-label-padding.test.ts +118 -0
  47. package/src/__tests__/ascii-er-padding.test.ts +114 -0
  48. package/src/__tests__/ascii-er-relationship-label-corruption-350.test.ts +458 -0
  49. package/src/__tests__/ascii-er-relationship-overwrite.test.ts +325 -0
  50. package/src/__tests__/ascii-er-stray-connectors.test.ts +344 -0
  51. package/src/__tests__/ascii-er-unrelated-stem-separation-411.test.ts +98 -0
  52. package/src/__tests__/ascii-er-vertical-one-marker.test.ts +110 -0
  53. package/src/__tests__/ascii-label-line-terminal-fallback.test.ts +168 -0
  54. package/src/__tests__/ascii-lane-search.test.ts +207 -0
  55. package/src/__tests__/ascii-multibox-cjk-width.test.ts +184 -0
  56. package/src/__tests__/ascii-multiline.test.ts +288 -0
  57. package/src/__tests__/ascii-padding-edge-cases.test.ts +154 -0
  58. package/src/__tests__/ascii-pathfinder-route-edge.test.ts +184 -0
  59. package/src/__tests__/ascii-sequence-alt-else-label.test.ts +236 -0
  60. package/src/__tests__/ascii-sequence-block-wall-clearance.test.ts +217 -0
  61. package/src/__tests__/ascii-sequence-box-group.test.ts +159 -0
  62. package/src/__tests__/ascii-sequence-cjk-width.test.ts +235 -0
  63. package/src/__tests__/ascii-sequence-create-destroy.test.ts +114 -0
  64. package/src/__tests__/ascii-sequence-form-invariants.test.ts +432 -0
  65. package/src/__tests__/ascii-sequence-mermaid-parity.test.ts +219 -0
  66. package/src/__tests__/ascii-sequence-notes.test.ts +61 -0
  67. package/src/__tests__/ascii-sequence-padding.test.ts +119 -0
  68. package/src/__tests__/ascii-sequence-self-arrow.test.ts +206 -0
  69. package/src/__tests__/ascii-shape-diamond.test.ts +38 -0
  70. package/src/__tests__/ascii-shape-rectangle.test.ts +258 -0
  71. package/src/__tests__/ascii-shape-rounded.test.ts +36 -0
  72. package/src/__tests__/ascii-shapes-circle.test.ts +41 -0
  73. package/src/__tests__/ascii-shapes-hexagon.test.ts +42 -0
  74. package/src/__tests__/ascii-shapes-special.test.ts +344 -0
  75. package/src/__tests__/ascii-shapes-stadium.test.ts +217 -0
  76. package/src/__tests__/ascii-shapes-state.test.ts +224 -0
  77. package/src/__tests__/ascii-state-bidirectional-label-swap-530.test.ts +130 -0
  78. package/src/__tests__/ascii-subgraph-direction-honored-445.test.ts +90 -0
  79. package/src/__tests__/ascii-subgraph-label-border-clip.test.ts +152 -0
  80. package/src/__tests__/ascii-subgraph-title-padding.test.ts +77 -0
  81. package/src/__tests__/ascii-territory-unit.test.ts +219 -0
  82. package/src/__tests__/ascii-validate.test.ts +220 -0
  83. package/src/__tests__/ascii.test.ts +325 -0
  84. package/src/__tests__/class-arrow-directions.test.ts +505 -0
  85. package/src/__tests__/draw-lines.test.ts +93 -0
  86. package/src/__tests__/edge-cell-styles.test.ts +278 -0
  87. package/src/__tests__/grid-occupancy.test.ts +240 -0
  88. package/src/__tests__/helpers/ascii-form.ts +142 -0
  89. package/src/__tests__/helpers/terminal-display-width.ts +74 -0
  90. package/src/__tests__/pathfinder.test.ts +239 -0
  91. package/src/__tests__/testdata/ascii/ampersand_lhs.txt +18 -0
  92. package/src/__tests__/testdata/ascii/ampersand_lhs_and_rhs.txt +18 -0
  93. package/src/__tests__/testdata/ascii/ampersand_rhs.txt +18 -0
  94. package/src/__tests__/testdata/ascii/ampersand_td_fanin.txt +18 -0
  95. package/src/__tests__/testdata/ascii/ampersand_td_fanout.txt +18 -0
  96. package/src/__tests__/testdata/ascii/ampersand_without_edge.txt +18 -0
  97. package/src/__tests__/testdata/ascii/back_reference_from_child.txt +10 -0
  98. package/src/__tests__/testdata/ascii/backlink_from_bottom.txt +22 -0
  99. package/src/__tests__/testdata/ascii/backlink_from_top.txt +22 -0
  100. package/src/__tests__/testdata/ascii/backlink_with_short_y_padding.txt +20 -0
  101. package/src/__tests__/testdata/ascii/cls_all_relationships.txt +19 -0
  102. package/src/__tests__/testdata/ascii/cls_annotation.txt +29 -0
  103. package/src/__tests__/testdata/ascii/cls_association.txt +14 -0
  104. package/src/__tests__/testdata/ascii/cls_basic.txt +15 -0
  105. package/src/__tests__/testdata/ascii/cls_dependency.txt +14 -0
  106. package/src/__tests__/testdata/ascii/cls_inheritance.txt +20 -0
  107. package/src/__tests__/testdata/ascii/cls_methods.txt +21 -0
  108. package/src/__tests__/testdata/ascii/comments.txt +23 -0
  109. package/src/__tests__/testdata/ascii/custom_padding.txt +10 -0
  110. package/src/__tests__/testdata/ascii/duplicate_labels.txt +19 -0
  111. package/src/__tests__/testdata/ascii/er_attributes.txt +21 -0
  112. package/src/__tests__/testdata/ascii/er_basic.txt +8 -0
  113. package/src/__tests__/testdata/ascii/er_identifying.txt +18 -0
  114. package/src/__tests__/testdata/ascii/flowchart_tb_simple.txt +29 -0
  115. package/src/__tests__/testdata/ascii/graph_bt_direction.txt +28 -0
  116. package/src/__tests__/testdata/ascii/graph_tb_direction.txt +26 -0
  117. package/src/__tests__/testdata/ascii/nested_subgraphs_with_labels.txt +36 -0
  118. package/src/__tests__/testdata/ascii/preserve_order_of_definition.txt +23 -0
  119. package/src/__tests__/testdata/ascii/self_reference.txt +10 -0
  120. package/src/__tests__/testdata/ascii/self_reference_with_edge.txt +10 -0
  121. package/src/__tests__/testdata/ascii/seq_basic.txt +17 -0
  122. package/src/__tests__/testdata/ascii/seq_multiple_messages.txt +25 -0
  123. package/src/__tests__/testdata/ascii/seq_self_message.txt +18 -0
  124. package/src/__tests__/testdata/ascii/single_node.txt +8 -0
  125. package/src/__tests__/testdata/ascii/single_node_longer_name.txt +8 -0
  126. package/src/__tests__/testdata/ascii/subgraph_complex_mixed.txt +38 -0
  127. package/src/__tests__/testdata/ascii/subgraph_complex_nested.txt +49 -0
  128. package/src/__tests__/testdata/ascii/subgraph_direction_override.txt +47 -0
  129. package/src/__tests__/testdata/ascii/subgraph_empty.txt +10 -0
  130. package/src/__tests__/testdata/ascii/subgraph_mixed_nodes.txt +20 -0
  131. package/src/__tests__/testdata/ascii/subgraph_mixed_nodes_td.txt +48 -0
  132. package/src/__tests__/testdata/ascii/subgraph_multiple_edges.txt +32 -0
  133. package/src/__tests__/testdata/ascii/subgraph_multiple_nodes.txt +16 -0
  134. package/src/__tests__/testdata/ascii/subgraph_nested.txt +24 -0
  135. package/src/__tests__/testdata/ascii/subgraph_nested_with_external.txt +30 -0
  136. package/src/__tests__/testdata/ascii/subgraph_node_outside_lr.txt +17 -0
  137. package/src/__tests__/testdata/ascii/subgraph_single_node.txt +16 -0
  138. package/src/__tests__/testdata/ascii/subgraph_td_direction.txt +26 -0
  139. package/src/__tests__/testdata/ascii/subgraph_td_multiple.txt +44 -0
  140. package/src/__tests__/testdata/ascii/subgraph_td_multiple_paddingy.txt +42 -0
  141. package/src/__tests__/testdata/ascii/subgraph_three_levels_nested.txt +32 -0
  142. package/src/__tests__/testdata/ascii/subgraph_three_separate.txt +24 -0
  143. package/src/__tests__/testdata/ascii/subgraph_two_separate.txt +20 -0
  144. package/src/__tests__/testdata/ascii/subgraph_with_labels.txt +20 -0
  145. package/src/__tests__/testdata/ascii/three_nodes.txt +9 -0
  146. package/src/__tests__/testdata/ascii/three_nodes_single_line.txt +8 -0
  147. package/src/__tests__/testdata/ascii/two_layer_single_graph.txt +19 -0
  148. package/src/__tests__/testdata/ascii/two_layer_single_graph_longer_names.txt +19 -0
  149. package/src/__tests__/testdata/ascii/two_nodes_linked.txt +8 -0
  150. package/src/__tests__/testdata/ascii/two_nodes_longer_names.txt +8 -0
  151. package/src/__tests__/testdata/ascii/two_root_nodes.txt +19 -0
  152. package/src/__tests__/testdata/ascii/two_root_nodes_longer_names.txt +19 -0
  153. package/src/__tests__/testdata/ascii/two_single_root_nodes.txt +19 -0
  154. package/src/__tests__/testdata/unicode/ampersand_lhs.txt +18 -0
  155. package/src/__tests__/testdata/unicode/ampersand_lhs_and_rhs.txt +18 -0
  156. package/src/__tests__/testdata/unicode/ampersand_rhs.txt +18 -0
  157. package/src/__tests__/testdata/unicode/ampersand_without_edge.txt +18 -0
  158. package/src/__tests__/testdata/unicode/back_reference_from_child.txt +10 -0
  159. package/src/__tests__/testdata/unicode/backlink_from_bottom.txt +22 -0
  160. package/src/__tests__/testdata/unicode/backlink_from_top.txt +22 -0
  161. package/src/__tests__/testdata/unicode/cls_all_relationships.txt +19 -0
  162. package/src/__tests__/testdata/unicode/cls_annotation.txt +29 -0
  163. package/src/__tests__/testdata/unicode/cls_association.txt +14 -0
  164. package/src/__tests__/testdata/unicode/cls_basic.txt +15 -0
  165. package/src/__tests__/testdata/unicode/cls_dependency.txt +14 -0
  166. package/src/__tests__/testdata/unicode/cls_inheritance.txt +20 -0
  167. package/src/__tests__/testdata/unicode/cls_methods.txt +21 -0
  168. package/src/__tests__/testdata/unicode/comments.txt +23 -0
  169. package/src/__tests__/testdata/unicode/duplicate_labels.txt +19 -0
  170. package/src/__tests__/testdata/unicode/er_attributes.txt +21 -0
  171. package/src/__tests__/testdata/unicode/er_basic.txt +8 -0
  172. package/src/__tests__/testdata/unicode/er_identifying.txt +18 -0
  173. package/src/__tests__/testdata/unicode/graph_bt_direction.txt +28 -0
  174. package/src/__tests__/testdata/unicode/preserve_order_of_definition.txt +23 -0
  175. package/src/__tests__/testdata/unicode/self_reference.txt +10 -0
  176. package/src/__tests__/testdata/unicode/self_reference_with_edge.txt +10 -0
  177. package/src/__tests__/testdata/unicode/seq_basic.txt +17 -0
  178. package/src/__tests__/testdata/unicode/seq_multiple_messages.txt +25 -0
  179. package/src/__tests__/testdata/unicode/seq_self_message.txt +18 -0
  180. package/src/__tests__/testdata/unicode/single_node.txt +8 -0
  181. package/src/__tests__/testdata/unicode/single_node_longer_name.txt +8 -0
  182. package/src/__tests__/testdata/unicode/three_nodes.txt +9 -0
  183. package/src/__tests__/testdata/unicode/three_nodes_single_line.txt +8 -0
  184. package/src/__tests__/testdata/unicode/two_layer_single_graph.txt +19 -0
  185. package/src/__tests__/testdata/unicode/two_layer_single_graph_longer_names.txt +19 -0
  186. package/src/__tests__/testdata/unicode/two_nodes_linked.txt +8 -0
  187. package/src/__tests__/testdata/unicode/two_nodes_longer_names.txt +8 -0
  188. package/src/__tests__/testdata/unicode/two_root_nodes.txt +19 -0
  189. package/src/__tests__/testdata/unicode/two_root_nodes_longer_names.txt +19 -0
  190. package/src/__tests__/testdata/unicode/two_single_root_nodes.txt +19 -0
  191. package/src/__tests__/xychart-ascii.test.ts +376 -0
  192. package/src/ansi.ts +490 -0
  193. package/src/canvas.ts +757 -0
  194. package/src/class-diagram.ts +2001 -0
  195. package/src/converter.ts +446 -0
  196. package/src/coords.ts +58 -0
  197. package/src/display-width.ts +151 -0
  198. package/src/draw-arrows.ts +593 -0
  199. package/src/draw-boxes.ts +267 -0
  200. package/src/draw-bundles.ts +611 -0
  201. package/src/draw-lines.ts +174 -0
  202. package/src/draw-subgraphs.ts +108 -0
  203. package/src/draw.ts +350 -0
  204. package/src/edge-bundling.ts +435 -0
  205. package/src/edge-cell-styles.ts +209 -0
  206. package/src/edge-routing.ts +1070 -0
  207. package/src/er-diagram.ts +1488 -0
  208. package/src/flowchart.ts +94 -0
  209. package/src/grid-occupancy.ts +234 -0
  210. package/src/grid.ts +1309 -0
  211. package/src/hyperlinks.ts +248 -0
  212. package/src/index.ts +163 -0
  213. package/src/lane-search.ts +68 -0
  214. package/src/multiline-utils.ts +82 -0
  215. package/src/pathfinder.ts +448 -0
  216. package/src/registry.ts +88 -0
  217. package/src/sequence.ts +1318 -0
  218. package/src/shapes/circle.ts +31 -0
  219. package/src/shapes/corners.ts +273 -0
  220. package/src/shapes/diamond.ts +31 -0
  221. package/src/shapes/hexagon.ts +35 -0
  222. package/src/shapes/index.ts +123 -0
  223. package/src/shapes/rectangle.ts +199 -0
  224. package/src/shapes/rounded.ts +31 -0
  225. package/src/shapes/special.ts +360 -0
  226. package/src/shapes/stadium.ts +122 -0
  227. package/src/shapes/state.ts +204 -0
  228. package/src/shapes/types.ts +78 -0
  229. package/src/territory.ts +136 -0
  230. package/src/types.ts +454 -0
  231. package/src/validate.ts +189 -0
  232. package/src/xychart.ts +1085 -0
@@ -0,0 +1,146 @@
1
+ import { DiagramColors } from '@zombie-mermaid/core';
2
+ import { Direction } from '@zombie-mermaid/core';
3
+
4
+ export declare interface AsciiRenderOptions {
5
+ /** true = ASCII chars (+,-,|,>), false = Unicode box-drawing (┌,─,│,►). Default: false */
6
+ useAscii?: boolean;
7
+ /** Horizontal spacing between nodes. Default: 5 */
8
+ paddingX?: number;
9
+ /** Vertical spacing between nodes. Default: 5 */
10
+ paddingY?: number;
11
+ /** Padding inside node boxes. Default: 1 */
12
+ boxBorderPadding?: number;
13
+ /**
14
+ * Color mode for output.
15
+ * - 'none': No colors (plain text)
16
+ * - 'auto': Auto-detect (terminal ANSI capabilities, or HTML in browsers)
17
+ * - 'ansi16': 16-color ANSI
18
+ * - 'ansi256': 256-color xterm
19
+ * - 'truecolor': 24-bit RGB
20
+ * - 'html': HTML <span> tags with inline color styles (for browser rendering)
21
+ * Default: 'auto'
22
+ */
23
+ colorMode?: ColorMode | 'auto';
24
+ /** Theme colors for ASCII output. Uses default theme if not provided. */
25
+ theme?: Partial<AsciiTheme>;
26
+ /**
27
+ * Overlay spreadsheet-style row/column indices on the rendered output, to
28
+ * help debug layout spacing. Off by default.
29
+ */
30
+ showCoords?: boolean;
31
+ /**
32
+ * Force the diagram's layout direction, overriding the one its source
33
+ * declares (a flowchart's `graph LR` header, or a state diagram's
34
+ * top-level `direction LR` line). Applied after parsing and before
35
+ * layout — the source text is never rewritten. Replaces only the
36
+ * top-level direction: a nested subgraph's or composite state's own
37
+ * `direction` line still applies on top of it, exactly as it does on top
38
+ * of the diagram's own header.
39
+ *
40
+ * Flowchart and state diagrams only in ASCII output. The ASCII ER layout
41
+ * has no direction concept (it already ignores a source `direction`
42
+ * line), and sequence/class/XY-chart diagrams have none to override, so
43
+ * all of those ignore this option (no error; output is identical with or
44
+ * without it). Same semantics as `RenderOptions.direction` for SVG. See
45
+ * issue #276.
46
+ */
47
+ direction?: Direction;
48
+ /**
49
+ * Emit OSC 8 terminal hyperlinks: each node whose `click` directive
50
+ * declared an http/https/mailto/relative href gets its label wrapped in
51
+ * an `ESC ] 8 ; ; <url> ESC \` … `ESC ] 8 ; ; ESC \` pair, which
52
+ * terminals that support OSC 8 (iTerm2, WezTerm, kitty, Windows
53
+ * Terminal, VTE-based terminals) render as a clickable link. The
54
+ * sequences are zero-width and never affect layout; `click ... call fn()`
55
+ * bindings emit nothing. Off by default — not every terminal or pager
56
+ * handles OSC 8 gracefully (`less` needs `-R`), and no capability
57
+ * detection is attempted here; the caller decides. Ignored when
58
+ * `colorMode` is 'html'.
59
+ */
60
+ hyperlinks?: boolean;
61
+ }
62
+
63
+ /**
64
+ * Theme colors for ASCII output — hex color strings.
65
+ * Derived from the SVG theme system for visual consistency.
66
+ */
67
+ export declare interface AsciiTheme {
68
+ /** Text color (node labels, edge labels) */
69
+ fg: string;
70
+ /** Box border color (node borders, subgraph borders) */
71
+ border: string;
72
+ /** Edge line color (paths between nodes) */
73
+ line: string;
74
+ /** Arrowhead color (▲▼◄► or ^v<>) */
75
+ arrow: string;
76
+ /** Theme accent color (optional, used by xycharts for series 0) */
77
+ accent?: string;
78
+ /** Background color (optional, used by xycharts for dark-mode-aware shading) */
79
+ bg?: string;
80
+ /** Corner character color (optional, defaults to line) */
81
+ corner?: string;
82
+ /** Junction character color (optional, defaults to border) */
83
+ junction?: string;
84
+ }
85
+
86
+ /** Color mode for output. */
87
+ export declare type ColorMode = 'none' | 'ansi16' | 'ansi256' | 'truecolor' | 'html';
88
+
89
+ /**
90
+ * Default ASCII theme derived from the SVG renderer's color palette.
91
+ * Uses the same mixing ratios to maintain visual consistency.
92
+ */
93
+ export declare const DEFAULT_ASCII_THEME: AsciiTheme;
94
+
95
+ /**
96
+ * Detect the best color mode for the current environment.
97
+ *
98
+ * Terminal detection order:
99
+ * 1. COLORTERM=truecolor or COLORTERM=24bit → truecolor
100
+ * 2. TERM contains "256color" → ansi256
101
+ * 3. TERM is set and not "dumb" → ansi16
102
+ *
103
+ * Browser: returns 'html' (uses <span> tags with inline styles).
104
+ * Unknown/piped: returns 'none'.
105
+ */
106
+ export declare function detectColorMode(): ColorMode;
107
+
108
+ /**
109
+ * Derive an AsciiTheme from SVG DiagramColors using the same mixing ratios.
110
+ * Honors optional enrichment colors (line, accent, border) when present,
111
+ * otherwise falls back to color-mix derivation — matching SVG behavior.
112
+ */
113
+ export declare function diagramColorsToAsciiTheme(colors: DiagramColors): AsciiTheme;
114
+
115
+ /**
116
+ * Render Mermaid diagram text to an ASCII/Unicode string.
117
+ *
118
+ * Synchronous — no async layout engine needed (unlike the SVG renderer).
119
+ * Auto-detects diagram type from the header line and dispatches to
120
+ * the appropriate renderer.
121
+ *
122
+ * @param text - Mermaid source text (any supported diagram type)
123
+ * @param options - Rendering options
124
+ * @returns Multi-line ASCII/Unicode string
125
+ *
126
+ * @example
127
+ * ```ts
128
+ * const result = renderMermaidASCII(`
129
+ * graph LR
130
+ * A --> B --> C
131
+ * `, { useAscii: true })
132
+ *
133
+ * // Output:
134
+ * // +---+ +---+ +---+
135
+ * // | | | | | |
136
+ * // | A |---->| B |---->| C |
137
+ * // | | | | | |
138
+ * // +---+ +---+ +---+
139
+ * ```
140
+ */
141
+ export declare function renderMermaidASCII(text: string, options?: AsciiRenderOptions): string;
142
+
143
+ /** @deprecated Use `renderMermaidASCII` */
144
+ export declare const renderMermaidAscii: typeof renderMermaidASCII;
145
+
146
+ export { }
@@ -0,0 +1,146 @@
1
+ import { DiagramColors } from '@zombie-mermaid/core';
2
+ import { Direction } from '@zombie-mermaid/core';
3
+
4
+ export declare interface AsciiRenderOptions {
5
+ /** true = ASCII chars (+,-,|,>), false = Unicode box-drawing (┌,─,│,►). Default: false */
6
+ useAscii?: boolean;
7
+ /** Horizontal spacing between nodes. Default: 5 */
8
+ paddingX?: number;
9
+ /** Vertical spacing between nodes. Default: 5 */
10
+ paddingY?: number;
11
+ /** Padding inside node boxes. Default: 1 */
12
+ boxBorderPadding?: number;
13
+ /**
14
+ * Color mode for output.
15
+ * - 'none': No colors (plain text)
16
+ * - 'auto': Auto-detect (terminal ANSI capabilities, or HTML in browsers)
17
+ * - 'ansi16': 16-color ANSI
18
+ * - 'ansi256': 256-color xterm
19
+ * - 'truecolor': 24-bit RGB
20
+ * - 'html': HTML <span> tags with inline color styles (for browser rendering)
21
+ * Default: 'auto'
22
+ */
23
+ colorMode?: ColorMode | 'auto';
24
+ /** Theme colors for ASCII output. Uses default theme if not provided. */
25
+ theme?: Partial<AsciiTheme>;
26
+ /**
27
+ * Overlay spreadsheet-style row/column indices on the rendered output, to
28
+ * help debug layout spacing. Off by default.
29
+ */
30
+ showCoords?: boolean;
31
+ /**
32
+ * Force the diagram's layout direction, overriding the one its source
33
+ * declares (a flowchart's `graph LR` header, or a state diagram's
34
+ * top-level `direction LR` line). Applied after parsing and before
35
+ * layout — the source text is never rewritten. Replaces only the
36
+ * top-level direction: a nested subgraph's or composite state's own
37
+ * `direction` line still applies on top of it, exactly as it does on top
38
+ * of the diagram's own header.
39
+ *
40
+ * Flowchart and state diagrams only in ASCII output. The ASCII ER layout
41
+ * has no direction concept (it already ignores a source `direction`
42
+ * line), and sequence/class/XY-chart diagrams have none to override, so
43
+ * all of those ignore this option (no error; output is identical with or
44
+ * without it). Same semantics as `RenderOptions.direction` for SVG. See
45
+ * issue #276.
46
+ */
47
+ direction?: Direction;
48
+ /**
49
+ * Emit OSC 8 terminal hyperlinks: each node whose `click` directive
50
+ * declared an http/https/mailto/relative href gets its label wrapped in
51
+ * an `ESC ] 8 ; ; <url> ESC \` … `ESC ] 8 ; ; ESC \` pair, which
52
+ * terminals that support OSC 8 (iTerm2, WezTerm, kitty, Windows
53
+ * Terminal, VTE-based terminals) render as a clickable link. The
54
+ * sequences are zero-width and never affect layout; `click ... call fn()`
55
+ * bindings emit nothing. Off by default — not every terminal or pager
56
+ * handles OSC 8 gracefully (`less` needs `-R`), and no capability
57
+ * detection is attempted here; the caller decides. Ignored when
58
+ * `colorMode` is 'html'.
59
+ */
60
+ hyperlinks?: boolean;
61
+ }
62
+
63
+ /**
64
+ * Theme colors for ASCII output — hex color strings.
65
+ * Derived from the SVG theme system for visual consistency.
66
+ */
67
+ export declare interface AsciiTheme {
68
+ /** Text color (node labels, edge labels) */
69
+ fg: string;
70
+ /** Box border color (node borders, subgraph borders) */
71
+ border: string;
72
+ /** Edge line color (paths between nodes) */
73
+ line: string;
74
+ /** Arrowhead color (▲▼◄► or ^v<>) */
75
+ arrow: string;
76
+ /** Theme accent color (optional, used by xycharts for series 0) */
77
+ accent?: string;
78
+ /** Background color (optional, used by xycharts for dark-mode-aware shading) */
79
+ bg?: string;
80
+ /** Corner character color (optional, defaults to line) */
81
+ corner?: string;
82
+ /** Junction character color (optional, defaults to border) */
83
+ junction?: string;
84
+ }
85
+
86
+ /** Color mode for output. */
87
+ export declare type ColorMode = 'none' | 'ansi16' | 'ansi256' | 'truecolor' | 'html';
88
+
89
+ /**
90
+ * Default ASCII theme derived from the SVG renderer's color palette.
91
+ * Uses the same mixing ratios to maintain visual consistency.
92
+ */
93
+ export declare const DEFAULT_ASCII_THEME: AsciiTheme;
94
+
95
+ /**
96
+ * Detect the best color mode for the current environment.
97
+ *
98
+ * Terminal detection order:
99
+ * 1. COLORTERM=truecolor or COLORTERM=24bit → truecolor
100
+ * 2. TERM contains "256color" → ansi256
101
+ * 3. TERM is set and not "dumb" → ansi16
102
+ *
103
+ * Browser: returns 'html' (uses <span> tags with inline styles).
104
+ * Unknown/piped: returns 'none'.
105
+ */
106
+ export declare function detectColorMode(): ColorMode;
107
+
108
+ /**
109
+ * Derive an AsciiTheme from SVG DiagramColors using the same mixing ratios.
110
+ * Honors optional enrichment colors (line, accent, border) when present,
111
+ * otherwise falls back to color-mix derivation — matching SVG behavior.
112
+ */
113
+ export declare function diagramColorsToAsciiTheme(colors: DiagramColors): AsciiTheme;
114
+
115
+ /**
116
+ * Render Mermaid diagram text to an ASCII/Unicode string.
117
+ *
118
+ * Synchronous — no async layout engine needed (unlike the SVG renderer).
119
+ * Auto-detects diagram type from the header line and dispatches to
120
+ * the appropriate renderer.
121
+ *
122
+ * @param text - Mermaid source text (any supported diagram type)
123
+ * @param options - Rendering options
124
+ * @returns Multi-line ASCII/Unicode string
125
+ *
126
+ * @example
127
+ * ```ts
128
+ * const result = renderMermaidASCII(`
129
+ * graph LR
130
+ * A --> B --> C
131
+ * `, { useAscii: true })
132
+ *
133
+ * // Output:
134
+ * // +---+ +---+ +---+
135
+ * // | | | | | |
136
+ * // | A |---->| B |---->| C |
137
+ * // | | | | | |
138
+ * // +---+ +---+ +---+
139
+ * ```
140
+ */
141
+ export declare function renderMermaidASCII(text: string, options?: AsciiRenderOptions): string;
142
+
143
+ /** @deprecated Use `renderMermaidASCII` */
144
+ export declare const renderMermaidAscii: typeof renderMermaidASCII;
145
+
146
+ export { }