linecraft 0.1.0 → 0.2.0

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 +313 -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 +31 -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
package/lib/region.js CHANGED
@@ -1,74 +1,512 @@
1
- import { native } from './native.js';
2
- import { applyStyle } from './utils/colors.js';
1
+ import { RegionRenderer } from './native/region-renderer';
2
+ import { applyStyle } from './utils/colors';
3
+ import { getTerminalWidth } from './utils/terminal';
4
+ import { resolveGrid } from './api/grid';
5
+ /**
6
+ * TerminalRegion - High-level API for terminal region management
7
+ *
8
+ * This is the public API that wraps the low-level RegionRenderer.
9
+ * It adds component orchestration, grid layout, and styling support.
10
+ */
3
11
  export class TerminalRegion {
4
- handle;
12
+ renderer;
5
13
  _width;
6
- _height; // Current height (may expand)
14
+ _height;
15
+ // Track ALL component descriptors that have been set/added, so we can re-render them
16
+ // This is an array of descriptors (or arrays of descriptors for multi-line sections)
17
+ allComponentDescriptors = [];
18
+ // Track all lines in the region (component + waitForSpacebar + any whitespace)
19
+ // This allows us to re-render the entire region correctly
20
+ regionLines = [];
21
+ // Prevent concurrent re-renders (e.g., multiple resize events firing rapidly)
22
+ isReRendering = false;
7
23
  constructor(options = {}) {
8
- const x = options.x ?? 0;
9
- const y = options.y ?? 0;
10
- this._width = options.width ?? (process.stdout.columns ?? 80);
11
- this._height = options.height ?? 1; // Default to 1 line, expands as needed
12
- this.handle = native.createRegion(x, y, this._width, this._height);
24
+ this._width = options.width ?? getTerminalWidth();
25
+ this._height = options.height ?? 1;
26
+ // Create the low-level renderer
27
+ // Only pass width if it was explicitly set by the user (to allow auto-resize)
28
+ const rendererOptions = {
29
+ height: this._height,
30
+ stdout: options.stdout,
31
+ disableRendering: options.disableRendering,
32
+ // CRITICAL: Pass callback to re-render last content during keep-alive and resize
33
+ // This ensures ALL components (grid) are re-rendered with current width
34
+ // The region orchestrates this - components don't manage their own re-rendering
35
+ onKeepAlive: () => this.reRenderLastContent(),
36
+ };
37
+ // Only set width if user explicitly provided it (allows auto-resize to work)
38
+ if (options.width !== undefined) {
39
+ rendererOptions.width = options.width;
40
+ }
41
+ this.renderer = new RegionRenderer(rendererOptions);
13
42
  }
14
43
  get width() {
44
+ // Sync with renderer width (important for auto-resize)
45
+ this._width = this.renderer.getWidth();
15
46
  return this._width;
16
47
  }
17
48
  get height() {
18
49
  return this._height;
19
50
  }
51
+ getLine(lineNumber) {
52
+ return this.renderer.getLine(lineNumber);
53
+ }
54
+ /**
55
+ * Set a single line (1-based line numbers)
56
+ *
57
+ * Note: With auto-wrap disabled globally, we manage all wrapping ourselves.
58
+ * This method sets a single line - if content needs to wrap, it should
59
+ * be handled by the component layer (grid, style, etc.) before calling this.
60
+ * Content that exceeds the region width will be truncated by the terminal.
61
+ *
62
+ * The region will automatically expand if lineNumber exceeds current height.
63
+ */
20
64
  setLine(lineNumber, content) {
21
65
  if (lineNumber < 1) {
22
66
  throw new Error('Line numbers start at 1');
23
67
  }
24
- // Zig handles batching and expansion automatically
68
+ // Update our height tracking if this line is beyond current height
69
+ // BUT respect the expansion limit (max 10 lines beyond current height)
70
+ // This prevents accidental expansion from stray setLine calls
71
+ if (lineNumber > this._height) {
72
+ const maxAllowedHeight = this._height + 10;
73
+ this._height = Math.min(lineNumber, maxAllowedHeight);
74
+ }
75
+ // Extract text and apply styling
25
76
  const text = typeof content === 'string' ? content : content.text;
26
- // Apply styling if provided
27
77
  const styled = applyStyle(text, typeof content === 'object' ? content.style : undefined);
28
- native.setLine(this.handle, lineNumber, styled);
29
- // Zig will:
30
- // - Convert to 0-based internally
31
- // - Expand region if lineNumber > current height
32
- // - Buffer this update in pending_frame
33
- // - Check throttle
34
- // - Schedule render if needed (or render immediately if throttle allows)
35
- // Update our height tracking if Zig expanded
36
- if (lineNumber > this._height) {
37
- this._height = lineNumber;
78
+ // CRITICAL: Track this line as static content (not part of component)
79
+ // This allows us to preserve it during re-renders
80
+ while (this.regionLines.length < lineNumber) {
81
+ this.regionLines.push({ type: 'static', lineNumber: this.regionLines.length + 1 });
38
82
  }
83
+ this.regionLines[lineNumber - 1] = {
84
+ type: 'static',
85
+ content: styled,
86
+ lineNumber
87
+ };
88
+ // Update the renderer (this will expand the renderer if needed)
89
+ this.renderer.setLine(lineNumber, styled);
39
90
  }
40
- set(content) {
91
+ /**
92
+ * Set content in the region, replacing all existing content.
93
+ * This always does a full replace - if the new content is the same length,
94
+ * it will overwrite the existing lines. If it's a different length, it will
95
+ * resize the region accordingly.
96
+ */
97
+ set(content, ...additionalLines) {
98
+ // Check if we have multiple grid descriptors (for multi-line rendering)
99
+ const allContent = additionalLines.length > 0
100
+ ? [content, ...additionalLines]
101
+ : [content];
102
+ // Check if first item is a grid descriptor
103
+ if (allContent.length > 0 && typeof allContent[0] === 'object' && allContent[0] !== null && 'type' in allContent[0] && allContent[0].type === 'grid') {
104
+ // Grid descriptor(s)
105
+ this.allComponentDescriptors = [allContent.length > 1 ? allContent : allContent[0]];
106
+ const width = this.width;
107
+ let totalHeight = 0;
108
+ const renderer = this.renderer;
109
+ const oldHeight = this._height;
110
+ // Calculate total height first
111
+ for (const descriptor of allContent) {
112
+ if (descriptor.type === 'grid') {
113
+ const component = resolveGrid(this, descriptor);
114
+ totalHeight += component.getHeight();
115
+ }
116
+ }
117
+ // FULL REPLACE: Truncate both frames to exact new height
118
+ renderer.pendingFrame = renderer.pendingFrame.slice(0, totalHeight);
119
+ renderer.previousFrame = renderer.previousFrame.slice(0, totalHeight);
120
+ while (renderer.pendingFrame.length < totalHeight) {
121
+ renderer.pendingFrame.push('');
122
+ }
123
+ while (renderer.previousFrame.length < totalHeight) {
124
+ renderer.previousFrame.push('');
125
+ }
126
+ for (let i = 0; i < totalHeight; i++) {
127
+ renderer.pendingFrame[i] = '';
128
+ }
129
+ this._height = totalHeight;
130
+ this.regionLines = [];
131
+ for (let i = 0; i < totalHeight; i++) {
132
+ this.regionLines[i] = { type: 'component', lineNumber: i + 1 };
133
+ }
134
+ // CRITICAL: Disable auto-rendering during component rendering
135
+ // Components call setLine() which triggers scheduleRender(), but we want
136
+ // to batch all updates and render once at the end
137
+ const wasRenderingDisabled = renderer.disableRendering;
138
+ renderer.disableRendering = true;
139
+ // Render each component on its line
140
+ let currentLine = 1;
141
+ for (const descriptor of allContent) {
142
+ if (descriptor.type === 'grid') {
143
+ const component = resolveGrid(this, descriptor);
144
+ const height = component.getHeight();
145
+ component.render(0, currentLine, width);
146
+ currentLine += height;
147
+ }
148
+ }
149
+ renderer.height = totalHeight;
150
+ if (totalHeight > oldHeight) {
151
+ renderer.expandTo(totalHeight);
152
+ }
153
+ // Re-enable rendering and flush once
154
+ renderer.disableRendering = wasRenderingDisabled;
155
+ // Note: flush() is async but we don't await here - caller should await if needed
156
+ void this.renderer.flush();
157
+ return;
158
+ }
159
+ // Single grid descriptor
160
+ if (typeof content === 'object' && content !== null && 'type' in content && content.type === 'grid') {
161
+ this.allComponentDescriptors = [content];
162
+ const component = resolveGrid(this, content);
163
+ const width = this.width;
164
+ const height = component.getHeight();
165
+ const renderer = this.renderer;
166
+ const oldHeight = this._height;
167
+ renderer.pendingFrame = renderer.pendingFrame.slice(0, height);
168
+ renderer.previousFrame = renderer.previousFrame.slice(0, height);
169
+ while (renderer.pendingFrame.length < height) {
170
+ renderer.pendingFrame.push('');
171
+ }
172
+ while (renderer.previousFrame.length < height) {
173
+ renderer.previousFrame.push('');
174
+ }
175
+ for (let i = 0; i < height; i++) {
176
+ renderer.pendingFrame[i] = '';
177
+ }
178
+ this._height = height;
179
+ this.regionLines = [];
180
+ for (let i = 0; i < height; i++) {
181
+ this.regionLines[i] = { type: 'component', lineNumber: i + 1 };
182
+ }
183
+ renderer.height = height;
184
+ if (height > oldHeight) {
185
+ renderer.expandTo(height);
186
+ }
187
+ // CRITICAL: Disable auto-rendering during component rendering
188
+ const wasRenderingDisabled = renderer.disableRendering;
189
+ renderer.disableRendering = true;
190
+ component.render(0, 1, width);
191
+ if (renderer.pendingFrame.length > height) {
192
+ renderer.pendingFrame = renderer.pendingFrame.slice(0, height);
193
+ }
194
+ // Re-enable rendering and flush once
195
+ renderer.disableRendering = wasRenderingDisabled;
196
+ // Note: flush() is async but we don't await here - caller should await if needed
197
+ void this.renderer.flush();
198
+ return;
199
+ }
200
+ // Original string/array handling
41
201
  if (typeof content === 'string') {
42
202
  // Single string with \n line breaks
43
- native.set(this.handle, content);
44
- // Update height based on line count
45
- this._height = content.split('\n').length;
203
+ const lineCount = content.split('\n').length;
204
+ this._height = lineCount;
205
+ this.renderer.set(content);
46
206
  }
47
- else {
48
- // Array of LineContent
49
- const lines = content.map(c => applyStyle(c.text, c.style)).join('\n');
50
- native.set(this.handle, lines);
207
+ else if (Array.isArray(content)) {
208
+ // Array of LineContent - apply styling to each
51
209
  this._height = content.length;
210
+ const lines = content.map(c => applyStyle(c.text, c.style)).join('\n');
211
+ this.renderer.set(lines);
212
+ }
213
+ }
214
+ /**
215
+ * Add content to the region, appending it after existing content.
216
+ * This is useful for adding multiple sections without overwriting previous content.
217
+ */
218
+ add(content, ...additionalLines) {
219
+ // Check if we have multiple grid descriptors
220
+ const allContent = additionalLines.length > 0
221
+ ? [content, ...additionalLines]
222
+ : [content];
223
+ // Check if first item is a grid descriptor
224
+ if (allContent.length > 0 && typeof allContent[0] === 'object' && allContent[0] !== null && 'type' in allContent[0] && allContent[0].type === 'grid') {
225
+ const width = this.width;
226
+ let totalHeight = 0;
227
+ // Calculate total height of new content
228
+ const resolvedComponents = [];
229
+ for (const descriptor of allContent) {
230
+ if (descriptor.type === 'grid') {
231
+ const component = resolveGrid(this, descriptor);
232
+ resolvedComponents.push(component);
233
+ totalHeight += component.getHeight();
234
+ }
235
+ }
236
+ const renderer = this.renderer;
237
+ const startLine = this._height + 1;
238
+ // Extend frames to accommodate new content
239
+ while (renderer.pendingFrame.length < this._height + totalHeight) {
240
+ renderer.pendingFrame.push('');
241
+ }
242
+ // CRITICAL: Only expand previousFrame if we're actually rendering
243
+ // previousFrame should represent what was actually rendered, not what we plan to render
244
+ // If disableRendering=true, we haven't rendered yet, so don't expand previousFrame
245
+ // This prevents false negatives in content-change detection
246
+ if (!renderer.disableRendering) {
247
+ while (renderer.previousFrame.length < this._height + totalHeight) {
248
+ renderer.previousFrame.push('');
249
+ }
250
+ }
251
+ // Clear lines where new content will be rendered
252
+ for (let i = 0; i < totalHeight; i++) {
253
+ renderer.pendingFrame[this._height + i] = '';
254
+ }
255
+ // Update regionLines
256
+ for (let i = 0; i < totalHeight; i++) {
257
+ this.regionLines.push({ type: 'component', lineNumber: this._height + i + 1 });
258
+ }
259
+ // Track this new content
260
+ const descriptorsToAdd = allContent.length > 1 ? allContent : allContent[0];
261
+ this.allComponentDescriptors.push(descriptorsToAdd);
262
+ // Update region height BEFORE rendering
263
+ this._height += totalHeight;
264
+ renderer.height = this._height;
265
+ // Expand region to accommodate new content
266
+ renderer.expandTo(this._height);
267
+ // CRITICAL: Disable auto-rendering during component rendering
268
+ // Components call setLine() which triggers scheduleRender(), but we want
269
+ // to batch all updates and render once at the end
270
+ const wasRenderingDisabled = renderer.disableRendering;
271
+ renderer.disableRendering = true;
272
+ // Render each component starting from startLine
273
+ let currentLine = startLine;
274
+ for (const component of resolvedComponents) {
275
+ const height = component.getHeight();
276
+ component.render(0, currentLine, width);
277
+ currentLine += height;
278
+ }
279
+ // Re-enable rendering and flush once
280
+ renderer.disableRendering = wasRenderingDisabled;
281
+ // Note: flush() is async but we don't await here - caller should await if needed
282
+ void this.renderer.flush();
283
+ return;
284
+ }
285
+ // Single grid descriptor
286
+ if (typeof content === 'object' && content !== null && 'type' in content && content.type === 'grid') {
287
+ const component = resolveGrid(this, content);
288
+ const width = this.width;
289
+ const height = component.getHeight();
290
+ const startLine = this._height + 1;
291
+ const renderer = this.renderer;
292
+ // Extend frames
293
+ while (renderer.pendingFrame.length < this._height + height) {
294
+ renderer.pendingFrame.push('');
295
+ }
296
+ // CRITICAL: Only expand previousFrame if we're actually rendering
297
+ // previousFrame should represent what was actually rendered, not what we plan to render
298
+ // If disableRendering=true, we haven't rendered yet, so don't expand previousFrame
299
+ // This prevents false negatives in content-change detection
300
+ if (!renderer.disableRendering) {
301
+ while (renderer.previousFrame.length < this._height + height) {
302
+ renderer.previousFrame.push('');
303
+ }
304
+ }
305
+ // Clear lines where new content will be rendered
306
+ for (let i = 0; i < height; i++) {
307
+ renderer.pendingFrame[this._height + i] = '';
308
+ }
309
+ // Update regionLines
310
+ for (let i = 0; i < height; i++) {
311
+ this.regionLines.push({ type: 'component', lineNumber: this._height + i + 1 });
312
+ }
313
+ // Track this new content
314
+ this.allComponentDescriptors.push(content);
315
+ // Update region height BEFORE rendering
316
+ this._height += height;
317
+ renderer.height = this._height;
318
+ // Expand region to accommodate new content
319
+ renderer.expandTo(this._height);
320
+ // CRITICAL: Disable auto-rendering during component rendering
321
+ const wasRenderingDisabled = renderer.disableRendering;
322
+ renderer.disableRendering = true;
323
+ // Render component
324
+ component.render(0, startLine, width);
325
+ // Re-enable rendering and flush once
326
+ renderer.disableRendering = wasRenderingDisabled;
327
+ // Note: flush() is async but we don't await here - caller should await if needed
328
+ void this.renderer.flush();
329
+ return;
330
+ }
331
+ // String/array handling - append after existing content
332
+ if (typeof content === 'string') {
333
+ const lines = content.split('\n');
334
+ const startLine = this._height + 1;
335
+ // CRITICAL: Disable auto-rendering during line setting to batch updates
336
+ // setLine() will expand the region automatically, but we want to batch renders
337
+ const renderer = this.renderer;
338
+ const wasRenderingDisabled = renderer.disableRendering;
339
+ renderer.disableRendering = true;
340
+ // Set all lines (setLine() will expand region automatically)
341
+ for (let i = 0; i < lines.length; i++) {
342
+ this.setLine(startLine + i, lines[i]);
343
+ }
344
+ // Update region height tracking (setLine() already updated renderer.height)
345
+ this._height = startLine + lines.length - 1;
346
+ // Re-enable rendering and flush once
347
+ renderer.disableRendering = wasRenderingDisabled;
348
+ this.renderer.flush();
349
+ }
350
+ else if (Array.isArray(content)) {
351
+ const startLine = this._height + 1;
352
+ // CRITICAL: Disable auto-rendering during line setting to batch updates
353
+ // setLine() will expand the region automatically, but we want to batch renders
354
+ const renderer = this.renderer;
355
+ const wasRenderingDisabled = renderer.disableRendering;
356
+ renderer.disableRendering = true;
357
+ // Set all lines (setLine() will expand region automatically)
358
+ for (let i = 0; i < content.length; i++) {
359
+ this.setLine(startLine + i, String(content[i]));
360
+ }
361
+ // Update region height tracking (setLine() already updated renderer.height)
362
+ this._height = startLine + content.length - 1;
363
+ // Re-enable rendering and flush once
364
+ renderer.disableRendering = wasRenderingDisabled;
365
+ this.renderer.flush();
52
366
  }
53
367
  }
54
368
  clearLine(lineNumber) {
55
369
  if (lineNumber < 1) {
56
370
  throw new Error('Line numbers start at 1');
57
371
  }
58
- native.clearLine(this.handle, lineNumber);
372
+ this.renderer.clearLine(lineNumber);
59
373
  }
60
374
  clear() {
61
- native.clearRegion(this.handle);
375
+ this.renderer.clear();
62
376
  }
63
- flush() {
377
+ async flush() {
64
378
  // Force immediate render of any pending updates (bypasses throttle)
65
- native.flush(this.handle);
379
+ // Returns a promise that resolves when rendering is complete
380
+ await this.renderer.flush();
381
+ }
382
+ /**
383
+ * Re-render the last content that was set
384
+ * This re-renders all components (grid) with the current width
385
+ * Used by resize handler and keep-alive to prevent auto-reflow
386
+ * The region orchestrates this - components don't manage their own re-rendering
387
+ *
388
+ * CRITICAL: Re-renders the entire region, including:
389
+ * - Component lines (grid)
390
+ * - Static lines (waitForSpacebar, whitespace)
391
+ * This ensures everything is in the correct position
392
+ */
393
+ reRenderLastContent() {
394
+ // CRITICAL: Prevent concurrent re-renders
395
+ // If we're already re-rendering, skip this call to prevent duplicates
396
+ if (this.isReRendering) {
397
+ return;
398
+ }
399
+ if (this.allComponentDescriptors.length > 0) {
400
+ this.isReRendering = true;
401
+ try {
402
+ const renderer = this.renderer;
403
+ renderer.logToFile(`[reRenderLastContent] CALLED: height=${this._height} lastRenderedHeight=${renderer.lastRenderedHeight}`);
404
+ const width = this.width;
405
+ // First, calculate total height of ALL content (components + static lines)
406
+ let totalHeight = 0;
407
+ for (const descriptorOrArray of this.allComponentDescriptors) {
408
+ const descriptors = Array.isArray(descriptorOrArray) && descriptorOrArray.length > 0 && typeof descriptorOrArray[0] === 'object' && descriptorOrArray[0] !== null && 'type' in descriptorOrArray[0]
409
+ ? descriptorOrArray
410
+ : [descriptorOrArray];
411
+ for (const descriptor of descriptors) {
412
+ if (descriptor.type === 'grid') {
413
+ const component = resolveGrid(this, descriptor);
414
+ totalHeight += component.getHeight();
415
+ }
416
+ }
417
+ }
418
+ // CRITICAL: Include static lines (waitForSpacebar, whitespace) in total height
419
+ // Count how many static lines exist beyond the component height
420
+ let maxStaticLineNumber = 0;
421
+ for (let i = 0; i < this.regionLines.length; i++) {
422
+ const lineInfo = this.regionLines[i];
423
+ if (lineInfo.type === 'static' && lineInfo.content !== undefined) {
424
+ maxStaticLineNumber = Math.max(maxStaticLineNumber, lineInfo.lineNumber);
425
+ }
426
+ }
427
+ // totalHeight should be at least as large as the highest static line number
428
+ totalHeight = Math.max(totalHeight, maxStaticLineNumber);
429
+ // CRITICAL: Ensure frames are the correct size BEFORE re-rendering
430
+ // This prevents overwriting or truncating content incorrectly
431
+ while (renderer.pendingFrame.length < totalHeight) {
432
+ renderer.pendingFrame.push('');
433
+ }
434
+ while (renderer.previousFrame.length < totalHeight) {
435
+ renderer.previousFrame.push('');
436
+ }
437
+ // Truncate frames to exact height (in case they're too large)
438
+ renderer.pendingFrame = renderer.pendingFrame.slice(0, totalHeight);
439
+ renderer.previousFrame = renderer.previousFrame.slice(0, totalHeight);
440
+ // CRITICAL: Don't clear previousFrame on resize/re-render
441
+ // We need to preserve previousFrame so renderNow() can detect if content actually changed
442
+ // If we clear it, renderNow() will always think content changed and re-render unnecessarily
443
+ // The previousFrame will be updated after renderNow() completes
444
+ // Clear all lines before re-rendering
445
+ for (let i = 0; i < totalHeight; i++) {
446
+ renderer.pendingFrame[i] = '';
447
+ }
448
+ // CRITICAL: Disable auto-rendering during component rendering
449
+ // Components call setLine() which triggers scheduleRender(), but we want
450
+ // to batch all updates and render once at the end
451
+ const wasRenderingDisabled = renderer.disableRendering;
452
+ renderer.disableRendering = true;
453
+ // Now re-render ALL component descriptors starting from line 1
454
+ let currentLine = 1;
455
+ for (const descriptorOrArray of this.allComponentDescriptors) {
456
+ // Each entry can be a single descriptor or an array of descriptors (for multi-line sections)
457
+ const descriptors = Array.isArray(descriptorOrArray) && descriptorOrArray.length > 0 && typeof descriptorOrArray[0] === 'object' && descriptorOrArray[0] !== null && 'type' in descriptorOrArray[0]
458
+ ? descriptorOrArray
459
+ : [descriptorOrArray];
460
+ // Re-render each component in this section
461
+ for (const descriptor of descriptors) {
462
+ if (descriptor.type === 'grid') {
463
+ const component = resolveGrid(this, descriptor);
464
+ const componentHeight = component.getHeight();
465
+ // Render component at current line
466
+ component.render(0, currentLine, width);
467
+ // Move to next line
468
+ currentLine += componentHeight;
469
+ }
470
+ }
471
+ }
472
+ // Update height to match all rendered content
473
+ this._height = totalHeight;
474
+ renderer.height = totalHeight;
475
+ // CRITICAL: DON'T update lastRenderedHeight before flushing
476
+ // This would change the state and make renderNow() think height hasn't increased
477
+ // when it actually has. Let renderNow() update lastRenderedHeight after rendering.
478
+ // This keeps the state consistent with the normal set() path
479
+ const oldLastRenderedHeight = renderer.lastRenderedHeight;
480
+ renderer.logToFile(`[reRenderLastContent] BEFORE flush: height=${totalHeight} lastRenderedHeight=${oldLastRenderedHeight}`);
481
+ // CRITICAL: Re-render static lines (waitForSpacebar, whitespace)
482
+ // These are tracked in regionLines with type 'static'
483
+ for (let i = 0; i < this.regionLines.length; i++) {
484
+ const lineInfo = this.regionLines[i];
485
+ if (lineInfo.type === 'static' && lineInfo.content !== undefined) {
486
+ // Re-render this static line
487
+ const lineNumber = i + 1;
488
+ // Ensure pendingFrame has enough lines
489
+ while (renderer.pendingFrame.length < lineNumber) {
490
+ renderer.pendingFrame.push('');
491
+ }
492
+ renderer.pendingFrame[lineNumber - 1] = lineInfo.content;
493
+ }
494
+ }
495
+ // Re-enable rendering and flush once
496
+ renderer.disableRendering = wasRenderingDisabled;
497
+ this.renderer.flush();
498
+ }
499
+ finally {
500
+ this.isReRendering = false;
501
+ }
502
+ }
66
503
  }
67
504
  setThrottle(fps) {
68
- native.setThrottleFps(this.handle, fps);
505
+ // Note: setThrottleFps doesn't exist on native region, removing for now
506
+ // this.region.setThrottleFps(fps);
69
507
  }
70
- destroy() {
71
- native.destroyRegion(this.handle);
508
+ async destroy(clearFirst = false) {
509
+ await this.renderer.destroy(clearFirst);
72
510
  }
73
511
  }
74
512
  //# sourceMappingURL=region.js.map
package/lib/region.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"region.js","sourceRoot":"","sources":["../src/ts/region.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"region.js","sourceRoot":"","sources":["../src/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/region.test.ts"],"names":[],"mappings":""}