@effect-tui/react 0.1.1 → 0.1.4

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 +53 -0
  27. package/dist/src/components/TextInput.d.ts.map +1 -0
  28. package/dist/src/components/TextInput.js +210 -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 +31 -26
  111. package/dist/src/hosts/box.js.map +1 -1
  112. package/dist/src/hosts/canvas.d.ts +8 -8
  113. package/dist/src/hosts/canvas.d.ts.map +1 -1
  114. package/dist/src/hosts/canvas.js +13 -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 +22 -0
  260. package/dist/src/renderer/modes/InlineRenderer.d.ts.map +1 -0
  261. package/dist/src/renderer/modes/InlineRenderer.js +154 -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 +213 -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 +285 -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 -96
  367. package/src/hosts/canvas.ts +137 -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 +178 -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 +391 -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
package/src/index.ts CHANGED
@@ -12,37 +12,43 @@ export {
12
12
  } from "./renderer.js"
13
13
  export type { TuiRenderer, RendererOptions, Root, FrameStats, RenderInstance } from "./renderer.js"
14
14
 
15
- // Components
15
+ // CodeBlock (syntax highlighting)
16
16
  export { CodeBlock } from "./codeblock.js"
17
17
  export type { CodeBlockProps } from "./codeblock.js"
18
18
 
19
19
  // Highlight utilities
20
20
  export {
21
- highlightCode,
22
- toPlainLines,
23
- type HighlightLine,
24
- type HighlightToken,
25
- type HighlightTokenStyle,
21
+ highlightCode,
22
+ toPlainLines,
23
+ type HighlightLine,
24
+ type HighlightToken,
25
+ type HighlightTokenStyle,
26
26
  } from "./highlight.js"
27
27
 
28
28
  // Hooks
29
- export { useKeyboard, usePaste } from "./hooks/index.js"
29
+ export { useKeyboard, useMouse, usePaste, useScroll } from "./hooks/index.js"
30
30
  export { useFrameStats } from "./hooks/useFrameStats.js"
31
- export type { UseKeyboardOptions } from "./hooks/index.js"
31
+ export type {
32
+ UseKeyboardOptions,
33
+ UseMouseOptions,
34
+ UseScrollOptions,
35
+ UseScrollReturn,
36
+ ScrollState,
37
+ } from "./hooks/index.js"
32
38
 
33
39
  // Motion (spring animations)
34
40
  export {
35
- useMotionValue,
36
- useSpring,
37
- useSprings,
38
- useSpringRenderer,
39
- useMotionValueEvent,
40
- useAnimationFrame,
41
- motionValue,
42
- // Color springs
43
- ColorMotionValue,
44
- useColorMotionValue,
45
- useColorSpring,
41
+ useMotionValue,
42
+ useSpring,
43
+ useSprings,
44
+ useSpringRenderer,
45
+ useMotionValueEvent,
46
+ useAnimationFrame,
47
+ motionValue,
48
+ // Color springs
49
+ ColorMotionValue,
50
+ useColorMotionValue,
51
+ useColorSpring,
46
52
  } from "./motion/index.js"
47
53
  export type { SpringOptions, MotionValue, RGBA, ColorInput } from "./motion/index.js"
48
54
 
@@ -55,9 +61,28 @@ export type { HStackProps } from "./hosts/hstack.js"
55
61
  export type { ZStackProps } from "./hosts/zstack.js"
56
62
  export type { BoxProps, BorderKind } from "./hosts/box.js"
57
63
  export type { CanvasProps, DrawContext } from "./hosts/canvas.js"
64
+ export type { ScrollProps } from "./hosts/scroll.js"
58
65
 
59
66
  // Debug
60
67
  export { DiagnosticsPanel } from "./debug/DiagnosticsPanel.js"
61
68
 
69
+ // Input components
70
+ export { TextInput, type TextInputProps } from "./components/index.js"
71
+ export { MultilineTextInput, type MultilineTextInputProps } from "./components/index.js"
72
+ export { Markdown, type MarkdownProps, type MarkdownTheme } from "./components/index.js"
73
+ export { Static, type StaticProps } from "./components/index.js"
74
+ export { Overlay, type OverlayProps, type OverlayItemProps } from "./components/index.js"
75
+
76
+ // Development utilities (HMR)
77
+ export {
78
+ devRender,
79
+ devMain,
80
+ hmr,
81
+ hmrState,
82
+ autoHmr,
83
+ type DevRenderOptions,
84
+ type DevRenderResult,
85
+ } from "./dev.js"
86
+
62
87
  // JSX types are provided via jsxImportSource: "@effect-tui/react"
63
88
  // See jsx-runtime.ts at package root for the JSX namespace
@@ -17,145 +17,145 @@ const SPINNER = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇",
17
17
  type TaskStatus = "pending" | "running" | "success" | "failure"
18
18
 
19
19
  interface TaskEntry {
20
- label: string
21
- status: TaskStatus
20
+ label: string
21
+ status: TaskStatus
22
22
  }
23
23
 
24
24
  interface TaskListProps {
25
- tasks: TaskEntry[]
26
- spinnerIndex: number
25
+ tasks: TaskEntry[]
26
+ spinnerIndex: number
27
27
  }
28
28
 
29
29
  function TaskList({ tasks, spinnerIndex }: TaskListProps) {
30
- return (
31
- <vstack>
32
- {tasks.map((task, i) => {
33
- const icon =
34
- task.status === "running"
35
- ? SPINNER[spinnerIndex % SPINNER.length]
36
- : task.status === "success"
37
- ? "✓"
38
- : task.status === "failure"
39
- ? "✗"
40
- : "○"
41
-
42
- const color =
43
- task.status === "running"
44
- ? Colors.brightYellow
45
- : task.status === "success"
46
- ? Colors.brightGreen
47
- : task.status === "failure"
48
- ? Colors.brightRed
49
- : Colors.gray(10)
50
-
51
- return (
52
- <hstack key={i} spacing={1}>
53
- <text bold fg={color}>
54
- {icon}
55
- </text>
56
- <text fg={task.status === "pending" ? Colors.gray(10) : undefined}>{task.label}</text>
57
- </hstack>
58
- )
59
- })}
60
- </vstack>
61
- )
30
+ return (
31
+ <vstack>
32
+ {tasks.map((task, i) => {
33
+ const icon =
34
+ task.status === "running"
35
+ ? SPINNER[spinnerIndex % SPINNER.length]
36
+ : task.status === "success"
37
+ ? "✓"
38
+ : task.status === "failure"
39
+ ? "✗"
40
+ : "○"
41
+
42
+ const color =
43
+ task.status === "running"
44
+ ? Colors.brightYellow
45
+ : task.status === "success"
46
+ ? Colors.brightGreen
47
+ : task.status === "failure"
48
+ ? Colors.brightRed
49
+ : Colors.gray(10)
50
+
51
+ return (
52
+ <hstack key={i} spacing={1}>
53
+ <text bold fg={color}>
54
+ {icon}
55
+ </text>
56
+ <text fg={task.status === "pending" ? Colors.gray(10) : undefined}>{task.label}</text>
57
+ </hstack>
58
+ )
59
+ })}
60
+ </vstack>
61
+ )
62
62
  }
63
63
 
64
64
  export interface TaskOptions<A> {
65
- /** Format the result to append to the label on success */
66
- formatResult?: (result: A) => string
65
+ /** Format the result to append to the label on success */
66
+ formatResult?: (result: A) => string
67
67
  }
68
68
 
69
69
  // Service definition
70
70
  export interface InlineRenderer {
71
- /**
72
- * Wrap an effect with inline progress visualization.
73
- * Shows a spinner while running, checkmark on success, X on failure.
74
- */
75
- readonly task: <A, E, R>(
76
- label: string,
77
- effect: Effect.Effect<A, E, R>,
78
- options?: TaskOptions<A>,
79
- ) => Effect.Effect<A, E, R>
71
+ /**
72
+ * Wrap an effect with inline progress visualization.
73
+ * Shows a spinner while running, checkmark on success, X on failure.
74
+ */
75
+ readonly task: <A, E, R>(
76
+ label: string,
77
+ effect: Effect.Effect<A, E, R>,
78
+ options?: TaskOptions<A>,
79
+ ) => Effect.Effect<A, E, R>
80
80
  }
81
81
 
82
82
  export const InlineRenderer = Context.GenericTag<InlineRenderer>("@effect-tui/react/InlineRenderer")
83
83
 
84
84
  // Create the live layer
85
85
  export const InlineRendererLive: Layer.Layer<InlineRenderer> = Layer.scoped(
86
- InlineRenderer,
87
- Effect.gen(function* () {
88
- // Create renderer in inline mode
89
- const renderer = createRenderer({ mode: "inline" })
90
- const root = createRoot(renderer)
91
-
92
- // Session state - accumulate all tasks
93
- const tasks: TaskEntry[] = []
94
- let spinnerIndex = 0
95
- let intervalId: ReturnType<typeof setInterval> | null = null
96
-
97
- const render = () => {
98
- root.render(<TaskList tasks={[...tasks]} spinnerIndex={spinnerIndex} />)
99
- }
100
-
101
- const startSpinner = (label: string) => {
102
- tasks.push({ label, status: "running" })
103
- spinnerIndex = 0
104
- render()
105
-
106
- intervalId = setInterval(() => {
107
- spinnerIndex = (spinnerIndex + 1) % SPINNER.length
108
- render()
109
- }, 80)
110
- }
111
-
112
- const stopSpinner = (status: "success" | "failure", labelSuffix?: string) => {
113
- if (intervalId) {
114
- clearInterval(intervalId)
115
- intervalId = null
116
- }
117
- // Update last task status
118
- if (tasks.length > 0) {
119
- tasks[tasks.length - 1].status = status
120
- if (labelSuffix) {
121
- tasks[tasks.length - 1].label += labelSuffix
122
- }
123
- render()
124
- }
125
- }
126
-
127
- // Cleanup on scope close
128
- yield* Effect.addFinalizer(() =>
129
- Effect.sync(() => {
130
- if (intervalId) clearInterval(intervalId)
131
- root.unmount()
132
- }),
133
- )
134
-
135
- return InlineRenderer.of({
136
- task: <A, E, R>(
137
- label: string,
138
- effect: Effect.Effect<A, E, R>,
139
- options?: TaskOptions<A>,
140
- ): Effect.Effect<A, E, R> =>
141
- Effect.gen(function* () {
142
- startSpinner(label)
143
-
144
- const result = yield* effect.pipe(Effect.either)
145
-
146
- if (Either.isRight(result)) {
147
- const suffix = options?.formatResult ? ` → ${options.formatResult(result.right)}` : ""
148
- stopSpinner("success", suffix)
149
- yield* Effect.sleep(50)
150
- return result.right
151
- } else {
152
- stopSpinner("failure")
153
- yield* Effect.sleep(50)
154
- return yield* Effect.fail(result.left)
155
- }
156
- }),
157
- })
158
- }),
86
+ InlineRenderer,
87
+ Effect.gen(function* () {
88
+ // Create renderer in inline mode
89
+ const renderer = createRenderer({ mode: "inline" })
90
+ const root = createRoot(renderer)
91
+
92
+ // Session state - accumulate all tasks
93
+ const tasks: TaskEntry[] = []
94
+ let spinnerIndex = 0
95
+ let intervalId: ReturnType<typeof setInterval> | null = null
96
+
97
+ const render = () => {
98
+ root.render(<TaskList tasks={[...tasks]} spinnerIndex={spinnerIndex} />)
99
+ }
100
+
101
+ const startSpinner = (label: string) => {
102
+ tasks.push({ label, status: "running" })
103
+ spinnerIndex = 0
104
+ render()
105
+
106
+ intervalId = setInterval(() => {
107
+ spinnerIndex = (spinnerIndex + 1) % SPINNER.length
108
+ render()
109
+ }, 80)
110
+ }
111
+
112
+ const stopSpinner = (status: "success" | "failure", labelSuffix?: string) => {
113
+ if (intervalId) {
114
+ clearInterval(intervalId)
115
+ intervalId = null
116
+ }
117
+ // Update last task status
118
+ if (tasks.length > 0) {
119
+ tasks[tasks.length - 1].status = status
120
+ if (labelSuffix) {
121
+ tasks[tasks.length - 1].label += labelSuffix
122
+ }
123
+ render()
124
+ }
125
+ }
126
+
127
+ // Cleanup on scope close
128
+ yield* Effect.addFinalizer(() =>
129
+ Effect.sync(() => {
130
+ if (intervalId) clearInterval(intervalId)
131
+ root.unmount()
132
+ }),
133
+ )
134
+
135
+ return InlineRenderer.of({
136
+ task: <A, E, R>(
137
+ label: string,
138
+ effect: Effect.Effect<A, E, R>,
139
+ options?: TaskOptions<A>,
140
+ ): Effect.Effect<A, E, R> =>
141
+ Effect.gen(function* () {
142
+ startSpinner(label)
143
+
144
+ const result = yield* effect.pipe(Effect.either)
145
+
146
+ if (Either.isRight(result)) {
147
+ const suffix = options?.formatResult ? ` → ${options.formatResult(result.right)}` : ""
148
+ stopSpinner("success", suffix)
149
+ yield* Effect.sleep(50)
150
+ return result.right
151
+ } else {
152
+ stopSpinner("failure")
153
+ yield* Effect.sleep(50)
154
+ return yield* Effect.fail(result.left)
155
+ }
156
+ }),
157
+ })
158
+ }),
159
159
  )
160
160
 
161
161
  /**
@@ -175,7 +175,7 @@ export const InlineRendererLive: Layer.Layer<InlineRenderer> = Layer.scoped(
175
175
  * ```
176
176
  */
177
177
  export const task = <A, E, R>(
178
- label: string,
179
- effect: Effect.Effect<A, E, R>,
180
- options?: TaskOptions<A>,
178
+ label: string,
179
+ effect: Effect.Effect<A, E, R>,
180
+ options?: TaskOptions<A>,
181
181
  ): Effect.Effect<A, E, R | InlineRenderer> => Effect.flatMap(InlineRenderer, (r) => r.task(label, effect, options))
@@ -12,79 +12,79 @@ import type { SpringOptions } from "./types.js"
12
12
  * Each channel (r, g, b, a) is animated independently with the same spring config.
13
13
  */
14
14
  export class ColorMotionValue extends EventEmitter<RGBA> {
15
- private rMv: MotionValue<number>
16
- private gMv: MotionValue<number>
17
- private bMv: MotionValue<number>
18
- private aMv: MotionValue<number>
15
+ private rMv: MotionValue<number>
16
+ private gMv: MotionValue<number>
17
+ private bMv: MotionValue<number>
18
+ private aMv: MotionValue<number>
19
19
 
20
- constructor(initial: ColorInput) {
21
- super()
22
- const rgba = parseColor(initial)
23
- this.rMv = new MotionValue(rgba.r)
24
- this.gMv = new MotionValue(rgba.g)
25
- this.bMv = new MotionValue(rgba.b)
26
- this.aMv = new MotionValue(rgba.a)
27
- }
20
+ constructor(initial: ColorInput) {
21
+ super()
22
+ const rgba = parseColor(initial)
23
+ this.rMv = new MotionValue(rgba.r)
24
+ this.gMv = new MotionValue(rgba.g)
25
+ this.bMv = new MotionValue(rgba.b)
26
+ this.aMv = new MotionValue(rgba.a)
27
+ }
28
28
 
29
- /** Get current RGBA value */
30
- get(): RGBA {
31
- return {
32
- r: Math.round(Math.max(0, Math.min(255, this.rMv.get()))),
33
- g: Math.round(Math.max(0, Math.min(255, this.gMv.get()))),
34
- b: Math.round(Math.max(0, Math.min(255, this.bMv.get()))),
35
- a: Math.max(0, Math.min(1, this.aMv.get())),
36
- }
37
- }
29
+ /** Get current RGBA value */
30
+ get(): RGBA {
31
+ return {
32
+ r: Math.round(Math.max(0, Math.min(255, this.rMv.get()))),
33
+ g: Math.round(Math.max(0, Math.min(255, this.gMv.get()))),
34
+ b: Math.round(Math.max(0, Math.min(255, this.bMv.get()))),
35
+ a: Math.max(0, Math.min(1, this.aMv.get())),
36
+ }
37
+ }
38
38
 
39
- /** Set color immediately (no animation) */
40
- jump(color: ColorInput) {
41
- const rgba = parseColor(color)
42
- this.rMv.jump(rgba.r)
43
- this.gMv.jump(rgba.g)
44
- this.bMv.jump(rgba.b)
45
- this.aMv.jump(rgba.a)
46
- this.notify("change", this.get())
47
- }
39
+ /** Set color immediately (no animation) */
40
+ jump(color: ColorInput) {
41
+ const rgba = parseColor(color)
42
+ this.rMv.jump(rgba.r)
43
+ this.gMv.jump(rgba.g)
44
+ this.bMv.jump(rgba.b)
45
+ this.aMv.jump(rgba.a)
46
+ this.notify("change", this.get())
47
+ }
48
48
 
49
- /** Set target color and animate with spring */
50
- set(color: ColorInput, options?: SpringOptions) {
51
- const rgba = parseColor(color)
52
- this.rMv.set(rgba.r, options)
53
- this.gMv.set(rgba.g, options)
54
- this.bMv.set(rgba.b, options)
55
- this.aMv.set(rgba.a, options)
56
- }
49
+ /** Set target color and animate with spring */
50
+ set(color: ColorInput, options?: SpringOptions) {
51
+ const rgba = parseColor(color)
52
+ this.rMv.set(rgba.r, options)
53
+ this.gMv.set(rgba.g, options)
54
+ this.bMv.set(rgba.b, options)
55
+ this.aMv.set(rgba.a, options)
56
+ }
57
57
 
58
- /** Check if any channel is animating */
59
- isAnimating(): boolean {
60
- return this.rMv.isAnimating() || this.gMv.isAnimating() || this.bMv.isAnimating() || this.aMv.isAnimating()
61
- }
58
+ /** Check if any channel is animating */
59
+ isAnimating(): boolean {
60
+ return this.rMv.isAnimating() || this.gMv.isAnimating() || this.bMv.isAnimating() || this.aMv.isAnimating()
61
+ }
62
62
 
63
- /** Stop all channel animations */
64
- stop() {
65
- this.rMv.stop()
66
- this.gMv.stop()
67
- this.bMv.stop()
68
- this.aMv.stop()
69
- }
63
+ /** Stop all channel animations */
64
+ stop() {
65
+ this.rMv.stop()
66
+ this.gMv.stop()
67
+ this.bMv.stop()
68
+ this.aMv.stop()
69
+ }
70
70
 
71
- /** Destroy and clean up */
72
- destroy() {
73
- this.rMv.destroy()
74
- this.gMv.destroy()
75
- this.bMv.destroy()
76
- this.aMv.destroy()
77
- this.clearSubscribers()
78
- }
71
+ /** Destroy and clean up */
72
+ destroy() {
73
+ this.rMv.destroy()
74
+ this.gMv.destroy()
75
+ this.bMv.destroy()
76
+ this.aMv.destroy()
77
+ this.clearSubscribers()
78
+ }
79
79
 
80
- /** Subscribe internal motion values to a callback (used by hooks) */
81
- _subscribeChannels(callback: () => void): () => void {
82
- const unsubs = [
83
- this.rMv.on("change", callback),
84
- this.gMv.on("change", callback),
85
- this.bMv.on("change", callback),
86
- this.aMv.on("change", callback),
87
- ]
88
- return () => unsubs.forEach((u) => u())
89
- }
80
+ /** Subscribe internal motion values to a callback (used by hooks) */
81
+ _subscribeChannels(callback: () => void): () => void {
82
+ const unsubs = [
83
+ this.rMv.on("change", callback),
84
+ this.gMv.on("change", callback),
85
+ this.bMv.on("change", callback),
86
+ this.aMv.on("change", callback),
87
+ ]
88
+ return () => unsubs.forEach((u) => u())
89
+ }
90
90
  }