@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/highlight.ts CHANGED
@@ -1,17 +1,17 @@
1
1
  import { createHighlighter, type Highlighter, type BundledLanguage, type BundledTheme } from "shiki"
2
- import type { ColorLike } from "@effect-tui/core"
2
+ import type { Color } from "@effect-tui/core"
3
3
 
4
4
  export interface HighlightTokenStyle {
5
- fg?: ColorLike
6
- bg?: ColorLike
7
- bold?: boolean
8
- italic?: boolean
9
- underline?: boolean
5
+ fg?: Color
6
+ bg?: Color
7
+ bold?: boolean
8
+ italic?: boolean
9
+ underline?: boolean
10
10
  }
11
11
 
12
12
  export interface HighlightToken {
13
- text: string
14
- style?: HighlightTokenStyle
13
+ text: string
14
+ style?: HighlightTokenStyle
15
15
  }
16
16
 
17
17
  export type HighlightLine = HighlightToken[]
@@ -22,55 +22,55 @@ const DEFAULT_THEME: BundledTheme = "nord"
22
22
  const highlighterCache = new Map<string, Promise<Highlighter>>()
23
23
 
24
24
  async function getCachedHighlighter(theme: BundledTheme): Promise<Highlighter> {
25
- const key = String(theme)
26
- let cached = highlighterCache.get(key)
27
- if (!cached) {
28
- cached = createHighlighter({
29
- themes: [theme],
30
- langs: DEFAULT_LANGS,
31
- })
32
- highlighterCache.set(key, cached)
33
- }
34
- return cached
25
+ const key = String(theme)
26
+ let cached = highlighterCache.get(key)
27
+ if (!cached) {
28
+ cached = createHighlighter({
29
+ themes: [theme],
30
+ langs: DEFAULT_LANGS,
31
+ })
32
+ highlighterCache.set(key, cached)
33
+ }
34
+ return cached
35
35
  }
36
36
 
37
37
  export async function highlightCode(
38
- code: string,
39
- opts?: { lang?: BundledLanguage; theme?: BundledTheme },
38
+ code: string,
39
+ opts?: { lang?: BundledLanguage; theme?: BundledTheme },
40
40
  ): Promise<HighlightLine[]> {
41
- const lang = opts?.lang ?? ("ts" satisfies BundledLanguage)
42
- const theme = opts?.theme ?? DEFAULT_THEME
41
+ const lang = opts?.lang ?? ("ts" satisfies BundledLanguage)
42
+ const theme = opts?.theme ?? DEFAULT_THEME
43
43
 
44
- const highlighter = await getCachedHighlighter(theme)
44
+ const highlighter = await getCachedHighlighter(theme)
45
45
 
46
- if (!highlighter.getLoadedLanguages().includes(lang)) {
47
- await highlighter.loadLanguage(lang)
48
- }
46
+ if (!highlighter.getLoadedLanguages().includes(lang)) {
47
+ await highlighter.loadLanguage(lang)
48
+ }
49
49
 
50
- const tokensResult = await highlighter.codeToTokens(code, { lang, theme })
51
- const tokenLines = Array.isArray(tokensResult)
52
- ? tokensResult
53
- : // Shiki v3 returns { tokens, theme }
54
- (tokensResult as any).tokens
50
+ const tokensResult = await highlighter.codeToTokens(code, { lang, theme })
51
+ const tokenLines = Array.isArray(tokensResult)
52
+ ? tokensResult
53
+ : // Shiki v3 returns { tokens, theme }
54
+ (tokensResult as any).tokens
55
55
 
56
- if (!Array.isArray(tokenLines)) return toPlainLines(code)
56
+ if (!Array.isArray(tokenLines)) return toPlainLines(code)
57
57
 
58
- return tokenLines.map((line: any[]) =>
59
- line.map((token) => {
60
- const style: HighlightTokenStyle = {}
61
- if (token.color) style.fg = token.color
62
- const fs = token.fontStyle ?? 0
63
- // fontStyle bitmask is: 1 = Italic, 2 = Bold, 4 = Underline
64
- if (fs & 2) style.bold = true
65
- if (fs & 1) style.italic = true
66
- if (fs & 4) style.underline = true
58
+ return tokenLines.map((line: any[]) =>
59
+ line.map((token) => {
60
+ const style: HighlightTokenStyle = {}
61
+ if (token.color) style.fg = token.color
62
+ const fs = token.fontStyle ?? 0
63
+ // fontStyle bitmask is: 1 = Italic, 2 = Bold, 4 = Underline
64
+ if (fs & 2) style.bold = true
65
+ if (fs & 1) style.italic = true
66
+ if (fs & 4) style.underline = true
67
67
 
68
- return Object.keys(style).length > 0 ? { text: token.content, style } : { text: token.content }
69
- }),
70
- )
68
+ return Object.keys(style).length > 0 ? { text: token.content, style } : { text: token.content }
69
+ }),
70
+ )
71
71
  }
72
72
 
73
73
  export function toPlainLines(code: string): HighlightLine[] {
74
- if (code.length === 0) return [[]]
75
- return code.split(/\r?\n/).map((line) => [{ text: line }])
74
+ if (code.length === 0) return [[]]
75
+ return code.split(/\r?\n/).map((line) => [{ text: line }])
76
76
  }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Bun plugin that transforms autoHmr calls at load time.
3
+ * Transforms:
4
+ * const countAtom = Atom.make(0).pipe(autoHmr)
5
+ * Into:
6
+ * const countAtom = Atom.make(0).pipe(hmr("src/counter.tsx:countAtom"))
7
+ *
8
+ * Usage:
9
+ * bun --preload ./node_modules/@effect-tui/react/dist/hmr-plugin.js run src/app.tsx
10
+ *
11
+ * Or in bunfig.toml:
12
+ * [run]
13
+ * preload = ["./node_modules/@effect-tui/react/dist/hmr-plugin.js"]
14
+ */
15
+ import { plugin } from "bun"
16
+ import { relative } from "path"
17
+
18
+ // Only enable in development
19
+ if (process.env.NODE_ENV !== "production") {
20
+ plugin({
21
+ name: "auto-hmr",
22
+ setup(build) {
23
+ build.onLoad({ filter: /\.[tj]sx?$/ }, async (args) => {
24
+ const source = await Bun.file(args.path).text()
25
+
26
+ // Skip files that don't use autoHmr
27
+ if (!source.includes("autoHmr")) {
28
+ return undefined
29
+ }
30
+
31
+ // Get relative path for cleaner keys
32
+ const relativePath = relative(process.cwd(), args.path)
33
+
34
+ // Transform: const varName = ...pipe(autoHmr) → ...pipe(hmr("path:varName"))
35
+ // This regex handles the common case of variable declarations
36
+ const transformed = source.replace(
37
+ /(?:export\s+)?(?:const|let|var)\s+(\w+)\s*=\s*([^;]+)\.pipe\(\s*autoHmr\s*\)/g,
38
+ (match, varName, expr) => {
39
+ const key = `${relativePath}:${varName}`
40
+ // Preserve export if present
41
+ const exportPrefix = match.startsWith("export") ? "export " : ""
42
+ return `${exportPrefix}const ${varName} = ${expr}.pipe(hmr("${key}"))`
43
+ },
44
+ )
45
+
46
+ // Also handle: someAtom.pipe(autoHmr) without assignment (less common)
47
+ // For these, we use a counter-based key as fallback
48
+ let counter = 0
49
+ const finalTransformed = transformed.replace(/\.pipe\(\s*autoHmr\s*\)/g, () => {
50
+ counter++
51
+ return `.pipe(hmr("${relativePath}:anon${counter}"))`
52
+ })
53
+
54
+ return {
55
+ contents: finalTransformed,
56
+ loader: args.path.endsWith("x") ? "tsx" : "ts",
57
+ }
58
+ })
59
+ },
60
+ })
61
+ }
@@ -1,3 +1,7 @@
1
1
  export { useKeyboard } from "./use-keyboard.js"
2
2
  export type { UseKeyboardOptions } from "./use-keyboard.js"
3
+ export { useMouse } from "./use-mouse.js"
4
+ export type { UseMouseOptions } from "./use-mouse.js"
3
5
  export { usePaste } from "./use-paste.js"
6
+ export { useScroll } from "./use-scroll.js"
7
+ export type { UseScrollOptions, UseScrollReturn, ScrollState } from "./use-scroll.js"
@@ -1,37 +1,57 @@
1
- import { useEffect } from "react"
1
+ import { useEffect, useRef } from "react"
2
2
  import type { KeyMsg } from "@effect-tui/core"
3
3
  import { useRenderer } from "../renderer.js"
4
4
 
5
5
  export type UseKeyboardOptions = {
6
- /** Which phase to listen for; defaults to "press" and treats missing phase as "press". */
7
- phase?: "press" | "repeat" | "release" | "any"
8
- /** Optional predicate to drop keys before they reach the handler. */
9
- filter?: (key: KeyMsg) => boolean
10
- /**
11
- * If true, call preventDefault when available before invoking handler.
12
- * This stops further renderer-level handlers (not a terminal effect).
13
- */
14
- stopPropagation?: boolean
6
+ /** Which phase to listen for; defaults to "press" and treats missing phase as "press". */
7
+ phase?: "press" | "repeat" | "release" | "any"
8
+ /** Optional predicate to drop keys before they reach the handler. */
9
+ filter?: (key: KeyMsg) => boolean
10
+ /**
11
+ * If true, call preventDefault when available before invoking handler.
12
+ * This stops further renderer-level handlers (not a terminal effect).
13
+ */
14
+ stopPropagation?: boolean
15
15
  }
16
16
 
17
17
  /**
18
18
  * Subscribe to keyboard events.
19
19
  * Handler is called for every key press while mounted.
20
+ *
21
+ * Uses a ref internally so you don't need useCallback - the handler
22
+ * always sees the latest props/state without re-subscribing.
23
+ *
24
+ * @example
25
+ * ```tsx
26
+ * // No useCallback needed - just pass your handler directly
27
+ * useKeyboard((key) => {
28
+ * if (key.name === "enter") submitForm(currentValue)
29
+ * })
30
+ * ```
20
31
  */
21
32
  export function useKeyboard(handler: (key: KeyMsg) => void, opts?: UseKeyboardOptions): void {
22
- const renderer = useRenderer()
23
- const phase = opts?.phase ?? "press"
24
- const filter = opts?.filter
25
- const stopPropagation = opts?.stopPropagation ?? false
33
+ const renderer = useRenderer()
34
+ const phase = opts?.phase ?? "press"
35
+ const filter = opts?.filter
36
+ const stopPropagation = opts?.stopPropagation ?? false
26
37
 
27
- useEffect(() => {
28
- const wrapped = (key: KeyMsg) => {
29
- const keyPhase = key.phase ?? "press"
30
- if (phase !== "any" && phase !== keyPhase) return
31
- if (filter && !filter(key)) return
32
- if (stopPropagation && key.preventDefault) key.preventDefault()
33
- handler(key)
34
- }
35
- return renderer.onKey(wrapped)
36
- }, [renderer, handler, phase, filter, stopPropagation])
38
+ // Store handler in ref so we always call the latest version
39
+ // without needing to re-subscribe on every render
40
+ const handlerRef = useRef(handler)
41
+ handlerRef.current = handler
42
+
43
+ // Store filter in ref too for same reason
44
+ const filterRef = useRef(filter)
45
+ filterRef.current = filter
46
+
47
+ useEffect(() => {
48
+ const wrapped = (key: KeyMsg) => {
49
+ const keyPhase = key.phase ?? "press"
50
+ if (phase !== "any" && phase !== keyPhase) return
51
+ if (filterRef.current && !filterRef.current(key)) return
52
+ if (stopPropagation && key.preventDefault) key.preventDefault()
53
+ handlerRef.current(key)
54
+ }
55
+ return renderer.onKey(wrapped)
56
+ }, [renderer, phase, stopPropagation])
37
57
  }
@@ -0,0 +1,51 @@
1
+ import { useEffect, useRef } from "react"
2
+ import type { MouseMsg, MouseButton } from "@effect-tui/core"
3
+ import { useRenderer } from "../renderer.js"
4
+
5
+ export type UseMouseOptions = {
6
+ /** Filter by action type */
7
+ action?: "press" | "release" | "drag" | "move" | "any"
8
+ /** Filter by button */
9
+ button?: MouseButton | MouseButton[]
10
+ }
11
+
12
+ /**
13
+ * Subscribe to mouse events.
14
+ * Handler is called for mouse clicks, drags, and scroll while mounted.
15
+ *
16
+ * Uses a ref internally so you don't need useCallback - the handler
17
+ * always sees the latest props/state without re-subscribing.
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * // No useCallback needed - just pass your handler directly
22
+ * useMouse((mouse) => {
23
+ * if (mouse.action === "press") handleClick(mouse.x, mouse.y)
24
+ * })
25
+ * ```
26
+ */
27
+ export function useMouse(handler: (mouse: MouseMsg) => void, opts?: UseMouseOptions): void {
28
+ const renderer = useRenderer()
29
+ const action = opts?.action ?? "any"
30
+ const button = opts?.button
31
+
32
+ // Store handler in ref so we always call the latest version
33
+ const handlerRef = useRef(handler)
34
+ handlerRef.current = handler
35
+
36
+ useEffect(() => {
37
+ const wrapped = (mouse: MouseMsg) => {
38
+ // Filter by action
39
+ if (action !== "any" && action !== mouse.action) return
40
+
41
+ // Filter by button
42
+ if (button !== undefined) {
43
+ const buttons = Array.isArray(button) ? button : [button]
44
+ if (!buttons.includes(mouse.button)) return
45
+ }
46
+
47
+ handlerRef.current(mouse)
48
+ }
49
+ return renderer.onMouse(wrapped)
50
+ }, [renderer, action, button])
51
+ }
@@ -1,14 +1,29 @@
1
- import { useEffect } from "react"
1
+ import { useEffect, useRef } from "react"
2
2
  import { useRenderer } from "../renderer.js"
3
3
 
4
4
  /**
5
5
  * Subscribe to bracketed paste events (if supported by renderer/terminal).
6
+ *
7
+ * Uses a ref internally so you don't need useCallback - the handler
8
+ * always sees the latest props/state without re-subscribing.
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * // No useCallback needed - just pass your handler directly
13
+ * usePaste((text) => {
14
+ * insertText(text, cursorPosition)
15
+ * })
16
+ * ```
6
17
  */
7
18
  export function usePaste(handler: (text: string) => void): void {
8
- const renderer = useRenderer()
19
+ const renderer = useRenderer()
9
20
 
10
- useEffect(() => {
11
- if (!renderer.onPaste) return
12
- return renderer.onPaste(handler)
13
- }, [renderer, handler])
21
+ // Store handler in ref so we always call the latest version
22
+ const handlerRef = useRef(handler)
23
+ handlerRef.current = handler
24
+
25
+ useEffect(() => {
26
+ if (!renderer.onPaste) return
27
+ return renderer.onPaste((text) => handlerRef.current(text))
28
+ }, [renderer])
14
29
  }