@effect-tui/react 0.15.1 → 0.16.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 (253) hide show
  1. package/README.md +2 -2
  2. package/dist/src/components/ListView.d.ts +4 -4
  3. package/dist/src/components/ListView.d.ts.map +1 -1
  4. package/dist/src/components/ListView.js +16 -17
  5. package/dist/src/components/ListView.js.map +1 -1
  6. package/dist/src/console/ConsolePopover.d.ts +7 -1
  7. package/dist/src/console/ConsolePopover.d.ts.map +1 -1
  8. package/dist/src/console/ConsolePopover.js +55 -74
  9. package/dist/src/console/ConsolePopover.js.map +1 -1
  10. package/dist/src/debug/DebugOverlay.d.ts.map +1 -1
  11. package/dist/src/debug/DebugOverlay.js +3 -57
  12. package/dist/src/debug/DebugOverlay.js.map +1 -1
  13. package/dist/src/debug/DiagnosticsPanel.js +1 -1
  14. package/dist/src/debug/DiagnosticsPanel.js.map +1 -1
  15. package/dist/src/dev.d.ts +5 -117
  16. package/dist/src/dev.d.ts.map +1 -1
  17. package/dist/src/dev.js +3 -333
  18. package/dist/src/dev.js.map +1 -1
  19. package/dist/src/hooks/use-scroll.d.ts +31 -35
  20. package/dist/src/hooks/use-scroll.d.ts.map +1 -1
  21. package/dist/src/hooks/use-scroll.js +51 -90
  22. package/dist/src/hooks/use-scroll.js.map +1 -1
  23. package/dist/src/hosts/canvas.d.ts +2 -2
  24. package/dist/src/hosts/canvas.d.ts.map +1 -1
  25. package/dist/src/hosts/canvas.js +8 -10
  26. package/dist/src/hosts/canvas.js.map +1 -1
  27. package/dist/src/hosts/codeblock.d.ts +7 -4
  28. package/dist/src/hosts/codeblock.d.ts.map +1 -1
  29. package/dist/src/hosts/codeblock.js +26 -9
  30. package/dist/src/hosts/codeblock.js.map +1 -1
  31. package/dist/src/hosts/flex-container.d.ts +1 -1
  32. package/dist/src/hosts/flex-container.d.ts.map +1 -1
  33. package/dist/src/hosts/flex-container.js +3 -3
  34. package/dist/src/hosts/flex-container.js.map +1 -1
  35. package/dist/src/hosts/index.d.ts +2 -1
  36. package/dist/src/hosts/index.d.ts.map +1 -1
  37. package/dist/src/hosts/index.js +2 -1
  38. package/dist/src/hosts/index.js.map +1 -1
  39. package/dist/src/hosts/layout-helpers.d.ts +10 -0
  40. package/dist/src/hosts/layout-helpers.d.ts.map +1 -0
  41. package/dist/src/hosts/layout-helpers.js +10 -0
  42. package/dist/src/hosts/layout-helpers.js.map +1 -0
  43. package/dist/src/hosts/leaf.d.ts +14 -0
  44. package/dist/src/hosts/leaf.d.ts.map +1 -0
  45. package/dist/src/hosts/leaf.js +31 -0
  46. package/dist/src/hosts/leaf.js.map +1 -0
  47. package/dist/src/hosts/overlay.d.ts.map +1 -1
  48. package/dist/src/hosts/overlay.js +4 -7
  49. package/dist/src/hosts/overlay.js.map +1 -1
  50. package/dist/src/hosts/scroll.d.ts +47 -24
  51. package/dist/src/hosts/scroll.d.ts.map +1 -1
  52. package/dist/src/hosts/scroll.js +68 -51
  53. package/dist/src/hosts/scroll.js.map +1 -1
  54. package/dist/src/hosts/spacer.d.ts +3 -4
  55. package/dist/src/hosts/spacer.d.ts.map +1 -1
  56. package/dist/src/hosts/spacer.js +2 -5
  57. package/dist/src/hosts/spacer.js.map +1 -1
  58. package/dist/src/hosts/text.d.ts +2 -3
  59. package/dist/src/hosts/text.d.ts.map +1 -1
  60. package/dist/src/hosts/text.js +5 -61
  61. package/dist/src/hosts/text.js.map +1 -1
  62. package/dist/src/hosts/vstack.js +1 -1
  63. package/dist/src/hosts/vstack.js.map +1 -1
  64. package/dist/src/hosts/zstack.d.ts +1 -1
  65. package/dist/src/hosts/zstack.d.ts.map +1 -1
  66. package/dist/src/hosts/zstack.js +6 -6
  67. package/dist/src/hosts/zstack.js.map +1 -1
  68. package/dist/src/index.d.ts +1 -1
  69. package/dist/src/index.d.ts.map +1 -1
  70. package/dist/src/internal/dev/hmr.d.ts +20 -0
  71. package/dist/src/internal/dev/hmr.d.ts.map +1 -0
  72. package/dist/src/internal/dev/hmr.js +93 -0
  73. package/dist/src/internal/dev/hmr.js.map +1 -0
  74. package/dist/src/internal/dev/runtime.d.ts +24 -0
  75. package/dist/src/internal/dev/runtime.d.ts.map +1 -0
  76. package/dist/src/internal/dev/runtime.js +135 -0
  77. package/dist/src/internal/dev/runtime.js.map +1 -0
  78. package/dist/src/internal/dev/ui.d.ts +13 -0
  79. package/dist/src/internal/dev/ui.d.ts.map +1 -0
  80. package/dist/src/internal/dev/ui.js +51 -0
  81. package/dist/src/internal/dev/ui.js.map +1 -0
  82. package/dist/src/internal/renderer/context.d.ts +9 -0
  83. package/dist/src/internal/renderer/context.d.ts.map +1 -0
  84. package/dist/src/internal/renderer/context.js +22 -0
  85. package/dist/src/internal/renderer/context.js.map +1 -0
  86. package/dist/src/internal/renderer/core/FrameBuilder.d.ts +18 -0
  87. package/dist/src/internal/renderer/core/FrameBuilder.d.ts.map +1 -0
  88. package/dist/src/internal/renderer/core/FrameBuilder.js +40 -0
  89. package/dist/src/internal/renderer/core/FrameBuilder.js.map +1 -0
  90. package/dist/src/internal/renderer/core/RendererState.d.ts +41 -0
  91. package/dist/src/internal/renderer/core/RendererState.d.ts.map +1 -0
  92. package/dist/src/internal/renderer/core/RendererState.js +70 -0
  93. package/dist/src/internal/renderer/core/RendererState.js.map +1 -0
  94. package/dist/src/internal/renderer/core/index.d.ts +3 -0
  95. package/dist/src/internal/renderer/core/index.d.ts.map +1 -0
  96. package/dist/src/internal/renderer/core/index.js +3 -0
  97. package/dist/src/internal/renderer/core/index.js.map +1 -0
  98. package/dist/src/internal/renderer/index.d.ts +40 -0
  99. package/dist/src/internal/renderer/index.d.ts.map +1 -0
  100. package/dist/src/internal/renderer/index.js +518 -0
  101. package/dist/src/internal/renderer/index.js.map +1 -0
  102. package/dist/src/internal/renderer/input/InputProcessor.d.ts +30 -0
  103. package/dist/src/internal/renderer/input/InputProcessor.d.ts.map +1 -0
  104. package/dist/src/internal/renderer/input/InputProcessor.js +122 -0
  105. package/dist/src/internal/renderer/input/InputProcessor.js.map +1 -0
  106. package/dist/src/internal/renderer/input/index.d.ts +2 -0
  107. package/dist/src/internal/renderer/input/index.d.ts.map +1 -0
  108. package/dist/src/internal/renderer/input/index.js +2 -0
  109. package/dist/src/internal/renderer/input/index.js.map +1 -0
  110. package/dist/src/internal/renderer/lifecycle/EventBus.d.ts +42 -0
  111. package/dist/src/internal/renderer/lifecycle/EventBus.d.ts.map +1 -0
  112. package/dist/src/internal/renderer/lifecycle/EventBus.js +97 -0
  113. package/dist/src/internal/renderer/lifecycle/EventBus.js.map +1 -0
  114. package/dist/src/internal/renderer/lifecycle/ProcessLifecycle.d.ts +13 -0
  115. package/dist/src/internal/renderer/lifecycle/ProcessLifecycle.d.ts.map +1 -0
  116. package/dist/src/internal/renderer/lifecycle/ProcessLifecycle.js +111 -0
  117. package/dist/src/internal/renderer/lifecycle/ProcessLifecycle.js.map +1 -0
  118. package/dist/src/internal/renderer/lifecycle/RenderCache.d.ts +3 -0
  119. package/dist/src/internal/renderer/lifecycle/RenderCache.d.ts.map +1 -0
  120. package/dist/src/internal/renderer/lifecycle/RenderCache.js +9 -0
  121. package/dist/src/internal/renderer/lifecycle/RenderCache.js.map +1 -0
  122. package/dist/src/internal/renderer/lifecycle/index.d.ts +4 -0
  123. package/dist/src/internal/renderer/lifecycle/index.d.ts.map +1 -0
  124. package/dist/src/internal/renderer/lifecycle/index.js +4 -0
  125. package/dist/src/internal/renderer/lifecycle/index.js.map +1 -0
  126. package/dist/src/internal/renderer/modes/FullscreenRenderer.d.ts +12 -0
  127. package/dist/src/internal/renderer/modes/FullscreenRenderer.d.ts.map +1 -0
  128. package/dist/src/internal/renderer/modes/FullscreenRenderer.js +54 -0
  129. package/dist/src/internal/renderer/modes/FullscreenRenderer.js.map +1 -0
  130. package/dist/src/internal/renderer/modes/InlineRenderer.d.ts +25 -0
  131. package/dist/src/internal/renderer/modes/InlineRenderer.d.ts.map +1 -0
  132. package/dist/src/internal/renderer/modes/InlineRenderer.js +166 -0
  133. package/dist/src/internal/renderer/modes/InlineRenderer.js.map +1 -0
  134. package/dist/src/internal/renderer/modes/RendererMode.d.ts +42 -0
  135. package/dist/src/internal/renderer/modes/RendererMode.d.ts.map +1 -0
  136. package/dist/src/internal/renderer/modes/RendererMode.js +2 -0
  137. package/dist/src/internal/renderer/modes/RendererMode.js.map +1 -0
  138. package/dist/src/internal/renderer/modes/StaticContentRenderer.d.ts +25 -0
  139. package/dist/src/internal/renderer/modes/StaticContentRenderer.d.ts.map +1 -0
  140. package/dist/src/internal/renderer/modes/StaticContentRenderer.js +49 -0
  141. package/dist/src/internal/renderer/modes/StaticContentRenderer.js.map +1 -0
  142. package/dist/src/internal/renderer/modes/index.d.ts +5 -0
  143. package/dist/src/internal/renderer/modes/index.d.ts.map +1 -0
  144. package/dist/src/internal/renderer/modes/index.js +4 -0
  145. package/dist/src/internal/renderer/modes/index.js.map +1 -0
  146. package/dist/src/internal/renderer/terminal/KeyboardCapabilityProbe.d.ts +13 -0
  147. package/dist/src/internal/renderer/terminal/KeyboardCapabilityProbe.d.ts.map +1 -0
  148. package/dist/src/internal/renderer/terminal/KeyboardCapabilityProbe.js +75 -0
  149. package/dist/src/internal/renderer/terminal/KeyboardCapabilityProbe.js.map +1 -0
  150. package/dist/src/internal/renderer/terminal/TerminalSetup.d.ts +29 -0
  151. package/dist/src/internal/renderer/terminal/TerminalSetup.d.ts.map +1 -0
  152. package/dist/src/internal/renderer/terminal/TerminalSetup.js +82 -0
  153. package/dist/src/internal/renderer/terminal/TerminalSetup.js.map +1 -0
  154. package/dist/src/internal/renderer/terminal/index.d.ts +3 -0
  155. package/dist/src/internal/renderer/terminal/index.d.ts.map +1 -0
  156. package/dist/src/internal/renderer/terminal/index.js +3 -0
  157. package/dist/src/internal/renderer/terminal/index.js.map +1 -0
  158. package/dist/src/internal/renderer/types.d.ts +118 -0
  159. package/dist/src/internal/renderer/types.d.ts.map +1 -0
  160. package/dist/src/internal/renderer/types.js +2 -0
  161. package/dist/src/internal/renderer/types.js.map +1 -0
  162. package/dist/src/renderer-context.d.ts +1 -8
  163. package/dist/src/renderer-context.d.ts.map +1 -1
  164. package/dist/src/renderer-context.js +1 -21
  165. package/dist/src/renderer-context.js.map +1 -1
  166. package/dist/src/renderer-types.d.ts +1 -115
  167. package/dist/src/renderer-types.d.ts.map +1 -1
  168. package/dist/src/renderer.d.ts +1 -31
  169. package/dist/src/renderer.d.ts.map +1 -1
  170. package/dist/src/renderer.js +1 -468
  171. package/dist/src/renderer.js.map +1 -1
  172. package/dist/src/test/render-tui.d.ts +3 -3
  173. package/dist/src/test/render-tui.d.ts.map +1 -1
  174. package/dist/src/test/render-tui.js +16 -9
  175. package/dist/src/test/render-tui.js.map +1 -1
  176. package/dist/src/utils/alignment.d.ts +1 -1
  177. package/dist/src/utils/alignment.d.ts.map +1 -1
  178. package/dist/src/utils/alignment.js +0 -2
  179. package/dist/src/utils/alignment.js.map +1 -1
  180. package/dist/src/utils/console-helpers.d.ts +19 -0
  181. package/dist/src/utils/console-helpers.d.ts.map +1 -0
  182. package/dist/src/utils/console-helpers.js +61 -0
  183. package/dist/src/utils/console-helpers.js.map +1 -0
  184. package/dist/src/utils/index.d.ts +1 -1
  185. package/dist/src/utils/index.d.ts.map +1 -1
  186. package/dist/src/utils/index.js +1 -1
  187. package/dist/src/utils/index.js.map +1 -1
  188. package/dist/src/utils/styles.d.ts +8 -1
  189. package/dist/src/utils/styles.d.ts.map +1 -1
  190. package/dist/src/utils/styles.js +10 -8
  191. package/dist/src/utils/styles.js.map +1 -1
  192. package/dist/src/utils/text-wrap.d.ts +5 -0
  193. package/dist/src/utils/text-wrap.d.ts.map +1 -1
  194. package/dist/src/utils/text-wrap.js +110 -48
  195. package/dist/src/utils/text-wrap.js.map +1 -1
  196. package/dist/src/visualize/index.js +1 -1
  197. package/dist/src/visualize/index.js.map +1 -1
  198. package/dist/tsconfig.tsbuildinfo +1 -1
  199. package/package.json +2 -2
  200. package/src/components/ListView.tsx +21 -23
  201. package/src/console/ConsolePopover.tsx +124 -107
  202. package/src/debug/DebugOverlay.ts +15 -74
  203. package/src/debug/DiagnosticsPanel.tsx +1 -1
  204. package/src/dev.tsx +5 -458
  205. package/src/hooks/use-scroll.ts +85 -145
  206. package/src/hosts/canvas.ts +8 -11
  207. package/src/hosts/codeblock.ts +30 -11
  208. package/src/hosts/flex-container.ts +4 -4
  209. package/src/hosts/index.ts +10 -1
  210. package/src/hosts/layout-helpers.ts +20 -0
  211. package/src/hosts/leaf.ts +36 -0
  212. package/src/hosts/overlay.ts +11 -9
  213. package/src/hosts/scroll.ts +94 -69
  214. package/src/hosts/spacer.ts +3 -7
  215. package/src/hosts/text.ts +5 -58
  216. package/src/hosts/vstack.ts +1 -1
  217. package/src/hosts/zstack.ts +7 -7
  218. package/src/index.ts +1 -1
  219. package/src/internal/dev/hmr.ts +101 -0
  220. package/src/internal/dev/runtime.ts +170 -0
  221. package/src/internal/dev/ui.tsx +87 -0
  222. package/src/internal/renderer/context.ts +27 -0
  223. package/src/{renderer → internal/renderer}/core/FrameBuilder.ts +2 -2
  224. package/src/internal/renderer/index.ts +656 -0
  225. package/src/{renderer → internal/renderer}/input/InputProcessor.ts +10 -1
  226. package/src/{renderer → internal/renderer}/lifecycle/EventBus.ts +9 -1
  227. package/src/internal/renderer/lifecycle/ProcessLifecycle.ts +125 -0
  228. package/src/internal/renderer/lifecycle/index.ts +3 -0
  229. package/src/{renderer → internal/renderer}/modes/InlineRenderer.ts +5 -2
  230. package/src/{renderer → internal/renderer}/modes/RendererMode.ts +1 -1
  231. package/src/{renderer → internal/renderer}/modes/StaticContentRenderer.ts +5 -2
  232. package/src/internal/renderer/terminal/KeyboardCapabilityProbe.ts +91 -0
  233. package/src/{renderer/lifecycle → internal/renderer/terminal}/TerminalSetup.ts +4 -22
  234. package/src/internal/renderer/terminal/index.ts +2 -0
  235. package/src/internal/renderer/types.ts +125 -0
  236. package/src/renderer-context.ts +1 -27
  237. package/src/renderer-types.ts +10 -123
  238. package/src/renderer.ts +1 -590
  239. package/src/test/render-tui.ts +16 -10
  240. package/src/utils/alignment.ts +1 -3
  241. package/src/utils/console-helpers.ts +86 -0
  242. package/src/utils/index.ts +1 -1
  243. package/src/utils/styles.ts +16 -4
  244. package/src/utils/text-wrap.ts +139 -48
  245. package/src/visualize/index.tsx +1 -1
  246. package/src/renderer/lifecycle/ResizeManager.ts +0 -65
  247. package/src/renderer/lifecycle/index.ts +0 -4
  248. /package/src/{renderer → internal/renderer}/core/RendererState.ts +0 -0
  249. /package/src/{renderer → internal/renderer}/core/index.ts +0 -0
  250. /package/src/{renderer → internal/renderer}/input/index.ts +0 -0
  251. /package/src/{renderer → internal/renderer}/lifecycle/RenderCache.ts +0 -0
  252. /package/src/{renderer → internal/renderer}/modes/FullscreenRenderer.ts +0 -0
  253. /package/src/{renderer → internal/renderer}/modes/index.ts +0 -0
@@ -0,0 +1,40 @@
1
+ import { type ReactNode } from "react";
2
+ import type { RendererOptions, TuiRenderer } from "./types.js";
3
+ export { RendererContext, useRenderer, useTerminalSize } from "./context.js";
4
+ export type { FrameStats, PasteMsg, RendererOptions, TuiReadStream, TuiRenderer, TuiWriteStream, } from "./types.js";
5
+ export declare function createRenderer(options?: RendererOptions): TuiRenderer;
6
+ export interface Root {
7
+ render(element: ReactNode, sync?: boolean): void;
8
+ unmount(): void;
9
+ }
10
+ export declare function createRoot(renderer: TuiRenderer): Root;
11
+ export interface RenderInstance {
12
+ renderer: TuiRenderer;
13
+ root: Root;
14
+ rerender(element: ReactNode): void;
15
+ unmount(): void;
16
+ waitUntilExit(): Promise<void>;
17
+ /** Cleanly exit the application, restoring terminal state before process.exit() */
18
+ quit(code?: number): void;
19
+ }
20
+ export type ImportMetaLike = {
21
+ url: string;
22
+ main?: boolean;
23
+ };
24
+ type RenderBaseOptions = {
25
+ /** Render mode: fullscreen (default) or inline. */
26
+ mode?: RendererOptions["mode"];
27
+ };
28
+ type RenderDevOptions = RenderBaseOptions & {
29
+ /** Enable dev runtime (HMR, console overlay, remote control). */
30
+ dev: true;
31
+ /** Required in dev mode. */
32
+ importMeta: ImportMetaLike;
33
+ };
34
+ type RenderRuntimeOptions = RenderBaseOptions & {
35
+ /** Dev mode disabled (default). */
36
+ dev?: false | undefined;
37
+ };
38
+ export type RenderOptions = RenderDevOptions | RenderRuntimeOptions;
39
+ export declare function render(element: ReactNode, options?: RenderOptions): RenderInstance;
40
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/internal/renderer/index.ts"],"names":[],"mappings":"AAGA,OAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAe7C,OAAO,KAAK,EAIX,eAAe,EAEf,WAAW,EAGX,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE5E,YAAY,EACX,UAAU,EACV,QAAQ,EACR,eAAe,EACf,aAAa,EACb,WAAW,EACX,cAAc,GACd,MAAM,YAAY,CAAA;AAInB,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,WAAW,CAoarE;AAED,MAAM,WAAW,IAAI;IACpB,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IAChD,OAAO,IAAI,IAAI,CAAA;CACf;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CA+CtD;AAGD,MAAM,WAAW,cAAc;IAC9B,QAAQ,EAAE,WAAW,CAAA;IACrB,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,CAAA;IAClC,OAAO,IAAI,IAAI,CAAA;IACf,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9B,mFAAmF;IACnF,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,MAAM,MAAM,cAAc,GAAG;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED,KAAK,iBAAiB,GAAG;IACxB,mDAAmD;IACnD,IAAI,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAA;CAC9B,CAAA;AAED,KAAK,gBAAgB,GAAG,iBAAiB,GAAG;IAC3C,iEAAiE;IACjE,GAAG,EAAE,IAAI,CAAA;IACT,4BAA4B;IAC5B,UAAU,EAAE,cAAc,CAAA;CAC1B,CAAA;AAED,KAAK,oBAAoB,GAAG,iBAAiB,GAAG;IAC/C,mCAAmC;IACnC,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,oBAAoB,CAAA;AAmEnE,wBAAgB,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,cAAc,CAqClF"}
@@ -0,0 +1,518 @@
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 "./core/index.js";
12
+ import { InputProcessor } from "./input/index.js";
13
+ import { EventBus, getRenderCache, registerProcessHandlers } from "./lifecycle/index.js";
14
+ import { createKeyboardCapabilityProbe, TerminalSetup } from "./terminal/index.js";
15
+ import { FullscreenRenderer, InlineRenderer, StaticContentRenderer } from "./modes/index.js";
16
+ import { RendererContext } from "./context.js";
17
+ import { startDevRuntime } from "../dev/runtime.js";
18
+ export { RendererContext, useRenderer, useTerminalSize } from "./context.js";
19
+ export function createRenderer(options) {
20
+ const fps = options?.fps ?? DEFAULT_FPS;
21
+ // Use custom stdout if provided, otherwise use process.stdout with bypassed capture
22
+ let stdout;
23
+ if (options?.stdout) {
24
+ // Use custom stdout as-is (e.g., for testing with MockStdout)
25
+ stdout = options.stdout;
26
+ }
27
+ else {
28
+ // Create a proxy that bypasses console capture for writes
29
+ // This ensures Effect.log etc. don't corrupt the TUI
30
+ const terminalWrite = createTerminalWriter();
31
+ stdout = new Proxy(process.stdout, {
32
+ get(target, prop) {
33
+ if (prop === "write") {
34
+ return terminalWrite;
35
+ }
36
+ const value = target[prop];
37
+ // Bind methods to preserve `this` context (critical for .on(), .removeListener(), etc.)
38
+ if (typeof value === "function") {
39
+ return value.bind(target);
40
+ }
41
+ return value;
42
+ },
43
+ });
44
+ }
45
+ const stdin = options?.stdin ?? process.stdin;
46
+ const mode = options?.mode ?? "fullscreen";
47
+ const exitOnCtrlC = options?.exitOnCtrlC ?? true;
48
+ const handleSignals = options?.handleSignals ?? true;
49
+ const exitOnSignal = options?.exitOnSignal ?? true;
50
+ const signalExitCodes = {
51
+ SIGINT: 130,
52
+ SIGTERM: 143,
53
+ ...options?.signalExitCodes,
54
+ };
55
+ const manualMode = options?.manualMode ?? false;
56
+ const enableDiff = options?.diff ?? !manualMode;
57
+ const skipTerminalSetup = options?.skipTerminalSetup ?? false;
58
+ const enablePaste = options?.enablePaste ?? true;
59
+ const enableMouse = options?.enableMouse ?? mode === "fullscreen";
60
+ const enableKittyKeyboard = options?.enableKittyKeyboard;
61
+ const debugHook = options?.debug?.onFrame;
62
+ const keyboardProbe = !skipTerminalSetup && enableKittyKeyboard !== false
63
+ ? createKeyboardCapabilityProbe({
64
+ stdout,
65
+ onResolved: (supportsKitty) => {
66
+ if (supportsKitty) {
67
+ stdout.write(ANSI.modifyOtherKeys.disable);
68
+ stdout.write(ANSI.keyboard.enable(1));
69
+ }
70
+ else {
71
+ stdout.write(ANSI.modifyOtherKeys.enable);
72
+ }
73
+ },
74
+ })
75
+ : null;
76
+ // Initialize state
77
+ const state = new RendererState(stdout.columns || 80, stdout.rows || 24);
78
+ const events = new EventBus();
79
+ const frameBuilder = new FrameBuilder();
80
+ // Terminal setup/teardown
81
+ const terminal = new TerminalSetup(stdout, stdin, {
82
+ mode,
83
+ enablePaste,
84
+ enableMouse,
85
+ skipTerminalSetup,
86
+ });
87
+ // Render mode (fullscreen or inline)
88
+ const renderMode = mode === "fullscreen" ? new FullscreenRenderer() : new InlineRenderer();
89
+ // Static content renderer (inline mode only)
90
+ const staticRenderer = mode === "inline" ? new StaticContentRenderer(stdout, state.palette) : null;
91
+ // Input processing
92
+ const inputProcessor = new InputProcessor({
93
+ exitOnCtrlC,
94
+ dispatchKey: (key) => {
95
+ events.dispatchKey(key);
96
+ return key.defaultPrevented ?? false;
97
+ },
98
+ dispatchMouse: (mouse) => events.dispatchMouse(mouse),
99
+ dispatchPaste: (text) => events.dispatchPaste(text),
100
+ flushSync: (fn) => flushSync(fn) ?? undefined,
101
+ onInputProcessed: () => {
102
+ if (!manualMode)
103
+ renderFrame();
104
+ },
105
+ onQuit: () => {
106
+ // Clean up terminal state before exiting
107
+ renderer.stop();
108
+ requestExit(0);
109
+ },
110
+ filterInput: keyboardProbe ? (input) => keyboardProbe.handleInput(input) : undefined,
111
+ });
112
+ const handleInlineFullRerender = () => {
113
+ if (mode !== "inline" || !staticRenderer)
114
+ return "";
115
+ const inlineMode = renderMode;
116
+ if (!inlineMode.needsFullRerender())
117
+ return "";
118
+ let output = "";
119
+ // Clear screen + scrollback + cursor home
120
+ output += ANSI.screen.clear + ANSI.screen.clearScrollback + ANSI.cursor.home;
121
+ // Replay all cached static content
122
+ const cachedStatic = staticRenderer.getCachedOutput();
123
+ if (cachedStatic) {
124
+ output += cachedStatic;
125
+ }
126
+ // Reset state
127
+ inlineMode.clearFullRerenderFlag();
128
+ state.invalidateBuffers();
129
+ return output;
130
+ };
131
+ const flushInlineStatic = (container, frameWidth) => {
132
+ if (mode !== "inline" || !container?.staticDirty || !container.staticRoot || !staticRenderer) {
133
+ return "";
134
+ }
135
+ const inlineMode = renderMode;
136
+ const prevHeight = inlineMode.getPreviousHeight();
137
+ let output = "";
138
+ // Step 1: Clear the dynamic area (move up + clear to end of screen)
139
+ if (prevHeight > 0) {
140
+ output += ANSI.cursor.up(prevHeight) + ANSI.cursor.startOfLine + ANSI.screen.clearToEnd;
141
+ }
142
+ // Step 2: Append static content (cursor ends at bottom of static)
143
+ output += staticRenderer.render(container.staticRoot, frameWidth);
144
+ // Step 3: Reset previousHeight to 0 (we cleared dynamic, starting fresh)
145
+ inlineMode.reset();
146
+ inlineMode.forceFullOutputOnce(); // Force full output to resync cursor tracking after static
147
+ state.invalidateBuffers();
148
+ container.staticDirty = false;
149
+ return output;
150
+ };
151
+ // The render frame logic
152
+ const renderFrame = () => {
153
+ const frameStart = Prof.startFrame();
154
+ const frameStartMs = performance.now();
155
+ // Flush any pending React updates before measuring/layout.
156
+ // Ensures resize-driven state (useTerminalSize) is reflected in the host tree.
157
+ flushSync(() => { });
158
+ const frameWidth = state.width;
159
+ const frameHeight = state.height;
160
+ let contentH = frameHeight;
161
+ const container = renderer._container;
162
+ const root = container?.root ?? null;
163
+ // Must render if dirty OR if static content needs flushing
164
+ if ((!state.dirty && !container?.staticDirty) || !root)
165
+ return;
166
+ state.dirty = false;
167
+ try {
168
+ // Handle full rerender on resize (Ink-style: clear everything + replay static)
169
+ const fullRerenderOutput = handleInlineFullRerender();
170
+ // Handle static content: clear dynamic area, append static, then fresh dynamic render
171
+ // Note: IL (insert lines) won't work here because inline mode uses relative positioning
172
+ // and IL would desync the screen state from our buffer tracking.
173
+ const staticOutput = flushInlineStatic(container ?? null, frameWidth);
174
+ // For inline mode, measure content unconstrained to handle overflow
175
+ let actualContentHeight = frameHeight;
176
+ if (mode === "inline") {
177
+ const size = root.measure(frameWidth, Number.MAX_SAFE_INTEGER);
178
+ actualContentHeight = size.h;
179
+ }
180
+ // Buffer height: content height for inline (to capture all content), terminal height for fullscreen
181
+ const bufferHeight = mode === "inline" ? Math.max(actualContentHeight, frameHeight) : frameHeight;
182
+ // Ensure buffers exist
183
+ state.ensureBuffers(frameWidth, bufferHeight);
184
+ if (!state.nextBuffer)
185
+ return;
186
+ // Build frame (clear, layout, render)
187
+ const timings = frameBuilder.build(root, state.nextBuffer, state.palette, frameWidth, bufferHeight);
188
+ // Generate output
189
+ const t = Prof.startPhase();
190
+ const diffStartMs = performance.now();
191
+ const { output: modeOutput, contentHeight } = renderMode.generateOutput({
192
+ nextBuffer: state.nextBuffer,
193
+ prevBuffer: state.prevBuffer,
194
+ palette: state.palette,
195
+ frameWidth,
196
+ frameHeight,
197
+ contentHeight: actualContentHeight,
198
+ enableDiff,
199
+ stdout,
200
+ });
201
+ // Combine all output for single atomic write
202
+ // fullRerenderOutput (clear + replay static) goes BEFORE sync block
203
+ // Sync block wraps only the dynamic content to prevent tearing
204
+ const output = fullRerenderOutput +
205
+ ANSI.sync.begin +
206
+ staticOutput +
207
+ modeOutput +
208
+ state.palette.sgr(0) +
209
+ ANSI.sync.end;
210
+ contentH = contentHeight;
211
+ const diffAnsiMs = performance.now() - diffStartMs;
212
+ Prof.endPhase("diff+ansi", t);
213
+ // Write output (single atomic write prevents visual glitches)
214
+ const writeT = Prof.startPhase();
215
+ const writeStart = performance.now();
216
+ stdout.write(output);
217
+ const writeMs = performance.now() - writeStart;
218
+ Prof.endPhase("write", writeT);
219
+ Prof.endFrame(frameStart);
220
+ const frameMs = performance.now() - frameStartMs;
221
+ // Swap buffers
222
+ state.swapBuffers();
223
+ // Build stats
224
+ const stats = {
225
+ mode,
226
+ width: state.width,
227
+ height: state.height,
228
+ contentHeight: contentH,
229
+ bytes: Buffer.byteLength(output, "utf8"),
230
+ frameMs,
231
+ phases: {
232
+ clear: timings.clear,
233
+ layout: timings.layout,
234
+ render: timings.render,
235
+ diffMs: diffAnsiMs,
236
+ write: writeMs,
237
+ },
238
+ timestamp: performance.now(),
239
+ };
240
+ if (debugHook)
241
+ debugHook(stats);
242
+ if (events.hasFrameHandlers)
243
+ events.dispatchFrame(stats);
244
+ }
245
+ catch (err) {
246
+ console.error("[effect-tui] Render error:", err);
247
+ state.markDirty();
248
+ }
249
+ };
250
+ const applyResize = (width, height, renderNow) => {
251
+ const prevWidth = state.lastWidth;
252
+ renderMode.handleResize(width, height, prevWidth);
253
+ state.updateDimensions(width, height);
254
+ state.invalidateBuffers();
255
+ state.markDirty();
256
+ flushSync(() => {
257
+ events.dispatchResize(width, height);
258
+ });
259
+ if (renderNow)
260
+ renderFrame();
261
+ };
262
+ let onExit = null;
263
+ let onSignal = null;
264
+ let onUncaughtException = null;
265
+ let onUnhandledRejection = null;
266
+ let unregisterProcessHandlers = null;
267
+ // Build renderer object
268
+ const renderer = {
269
+ get width() {
270
+ return state.width;
271
+ },
272
+ get height() {
273
+ return state.height;
274
+ },
275
+ requestRender() {
276
+ state.markDirty();
277
+ },
278
+ onKey: (handler) => events.onKey(handler),
279
+ onMouse: (handler) => events.onMouse(handler),
280
+ onPaste: (handler) => events.onPaste(handler),
281
+ onResize: (handler) => events.onResize(handler),
282
+ onFrameStats: (handler) => events.onFrameStats(handler),
283
+ stop() {
284
+ state.running = false;
285
+ if (unregisterProcessHandlers) {
286
+ unregisterProcessHandlers();
287
+ unregisterProcessHandlers = null;
288
+ onExit = null;
289
+ onSignal = null;
290
+ onUncaughtException = null;
291
+ onUnhandledRejection = null;
292
+ }
293
+ if (state.loop) {
294
+ clearInterval(state.loop);
295
+ state.loop = null;
296
+ }
297
+ if (state.inputHandler) {
298
+ stdin.removeListener("data", state.inputHandler);
299
+ state.inputHandler = null;
300
+ }
301
+ if (state.resizeHandler) {
302
+ stdout.removeListener("resize", state.resizeHandler);
303
+ state.resizeHandler = null;
304
+ }
305
+ events.clear();
306
+ terminal.teardown();
307
+ },
308
+ renderNow() {
309
+ renderFrame();
310
+ },
311
+ getScreenshot() {
312
+ // Return the previous buffer as ANSI string (it has the last rendered frame)
313
+ if (state.prevBuffer) {
314
+ return bufferToString(state.prevBuffer, state.palette, state.width, state.height);
315
+ }
316
+ return "";
317
+ },
318
+ dispatchKey(key) {
319
+ events.dispatchKey(key);
320
+ if (!manualMode)
321
+ renderFrame();
322
+ },
323
+ dispatchPaste(text) {
324
+ events.dispatchPaste(text);
325
+ if (!manualMode)
326
+ renderFrame();
327
+ },
328
+ dispatchResize(width, height) {
329
+ applyResize(width, height, !manualMode);
330
+ },
331
+ };
332
+ // Terminal setup
333
+ terminal.setup();
334
+ keyboardProbe?.start();
335
+ if (!keyboardProbe && !skipTerminalSetup) {
336
+ stdout.write(ANSI.modifyOtherKeys.enable);
337
+ }
338
+ // Input handling
339
+ state.inputHandler = (data) => inputProcessor.process(data);
340
+ stdin.on("data", state.inputHandler);
341
+ // Resize handling
342
+ state.resizeHandler = () => {
343
+ const newWidth = stdout.columns || 80;
344
+ const newHeight = stdout.rows || 24;
345
+ applyResize(newWidth, newHeight, false);
346
+ };
347
+ stdout.on("resize", state.resizeHandler);
348
+ // Render loop
349
+ if (!manualMode) {
350
+ const frameMs = 1000 / fps;
351
+ state.loop = setInterval(() => {
352
+ if (!state.running) {
353
+ if (state.loop)
354
+ clearInterval(state.loop);
355
+ terminal.teardown();
356
+ return;
357
+ }
358
+ renderFrame();
359
+ }, frameMs);
360
+ }
361
+ // Process exit handlers - ensure terminal is restored on any exit
362
+ // These handlers are critical for proper cleanup when process.exit() is called
363
+ let cleanedUp = false;
364
+ const cleanup = () => {
365
+ if (cleanedUp)
366
+ return;
367
+ cleanedUp = true;
368
+ renderer.stop();
369
+ };
370
+ if (handleSignals) {
371
+ // Handle normal process exit (synchronous - runs before exit completes)
372
+ onExit = () => cleanup();
373
+ // Handle SIGINT (Ctrl+C from shell, not from TUI input) and SIGTERM
374
+ onSignal = (signal) => {
375
+ cleanup();
376
+ if (!exitOnSignal)
377
+ return;
378
+ const code = signalExitCodes[signal] ?? 0;
379
+ requestExit(code);
380
+ };
381
+ // Handle uncaught exceptions - ensure error is visible before exit
382
+ onUncaughtException = (err) => {
383
+ cleanup();
384
+ // Write directly to terminal, bypassing console capture
385
+ writeToTerminal(`\n[effect-tui] Uncaught exception:\n${err.stack || err.message}\n`);
386
+ process.exit(1);
387
+ };
388
+ // Handle unhandled promise rejections
389
+ onUnhandledRejection = (reason) => {
390
+ cleanup();
391
+ const message = reason instanceof Error ? reason.stack || reason.message : String(reason);
392
+ writeToTerminal(`\n[effect-tui] Unhandled rejection:\n${message}\n`);
393
+ process.exit(1);
394
+ };
395
+ unregisterProcessHandlers = registerProcessHandlers({
396
+ onExit,
397
+ onSignal,
398
+ onUncaughtException,
399
+ onUnhandledRejection,
400
+ });
401
+ }
402
+ ;
403
+ renderer._container = null;
404
+ return renderer;
405
+ }
406
+ export function createRoot(renderer) {
407
+ const hostContext = {
408
+ requestRender: () => renderer.requestRender(),
409
+ requestImmediateRender: () => renderer.renderNow(),
410
+ };
411
+ const container = {
412
+ root: null,
413
+ ctx: hostContext,
414
+ };
415
+ const fiberRoot = reconciler.createContainer(container, 0, null, false, null, "", (err) => console.error(err), (err) => console.error(err), (err) => console.error(err), () => { }, null);
416
+ renderer._container = container;
417
+ return {
418
+ render(element, sync = false) {
419
+ const wrapped = React.createElement(RendererContext.Provider, { value: renderer }, element);
420
+ if (sync) {
421
+ flushSync(() => {
422
+ reconciler.updateContainer(wrapped, fiberRoot, null, null);
423
+ });
424
+ renderer.requestRender();
425
+ }
426
+ else {
427
+ reconciler.updateContainer(wrapped, fiberRoot, null, () => {
428
+ renderer.requestRender();
429
+ });
430
+ }
431
+ },
432
+ unmount() {
433
+ reconciler.updateContainer(null, fiberRoot, null, () => {
434
+ renderer.stop();
435
+ });
436
+ },
437
+ };
438
+ }
439
+ const stripQuery = (url) => url.split("?")[0];
440
+ const createRenderInstance = (renderer, root, element, stop, skipInitialRender = false) => {
441
+ if (!skipInitialRender) {
442
+ root.render(element, true);
443
+ }
444
+ let resolved = false;
445
+ let resolveExit = null;
446
+ let unregisterExitHandler = null;
447
+ const exitPromise = new Promise((resolve) => {
448
+ resolveExit = () => {
449
+ if (resolved)
450
+ return;
451
+ resolved = true;
452
+ resolve();
453
+ };
454
+ });
455
+ // Resolve the exit promise on process exit
456
+ // Note: Terminal cleanup is handled by createRenderer's exit handlers
457
+ const onExit = () => {
458
+ resolveExit?.();
459
+ };
460
+ unregisterExitHandler = registerProcessHandlers({ onExit });
461
+ const unmount = () => {
462
+ if (unregisterExitHandler) {
463
+ unregisterExitHandler();
464
+ unregisterExitHandler = null;
465
+ }
466
+ if (!resolved) {
467
+ resolved = true;
468
+ stop();
469
+ resolveExit?.();
470
+ }
471
+ };
472
+ const rerender = (next) => {
473
+ if (resolved)
474
+ return;
475
+ root.render(next);
476
+ };
477
+ // Clean quit function - stop() + process.exit()
478
+ // The createRenderer exit handler will also run, but it's idempotent
479
+ const quit = (code = 0) => {
480
+ stop();
481
+ requestExit(code);
482
+ };
483
+ return {
484
+ renderer,
485
+ root,
486
+ rerender,
487
+ unmount,
488
+ waitUntilExit: () => exitPromise,
489
+ quit,
490
+ };
491
+ };
492
+ export function render(element, options) {
493
+ if (options?.dev && !options.importMeta) {
494
+ throw new Error("[effect-tui] render(..., { dev: true, importMeta }) is required in dev mode");
495
+ }
496
+ if (!options?.dev) {
497
+ const renderer = createRenderer({ mode: options?.mode });
498
+ const root = createRoot(renderer);
499
+ return createRenderInstance(renderer, root, element, () => renderer.stop());
500
+ }
501
+ const importMeta = options.importMeta;
502
+ const baseUrl = stripQuery(importMeta.url);
503
+ const cacheKey = `${baseUrl}::${options.mode ?? "fullscreen"}`;
504
+ const renderCache = getRenderCache();
505
+ const cached = renderCache.get(cacheKey);
506
+ if (cached)
507
+ return cached;
508
+ const renderer = createRenderer({ mode: options.mode });
509
+ const root = createRoot(renderer);
510
+ const entryPath = fileURLToPath(new URL(baseUrl));
511
+ const devRuntime = startDevRuntime(entryPath, renderer, root, { mode: options.mode });
512
+ const instance = createRenderInstance(renderer, root, element, () => {
513
+ void devRuntime.stop();
514
+ }, true);
515
+ renderCache.set(cacheKey, instance);
516
+ return instance;
517
+ }
518
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/internal/renderer/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { type KeyMsg, type MouseMsg } from "@effect-tui/core";
2
+ export interface InputProcessorConfig {
3
+ exitOnCtrlC: boolean;
4
+ dispatchKey: (key: KeyMsg) => boolean;
5
+ dispatchMouse: (mouse: MouseMsg) => void;
6
+ dispatchPaste: (text: string) => void;
7
+ flushSync: <T>(fn: () => T) => T;
8
+ onInputProcessed: () => void;
9
+ onQuit?: () => void;
10
+ /** Optional filter to strip capability responses from raw input */
11
+ filterInput?: (input: string) => string;
12
+ }
13
+ /**
14
+ * Processes raw terminal input, handling keyboard, mouse, and bracketed paste.
15
+ */
16
+ export declare class InputProcessor {
17
+ private config;
18
+ private pasteActive;
19
+ private pasteBuffer;
20
+ private pendingInput;
21
+ constructor(config: InputProcessorConfig);
22
+ /**
23
+ * Process incoming data from stdin.
24
+ * Handles bracketed paste detection, key/mouse event decoding, and dispatch.
25
+ */
26
+ process(data: Buffer): void;
27
+ private emitInput;
28
+ private splitIncompleteCsi;
29
+ }
30
+ //# sourceMappingURL=InputProcessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputProcessor.d.ts","sourceRoot":"","sources":["../../../../../src/internal/renderer/input/InputProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,MAAM,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAGhF,MAAM,WAAW,oBAAoB;IACpC,WAAW,EAAE,OAAO,CAAA;IACpB,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;IACrC,aAAa,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAA;IACxC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;IAChC,gBAAgB,EAAE,MAAM,IAAI,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,mEAAmE;IACnE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;CACvC;AAED;;GAEG;AACH,qBAAa,cAAc;IAKd,OAAO,CAAC,MAAM;IAJ1B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,YAAY,CAAK;gBAEL,MAAM,EAAE,oBAAoB;IAEhD;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAiD3B,OAAO,CAAC,SAAS;IA+CjB,OAAO,CAAC,kBAAkB;CAY1B"}