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
@@ -0,0 +1,82 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest';
2
+ import { flex, col, resolveFlexTree } from './flex.js';
3
+ import { Flex } from '../layout/flex.js';
4
+ import { Col } from '../components/col.js';
5
+ describe('flex API', () => {
6
+ let region;
7
+ beforeEach(() => {
8
+ region = {
9
+ setLine: () => { },
10
+ width: 80,
11
+ };
12
+ });
13
+ describe('flex()', () => {
14
+ it('should create a flex descriptor', () => {
15
+ const descriptor = flex({ gap: 2 }, 'Hello', 'World');
16
+ expect(descriptor.type).toBe('flex');
17
+ expect(descriptor.options.gap).toBe(2);
18
+ expect(descriptor.children).toHaveLength(2);
19
+ expect(descriptor.children[0]).toBe('Hello');
20
+ expect(descriptor.children[1]).toBe('World');
21
+ });
22
+ it('should accept col descriptors as children', () => {
23
+ const colDesc = col({ flex: 1 }, 'Hello');
24
+ const descriptor = flex({ gap: 2 }, colDesc);
25
+ expect(descriptor.children[0]).toBe(colDesc);
26
+ });
27
+ });
28
+ describe('col()', () => {
29
+ it('should create a col descriptor', () => {
30
+ const descriptor = col({ flex: 1 }, 'Hello');
31
+ expect(descriptor.type).toBe('col');
32
+ expect(descriptor.options.flex).toBe(1);
33
+ expect(descriptor.content).toBe('Hello');
34
+ });
35
+ it('should handle min and max options', () => {
36
+ const descriptor = col({ min: 5, max: 10 }, 'Hello');
37
+ expect(descriptor.options.min).toBe(5);
38
+ expect(descriptor.options.max).toBe(10);
39
+ });
40
+ });
41
+ describe('resolveFlexTree', () => {
42
+ it('should resolve a flex descriptor to a Flex component', () => {
43
+ const descriptor = flex({ gap: 2 }, 'Hello', 'World');
44
+ const component = resolveFlexTree(region, descriptor);
45
+ expect(component).toBeInstanceOf(Flex);
46
+ });
47
+ it('should resolve a col descriptor to a Col component', () => {
48
+ const descriptor = col({ flex: 1 }, 'Hello');
49
+ const component = resolveFlexTree(region, descriptor);
50
+ expect(component).toBeInstanceOf(Col);
51
+ });
52
+ it('should wrap plain strings in Col components', () => {
53
+ const descriptor = flex({ gap: 2 }, 'Hello');
54
+ const component = resolveFlexTree(region, descriptor);
55
+ expect(component).toBeInstanceOf(Flex);
56
+ // Flex now handles strings directly, so children are Renderables
57
+ // We can't easily check the content, but we can verify it renders correctly
58
+ expect(component.getPreferredWidth()).toBeGreaterThan(0);
59
+ });
60
+ it('should resolve nested flex structures', () => {
61
+ const innerFlex = flex({ gap: 1 }, 'A', 'B');
62
+ const outerFlex = flex({ gap: 2 }, innerFlex, 'C');
63
+ const component = resolveFlexTree(region, outerFlex);
64
+ expect(component).toBeInstanceOf(Flex);
65
+ expect(component['children']).toHaveLength(2);
66
+ expect(component['children'][0]).toBeInstanceOf(Flex);
67
+ // 'C' is a string, which gets converted to a Renderable (not a Col instance)
68
+ // We can verify it's a Renderable by checking it has the required methods
69
+ expect(component['children'][1]).toHaveProperty('render');
70
+ expect(component['children'][1]).toHaveProperty('getPreferredWidth');
71
+ });
72
+ it('should apply col options correctly', () => {
73
+ const descriptor = col({ flex: 2, min: 10, max: 50 }, 'Hello');
74
+ const component = resolveFlexTree(region, descriptor);
75
+ expect(component).toBeInstanceOf(Col);
76
+ expect(component.flexGrow).toBe(2);
77
+ expect(component.getMinWidth()).toBe(10);
78
+ expect(component.getMaxWidth()).toBe(50);
79
+ });
80
+ });
81
+ });
82
+ //# sourceMappingURL=flex.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flex.test.js","sourceRoot":"","sources":["../../src/ts/api/flex.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { TerminalRegion } from '../region';
2
+ import { type GridComponent, type Component, type GridOptions } from '../layout/grid';
3
+ import { style, type StyleOptions } from '../components/style';
4
+ /**
5
+ * Create a grid descriptor (for use with region.set())
6
+ * This is the main API - returns a descriptor that region.set() can handle
7
+ */
8
+ export declare function grid(options: GridOptions, ...children: (Component | string | GridDescriptor)[]): GridDescriptor;
9
+ export interface GridDescriptor {
10
+ type: 'grid';
11
+ options: GridOptions;
12
+ children: (Component | GridDescriptor)[];
13
+ }
14
+ /**
15
+ * Resolve a grid descriptor into a GridComponent
16
+ */
17
+ export declare function resolveGrid(region: TerminalRegion, descriptor: GridDescriptor): GridComponent;
18
+ /**
19
+ * Export style function for convenience
20
+ */
21
+ export { style, type StyleOptions };
22
+ //# sourceMappingURL=grid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../src/api/grid.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAc,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAyB,MAAM,gBAAgB,CAAC;AACzH,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE/D;;;GAGG;AACH,wBAAgB,IAAI,CAClB,OAAO,EAAE,WAAW,EACpB,GAAG,QAAQ,EAAE,CAAC,SAAS,GAAG,MAAM,GAAG,cAAc,CAAC,EAAE,GACnD,cAAc,CAgBhB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,CAAC,SAAS,GAAG,cAAc,CAAC,EAAE,CAAC;CAC1C;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,cAAc,GACzB,aAAa,CAmCf;AAED;;GAEG;AACH,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,CAAC"}
@@ -0,0 +1,65 @@
1
+ // Grid API - public functions for creating grid components
2
+ import { createGrid } from '../layout/grid';
3
+ import { style } from '../components/style';
4
+ /**
5
+ * Create a grid descriptor (for use with region.set())
6
+ * This is the main API - returns a descriptor that region.set() can handle
7
+ */
8
+ export function grid(options, ...children) {
9
+ // Convert strings to style components
10
+ // Convert nested GridDescriptors to Components
11
+ const convertedChildren = children.map(child => {
12
+ if (typeof child === 'string') {
13
+ return style({}, child);
14
+ }
15
+ // Keep GridDescriptors as-is - they'll be resolved later in resolveGrid
16
+ return child;
17
+ });
18
+ return {
19
+ type: 'grid',
20
+ options,
21
+ children: convertedChildren,
22
+ };
23
+ }
24
+ /**
25
+ * Resolve a grid descriptor into a GridComponent
26
+ */
27
+ export function resolveGrid(region, descriptor) {
28
+ // Convert children - GridDescriptors become Components, Components stay as-is
29
+ const convertedChildren = descriptor.children.map((child) => {
30
+ if (typeof child === 'object' && child !== null && 'type' in child && child.type === 'grid') {
31
+ // It's a nested GridDescriptor - recursively resolve it, then convert to Component
32
+ const nestedGridComponent = resolveGrid(region, child);
33
+ // Convert GridComponent to Component by wrapping it
34
+ return (ctx) => {
35
+ // Save current line content
36
+ const savedLines = [];
37
+ const startLine = ctx.rowIndex + 1;
38
+ const maxLines = nestedGridComponent.getHeight();
39
+ for (let i = 0; i < maxLines; i++) {
40
+ savedLines.push(region.getLine(startLine + i) || '');
41
+ }
42
+ // Render the nested grid
43
+ nestedGridComponent.render(ctx.columnIndex, startLine, ctx.availableWidth);
44
+ // Read back the rendered content
45
+ if (maxLines === 1) {
46
+ return region.getLine(startLine) || '';
47
+ }
48
+ else {
49
+ const lines = [];
50
+ for (let i = 0; i < maxLines; i++) {
51
+ lines.push(region.getLine(startLine + i) || '');
52
+ }
53
+ return lines;
54
+ }
55
+ };
56
+ }
57
+ return child;
58
+ });
59
+ return createGrid(region, descriptor.options, ...convertedChildren);
60
+ }
61
+ /**
62
+ * Export style function for convenience
63
+ */
64
+ export { style };
65
+ //# sourceMappingURL=grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid.js","sourceRoot":"","sources":["../../src/api/grid.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAG3D,OAAO,EAAE,UAAU,EAA+E,MAAM,gBAAgB,CAAC;AACzH,OAAO,EAAE,KAAK,EAAqB,MAAM,qBAAqB,CAAC;AAE/D;;;GAGG;AACH,MAAM,UAAU,IAAI,CAClB,OAAoB,EACpB,GAAG,QAAiD;IAEpD,sCAAsC;IACtC,+CAA+C;IAC/C,MAAM,iBAAiB,GAAmC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QAC7E,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC1B,CAAC;QACD,wEAAwE;QACxE,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,OAAO;QACP,QAAQ,EAAE,iBAAiB;KAC5B,CAAC;AACJ,CAAC;AAQD;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,MAAsB,EACtB,UAA0B;IAE1B,8EAA8E;IAC9E,MAAM,iBAAiB,GAAgB,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAa,EAAE;QAClF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5F,mFAAmF;YACnF,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACvD,oDAAoD;YACpD,OAAO,CAAC,GAAG,EAAE,EAAE;gBACb,4BAA4B;gBAC5B,MAAM,UAAU,GAAa,EAAE,CAAC;gBAChC,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACnC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,SAAS,EAAE,CAAC;gBACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;oBAClC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACvD,CAAC;gBAED,yBAAyB;gBACzB,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;gBAE3E,iCAAiC;gBACjC,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACnB,OAAO,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;gBACzC,CAAC;qBAAM,CAAC;oBACN,MAAM,KAAK,GAAa,EAAE,CAAC;oBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;wBAClC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBAClD,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,KAAkB,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,GAAG,iBAAiB,CAAC,CAAC;AACtE,CAAC;AAED;;GAEG;AACH,OAAO,EAAE,KAAK,EAAqB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=grid.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid.test.d.ts","sourceRoot":"","sources":["../../src/api/grid.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest';
2
+ import { grid, resolveGrid } from './grid';
3
+ import { style } from './grid';
4
+ import { TerminalRegion } from '../region';
5
+ describe('Grid API', () => {
6
+ let region;
7
+ beforeEach(() => {
8
+ region = new TerminalRegion({ disableRendering: true, width: 80 });
9
+ });
10
+ describe('grid()', () => {
11
+ it('should create a grid descriptor', () => {
12
+ const descriptor = grid({ template: [20, '1*'] }, 'A', 'B');
13
+ expect(descriptor.type).toBe('grid');
14
+ expect(descriptor.options.template).toEqual([20, '1*']);
15
+ expect(descriptor.children.length).toBe(2);
16
+ });
17
+ it('should convert strings to style components', () => {
18
+ const descriptor = grid({ template: [20, '1*'] }, 'A', 'B');
19
+ expect(descriptor.children.length).toBe(2);
20
+ // Both should be Components (functions)
21
+ expect(typeof descriptor.children[0]).toBe('function');
22
+ expect(typeof descriptor.children[1]).toBe('function');
23
+ });
24
+ it('should accept Component children', () => {
25
+ const childComponent = style({ color: 'red' }, 'Hello');
26
+ const descriptor = grid({ template: [20, '1*'] }, childComponent);
27
+ expect(descriptor.children.length).toBe(1);
28
+ expect(descriptor.children[0]).toBe(childComponent);
29
+ });
30
+ });
31
+ describe('resolveGrid', () => {
32
+ it('should resolve grid descriptor to GridComponent', () => {
33
+ const descriptor = grid({ template: [20, '1*'] }, 'A', 'B');
34
+ const gridComponent = resolveGrid(region, descriptor);
35
+ expect(gridComponent).toBeDefined();
36
+ expect(gridComponent.getHeight()).toBe(1);
37
+ });
38
+ it('should render resolved grid', () => {
39
+ const descriptor = grid({ template: [20, '1*'] }, 'A', 'B');
40
+ const gridComponent = resolveGrid(region, descriptor);
41
+ gridComponent.render(0, 1, 80);
42
+ const line = region.getLine(1);
43
+ expect(line).toContain('A');
44
+ expect(line).toContain('B');
45
+ });
46
+ });
47
+ });
48
+ //# sourceMappingURL=grid.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid.test.js","sourceRoot":"","sources":["../../src/api/grid.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { TerminalRegion } from '../region.js';
2
+ import type { Renderable } from './renderable.js';
3
+ /**
4
+ * Base class for terminal UI components
5
+ * Provides layout properties and rendering interface
6
+ *
7
+ * Note: We don't need parent/child relationships. Flex just needs:
8
+ * - An array of renderables to measure and render
9
+ * - No need for components to know their parent
10
+ */
11
+ export declare abstract class Component implements Renderable {
12
+ protected region: TerminalRegion;
13
+ protected children: Component[];
14
+ protected minWidth: number;
15
+ protected maxWidth: number;
16
+ readonly flexGrow: number;
17
+ readonly flexShrink: number;
18
+ protected width?: number;
19
+ constructor(region: TerminalRegion, options?: ComponentOptions);
20
+ /**
21
+ * Add a child component (for Flex to build its children array)
22
+ * No parent wiring needed - Flex just iterates over children
23
+ */
24
+ addChild(child: Component): void;
25
+ /**
26
+ * Get the preferred width of this component
27
+ */
28
+ abstract getPreferredWidth(): number;
29
+ /**
30
+ * Get the minimum width this component needs
31
+ */
32
+ getMinWidth(): number;
33
+ /**
34
+ * Get the maximum width this component can use
35
+ */
36
+ getMaxWidth(): number;
37
+ /**
38
+ * Render the component at the given position and width
39
+ */
40
+ abstract render(x: number, y: number, width: number): void;
41
+ /**
42
+ * Get the height this component will take
43
+ */
44
+ abstract getHeight(): number;
45
+ }
46
+ export interface ComponentOptions {
47
+ minWidth?: number;
48
+ maxWidth?: number;
49
+ flexGrow?: number;
50
+ flexShrink?: number;
51
+ width?: number;
52
+ }
53
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/ts/components/base.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;;;;;GAOG;AACH,8BAAsB,SAAU,YAAW,UAAU;IACnD,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC;IACjC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAM;IACrC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAK;IAC/B,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAY;IACtC,SAAgB,QAAQ,EAAE,MAAM,CAAK;IACrC,SAAgB,UAAU,EAAE,MAAM,CAAK;IACvC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;gBAEb,MAAM,EAAE,cAAc,EAAE,OAAO,GAAE,gBAAqB;IASlE;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAIhC;;OAEG;IACH,QAAQ,CAAC,iBAAiB,IAAI,MAAM;IAEpC;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAE1D;;OAEG;IACH,QAAQ,CAAC,SAAS,IAAI,MAAM;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,47 @@
1
+ // Base component system for terminal UI
2
+ // Simplified - no parent/child wiring needed
3
+ /**
4
+ * Base class for terminal UI components
5
+ * Provides layout properties and rendering interface
6
+ *
7
+ * Note: We don't need parent/child relationships. Flex just needs:
8
+ * - An array of renderables to measure and render
9
+ * - No need for components to know their parent
10
+ */
11
+ export class Component {
12
+ region;
13
+ children = [];
14
+ minWidth = 0;
15
+ maxWidth = Infinity;
16
+ flexGrow = 0;
17
+ flexShrink = 1;
18
+ width; // Explicit width override
19
+ constructor(region, options = {}) {
20
+ this.region = region;
21
+ this.minWidth = options.minWidth ?? 0;
22
+ this.maxWidth = options.maxWidth ?? Infinity;
23
+ this.flexGrow = options.flexGrow ?? 0;
24
+ this.flexShrink = options.flexShrink ?? 1;
25
+ this.width = options.width;
26
+ }
27
+ /**
28
+ * Add a child component (for Flex to build its children array)
29
+ * No parent wiring needed - Flex just iterates over children
30
+ */
31
+ addChild(child) {
32
+ this.children.push(child);
33
+ }
34
+ /**
35
+ * Get the minimum width this component needs
36
+ */
37
+ getMinWidth() {
38
+ return this.minWidth;
39
+ }
40
+ /**
41
+ * Get the maximum width this component can use
42
+ */
43
+ getMaxWidth() {
44
+ return this.maxWidth;
45
+ }
46
+ }
47
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/ts/components/base.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,6CAA6C;AAK7C;;;;;;;GAOG;AACH,MAAM,OAAgB,SAAS;IACnB,MAAM,CAAiB;IACvB,QAAQ,GAAgB,EAAE,CAAC;IAC3B,QAAQ,GAAW,CAAC,CAAC;IACrB,QAAQ,GAAW,QAAQ,CAAC;IACtB,QAAQ,GAAW,CAAC,CAAC;IACrB,UAAU,GAAW,CAAC,CAAC;IAC7B,KAAK,CAAU,CAAC,0BAA0B;IAEpD,YAAY,MAAsB,EAAE,UAA4B,EAAE;QAChE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC;QAC7C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,KAAgB;QACvB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAOD;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CAWF"}
@@ -0,0 +1,35 @@
1
+ import type { TerminalRegion } from '../region.js';
2
+ import type { Renderable } from './renderable.js';
3
+ export type TextOverflow = 'none' | 'ellipsis-end' | 'ellipsis-start' | 'ellipsis-middle' | 'wrap';
4
+ /**
5
+ * Create a column renderable - just a function, no class!
6
+ */
7
+ export declare function createCol(region: TerminalRegion, content: string, options?: ColOptions): Renderable;
8
+ export declare class Col {
9
+ private renderable;
10
+ private region;
11
+ private options;
12
+ constructor(region: TerminalRegion, content: string, options?: ColOptions);
13
+ getPreferredWidth(): number;
14
+ getMinWidth(): number;
15
+ getMaxWidth(): number;
16
+ getHeight(): number;
17
+ render(x: number, y: number, width: number): void;
18
+ get flexGrow(): number;
19
+ get flexShrink(): number;
20
+ /**
21
+ * Update content (creates new renderable)
22
+ */
23
+ setContent(content: string): void;
24
+ }
25
+ export interface ColOptions {
26
+ width?: number;
27
+ flex?: number;
28
+ min?: number;
29
+ max?: number;
30
+ overflow?: TextOverflow;
31
+ minWidth?: number;
32
+ maxWidth?: number;
33
+ flexGrow?: number;
34
+ }
35
+ //# sourceMappingURL=col.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"col.d.ts","sourceRoot":"","sources":["../../src/ts/components/col.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,cAAc,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,MAAM,CAAC;AAEnG;;GAEG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,UAAe,GACvB,UAAU,CAoJZ;AAGD,qBAAa,GAAG;IACd,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,OAAO,CAAa;gBAEhB,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe;IAM7E,iBAAiB,IAAI,MAAM;IAC3B,WAAW,IAAI,MAAM;IACrB,WAAW,IAAI,MAAM;IACrB,SAAS,IAAI,MAAM;IACnB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IACjD,IAAI,QAAQ,IAAI,MAAM,CAAqC;IAC3D,IAAI,UAAU,IAAI,MAAM,CAAuC;IAE/D;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAGlC;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,168 @@
1
+ // Column component - flex item wrapper for terminal UI
2
+ // Handles text content with overflow and flex properties
3
+ // Just a function that returns a Renderable object - no class needed!
4
+ import { truncateEnd, truncateStart, truncateMiddle, wrapText } from '../utils/text.js';
5
+ /**
6
+ * Create a column renderable - just a function, no class!
7
+ */
8
+ export function createCol(region, content, options = {}) {
9
+ // Calculate content width for default min (strip ANSI codes)
10
+ const contentWidth = content.replace(/\x1b\[[0-9;]*m/g, '').length;
11
+ // If width is specified, set both min and max to that value (fixed width)
12
+ const fixedWidth = options.width;
13
+ const minWidth = fixedWidth ?? options.min ?? options.minWidth ?? contentWidth;
14
+ const maxWidth = fixedWidth ?? options.max ?? options.maxWidth ?? Infinity;
15
+ const flexGrow = options.flex ?? options.flexGrow ?? 0;
16
+ const overflow = options.overflow ?? 'ellipsis-end';
17
+ // Return a plain object that implements Renderable
18
+ return {
19
+ flexGrow,
20
+ flexShrink: 1,
21
+ getPreferredWidth() {
22
+ return contentWidth;
23
+ },
24
+ getMinWidth() {
25
+ return minWidth;
26
+ },
27
+ getMaxWidth() {
28
+ return maxWidth;
29
+ },
30
+ getHeight() {
31
+ if (overflow === 'wrap') {
32
+ const width = undefined; // Will be set during render
33
+ return wrapText(content.replace(/\x1b\[[0-9;]*m/g, ''), width ?? contentWidth).length;
34
+ }
35
+ return 1;
36
+ },
37
+ render(x, y, width) {
38
+ let text = content;
39
+ const textWidth = content.replace(/\x1b\[[0-9;]*m/g, '').length;
40
+ // Handle overflow
41
+ if (overflow === 'ellipsis-end' && textWidth > width) {
42
+ text = truncateEnd(content.replace(/\x1b\[[0-9;]*m/g, ''), width);
43
+ }
44
+ else if (overflow === 'ellipsis-start' && textWidth > width) {
45
+ text = truncateStart(content.replace(/\x1b\[[0-9;]*m/g, ''), width);
46
+ }
47
+ else if (overflow === 'ellipsis-middle' && textWidth > width) {
48
+ text = truncateMiddle(content.replace(/\x1b\[[0-9;]*m/g, ''), width);
49
+ }
50
+ else if (overflow === 'wrap') {
51
+ const lines = wrapText(content.replace(/\x1b\[[0-9;]*m/g, ''), width);
52
+ for (let i = 0; i < lines.length; i++) {
53
+ // For wrap, we need to handle x position too
54
+ const existingLine = region.getLine(y + i) || '';
55
+ const before = existingLine.slice(0, x);
56
+ const after = existingLine.slice(x + width);
57
+ const wrappedText = lines[i].padEnd(width, ' ');
58
+ region.setLine(y + i, before + wrappedText + after);
59
+ }
60
+ return;
61
+ }
62
+ // Pad to width
63
+ const plainText = text.replace(/\x1b\[[0-9;]*m/g, '');
64
+ const padding = width - plainText.length;
65
+ if (padding > 0) {
66
+ text = text + ' '.repeat(padding);
67
+ }
68
+ // Get existing line and merge at x position
69
+ const existingLine = region.getLine(y) || '';
70
+ // Helper to find character position for a visual column (accounting for ANSI codes)
71
+ const findCharPosForVisual = (line, targetVisual) => {
72
+ let charPos = 0;
73
+ let visualPos = 0;
74
+ while (charPos < line.length && visualPos < targetVisual) {
75
+ if (line[charPos] === '\x1b') {
76
+ // Found start of ANSI code, skip to end
77
+ let ansiEnd = charPos + 1;
78
+ while (ansiEnd < line.length) {
79
+ if (line[ansiEnd] === 'm') {
80
+ ansiEnd++;
81
+ break;
82
+ }
83
+ // Valid ANSI code characters
84
+ if ((line[ansiEnd] >= '0' && line[ansiEnd] <= '9') ||
85
+ line[ansiEnd] === ';' ||
86
+ line[ansiEnd] === '[') {
87
+ ansiEnd++;
88
+ }
89
+ else {
90
+ break;
91
+ }
92
+ }
93
+ charPos = ansiEnd;
94
+ }
95
+ else {
96
+ charPos++;
97
+ visualPos++;
98
+ }
99
+ }
100
+ return charPos;
101
+ };
102
+ // Calculate visual width of existing line
103
+ const existingPlain = existingLine.replace(/\x1b\[[0-9;]*m/g, '');
104
+ const existingVisualWidth = existingPlain.length;
105
+ if (x === 0 && existingVisualWidth === 0) {
106
+ // Starting at beginning with empty line - just set it
107
+ region.setLine(y, text);
108
+ }
109
+ else {
110
+ // Need to merge: before + text + after
111
+ const beforeEnd = findCharPosForVisual(existingLine, x);
112
+ // If existing line is shorter than x, we need to pad it first
113
+ if (existingVisualWidth < x) {
114
+ // Pad existing line to x position, then append our text
115
+ const padding = x - existingVisualWidth;
116
+ const newLine = existingLine + ' '.repeat(padding) + text;
117
+ region.setLine(y, newLine);
118
+ return;
119
+ }
120
+ // Find where x + width starts in the existing line
121
+ let afterStart;
122
+ if (existingVisualWidth <= x + width) {
123
+ // Existing line ends before or at our end position - no "after" content
124
+ afterStart = existingLine.length;
125
+ }
126
+ else {
127
+ // Find where x + width starts in the existing line
128
+ afterStart = findCharPosForVisual(existingLine, x + width);
129
+ }
130
+ const before = existingLine.slice(0, beforeEnd);
131
+ const after = existingLine.slice(afterStart);
132
+ // Build new line
133
+ const newLine = before + text + after;
134
+ // Only update if the section we're replacing actually changed
135
+ // Extract the section we're replacing from existing line
136
+ const existingSection = existingLine.slice(beforeEnd, afterStart);
137
+ if (existingSection !== text) {
138
+ region.setLine(y, newLine);
139
+ }
140
+ }
141
+ },
142
+ };
143
+ }
144
+ // Keep Col class for backward compatibility (used by resolveFlexTree)
145
+ export class Col {
146
+ renderable;
147
+ region;
148
+ options;
149
+ constructor(region, content, options = {}) {
150
+ this.region = region;
151
+ this.options = options;
152
+ this.renderable = createCol(region, content, options);
153
+ }
154
+ getPreferredWidth() { return this.renderable.getPreferredWidth(); }
155
+ getMinWidth() { return this.renderable.getMinWidth(); }
156
+ getMaxWidth() { return this.renderable.getMaxWidth(); }
157
+ getHeight() { return this.renderable.getHeight(); }
158
+ render(x, y, width) { this.renderable.render(x, y, width); }
159
+ get flexGrow() { return this.renderable.flexGrow; }
160
+ get flexShrink() { return this.renderable.flexShrink; }
161
+ /**
162
+ * Update content (creates new renderable)
163
+ */
164
+ setContent(content) {
165
+ this.renderable = createCol(this.region, content, this.options);
166
+ }
167
+ }
168
+ //# sourceMappingURL=col.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"col.js","sourceRoot":"","sources":["../../src/ts/components/col.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=col.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"col.test.d.ts","sourceRoot":"","sources":["../../src/ts/components/col.test.ts"],"names":[],"mappings":""}