@effect-tui/react 0.1.3 → 0.1.5

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 (442) hide show
  1. package/dist/jsx-runtime.d.ts +13 -0
  2. package/dist/jsx-runtime.d.ts.map +1 -1
  3. package/dist/jsx-runtime.js.map +1 -1
  4. package/dist/src/codeblock.d.ts.map +1 -1
  5. package/dist/src/codeblock.js.map +1 -1
  6. package/dist/src/components/Divider.d.ts +18 -0
  7. package/dist/src/components/Divider.d.ts.map +1 -0
  8. package/dist/src/components/Divider.js +17 -0
  9. package/dist/src/components/Divider.js.map +1 -0
  10. package/dist/src/components/Markdown.d.ts +66 -0
  11. package/dist/src/components/Markdown.d.ts.map +1 -0
  12. package/dist/src/components/Markdown.js +226 -0
  13. package/dist/src/components/Markdown.js.map +1 -0
  14. package/dist/src/components/MultilineTextInput.d.ts +65 -0
  15. package/dist/src/components/MultilineTextInput.d.ts.map +1 -0
  16. package/dist/src/components/MultilineTextInput.js +607 -0
  17. package/dist/src/components/MultilineTextInput.js.map +1 -0
  18. package/dist/src/components/Overlay.d.ts +46 -0
  19. package/dist/src/components/Overlay.d.ts.map +1 -0
  20. package/dist/src/components/Overlay.js +11 -0
  21. package/dist/src/components/Overlay.js.map +1 -0
  22. package/dist/src/components/Static.d.ts +44 -0
  23. package/dist/src/components/Static.d.ts.map +1 -0
  24. package/dist/src/components/Static.js +53 -0
  25. package/dist/src/components/Static.js.map +1 -0
  26. package/dist/src/components/TextInput.d.ts +55 -0
  27. package/dist/src/components/TextInput.d.ts.map +1 -0
  28. package/dist/src/components/TextInput.js +277 -0
  29. package/dist/src/components/TextInput.js.map +1 -0
  30. package/dist/src/components/index.d.ts +7 -0
  31. package/dist/src/components/index.d.ts.map +1 -0
  32. package/dist/src/components/index.js +7 -0
  33. package/dist/src/components/index.js.map +1 -0
  34. package/dist/src/components/text-editing.d.ts +62 -0
  35. package/dist/src/components/text-editing.d.ts.map +1 -0
  36. package/dist/src/components/text-editing.js +385 -0
  37. package/dist/src/components/text-editing.js.map +1 -0
  38. package/dist/src/console/ConsoleCapture.d.ts +36 -0
  39. package/dist/src/console/ConsoleCapture.d.ts.map +1 -0
  40. package/dist/src/console/ConsoleCapture.js +210 -0
  41. package/dist/src/console/ConsoleCapture.js.map +1 -0
  42. package/dist/src/console/ConsolePopover.d.ts +18 -0
  43. package/dist/src/console/ConsolePopover.d.ts.map +1 -0
  44. package/dist/src/console/ConsolePopover.js +324 -0
  45. package/dist/src/console/ConsolePopover.js.map +1 -0
  46. package/dist/src/console/clipboard.d.ts +10 -0
  47. package/dist/src/console/clipboard.d.ts.map +1 -0
  48. package/dist/src/console/clipboard.js +74 -0
  49. package/dist/src/console/clipboard.js.map +1 -0
  50. package/dist/src/console/index.d.ts +5 -0
  51. package/dist/src/console/index.d.ts.map +1 -0
  52. package/dist/src/console/index.js +33 -0
  53. package/dist/src/console/index.js.map +1 -0
  54. package/dist/src/console/useConsole.d.ts +44 -0
  55. package/dist/src/console/useConsole.d.ts.map +1 -0
  56. package/dist/src/console/useConsole.js +91 -0
  57. package/dist/src/console/useConsole.js.map +1 -0
  58. package/dist/src/debug/DebugOverlay.d.ts +49 -0
  59. package/dist/src/debug/DebugOverlay.d.ts.map +1 -0
  60. package/dist/src/debug/DebugOverlay.js +438 -0
  61. package/dist/src/debug/DebugOverlay.js.map +1 -0
  62. package/dist/src/debug/DiagnosticsPanel.d.ts.map +1 -1
  63. package/dist/src/debug/DiagnosticsPanel.js.map +1 -1
  64. package/dist/src/dev/Toast.d.ts +19 -0
  65. package/dist/src/dev/Toast.d.ts.map +1 -0
  66. package/dist/src/dev/Toast.js +72 -0
  67. package/dist/src/dev/Toast.js.map +1 -0
  68. package/dist/src/dev/index.d.ts +2 -0
  69. package/dist/src/dev/index.d.ts.map +1 -0
  70. package/dist/src/dev/index.js +3 -0
  71. package/dist/src/dev/index.js.map +1 -0
  72. package/dist/src/dev.d.ts +114 -0
  73. package/dist/src/dev.d.ts.map +1 -0
  74. package/dist/src/dev.js +373 -0
  75. package/dist/src/dev.js.map +1 -0
  76. package/dist/src/highlight.d.ts +3 -3
  77. package/dist/src/highlight.d.ts.map +1 -1
  78. package/dist/src/highlight.js.map +1 -1
  79. package/dist/src/hmr-plugin.d.ts +2 -0
  80. package/dist/src/hmr-plugin.d.ts.map +1 -0
  81. package/dist/src/hmr-plugin.js +53 -0
  82. package/dist/src/hmr-plugin.js.map +1 -0
  83. package/dist/src/hooks/index.d.ts +4 -0
  84. package/dist/src/hooks/index.d.ts.map +1 -1
  85. package/dist/src/hooks/index.js +2 -0
  86. package/dist/src/hooks/index.js.map +1 -1
  87. package/dist/src/hooks/use-keyboard.d.ts +11 -0
  88. package/dist/src/hooks/use-keyboard.d.ts.map +1 -1
  89. package/dist/src/hooks/use-keyboard.js +22 -4
  90. package/dist/src/hooks/use-keyboard.js.map +1 -1
  91. package/dist/src/hooks/use-mouse.d.ts +24 -0
  92. package/dist/src/hooks/use-mouse.d.ts.map +1 -0
  93. package/dist/src/hooks/use-mouse.js +41 -0
  94. package/dist/src/hooks/use-mouse.js.map +1 -0
  95. package/dist/src/hooks/use-paste.d.ts +11 -0
  96. package/dist/src/hooks/use-paste.d.ts.map +1 -1
  97. package/dist/src/hooks/use-paste.js +17 -3
  98. package/dist/src/hooks/use-paste.js.map +1 -1
  99. package/dist/src/hooks/use-scroll.d.ts +79 -0
  100. package/dist/src/hooks/use-scroll.d.ts.map +1 -0
  101. package/dist/src/hooks/use-scroll.js +239 -0
  102. package/dist/src/hooks/use-scroll.js.map +1 -0
  103. package/dist/src/hooks/useFrameStats.js.map +1 -1
  104. package/dist/src/hosts/base.d.ts +62 -1
  105. package/dist/src/hosts/base.d.ts.map +1 -1
  106. package/dist/src/hosts/base.js +118 -5
  107. package/dist/src/hosts/base.js.map +1 -1
  108. package/dist/src/hosts/box.d.ts +7 -7
  109. package/dist/src/hosts/box.d.ts.map +1 -1
  110. package/dist/src/hosts/box.js +30 -23
  111. package/dist/src/hosts/box.js.map +1 -1
  112. package/dist/src/hosts/canvas.d.ts +16 -8
  113. package/dist/src/hosts/canvas.d.ts.map +1 -1
  114. package/dist/src/hosts/canvas.js +27 -22
  115. package/dist/src/hosts/canvas.js.map +1 -1
  116. package/dist/src/hosts/codeblock.d.ts +7 -7
  117. package/dist/src/hosts/codeblock.d.ts.map +1 -1
  118. package/dist/src/hosts/codeblock.js +11 -20
  119. package/dist/src/hosts/codeblock.js.map +1 -1
  120. package/dist/src/hosts/flex-container.d.ts +45 -0
  121. package/dist/src/hosts/flex-container.d.ts.map +1 -0
  122. package/dist/src/hosts/flex-container.js +90 -0
  123. package/dist/src/hosts/flex-container.js.map +1 -0
  124. package/dist/src/hosts/hstack.d.ts +6 -11
  125. package/dist/src/hosts/hstack.d.ts.map +1 -1
  126. package/dist/src/hosts/hstack.js +6 -41
  127. package/dist/src/hosts/hstack.js.map +1 -1
  128. package/dist/src/hosts/index.d.ts +4 -0
  129. package/dist/src/hosts/index.d.ts.map +1 -1
  130. package/dist/src/hosts/index.js +10 -0
  131. package/dist/src/hosts/index.js.map +1 -1
  132. package/dist/src/hosts/overlay-item.d.ts +32 -0
  133. package/dist/src/hosts/overlay-item.d.ts.map +1 -0
  134. package/dist/src/hosts/overlay-item.js +54 -0
  135. package/dist/src/hosts/overlay-item.js.map +1 -0
  136. package/dist/src/hosts/overlay.d.ts +30 -0
  137. package/dist/src/hosts/overlay.d.ts.map +1 -0
  138. package/dist/src/hosts/overlay.js +105 -0
  139. package/dist/src/hosts/overlay.js.map +1 -0
  140. package/dist/src/hosts/scroll.d.ts +56 -0
  141. package/dist/src/hosts/scroll.d.ts.map +1 -0
  142. package/dist/src/hosts/scroll.js +204 -0
  143. package/dist/src/hosts/scroll.js.map +1 -0
  144. package/dist/src/hosts/single-child.d.ts +16 -0
  145. package/dist/src/hosts/single-child.d.ts.map +1 -0
  146. package/dist/src/hosts/single-child.js +45 -0
  147. package/dist/src/hosts/single-child.js.map +1 -0
  148. package/dist/src/hosts/spacer.d.ts.map +1 -1
  149. package/dist/src/hosts/spacer.js +7 -3
  150. package/dist/src/hosts/spacer.js.map +1 -1
  151. package/dist/src/hosts/text.d.ts +9 -6
  152. package/dist/src/hosts/text.d.ts.map +1 -1
  153. package/dist/src/hosts/text.js +49 -22
  154. package/dist/src/hosts/text.js.map +1 -1
  155. package/dist/src/hosts/vstack.d.ts +6 -11
  156. package/dist/src/hosts/vstack.d.ts.map +1 -1
  157. package/dist/src/hosts/vstack.js +6 -41
  158. package/dist/src/hosts/vstack.js.map +1 -1
  159. package/dist/src/hosts/zstack.d.ts.map +1 -1
  160. package/dist/src/hosts/zstack.js +16 -5
  161. package/dist/src/hosts/zstack.js.map +1 -1
  162. package/dist/src/index.d.ts +9 -2
  163. package/dist/src/index.d.ts.map +1 -1
  164. package/dist/src/index.js +10 -2
  165. package/dist/src/index.js.map +1 -1
  166. package/dist/src/inline/index.d.ts.map +1 -1
  167. package/dist/src/inline/index.js.map +1 -1
  168. package/dist/src/motion/color-motion-value.d.ts.map +1 -1
  169. package/dist/src/motion/color-motion-value.js.map +1 -1
  170. package/dist/src/motion/color.d.ts +1 -29
  171. package/dist/src/motion/color.d.ts.map +1 -1
  172. package/dist/src/motion/color.js +2 -170
  173. package/dist/src/motion/color.js.map +1 -1
  174. package/dist/src/motion/color.test.js.map +1 -1
  175. package/dist/src/motion/event-emitter.d.ts.map +1 -1
  176. package/dist/src/motion/event-emitter.js.map +1 -1
  177. package/dist/src/motion/frame.js.map +1 -1
  178. package/dist/src/motion/hooks.d.ts.map +1 -1
  179. package/dist/src/motion/hooks.js +8 -3
  180. package/dist/src/motion/hooks.js.map +1 -1
  181. package/dist/src/motion/index.d.ts.map +1 -1
  182. package/dist/src/motion/index.js.map +1 -1
  183. package/dist/src/motion/motion-value.d.ts.map +1 -1
  184. package/dist/src/motion/motion-value.js.map +1 -1
  185. package/dist/src/motion/motion-value.test.js.map +1 -1
  186. package/dist/src/motion/spring-math.d.ts +6 -1
  187. package/dist/src/motion/spring-math.d.ts.map +1 -1
  188. package/dist/src/motion/spring-math.js +6 -1
  189. package/dist/src/motion/spring-math.js.map +1 -1
  190. package/dist/src/motion/types.d.ts.map +1 -1
  191. package/dist/src/motion/types.js.map +1 -1
  192. package/dist/src/profiler.js.map +1 -1
  193. package/dist/src/reconciler/host-config.d.ts +5 -5
  194. package/dist/src/reconciler/host-config.d.ts.map +1 -1
  195. package/dist/src/reconciler/host-config.js +43 -51
  196. package/dist/src/reconciler/host-config.js.map +1 -1
  197. package/dist/src/reconciler/noop-methods.d.ts +29 -0
  198. package/dist/src/reconciler/noop-methods.d.ts.map +1 -0
  199. package/dist/src/reconciler/noop-methods.js +43 -0
  200. package/dist/src/reconciler/noop-methods.js.map +1 -0
  201. package/dist/src/reconciler/types.d.ts +68 -14
  202. package/dist/src/reconciler/types.d.ts.map +1 -1
  203. package/dist/src/remote/Procedures.d.ts +22 -0
  204. package/dist/src/remote/Procedures.d.ts.map +1 -0
  205. package/dist/src/remote/Procedures.js +42 -0
  206. package/dist/src/remote/Procedures.js.map +1 -0
  207. package/dist/src/remote/Router.d.ts +20 -0
  208. package/dist/src/remote/Router.d.ts.map +1 -0
  209. package/dist/src/remote/Router.js +26 -0
  210. package/dist/src/remote/Router.js.map +1 -0
  211. package/dist/src/remote/Server.d.ts +6 -0
  212. package/dist/src/remote/Server.d.ts.map +1 -0
  213. package/dist/src/remote/Server.js +53 -0
  214. package/dist/src/remote/Server.js.map +1 -0
  215. package/dist/src/remote/index.d.ts +18 -0
  216. package/dist/src/remote/index.d.ts.map +1 -0
  217. package/dist/src/remote/index.js +74 -0
  218. package/dist/src/remote/index.js.map +1 -0
  219. package/dist/src/renderer/core/FrameBuilder.d.ts +18 -0
  220. package/dist/src/renderer/core/FrameBuilder.d.ts.map +1 -0
  221. package/dist/src/renderer/core/FrameBuilder.js +38 -0
  222. package/dist/src/renderer/core/FrameBuilder.js.map +1 -0
  223. package/dist/src/renderer/core/RendererState.d.ts +41 -0
  224. package/dist/src/renderer/core/RendererState.d.ts.map +1 -0
  225. package/dist/src/renderer/core/RendererState.js +70 -0
  226. package/dist/src/renderer/core/RendererState.js.map +1 -0
  227. package/dist/src/renderer/core/index.d.ts +3 -0
  228. package/dist/src/renderer/core/index.d.ts.map +1 -0
  229. package/dist/src/renderer/core/index.js +3 -0
  230. package/dist/src/renderer/core/index.js.map +1 -0
  231. package/dist/src/renderer/input/InputProcessor.d.ts +25 -0
  232. package/dist/src/renderer/input/InputProcessor.d.ts.map +1 -0
  233. package/dist/src/renderer/input/InputProcessor.js +81 -0
  234. package/dist/src/renderer/input/InputProcessor.js.map +1 -0
  235. package/dist/src/renderer/input/index.d.ts +2 -0
  236. package/dist/src/renderer/input/index.d.ts.map +1 -0
  237. package/dist/src/renderer/input/index.js +2 -0
  238. package/dist/src/renderer/input/index.js.map +1 -0
  239. package/dist/src/renderer/lifecycle/EventBus.d.ts +41 -0
  240. package/dist/src/renderer/lifecycle/EventBus.d.ts.map +1 -0
  241. package/dist/src/renderer/lifecycle/EventBus.js +78 -0
  242. package/dist/src/renderer/lifecycle/EventBus.js.map +1 -0
  243. package/dist/src/renderer/lifecycle/ResizeManager.d.ts +34 -0
  244. package/dist/src/renderer/lifecycle/ResizeManager.d.ts.map +1 -0
  245. package/dist/src/renderer/lifecycle/ResizeManager.js +47 -0
  246. package/dist/src/renderer/lifecycle/ResizeManager.js.map +1 -0
  247. package/dist/src/renderer/lifecycle/TerminalSetup.d.ts +36 -0
  248. package/dist/src/renderer/lifecycle/TerminalSetup.d.ts.map +1 -0
  249. package/dist/src/renderer/lifecycle/TerminalSetup.js +82 -0
  250. package/dist/src/renderer/lifecycle/TerminalSetup.js.map +1 -0
  251. package/dist/src/renderer/lifecycle/index.d.ts +4 -0
  252. package/dist/src/renderer/lifecycle/index.d.ts.map +1 -0
  253. package/dist/src/renderer/lifecycle/index.js +4 -0
  254. package/dist/src/renderer/lifecycle/index.js.map +1 -0
  255. package/dist/src/renderer/modes/FullscreenRenderer.d.ts +12 -0
  256. package/dist/src/renderer/modes/FullscreenRenderer.d.ts.map +1 -0
  257. package/dist/src/renderer/modes/FullscreenRenderer.js +52 -0
  258. package/dist/src/renderer/modes/FullscreenRenderer.js.map +1 -0
  259. package/dist/src/renderer/modes/InlineRenderer.d.ts +25 -0
  260. package/dist/src/renderer/modes/InlineRenderer.d.ts.map +1 -0
  261. package/dist/src/renderer/modes/InlineRenderer.js +161 -0
  262. package/dist/src/renderer/modes/InlineRenderer.js.map +1 -0
  263. package/dist/src/renderer/modes/RendererMode.d.ts +42 -0
  264. package/dist/src/renderer/modes/RendererMode.d.ts.map +1 -0
  265. package/dist/src/renderer/modes/RendererMode.js +2 -0
  266. package/dist/src/renderer/modes/RendererMode.js.map +1 -0
  267. package/dist/src/renderer/modes/StaticContentRenderer.d.ts +25 -0
  268. package/dist/src/renderer/modes/StaticContentRenderer.d.ts.map +1 -0
  269. package/dist/src/renderer/modes/StaticContentRenderer.js +47 -0
  270. package/dist/src/renderer/modes/StaticContentRenderer.js.map +1 -0
  271. package/dist/src/renderer/modes/index.d.ts +5 -0
  272. package/dist/src/renderer/modes/index.d.ts.map +1 -0
  273. package/dist/src/renderer/modes/index.js +4 -0
  274. package/dist/src/renderer/modes/index.js.map +1 -0
  275. package/dist/src/renderer-context.d.ts +9 -0
  276. package/dist/src/renderer-context.d.ts.map +1 -0
  277. package/dist/src/renderer-context.js +22 -0
  278. package/dist/src/renderer-context.js.map +1 -0
  279. package/dist/src/renderer-types.d.ts +103 -0
  280. package/dist/src/renderer-types.d.ts.map +1 -0
  281. package/dist/src/renderer-types.js +2 -0
  282. package/dist/src/renderer-types.js.map +1 -0
  283. package/dist/src/renderer.d.ts +4 -86
  284. package/dist/src/renderer.d.ts.map +1 -1
  285. package/dist/src/renderer.js +214 -384
  286. package/dist/src/renderer.js.map +1 -1
  287. package/dist/src/test/index.d.ts.map +1 -1
  288. package/dist/src/test/index.js.map +1 -1
  289. package/dist/src/test/mock-streams.d.ts.map +1 -1
  290. package/dist/src/test/mock-streams.js.map +1 -1
  291. package/dist/src/test/render-tui.d.ts.map +1 -1
  292. package/dist/src/test/render-tui.js +2 -5
  293. package/dist/src/test/render-tui.js.map +1 -1
  294. package/dist/src/trace/SpanTree.d.ts.map +1 -1
  295. package/dist/src/trace/SpanTree.js +21 -11
  296. package/dist/src/trace/SpanTree.js.map +1 -1
  297. package/dist/src/trace/format-value.d.ts +15 -0
  298. package/dist/src/trace/format-value.d.ts.map +1 -0
  299. package/dist/src/trace/format-value.js +77 -0
  300. package/dist/src/trace/format-value.js.map +1 -0
  301. package/dist/src/trace/index.d.ts.map +1 -1
  302. package/dist/src/trace/index.js.map +1 -1
  303. package/dist/src/trace/location.js +1 -1
  304. package/dist/src/trace/location.js.map +1 -1
  305. package/dist/src/trace/span-processor.d.ts.map +1 -1
  306. package/dist/src/trace/span-processor.js.map +1 -1
  307. package/dist/src/trace/span-state.d.ts +19 -2
  308. package/dist/src/trace/span-state.d.ts.map +1 -1
  309. package/dist/src/trace/span-state.js +62 -31
  310. package/dist/src/trace/span-state.js.map +1 -1
  311. package/dist/src/trace/tui-logger.js.map +1 -1
  312. package/dist/src/utils/border.d.ts +1 -1
  313. package/dist/src/utils/border.d.ts.map +1 -1
  314. package/dist/src/utils/border.js +6 -0
  315. package/dist/src/utils/border.js.map +1 -1
  316. package/dist/src/utils/flex-layout.d.ts +2 -1
  317. package/dist/src/utils/flex-layout.d.ts.map +1 -1
  318. package/dist/src/utils/flex-layout.js +22 -33
  319. package/dist/src/utils/flex-layout.js.map +1 -1
  320. package/dist/src/utils/index.d.ts +1 -1
  321. package/dist/src/utils/index.d.ts.map +1 -1
  322. package/dist/src/utils/index.js +1 -1
  323. package/dist/src/utils/index.js.map +1 -1
  324. package/dist/src/utils/padding.d.ts.map +1 -1
  325. package/dist/src/utils/padding.js.map +1 -1
  326. package/dist/src/utils/styles.d.ts +20 -1
  327. package/dist/src/utils/styles.d.ts.map +1 -1
  328. package/dist/src/utils/styles.js +36 -1
  329. package/dist/src/utils/styles.js.map +1 -1
  330. package/dist/src/visualize/index.d.ts +8 -19
  331. package/dist/src/visualize/index.d.ts.map +1 -1
  332. package/dist/src/visualize/index.js +11 -25
  333. package/dist/src/visualize/index.js.map +1 -1
  334. package/dist/tsconfig.tsbuildinfo +1 -1
  335. package/jsx-dev-runtime.ts +5 -0
  336. package/jsx-runtime.ts +54 -0
  337. package/package.json +124 -92
  338. package/src/codeblock.tsx +34 -34
  339. package/src/components/Divider.tsx +23 -0
  340. package/src/components/Markdown.tsx +380 -0
  341. package/src/components/MultilineTextInput.tsx +749 -0
  342. package/src/components/Overlay.tsx +56 -0
  343. package/src/components/Static.tsx +68 -0
  344. package/src/components/TextInput.tsx +356 -0
  345. package/src/components/index.ts +6 -0
  346. package/src/components/text-editing.ts +464 -0
  347. package/src/console/ConsoleCapture.ts +272 -0
  348. package/src/console/ConsolePopover.tsx +487 -0
  349. package/src/console/clipboard.ts +81 -0
  350. package/src/console/index.ts +42 -0
  351. package/src/console/useConsole.ts +129 -0
  352. package/src/debug/DebugOverlay.ts +557 -0
  353. package/src/debug/DiagnosticsPanel.tsx +27 -27
  354. package/src/dev/Toast.tsx +117 -0
  355. package/src/dev/index.ts +2 -0
  356. package/src/dev.tsx +489 -0
  357. package/src/highlight.ts +46 -46
  358. package/src/hmr-plugin.ts +61 -0
  359. package/src/hooks/index.ts +4 -0
  360. package/src/hooks/use-keyboard.ts +44 -24
  361. package/src/hooks/use-mouse.ts +51 -0
  362. package/src/hooks/use-paste.ts +21 -6
  363. package/src/hooks/use-scroll.ts +386 -0
  364. package/src/hooks/useFrameStats.ts +17 -17
  365. package/src/hosts/base.ts +180 -59
  366. package/src/hosts/box.ts +117 -94
  367. package/src/hosts/canvas.ts +170 -141
  368. package/src/hosts/codeblock.ts +117 -133
  369. package/src/hosts/flex-container.ts +124 -0
  370. package/src/hosts/hstack.ts +11 -59
  371. package/src/hosts/index.ts +24 -14
  372. package/src/hosts/overlay-item.ts +72 -0
  373. package/src/hosts/overlay.ts +125 -0
  374. package/src/hosts/scroll.ts +255 -0
  375. package/src/hosts/single-child.ts +52 -0
  376. package/src/hosts/spacer.ts +30 -26
  377. package/src/hosts/text.ts +198 -164
  378. package/src/hosts/vstack.ts +11 -59
  379. package/src/hosts/zstack.ts +79 -67
  380. package/src/index.ts +44 -19
  381. package/src/inline/index.tsx +123 -123
  382. package/src/motion/color-motion-value.ts +67 -67
  383. package/src/motion/color.test.ts +107 -107
  384. package/src/motion/color.ts +9 -190
  385. package/src/motion/event-emitter.ts +20 -20
  386. package/src/motion/frame.ts +35 -35
  387. package/src/motion/hooks.ts +144 -139
  388. package/src/motion/index.ts +10 -10
  389. package/src/motion/motion-value.test.ts +207 -207
  390. package/src/motion/motion-value.ts +112 -112
  391. package/src/motion/spring-math.ts +88 -83
  392. package/src/motion/types.ts +25 -25
  393. package/src/profiler.ts +50 -50
  394. package/src/reconciler/host-config.ts +152 -174
  395. package/src/reconciler/noop-methods.ts +55 -0
  396. package/src/reconciler/types.ts +112 -46
  397. package/src/remote/Procedures.ts +52 -0
  398. package/src/remote/Router.ts +58 -0
  399. package/src/remote/Server.ts +76 -0
  400. package/src/remote/index.ts +90 -0
  401. package/src/renderer/core/FrameBuilder.ts +49 -0
  402. package/src/renderer/core/RendererState.ts +80 -0
  403. package/src/renderer/core/index.ts +2 -0
  404. package/src/renderer/input/InputProcessor.ts +94 -0
  405. package/src/renderer/input/index.ts +1 -0
  406. package/src/renderer/lifecycle/EventBus.ts +90 -0
  407. package/src/renderer/lifecycle/ResizeManager.ts +65 -0
  408. package/src/renderer/lifecycle/TerminalSetup.ts +105 -0
  409. package/src/renderer/lifecycle/index.ts +3 -0
  410. package/src/renderer/modes/FullscreenRenderer.ts +53 -0
  411. package/src/renderer/modes/InlineRenderer.ts +186 -0
  412. package/src/renderer/modes/RendererMode.ts +46 -0
  413. package/src/renderer/modes/StaticContentRenderer.ts +56 -0
  414. package/src/renderer/modes/index.ts +4 -0
  415. package/src/renderer-context.ts +27 -0
  416. package/src/renderer-types.ts +109 -0
  417. package/src/renderer.ts +392 -642
  418. package/src/test/index.ts +5 -5
  419. package/src/test/mock-streams.ts +115 -115
  420. package/src/test/render-tui.ts +84 -87
  421. package/src/utils/border.ts +79 -73
  422. package/src/utils/flex-layout.ts +80 -93
  423. package/src/utils/index.ts +1 -1
  424. package/src/utils/padding.ts +27 -27
  425. package/src/utils/styles.ts +50 -7
  426. package/src/visualize/index.tsx +225 -240
  427. package/dist/src/output.d.ts +0 -47
  428. package/dist/src/output.d.ts.map +0 -1
  429. package/dist/src/output.js +0 -125
  430. package/dist/src/output.js.map +0 -1
  431. package/dist/src/terminal.d.ts +0 -37
  432. package/dist/src/terminal.d.ts.map +0 -1
  433. package/dist/src/terminal.js +0 -65
  434. package/dist/src/terminal.js.map +0 -1
  435. package/src/output.ts +0 -156
  436. package/src/terminal.ts +0 -67
  437. package/src/trace/SpanTree.tsx +0 -195
  438. package/src/trace/index.tsx +0 -205
  439. package/src/trace/location.ts +0 -90
  440. package/src/trace/span-processor.ts +0 -65
  441. package/src/trace/span-state.ts +0 -286
  442. package/src/trace/tui-logger.ts +0 -72
@@ -0,0 +1,161 @@
1
+ import { ANSI, emitRowWithReset, rowContentWidth, findChangeWindow } from "@effect-tui/core";
2
+ /**
3
+ * Inline rendering mode that renders in-place without alternate buffer.
4
+ * When content exceeds terminal height, shows the bottom portion (bottom-aligned truncation).
5
+ */
6
+ export class InlineRenderer {
7
+ previousHeight = 0;
8
+ previousStartRow = 0; // Track which row we started from (for truncation)
9
+ _needsFullRerender = false;
10
+ printedWidths = [];
11
+ _forceFullOutput = false;
12
+ generateOutput(ctx) {
13
+ const { prevBuffer, frameHeight, contentHeight } = ctx;
14
+ let output = "";
15
+ // Calculate visible region (bottom-aligned when overflowing)
16
+ const isOverflowing = contentHeight > frameHeight;
17
+ const visibleHeight = Math.min(contentHeight, frameHeight);
18
+ const startRow = isOverflowing ? contentHeight - frameHeight : 0;
19
+ // Detect if viewport shifted (content grew/shrank affecting visible region)
20
+ const startRowChanged = startRow !== this.previousStartRow;
21
+ const needsFullRedraw = this.previousHeight >= frameHeight || startRowChanged;
22
+ // Need full redraw if: at terminal limit, or viewport shifted
23
+ if (needsFullRedraw) {
24
+ // Clear visible area and redraw (prepend to output for atomic write)
25
+ if (this.previousHeight > 0) {
26
+ output += ANSI.cursor.up(this.previousHeight);
27
+ }
28
+ output += ANSI.cursor.startOfLine;
29
+ this.previousStartRow = startRow;
30
+ this.printedWidths = [];
31
+ }
32
+ else if (this.previousHeight > 0) {
33
+ // Normal case: move cursor up to start of previous output
34
+ output += ANSI.cursor.up(this.previousHeight);
35
+ output += ANSI.cursor.startOfLine;
36
+ }
37
+ // Generate output for visible region
38
+ // Force full output after static content handling (diff mode cursor tracking gets desynchronized)
39
+ if (prevBuffer && !needsFullRedraw && !this._forceFullOutput) {
40
+ output += this.generateDiffOutput(ctx, visibleHeight, startRow);
41
+ }
42
+ else {
43
+ output += this.generateFullOutput(ctx, visibleHeight, startRow, startRow + visibleHeight);
44
+ this._forceFullOutput = false;
45
+ }
46
+ this.previousHeight = visibleHeight;
47
+ this.previousStartRow = startRow;
48
+ return { output, contentHeight: visibleHeight };
49
+ }
50
+ generateDiffOutput(ctx, visibleHeight, startRow) {
51
+ const { nextBuffer, prevBuffer, palette, frameWidth } = ctx;
52
+ if (!prevBuffer)
53
+ return "";
54
+ let output = "";
55
+ const rowsToProcess = Math.max(visibleHeight, this.previousHeight);
56
+ let cursorRow = 0;
57
+ const moveToRow = (targetRow) => {
58
+ const delta = targetRow - cursorRow;
59
+ if (delta > 0) {
60
+ output += ANSI.cursor.down(delta);
61
+ }
62
+ else if (delta < 0) {
63
+ output += ANSI.cursor.up(-delta);
64
+ }
65
+ cursorRow = targetRow;
66
+ };
67
+ for (let screenY = 0; screenY < rowsToProcess; screenY++) {
68
+ const bufferY = startRow + screenY;
69
+ // Rows beyond visible height: clear if previously printed
70
+ if (screenY >= visibleHeight) {
71
+ const prevW = this.printedWidths[screenY] ?? 0;
72
+ if (prevW > 0) {
73
+ moveToRow(screenY);
74
+ output += ANSI.cursor.toCol(1) + palette.sgr(0) + " ".repeat(prevW);
75
+ this.printedWidths[screenY] = 0;
76
+ }
77
+ continue;
78
+ }
79
+ const change = findChangeWindow(prevBuffer, nextBuffer, bufferY, frameWidth);
80
+ const newW = rowContentWidth(nextBuffer, bufferY, frameWidth);
81
+ const prevW = this.printedWidths[screenY] ?? 0;
82
+ if (!change) {
83
+ // No change; maybe need to clear tail if content shrunk
84
+ if (prevW > newW) {
85
+ moveToRow(screenY);
86
+ output += ANSI.cursor.toCol(newW + 1) + palette.sgr(0) + " ".repeat(prevW - newW);
87
+ this.printedWidths[screenY] = newW;
88
+ }
89
+ continue;
90
+ }
91
+ // Emit changed region [left..right]
92
+ moveToRow(screenY);
93
+ output += ANSI.cursor.toCol(change.left + 1);
94
+ output += emitRowWithReset(nextBuffer, palette, bufferY, frameWidth, change.left, change.right + 1);
95
+ // Clear tail if shrunk
96
+ const effectiveW = Math.max(newW, change.right + 1);
97
+ if (prevW > effectiveW) {
98
+ output += ANSI.cursor.toCol(effectiveW + 1) + palette.sgr(0) + " ".repeat(prevW - effectiveW);
99
+ }
100
+ this.printedWidths[screenY] = newW;
101
+ }
102
+ // Ensure cursor ends just after the dynamic block for next frame positioning
103
+ moveToRow(visibleHeight);
104
+ output += ANSI.cursor.toCol(1);
105
+ return output;
106
+ }
107
+ generateFullOutput(ctx, rowCount, startRow, endRow) {
108
+ const { nextBuffer, palette, frameWidth } = ctx;
109
+ let output = "";
110
+ // Full redraw inline: clear each line first, then emit content
111
+ for (let bufferY = startRow; bufferY < endRow; bufferY++) {
112
+ const screenY = bufferY - startRow;
113
+ const trimmedWidth = rowContentWidth(nextBuffer, bufferY, frameWidth);
114
+ // Full-width emit avoids reliance on line clears.
115
+ output += emitRowWithReset(nextBuffer, palette, bufferY, frameWidth, 0, frameWidth);
116
+ output += "\r\n";
117
+ // Track line widths for resize reflow calculation
118
+ this.printedWidths[screenY] = trimmedWidth;
119
+ }
120
+ // Clear any extra lines if content shrank
121
+ for (let screenY = rowCount; screenY < this.previousHeight; screenY++) {
122
+ output += palette.sgr(0) + " ".repeat(frameWidth) + "\r\n";
123
+ this.printedWidths[screenY] = 0;
124
+ }
125
+ // Move cursor back up to end of content
126
+ if (this.previousHeight > rowCount) {
127
+ output += ANSI.cursor.up(this.previousHeight - rowCount);
128
+ }
129
+ return output;
130
+ }
131
+ handleResize(newWidth, _newHeight, prevWidth) {
132
+ // Any width change triggers full rerender (Ink-style: clear + replay static)
133
+ if (newWidth !== prevWidth) {
134
+ this._needsFullRerender = true;
135
+ }
136
+ }
137
+ /** Check if full rerender is needed (clear screen + replay static) */
138
+ needsFullRerender() {
139
+ return this._needsFullRerender;
140
+ }
141
+ /** Clear the full rerender flag after handling */
142
+ clearFullRerenderFlag() {
143
+ this._needsFullRerender = false;
144
+ this.previousHeight = 0;
145
+ this.previousStartRow = 0;
146
+ this.printedWidths = [];
147
+ }
148
+ reset() {
149
+ this.previousHeight = 0;
150
+ this.previousStartRow = 0;
151
+ this.printedWidths = [];
152
+ }
153
+ /** Force full output on the next frame (needed after static content to resync cursor tracking) */
154
+ forceFullOutputOnce() {
155
+ this._forceFullOutput = true;
156
+ }
157
+ getPreviousHeight() {
158
+ return this.previousHeight;
159
+ }
160
+ }
161
+ //# sourceMappingURL=InlineRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InlineRenderer.js","sourceRoot":"","sources":["../../../../src/renderer/modes/InlineRenderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { CellBuffer, Palette } from "@effect-tui/core";
2
+ import type { TuiWriteStream } from "../../renderer-types.js";
3
+ /**
4
+ * Context passed to render mode output generation.
5
+ */
6
+ export interface RenderContext {
7
+ nextBuffer: CellBuffer;
8
+ prevBuffer: CellBuffer | null;
9
+ palette: Palette;
10
+ frameWidth: number;
11
+ /** Terminal height (viewport) */
12
+ frameHeight: number;
13
+ /** Actual content height (may exceed frameHeight in inline mode) */
14
+ contentHeight: number;
15
+ enableDiff: boolean;
16
+ stdout: TuiWriteStream;
17
+ }
18
+ /**
19
+ * Result of generating output for a frame.
20
+ */
21
+ export interface RenderOutput {
22
+ output: string;
23
+ contentHeight: number;
24
+ }
25
+ /**
26
+ * Interface for render mode implementations.
27
+ */
28
+ export interface RendererMode {
29
+ /**
30
+ * Generate ANSI output for the current frame.
31
+ */
32
+ generateOutput(ctx: RenderContext): RenderOutput;
33
+ /**
34
+ * Handle a resize event. Returns true if a full clear is needed.
35
+ */
36
+ handleResize(newWidth: number, newHeight: number, prevWidth: number): void;
37
+ /**
38
+ * Reset any mode-specific state (e.g., after static content flush).
39
+ */
40
+ reset(): void;
41
+ }
42
+ //# sourceMappingURL=RendererMode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RendererMode.d.ts","sourceRoot":"","sources":["../../../../src/renderer/modes/RendererMode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAE7D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,UAAU,EAAE,UAAU,CAAA;IACtB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAA;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,oEAAoE;IACpE,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,OAAO,CAAA;IACnB,MAAM,EAAE,cAAc,CAAA;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B;;OAEG;IACH,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,YAAY,CAAA;IAEhD;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IAE1E;;OAEG;IACH,KAAK,IAAI,IAAI,CAAA;CACb"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RendererMode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RendererMode.js","sourceRoot":"","sources":["../../../../src/renderer/modes/RendererMode.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ import { type Palette } from "@effect-tui/core";
2
+ import type { HostInstance } from "../../reconciler/types.js";
3
+ import type { TuiWriteStream } from "../../renderer-types.js";
4
+ /**
5
+ * Renders static content to scrollback (inline mode only).
6
+ * Static content is rendered once and doesn't update with the dynamic section.
7
+ * Caches all output for replay on resize (Ink-style).
8
+ */
9
+ export declare class StaticContentRenderer {
10
+ private palette;
11
+ private cachedOutput;
12
+ constructor(_stdout: TuiWriteStream, // Kept for API compatibility, not used (writes are atomic in renderer.ts)
13
+ palette: Palette);
14
+ /** Get all cached static output for replay on resize */
15
+ getCachedOutput(): string;
16
+ /** Clear the cache (call after full terminal clear + replay) */
17
+ clearCache(): void;
18
+ /**
19
+ * Render a static node and return the output string.
20
+ * Static content is append-only - no cursor positioning needed.
21
+ * Caller clears dynamic area first, then appends this output.
22
+ */
23
+ render(staticNode: HostInstance, frameWidth: number): string;
24
+ }
25
+ //# sourceMappingURL=StaticContentRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StaticContentRenderer.d.ts","sourceRoot":"","sources":["../../../../src/renderer/modes/StaticContentRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiD,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC9F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAE7D;;;;GAIG;AACH,qBAAa,qBAAqB;IAKhC,OAAO,CAAC,OAAO;IAJhB,OAAO,CAAC,YAAY,CAAK;gBAGxB,OAAO,EAAE,cAAc,EAAE,0EAA0E;IAC3F,OAAO,EAAE,OAAO;IAGzB,wDAAwD;IACxD,eAAe,IAAI,MAAM;IAIzB,gEAAgE;IAChE,UAAU,IAAI,IAAI;IAIlB;;;;OAIG;IACH,MAAM,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;CAuB5D"}
@@ -0,0 +1,47 @@
1
+ import { CellBuffer, emitRowWithReset, rowContentWidth } from "@effect-tui/core";
2
+ /**
3
+ * Renders static content to scrollback (inline mode only).
4
+ * Static content is rendered once and doesn't update with the dynamic section.
5
+ * Caches all output for replay on resize (Ink-style).
6
+ */
7
+ export class StaticContentRenderer {
8
+ palette;
9
+ cachedOutput = ""; // Accumulates all static content for replay
10
+ constructor(_stdout, // Kept for API compatibility, not used (writes are atomic in renderer.ts)
11
+ palette) {
12
+ this.palette = palette;
13
+ }
14
+ /** Get all cached static output for replay on resize */
15
+ getCachedOutput() {
16
+ return this.cachedOutput;
17
+ }
18
+ /** Clear the cache (call after full terminal clear + replay) */
19
+ clearCache() {
20
+ this.cachedOutput = "";
21
+ }
22
+ /**
23
+ * Render a static node and return the output string.
24
+ * Static content is append-only - no cursor positioning needed.
25
+ * Caller clears dynamic area first, then appends this output.
26
+ */
27
+ render(staticNode, frameWidth) {
28
+ // Measure and layout static content
29
+ const staticSize = staticNode.measure(frameWidth, Number.MAX_SAFE_INTEGER);
30
+ staticNode.layout({ x: 0, y: 0, w: frameWidth, h: staticSize.h });
31
+ // Render to a temporary buffer
32
+ const staticBuffer = new CellBuffer(frameWidth, staticSize.h);
33
+ staticBuffer.clear(0);
34
+ staticNode.render(staticBuffer, this.palette);
35
+ // Build content lines - append-only, no cursor movement
36
+ let contentLines = "";
37
+ for (let y = 0; y < staticSize.h; y++) {
38
+ const trimmedWidth = rowContentWidth(staticBuffer, y, frameWidth);
39
+ const line = emitRowWithReset(staticBuffer, this.palette, y, frameWidth, 0, trimmedWidth);
40
+ contentLines += line + "\n";
41
+ }
42
+ // Cache the content for replay on resize
43
+ this.cachedOutput += contentLines;
44
+ return contentLines;
45
+ }
46
+ }
47
+ //# sourceMappingURL=StaticContentRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StaticContentRenderer.js","sourceRoot":"","sources":["../../../../src/renderer/modes/StaticContentRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAgB,MAAM,kBAAkB,CAAA;AAI9F;;;;GAIG;AACH,MAAM,OAAO,qBAAqB;IAKxB;IAJD,YAAY,GAAG,EAAE,CAAA,CAAC,4CAA4C;IAEtE,YACC,OAAuB,EAAE,0EAA0E;IAC3F,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IACtB,CAAC;IAEJ,wDAAwD;IACxD,eAAe;QACd,OAAO,IAAI,CAAC,YAAY,CAAA;IACzB,CAAC;IAED,gEAAgE;IAChE,UAAU;QACT,IAAI,CAAC,YAAY,GAAG,EAAE,CAAA;IACvB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,UAAwB,EAAE,UAAkB;QAClD,oCAAoC;QACpC,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAA;QAC1E,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAA;QAEjE,+BAA+B;QAC/B,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;QAC7D,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACrB,UAAU,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QAE7C,wDAAwD;QACxD,IAAI,YAAY,GAAG,EAAE,CAAA;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,YAAY,GAAG,eAAe,CAAC,YAAY,EAAE,CAAC,EAAE,UAAU,CAAC,CAAA;YACjE,MAAM,IAAI,GAAG,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,CAAC,CAAA;YACzF,YAAY,IAAI,IAAI,GAAG,IAAI,CAAA;QAC5B,CAAC;QAED,yCAAyC;QACzC,IAAI,CAAC,YAAY,IAAI,YAAY,CAAA;QAEjC,OAAO,YAAY,CAAA;IACpB,CAAC;CACD"}
@@ -0,0 +1,5 @@
1
+ export type { RendererMode, RenderContext, RenderOutput } from "./RendererMode.js";
2
+ export { FullscreenRenderer } from "./FullscreenRenderer.js";
3
+ export { InlineRenderer } from "./InlineRenderer.js";
4
+ export { StaticContentRenderer } from "./StaticContentRenderer.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/renderer/modes/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { FullscreenRenderer } from "./FullscreenRenderer.js";
2
+ export { InlineRenderer } from "./InlineRenderer.js";
3
+ export { StaticContentRenderer } from "./StaticContentRenderer.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/renderer/modes/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { TuiRenderer } from "./renderer-types.js";
2
+ export declare const RendererContext: import("react").Context<TuiRenderer | null>;
3
+ export declare function useRenderer(): TuiRenderer;
4
+ /** Hook that returns terminal size and re-renders on resize */
5
+ export declare function useTerminalSize(): {
6
+ width: number;
7
+ height: number;
8
+ };
9
+ //# sourceMappingURL=renderer-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer-context.d.ts","sourceRoot":"","sources":["../../src/renderer-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAGtD,eAAO,MAAM,eAAe,6CAA0C,CAAA;AAEtE,wBAAgB,WAAW,IAAI,WAAW,CAMzC;AAED,+DAA+D;AAC/D,wBAAgB,eAAe,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAWnE"}
@@ -0,0 +1,22 @@
1
+ import { createContext, useContext, useState, useEffect } from "react";
2
+ // Context for accessing renderer in components
3
+ export const RendererContext = createContext(null);
4
+ export function useRenderer() {
5
+ const renderer = useContext(RendererContext);
6
+ if (!renderer) {
7
+ throw new Error("useRenderer must be used within a TUI renderer");
8
+ }
9
+ return renderer;
10
+ }
11
+ /** Hook that returns terminal size and re-renders on resize */
12
+ export function useTerminalSize() {
13
+ const renderer = useRenderer();
14
+ const [size, setSize] = useState({ width: renderer.width, height: renderer.height });
15
+ useEffect(() => {
16
+ return renderer.onResize((width, height) => {
17
+ setSize({ width, height });
18
+ });
19
+ }, [renderer]);
20
+ return size;
21
+ }
22
+ //# sourceMappingURL=renderer-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer-context.js","sourceRoot":"","sources":["../../src/renderer-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtE,+CAA+C;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAqB,IAAI,CAAC,CAAA;AAEtE,MAAM,UAAU,WAAW;IAC1B,MAAM,QAAQ,GAAG,UAAU,CAAC,eAAe,CAAC,CAAA;IAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAA;IAClE,CAAC;IACD,OAAO,QAAQ,CAAA;AAChB,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,eAAe;IAC9B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IAEpF,SAAS,CAAC,GAAG,EAAE;QACd,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAC1C,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QAC3B,CAAC,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,OAAO,IAAI,CAAA;AACZ,CAAC"}
@@ -0,0 +1,103 @@
1
+ import type { KeyMsg, MouseMsg } from "@effect-tui/core";
2
+ import type { HostInstance, HostContext } from "./reconciler/types.js";
3
+ /** Minimal write stream interface for renderer output */
4
+ export interface TuiWriteStream {
5
+ write(s: string): void;
6
+ columns: number;
7
+ rows: number;
8
+ on(event: string, cb: () => void): void;
9
+ removeListener(event: string, cb: () => void): void;
10
+ }
11
+ /** Minimal read stream interface for renderer input */
12
+ export interface TuiReadStream {
13
+ isTTY?: boolean;
14
+ setRawMode?(mode: boolean): void;
15
+ resume?(): void;
16
+ on(event: string, cb: (data: Buffer) => void): void;
17
+ removeListener(event: string, cb: (data: Buffer) => void): void;
18
+ }
19
+ export interface TuiRenderer {
20
+ /** Terminal width */
21
+ width: number;
22
+ /** Terminal height */
23
+ height: number;
24
+ /** Request a re-render */
25
+ requestRender(): void;
26
+ /** Subscribe to per-frame stats (if enabled). */
27
+ onFrameStats?(handler: (stats: FrameStats) => void): () => void;
28
+ /** Subscribe to keyboard events */
29
+ onKey(handler: (key: KeyMsg) => void): () => void;
30
+ /** Subscribe to mouse events (clicks, scroll, etc.) */
31
+ onMouse(handler: (mouse: MouseMsg) => void): () => void;
32
+ /** Subscribe to paste events (bracketed paste mode). */
33
+ onPaste?(handler: (text: string) => void): () => void;
34
+ /** Subscribe to resize events */
35
+ onResize(handler: (width: number, height: number) => void): () => void;
36
+ /** Stop the renderer */
37
+ stop(): void;
38
+ /** Manually trigger one render frame (only in manualMode) */
39
+ flush(): void;
40
+ /**
41
+ * Get the current screen as ANSI string (for screenshots/debugging).
42
+ * Returns the last rendered frame with all ANSI color codes intact.
43
+ */
44
+ getScreenshot(): string;
45
+ /** Dispatch a key event (for remote control) */
46
+ dispatchKey?(key: KeyMsg): void;
47
+ /** Dispatch a paste event (for remote control) */
48
+ dispatchPaste?(text: string): void;
49
+ /** Dispatch a resize event (for remote control) */
50
+ dispatchResize?(width: number, height: number): void;
51
+ }
52
+ /** Internal renderer type with container reference */
53
+ export interface TuiRendererInternal extends TuiRenderer {
54
+ _container: Container | null;
55
+ }
56
+ export interface Container {
57
+ root: HostInstance | null;
58
+ ctx: HostContext;
59
+ /** @internal Static content root node (for Static component) */
60
+ staticRoot?: HostInstance | null;
61
+ /** @internal Flag indicating static content needs flushing */
62
+ staticDirty?: boolean;
63
+ }
64
+ export interface RendererOptions {
65
+ fps?: number;
66
+ stdout?: NodeJS.WriteStream | TuiWriteStream;
67
+ stdin?: NodeJS.ReadStream | TuiReadStream;
68
+ /** Render mode: "fullscreen" uses alternate buffer, "inline" renders in-place */
69
+ mode?: "fullscreen" | "inline";
70
+ /** Exit the process on Ctrl+C unless preventDefault was called. Defaults to true. */
71
+ exitOnCtrlC?: boolean;
72
+ /** Enable diffed rendering (per-line). Defaults to true in runtime, false in manualMode (tests). */
73
+ diff?: boolean;
74
+ /** Skip automatic render loop. Call flush() manually to render frames. */
75
+ manualMode?: boolean;
76
+ /** Skip fullscreen/raw mode setup (for testing) */
77
+ skipTerminalSetup?: boolean;
78
+ /** Enable bracketed paste (default true). */
79
+ enablePaste?: boolean;
80
+ /** Enable mouse mode for scroll wheel events (default true in fullscreen). */
81
+ enableMouse?: boolean;
82
+ /** Optional per-frame diagnostics hook. Called after each frame is written. */
83
+ debug?: {
84
+ onFrame?: (stats: FrameStats) => void;
85
+ };
86
+ }
87
+ export interface FrameStats {
88
+ mode: "fullscreen" | "inline";
89
+ width: number;
90
+ height: number;
91
+ contentHeight: number;
92
+ bytes: number;
93
+ frameMs: number;
94
+ phases: {
95
+ clear: number;
96
+ layout: number;
97
+ render: number;
98
+ diffAnsi: number;
99
+ write: number;
100
+ };
101
+ timestamp: number;
102
+ }
103
+ //# sourceMappingURL=renderer-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer-types.d.ts","sourceRoot":"","sources":["../../src/renderer-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=renderer-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer-types.js","sourceRoot":"","sources":["../../src/renderer-types.ts"],"names":[],"mappings":""}
@@ -1,85 +1,7 @@
1
- import React, { type ReactNode } from "react";
2
- import { type KeyMsg } from "@effect-tui/core";
3
- /** Minimal write stream interface for renderer output */
4
- export interface TuiWriteStream {
5
- write(s: string): void;
6
- columns: number;
7
- rows: number;
8
- on(event: string, cb: () => void): void;
9
- }
10
- /** Minimal read stream interface for renderer input */
11
- export interface TuiReadStream {
12
- isTTY?: boolean;
13
- setRawMode?(mode: boolean): void;
14
- resume?(): void;
15
- on(event: string, cb: (data: Buffer) => void): void;
16
- }
17
- export interface TuiRenderer {
18
- /** Terminal width */
19
- width: number;
20
- /** Terminal height */
21
- height: number;
22
- /** Request a re-render */
23
- requestRender(): void;
24
- /** Subscribe to per-frame stats (if enabled). */
25
- onFrameStats?(handler: (stats: FrameStats) => void): () => void;
26
- /** Subscribe to keyboard events */
27
- onKey(handler: (key: KeyMsg) => void): () => void;
28
- /** Subscribe to paste events (bracketed paste mode). */
29
- onPaste?(handler: (text: string) => void): () => void;
30
- /** Subscribe to resize events */
31
- onResize(handler: (width: number, height: number) => void): () => void;
32
- /** Stop the renderer */
33
- stop(): void;
34
- /** Manually trigger one render frame (only in manualMode) */
35
- flush(): void;
36
- }
37
- export declare const RendererContext: React.Context<TuiRenderer | null>;
38
- export declare function useRenderer(): TuiRenderer;
39
- /** Hook that returns terminal size and re-renders on resize */
40
- export declare function useTerminalSize(): {
41
- width: number;
42
- height: number;
43
- };
44
- export interface RendererOptions {
45
- fps?: number;
46
- stdout?: NodeJS.WriteStream | TuiWriteStream;
47
- stdin?: NodeJS.ReadStream | TuiReadStream;
48
- /** Render mode: "fullscreen" uses alternate buffer, "inline" renders in-place */
49
- mode?: "fullscreen" | "inline";
50
- /** Exit the process on Ctrl+C unless preventDefault was called. Defaults to true. */
51
- exitOnCtrlC?: boolean;
52
- /** Enable diffed rendering (per-line). Defaults to true in runtime, false in manualMode (tests). */
53
- diff?: boolean;
54
- /** Enable diffed rendering for inline mode (off by default; eraseLines baseline). */
55
- diffInline?: boolean;
56
- /** Skip automatic render loop. Call flush() manually to render frames. */
57
- manualMode?: boolean;
58
- /** Skip fullscreen/raw mode setup (for testing) */
59
- skipTerminalSetup?: boolean;
60
- /** Enable bracketed paste (default true). */
61
- enablePaste?: boolean;
62
- /** Optional per-frame diagnostics hook. Called after each frame is written. */
63
- debug?: {
64
- onFrame?: (stats: FrameStats) => void;
65
- };
66
- }
67
- export interface FrameStats {
68
- mode: "fullscreen" | "inline";
69
- width: number;
70
- height: number;
71
- contentHeight: number;
72
- bytes: number;
73
- frameMs: number;
74
- phases: {
75
- clear: number;
76
- layout: number;
77
- render: number;
78
- diffAnsi: number;
79
- write: number;
80
- };
81
- timestamp: number;
82
- }
1
+ import { type ReactNode } from "react";
2
+ import type { TuiRenderer, RendererOptions } from "./renderer-types.js";
3
+ export type { TuiWriteStream, TuiReadStream, TuiRenderer, RendererOptions, FrameStats } from "./renderer-types.js";
4
+ export { RendererContext, useRenderer, useTerminalSize } from "./renderer-context.js";
83
5
  export declare function createRenderer(options?: RendererOptions): TuiRenderer;
84
6
  export interface Root {
85
7
  render(element: ReactNode, sync?: boolean): void;
@@ -93,9 +15,5 @@ export interface RenderInstance {
93
15
  unmount(): void;
94
16
  waitUntilExit(): Promise<void>;
95
17
  }
96
- /**
97
- * Render a React tree to the terminal in one call.
98
- * Returns helpers similar to Ink: rerender, unmount, waitUntilExit.
99
- */
100
18
  export declare function render(element: ReactNode, options?: RendererOptions): RenderInstance;
101
19
  //# sourceMappingURL=renderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAO7C,OAAO,KAAK,EAGX,WAAW,EAGX,eAAe,EAEf,MAAM,qBAAqB,CAAA;AAU5B,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAClH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAErF,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,WAAW,CAoRrE;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;CAC9B;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,cAAc,CA0CpF"}