@effect-tui/core 0.1.1 → 0.1.5

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 (271) hide show
  1. package/README.md +31 -11
  2. package/dist/ansi.d.ts +127 -32
  3. package/dist/ansi.d.ts.map +1 -1
  4. package/dist/ansi.js +159 -37
  5. package/dist/ansi.js.map +1 -1
  6. package/dist/colors.d.ts +139 -0
  7. package/dist/colors.d.ts.map +1 -0
  8. package/dist/colors.js +339 -0
  9. package/dist/colors.js.map +1 -0
  10. package/dist/index.d.ts +6 -10
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +13 -11
  13. package/dist/index.js.map +1 -1
  14. package/dist/keys.d.ts +21 -0
  15. package/dist/keys.d.ts.map +1 -1
  16. package/dist/keys.js +199 -58
  17. package/dist/keys.js.map +1 -1
  18. package/dist/layout/axis-helpers.d.ts +19 -0
  19. package/dist/layout/axis-helpers.d.ts.map +1 -0
  20. package/dist/layout/axis-helpers.js +19 -0
  21. package/dist/layout/axis-helpers.js.map +1 -0
  22. package/dist/output.d.ts +59 -0
  23. package/dist/output.d.ts.map +1 -0
  24. package/dist/output.js +142 -0
  25. package/dist/output.js.map +1 -0
  26. package/dist/render/buffer.d.ts.map +1 -1
  27. package/dist/render/buffer.js +6 -25
  28. package/dist/render/buffer.js.map +1 -1
  29. package/dist/render/graphemes.d.ts +15 -0
  30. package/dist/render/graphemes.d.ts.map +1 -0
  31. package/dist/render/graphemes.js +28 -0
  32. package/dist/render/graphemes.js.map +1 -0
  33. package/dist/render/measure.d.ts +1 -0
  34. package/dist/render/measure.d.ts.map +1 -1
  35. package/dist/render/measure.js +14 -36
  36. package/dist/render/measure.js.map +1 -1
  37. package/dist/render/palette.d.ts.map +1 -1
  38. package/dist/render/palette.js +26 -1
  39. package/dist/render/palette.js.map +1 -1
  40. package/dist/render/segmenter.d.ts +8 -0
  41. package/dist/render/segmenter.d.ts.map +1 -0
  42. package/dist/render/segmenter.js +23 -0
  43. package/dist/render/segmenter.js.map +1 -0
  44. package/dist/render/surface.d.ts +6 -32
  45. package/dist/render/surface.d.ts.map +1 -1
  46. package/dist/render/surface.js +11 -80
  47. package/dist/render/surface.js.map +1 -1
  48. package/dist/runtime/backend_node.d.ts.map +1 -1
  49. package/dist/runtime/backend_node.js.map +1 -1
  50. package/dist/tailwind-colors.d.ts +291 -0
  51. package/dist/tailwind-colors.d.ts.map +1 -0
  52. package/dist/tailwind-colors.js +291 -0
  53. package/dist/tailwind-colors.js.map +1 -0
  54. package/dist/types.d.ts +15 -0
  55. package/dist/types.d.ts.map +1 -0
  56. package/dist/types.js +3 -0
  57. package/dist/types.js.map +1 -0
  58. package/package.json +55 -55
  59. package/src/ansi.ts +201 -73
  60. package/src/colors.ts +468 -0
  61. package/src/index.ts +28 -14
  62. package/src/keys.ts +467 -287
  63. package/src/layout/axis-helpers.ts +33 -0
  64. package/src/output.ts +175 -0
  65. package/src/render/buffer.ts +161 -184
  66. package/src/render/graphemes.ts +34 -0
  67. package/src/render/measure.ts +15 -38
  68. package/src/render/palette.ts +98 -77
  69. package/src/render/segmenter.ts +27 -0
  70. package/src/render/surface.ts +139 -225
  71. package/src/runtime/backend_node.ts +71 -71
  72. package/src/tailwind-colors.ts +295 -0
  73. package/src/types.ts +18 -0
  74. package/dist/anim.d.ts +0 -4
  75. package/dist/anim.d.ts.map +0 -1
  76. package/dist/anim.js +0 -5
  77. package/dist/anim.js.map +0 -1
  78. package/dist/layout/linearStack.d.ts +0 -17
  79. package/dist/layout/linearStack.d.ts.map +0 -1
  80. package/dist/layout/linearStack.js +0 -86
  81. package/dist/layout/linearStack.js.map +0 -1
  82. package/dist/motion-value.d.ts +0 -58
  83. package/dist/motion-value.d.ts.map +0 -1
  84. package/dist/motion-value.js +0 -250
  85. package/dist/motion-value.js.map +0 -1
  86. package/dist/present/display.d.ts +0 -58
  87. package/dist/present/display.d.ts.map +0 -1
  88. package/dist/present/display.js +0 -168
  89. package/dist/present/display.js.map +0 -1
  90. package/dist/present/writers/fullscreen.d.ts +0 -19
  91. package/dist/present/writers/fullscreen.d.ts.map +0 -1
  92. package/dist/present/writers/fullscreen.js +0 -55
  93. package/dist/present/writers/fullscreen.js.map +0 -1
  94. package/dist/present/writers/inline.d.ts +0 -20
  95. package/dist/present/writers/inline.d.ts.map +0 -1
  96. package/dist/present/writers/inline.js +0 -92
  97. package/dist/present/writers/inline.js.map +0 -1
  98. package/dist/render/color-utils.d.ts +0 -18
  99. package/dist/render/color-utils.d.ts.map +0 -1
  100. package/dist/render/color-utils.js +0 -58
  101. package/dist/render/color-utils.js.map +0 -1
  102. package/dist/render/diff.d.ts +0 -30
  103. package/dist/render/diff.d.ts.map +0 -1
  104. package/dist/render/diff.js +0 -83
  105. package/dist/render/diff.js.map +0 -1
  106. package/dist/spring-physics.d.ts +0 -36
  107. package/dist/spring-physics.d.ts.map +0 -1
  108. package/dist/spring-physics.js +0 -113
  109. package/dist/spring-physics.js.map +0 -1
  110. package/dist/spring.d.ts +0 -73
  111. package/dist/spring.d.ts.map +0 -1
  112. package/dist/spring.js +0 -136
  113. package/dist/spring.js.map +0 -1
  114. package/dist/ui/containers/canvas.d.ts +0 -13
  115. package/dist/ui/containers/canvas.d.ts.map +0 -1
  116. package/dist/ui/containers/canvas.js +0 -16
  117. package/dist/ui/containers/canvas.js.map +0 -1
  118. package/dist/ui/containers/geometry-reader.d.ts +0 -17
  119. package/dist/ui/containers/geometry-reader.d.ts.map +0 -1
  120. package/dist/ui/containers/geometry-reader.js +0 -24
  121. package/dist/ui/containers/geometry-reader.js.map +0 -1
  122. package/dist/ui/containers/hstack.d.ts +0 -12
  123. package/dist/ui/containers/hstack.d.ts.map +0 -1
  124. package/dist/ui/containers/hstack.js +0 -28
  125. package/dist/ui/containers/hstack.js.map +0 -1
  126. package/dist/ui/containers/scroll.d.ts +0 -28
  127. package/dist/ui/containers/scroll.d.ts.map +0 -1
  128. package/dist/ui/containers/scroll.js +0 -97
  129. package/dist/ui/containers/scroll.js.map +0 -1
  130. package/dist/ui/containers/shared.d.ts +0 -12
  131. package/dist/ui/containers/shared.d.ts.map +0 -1
  132. package/dist/ui/containers/shared.js +0 -19
  133. package/dist/ui/containers/shared.js.map +0 -1
  134. package/dist/ui/containers/vstack.d.ts +0 -12
  135. package/dist/ui/containers/vstack.d.ts.map +0 -1
  136. package/dist/ui/containers/vstack.js +0 -28
  137. package/dist/ui/containers/vstack.js.map +0 -1
  138. package/dist/ui/containers/zstack.d.ts +0 -14
  139. package/dist/ui/containers/zstack.d.ts.map +0 -1
  140. package/dist/ui/containers/zstack.js +0 -36
  141. package/dist/ui/containers/zstack.js.map +0 -1
  142. package/dist/ui/core/geometry-store.d.ts +0 -22
  143. package/dist/ui/core/geometry-store.d.ts.map +0 -1
  144. package/dist/ui/core/geometry-store.js +0 -29
  145. package/dist/ui/core/geometry-store.js.map +0 -1
  146. package/dist/ui/core/geometry.d.ts +0 -34
  147. package/dist/ui/core/geometry.d.ts.map +0 -1
  148. package/dist/ui/core/geometry.js +0 -14
  149. package/dist/ui/core/geometry.js.map +0 -1
  150. package/dist/ui/core/view.d.ts +0 -25
  151. package/dist/ui/core/view.d.ts.map +0 -1
  152. package/dist/ui/core/view.js +0 -34
  153. package/dist/ui/core/view.js.map +0 -1
  154. package/dist/ui/index.d.ts +0 -44
  155. package/dist/ui/index.d.ts.map +0 -1
  156. package/dist/ui/index.js +0 -39
  157. package/dist/ui/index.js.map +0 -1
  158. package/dist/ui/inlinetext.d.ts +0 -24
  159. package/dist/ui/inlinetext.d.ts.map +0 -1
  160. package/dist/ui/inlinetext.js +0 -131
  161. package/dist/ui/inlinetext.js.map +0 -1
  162. package/dist/ui/install.d.ts +0 -22
  163. package/dist/ui/install.d.ts.map +0 -1
  164. package/dist/ui/install.js +0 -66
  165. package/dist/ui/install.js.map +0 -1
  166. package/dist/ui/markdown.d.ts +0 -40
  167. package/dist/ui/markdown.d.ts.map +0 -1
  168. package/dist/ui/markdown.js +0 -351
  169. package/dist/ui/markdown.js.map +0 -1
  170. package/dist/ui/modifiers/border.d.ts +0 -33
  171. package/dist/ui/modifiers/border.d.ts.map +0 -1
  172. package/dist/ui/modifiers/border.js +0 -82
  173. package/dist/ui/modifiers/border.js.map +0 -1
  174. package/dist/ui/modifiers/fill.d.ts +0 -14
  175. package/dist/ui/modifiers/fill.d.ts.map +0 -1
  176. package/dist/ui/modifiers/fill.js +0 -25
  177. package/dist/ui/modifiers/fill.js.map +0 -1
  178. package/dist/ui/modifiers/frame.d.ts +0 -23
  179. package/dist/ui/modifiers/frame.d.ts.map +0 -1
  180. package/dist/ui/modifiers/frame.js +0 -54
  181. package/dist/ui/modifiers/frame.js.map +0 -1
  182. package/dist/ui/modifiers/offset.d.ts +0 -15
  183. package/dist/ui/modifiers/offset.d.ts.map +0 -1
  184. package/dist/ui/modifiers/offset.js +0 -21
  185. package/dist/ui/modifiers/offset.js.map +0 -1
  186. package/dist/ui/modifiers/opacity.d.ts +0 -15
  187. package/dist/ui/modifiers/opacity.d.ts.map +0 -1
  188. package/dist/ui/modifiers/opacity.js +0 -95
  189. package/dist/ui/modifiers/opacity.js.map +0 -1
  190. package/dist/ui/modifiers/padding.d.ts +0 -20
  191. package/dist/ui/modifiers/padding.d.ts.map +0 -1
  192. package/dist/ui/modifiers/padding.js +0 -36
  193. package/dist/ui/modifiers/padding.js.map +0 -1
  194. package/dist/ui/modifiers/styled.d.ts +0 -14
  195. package/dist/ui/modifiers/styled.d.ts.map +0 -1
  196. package/dist/ui/modifiers/styled.js +0 -26
  197. package/dist/ui/modifiers/styled.js.map +0 -1
  198. package/dist/ui/primitives/rectangle.d.ts +0 -15
  199. package/dist/ui/primitives/rectangle.d.ts.map +0 -1
  200. package/dist/ui/primitives/rectangle.js +0 -23
  201. package/dist/ui/primitives/rectangle.js.map +0 -1
  202. package/dist/ui/primitives/spacer.d.ts +0 -13
  203. package/dist/ui/primitives/spacer.d.ts.map +0 -1
  204. package/dist/ui/primitives/spacer.js +0 -16
  205. package/dist/ui/primitives/spacer.js.map +0 -1
  206. package/dist/ui/primitives/text.d.ts +0 -15
  207. package/dist/ui/primitives/text.d.ts.map +0 -1
  208. package/dist/ui/primitives/text.js +0 -79
  209. package/dist/ui/primitives/text.js.map +0 -1
  210. package/dist/ui/primitives/wrapped-text.d.ts +0 -30
  211. package/dist/ui/primitives/wrapped-text.d.ts.map +0 -1
  212. package/dist/ui/primitives/wrapped-text.js +0 -117
  213. package/dist/ui/primitives/wrapped-text.js.map +0 -1
  214. package/dist/ui/shinytext.d.ts +0 -66
  215. package/dist/ui/shinytext.d.ts.map +0 -1
  216. package/dist/ui/shinytext.js +0 -99
  217. package/dist/ui/shinytext.js.map +0 -1
  218. package/dist/ui/text/layout.d.ts +0 -35
  219. package/dist/ui/text/layout.d.ts.map +0 -1
  220. package/dist/ui/text/layout.js +0 -102
  221. package/dist/ui/text/layout.js.map +0 -1
  222. package/dist/ui/textinput.d.ts +0 -140
  223. package/dist/ui/textinput.d.ts.map +0 -1
  224. package/dist/ui/textinput.js +0 -402
  225. package/dist/ui/textinput.js.map +0 -1
  226. package/dist/ui/view-constructors.d.ts +0 -72
  227. package/dist/ui/view-constructors.d.ts.map +0 -1
  228. package/dist/ui/view-constructors.js +0 -74
  229. package/dist/ui/view-constructors.js.map +0 -1
  230. package/src/anim.ts +0 -5
  231. package/src/layout/linearStack.ts +0 -115
  232. package/src/motion-value.ts +0 -335
  233. package/src/present/display.ts +0 -206
  234. package/src/present/writers/fullscreen.ts +0 -58
  235. package/src/present/writers/inline.ts +0 -101
  236. package/src/render/color-utils.ts +0 -60
  237. package/src/render/diff.ts +0 -95
  238. package/src/spring-physics.ts +0 -151
  239. package/src/spring.ts +0 -234
  240. package/src/ui/__snapshots__/wrappedtext.test.ts.snap +0 -57
  241. package/src/ui/containers/canvas.ts +0 -18
  242. package/src/ui/containers/geometry-reader.ts +0 -32
  243. package/src/ui/containers/hstack.ts +0 -33
  244. package/src/ui/containers/scroll.ts +0 -106
  245. package/src/ui/containers/shared.ts +0 -27
  246. package/src/ui/containers/vstack.ts +0 -34
  247. package/src/ui/containers/zstack.ts +0 -37
  248. package/src/ui/core/geometry-store.ts +0 -42
  249. package/src/ui/core/geometry.ts +0 -30
  250. package/src/ui/core/view.ts +0 -49
  251. package/src/ui/index.ts +0 -84
  252. package/src/ui/inlinetext.ts +0 -135
  253. package/src/ui/install.ts +0 -110
  254. package/src/ui/markdown.test.ts +0 -74
  255. package/src/ui/markdown.ts +0 -388
  256. package/src/ui/modifiers/border.ts +0 -100
  257. package/src/ui/modifiers/fill.ts +0 -28
  258. package/src/ui/modifiers/frame.ts +0 -74
  259. package/src/ui/modifiers/offset.ts +0 -23
  260. package/src/ui/modifiers/opacity.ts +0 -93
  261. package/src/ui/modifiers/padding.ts +0 -53
  262. package/src/ui/modifiers/styled.ts +0 -31
  263. package/src/ui/primitives/rectangle.ts +0 -25
  264. package/src/ui/primitives/spacer.ts +0 -18
  265. package/src/ui/primitives/text.ts +0 -85
  266. package/src/ui/primitives/wrapped-text.ts +0 -131
  267. package/src/ui/shinytext.ts +0 -159
  268. package/src/ui/text/layout.ts +0 -119
  269. package/src/ui/textinput.ts +0 -496
  270. package/src/ui/view-constructors.ts +0 -96
  271. package/src/ui/wrappedtext.test.ts +0 -138
package/dist/keys.js CHANGED
@@ -1,5 +1,179 @@
1
1
  // Minimal key decoder for Node raw input → semantic key messages.
2
+ // SGR mouse button codes (low 2 bits, after masking modifiers)
3
+ const MOUSE_LEFT = 0;
4
+ const MOUSE_MIDDLE = 1;
5
+ const MOUSE_RIGHT = 2;
6
+ const MOUSE_SCROLL_UP = 64;
7
+ const MOUSE_SCROLL_DOWN = 65;
8
+ // Modifier bits (subtract 1 from raw value before checking)
9
+ const MOD_SHIFT = 1;
10
+ const MOD_ALT = 2;
11
+ const MOD_CTRL = 4;
12
+ const MOD_META = 8;
13
+ // Common key codes
14
+ const KEY_TAB = 9;
15
+ const KEY_ENTER_CR = 13;
16
+ const KEY_ESC = 27;
17
+ const KEY_SPACE = 32;
18
+ const KEY_BS = 127;
2
19
  const ESC = "\x1b";
20
+ // ─────────────────────────────────────────────────────────────
21
+ // CSI sequence parsing (xterm-style modified keys)
22
+ // ─────────────────────────────────────────────────────────────
23
+ // CSI pattern: ESC [ <params> <final>
24
+ // Examples: ESC[A (up), ESC[1;2A (shift+up), ESC[5~ (pageup)
25
+ const CSI_RE = /^\x1b\[([0-9;]*)([A-Za-z~])$/;
26
+ // Map CSI final character to key name
27
+ const CSI_ARROW_MAP = {
28
+ A: "up",
29
+ B: "down",
30
+ C: "right",
31
+ D: "left",
32
+ H: "home",
33
+ F: "end",
34
+ };
35
+ // Map CSI ~ sequences to key names (e.g., ESC[5~ = pageup)
36
+ const CSI_TILDE_MAP = {
37
+ 2: "insert",
38
+ 3: "delete",
39
+ 5: "pageup",
40
+ 6: "pagedown",
41
+ };
42
+ /**
43
+ * Parse xterm modifier parameter into boolean flags.
44
+ * xterm uses 1+bitmask encoding: 2=shift, 3=alt, 4=shift+alt, 5=ctrl, etc.
45
+ * Bits: 0=shift, 1=alt/meta, 2=ctrl, 3=meta (extended)
46
+ */
47
+ function parseModifiers(modParam) {
48
+ const bits = modParam - 1;
49
+ return {
50
+ shift: !!(bits & MOD_SHIFT),
51
+ meta: !!(bits & MOD_ALT), // Alt is typically mapped to meta
52
+ ctrl: !!(bits & MOD_CTRL),
53
+ };
54
+ }
55
+ /**
56
+ * Try to decode a CSI sequence with optional modifiers.
57
+ * Handles: arrows (A/B/C/D), home/end (H/F), and tilde sequences (2~/3~/5~/6~)
58
+ */
59
+ function decodeCsiSequence(s) {
60
+ const match = CSI_RE.exec(s);
61
+ if (!match)
62
+ return null;
63
+ const params = match[1] ? match[1].split(";").map(Number) : [];
64
+ const final = match[2];
65
+ // Handle arrow keys and home/end (A/B/C/D/H/F)
66
+ const arrowName = CSI_ARROW_MAP[final];
67
+ if (arrowName) {
68
+ // Get modifier from 2nd param (ESC[1;2A) or 1st if only one (rare)
69
+ const modParam = params.length >= 2 ? params[1] : params.length === 1 && params[0] >= 2 ? params[0] : null;
70
+ const mods = modParam ? parseModifiers(modParam) : { shift: false, meta: false, ctrl: false };
71
+ return {
72
+ type: "key",
73
+ name: arrowName,
74
+ ...(mods.shift && { shift: true }),
75
+ ...(mods.meta && { meta: true }),
76
+ ...(mods.ctrl && { ctrl: true }),
77
+ };
78
+ }
79
+ // Handle tilde sequences (ESC[5~, ESC[3;5~ for ctrl+delete, etc.)
80
+ if (final === "~") {
81
+ const keyCode = params[0];
82
+ const tildeName = keyCode !== undefined ? CSI_TILDE_MAP[keyCode] : undefined;
83
+ if (tildeName) {
84
+ const modParam = params.length >= 2 ? params[1] : null;
85
+ const mods = modParam ? parseModifiers(modParam) : { shift: false, meta: false, ctrl: false };
86
+ return {
87
+ type: "key",
88
+ name: tildeName,
89
+ ...(mods.shift && { shift: true }),
90
+ ...(mods.meta && { meta: true }),
91
+ ...(mods.ctrl && { ctrl: true }),
92
+ };
93
+ }
94
+ }
95
+ return null;
96
+ }
97
+ // SGR mouse event regex
98
+ const SGR_MOUSE_RE = /\x1b\[<(\d+);(\d+);(\d+)([Mm])/g;
99
+ /**
100
+ * Parse SGR mouse button code into button name and modifiers.
101
+ * Code format: low 2 bits = button (0-2), bits 2-5 = modifiers, bit 5 = motion, bits 6-7 = scroll
102
+ */
103
+ function parseSgrMouse(code, cx, cy, isRelease) {
104
+ // Scroll events (bits 6-7)
105
+ if (code >= 64) {
106
+ return {
107
+ type: "mouse",
108
+ button: code === MOUSE_SCROLL_UP ? "scroll-up" : "scroll-down",
109
+ x: cx - 1, // Convert to 0-based
110
+ y: cy - 1,
111
+ action: "press", // Scroll doesn't have release
112
+ shift: Boolean(code & 4),
113
+ meta: Boolean(code & 8),
114
+ ctrl: Boolean(code & 16),
115
+ };
116
+ }
117
+ // Button events
118
+ const buttonBits = code & 3;
119
+ const isMotion = Boolean(code & 32);
120
+ let button;
121
+ if (buttonBits === MOUSE_LEFT)
122
+ button = "left";
123
+ else if (buttonBits === MOUSE_MIDDLE)
124
+ button = "middle";
125
+ else if (buttonBits === MOUSE_RIGHT)
126
+ button = "right";
127
+ else
128
+ button = "none";
129
+ let action;
130
+ if (isMotion) {
131
+ action = button === "none" ? "move" : "drag";
132
+ }
133
+ else {
134
+ action = isRelease ? "release" : "press";
135
+ }
136
+ return {
137
+ type: "mouse",
138
+ button,
139
+ x: cx - 1,
140
+ y: cy - 1,
141
+ action,
142
+ shift: Boolean(code & 4),
143
+ meta: Boolean(code & 8),
144
+ ctrl: Boolean(code & 16),
145
+ };
146
+ }
147
+ /**
148
+ * Decode input buffer into keyboard and mouse events.
149
+ * Use this instead of decodeKeys if you want mouse support.
150
+ */
151
+ export function* decodeInput(buf) {
152
+ let s = buf.toString("utf8");
153
+ // Extract all SGR mouse events first
154
+ for (const m of s.matchAll(SGR_MOUSE_RE)) {
155
+ const code = parseInt(m[1], 10);
156
+ const cx = parseInt(m[2], 10);
157
+ const cy = parseInt(m[3], 10);
158
+ const isRelease = m[4] === "m";
159
+ const mouse = parseSgrMouse(code, cx, cy, isRelease);
160
+ // Yield the mouse event
161
+ yield mouse;
162
+ // For scroll wheel, ALSO emit legacy KeyMsg for backward compatibility
163
+ // (useScroll listens for pageup/pagedown with meta: true)
164
+ if (mouse.button === "scroll-up") {
165
+ yield { type: "key", name: "pageup", meta: true };
166
+ }
167
+ else if (mouse.button === "scroll-down") {
168
+ yield { type: "key", name: "pagedown", meta: true };
169
+ }
170
+ }
171
+ // Strip mouse sequences and process remaining as keys
172
+ s = s.replace(SGR_MOUSE_RE, "");
173
+ if (s.length > 0) {
174
+ yield* decodeKeys(Buffer.from(s, "utf8"));
175
+ }
176
+ }
3
177
  export function* decodeKeys(buf) {
4
178
  // Handle control characters (0x00-0x1F)
5
179
  // These are generated by Ctrl+letter combinations
@@ -64,11 +238,11 @@ export function* decodeKeys(buf) {
64
238
  for (const m of s.matchAll(sgrRe)) {
65
239
  matchedAny = true;
66
240
  const code = parseInt(m.groups?.cb ?? "0", 10);
67
- if (code === 64) {
241
+ if (code === MOUSE_SCROLL_UP) {
68
242
  yield { type: "key", name: "pageup", meta: true };
69
243
  continue;
70
244
  }
71
- if (code === 65) {
245
+ if (code === MOUSE_SCROLL_DOWN) {
72
246
  yield { type: "key", name: "pagedown", meta: true };
73
247
  }
74
248
  // ignore other mouse events
@@ -84,11 +258,11 @@ export function* decodeKeys(buf) {
84
258
  const sgr = /^\x1b\[<(?<cb>\d+);(?<cx>\d+);(?<cy>\d+)(?<updown>[A-Za-z])$/.exec(s);
85
259
  if (sgr?.groups) {
86
260
  const code = parseInt(sgr.groups.cb ?? "0", 10);
87
- if (code === 64) {
261
+ if (code === MOUSE_SCROLL_UP) {
88
262
  yield { type: "key", name: "pageup", meta: true };
89
263
  return;
90
264
  }
91
- if (code === 65) {
265
+ if (code === MOUSE_SCROLL_DOWN) {
92
266
  yield { type: "key", name: "pagedown", meta: true };
93
267
  return;
94
268
  }
@@ -109,10 +283,10 @@ export function* decodeKeys(buf) {
109
283
  if (moo?.groups) {
110
284
  const mod = parseInt(moo.groups.mod ?? "1", 10) - 1;
111
285
  const code = parseInt(moo.groups.code ?? "0", 10);
112
- const shift = !!(mod & 1);
113
- const alt = !!(mod & 2);
114
- const ctrl = !!(mod & 4);
115
- const meta = !!(mod & 8) || alt;
286
+ const shift = !!(mod & MOD_SHIFT);
287
+ const alt = !!(mod & MOD_ALT);
288
+ const ctrl = !!(mod & MOD_CTRL);
289
+ const meta = !!(mod & MOD_META) || alt;
116
290
  const key = fromCharCode(code, { shift, ctrl, meta, source: "modify-other" });
117
291
  if (key) {
118
292
  yield key;
@@ -124,10 +298,10 @@ export function* decodeKeys(buf) {
124
298
  if (csiu?.groups) {
125
299
  const mod = parseInt(csiu.groups.mod ?? "1", 10) - 1;
126
300
  const code = parseInt(csiu.groups.code ?? "0", 10);
127
- const shift = !!(mod & 1);
128
- const alt = !!(mod & 2);
129
- const ctrl = !!(mod & 4);
130
- const meta = !!(mod & 8) || alt;
301
+ const shift = !!(mod & MOD_SHIFT);
302
+ const alt = !!(mod & MOD_ALT);
303
+ const ctrl = !!(mod & MOD_CTRL);
304
+ const meta = !!(mod & MOD_META) || alt;
131
305
  const key = fromCharCode(code, { shift, ctrl, meta, source: "csiu" });
132
306
  if (key) {
133
307
  yield key;
@@ -150,49 +324,16 @@ export function* decodeKeys(buf) {
150
324
  return;
151
325
  }
152
326
  }
153
- // Common escapes
327
+ // Try generic CSI parser first (handles all modifier combinations)
328
+ const csiKey = decodeCsiSequence(s);
329
+ if (csiKey) {
330
+ yield csiKey;
331
+ return;
332
+ }
333
+ // Special cases not handled by generic CSI parser
154
334
  switch (s) {
155
- case `${ESC}[A`:
156
- yield { type: "key", name: "up" };
157
- return;
158
- case `${ESC}[B`:
159
- yield { type: "key", name: "down" };
160
- return;
161
- case `${ESC}[C`:
162
- yield { type: "key", name: "right" };
163
- return;
164
- case `${ESC}[D`:
165
- yield { type: "key", name: "left" };
166
- return;
167
- case `${ESC}[1;3C`:
168
- yield { type: "key", name: "right", meta: true };
169
- return;
170
- case `${ESC}[1;3D`:
171
- yield { type: "key", name: "left", meta: true };
172
- return;
173
335
  case `${ESC}OP`: // F1 (ignored)
174
336
  return;
175
- case `${ESC}[H`:
176
- yield { type: "key", name: "home" };
177
- return;
178
- case `${ESC}[F`:
179
- yield { type: "key", name: "end" };
180
- return;
181
- case `${ESC}[5~`:
182
- yield { type: "key", name: "pageup" };
183
- return;
184
- case `${ESC}[6~`:
185
- yield { type: "key", name: "pagedown" };
186
- return;
187
- case `${ESC}[2~`:
188
- yield { type: "key", name: "insert" };
189
- return;
190
- case `${ESC}[3~`:
191
- yield { type: "key", name: "delete" };
192
- return;
193
- case `${ESC}[3;3~`: // Meta+Delete (best-effort for some terminals)
194
- yield { type: "key", name: "delete", meta: true };
195
- return;
196
337
  case `${ESC}[Z`:
197
338
  yield { type: "key", name: "shift-tab", shift: true };
198
339
  return;
@@ -224,16 +365,16 @@ function fromCharCode(code, mods) {
224
365
  source,
225
366
  };
226
367
  switch (code) {
227
- case 13:
368
+ case KEY_ENTER_CR:
228
369
  return { ...common, name: "enter" };
229
- case 27:
370
+ case KEY_ESC:
230
371
  return { ...common, name: "escape" };
231
- case 9:
372
+ case KEY_TAB:
232
373
  return { ...common, name: "tab" };
233
- case 32:
374
+ case KEY_SPACE:
234
375
  return { ...common, name: "space", text: " " };
235
- case 127:
236
- case 8:
376
+ case KEY_BS:
377
+ case 8: // Backspace (legacy)
237
378
  return { ...common, name: "backspace" };
238
379
  }
239
380
  if (code >= 0 && code < 32) {
package/dist/keys.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { Axis, Size, Rect } from "../types.js";
2
+ export type { Axis, Size, Rect } from "../types.js";
3
+ /** Get the main-axis size (height for vertical, width for horizontal) */
4
+ export declare const mainSize: (axis: Axis, s: Size) => number;
5
+ /** Get the cross-axis size (width for vertical, height for horizontal) */
6
+ export declare const crossSize: (axis: Axis, s: Size) => number;
7
+ /** Get the main-axis position (y for vertical, x for horizontal) */
8
+ export declare const mainPos: (axis: Axis, r: Rect) => number;
9
+ /** Get the cross-axis position (x for vertical, y for horizontal) */
10
+ export declare const crossPos: (axis: Axis, r: Rect) => number;
11
+ /** Get the main-axis dimension (height for vertical, width for horizontal) */
12
+ export declare const mainDim: (axis: Axis, r: Rect) => number;
13
+ /** Get the cross-axis dimension (width for vertical, height for horizontal) */
14
+ export declare const crossDim: (axis: Axis, r: Rect) => number;
15
+ /** Create a rect from main/cross coordinates and dimensions */
16
+ export declare const makeRect: (axis: Axis, mainP: number, crossP: number, mainD: number, crossD: number) => Rect;
17
+ /** Split max constraints into [maxMain, maxCross] */
18
+ export declare const splitConstraints: (axis: Axis, maxW: number, maxH: number) => [number, number];
19
+ //# sourceMappingURL=axis-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axis-helpers.d.ts","sourceRoot":"","sources":["../../src/layout/axis-helpers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAGnD,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAEnD,yEAAyE;AACzE,eAAO,MAAM,QAAQ,GAAI,MAAM,IAAI,EAAE,GAAG,IAAI,KAAG,MAA2C,CAAA;AAE1F,0EAA0E;AAC1E,eAAO,MAAM,SAAS,GAAI,MAAM,IAAI,EAAE,GAAG,IAAI,KAAG,MAA2C,CAAA;AAE3F,oEAAoE;AACpE,eAAO,MAAM,OAAO,GAAI,MAAM,IAAI,EAAE,GAAG,IAAI,KAAG,MAA2C,CAAA;AAEzF,qEAAqE;AACrE,eAAO,MAAM,QAAQ,GAAI,MAAM,IAAI,EAAE,GAAG,IAAI,KAAG,MAA2C,CAAA;AAE1F,8EAA8E;AAC9E,eAAO,MAAM,OAAO,GAAI,MAAM,IAAI,EAAE,GAAG,IAAI,KAAG,MAA2C,CAAA;AAEzF,+EAA+E;AAC/E,eAAO,MAAM,QAAQ,GAAI,MAAM,IAAI,EAAE,GAAG,IAAI,KAAG,MAA2C,CAAA;AAE1F,+DAA+D;AAC/D,eAAO,MAAM,QAAQ,GAAI,MAAM,IAAI,EAAE,OAAO,MAAM,EAAE,QAAQ,MAAM,EAAE,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAG,IACc,CAAA;AAElH,qDAAqD;AACrD,eAAO,MAAM,gBAAgB,GAAI,MAAM,IAAI,EAAE,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CACvC,CAAA"}
@@ -0,0 +1,19 @@
1
+ // axis-helpers.ts — Utility functions for axis-aware layout calculations
2
+ // Reduces repeated `axis === "vertical" ? size.h : size.w` patterns
3
+ /** Get the main-axis size (height for vertical, width for horizontal) */
4
+ export const mainSize = (axis, s) => (axis === "vertical" ? s.h : s.w);
5
+ /** Get the cross-axis size (width for vertical, height for horizontal) */
6
+ export const crossSize = (axis, s) => (axis === "vertical" ? s.w : s.h);
7
+ /** Get the main-axis position (y for vertical, x for horizontal) */
8
+ export const mainPos = (axis, r) => (axis === "vertical" ? r.y : r.x);
9
+ /** Get the cross-axis position (x for vertical, y for horizontal) */
10
+ export const crossPos = (axis, r) => (axis === "vertical" ? r.x : r.y);
11
+ /** Get the main-axis dimension (height for vertical, width for horizontal) */
12
+ export const mainDim = (axis, r) => (axis === "vertical" ? r.h : r.w);
13
+ /** Get the cross-axis dimension (width for vertical, height for horizontal) */
14
+ export const crossDim = (axis, r) => (axis === "vertical" ? r.w : r.h);
15
+ /** Create a rect from main/cross coordinates and dimensions */
16
+ export const makeRect = (axis, mainP, crossP, mainD, crossD) => axis === "vertical" ? { x: crossP, y: mainP, w: crossD, h: mainD } : { x: mainP, y: crossP, w: mainD, h: crossD };
17
+ /** Split max constraints into [maxMain, maxCross] */
18
+ export const splitConstraints = (axis, maxW, maxH) => axis === "vertical" ? [maxH, maxW] : [maxW, maxH];
19
+ //# sourceMappingURL=axis-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axis-helpers.js","sourceRoot":"","sources":["../../src/layout/axis-helpers.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,oEAAoE;AAOpE,yEAAyE;AACzE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAU,EAAE,CAAO,EAAU,EAAE,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAE1F,0EAA0E;AAC1E,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAU,EAAE,CAAO,EAAU,EAAE,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAE3F,oEAAoE;AACpE,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAU,EAAE,CAAO,EAAU,EAAE,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAEzF,qEAAqE;AACrE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAU,EAAE,CAAO,EAAU,EAAE,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAE1F,8EAA8E;AAC9E,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAU,EAAE,CAAO,EAAU,EAAE,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAEzF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAU,EAAE,CAAO,EAAU,EAAE,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAE1F,+DAA+D;AAC/D,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAU,EAAE,KAAa,EAAE,MAAc,EAAE,KAAa,EAAE,MAAc,EAAQ,EAAE,CAC1G,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;AAElH,qDAAqD;AACrD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAU,EAAE,IAAY,EAAE,IAAY,EAAoB,EAAE,CAC5F,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Output helpers for rendering CellBuffer to ANSI strings.
3
+ * Provides diffing, row emission, and buffer-to-string conversion.
4
+ */
5
+ import type { CellBuffer } from "./render/buffer.js";
6
+ import type { Palette } from "./render/palette.js";
7
+ /**
8
+ * Emit a row of cells as an ANSI string with run-length SGR encoding.
9
+ * Handles wide characters (cellWidth=0 continuations) and style changes.
10
+ *
11
+ * @param buffer - The cell buffer to read from
12
+ * @param palette - Palette for SGR code generation
13
+ * @param y - Row index
14
+ * @param width - Terminal width
15
+ * @param startX - Start column (default 0)
16
+ * @param endX - End column exclusive (default width)
17
+ * @returns ANSI string for the row (no cursor positioning, no trailing reset)
18
+ */
19
+ export declare function emitRow(buffer: CellBuffer, palette: Palette, y: number, width: number, startX?: number, endX?: number): {
20
+ output: string;
21
+ lastStyle: number;
22
+ };
23
+ /**
24
+ * Emit a row and reset style if needed.
25
+ */
26
+ export declare function emitRowWithReset(buffer: CellBuffer, palette: Palette, y: number, width: number, startX?: number, endX?: number): string;
27
+ /**
28
+ * Check if a row changed between two buffers.
29
+ */
30
+ export declare function rowChanged(prev: CellBuffer, next: CellBuffer, y: number, width: number): boolean;
31
+ /**
32
+ * Find the rightmost column with content (non-space or styled).
33
+ * Returns 0 if row is empty.
34
+ */
35
+ export declare function rowContentWidth(buffer: CellBuffer, y: number, width: number): number;
36
+ /**
37
+ * Find the change window between two buffers for a row.
38
+ * Returns the leftmost and rightmost changed columns, or null if no changes.
39
+ */
40
+ export declare function findChangeWindow(prev: CellBuffer, next: CellBuffer, y: number, width: number): {
41
+ left: number;
42
+ right: number;
43
+ } | null;
44
+ /**
45
+ * Find the last row with content in a buffer.
46
+ */
47
+ export declare function contentHeight(buffer: CellBuffer, width: number, height: number): number;
48
+ /**
49
+ * Convert a CellBuffer to a complete ANSI string (for static output).
50
+ * Each row is emitted with proper styling and joined with newlines.
51
+ *
52
+ * @param buffer - The cell buffer to convert
53
+ * @param palette - Palette for SGR code generation
54
+ * @param width - Buffer width
55
+ * @param height - Number of rows to emit
56
+ * @returns ANSI string with newlines between rows
57
+ */
58
+ export declare function bufferToString(buffer: CellBuffer, palette: Palette, width: number, height: number): string;
59
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,CACtB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,OAAO,EAChB,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,SAAI,EACV,IAAI,SAAQ,GACV;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CA6BvC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC/B,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,OAAO,EAChB,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,SAAI,EACV,IAAI,SAAQ,GACV,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAShG;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAYpF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,UAAU,EAChB,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA2BxC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAUvF;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAM1G"}
package/dist/output.js ADDED
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Output helpers for rendering CellBuffer to ANSI strings.
3
+ * Provides diffing, row emission, and buffer-to-string conversion.
4
+ */
5
+ /**
6
+ * Emit a row of cells as an ANSI string with run-length SGR encoding.
7
+ * Handles wide characters (cellWidth=0 continuations) and style changes.
8
+ *
9
+ * @param buffer - The cell buffer to read from
10
+ * @param palette - Palette for SGR code generation
11
+ * @param y - Row index
12
+ * @param width - Terminal width
13
+ * @param startX - Start column (default 0)
14
+ * @param endX - End column exclusive (default width)
15
+ * @returns ANSI string for the row (no cursor positioning, no trailing reset)
16
+ */
17
+ export function emitRow(buffer, palette, y, width, startX = 0, endX = width) {
18
+ const row = y * width;
19
+ let output = "";
20
+ let visualCol = startX;
21
+ let currentStyle = -1;
22
+ for (let x = startX; x < endX && visualCol < width; x++) {
23
+ const idx = row + x;
24
+ const glyph = buffer.g[idx];
25
+ const styleId = buffer.s[idx];
26
+ const cellWidth = buffer.cw[idx] || 1;
27
+ // Skip continuation cells (wide char second half)
28
+ if (cellWidth === 0)
29
+ continue;
30
+ // Stop if this char would overflow
31
+ if (visualCol + cellWidth > width)
32
+ break;
33
+ // Emit SGR only when style changes (run-length encoding)
34
+ if (styleId !== currentStyle) {
35
+ output += palette.sgr(styleId);
36
+ currentStyle = styleId;
37
+ }
38
+ output += glyph === 32 ? " " : String.fromCodePoint(glyph);
39
+ visualCol += cellWidth;
40
+ }
41
+ return { output, lastStyle: currentStyle };
42
+ }
43
+ /**
44
+ * Emit a row and reset style if needed.
45
+ */
46
+ export function emitRowWithReset(buffer, palette, y, width, startX = 0, endX = width) {
47
+ const { output, lastStyle } = emitRow(buffer, palette, y, width, startX, endX);
48
+ return lastStyle !== 0 ? output + palette.sgr(0) : output;
49
+ }
50
+ /**
51
+ * Check if a row changed between two buffers.
52
+ */
53
+ export function rowChanged(prev, next, y, width) {
54
+ const row = y * width;
55
+ for (let x = 0; x < width; x++) {
56
+ const idx = row + x;
57
+ if (next.g[idx] !== prev.g[idx] || next.s[idx] !== prev.s[idx] || next.cw[idx] !== prev.cw[idx]) {
58
+ return true;
59
+ }
60
+ }
61
+ return false;
62
+ }
63
+ /**
64
+ * Find the rightmost column with content (non-space or styled).
65
+ * Returns 0 if row is empty.
66
+ */
67
+ export function rowContentWidth(buffer, y, width) {
68
+ const row = y * width;
69
+ for (let x = width - 1; x >= 0; x--) {
70
+ const idx = row + x;
71
+ // Skip continuation cells
72
+ if (buffer.cw[idx] === 0)
73
+ continue;
74
+ // Found content if non-space or has style
75
+ if (buffer.g[idx] !== 32 || buffer.s[idx] !== 0) {
76
+ return x + buffer.cw[idx]; // account for wide char width
77
+ }
78
+ }
79
+ return 0;
80
+ }
81
+ /**
82
+ * Find the change window between two buffers for a row.
83
+ * Returns the leftmost and rightmost changed columns, or null if no changes.
84
+ */
85
+ export function findChangeWindow(prev, next, y, width) {
86
+ const row = y * width;
87
+ let left = 0;
88
+ let right = width - 1;
89
+ // Find leftmost change
90
+ while (left <= right) {
91
+ const i = row + left;
92
+ if (next.g[i] !== prev.g[i] || next.s[i] !== prev.s[i] || next.cw[i] !== prev.cw[i]) {
93
+ break;
94
+ }
95
+ left++;
96
+ }
97
+ // No changes found
98
+ if (left > right)
99
+ return null;
100
+ // Find rightmost change
101
+ while (right >= left) {
102
+ const i = row + right;
103
+ if (next.g[i] !== prev.g[i] || next.s[i] !== prev.s[i] || next.cw[i] !== prev.cw[i]) {
104
+ break;
105
+ }
106
+ right--;
107
+ }
108
+ return { left, right };
109
+ }
110
+ /**
111
+ * Find the last row with content in a buffer.
112
+ */
113
+ export function contentHeight(buffer, width, height) {
114
+ for (let y = height - 1; y >= 0; y--) {
115
+ const row = y * width;
116
+ for (let x = 0; x < width; x++) {
117
+ const glyph = buffer.g[row + x];
118
+ const style = buffer.s[row + x];
119
+ if (glyph !== 32 || style !== 0)
120
+ return y + 1;
121
+ }
122
+ }
123
+ return 0;
124
+ }
125
+ /**
126
+ * Convert a CellBuffer to a complete ANSI string (for static output).
127
+ * Each row is emitted with proper styling and joined with newlines.
128
+ *
129
+ * @param buffer - The cell buffer to convert
130
+ * @param palette - Palette for SGR code generation
131
+ * @param width - Buffer width
132
+ * @param height - Number of rows to emit
133
+ * @returns ANSI string with newlines between rows
134
+ */
135
+ export function bufferToString(buffer, palette, width, height) {
136
+ const lines = [];
137
+ for (let y = 0; y < height; y++) {
138
+ lines.push(emitRowWithReset(buffer, palette, y, width));
139
+ }
140
+ return lines.join("\n");
141
+ }
142
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../src/render/buffer.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,OAAO,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAG/C,eAAO,MAAM,cAAc,EAAE,OAAoE,CAAA;AAKjG,qBAAa,UAAU;IACrB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAGlB,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAA;IACvB,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAA;IACvB,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAA;IAEvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,QAAQ,CAAiC;gBAErC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,OAAwB;IAY5E,qDAAqD;IACrD,KAAK,CAAC,OAAO,SAAI,GAAG,IAAI;IAMxB,2FAA2F;IAC3F,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,SAAI,GAAG,IAAI;IAuB3D,wFAAwF;IACxF,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,SAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IA+ClF,kDAAkD;IAClD,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,SAAK,EAAE,OAAO,SAAI,GAAG,IAAI;IAuBhF,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAc1D,OAAO,IAAI,IAAI;IASf,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAU1E,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAMxC,SAAS,IAAI,IAAI;IAWjB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;CAQzD"}
1
+ {"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../src/render/buffer.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,OAAO,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAG/C,eAAO,MAAM,cAAc,EAAE,OAAoE,CAAA;AAKjG,qBAAa,UAAU;IACtB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAGlB,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAA;IACvB,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAA;IACvB,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAA;IAEvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,QAAQ,CAAiC;gBAErC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,OAAwB;IAY5E,qDAAqD;IACrD,KAAK,CAAC,OAAO,SAAI,GAAG,IAAI;IAMxB,2FAA2F;IAC3F,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,SAAI,GAAG,IAAI;IAuB3D,wFAAwF;IACxF,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,SAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAsBlF,kDAAkD;IAClD,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,SAAK,EAAE,OAAO,SAAI,GAAG,IAAI;IAuBhF,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAc1D,OAAO,IAAI,IAAI;IASf,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAU1E,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAMxC,SAAS,IAAI,IAAI;IAWjB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;CAQxD"}