@effect-tui/react 0.15.2 → 2.0.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 (313) hide show
  1. package/README.md +11 -2
  2. package/dist/src/codeblock.d.ts +1 -1
  3. package/dist/src/codeblock.d.ts.map +1 -1
  4. package/dist/src/codeblock.js +2 -2
  5. package/dist/src/codeblock.js.map +1 -1
  6. package/dist/src/components/ListView.d.ts +4 -4
  7. package/dist/src/components/ListView.d.ts.map +1 -1
  8. package/dist/src/components/ListView.js +16 -17
  9. package/dist/src/components/ListView.js.map +1 -1
  10. package/dist/src/components/Markdown.js +3 -3
  11. package/dist/src/components/Markdown.js.map +1 -1
  12. package/dist/src/components/MultilineTextInput.d.ts.map +1 -1
  13. package/dist/src/components/MultilineTextInput.js +133 -305
  14. package/dist/src/components/MultilineTextInput.js.map +1 -1
  15. package/dist/src/components/TextInput.d.ts.map +1 -1
  16. package/dist/src/components/TextInput.js +51 -98
  17. package/dist/src/components/TextInput.js.map +1 -1
  18. package/dist/src/components/text-editing.d.ts +61 -0
  19. package/dist/src/components/text-editing.d.ts.map +1 -1
  20. package/dist/src/components/text-editing.js +131 -0
  21. package/dist/src/components/text-editing.js.map +1 -1
  22. package/dist/src/console/ConsolePopover.d.ts +7 -1
  23. package/dist/src/console/ConsolePopover.d.ts.map +1 -1
  24. package/dist/src/console/ConsolePopover.js +55 -74
  25. package/dist/src/console/ConsolePopover.js.map +1 -1
  26. package/dist/src/debug/DebugOverlay.d.ts.map +1 -1
  27. package/dist/src/debug/DebugOverlay.js +3 -57
  28. package/dist/src/debug/DebugOverlay.js.map +1 -1
  29. package/dist/src/debug/DiagnosticsPanel.js +1 -1
  30. package/dist/src/debug/DiagnosticsPanel.js.map +1 -1
  31. package/dist/src/dev.d.ts +5 -117
  32. package/dist/src/dev.d.ts.map +1 -1
  33. package/dist/src/dev.js +3 -333
  34. package/dist/src/dev.js.map +1 -1
  35. package/dist/src/hooks/use-scroll.d.ts +31 -35
  36. package/dist/src/hooks/use-scroll.d.ts.map +1 -1
  37. package/dist/src/hooks/use-scroll.js +51 -90
  38. package/dist/src/hooks/use-scroll.js.map +1 -1
  39. package/dist/src/hosts/base.d.ts +13 -2
  40. package/dist/src/hosts/base.d.ts.map +1 -1
  41. package/dist/src/hosts/base.js +74 -2
  42. package/dist/src/hosts/base.js.map +1 -1
  43. package/dist/src/hosts/box.d.ts +2 -2
  44. package/dist/src/hosts/box.d.ts.map +1 -1
  45. package/dist/src/hosts/box.js +29 -2
  46. package/dist/src/hosts/box.js.map +1 -1
  47. package/dist/src/hosts/canvas.d.ts +24 -4
  48. package/dist/src/hosts/canvas.d.ts.map +1 -1
  49. package/dist/src/hosts/canvas.js +107 -41
  50. package/dist/src/hosts/canvas.js.map +1 -1
  51. package/dist/src/hosts/codeblock.d.ts +10 -12
  52. package/dist/src/hosts/codeblock.d.ts.map +1 -1
  53. package/dist/src/hosts/codeblock.js +38 -35
  54. package/dist/src/hosts/codeblock.js.map +1 -1
  55. package/dist/src/hosts/flex-container.d.ts +3 -3
  56. package/dist/src/hosts/flex-container.d.ts.map +1 -1
  57. package/dist/src/hosts/flex-container.js +20 -5
  58. package/dist/src/hosts/flex-container.js.map +1 -1
  59. package/dist/src/hosts/index.d.ts +3 -2
  60. package/dist/src/hosts/index.d.ts.map +1 -1
  61. package/dist/src/hosts/index.js +2 -1
  62. package/dist/src/hosts/index.js.map +1 -1
  63. package/dist/src/hosts/layout-helpers.d.ts +10 -0
  64. package/dist/src/hosts/layout-helpers.d.ts.map +1 -0
  65. package/dist/src/hosts/layout-helpers.js +10 -0
  66. package/dist/src/hosts/layout-helpers.js.map +1 -0
  67. package/dist/src/hosts/leaf.d.ts +14 -0
  68. package/dist/src/hosts/leaf.d.ts.map +1 -0
  69. package/dist/src/hosts/leaf.js +31 -0
  70. package/dist/src/hosts/leaf.js.map +1 -0
  71. package/dist/src/hosts/overlay-item.d.ts +2 -2
  72. package/dist/src/hosts/overlay-item.d.ts.map +1 -1
  73. package/dist/src/hosts/overlay-item.js +7 -2
  74. package/dist/src/hosts/overlay-item.js.map +1 -1
  75. package/dist/src/hosts/overlay.d.ts +2 -2
  76. package/dist/src/hosts/overlay.d.ts.map +1 -1
  77. package/dist/src/hosts/overlay.js +6 -9
  78. package/dist/src/hosts/overlay.js.map +1 -1
  79. package/dist/src/hosts/scroll.d.ts +54 -26
  80. package/dist/src/hosts/scroll.d.ts.map +1 -1
  81. package/dist/src/hosts/scroll.js +185 -87
  82. package/dist/src/hosts/scroll.js.map +1 -1
  83. package/dist/src/hosts/single-child.d.ts.map +1 -1
  84. package/dist/src/hosts/single-child.js +2 -0
  85. package/dist/src/hosts/single-child.js.map +1 -1
  86. package/dist/src/hosts/spacer.d.ts +3 -3
  87. package/dist/src/hosts/spacer.d.ts.map +1 -1
  88. package/dist/src/hosts/spacer.js +8 -3
  89. package/dist/src/hosts/spacer.js.map +1 -1
  90. package/dist/src/hosts/text.d.ts +22 -18
  91. package/dist/src/hosts/text.d.ts.map +1 -1
  92. package/dist/src/hosts/text.js +108 -131
  93. package/dist/src/hosts/text.js.map +1 -1
  94. package/dist/src/hosts/vstack.js +1 -1
  95. package/dist/src/hosts/vstack.js.map +1 -1
  96. package/dist/src/hosts/zstack.d.ts +3 -3
  97. package/dist/src/hosts/zstack.d.ts.map +1 -1
  98. package/dist/src/hosts/zstack.js +13 -8
  99. package/dist/src/hosts/zstack.js.map +1 -1
  100. package/dist/src/index.d.ts +2 -2
  101. package/dist/src/index.d.ts.map +1 -1
  102. package/dist/src/internal/dev/hmr.d.ts +20 -0
  103. package/dist/src/internal/dev/hmr.d.ts.map +1 -0
  104. package/dist/src/internal/dev/hmr.js +93 -0
  105. package/dist/src/internal/dev/hmr.js.map +1 -0
  106. package/dist/src/internal/dev/runtime.d.ts +24 -0
  107. package/dist/src/internal/dev/runtime.d.ts.map +1 -0
  108. package/dist/src/internal/dev/runtime.js +135 -0
  109. package/dist/src/internal/dev/runtime.js.map +1 -0
  110. package/dist/src/internal/dev/ui.d.ts +13 -0
  111. package/dist/src/internal/dev/ui.d.ts.map +1 -0
  112. package/dist/src/internal/dev/ui.js +51 -0
  113. package/dist/src/internal/dev/ui.js.map +1 -0
  114. package/dist/src/internal/renderer/context.d.ts +9 -0
  115. package/dist/src/internal/renderer/context.d.ts.map +1 -0
  116. package/dist/src/internal/renderer/context.js +22 -0
  117. package/dist/src/internal/renderer/context.js.map +1 -0
  118. package/dist/src/internal/renderer/core/FrameBuilder.d.ts +18 -0
  119. package/dist/src/internal/renderer/core/FrameBuilder.d.ts.map +1 -0
  120. package/dist/src/internal/renderer/core/FrameBuilder.js +40 -0
  121. package/dist/src/internal/renderer/core/FrameBuilder.js.map +1 -0
  122. package/dist/src/internal/renderer/core/RendererState.d.ts +41 -0
  123. package/dist/src/internal/renderer/core/RendererState.d.ts.map +1 -0
  124. package/dist/src/internal/renderer/core/RendererState.js +70 -0
  125. package/dist/src/internal/renderer/core/RendererState.js.map +1 -0
  126. package/dist/src/internal/renderer/core/index.d.ts +3 -0
  127. package/dist/src/internal/renderer/core/index.d.ts.map +1 -0
  128. package/dist/src/internal/renderer/core/index.js +3 -0
  129. package/dist/src/internal/renderer/core/index.js.map +1 -0
  130. package/dist/src/internal/renderer/index.d.ts +40 -0
  131. package/dist/src/internal/renderer/index.d.ts.map +1 -0
  132. package/dist/src/internal/renderer/index.js +543 -0
  133. package/dist/src/internal/renderer/index.js.map +1 -0
  134. package/dist/src/internal/renderer/input/InputProcessor.d.ts +30 -0
  135. package/dist/src/internal/renderer/input/InputProcessor.d.ts.map +1 -0
  136. package/dist/src/internal/renderer/input/InputProcessor.js +122 -0
  137. package/dist/src/internal/renderer/input/InputProcessor.js.map +1 -0
  138. package/dist/src/internal/renderer/input/index.d.ts +2 -0
  139. package/dist/src/internal/renderer/input/index.d.ts.map +1 -0
  140. package/dist/src/internal/renderer/input/index.js +2 -0
  141. package/dist/src/internal/renderer/input/index.js.map +1 -0
  142. package/dist/src/internal/renderer/lifecycle/EventBus.d.ts +42 -0
  143. package/dist/src/internal/renderer/lifecycle/EventBus.d.ts.map +1 -0
  144. package/dist/src/internal/renderer/lifecycle/EventBus.js +97 -0
  145. package/dist/src/internal/renderer/lifecycle/EventBus.js.map +1 -0
  146. package/dist/src/internal/renderer/lifecycle/ProcessLifecycle.d.ts +13 -0
  147. package/dist/src/internal/renderer/lifecycle/ProcessLifecycle.d.ts.map +1 -0
  148. package/dist/src/internal/renderer/lifecycle/ProcessLifecycle.js +111 -0
  149. package/dist/src/internal/renderer/lifecycle/ProcessLifecycle.js.map +1 -0
  150. package/dist/src/internal/renderer/lifecycle/RenderCache.d.ts +3 -0
  151. package/dist/src/internal/renderer/lifecycle/RenderCache.d.ts.map +1 -0
  152. package/dist/src/internal/renderer/lifecycle/RenderCache.js +9 -0
  153. package/dist/src/internal/renderer/lifecycle/RenderCache.js.map +1 -0
  154. package/dist/src/internal/renderer/lifecycle/index.d.ts +4 -0
  155. package/dist/src/internal/renderer/lifecycle/index.d.ts.map +1 -0
  156. package/dist/src/internal/renderer/lifecycle/index.js +4 -0
  157. package/dist/src/internal/renderer/lifecycle/index.js.map +1 -0
  158. package/dist/src/internal/renderer/modes/FullscreenRenderer.d.ts +12 -0
  159. package/dist/src/internal/renderer/modes/FullscreenRenderer.d.ts.map +1 -0
  160. package/dist/src/internal/renderer/modes/FullscreenRenderer.js +54 -0
  161. package/dist/src/internal/renderer/modes/FullscreenRenderer.js.map +1 -0
  162. package/dist/src/internal/renderer/modes/InlineRenderer.d.ts +25 -0
  163. package/dist/src/internal/renderer/modes/InlineRenderer.d.ts.map +1 -0
  164. package/dist/src/internal/renderer/modes/InlineRenderer.js +166 -0
  165. package/dist/src/internal/renderer/modes/InlineRenderer.js.map +1 -0
  166. package/dist/src/internal/renderer/modes/RendererMode.d.ts +42 -0
  167. package/dist/src/internal/renderer/modes/RendererMode.d.ts.map +1 -0
  168. package/dist/src/internal/renderer/modes/RendererMode.js +2 -0
  169. package/dist/src/internal/renderer/modes/RendererMode.js.map +1 -0
  170. package/dist/src/internal/renderer/modes/StaticContentRenderer.d.ts +25 -0
  171. package/dist/src/internal/renderer/modes/StaticContentRenderer.d.ts.map +1 -0
  172. package/dist/src/internal/renderer/modes/StaticContentRenderer.js +49 -0
  173. package/dist/src/internal/renderer/modes/StaticContentRenderer.js.map +1 -0
  174. package/dist/src/internal/renderer/modes/index.d.ts +5 -0
  175. package/dist/src/internal/renderer/modes/index.d.ts.map +1 -0
  176. package/dist/src/internal/renderer/modes/index.js +4 -0
  177. package/dist/src/internal/renderer/modes/index.js.map +1 -0
  178. package/dist/src/internal/renderer/terminal/KeyboardCapabilityProbe.d.ts +13 -0
  179. package/dist/src/internal/renderer/terminal/KeyboardCapabilityProbe.d.ts.map +1 -0
  180. package/dist/src/internal/renderer/terminal/KeyboardCapabilityProbe.js +75 -0
  181. package/dist/src/internal/renderer/terminal/KeyboardCapabilityProbe.js.map +1 -0
  182. package/dist/src/internal/renderer/terminal/TerminalSetup.d.ts +29 -0
  183. package/dist/src/internal/renderer/terminal/TerminalSetup.d.ts.map +1 -0
  184. package/dist/src/internal/renderer/terminal/TerminalSetup.js +82 -0
  185. package/dist/src/internal/renderer/terminal/TerminalSetup.js.map +1 -0
  186. package/dist/src/internal/renderer/terminal/index.d.ts +3 -0
  187. package/dist/src/internal/renderer/terminal/index.d.ts.map +1 -0
  188. package/dist/src/internal/renderer/terminal/index.js +3 -0
  189. package/dist/src/internal/renderer/terminal/index.js.map +1 -0
  190. package/dist/src/internal/renderer/types.d.ts +122 -0
  191. package/dist/src/internal/renderer/types.d.ts.map +1 -0
  192. package/dist/src/internal/renderer/types.js +2 -0
  193. package/dist/src/internal/renderer/types.js.map +1 -0
  194. package/dist/src/motion/hooks.d.ts +1 -1
  195. package/dist/src/motion/hooks.js +1 -1
  196. package/dist/src/reconciler/host-config.js +2 -2
  197. package/dist/src/reconciler/host-config.js.map +1 -1
  198. package/dist/src/reconciler/types.d.ts +5 -1
  199. package/dist/src/reconciler/types.d.ts.map +1 -1
  200. package/dist/src/renderer-context.d.ts +1 -8
  201. package/dist/src/renderer-context.d.ts.map +1 -1
  202. package/dist/src/renderer-context.js +1 -21
  203. package/dist/src/renderer-context.js.map +1 -1
  204. package/dist/src/renderer-types.d.ts +1 -115
  205. package/dist/src/renderer-types.d.ts.map +1 -1
  206. package/dist/src/renderer.d.ts +1 -31
  207. package/dist/src/renderer.d.ts.map +1 -1
  208. package/dist/src/renderer.js +1 -495
  209. package/dist/src/renderer.js.map +1 -1
  210. package/dist/src/test/render-tui.d.ts +3 -3
  211. package/dist/src/test/render-tui.d.ts.map +1 -1
  212. package/dist/src/test/render-tui.js +16 -9
  213. package/dist/src/test/render-tui.js.map +1 -1
  214. package/dist/src/utils/alignment.d.ts +1 -1
  215. package/dist/src/utils/alignment.d.ts.map +1 -1
  216. package/dist/src/utils/alignment.js +0 -2
  217. package/dist/src/utils/alignment.js.map +1 -1
  218. package/dist/src/utils/border.d.ts +1 -1
  219. package/dist/src/utils/border.d.ts.map +1 -1
  220. package/dist/src/utils/border.js +2 -0
  221. package/dist/src/utils/border.js.map +1 -1
  222. package/dist/src/utils/console-helpers.d.ts +19 -0
  223. package/dist/src/utils/console-helpers.d.ts.map +1 -0
  224. package/dist/src/utils/console-helpers.js +61 -0
  225. package/dist/src/utils/console-helpers.js.map +1 -0
  226. package/dist/src/utils/index.d.ts +2 -1
  227. package/dist/src/utils/index.d.ts.map +1 -1
  228. package/dist/src/utils/index.js +2 -1
  229. package/dist/src/utils/index.js.map +1 -1
  230. package/dist/src/utils/styles.d.ts +8 -1
  231. package/dist/src/utils/styles.d.ts.map +1 -1
  232. package/dist/src/utils/styles.js +10 -8
  233. package/dist/src/utils/styles.js.map +1 -1
  234. package/dist/src/utils/text-layout.d.ts +22 -0
  235. package/dist/src/utils/text-layout.d.ts.map +1 -0
  236. package/dist/src/utils/text-layout.js +37 -0
  237. package/dist/src/utils/text-layout.js.map +1 -0
  238. package/dist/src/utils/text-wrap.d.ts +31 -1
  239. package/dist/src/utils/text-wrap.d.ts.map +1 -1
  240. package/dist/src/utils/text-wrap.js +205 -48
  241. package/dist/src/utils/text-wrap.js.map +1 -1
  242. package/dist/src/visualize/index.js +1 -1
  243. package/dist/src/visualize/index.js.map +1 -1
  244. package/dist/tsconfig.tsbuildinfo +1 -1
  245. package/package.json +2 -2
  246. package/src/codeblock.tsx +2 -2
  247. package/src/components/ListView.tsx +21 -23
  248. package/src/components/Markdown.tsx +3 -3
  249. package/src/components/MultilineTextInput.tsx +138 -344
  250. package/src/components/TextInput.tsx +54 -99
  251. package/src/components/text-editing.ts +180 -0
  252. package/src/console/ConsolePopover.tsx +124 -107
  253. package/src/debug/DebugOverlay.ts +15 -74
  254. package/src/debug/DiagnosticsPanel.tsx +1 -1
  255. package/src/dev.tsx +5 -458
  256. package/src/hooks/use-scroll.ts +85 -145
  257. package/src/hosts/base.ts +86 -3
  258. package/src/hosts/box.ts +37 -2
  259. package/src/hosts/canvas.ts +128 -42
  260. package/src/hosts/codeblock.ts +48 -35
  261. package/src/hosts/flex-container.ts +25 -6
  262. package/src/hosts/index.ts +11 -2
  263. package/src/hosts/layout-helpers.ts +20 -0
  264. package/src/hosts/leaf.ts +36 -0
  265. package/src/hosts/overlay-item.ts +8 -2
  266. package/src/hosts/overlay.ts +13 -11
  267. package/src/hosts/scroll.ts +228 -106
  268. package/src/hosts/single-child.ts +2 -0
  269. package/src/hosts/spacer.ts +8 -3
  270. package/src/hosts/text.ts +126 -132
  271. package/src/hosts/vstack.ts +1 -1
  272. package/src/hosts/zstack.ts +14 -9
  273. package/src/index.ts +2 -2
  274. package/src/internal/dev/hmr.ts +101 -0
  275. package/src/internal/dev/runtime.ts +170 -0
  276. package/src/internal/dev/ui.tsx +87 -0
  277. package/src/internal/renderer/context.ts +27 -0
  278. package/src/{renderer → internal/renderer}/core/FrameBuilder.ts +2 -2
  279. package/src/internal/renderer/index.ts +689 -0
  280. package/src/{renderer → internal/renderer}/input/InputProcessor.ts +10 -1
  281. package/src/{renderer → internal/renderer}/lifecycle/EventBus.ts +9 -1
  282. package/src/internal/renderer/lifecycle/ProcessLifecycle.ts +125 -0
  283. package/src/internal/renderer/lifecycle/index.ts +3 -0
  284. package/src/{renderer → internal/renderer}/modes/InlineRenderer.ts +5 -2
  285. package/src/{renderer → internal/renderer}/modes/RendererMode.ts +1 -1
  286. package/src/{renderer → internal/renderer}/modes/StaticContentRenderer.ts +5 -2
  287. package/src/internal/renderer/terminal/KeyboardCapabilityProbe.ts +91 -0
  288. package/src/{renderer/lifecycle → internal/renderer/terminal}/TerminalSetup.ts +4 -22
  289. package/src/internal/renderer/terminal/index.ts +2 -0
  290. package/src/internal/renderer/types.ts +129 -0
  291. package/src/motion/hooks.ts +1 -1
  292. package/src/reconciler/host-config.ts +2 -2
  293. package/src/reconciler/types.ts +7 -1
  294. package/src/renderer-context.ts +1 -27
  295. package/src/renderer-types.ts +10 -123
  296. package/src/renderer.ts +1 -619
  297. package/src/test/render-tui.ts +16 -10
  298. package/src/utils/alignment.ts +1 -3
  299. package/src/utils/border.ts +11 -1
  300. package/src/utils/console-helpers.ts +86 -0
  301. package/src/utils/index.ts +15 -1
  302. package/src/utils/styles.ts +16 -4
  303. package/src/utils/text-layout.ts +65 -0
  304. package/src/utils/text-wrap.ts +261 -48
  305. package/src/visualize/index.tsx +1 -1
  306. package/src/renderer/lifecycle/ResizeManager.ts +0 -65
  307. package/src/renderer/lifecycle/index.ts +0 -4
  308. /package/src/{renderer → internal/renderer}/core/RendererState.ts +0 -0
  309. /package/src/{renderer → internal/renderer}/core/index.ts +0 -0
  310. /package/src/{renderer → internal/renderer}/input/index.ts +0 -0
  311. /package/src/{renderer → internal/renderer}/lifecycle/RenderCache.ts +0 -0
  312. /package/src/{renderer → internal/renderer}/modes/FullscreenRenderer.ts +0 -0
  313. /package/src/{renderer → internal/renderer}/modes/index.ts +0 -0
@@ -1,496 +1,2 @@
1
- import { performance } from "node:perf_hooks";
2
- import { fileURLToPath } from "node:url";
3
- import { ANSI, bufferToString } from "@effect-tui/core";
4
- import React, {} from "react";
5
- import { createTerminalWriter, writeToTerminal } from "./console/ConsoleCapture.js";
6
- import { DEFAULT_FPS } from "./constants.js";
7
- import { requestExit } from "./exit.js";
8
- import * as Prof from "./profiler.js";
9
- import { flushSync, reconciler } from "./reconciler/host-config.js";
10
- // Extracted modules
11
- import { FrameBuilder, RendererState } from "./renderer/core/index.js";
12
- import { InputProcessor } from "./renderer/input/index.js";
13
- import { EventBus, getRenderCache, TerminalSetup } from "./renderer/lifecycle/index.js";
14
- import { FullscreenRenderer, InlineRenderer, StaticContentRenderer } from "./renderer/modes/index.js";
15
- import { RendererContext } from "./renderer-context.js";
16
- import { startDevRuntime } from "./dev.js";
17
- export { RendererContext, useRenderer, useTerminalSize } from "./renderer-context.js";
18
- export function createRenderer(options) {
19
- const fps = options?.fps ?? DEFAULT_FPS;
20
- // Use custom stdout if provided, otherwise use process.stdout with bypassed capture
21
- let stdout;
22
- if (options?.stdout) {
23
- // Use custom stdout as-is (e.g., for testing with MockStdout)
24
- stdout = options.stdout;
25
- }
26
- else {
27
- // Create a proxy that bypasses console capture for writes
28
- // This ensures Effect.log etc. don't corrupt the TUI
29
- const terminalWrite = createTerminalWriter();
30
- stdout = new Proxy(process.stdout, {
31
- get(target, prop) {
32
- if (prop === "write") {
33
- return terminalWrite;
34
- }
35
- const value = target[prop];
36
- // Bind methods to preserve `this` context (critical for .on(), .removeListener(), etc.)
37
- if (typeof value === "function") {
38
- return value.bind(target);
39
- }
40
- return value;
41
- },
42
- });
43
- }
44
- const stdin = options?.stdin ?? process.stdin;
45
- const mode = options?.mode ?? "fullscreen";
46
- const exitOnCtrlC = options?.exitOnCtrlC ?? true;
47
- const handleSignals = options?.handleSignals ?? true;
48
- const exitOnSignal = options?.exitOnSignal ?? true;
49
- const signalExitCodes = {
50
- SIGINT: 130,
51
- SIGTERM: 143,
52
- ...options?.signalExitCodes,
53
- };
54
- const manualMode = options?.manualMode ?? false;
55
- const enableDiff = options?.diff ?? !manualMode;
56
- const skipTerminalSetup = options?.skipTerminalSetup ?? false;
57
- const enablePaste = options?.enablePaste ?? true;
58
- const enableMouse = options?.enableMouse ?? mode === "fullscreen";
59
- const debugHook = options?.debug?.onFrame;
60
- // Initialize state
61
- const state = new RendererState(stdout.columns || 80, stdout.rows || 24);
62
- const events = new EventBus();
63
- const frameBuilder = new FrameBuilder();
64
- // Terminal setup/teardown
65
- const terminal = new TerminalSetup(stdout, stdin, {
66
- mode,
67
- enablePaste,
68
- enableMouse,
69
- skipTerminalSetup,
70
- });
71
- // Render mode (fullscreen or inline)
72
- const renderMode = mode === "fullscreen" ? new FullscreenRenderer() : new InlineRenderer();
73
- // Static content renderer (inline mode only)
74
- const staticRenderer = mode === "inline" ? new StaticContentRenderer(stdout, state.palette) : null;
75
- // Input processing
76
- const inputProcessor = new InputProcessor({
77
- exitOnCtrlC,
78
- dispatchKey: (key) => {
79
- events.dispatchKey(key);
80
- return key.defaultPrevented ?? false;
81
- },
82
- dispatchMouse: (mouse) => events.dispatchMouse(mouse),
83
- dispatchPaste: (text) => events.dispatchPaste(text),
84
- flushSync: (fn) => flushSync(fn) ?? undefined,
85
- onInputProcessed: () => {
86
- if (!manualMode)
87
- renderFrame();
88
- },
89
- onQuit: () => {
90
- // Clean up terminal state before exiting
91
- renderer.stop();
92
- requestExit(0);
93
- },
94
- });
95
- const handleInlineFullRerender = () => {
96
- if (mode !== "inline" || !staticRenderer)
97
- return;
98
- const inlineMode = renderMode;
99
- if (!inlineMode.needsFullRerender())
100
- return;
101
- // Clear screen + scrollback + cursor home
102
- stdout.write(ANSI.screen.clear + ANSI.screen.clearScrollback + ANSI.cursor.home);
103
- // Replay all cached static content
104
- const cachedStatic = staticRenderer.getCachedOutput();
105
- if (cachedStatic) {
106
- stdout.write(cachedStatic);
107
- }
108
- // Reset state
109
- inlineMode.clearFullRerenderFlag();
110
- state.invalidateBuffers();
111
- };
112
- const flushInlineStatic = (container, frameWidth) => {
113
- if (mode !== "inline" || !container?.staticDirty || !container.staticRoot || !staticRenderer) {
114
- return "";
115
- }
116
- const inlineMode = renderMode;
117
- const prevHeight = inlineMode.getPreviousHeight();
118
- let output = "";
119
- // Step 1: Clear the dynamic area (move up + clear to end of screen)
120
- if (prevHeight > 0) {
121
- output += ANSI.cursor.up(prevHeight) + ANSI.cursor.startOfLine + ANSI.screen.clearToEnd;
122
- }
123
- // Step 2: Append static content (cursor ends at bottom of static)
124
- output += staticRenderer.render(container.staticRoot, frameWidth);
125
- // Step 3: Reset previousHeight to 0 (we cleared dynamic, starting fresh)
126
- inlineMode.reset();
127
- inlineMode.forceFullOutputOnce(); // Force full output to resync cursor tracking after static
128
- state.invalidateBuffers();
129
- container.staticDirty = false;
130
- return output;
131
- };
132
- // The render frame logic
133
- const renderFrame = () => {
134
- const frameStart = Prof.startFrame();
135
- const frameStartMs = performance.now();
136
- // Flush any pending React updates before measuring/layout.
137
- // Ensures resize-driven state (useTerminalSize) is reflected in the host tree.
138
- flushSync(() => { });
139
- const frameWidth = state.width;
140
- const frameHeight = state.height;
141
- let contentH = frameHeight;
142
- const container = renderer._container;
143
- const root = container?.root ?? null;
144
- // Must render if dirty OR if static content needs flushing
145
- if ((!state.dirty && !container?.staticDirty) || !root)
146
- return;
147
- state.dirty = false;
148
- try {
149
- // Handle full rerender on resize (Ink-style: clear everything + replay static)
150
- handleInlineFullRerender();
151
- // Handle static content: clear dynamic area, append static, then fresh dynamic render
152
- // Note: IL (insert lines) won't work here because inline mode uses relative positioning
153
- // and IL would desync the screen state from our buffer tracking.
154
- const staticOutput = flushInlineStatic(container ?? null, frameWidth);
155
- // For inline mode, measure content unconstrained to handle overflow
156
- let actualContentHeight = frameHeight;
157
- if (mode === "inline") {
158
- const size = root.measure(frameWidth, Number.MAX_SAFE_INTEGER);
159
- actualContentHeight = size.h;
160
- }
161
- // Buffer height: content height for inline (to capture all content), terminal height for fullscreen
162
- const bufferHeight = mode === "inline" ? Math.max(actualContentHeight, frameHeight) : frameHeight;
163
- // Ensure buffers exist
164
- state.ensureBuffers(frameWidth, bufferHeight);
165
- if (!state.nextBuffer)
166
- return;
167
- // Build frame (clear, layout, render)
168
- const timings = frameBuilder.build(root, state.nextBuffer, state.palette, frameWidth, bufferHeight);
169
- // Generate output
170
- const t = Prof.startPhase();
171
- const diffStartMs = performance.now();
172
- const { output: modeOutput, contentHeight } = renderMode.generateOutput({
173
- nextBuffer: state.nextBuffer,
174
- prevBuffer: state.prevBuffer,
175
- palette: state.palette,
176
- frameWidth,
177
- frameHeight,
178
- contentHeight: actualContentHeight,
179
- enableDiff,
180
- stdout,
181
- });
182
- // Combine static + dynamic output for atomic write
183
- // Wrap in synchronized output mode (DECSET 2026) to prevent tearing
184
- // Terminals that don't support it will safely ignore these sequences
185
- const output = ANSI.sync.begin + staticOutput + modeOutput + state.palette.sgr(0) + ANSI.sync.end;
186
- contentH = contentHeight;
187
- const diffAnsiMs = performance.now() - diffStartMs;
188
- Prof.endPhase("diff+ansi", t);
189
- // Write output (single atomic write prevents visual glitches)
190
- const writeT = Prof.startPhase();
191
- const writeStart = performance.now();
192
- stdout.write(output);
193
- const writeMs = performance.now() - writeStart;
194
- Prof.endPhase("write", writeT);
195
- Prof.endFrame(frameStart);
196
- const frameMs = performance.now() - frameStartMs;
197
- // Swap buffers
198
- state.swapBuffers();
199
- // Build stats
200
- const stats = {
201
- mode,
202
- width: state.width,
203
- height: state.height,
204
- contentHeight: contentH,
205
- bytes: Buffer.byteLength(output, "utf8"),
206
- frameMs,
207
- phases: {
208
- clear: timings.clear,
209
- layout: timings.layout,
210
- render: timings.render,
211
- diffAnsi: diffAnsiMs,
212
- write: writeMs,
213
- },
214
- timestamp: performance.now(),
215
- };
216
- if (debugHook)
217
- debugHook(stats);
218
- if (events.hasFrameHandlers)
219
- events.dispatchFrame(stats);
220
- }
221
- catch (err) {
222
- console.error("[effect-tui] Render error:", err);
223
- state.markDirty();
224
- }
225
- };
226
- let onExit = null;
227
- let onSignal = null;
228
- let onUncaughtException = null;
229
- let onUnhandledRejection = null;
230
- // Build renderer object
231
- const renderer = {
232
- get width() {
233
- return state.width;
234
- },
235
- get height() {
236
- return state.height;
237
- },
238
- requestRender() {
239
- state.markDirty();
240
- },
241
- onKey: (handler) => events.onKey(handler),
242
- onMouse: (handler) => events.onMouse(handler),
243
- onPaste: (handler) => events.onPaste(handler),
244
- onResize: (handler) => events.onResize(handler),
245
- onFrameStats: (handler) => events.onFrameStats(handler),
246
- stop() {
247
- state.running = false;
248
- if (onExit) {
249
- process.off("exit", onExit);
250
- onExit = null;
251
- }
252
- if (onSignal) {
253
- process.off("SIGINT", onSignal);
254
- process.off("SIGTERM", onSignal);
255
- onSignal = null;
256
- }
257
- if (onUncaughtException) {
258
- process.off("uncaughtException", onUncaughtException);
259
- onUncaughtException = null;
260
- }
261
- if (onUnhandledRejection) {
262
- process.off("unhandledRejection", onUnhandledRejection);
263
- onUnhandledRejection = null;
264
- }
265
- if (state.loop) {
266
- clearInterval(state.loop);
267
- state.loop = null;
268
- }
269
- if (state.inputHandler) {
270
- stdin.removeListener("data", state.inputHandler);
271
- state.inputHandler = null;
272
- }
273
- if (state.resizeHandler) {
274
- stdout.removeListener("resize", state.resizeHandler);
275
- state.resizeHandler = null;
276
- }
277
- terminal.teardown();
278
- },
279
- flush() {
280
- renderFrame();
281
- },
282
- getScreenshot() {
283
- // Return the previous buffer as ANSI string (it has the last rendered frame)
284
- if (state.prevBuffer) {
285
- return bufferToString(state.prevBuffer, state.palette, state.width, state.height);
286
- }
287
- return "";
288
- },
289
- dispatchKey(key) {
290
- events.dispatchKey(key);
291
- if (!manualMode)
292
- renderFrame();
293
- },
294
- dispatchPaste(text) {
295
- events.dispatchPaste(text);
296
- if (!manualMode)
297
- renderFrame();
298
- },
299
- dispatchResize(width, height) {
300
- renderMode.handleResize(width, height, state.lastWidth);
301
- state.updateDimensions(width, height);
302
- state.invalidateBuffers();
303
- state.markDirty();
304
- flushSync(() => {
305
- events.dispatchResize(width, height);
306
- });
307
- if (!manualMode)
308
- renderFrame();
309
- },
310
- };
311
- // Terminal setup
312
- terminal.setup();
313
- // Input handling
314
- state.inputHandler = (data) => inputProcessor.process(data);
315
- stdin.on("data", state.inputHandler);
316
- // Resize handling
317
- state.resizeHandler = () => {
318
- const newWidth = stdout.columns || 80;
319
- const newHeight = stdout.rows || 24;
320
- renderMode.handleResize(newWidth, newHeight, state.lastWidth);
321
- state.updateDimensions(newWidth, newHeight);
322
- state.invalidateBuffers();
323
- state.markDirty();
324
- flushSync(() => {
325
- events.dispatchResize(newWidth, newHeight);
326
- });
327
- };
328
- stdout.on("resize", state.resizeHandler);
329
- // Render loop
330
- if (!manualMode) {
331
- const frameMs = 1000 / fps;
332
- state.loop = setInterval(() => {
333
- if (!state.running) {
334
- if (state.loop)
335
- clearInterval(state.loop);
336
- terminal.teardown();
337
- return;
338
- }
339
- renderFrame();
340
- }, frameMs);
341
- }
342
- // Process exit handlers - ensure terminal is restored on any exit
343
- // These handlers are critical for proper cleanup when process.exit() is called
344
- let cleanedUp = false;
345
- const cleanup = () => {
346
- if (cleanedUp)
347
- return;
348
- cleanedUp = true;
349
- renderer.stop();
350
- };
351
- if (handleSignals) {
352
- // Handle normal process exit (synchronous - runs before exit completes)
353
- onExit = () => cleanup();
354
- process.on("exit", onExit);
355
- // Handle SIGINT (Ctrl+C from shell, not from TUI input) and SIGTERM
356
- onSignal = (signal) => {
357
- cleanup();
358
- if (!exitOnSignal)
359
- return;
360
- const code = signalExitCodes[signal] ?? 0;
361
- requestExit(code);
362
- };
363
- process.on("SIGINT", onSignal);
364
- process.on("SIGTERM", onSignal);
365
- // Handle uncaught exceptions - ensure error is visible before exit
366
- onUncaughtException = (err) => {
367
- cleanup();
368
- // Write directly to terminal, bypassing console capture
369
- writeToTerminal(`\n[effect-tui] Uncaught exception:\n${err.stack || err.message}\n`);
370
- process.exit(1);
371
- };
372
- process.on("uncaughtException", onUncaughtException);
373
- // Handle unhandled promise rejections
374
- onUnhandledRejection = (reason) => {
375
- cleanup();
376
- const message = reason instanceof Error ? reason.stack || reason.message : String(reason);
377
- writeToTerminal(`\n[effect-tui] Unhandled rejection:\n${message}\n`);
378
- process.exit(1);
379
- };
380
- process.on("unhandledRejection", onUnhandledRejection);
381
- }
382
- ;
383
- renderer._container = null;
384
- return renderer;
385
- }
386
- export function createRoot(renderer) {
387
- const hostContext = {
388
- requestRender: () => renderer.requestRender(),
389
- requestImmediateRender: () => renderer.flush(),
390
- };
391
- const container = {
392
- root: null,
393
- ctx: hostContext,
394
- };
395
- const fiberRoot = reconciler.createContainer(container, 0, null, false, null, "", (err) => console.error(err), (err) => console.error(err), (err) => console.error(err), () => { }, null);
396
- renderer._container = container;
397
- return {
398
- render(element, sync = false) {
399
- const wrapped = React.createElement(RendererContext.Provider, { value: renderer }, element);
400
- if (sync) {
401
- flushSync(() => {
402
- reconciler.updateContainer(wrapped, fiberRoot, null, null);
403
- });
404
- renderer.requestRender();
405
- }
406
- else {
407
- reconciler.updateContainer(wrapped, fiberRoot, null, () => {
408
- renderer.requestRender();
409
- });
410
- }
411
- },
412
- unmount() {
413
- reconciler.updateContainer(null, fiberRoot, null, () => {
414
- renderer.stop();
415
- });
416
- },
417
- };
418
- }
419
- const stripQuery = (url) => url.split("?")[0];
420
- const createRenderInstance = (renderer, root, element, stop, skipInitialRender = false) => {
421
- if (!skipInitialRender) {
422
- root.render(element, true);
423
- }
424
- let resolved = false;
425
- let resolveExit = null;
426
- const exitPromise = new Promise((resolve) => {
427
- resolveExit = () => {
428
- if (resolved)
429
- return;
430
- resolved = true;
431
- resolve();
432
- };
433
- });
434
- // Resolve the exit promise on process exit
435
- // Note: Terminal cleanup is handled by createRenderer's exit handlers
436
- const onExit = () => {
437
- resolveExit?.();
438
- };
439
- process.once("exit", onExit);
440
- const unmount = () => {
441
- process.off("exit", onExit);
442
- if (!resolved) {
443
- resolved = true;
444
- stop();
445
- resolveExit?.();
446
- }
447
- };
448
- const rerender = (next) => {
449
- if (resolved)
450
- return;
451
- root.render(next);
452
- };
453
- // Clean quit function - stop() + process.exit()
454
- // The createRenderer exit handler will also run, but it's idempotent
455
- const quit = (code = 0) => {
456
- stop();
457
- requestExit(code);
458
- };
459
- return {
460
- renderer,
461
- root,
462
- rerender,
463
- unmount,
464
- waitUntilExit: () => exitPromise,
465
- quit,
466
- };
467
- };
468
- export function render(element, options) {
469
- if (options && !options.importMeta) {
470
- throw new Error("[effect-tui] render(..., options) requires { importMeta: import.meta }");
471
- }
472
- if (!options?.dev) {
473
- const renderer = createRenderer(options);
474
- const root = createRoot(renderer);
475
- return createRenderInstance(renderer, root, element, () => renderer.stop());
476
- }
477
- const importMeta = options.importMeta;
478
- if (!importMeta) {
479
- throw new Error("[effect-tui] render(..., { dev: true, importMeta }) is required in dev mode");
480
- }
481
- const baseUrl = stripQuery(importMeta.url);
482
- const renderCache = getRenderCache();
483
- const cached = renderCache.get(baseUrl);
484
- if (cached)
485
- return cached;
486
- const renderer = createRenderer(options);
487
- const root = createRoot(renderer);
488
- const entryPath = fileURLToPath(new URL(baseUrl));
489
- const devRuntime = startDevRuntime(entryPath, renderer, root, options);
490
- const instance = createRenderInstance(renderer, root, element, () => {
491
- void devRuntime.stop();
492
- }, true);
493
- renderCache.set(baseUrl, instance);
494
- return instance;
495
- }
1
+ export * from "./internal/renderer/index.js";
496
2
  //# sourceMappingURL=renderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/renderer.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAA"}
@@ -18,7 +18,7 @@ export interface RenderTUIResult {
18
18
  /** Send a key event */
19
19
  sendKey(key: KeyMsg): void;
20
20
  /** Trigger a render cycle and process React updates */
21
- flush(): void;
21
+ renderNow(): void;
22
22
  /** Unmount the component and stop the renderer */
23
23
  unmount(): void;
24
24
  /** Access mock stdout for advanced assertions */
@@ -36,12 +36,12 @@ export interface RenderTUIResult {
36
36
  *
37
37
  * @example
38
38
  * ```ts
39
- * const { lastFrame, sendKey, flush, unmount } = renderTUI(<Counter />)
39
+ * const { lastFrame, sendKey, renderNow, unmount } = renderTUI(<Counter />)
40
40
  *
41
41
  * expect(lastFrame()).toContain("Count: 0")
42
42
  *
43
43
  * sendKey({ key: "up" })
44
- * flush()
44
+ * renderNow()
45
45
  *
46
46
  * expect(lastFrame()).toContain("Count: 1")
47
47
  *
@@ -1 +1 @@
1
- {"version":3,"file":"render-tui.d.ts","sourceRoot":"","sources":["../../../src/test/render-tui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAc,EAAE,KAAK,YAAY,EAAY,MAAM,OAAO,CAAA;AAE1D,OAAO,EAAE,cAAc,EAAc,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAmB,SAAS,EAAE,UAAU,EAAa,MAAM,mBAAmB,CAAA;AAErF,MAAM,WAAW,gBAAgB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAA;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC/B,kEAAkE;IAClE,YAAY,IAAI,MAAM,CAAA;IACtB,uDAAuD;IACvD,SAAS,IAAI,MAAM,CAAA;IACnB,6CAA6C;IAC7C,KAAK,IAAI,MAAM,EAAE,CAAA;IACjB,uBAAuB;IACvB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,uDAAuD;IACvD,KAAK,IAAI,IAAI,CAAA;IACb,kDAAkD;IAClD,OAAO,IAAI,IAAI,CAAA;IACf,iDAAiD;IACjD,MAAM,EAAE,UAAU,CAAA;IAClB,sDAAsD;IACtD,KAAK,EAAE,SAAS,CAAA;IAChB,8CAA8C;IAC9C,QAAQ,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA;IAC3C,0BAA0B;IAC1B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,eAAe,CAsF5F"}
1
+ {"version":3,"file":"render-tui.d.ts","sourceRoot":"","sources":["../../../src/test/render-tui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAc,EAAE,KAAK,YAAY,EAAY,MAAM,OAAO,CAAA;AAE1D,OAAO,EAAE,cAAc,EAAc,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAmB,SAAS,EAAE,UAAU,EAAa,MAAM,mBAAmB,CAAA;AAErF,MAAM,WAAW,gBAAgB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAA;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC/B,kEAAkE;IAClE,YAAY,IAAI,MAAM,CAAA;IACtB,uDAAuD;IACvD,SAAS,IAAI,MAAM,CAAA;IACnB,6CAA6C;IAC7C,KAAK,IAAI,MAAM,EAAE,CAAA;IACjB,uBAAuB;IACvB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,uDAAuD;IACvD,SAAS,IAAI,IAAI,CAAA;IACjB,kDAAkD;IAClD,OAAO,IAAI,IAAI,CAAA;IACf,iDAAiD;IACjD,MAAM,EAAE,UAAU,CAAA;IAClB,sDAAsD;IACtD,KAAK,EAAE,SAAS,CAAA;IAChB,8CAA8C;IAC9C,QAAQ,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA;IAC3C,0BAA0B;IAC1B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,eAAe,CA4F5F"}
@@ -8,12 +8,12 @@ import { getVisibleLines, MockStdin, MockStdout, stripAnsi } from "./mock-stream
8
8
  *
9
9
  * @example
10
10
  * ```ts
11
- * const { lastFrame, sendKey, flush, unmount } = renderTUI(<Counter />)
11
+ * const { lastFrame, sendKey, renderNow, unmount } = renderTUI(<Counter />)
12
12
  *
13
13
  * expect(lastFrame()).toContain("Count: 0")
14
14
  *
15
15
  * sendKey({ key: "up" })
16
- * flush()
16
+ * renderNow()
17
17
  *
18
18
  * expect(lastFrame()).toContain("Count: 1")
19
19
  *
@@ -46,8 +46,8 @@ export function renderTUI(element, options) {
46
46
  // Flush effects
47
47
  flushPassiveEffects();
48
48
  // Initial render
49
- renderer.flush();
50
- const flush = () => {
49
+ renderer.renderNow();
50
+ const renderNow = () => {
51
51
  // Flush React updates synchronously
52
52
  flushSync(() => {
53
53
  bump?.();
@@ -56,7 +56,7 @@ export function renderTUI(element, options) {
56
56
  // Clear buffer before re-render to get clean frame
57
57
  stdout.clear();
58
58
  renderer.requestRender();
59
- renderer.flush();
59
+ renderer.renderNow();
60
60
  // Flush updates scheduled during layout (e.g., viewport/content size callbacks)
61
61
  flushSync(() => {
62
62
  bump?.();
@@ -64,7 +64,7 @@ export function renderTUI(element, options) {
64
64
  flushPassiveEffects();
65
65
  stdout.clear();
66
66
  renderer.requestRender();
67
- renderer.flush();
67
+ renderer.renderNow();
68
68
  };
69
69
  return {
70
70
  lastFrameRaw() {
@@ -79,7 +79,7 @@ export function renderTUI(element, options) {
79
79
  sendKey(key) {
80
80
  stdin.sendKey(key);
81
81
  },
82
- flush,
82
+ renderNow,
83
83
  unmount() {
84
84
  root.unmount();
85
85
  },
@@ -87,8 +87,15 @@ export function renderTUI(element, options) {
87
87
  stdin,
88
88
  renderer,
89
89
  resize(w, h) {
90
- stdout.resize(w, h);
91
- flush();
90
+ stdout.columns = w;
91
+ stdout.rows = h;
92
+ if (renderer.dispatchResize) {
93
+ renderer.dispatchResize(w, h);
94
+ }
95
+ else {
96
+ stdout.resize(w, h);
97
+ }
98
+ renderNow();
92
99
  },
93
100
  };
94
101
  }
@@ -1 +1 @@
1
- {"version":3,"file":"render-tui.js","sourceRoot":"","sources":["../../../src/test/render-tui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render-tui.js","sourceRoot":"","sources":["../../../src/test/render-tui.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAqB,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAC7E,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAgCrF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,SAAS,CAAC,OAAqB,EAAE,OAA0B;IAC1E,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,EAAE,CAAA;IAClC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,EAAE,CAAA;IAEpC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAC5C,MAAM,KAAK,GAAG,IAAI,SAAS,EAAE,CAAA;IAE7B,MAAM,QAAQ,GAAG,cAAc,CAAC;QAC/B,MAAM,EAAE,MAAa;QACrB,KAAK,EAAE,KAAY;QACnB,UAAU,EAAE,IAAI;QAChB,iBAAiB,EAAE,IAAI;QACvB,aAAa,EAAE,KAAK;QACpB,IAAI,EAAE,OAAO,EAAE,IAAI;QACnB,IAAI,EAAE,OAAO,EAAE,IAAI;KACnB,CAAC,CAAA;IAEF,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;IACjC,IAAI,IAAI,GAAwB,IAAI,CAAA;IACpC,MAAM,OAAO,GAAG,CAAC,EAAE,QAAQ,EAA8B,EAAE,EAAE;QAC5D,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QACnC,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;QAC1C,OAAO,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,IAAI,EAA6B,CAAC,CAAA;IACvF,CAAC,CAAA;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;IAC7D,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA,CAAC,YAAY;IAEzC,gBAAgB;IAChB,mBAAmB,EAAE,CAAA;IAErB,iBAAiB;IACjB,QAAQ,CAAC,SAAS,EAAE,CAAA;IAEpB,MAAM,SAAS,GAAG,GAAG,EAAE;QACtB,oCAAoC;QACpC,SAAS,CAAC,GAAG,EAAE;YACd,IAAI,EAAE,EAAE,CAAA;QACT,CAAC,CAAC,CAAA;QACF,mBAAmB,EAAE,CAAA;QACrB,mDAAmD;QACnD,MAAM,CAAC,KAAK,EAAE,CAAA;QACd,QAAQ,CAAC,aAAa,EAAE,CAAA;QACxB,QAAQ,CAAC,SAAS,EAAE,CAAA;QACpB,gFAAgF;QAChF,SAAS,CAAC,GAAG,EAAE;YACd,IAAI,EAAE,EAAE,CAAA;QACT,CAAC,CAAC,CAAA;QACF,mBAAmB,EAAE,CAAA;QACrB,MAAM,CAAC,KAAK,EAAE,CAAA;QACd,QAAQ,CAAC,aAAa,EAAE,CAAA;QACxB,QAAQ,CAAC,SAAS,EAAE,CAAA;IACrB,CAAC,CAAA;IAED,OAAO;QACN,YAAY;YACX,OAAO,MAAM,CAAC,GAAG,CAAA;QAClB,CAAC;QAED,SAAS;YACR,OAAO,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC7B,CAAC;QAED,KAAK;YACJ,OAAO,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACnC,CAAC;QAED,OAAO,CAAC,GAAW;YAClB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACnB,CAAC;QAED,SAAS;QAET,OAAO;YACN,IAAI,CAAC,OAAO,EAAE,CAAA;QACf,CAAC;QAED,MAAM;QACN,KAAK;QACL,QAAQ;QAER,MAAM,CAAC,CAAS,EAAE,CAAS;YAC1B,MAAM,CAAC,OAAO,GAAG,CAAC,CAAA;YAClB,MAAM,CAAC,IAAI,GAAG,CAAC,CAAA;YACf,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAC7B,QAAQ,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAC9B,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACpB,CAAC;YACD,SAAS,EAAE,CAAA;QACZ,CAAC;KACD,CAAA;AACF,CAAC"}
@@ -2,7 +2,7 @@
2
2
  * Alignment utilities for layout positioning.
3
3
  */
4
4
  import type { Rect, Size } from "../reconciler/types.js";
5
- export type HAlign = "left" | "center" | "right" | "leading" | "trailing";
5
+ export type HAlign = "left" | "center" | "right";
6
6
  export type VAlign = "top" | "center" | "bottom";
7
7
  /**
8
8
  * Calculate position to align a child size within a container rect.
@@ -1 +1 @@
1
- {"version":3,"file":"alignment.d.ts","sourceRoot":"","sources":["../../../src/utils/alignment.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAExD,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAA;AACzE,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEhD;;;GAGG;AACH,wBAAgB,WAAW,CAC1B,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,EACV,MAAM,GAAE,MAAiB,EACzB,MAAM,GAAE,MAAiB,GACvB;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CA+B1B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,EACV,MAAM,GAAE,MAAiB,EACzB,MAAM,GAAE,MAAiB,GACvB,IAAI,CAQN"}
1
+ {"version":3,"file":"alignment.d.ts","sourceRoot":"","sources":["../../../src/utils/alignment.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAExD,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;AAChD,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEhD;;;GAGG;AACH,wBAAgB,WAAW,CAC1B,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,EACV,MAAM,GAAE,MAAiB,EACzB,MAAM,GAAE,MAAiB,GACvB;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CA6B1B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,EACV,MAAM,GAAE,MAAiB,EACzB,MAAM,GAAE,MAAiB,GACvB,IAAI,CAQN"}