linecraft 0.1.0 → 0.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 (283) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +337 -64
  3. package/lib/api/color.d.ts +6 -0
  4. package/lib/api/color.d.ts.map +1 -0
  5. package/lib/api/color.js +9 -0
  6. package/lib/api/color.js.map +1 -0
  7. package/lib/api/color.test.d.ts +2 -0
  8. package/lib/api/color.test.d.ts.map +1 -0
  9. package/lib/api/color.test.js +23 -0
  10. package/lib/api/color.test.js.map +1 -0
  11. package/lib/api/flex.d.ts +55 -0
  12. package/lib/api/flex.d.ts.map +1 -0
  13. package/lib/api/flex.js +86 -0
  14. package/lib/api/flex.js.map +1 -0
  15. package/lib/api/flex.test.d.ts +2 -0
  16. package/lib/api/flex.test.d.ts.map +1 -0
  17. package/lib/api/flex.test.js +82 -0
  18. package/lib/api/flex.test.js.map +1 -0
  19. package/lib/api/grid.d.ts +22 -0
  20. package/lib/api/grid.d.ts.map +1 -0
  21. package/lib/api/grid.js +65 -0
  22. package/lib/api/grid.js.map +1 -0
  23. package/lib/api/grid.test.d.ts +2 -0
  24. package/lib/api/grid.test.d.ts.map +1 -0
  25. package/lib/api/grid.test.js +48 -0
  26. package/lib/api/grid.test.js.map +1 -0
  27. package/lib/components/base.d.ts +53 -0
  28. package/lib/components/base.d.ts.map +1 -0
  29. package/lib/components/base.js +47 -0
  30. package/lib/components/base.js.map +1 -0
  31. package/lib/components/col.d.ts +35 -0
  32. package/lib/components/col.d.ts.map +1 -0
  33. package/lib/components/col.js +168 -0
  34. package/lib/components/col.js.map +1 -0
  35. package/lib/components/col.test.d.ts +2 -0
  36. package/lib/components/col.test.d.ts.map +1 -0
  37. package/lib/components/col.test.js +96 -0
  38. package/lib/components/col.test.js.map +1 -0
  39. package/lib/components/index.d.ts +3 -0
  40. package/lib/components/index.d.ts.map +1 -0
  41. package/lib/components/index.js +5 -0
  42. package/lib/components/index.js.map +1 -0
  43. package/lib/components/progress-bar-grid.d.ts +20 -0
  44. package/lib/components/progress-bar-grid.d.ts.map +1 -0
  45. package/lib/components/progress-bar-grid.js +44 -0
  46. package/lib/components/progress-bar-grid.js.map +1 -0
  47. package/lib/components/progress-bar-grid.test.d.ts +2 -0
  48. package/lib/components/progress-bar-grid.test.d.ts.map +1 -0
  49. package/lib/components/progress-bar-grid.test.js +101 -0
  50. package/lib/components/progress-bar-grid.test.js.map +1 -0
  51. package/lib/components/progress-bar.d.ts +26 -3
  52. package/lib/components/progress-bar.d.ts.map +1 -1
  53. package/lib/components/progress-bar.js +62 -6
  54. package/lib/components/progress-bar.js.map +1 -1
  55. package/lib/components/progress-bar.test.d.ts +2 -0
  56. package/lib/components/progress-bar.test.d.ts.map +1 -0
  57. package/lib/components/progress-bar.test.js +153 -0
  58. package/lib/components/progress-bar.test.js.map +1 -0
  59. package/lib/components/prompt.d.ts +14 -0
  60. package/lib/components/prompt.d.ts.map +1 -0
  61. package/lib/components/prompt.js +77 -0
  62. package/lib/components/prompt.js.map +1 -0
  63. package/lib/components/renderable.d.ts +42 -0
  64. package/lib/components/renderable.d.ts.map +1 -0
  65. package/lib/components/renderable.js +225 -0
  66. package/lib/components/renderable.js.map +1 -0
  67. package/lib/components/spinner.d.ts +2 -2
  68. package/lib/components/spinner.d.ts.map +1 -1
  69. package/lib/components/spinner.js +3 -1
  70. package/lib/components/spinner.js.map +1 -1
  71. package/lib/components/spinner.test.d.ts +2 -0
  72. package/lib/components/spinner.test.d.ts.map +1 -0
  73. package/lib/components/spinner.test.js +168 -0
  74. package/lib/components/spinner.test.js.map +1 -0
  75. package/lib/components/style.d.ts +16 -0
  76. package/lib/components/style.d.ts.map +1 -0
  77. package/lib/components/style.js +72 -0
  78. package/lib/components/style.js.map +1 -0
  79. package/lib/components/style.test.d.ts +2 -0
  80. package/lib/components/style.test.d.ts.map +1 -0
  81. package/lib/components/style.test.js +135 -0
  82. package/lib/components/style.test.js.map +1 -0
  83. package/lib/components/text.d.ts +24 -0
  84. package/lib/components/text.d.ts.map +1 -0
  85. package/lib/components/text.js +65 -0
  86. package/lib/components/text.js.map +1 -0
  87. package/lib/drawing/boxes.d.ts +33 -0
  88. package/lib/drawing/boxes.d.ts.map +1 -0
  89. package/lib/drawing/boxes.js +76 -0
  90. package/lib/drawing/boxes.js.map +1 -0
  91. package/lib/index.d.ts +18 -11
  92. package/lib/index.d.ts.map +1 -1
  93. package/lib/index.js +21 -10
  94. package/lib/index.js.map +1 -1
  95. package/lib/index.test.d.ts +2 -0
  96. package/lib/index.test.d.ts.map +1 -0
  97. package/lib/index.test.js +80 -0
  98. package/lib/index.test.js.map +1 -0
  99. package/lib/layout/flex.d.ts +39 -0
  100. package/lib/layout/flex.d.ts.map +1 -0
  101. package/lib/layout/flex.js +300 -0
  102. package/lib/layout/flex.js.map +1 -0
  103. package/lib/layout/flex.test.d.ts +2 -0
  104. package/lib/layout/flex.test.d.ts.map +1 -0
  105. package/lib/layout/flex.test.js +206 -0
  106. package/lib/layout/flex.test.js.map +1 -0
  107. package/lib/layout/grid.d.ts +53 -0
  108. package/lib/layout/grid.d.ts.map +1 -0
  109. package/lib/layout/grid.js +421 -0
  110. package/lib/layout/grid.js.map +1 -0
  111. package/lib/layout/grid.test.d.ts +2 -0
  112. package/lib/layout/grid.test.d.ts.map +1 -0
  113. package/lib/layout/grid.test.js +139 -0
  114. package/lib/layout/grid.test.js.map +1 -0
  115. package/lib/native/ansi.d.ts +104 -0
  116. package/lib/native/ansi.d.ts.map +1 -0
  117. package/lib/native/ansi.js +120 -0
  118. package/lib/native/ansi.js.map +1 -0
  119. package/lib/native/ansi.test.d.ts +2 -0
  120. package/lib/native/ansi.test.d.ts.map +1 -0
  121. package/lib/native/ansi.test.js +57 -0
  122. package/lib/native/ansi.test.js.map +1 -0
  123. package/lib/native/buffer.d.ts +32 -0
  124. package/lib/native/buffer.d.ts.map +1 -0
  125. package/lib/native/buffer.js +49 -0
  126. package/lib/native/buffer.js.map +1 -0
  127. package/lib/native/buffer.test.d.ts +2 -0
  128. package/lib/native/buffer.test.d.ts.map +1 -0
  129. package/lib/native/buffer.test.js +64 -0
  130. package/lib/native/buffer.test.js.map +1 -0
  131. package/lib/native/diff.d.ts +20 -0
  132. package/lib/native/diff.d.ts.map +1 -0
  133. package/lib/native/diff.js +33 -0
  134. package/lib/native/diff.js.map +1 -0
  135. package/lib/native/diff.test.d.ts +2 -0
  136. package/lib/native/diff.test.d.ts.map +1 -0
  137. package/lib/native/diff.test.js +106 -0
  138. package/lib/native/diff.test.js.map +1 -0
  139. package/lib/native/region-old.d.ts +117 -0
  140. package/lib/native/region-old.d.ts.map +1 -0
  141. package/lib/native/region-old.js +539 -0
  142. package/lib/native/region-old.js.map +1 -0
  143. package/lib/native/region-renderer.d.ts +167 -0
  144. package/lib/native/region-renderer.d.ts.map +1 -0
  145. package/lib/native/region-renderer.js +1238 -0
  146. package/lib/native/region-renderer.js.map +1 -0
  147. package/lib/native/region-simple.d.ts +44 -0
  148. package/lib/native/region-simple.d.ts.map +1 -0
  149. package/lib/native/region-simple.js +290 -0
  150. package/lib/native/region-simple.js.map +1 -0
  151. package/lib/native/region.d.ts +53 -0
  152. package/lib/native/region.d.ts.map +1 -0
  153. package/lib/native/region.js +426 -0
  154. package/lib/native/region.js.map +1 -0
  155. package/lib/native/region.test.d.ts +2 -0
  156. package/lib/native/region.test.d.ts.map +1 -0
  157. package/lib/native/region.test.js +248 -0
  158. package/lib/native/region.test.js.map +1 -0
  159. package/lib/native/throttle.d.ts +29 -0
  160. package/lib/native/throttle.d.ts.map +1 -0
  161. package/lib/native/throttle.js +57 -0
  162. package/lib/native/throttle.js.map +1 -0
  163. package/lib/native/throttle.test.d.ts +2 -0
  164. package/lib/native/throttle.test.d.ts.map +1 -0
  165. package/lib/native/throttle.test.js +86 -0
  166. package/lib/native/throttle.test.js.map +1 -0
  167. package/lib/native.d.ts +5 -11
  168. package/lib/native.d.ts.map +1 -1
  169. package/lib/native.js +8 -64
  170. package/lib/native.js.map +1 -1
  171. package/lib/region.d.ts +48 -5
  172. package/lib/region.d.ts.map +1 -1
  173. package/lib/region.js +474 -36
  174. package/lib/region.js.map +1 -1
  175. package/lib/region.test.d.ts +2 -0
  176. package/lib/region.test.d.ts.map +1 -0
  177. package/lib/region.test.js +227 -0
  178. package/lib/region.test.js.map +1 -0
  179. package/lib/region.visual.test.d.ts +2 -0
  180. package/lib/region.visual.test.d.ts.map +1 -0
  181. package/lib/region.visual.test.js +55 -0
  182. package/lib/region.visual.test.js.map +1 -0
  183. package/lib/test-helpers/capturable-terminal.d.ts +61 -0
  184. package/lib/test-helpers/capturable-terminal.d.ts.map +1 -0
  185. package/lib/test-helpers/capturable-terminal.js +113 -0
  186. package/lib/test-helpers/capturable-terminal.js.map +1 -0
  187. package/lib/test-helpers/capturable-terminal.test.d.ts +2 -0
  188. package/lib/test-helpers/capturable-terminal.test.d.ts.map +1 -0
  189. package/lib/test-helpers/capturable-terminal.test.js +45 -0
  190. package/lib/test-helpers/capturable-terminal.test.js.map +1 -0
  191. package/lib/test-helpers/mock-region.d.ts +21 -0
  192. package/lib/test-helpers/mock-region.d.ts.map +1 -0
  193. package/lib/test-helpers/mock-region.js +37 -0
  194. package/lib/test-helpers/mock-region.js.map +1 -0
  195. package/lib/test-helpers/virtual-terminal-diff-reflow.test.d.ts +2 -0
  196. package/lib/test-helpers/virtual-terminal-diff-reflow.test.d.ts.map +1 -0
  197. package/lib/test-helpers/virtual-terminal-diff-reflow.test.js +256 -0
  198. package/lib/test-helpers/virtual-terminal-diff-reflow.test.js.map +1 -0
  199. package/lib/test-helpers/virtual-terminal-flex-resize.test.d.ts +2 -0
  200. package/lib/test-helpers/virtual-terminal-flex-resize.test.d.ts.map +1 -0
  201. package/lib/test-helpers/virtual-terminal-flex-resize.test.js +438 -0
  202. package/lib/test-helpers/virtual-terminal-flex-resize.test.js.map +1 -0
  203. package/lib/test-helpers/virtual-terminal.d.ts +176 -0
  204. package/lib/test-helpers/virtual-terminal.d.ts.map +1 -0
  205. package/lib/test-helpers/virtual-terminal.js +492 -0
  206. package/lib/test-helpers/virtual-terminal.js.map +1 -0
  207. package/lib/test-helpers/virtual-terminal.test.d.ts +2 -0
  208. package/lib/test-helpers/virtual-terminal.test.d.ts.map +1 -0
  209. package/lib/test-helpers/virtual-terminal.test.js +219 -0
  210. package/lib/test-helpers/virtual-terminal.test.js.map +1 -0
  211. package/lib/ts/components/spinner.test.d.ts +2 -0
  212. package/lib/ts/components/spinner.test.d.ts.map +1 -0
  213. package/lib/ts/components/spinner.test.js +168 -0
  214. package/lib/ts/components/spinner.test.js.map +1 -0
  215. package/lib/ts/utils/colors.test.d.ts +2 -0
  216. package/lib/ts/utils/colors.test.d.ts.map +1 -0
  217. package/lib/ts/utils/colors.test.js +87 -0
  218. package/lib/ts/utils/colors.test.js.map +1 -0
  219. package/lib/types.d.ts +8 -2
  220. package/lib/types.d.ts.map +1 -1
  221. package/lib/types.js.map +1 -1
  222. package/lib/utils/colors-simple.d.ts +51 -0
  223. package/lib/utils/colors-simple.d.ts.map +1 -0
  224. package/lib/utils/colors-simple.js +59 -0
  225. package/lib/utils/colors-simple.js.map +1 -0
  226. package/lib/utils/colors.d.ts +1 -1
  227. package/lib/utils/colors.d.ts.map +1 -1
  228. package/lib/utils/colors.js.map +1 -1
  229. package/lib/utils/colors.test.d.ts +2 -0
  230. package/lib/utils/colors.test.d.ts.map +1 -0
  231. package/lib/utils/colors.test.js +87 -0
  232. package/lib/utils/colors.test.js.map +1 -0
  233. package/lib/utils/cursor-position.d.ts +22 -0
  234. package/lib/utils/cursor-position.d.ts.map +1 -0
  235. package/lib/utils/cursor-position.js +139 -0
  236. package/lib/utils/cursor-position.js.map +1 -0
  237. package/lib/utils/debug-log.d.ts +2 -0
  238. package/lib/utils/debug-log.d.ts.map +1 -0
  239. package/lib/utils/debug-log.js +36 -0
  240. package/lib/utils/debug-log.js.map +1 -0
  241. package/lib/utils/terminal.d.ts +27 -0
  242. package/lib/utils/terminal.d.ts.map +1 -0
  243. package/lib/utils/terminal.js +116 -0
  244. package/lib/utils/terminal.js.map +1 -0
  245. package/lib/utils/text.d.ts +21 -0
  246. package/lib/utils/text.d.ts.map +1 -0
  247. package/lib/utils/text.js +82 -0
  248. package/lib/utils/text.js.map +1 -0
  249. package/lib/utils/wait-for-spacebar.d.ts +10 -0
  250. package/lib/utils/wait-for-spacebar.d.ts.map +1 -0
  251. package/lib/utils/wait-for-spacebar.js +71 -0
  252. package/lib/utils/wait-for-spacebar.js.map +1 -0
  253. package/package.json +35 -28
  254. package/.cursor/plan.md +0 -952
  255. package/TESTING.md +0 -102
  256. package/build.zig +0 -100
  257. package/examples/basic-progress.ts +0 -21
  258. package/examples/multi-lane.ts +0 -29
  259. package/examples/spinner.ts +0 -20
  260. package/examples/test-basic.ts +0 -23
  261. package/src/ts/components/progress-bar.ts +0 -53
  262. package/src/ts/components/spinner.ts +0 -56
  263. package/src/ts/index.ts +0 -37
  264. package/src/ts/native.ts +0 -86
  265. package/src/ts/region.ts +0 -89
  266. package/src/ts/types/ffi-napi.d.ts +0 -11
  267. package/src/ts/types/ref-napi.d.ts +0 -5
  268. package/src/ts/types.ts +0 -53
  269. package/src/ts/utils/colors.ts +0 -72
  270. package/src/zig/ansi.zig +0 -21
  271. package/src/zig/buffer.zig +0 -37
  272. package/src/zig/diff.zig +0 -43
  273. package/src/zig/region.zig +0 -292
  274. package/src/zig/renderer.zig +0 -92
  275. package/src/zig/test_ansi.zig +0 -66
  276. package/src/zig/test_buffer.zig +0 -82
  277. package/src/zig/test_diff.zig +0 -220
  278. package/src/zig/test_integration.zig +0 -76
  279. package/src/zig/test_region.zig +0 -191
  280. package/src/zig/test_runner.zig +0 -27
  281. package/src/zig/test_throttle.zig +0 -59
  282. package/src/zig/throttle.zig +0 -38
  283. package/tsconfig.json +0 -21
@@ -0,0 +1,426 @@
1
+ // SIMPLIFIED Region rendering - back to first principles
2
+ //
3
+ // Core approach:
4
+ // 1. Reserve N lines at bottom of terminal
5
+ // 2. Save cursor position at end (our anchor)
6
+ // 3. To render: restore cursor, move up N lines, render each line, save cursor
7
+ // 4. Disable auto-wrap globally
8
+ // 5. Truncate content to width before writing
9
+ // 6. Use diff to only update changed lines
10
+ import * as ansi from './ansi';
11
+ import { RenderBuffer } from './buffer';
12
+ import { Throttle } from './throttle';
13
+ import { getTerminalWidth, getTerminalHeight, onResize } from '../utils/terminal';
14
+ export class TerminalRegion {
15
+ width;
16
+ height;
17
+ pendingFrame = [];
18
+ previousFrame = [];
19
+ throttle;
20
+ renderBuffer;
21
+ stdout;
22
+ disableRendering;
23
+ isInitialized = false;
24
+ resizeCleanup;
25
+ widthExplicitlySet;
26
+ // Track the absolute row where the region starts (1-based)
27
+ // This is calculated from terminal.rows on initialization and updated on resize
28
+ regionStartRow = null;
29
+ // Periodic check to re-disable auto-wrap (some terminals reset it)
30
+ autoWrapKeepAliveInterval;
31
+ // Optional callback to re-render the last component (for keep-alive during pause)
32
+ onKeepAlive;
33
+ constructor(options = {}) {
34
+ this.widthExplicitlySet = options.width !== undefined;
35
+ this.width = options.width ?? getTerminalWidth();
36
+ this.height = options.height ?? 1;
37
+ this.stdout = options.stdout ?? process.stdout;
38
+ this.disableRendering = options.disableRendering ?? false;
39
+ this.onKeepAlive = options.onKeepAlive;
40
+ // Initialize frames
41
+ this.pendingFrame = Array(this.height).fill('');
42
+ this.previousFrame = Array(this.height).fill('');
43
+ this.throttle = new Throttle(30); // Lower FPS for stability
44
+ this.renderBuffer = new RenderBuffer(this.stdout);
45
+ if (!this.disableRendering) {
46
+ this.initializeRegion();
47
+ if (!this.widthExplicitlySet) {
48
+ this.setupResizeHandler();
49
+ }
50
+ this.setupAutoWrapKeepAlive();
51
+ this.setupExitHandler();
52
+ }
53
+ }
54
+ initializeRegion() {
55
+ if (this.isInitialized)
56
+ return;
57
+ // CRITICAL: Save cursor position FIRST (wherever we are)
58
+ // This allows us to start the region at the current cursor position
59
+ // instead of always pushing to the bottom
60
+ this.stdout.write(ansi.SAVE_CURSOR);
61
+ // Disable auto-wrap globally
62
+ this.stdout.write(ansi.DISABLE_AUTO_WRAP);
63
+ // Query cursor position to get the starting row
64
+ // We'll use a heuristic: save cursor, print newlines, then calculate
65
+ // The actual start row is where we saved the cursor
66
+ // After printing newlines, we're at (savedRow + height)
67
+ // So region starts at (savedRow + 1)
68
+ // For now, we'll use terminal.rows as a fallback, but try to use cursor position
69
+ // The issue is that querying cursor position is async, so we can't do it synchronously
70
+ // Instead, we'll save the cursor, print newlines, then calculate from terminal.rows
71
+ // But we'll adjust: if we're not at the bottom, we should use the saved position
72
+ // Reserve space by printing newlines (moves cursor down)
73
+ for (let i = 0; i < this.height; i++) {
74
+ this.stdout.write('\n');
75
+ }
76
+ // After printing newlines, calculate where the region starts
77
+ // We saved the cursor before printing, so the region starts at (savedRow + 1)
78
+ // But we can't easily get savedRow synchronously, so we'll use terminal.rows
79
+ // If we're at the bottom, this works. If not, we might be off.
80
+ // For now, assume we're at the bottom (matches current behavior)
81
+ const terminalRows = getTerminalHeight();
82
+ this.regionStartRow = Math.max(1, terminalRows - this.height + 1);
83
+ this.isInitialized = true;
84
+ }
85
+ setupAutoWrapKeepAlive() {
86
+ // CRITICAL: Periodically re-render to keep auto-wrap disabled and re-establish content
87
+ // Some terminals reset auto-wrap state, especially after resize or when idle
88
+ // When paused (waiting for spacebar), we're not in an active render loop anymore,
89
+ // so we need to keep rendering periodically to prevent auto-reflow
90
+ // This is the same as the progress bar animation loop - continuous rendering
91
+ // Check every 50ms - more frequent to catch resets faster, matching animation frequency
92
+ this.autoWrapKeepAliveInterval = setInterval(() => {
93
+ if (!this.disableRendering && this.isInitialized) {
94
+ // CRITICAL: Re-disable auto-wrap FIRST (some terminals reset it)
95
+ // Write directly to stdout to ensure it takes effect immediately
96
+ this.stdout.write(ansi.DISABLE_AUTO_WRAP);
97
+ // CRITICAL: If we have a callback to re-render the last component, use it
98
+ // This re-renders flex/col components with current width (same as during animation)
99
+ // If no callback, just re-render existing pendingFrame
100
+ if (this.onKeepAlive) {
101
+ this.onKeepAlive();
102
+ }
103
+ else {
104
+ // Fallback: just re-render existing content
105
+ this.renderNow();
106
+ }
107
+ }
108
+ }, 50);
109
+ }
110
+ setupResizeHandler() {
111
+ this.resizeCleanup = onResize((newWidth, newHeight) => {
112
+ // Re-disable auto-wrap (some terminals reset on resize)
113
+ if (!this.disableRendering) {
114
+ this.stdout.write(ansi.DISABLE_AUTO_WRAP);
115
+ }
116
+ if (!this.widthExplicitlySet) {
117
+ this.width = newWidth;
118
+ }
119
+ // CRITICAL: On resize, DO NOT recalculate regionStartRow
120
+ // The region's absolute position doesn't change when the terminal resizes
121
+ // If we recalculate, we might move the region to the wrong place (especially
122
+ // if waitForSpacebar or other code has caused scrolling)
123
+ // Only update width, keep regionStartRow as-is
124
+ // CRITICAL: Force immediate render (bypass throttle) to update with new size
125
+ // This ensures we re-render even when paused/idle, preventing auto-reflow
126
+ // Render IMMEDIATELY (no setTimeout) to fix any reflow as fast as possible
127
+ // The terminal may have already reflowed content, but we fix it immediately
128
+ // CRITICAL: Always read the latest width right before rendering
129
+ // This ensures we never render with stale width, preventing chopping
130
+ if (!this.widthExplicitlySet) {
131
+ this.width = getTerminalWidth();
132
+ }
133
+ // Double-check one more time right before render
134
+ const latestWidth = getTerminalWidth();
135
+ if (!this.widthExplicitlySet && latestWidth !== this.width) {
136
+ this.width = latestWidth;
137
+ }
138
+ // CRITICAL: If we have a callback to re-render the last content, use it
139
+ // This re-renders ALL components (flex/col) with current width (same as during animation)
140
+ // The region orchestrates this - components don't manage their own re-rendering
141
+ // If no callback, just re-render existing pendingFrame
142
+ if (this.onKeepAlive) {
143
+ this.onKeepAlive();
144
+ }
145
+ else {
146
+ // Fallback: just re-render existing content
147
+ this.renderNow();
148
+ }
149
+ });
150
+ }
151
+ setupExitHandler() {
152
+ const cleanup = () => {
153
+ if (this.isInitialized) {
154
+ this.destroy();
155
+ }
156
+ };
157
+ process.once('exit', cleanup);
158
+ process.once('SIGINT', cleanup);
159
+ process.once('SIGTERM', cleanup);
160
+ process.once('uncaughtException', (error, origin) => {
161
+ cleanup();
162
+ const originalListeners = process.listeners('uncaughtException');
163
+ originalListeners.forEach((listener) => {
164
+ listener(error, origin);
165
+ });
166
+ });
167
+ }
168
+ getWidth() {
169
+ if (!this.widthExplicitlySet) {
170
+ this.width = getTerminalWidth();
171
+ }
172
+ return this.width;
173
+ }
174
+ getHeight() {
175
+ return this.height;
176
+ }
177
+ setLine(lineNumber, content) {
178
+ if (lineNumber < 1) {
179
+ throw new Error('Line numbers start at 1');
180
+ }
181
+ const lineIndex = lineNumber - 1;
182
+ // CRITICAL: Only expand if lineIndex is within reasonable bounds
183
+ // If someone calls setLine with a very high number (e.g., from waitForSpacebar),
184
+ // we should NOT expand the region - just ignore it or truncate
185
+ // The region height should be controlled by the component layer, not by setLine calls
186
+ if (lineIndex >= this.height) {
187
+ // Only expand if it's not too far beyond current height (safety check)
188
+ // This prevents accidental expansion from stray setLine calls
189
+ // Limit expansion to at most 10 lines beyond current height
190
+ const maxAllowedHeight = this.height + 10;
191
+ if (lineIndex < maxAllowedHeight) {
192
+ this.expandTo(lineIndex + 1);
193
+ }
194
+ else {
195
+ // Line number is way too high - expand to max allowed, then ignore the rest
196
+ this.expandTo(maxAllowedHeight);
197
+ // Don't update the line if it's beyond max allowed
198
+ return;
199
+ }
200
+ }
201
+ // Ensure pending frame has enough lines (but don't let it grow unbounded)
202
+ while (this.pendingFrame.length <= lineIndex && this.pendingFrame.length < this.height + 10) {
203
+ this.pendingFrame.push('');
204
+ }
205
+ // Only update if within bounds
206
+ if (lineIndex < this.pendingFrame.length) {
207
+ this.pendingFrame[lineIndex] = content;
208
+ }
209
+ // Schedule render
210
+ this.scheduleRender();
211
+ }
212
+ expandTo(newHeight) {
213
+ const oldHeight = this.height;
214
+ this.height = newHeight;
215
+ // Expand frames
216
+ while (this.pendingFrame.length < newHeight) {
217
+ this.pendingFrame.push('');
218
+ }
219
+ while (this.previousFrame.length < newHeight) {
220
+ this.previousFrame.push('');
221
+ }
222
+ // Reserve additional lines if initialized
223
+ if (this.isInitialized && newHeight > oldHeight && !this.disableRendering) {
224
+ const additionalLines = newHeight - oldHeight;
225
+ for (let i = 0; i < additionalLines; i++) {
226
+ this.stdout.write('\n');
227
+ }
228
+ // Re-save cursor position after expansion
229
+ this.stdout.write(ansi.SAVE_CURSOR);
230
+ }
231
+ }
232
+ set(content) {
233
+ const lines = content.split('\n');
234
+ if (lines.length > this.height) {
235
+ this.expandTo(lines.length);
236
+ }
237
+ this.pendingFrame = [...lines];
238
+ while (this.pendingFrame.length < this.height) {
239
+ this.pendingFrame.push('');
240
+ }
241
+ this.scheduleRender();
242
+ }
243
+ getLine(lineNumber) {
244
+ if (lineNumber < 1) {
245
+ throw new Error('Line numbers start at 1');
246
+ }
247
+ const lineIndex = lineNumber - 1;
248
+ return this.pendingFrame[lineIndex] || '';
249
+ }
250
+ clear() {
251
+ for (let i = 0; i < this.pendingFrame.length; i++) {
252
+ this.pendingFrame[i] = '';
253
+ }
254
+ this.scheduleRender();
255
+ }
256
+ clearLine(lineNumber) {
257
+ this.setLine(lineNumber, '');
258
+ }
259
+ scheduleRender() {
260
+ if (this.disableRendering) {
261
+ this.previousFrame = [...this.pendingFrame];
262
+ return;
263
+ }
264
+ if (this.throttle.shouldRender()) {
265
+ this.renderNow();
266
+ }
267
+ }
268
+ /**
269
+ * SIMPLIFIED RENDERING - back to basics
270
+ *
271
+ * Uses absolute positioning based on terminal rows:
272
+ * - Region is at bottom: starts at row (rows - height + 1), ends at row (rows)
273
+ * - On resize, we recalculate using new rows value
274
+ *
275
+ * 1. Calculate absolute row positions from terminal.rows
276
+ * 2. Move to start of region using absolute positioning
277
+ * 3. For each line: clear, write (truncated), move to start, move down
278
+ * 4. Save cursor position at end
279
+ */
280
+ renderNow() {
281
+ if (this.disableRendering) {
282
+ this.previousFrame = [...this.pendingFrame];
283
+ return;
284
+ }
285
+ if (!this.isInitialized) {
286
+ this.initializeRegion();
287
+ }
288
+ // CRITICAL: Don't prevent concurrent renders - the throttle handles that
289
+ // Removing isRendering check to prevent duplicates
290
+ // The throttle will naturally prevent too-frequent renders
291
+ // CRITICAL: Always disable auto-wrap before rendering
292
+ // Write directly to stdout to ensure it takes effect immediately
293
+ // This is especially important after resize when terminal might have reset state
294
+ // We ALWAYS keep auto-wrap disabled - never re-enable it (except on destroy)
295
+ // This prevents auto-reflow even when idle/paused
296
+ this.stdout.write(ansi.DISABLE_AUTO_WRAP);
297
+ this.renderBuffer.write(ansi.HIDE_CURSOR);
298
+ // CRITICAL: Use absolute positioning based on regionStartRow
299
+ // This is more reliable than SAVE/RESTORE, especially after resize
300
+ // If regionStartRow is not set, fall back to relative positioning
301
+ if (this.regionStartRow !== null) {
302
+ // Move to start of first line of region
303
+ this.renderBuffer.write(ansi.moveCursorTo(1, this.regionStartRow));
304
+ }
305
+ else {
306
+ // Fallback: use SAVE/RESTORE (shouldn't happen if initialized correctly)
307
+ this.renderBuffer.write(ansi.RESTORE_CURSOR);
308
+ if (this.height > 0) {
309
+ this.renderBuffer.write(ansi.moveCursorUp(this.height));
310
+ }
311
+ this.renderBuffer.write(ansi.MOVE_TO_START_OF_LINE);
312
+ }
313
+ // CRITICAL: Only render exactly height lines, no more
314
+ // pendingFrame might have more lines if setLine was called with high line numbers
315
+ // But we should ONLY render up to this.height lines
316
+ // Truncate pendingFrame if it's too long (safety check)
317
+ if (this.pendingFrame.length > this.height) {
318
+ this.pendingFrame = this.pendingFrame.slice(0, this.height);
319
+ }
320
+ const linesToRender = this.height;
321
+ // Render each line
322
+ for (let i = 0; i < linesToRender; i++) {
323
+ const content = this.pendingFrame[i] || '';
324
+ // Clear the line
325
+ this.renderBuffer.write(ansi.CLEAR_LINE);
326
+ this.renderBuffer.write(ansi.MOVE_TO_START_OF_LINE);
327
+ // CRITICAL: Reset colors to prevent color bleeding from previous line
328
+ // This ensures each line starts with a clean color state
329
+ this.renderBuffer.write(ansi.RESET);
330
+ // CRITICAL: Always use the latest width for truncation
331
+ // Re-read width right before truncating to prevent chopping during resize
332
+ // This is especially important when paused (waiting for spacebar)
333
+ const currentWidth = this.widthExplicitlySet ? this.width : getTerminalWidth();
334
+ // Truncate content to width (strip ANSI to measure, then truncate preserving ANSI)
335
+ const plainContent = content.replace(/\x1b\[[0-9;]*m/g, '');
336
+ let contentToWrite = content;
337
+ if (plainContent.length > currentWidth) {
338
+ let visualPos = 0;
339
+ let charPos = 0;
340
+ while (charPos < content.length && visualPos < currentWidth) {
341
+ if (content[charPos] === '\x1b') {
342
+ let ansiEnd = charPos + 1;
343
+ while (ansiEnd < content.length) {
344
+ if (content[ansiEnd] === 'm') {
345
+ ansiEnd++;
346
+ break;
347
+ }
348
+ if ((content[ansiEnd] >= '0' && content[ansiEnd] <= '9') ||
349
+ content[ansiEnd] === ';' ||
350
+ content[ansiEnd] === '[') {
351
+ ansiEnd++;
352
+ }
353
+ else {
354
+ break;
355
+ }
356
+ }
357
+ charPos = ansiEnd;
358
+ }
359
+ else {
360
+ charPos++;
361
+ visualPos++;
362
+ }
363
+ }
364
+ contentToWrite = content.substring(0, charPos);
365
+ }
366
+ // Write content
367
+ this.renderBuffer.write(contentToWrite);
368
+ // Move to start of line
369
+ this.renderBuffer.write(ansi.MOVE_TO_START_OF_LINE);
370
+ // Move down to next line (unless last line)
371
+ if (i < linesToRender - 1) {
372
+ this.renderBuffer.write(ansi.moveCursorDown(1));
373
+ }
374
+ }
375
+ // We're now at the start of the last rendered line
376
+ // Move down 1 to get to the line after the region
377
+ if (linesToRender > 0) {
378
+ this.renderBuffer.write(ansi.moveCursorDown(1));
379
+ }
380
+ // CRITICAL: Update regionStartRow if we're using absolute positioning
381
+ // After rendering, we're at row (regionStartRow + height)
382
+ // On next render, we'll use this to position correctly
383
+ // (We don't need to save cursor position since we're using absolute positioning)
384
+ // Show cursor
385
+ this.renderBuffer.write(ansi.SHOW_CURSOR);
386
+ // Flush
387
+ this.renderBuffer.flush();
388
+ // Update previous frame
389
+ this.previousFrame = [...this.pendingFrame];
390
+ }
391
+ flush() {
392
+ this.renderNow();
393
+ }
394
+ destroy(clearFirst = false) {
395
+ if (!this.isInitialized)
396
+ return;
397
+ // Stop the auto-wrap keep-alive interval
398
+ if (this.autoWrapKeepAliveInterval) {
399
+ clearInterval(this.autoWrapKeepAliveInterval);
400
+ this.autoWrapKeepAliveInterval = undefined;
401
+ }
402
+ if (clearFirst) {
403
+ this.clear();
404
+ this.renderNow();
405
+ }
406
+ // Re-enable auto-wrap
407
+ if (!this.disableRendering) {
408
+ this.stdout.write(ansi.ENABLE_AUTO_WRAP);
409
+ }
410
+ // Check if all lines are blank
411
+ const allLinesBlank = this.previousFrame.every(line => line.trim() === '');
412
+ if (allLinesBlank && this.height > 0) {
413
+ // Restore cursor, move to start of region, delete lines
414
+ this.renderBuffer.write(ansi.RESTORE_CURSOR);
415
+ this.renderBuffer.write(ansi.moveCursorUp(this.height));
416
+ this.renderBuffer.write(ansi.MOVE_TO_START_OF_LINE);
417
+ this.renderBuffer.write(ansi.deleteLines(this.height));
418
+ this.renderBuffer.flush();
419
+ }
420
+ if (this.resizeCleanup) {
421
+ this.resizeCleanup();
422
+ }
423
+ this.isInitialized = false;
424
+ }
425
+ }
426
+ //# sourceMappingURL=region.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"region.js","sourceRoot":"","sources":["../../src/native/region.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=region.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"region.test.d.ts","sourceRoot":"","sources":["../../src/native/region.test.ts"],"names":[],"mappings":""}