@chengchenccc/tui 0.1.1-rc.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 (226) hide show
  1. package/dist/autocomplete.d.ts +56 -0
  2. package/dist/autocomplete.d.ts.map +1 -0
  3. package/dist/autocomplete.js +647 -0
  4. package/dist/components/box.d.ts +22 -0
  5. package/dist/components/box.d.ts.map +1 -0
  6. package/dist/components/box.js +103 -0
  7. package/dist/components/card.d.ts +33 -0
  8. package/dist/components/card.d.ts.map +1 -0
  9. package/dist/components/card.js +49 -0
  10. package/dist/components/editor.d.ts +257 -0
  11. package/dist/components/editor.d.ts.map +1 -0
  12. package/dist/components/editor.js +1980 -0
  13. package/dist/components/input.d.ts +37 -0
  14. package/dist/components/input.d.ts.map +1 -0
  15. package/dist/components/input.js +389 -0
  16. package/dist/components/loader.d.ts +33 -0
  17. package/dist/components/loader.d.ts.map +1 -0
  18. package/dist/components/loader.js +100 -0
  19. package/dist/components/markdown.d.ts +108 -0
  20. package/dist/components/markdown.d.ts.map +1 -0
  21. package/dist/components/markdown.js +847 -0
  22. package/dist/components/markdown.test.d.ts +2 -0
  23. package/dist/components/markdown.test.d.ts.map +1 -0
  24. package/dist/components/markdown.test.js +81 -0
  25. package/dist/components/output-block.d.ts +44 -0
  26. package/dist/components/output-block.d.ts.map +1 -0
  27. package/dist/components/output-block.js +131 -0
  28. package/dist/components/select-list.d.ts +50 -0
  29. package/dist/components/select-list.d.ts.map +1 -0
  30. package/dist/components/select-list.js +166 -0
  31. package/dist/components/spacer.d.ts +12 -0
  32. package/dist/components/spacer.d.ts.map +1 -0
  33. package/dist/components/spacer.js +22 -0
  34. package/dist/components/statusline.d.ts +30 -0
  35. package/dist/components/statusline.d.ts.map +1 -0
  36. package/dist/components/statusline.js +46 -0
  37. package/dist/components/text.d.ts +19 -0
  38. package/dist/components/text.d.ts.map +1 -0
  39. package/dist/components/text.js +90 -0
  40. package/dist/components/truncated-text.d.ts +13 -0
  41. package/dist/components/truncated-text.d.ts.map +1 -0
  42. package/dist/components/truncated-text.js +50 -0
  43. package/dist/editor-component.d.ts +39 -0
  44. package/dist/editor-component.d.ts.map +1 -0
  45. package/dist/editor-component.js +1 -0
  46. package/dist/fuzzy.d.ts +16 -0
  47. package/dist/fuzzy.d.ts.map +1 -0
  48. package/dist/fuzzy.js +109 -0
  49. package/dist/index.d.ts +25 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +36 -0
  52. package/dist/keybindings.d.ts +193 -0
  53. package/dist/keybindings.d.ts.map +1 -0
  54. package/dist/keybindings.js +191 -0
  55. package/dist/keys.d.ts +184 -0
  56. package/dist/keys.d.ts.map +1 -0
  57. package/dist/keys.js +1191 -0
  58. package/dist/kill-ring.d.ts +28 -0
  59. package/dist/kill-ring.d.ts.map +1 -0
  60. package/dist/kill-ring.js +43 -0
  61. package/dist/mermaid.d.ts +23 -0
  62. package/dist/mermaid.d.ts.map +1 -0
  63. package/dist/mermaid.js +77 -0
  64. package/dist/mouse.d.ts +40 -0
  65. package/dist/mouse.d.ts.map +1 -0
  66. package/dist/mouse.js +39 -0
  67. package/dist/mouse.test.d.ts +2 -0
  68. package/dist/mouse.test.d.ts.map +1 -0
  69. package/dist/mouse.test.js +36 -0
  70. package/dist/native-modifiers.d.ts +3 -0
  71. package/dist/native-modifiers.d.ts.map +1 -0
  72. package/dist/native-modifiers.js +52 -0
  73. package/dist/stdin-buffer.d.ts +50 -0
  74. package/dist/stdin-buffer.d.ts.map +1 -0
  75. package/dist/stdin-buffer.js +360 -0
  76. package/dist/terminal-colors.d.ts +10 -0
  77. package/dist/terminal-colors.d.ts.map +1 -0
  78. package/dist/terminal-colors.js +58 -0
  79. package/dist/terminal-image.d.ts +90 -0
  80. package/dist/terminal-image.d.ts.map +1 -0
  81. package/dist/terminal-image.js +375 -0
  82. package/dist/terminal.d.ts +110 -0
  83. package/dist/terminal.d.ts.map +1 -0
  84. package/dist/terminal.js +432 -0
  85. package/dist/tui-scrollback.test.d.ts +2 -0
  86. package/dist/tui-scrollback.test.d.ts.map +1 -0
  87. package/dist/tui-scrollback.test.js +51 -0
  88. package/dist/tui.d.ts +330 -0
  89. package/dist/tui.d.ts.map +1 -0
  90. package/dist/tui.js +1568 -0
  91. package/dist/undo-stack.d.ts +17 -0
  92. package/dist/undo-stack.d.ts.map +1 -0
  93. package/dist/undo-stack.js +24 -0
  94. package/dist/utils.d.ts +85 -0
  95. package/dist/utils.d.ts.map +1 -0
  96. package/dist/utils.js +1066 -0
  97. package/dist/vendor/mermaid-ascii/ascii/ansi.d.ts +42 -0
  98. package/dist/vendor/mermaid-ascii/ascii/ansi.d.ts.map +1 -0
  99. package/dist/vendor/mermaid-ascii/ascii/ansi.js +361 -0
  100. package/dist/vendor/mermaid-ascii/ascii/canvas.d.ts +90 -0
  101. package/dist/vendor/mermaid-ascii/ascii/canvas.d.ts.map +1 -0
  102. package/dist/vendor/mermaid-ascii/ascii/canvas.js +414 -0
  103. package/dist/vendor/mermaid-ascii/ascii/class-diagram.d.ts +8 -0
  104. package/dist/vendor/mermaid-ascii/ascii/class-diagram.d.ts.map +1 -0
  105. package/dist/vendor/mermaid-ascii/ascii/class-diagram.js +623 -0
  106. package/dist/vendor/mermaid-ascii/ascii/converter.d.ts +13 -0
  107. package/dist/vendor/mermaid-ascii/ascii/converter.d.ts.map +1 -0
  108. package/dist/vendor/mermaid-ascii/ascii/converter.js +233 -0
  109. package/dist/vendor/mermaid-ascii/ascii/draw.d.ts +67 -0
  110. package/dist/vendor/mermaid-ascii/ascii/draw.d.ts.map +1 -0
  111. package/dist/vendor/mermaid-ascii/ascii/draw.js +1313 -0
  112. package/dist/vendor/mermaid-ascii/ascii/edge-bundling.d.ts +49 -0
  113. package/dist/vendor/mermaid-ascii/ascii/edge-bundling.d.ts.map +1 -0
  114. package/dist/vendor/mermaid-ascii/ascii/edge-bundling.js +289 -0
  115. package/dist/vendor/mermaid-ascii/ascii/edge-routing.d.ts +44 -0
  116. package/dist/vendor/mermaid-ascii/ascii/edge-routing.d.ts.map +1 -0
  117. package/dist/vendor/mermaid-ascii/ascii/edge-routing.js +302 -0
  118. package/dist/vendor/mermaid-ascii/ascii/er-diagram.d.ts +8 -0
  119. package/dist/vendor/mermaid-ascii/ascii/er-diagram.d.ts.map +1 -0
  120. package/dist/vendor/mermaid-ascii/ascii/er-diagram.js +380 -0
  121. package/dist/vendor/mermaid-ascii/ascii/grid.d.ts +57 -0
  122. package/dist/vendor/mermaid-ascii/ascii/grid.d.ts.map +1 -0
  123. package/dist/vendor/mermaid-ascii/ascii/grid.js +516 -0
  124. package/dist/vendor/mermaid-ascii/ascii/index.d.ts +66 -0
  125. package/dist/vendor/mermaid-ascii/ascii/index.d.ts.map +1 -0
  126. package/dist/vendor/mermaid-ascii/ascii/index.js +133 -0
  127. package/dist/vendor/mermaid-ascii/ascii/multiline-utils.d.ts +28 -0
  128. package/dist/vendor/mermaid-ascii/ascii/multiline-utils.d.ts.map +1 -0
  129. package/dist/vendor/mermaid-ascii/ascii/multiline-utils.js +60 -0
  130. package/dist/vendor/mermaid-ascii/ascii/pathfinder.d.ts +18 -0
  131. package/dist/vendor/mermaid-ascii/ascii/pathfinder.d.ts.map +1 -0
  132. package/dist/vendor/mermaid-ascii/ascii/pathfinder.js +224 -0
  133. package/dist/vendor/mermaid-ascii/ascii/sequence.d.ts +8 -0
  134. package/dist/vendor/mermaid-ascii/ascii/sequence.d.ts.map +1 -0
  135. package/dist/vendor/mermaid-ascii/ascii/sequence.js +416 -0
  136. package/dist/vendor/mermaid-ascii/ascii/shapes/circle.d.ts +12 -0
  137. package/dist/vendor/mermaid-ascii/ascii/shapes/circle.d.ts.map +1 -0
  138. package/dist/vendor/mermaid-ascii/ascii/shapes/circle.js +22 -0
  139. package/dist/vendor/mermaid-ascii/ascii/shapes/corners.d.ts +35 -0
  140. package/dist/vendor/mermaid-ascii/ascii/shapes/corners.d.ts.map +1 -0
  141. package/dist/vendor/mermaid-ascii/ascii/shapes/corners.js +91 -0
  142. package/dist/vendor/mermaid-ascii/ascii/shapes/diamond.d.ts +12 -0
  143. package/dist/vendor/mermaid-ascii/ascii/shapes/diamond.d.ts.map +1 -0
  144. package/dist/vendor/mermaid-ascii/ascii/shapes/diamond.js +22 -0
  145. package/dist/vendor/mermaid-ascii/ascii/shapes/hexagon.d.ts +12 -0
  146. package/dist/vendor/mermaid-ascii/ascii/shapes/hexagon.d.ts.map +1 -0
  147. package/dist/vendor/mermaid-ascii/ascii/shapes/hexagon.js +22 -0
  148. package/dist/vendor/mermaid-ascii/ascii/shapes/index.d.ts +27 -0
  149. package/dist/vendor/mermaid-ascii/ascii/shapes/index.d.ts.map +1 -0
  150. package/dist/vendor/mermaid-ascii/ascii/shapes/index.js +66 -0
  151. package/dist/vendor/mermaid-ascii/ascii/shapes/rectangle.d.ts +32 -0
  152. package/dist/vendor/mermaid-ascii/ascii/shapes/rectangle.d.ts.map +1 -0
  153. package/dist/vendor/mermaid-ascii/ascii/shapes/rectangle.js +149 -0
  154. package/dist/vendor/mermaid-ascii/ascii/shapes/rounded.d.ts +12 -0
  155. package/dist/vendor/mermaid-ascii/ascii/shapes/rounded.d.ts.map +1 -0
  156. package/dist/vendor/mermaid-ascii/ascii/shapes/rounded.js +22 -0
  157. package/dist/vendor/mermaid-ascii/ascii/shapes/special.d.ts +60 -0
  158. package/dist/vendor/mermaid-ascii/ascii/shapes/special.d.ts.map +1 -0
  159. package/dist/vendor/mermaid-ascii/ascii/shapes/special.js +253 -0
  160. package/dist/vendor/mermaid-ascii/ascii/shapes/stadium.d.ts +18 -0
  161. package/dist/vendor/mermaid-ascii/ascii/shapes/stadium.d.ts.map +1 -0
  162. package/dist/vendor/mermaid-ascii/ascii/shapes/stadium.js +103 -0
  163. package/dist/vendor/mermaid-ascii/ascii/shapes/state.d.ts +31 -0
  164. package/dist/vendor/mermaid-ascii/ascii/shapes/state.d.ts.map +1 -0
  165. package/dist/vendor/mermaid-ascii/ascii/shapes/state.js +167 -0
  166. package/dist/vendor/mermaid-ascii/ascii/shapes/types.d.ts +56 -0
  167. package/dist/vendor/mermaid-ascii/ascii/shapes/types.d.ts.map +1 -0
  168. package/dist/vendor/mermaid-ascii/ascii/shapes/types.js +4 -0
  169. package/dist/vendor/mermaid-ascii/ascii/types.d.ts +207 -0
  170. package/dist/vendor/mermaid-ascii/ascii/types.d.ts.map +1 -0
  171. package/dist/vendor/mermaid-ascii/ascii/types.js +39 -0
  172. package/dist/vendor/mermaid-ascii/ascii/validate.d.ts +52 -0
  173. package/dist/vendor/mermaid-ascii/ascii/validate.d.ts.map +1 -0
  174. package/dist/vendor/mermaid-ascii/ascii/validate.js +97 -0
  175. package/dist/vendor/mermaid-ascii/ascii/xychart.d.ts +3 -0
  176. package/dist/vendor/mermaid-ascii/ascii/xychart.d.ts.map +1 -0
  177. package/dist/vendor/mermaid-ascii/ascii/xychart.js +719 -0
  178. package/dist/vendor/mermaid-ascii/class/parser.d.ts +7 -0
  179. package/dist/vendor/mermaid-ascii/class/parser.d.ts.map +1 -0
  180. package/dist/vendor/mermaid-ascii/class/parser.js +265 -0
  181. package/dist/vendor/mermaid-ascii/class/types.d.ts +103 -0
  182. package/dist/vendor/mermaid-ascii/class/types.d.ts.map +1 -0
  183. package/dist/vendor/mermaid-ascii/class/types.js +7 -0
  184. package/dist/vendor/mermaid-ascii/er/parser.d.ts +7 -0
  185. package/dist/vendor/mermaid-ascii/er/parser.d.ts.map +1 -0
  186. package/dist/vendor/mermaid-ascii/er/parser.js +162 -0
  187. package/dist/vendor/mermaid-ascii/er/types.d.ts +77 -0
  188. package/dist/vendor/mermaid-ascii/er/types.d.ts.map +1 -0
  189. package/dist/vendor/mermaid-ascii/er/types.js +7 -0
  190. package/dist/vendor/mermaid-ascii/index.d.ts +2 -0
  191. package/dist/vendor/mermaid-ascii/index.d.ts.map +1 -0
  192. package/dist/vendor/mermaid-ascii/index.js +13 -0
  193. package/dist/vendor/mermaid-ascii/multiline-utils.d.ts +10 -0
  194. package/dist/vendor/mermaid-ascii/multiline-utils.d.ts.map +1 -0
  195. package/dist/vendor/mermaid-ascii/multiline-utils.js +29 -0
  196. package/dist/vendor/mermaid-ascii/parser.d.ts +8 -0
  197. package/dist/vendor/mermaid-ascii/parser.d.ts.map +1 -0
  198. package/dist/vendor/mermaid-ascii/parser.js +558 -0
  199. package/dist/vendor/mermaid-ascii/sequence/parser.d.ts +7 -0
  200. package/dist/vendor/mermaid-ascii/sequence/parser.d.ts.map +1 -0
  201. package/dist/vendor/mermaid-ascii/sequence/parser.js +182 -0
  202. package/dist/vendor/mermaid-ascii/sequence/types.d.ts +131 -0
  203. package/dist/vendor/mermaid-ascii/sequence/types.d.ts.map +1 -0
  204. package/dist/vendor/mermaid-ascii/sequence/types.js +7 -0
  205. package/dist/vendor/mermaid-ascii/text-metrics.d.ts +24 -0
  206. package/dist/vendor/mermaid-ascii/text-metrics.d.ts.map +1 -0
  207. package/dist/vendor/mermaid-ascii/text-metrics.js +69 -0
  208. package/dist/vendor/mermaid-ascii/types.d.ts +115 -0
  209. package/dist/vendor/mermaid-ascii/types.d.ts.map +1 -0
  210. package/dist/vendor/mermaid-ascii/types.js +4 -0
  211. package/dist/vendor/mermaid-ascii/xychart/colors.d.ts +26 -0
  212. package/dist/vendor/mermaid-ascii/xychart/colors.d.ts.map +1 -0
  213. package/dist/vendor/mermaid-ascii/xychart/colors.js +145 -0
  214. package/dist/vendor/mermaid-ascii/xychart/parser.d.ts +7 -0
  215. package/dist/vendor/mermaid-ascii/xychart/parser.d.ts.map +1 -0
  216. package/dist/vendor/mermaid-ascii/xychart/parser.js +105 -0
  217. package/dist/vendor/mermaid-ascii/xychart/types.d.ts +146 -0
  218. package/dist/vendor/mermaid-ascii/xychart/types.d.ts.map +1 -0
  219. package/dist/vendor/mermaid-ascii/xychart/types.js +8 -0
  220. package/dist/virtual-terminal.d.ts +80 -0
  221. package/dist/virtual-terminal.d.ts.map +1 -0
  222. package/dist/virtual-terminal.js +284 -0
  223. package/dist/word-navigation.d.ts +25 -0
  224. package/dist/word-navigation.d.ts.map +1 -0
  225. package/dist/word-navigation.js +97 -0
  226. package/package.json +38 -0
@@ -0,0 +1,145 @@
1
+ // ============================================================================
2
+ // XY Chart — shared color palette
3
+ //
4
+ // Generates monochromatic shades from the theme accent color.
5
+ // Series 0 = accent (or blue fallback). Series 1+ are darker/lighter
6
+ // shades of the same hue with subtle hue drift to stay in the same
7
+ // color family (like navy ↔ cyan from blue).
8
+ //
9
+ // Used by both the SVG and ASCII renderers.
10
+ // ============================================================================
11
+ /** Default accent for charts when the theme doesn't provide one. */
12
+ export const CHART_ACCENT_FALLBACK = '#3b82f6'; // blue-500
13
+ // ---------------------------------------------------------------------------
14
+ // HSL ↔ Hex conversion
15
+ // ---------------------------------------------------------------------------
16
+ function hexToHsl(hex) {
17
+ const h = hex.replace('#', '');
18
+ const ri = parseInt(h.substring(0, 2), 16) / 255;
19
+ const gi = parseInt(h.substring(2, 4), 16) / 255;
20
+ const bi = parseInt(h.substring(4, 6), 16) / 255;
21
+ const max = Math.max(ri, gi, bi);
22
+ const min = Math.min(ri, gi, bi);
23
+ const l = (max + min) / 2;
24
+ if (max === min)
25
+ return [0, 0, l * 100];
26
+ const d = max - min;
27
+ const s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
28
+ let hue;
29
+ if (max === ri)
30
+ hue = ((gi - bi) / d + (gi < bi ? 6 : 0)) / 6;
31
+ else if (max === gi)
32
+ hue = ((bi - ri) / d + 2) / 6;
33
+ else
34
+ hue = ((ri - gi) / d + 4) / 6;
35
+ return [hue * 360, s * 100, l * 100];
36
+ }
37
+ function hslToHex(h, s, l) {
38
+ const si = s / 100;
39
+ const li = l / 100;
40
+ const c = (1 - Math.abs(2 * li - 1)) * si;
41
+ const x = c * (1 - Math.abs(((h / 60) % 2) - 1));
42
+ const m = li - c / 2;
43
+ let r, g, b;
44
+ if (h < 60) {
45
+ r = c;
46
+ g = x;
47
+ b = 0;
48
+ }
49
+ else if (h < 120) {
50
+ r = x;
51
+ g = c;
52
+ b = 0;
53
+ }
54
+ else if (h < 180) {
55
+ r = 0;
56
+ g = c;
57
+ b = x;
58
+ }
59
+ else if (h < 240) {
60
+ r = 0;
61
+ g = x;
62
+ b = c;
63
+ }
64
+ else if (h < 300) {
65
+ r = x;
66
+ g = 0;
67
+ b = c;
68
+ }
69
+ else {
70
+ r = c;
71
+ g = 0;
72
+ b = x;
73
+ }
74
+ const toHex = (v) => Math.round((v + m) * 255).toString(16).padStart(2, '0');
75
+ return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
76
+ }
77
+ // ---------------------------------------------------------------------------
78
+ // Hex ↔ RGB conversion
79
+ // ---------------------------------------------------------------------------
80
+ function hexToRgb(hex) {
81
+ const h = hex.replace('#', '');
82
+ return [
83
+ parseInt(h.substring(0, 2), 16),
84
+ parseInt(h.substring(2, 4), 16),
85
+ parseInt(h.substring(4, 6), 16),
86
+ ];
87
+ }
88
+ function rgbToHex(r, g, b) {
89
+ const toHex = (v) => Math.round(Math.max(0, Math.min(255, v))).toString(16).padStart(2, '0');
90
+ return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
91
+ }
92
+ // ---------------------------------------------------------------------------
93
+ // Public API
94
+ // ---------------------------------------------------------------------------
95
+ /** Check whether a string is a valid 6-digit hex color (e.g. "#3b82f6"). */
96
+ export function isValidHex(color) {
97
+ return /^#[0-9a-fA-F]{6}$/.test(color);
98
+ }
99
+ /**
100
+ * Detect whether a background color is dark (lightness < 50%).
101
+ */
102
+ export function isDarkBackground(bgHex) {
103
+ return hexToHsl(bgHex)[2] < 50;
104
+ }
105
+ /**
106
+ * Mix two hex colors in RGB space.
107
+ * `ratio` controls how much of `fgHex` shows: 0 = pure bg, 1 = pure fg.
108
+ * Equivalent to alpha-compositing fg over bg at the given opacity.
109
+ */
110
+ export function mixHexColors(bgHex, fgHex, ratio) {
111
+ const [br, bg, bb] = hexToRgb(bgHex);
112
+ const [fr, fg, fb] = hexToRgb(fgHex);
113
+ const inv = 1 - ratio;
114
+ return rgbToHex(br * inv + fr * ratio, bg * inv + fg * ratio, bb * inv + fb * ratio);
115
+ }
116
+ /**
117
+ * Get the hex color for a series index.
118
+ * Index 0 returns the accent color as-is.
119
+ * Index 1+ alternate between darker and lighter shades of the same hue
120
+ * with subtle hue drift (±8-12° per tier) to stay in the same family.
121
+ *
122
+ * When `bgColor` is provided, shade direction adapts to the background:
123
+ * - Light bg: odd = darker, even = lighter (default)
124
+ * - Dark bg: odd = lighter, even = darker (so shades stay visible)
125
+ */
126
+ export function getSeriesColor(index, accentColor, bgColor) {
127
+ if (index === 0)
128
+ return accentColor;
129
+ // Fall back to defaults when inputs aren't valid hex (e.g. CSS variable refs like "var(--accent)")
130
+ const safeAccent = isValidHex(accentColor) ? accentColor : CHART_ACCENT_FALLBACK;
131
+ const safeBg = bgColor && isValidHex(bgColor) ? bgColor : undefined;
132
+ const [h, s] = hexToHsl(safeAccent);
133
+ const chartS = Math.max(55, Math.min(85, s));
134
+ const tier = Math.ceil(index / 2);
135
+ const oddIndex = index % 2 === 1;
136
+ // On dark backgrounds, flip: odd = lighter, even = darker
137
+ const dark = safeBg && isDarkBackground(safeBg) ? !oddIndex : oddIndex;
138
+ const l = dark
139
+ ? Math.max(25, 48 - tier * 13)
140
+ : Math.min(78, 55 + tier * 11);
141
+ // Subtle hue drift: darker shades shift slightly negative, lighter shift positive
142
+ const hShift = (dark ? -8 : 12) * tier;
143
+ const newH = ((h + hShift) % 360 + 360) % 360;
144
+ return hslToHex(newH, chartS, l);
145
+ }
@@ -0,0 +1,7 @@
1
+ import type { XYChart } from './types.ts';
2
+ /**
3
+ * Parse a Mermaid xychart-beta diagram from preprocessed lines.
4
+ * Lines should already be trimmed and comment-stripped.
5
+ */
6
+ export declare function parseXYChart(lines: string[]): XYChart;
7
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../src/vendor/mermaid-ascii/xychart/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAyB,MAAM,YAAY,CAAA;AAmBhE;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAuFrD"}
@@ -0,0 +1,105 @@
1
+ // ============================================================================
2
+ // XY Chart parser
3
+ //
4
+ // Parses Mermaid xychart-beta syntax into a typed XYChart structure.
5
+ //
6
+ // Supported directives:
7
+ // xychart-beta [horizontal]
8
+ // title "Chart Title"
9
+ // x-axis [label1, label2, ...] — categorical
10
+ // x-axis min --> max — numeric range
11
+ // x-axis "Axis Title" [label1, ...] — with title
12
+ // x-axis "Axis Title" min --> max — with title
13
+ // y-axis (same patterns)
14
+ // bar [val1, val2, ...]
15
+ // line [val1, val2, ...]
16
+ // ============================================================================
17
+ /**
18
+ * Parse a Mermaid xychart-beta diagram from preprocessed lines.
19
+ * Lines should already be trimmed and comment-stripped.
20
+ */
21
+ export function parseXYChart(lines) {
22
+ const xAxis = {};
23
+ const yAxis = {};
24
+ const series = [];
25
+ let title;
26
+ let horizontal = false;
27
+ for (const line of lines) {
28
+ // Header line — detect horizontal
29
+ if (/^xychart(-beta)?\b/i.test(line)) {
30
+ if (/\bhorizontal\b/i.test(line))
31
+ horizontal = true;
32
+ continue;
33
+ }
34
+ // Title
35
+ const titleMatch = line.match(/^title\s+"([^"]+)"/);
36
+ if (titleMatch) {
37
+ title = titleMatch[1];
38
+ continue;
39
+ }
40
+ // x-axis with categories: x-axis "Title" [a, b, c] or x-axis [a, b, c]
41
+ const xCatMatch = line.match(/^x-axis\s+(?:"([^"]*)"\s*)?\[([^\]]+)\]/);
42
+ if (xCatMatch) {
43
+ if (xCatMatch[1])
44
+ xAxis.title = xCatMatch[1];
45
+ xAxis.categories = xCatMatch[2].split(',').map(s => s.trim());
46
+ continue;
47
+ }
48
+ // x-axis with range: x-axis "Title" min --> max or x-axis min --> max
49
+ const xRangeMatch = line.match(/^x-axis\s+(?:"([^"]*)"\s+)?(-?\d+(?:\.\d+)?)\s*-->\s*(-?\d+(?:\.\d+)?)/);
50
+ if (xRangeMatch) {
51
+ if (xRangeMatch[1])
52
+ xAxis.title = xRangeMatch[1];
53
+ xAxis.range = { min: parseFloat(xRangeMatch[2]), max: parseFloat(xRangeMatch[3]) };
54
+ continue;
55
+ }
56
+ // y-axis with range: y-axis "Title" min --> max or y-axis min --> max
57
+ const yRangeMatch = line.match(/^y-axis\s+(?:"([^"]*)"\s+)?(-?\d+(?:\.\d+)?)\s*-->\s*(-?\d+(?:\.\d+)?)/);
58
+ if (yRangeMatch) {
59
+ if (yRangeMatch[1])
60
+ yAxis.title = yRangeMatch[1];
61
+ yAxis.range = { min: parseFloat(yRangeMatch[2]), max: parseFloat(yRangeMatch[3]) };
62
+ continue;
63
+ }
64
+ // y-axis with just title (no range)
65
+ const yTitleOnly = line.match(/^y-axis\s+"([^"]+)"\s*$/);
66
+ if (yTitleOnly) {
67
+ yAxis.title = yTitleOnly[1];
68
+ continue;
69
+ }
70
+ // bar [...]
71
+ const barMatch = line.match(/^bar\s+\[([^\]]+)\]/);
72
+ if (barMatch) {
73
+ series.push({ type: 'bar', data: parseNumericArray(barMatch[1]) });
74
+ continue;
75
+ }
76
+ // line [...]
77
+ const lineMatch = line.match(/^line\s+\[([^\]]+)\]/);
78
+ if (lineMatch) {
79
+ series.push({ type: 'line', data: parseNumericArray(lineMatch[1]) });
80
+ continue;
81
+ }
82
+ }
83
+ // Auto-derive y-axis range from data if not specified
84
+ if (!yAxis.range && series.length > 0) {
85
+ const allValues = series.flatMap(s => s.data);
86
+ let min = Math.min(...allValues);
87
+ let max = Math.max(...allValues);
88
+ const span = max - min || 1;
89
+ // Add 10% padding
90
+ min = min - span * 0.1;
91
+ max = max + span * 0.1;
92
+ // Floor to 0 if all values are positive and min is close to 0
93
+ if (min > 0 && min < span * 0.5)
94
+ min = 0;
95
+ yAxis.range = { min, max };
96
+ }
97
+ // Fallback y-axis range
98
+ if (!yAxis.range) {
99
+ yAxis.range = { min: 0, max: 100 };
100
+ }
101
+ return { title, horizontal, xAxis, yAxis, series };
102
+ }
103
+ function parseNumericArray(str) {
104
+ return str.split(',').map(s => parseFloat(s.trim()));
105
+ }
@@ -0,0 +1,146 @@
1
+ /** Parsed XY chart — logical structure from mermaid text */
2
+ export interface XYChart {
3
+ /** Optional chart title */
4
+ title?: string;
5
+ /** Chart orientation: vertical (default) or horizontal */
6
+ horizontal: boolean;
7
+ /** X-axis configuration */
8
+ xAxis: XYAxis;
9
+ /** Y-axis configuration */
10
+ yAxis: XYAxis;
11
+ /** Data series (bar and/or line) */
12
+ series: XYChartSeries[];
13
+ }
14
+ /** Axis configuration — categorical (labels) or numeric (range) */
15
+ export interface XYAxis {
16
+ /** Optional axis title/label */
17
+ title?: string;
18
+ /** Categorical labels (e.g., ["jan", "feb", "mar"]) — mutually exclusive with range */
19
+ categories?: string[];
20
+ /** Numeric range — mutually exclusive with categories */
21
+ range?: {
22
+ min: number;
23
+ max: number;
24
+ };
25
+ }
26
+ /** A single data series (bar or line) */
27
+ export interface XYChartSeries {
28
+ /** Series type */
29
+ type: 'bar' | 'line';
30
+ /** Data values — one per category, or evenly spaced across numeric range */
31
+ data: number[];
32
+ }
33
+ export interface PositionedXYChart {
34
+ width: number;
35
+ height: number;
36
+ /** Whether this is a horizontal (rotated) chart */
37
+ horizontal?: boolean;
38
+ /** Title text and position (if present) */
39
+ title?: PositionedTitle;
40
+ /** Positioned x-axis with tick marks and labels */
41
+ xAxis: PositionedAxis;
42
+ /** Positioned y-axis with tick marks and labels */
43
+ yAxis: PositionedAxis;
44
+ /** The plot area bounds (inside axes) */
45
+ plotArea: PlotArea;
46
+ /** Positioned bar groups */
47
+ bars: PositionedBar[];
48
+ /** Positioned line polylines */
49
+ lines: PositionedLine[];
50
+ /** Horizontal grid lines for readability */
51
+ gridLines: GridLine[];
52
+ /** Legend items (shown when multiple series) */
53
+ legend: LegendItem[];
54
+ }
55
+ export interface LegendItem {
56
+ /** Display label */
57
+ label: string;
58
+ /** Position of the swatch/icon */
59
+ x: number;
60
+ y: number;
61
+ /** Series type determines swatch shape (rect for bar, line+dot for line) */
62
+ type: 'bar' | 'line';
63
+ /** Series index within its type (for layout grouping) */
64
+ seriesIndex: number;
65
+ /** Global color index across all series (for unified color assignment) */
66
+ colorIndex: number;
67
+ }
68
+ export interface PositionedTitle {
69
+ text: string;
70
+ x: number;
71
+ y: number;
72
+ }
73
+ export interface PositionedAxis {
74
+ /** Optional axis title text and position */
75
+ title?: {
76
+ text: string;
77
+ x: number;
78
+ y: number;
79
+ rotate?: number;
80
+ };
81
+ /** Tick positions along the axis */
82
+ ticks: AxisTick[];
83
+ /** Axis line: start and end coordinates */
84
+ line: {
85
+ x1: number;
86
+ y1: number;
87
+ x2: number;
88
+ y2: number;
89
+ };
90
+ }
91
+ export interface AxisTick {
92
+ /** Label text for this tick */
93
+ label: string;
94
+ /** Position of the tick mark on the axis */
95
+ x: number;
96
+ y: number;
97
+ /** End of the tick mark (short perpendicular line) */
98
+ tx: number;
99
+ ty: number;
100
+ /** Label anchor position */
101
+ labelX: number;
102
+ labelY: number;
103
+ /** Text anchor for label */
104
+ textAnchor: 'start' | 'middle' | 'end';
105
+ }
106
+ export interface PlotArea {
107
+ x: number;
108
+ y: number;
109
+ width: number;
110
+ height: number;
111
+ }
112
+ export interface PositionedBar {
113
+ /** Bar rectangle in SVG coordinates */
114
+ x: number;
115
+ y: number;
116
+ width: number;
117
+ height: number;
118
+ /** Original data value */
119
+ value: number;
120
+ /** Category label for this bar (e.g. "Jan") */
121
+ label?: string;
122
+ /** Series index within bar type (for layout grouping) */
123
+ seriesIndex: number;
124
+ /** Global color index across all series */
125
+ colorIndex: number;
126
+ }
127
+ export interface PositionedLine {
128
+ /** Polyline points */
129
+ points: Array<{
130
+ x: number;
131
+ y: number;
132
+ value: number;
133
+ label?: string;
134
+ }>;
135
+ /** Series index within line type (for layout grouping) */
136
+ seriesIndex: number;
137
+ /** Global color index across all series */
138
+ colorIndex: number;
139
+ }
140
+ export interface GridLine {
141
+ x1: number;
142
+ y1: number;
143
+ x2: number;
144
+ y2: number;
145
+ }
146
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/vendor/mermaid-ascii/xychart/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ // ============================================================================
2
+ // XY Chart types
3
+ //
4
+ // Models the parsed and positioned representations of a Mermaid xychart-beta
5
+ // diagram. Supports bar charts, line charts, and combinations with categorical
6
+ // or numeric x-axes.
7
+ // ============================================================================
8
+ export {};
@@ -0,0 +1,80 @@
1
+ import type { IBufferLine } from "@xterm/headless";
2
+ import type { Terminal } from "./terminal.ts";
3
+ /**
4
+ * Virtual terminal for testing using xterm.js for accurate terminal emulation
5
+ */
6
+ export declare class VirtualTerminal implements Terminal {
7
+ private xterm;
8
+ private inputHandler?;
9
+ private resizeHandler?;
10
+ private _columns;
11
+ private _rows;
12
+ constructor(columns?: number, rows?: number);
13
+ start(onInput: (data: string) => void, onResize: () => void): void;
14
+ drainInput(_maxMs?: number, _idleMs?: number): Promise<void>;
15
+ stop(): void;
16
+ write(data: string): void;
17
+ get columns(): number;
18
+ get rows(): number;
19
+ get kittyProtocolActive(): boolean;
20
+ moveBy(lines: number): void;
21
+ hideCursor(): void;
22
+ showCursor(): void;
23
+ clearLine(): void;
24
+ clearFromCursor(): void;
25
+ clearScreen(): void;
26
+ setTitle(title: string): void;
27
+ setProgress(_active: boolean): void;
28
+ /**
29
+ * Simulate keyboard input
30
+ */
31
+ sendInput(data: string): void;
32
+ /**
33
+ * Resize the terminal
34
+ */
35
+ resize(columns: number, rows: number): void;
36
+ /**
37
+ * Wait for all pending writes to complete. Viewport and scroll buffer will be updated.
38
+ */
39
+ flush(): Promise<void>;
40
+ /**
41
+ * Flush and get viewport - convenience method for tests
42
+ */
43
+ flushAndGetViewport(): Promise<string[]>;
44
+ /**
45
+ * Get the visible viewport (what's currently on screen)
46
+ * Note: You should use getViewportAfterWrite() for testing after writing data
47
+ */
48
+ getViewport(): string[];
49
+ /**
50
+ * Get the entire scroll buffer
51
+ */
52
+ /**
53
+ * Like getViewport() but re-emits per-cell SGR styling (fg/bg/bold/dim/…)
54
+ * so snapshot tooling can see colors and backgrounds, not just text.
55
+ */
56
+ getViewportAnsi(): string[];
57
+ /** Scrollback + viewport with per-cell SGR re-emitted. */
58
+ getScrollBufferAnsi(): string[];
59
+ getScrollBuffer(): string[];
60
+ /**
61
+ * Clear the terminal viewport
62
+ */
63
+ clear(): void;
64
+ /**
65
+ * Reset the terminal completely
66
+ */
67
+ reset(): void;
68
+ /**
69
+ * Get cursor position
70
+ */
71
+ getCursorPosition(): {
72
+ x: number;
73
+ y: number;
74
+ };
75
+ /** Wait for TUI's throttled render pipeline to settle. */
76
+ waitForRender(): Promise<void>;
77
+ }
78
+ /** One buffer row with SGR codes re-emitted between attribute runs. */
79
+ export declare function lineToAnsi(line: IBufferLine): string;
80
+ //# sourceMappingURL=virtual-terminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-terminal.d.ts","sourceRoot":"","sources":["../src/virtual-terminal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,WAAW,EAAiC,MAAM,iBAAiB,CAAC;AAE/F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAK9C;;GAEG;AACH,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,YAAY,CAAC,CAAyB;IAC9C,OAAO,CAAC,aAAa,CAAC,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,SAAK,EAAE,IAAI,SAAK;IAcnC,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAO5D,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlE,IAAI,IAAI,IAAI;IAOZ,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIzB,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,mBAAmB,IAAI,OAAO,CAGjC;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAW3B,UAAU,IAAI,IAAI;IAIlB,UAAU,IAAI,IAAI;IAIlB,SAAS,IAAI,IAAI;IAIjB,eAAe,IAAI,IAAI;IAIvB,WAAW,IAAI,IAAI;IAInB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAInC;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM7B;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAS3C;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAK9C;;;OAGG;IACH,WAAW,IAAI,MAAM,EAAE;IAiBvB;;OAEG;IACH;;;OAGG;IACH,eAAe,IAAI,MAAM,EAAE;IAa3B,0DAA0D;IAC1D,mBAAmB,IAAI,MAAM,EAAE;IAU/B,eAAe,IAAI,MAAM,EAAE;IAiB3B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,iBAAiB,IAAI;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAQ7C,0DAA0D;IACpD,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;CAKrC;AAoCD,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAyBpD"}