@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toast.js","sourceRoot":"","sources":["../../../src/dev/Toast.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { ToastProvider, ToastContainer, useToast, useScreenshotToast, type Toast, type ToastType } from "./Toast.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dev/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,3 @@
1
+ // Dev mode utilities
2
+ export { ToastProvider, ToastContainer, useToast, useScreenshotToast } from "./Toast.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dev/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAA8B,MAAM,YAAY,CAAA"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Development utilities for hot module replacement (HMR).
3
+ *
4
+ * Enables hot reload during development:
5
+ * - File changes trigger re-render without process restart
6
+ * - Terminal stays stable (no screen flash)
7
+ * - State preserved when using Effect's globalValue with effect-atom
8
+ * - Debug console panel (` to toggle, ~ for screenshot)
9
+ * - Remote control when EFFECT_TUI_REMOTE=1
10
+ */
11
+ import { type Root } from "./renderer.js";
12
+ import type { RendererOptions } from "./renderer-types.js";
13
+ import type { TuiRenderer } from "./renderer-types.js";
14
+ /**
15
+ * Pipeable combinator that makes an atom persist across hot reloads.
16
+ *
17
+ * This is the cleanest way to define HMR-persistent atoms - just pipe it!
18
+ * Combines globalValue (for persistence) + keepAlive (prevents registry cleanup).
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * import { Atom } from "@effect-atom/atom-react"
23
+ * import { hmr, devRender } from "@effect-tui/react"
24
+ *
25
+ * // Just pipe hmr() - that's it!
26
+ * const countAtom = Atom.make(0).pipe(hmr("count"))
27
+ * const userAtom = Atom.make<User | null>(null).pipe(hmr("user"))
28
+ *
29
+ * export default function App() {
30
+ * const count = useAtomValue(countAtom)
31
+ * // Edit this file - count persists!
32
+ * }
33
+ * ```
34
+ */
35
+ export declare function hmr<A>(key: string): (self: A) => A;
36
+ /**
37
+ * Wrap any value creation in HMR persistence.
38
+ *
39
+ * @example
40
+ * ```tsx
41
+ * const countAtom = hmrState("count", () => Atom.make(0).pipe(Atom.keepAlive))
42
+ * ```
43
+ */
44
+ export declare function hmrState<T>(key: string, create: () => T): T;
45
+ /**
46
+ * Simple self-running dev mode. Just add this at the bottom of your file:
47
+ *
48
+ * @example
49
+ * ```tsx
50
+ * export default function App() { ... }
51
+ *
52
+ * devMain(import.meta)
53
+ * ```
54
+ *
55
+ * That's it! Handles:
56
+ * - Only runs when file is the entry point (import.meta.main)
57
+ * - Only initializes once across HMR reloads
58
+ * - Automatically finds the file path
59
+ */
60
+ export declare function devMain(importMeta: {
61
+ main?: boolean;
62
+ url: string;
63
+ }, options?: Omit<DevRenderOptions, never>): void;
64
+ /**
65
+ * Auto-keyed HMR persistence for atoms.
66
+ *
67
+ * When used with the HMR plugin (recommended), keys are injected at load time
68
+ * based on the variable name. Without the plugin, falls back to runtime
69
+ * stack trace parsing.
70
+ *
71
+ * @example
72
+ * ```tsx
73
+ * import { Atom } from "@effect-atom/atom-react"
74
+ * import { autoHmr, devRender } from "@effect-tui/react"
75
+ *
76
+ * // No manual key needed - derived from variable name!
77
+ * const countAtom = Atom.make(0).pipe(autoHmr)
78
+ * const userAtom = Atom.make<User | null>(null).pipe(autoHmr)
79
+ *
80
+ * // To enable compile-time transform (faster, more reliable):
81
+ * // bun --preload @effect-tui/react/hmr-plugin run src/app.tsx
82
+ * ```
83
+ */
84
+ export declare function autoHmr<A>(self: A): A;
85
+ export interface DevRenderOptions extends RendererOptions {
86
+ /** Directories to watch (defaults to entry file's directory) */
87
+ watchDirs?: string[];
88
+ /** File extensions to watch (defaults to [".ts", ".tsx"]) */
89
+ watchExtensions?: string[];
90
+ /** Debounce delay in ms (defaults to 150) */
91
+ debounce?: number;
92
+ /** Wait for file writes to stabilize (defaults to 50ms) */
93
+ awaitWriteFinish?: number;
94
+ /** Called before each hot reload */
95
+ onReload?: () => void;
96
+ /** Called on errors */
97
+ onError?: (error: Error) => void;
98
+ /** Show renderer diagnostics overlay. */
99
+ showStats?: boolean;
100
+ /** Sampling window for renderer stats (ms). */
101
+ statsSampleMs?: number;
102
+ /** Override diagnostics panel title. */
103
+ statsTitle?: string;
104
+ }
105
+ export interface DevRenderResult {
106
+ renderer: TuiRenderer;
107
+ root: Root;
108
+ /** Manually trigger a reload */
109
+ rerender: () => Promise<void>;
110
+ /** Stop watching and cleanup */
111
+ stop: () => Promise<void>;
112
+ }
113
+ export declare function devRender(entryPath: string, options?: DevRenderOptions): Promise<DevRenderResult>;
114
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/dev.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,OAAO,EAA8B,KAAK,IAAI,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAWtD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAalD;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAE3D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,GAAG,IAAI,CAelH;AAmCD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CA6BrC;AAED,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACxD,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,6DAA6D;IAC7D,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,uBAAuB;IACvB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,yCAAyC;IACzC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,+CAA+C;IAC/C,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,eAAe;IAC/B,QAAQ,EAAE,WAAW,CAAA;IACrB,IAAI,EAAE,IAAI,CAAA;IACV,gCAAgC;IAChC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7B,gCAAgC;IAChC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB;AAsKD,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAmGvG"}
@@ -0,0 +1,373 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@effect-tui/react/jsx-runtime";
10
+ /**
11
+ * Development utilities for hot module replacement (HMR).
12
+ *
13
+ * Enables hot reload during development:
14
+ * - File changes trigger re-render without process restart
15
+ * - Terminal stays stable (no screen flash)
16
+ * - State preserved when using Effect's globalValue with effect-atom
17
+ * - Debug console panel (` to toggle, ~ for screenshot)
18
+ * - Remote control when EFFECT_TUI_REMOTE=1
19
+ */
20
+ import { globalValue } from "effect/GlobalValue";
21
+ import * as watcher from "@parcel/watcher";
22
+ import { dirname } from "path";
23
+ import { stat } from "fs/promises";
24
+ import { readFileSync } from "fs";
25
+ import React from "react";
26
+ import { Colors } from "@effect-tui/core";
27
+ import { createRenderer, createRoot } from "./renderer.js";
28
+ import { ConsolePopover } from "./console/ConsolePopover.js";
29
+ import { useConsole } from "./console/useConsole.js";
30
+ import { enableRemote } from "./remote/index.js";
31
+ import { ToastProvider, ToastContainer, useToast } from "./dev/Toast.js";
32
+ import { useKeyboard } from "./hooks/use-keyboard.js";
33
+ import { useRenderer, useTerminalSize } from "./renderer-context.js";
34
+ import { copyToClipboardSync, copyToClipboard } from "./console/clipboard.js";
35
+ import { DiagnosticsPanel } from "./debug/DiagnosticsPanel.js";
36
+ import { Overlay } from "./components/Overlay.js";
37
+ /**
38
+ * Pipeable combinator that makes an atom persist across hot reloads.
39
+ *
40
+ * This is the cleanest way to define HMR-persistent atoms - just pipe it!
41
+ * Combines globalValue (for persistence) + keepAlive (prevents registry cleanup).
42
+ *
43
+ * @example
44
+ * ```tsx
45
+ * import { Atom } from "@effect-atom/atom-react"
46
+ * import { hmr, devRender } from "@effect-tui/react"
47
+ *
48
+ * // Just pipe hmr() - that's it!
49
+ * const countAtom = Atom.make(0).pipe(hmr("count"))
50
+ * const userAtom = Atom.make<User | null>(null).pipe(hmr("user"))
51
+ *
52
+ * export default function App() {
53
+ * const count = useAtomValue(countAtom)
54
+ * // Edit this file - count persists!
55
+ * }
56
+ * ```
57
+ */
58
+ export function hmr(key) {
59
+ return (self) => {
60
+ return globalValue(Symbol.for(`hmr/${key}`), () => {
61
+ // Apply keepAlive if it's an atom (just sets keepAlive: true)
62
+ if (typeof self === "object" && self !== null && "keepAlive" in self) {
63
+ return Object.assign(Object.create(Object.getPrototypeOf(self)), {
64
+ ...self,
65
+ keepAlive: true,
66
+ });
67
+ }
68
+ return self;
69
+ });
70
+ };
71
+ }
72
+ /**
73
+ * Wrap any value creation in HMR persistence.
74
+ *
75
+ * @example
76
+ * ```tsx
77
+ * const countAtom = hmrState("count", () => Atom.make(0).pipe(Atom.keepAlive))
78
+ * ```
79
+ */
80
+ export function hmrState(key, create) {
81
+ return globalValue(Symbol.for(`hmr/${key}`), create);
82
+ }
83
+ /**
84
+ * Simple self-running dev mode. Just add this at the bottom of your file:
85
+ *
86
+ * @example
87
+ * ```tsx
88
+ * export default function App() { ... }
89
+ *
90
+ * devMain(import.meta)
91
+ * ```
92
+ *
93
+ * That's it! Handles:
94
+ * - Only runs when file is the entry point (import.meta.main)
95
+ * - Only initializes once across HMR reloads
96
+ * - Automatically finds the file path
97
+ */
98
+ export function devMain(importMeta, options) {
99
+ // Skip if not main entry point
100
+ if (!importMeta.main)
101
+ return;
102
+ // Skip if this is a HMR re-import (has cache-busting query string)
103
+ if (importMeta.url.includes("?"))
104
+ return;
105
+ const key = `devMain/${importMeta.url}`;
106
+ const initialized = hmrState(key, () => ({ done: false }));
107
+ if (!initialized.done) {
108
+ initialized.done = true;
109
+ const filePath = new URL(importMeta.url).pathname;
110
+ devRender(filePath, options);
111
+ }
112
+ }
113
+ // Cache for runtime key extraction
114
+ const keyCache = new Map();
115
+ /**
116
+ * Parse stack trace to get file path and line number.
117
+ * Returns null if parsing fails.
118
+ */
119
+ function parseStack(stack) {
120
+ // Bun stack format: " at functionName (file:line:col)" or " at file:line:col"
121
+ const lines = stack.split("\n");
122
+ // Skip first line (Error message) and find caller (skip autoHmr itself)
123
+ for (let i = 2; i < lines.length; i++) {
124
+ const match = lines[i].match(/\((.+?):(\d+):(\d+)\)/) || lines[i].match(/at\s+(.+?):(\d+):(\d+)/);
125
+ if (match) {
126
+ return { file: match[1], line: parseInt(match[2], 10), col: parseInt(match[3], 10) };
127
+ }
128
+ }
129
+ return null;
130
+ }
131
+ /**
132
+ * Extract variable name from source line using regex.
133
+ * Returns null if extraction fails.
134
+ */
135
+ function extractVarName(source, line) {
136
+ const lines = source.split("\n");
137
+ if (line < 1 || line > lines.length)
138
+ return null;
139
+ const sourceLine = lines[line - 1];
140
+ const match = sourceLine.match(/(?:export\s+)?(?:const|let|var)\s+(\w+)\s*=/);
141
+ return match?.[1] ?? null;
142
+ }
143
+ /**
144
+ * Auto-keyed HMR persistence for atoms.
145
+ *
146
+ * When used with the HMR plugin (recommended), keys are injected at load time
147
+ * based on the variable name. Without the plugin, falls back to runtime
148
+ * stack trace parsing.
149
+ *
150
+ * @example
151
+ * ```tsx
152
+ * import { Atom } from "@effect-atom/atom-react"
153
+ * import { autoHmr, devRender } from "@effect-tui/react"
154
+ *
155
+ * // No manual key needed - derived from variable name!
156
+ * const countAtom = Atom.make(0).pipe(autoHmr)
157
+ * const userAtom = Atom.make<User | null>(null).pipe(autoHmr)
158
+ *
159
+ * // To enable compile-time transform (faster, more reliable):
160
+ * // bun --preload @effect-tui/react/hmr-plugin run src/app.tsx
161
+ * ```
162
+ */
163
+ export function autoHmr(self) {
164
+ // Get stack trace for caller location
165
+ const stack = new Error().stack ?? "";
166
+ const location = parseStack(stack);
167
+ if (!location) {
168
+ // Fallback: use a hash of the stack trace
169
+ const fallbackKey = `unknown:${stack.slice(0, 100)}`;
170
+ return hmr(fallbackKey)(self);
171
+ }
172
+ const cacheKey = `${location.file}:${location.line}:${location.col}`;
173
+ // Check cache first
174
+ let key = keyCache.get(cacheKey);
175
+ if (!key) {
176
+ try {
177
+ // Read source file and extract variable name
178
+ const source = readFileSync(location.file, "utf-8");
179
+ const varName = extractVarName(source, location.line);
180
+ key = `${location.file}:${varName ?? `line${location.line}`}`;
181
+ }
182
+ catch {
183
+ // File read failed, use line-based key
184
+ key = `${location.file}:line${location.line}`;
185
+ }
186
+ keyCache.set(cacheKey, key);
187
+ }
188
+ return hmr(key)(self);
189
+ }
190
+ /**
191
+ * Wait for a file to stabilize (no size changes) before proceeding.
192
+ * This avoids importing partially-written files.
193
+ */
194
+ async function awaitWriteFinish(path, stabilityMs) {
195
+ let lastSize = -1;
196
+ let stableCount = 0;
197
+ const checkInterval = 10;
198
+ while (stableCount < stabilityMs / checkInterval) {
199
+ try {
200
+ const stats = await stat(path);
201
+ if (stats.size === lastSize) {
202
+ stableCount++;
203
+ }
204
+ else {
205
+ lastSize = stats.size;
206
+ stableCount = 0;
207
+ }
208
+ }
209
+ catch {
210
+ // File might be temporarily unavailable during write
211
+ stableCount = 0;
212
+ }
213
+ await new Promise((r) => setTimeout(r, checkInterval));
214
+ }
215
+ }
216
+ /**
217
+ * Render a TUI app with hot module replacement support.
218
+ *
219
+ * Uses @parcel/watcher for reliable, cross-platform file watching.
220
+ * When files change, the module is re-imported and the app re-renders
221
+ * without restarting the process or tearing down the terminal.
222
+ *
223
+ * For state preservation, use effect-atom with the hmr() combinator:
224
+ *
225
+ * @example
226
+ * ```tsx
227
+ * import { Atom, useAtomValue } from "@effect-atom/atom-react"
228
+ * import { hmr, devRender } from "@effect-tui/react"
229
+ *
230
+ * const countAtom = Atom.make(0).pipe(hmr("count"))
231
+ *
232
+ * export default function App() {
233
+ * const count = useAtomValue(countAtom)
234
+ * return <text>Count: {count}</text>
235
+ * }
236
+ *
237
+ * devRender(import.meta.path, { mode: "inline" })
238
+ * ```
239
+ */
240
+ /**
241
+ * Internal component that handles screenshot with toast notification
242
+ */
243
+ function ScreenshotHandler() {
244
+ const renderer = useRenderer();
245
+ const { show } = useToast();
246
+ useKeyboard((key) => {
247
+ // ~ (tilde) - screenshot
248
+ if (key.name === "char" && key.text === "~") {
249
+ const ansiOutput = renderer.getScreenshot();
250
+ if (!ansiOutput)
251
+ return;
252
+ // Copy actual content to clipboard
253
+ const copied = copyToClipboardSync(ansiOutput);
254
+ if (!copied) {
255
+ copyToClipboard(ansiOutput);
256
+ }
257
+ // Also save to file as backup
258
+ const tmpPath = `/tmp/tui-screenshot-${Date.now()}.txt`;
259
+ Bun.write(tmpPath, ansiOutput);
260
+ show("Screenshot copied!", "success", 1500);
261
+ key.preventDefault?.();
262
+ }
263
+ });
264
+ return null;
265
+ }
266
+ /**
267
+ * Overlay for renderer diagnostics stats.
268
+ */
269
+ function StatsOverlay({ sampleMs, title }) {
270
+ const { width, height } = useTerminalSize();
271
+ return (_jsxs("vstack", { width: width, height: height, children: [_jsxs("hstack", { width: width, children: [_jsx("spacer", {}), _jsx("box", { padding: 1, border: "rounded", borderColor: Colors.gray(8), bg: Colors.gray(2), children: _jsx(DiagnosticsPanel, { sampleMs: sampleMs, title: title ?? "Renderer Stats" }) })] }), _jsx("spacer", {})] }));
272
+ }
273
+ /**
274
+ * Internal wrapper component that provides dev mode features:
275
+ * - Debug console panel (` backtick to toggle)
276
+ * - Screenshot support (~ tilde) with toast notification
277
+ * - Auto-show console on errors
278
+ * - Optional renderer stats overlay (showStats)
279
+ */
280
+ function DevWrapper({ children, showStats, statsSampleMs, statsTitle, mode, }) {
281
+ const { visible } = useConsole({ autoShowOnError: true, initiallyVisible: false });
282
+ // Inline mode: content flows naturally in vstack
283
+ if (mode === "inline") {
284
+ return (_jsx(ToastProvider, { children: _jsxs("vstack", { children: [_jsx(ScreenshotHandler, {}), _jsx(ToastContainer, {}), children, visible && _jsx(ConsolePopover, { fixedHeight: 5, mode: "inline" })] }) }));
285
+ }
286
+ // Fullscreen mode: Overlay with toast/console positioned by alignment
287
+ return (_jsx(ToastProvider, { children: _jsxs(Overlay, { children: [_jsxs(_Fragment, { children: [_jsx(ScreenshotHandler, {}), children] }), visible && (_jsx(Overlay.Item, { alignment: { v: "bottom" }, children: _jsx(ConsolePopover, { fixedHeight: 12 }) })), showStats && (_jsx(Overlay.Item, { alignment: { v: "top", h: "right" }, children: _jsx(StatsOverlay, { sampleMs: statsSampleMs, title: statsTitle }) })), _jsx(Overlay.Item, { alignment: { v: "top" }, children: _jsx(ToastContainer, {}) })] }) }));
288
+ }
289
+ export async function devRender(entryPath, options) {
290
+ const watchExtensions = options?.watchExtensions ?? [".ts", ".tsx"];
291
+ const debounceMs = options?.debounce ?? 150;
292
+ const stabilityMs = options?.awaitWriteFinish ?? 50;
293
+ const renderer = createRenderer(options);
294
+ const root = createRoot(renderer);
295
+ // Dev mode always enables remote control
296
+ const stopRemote = enableRemote(renderer);
297
+ let debounceTimer = null;
298
+ let version = 0;
299
+ let subscription = null;
300
+ // Import and render the module
301
+ const render = async () => {
302
+ const thisVersion = ++version;
303
+ try {
304
+ // Cache-bust by adding query string with version
305
+ const mod = await import(__rewriteRelativeImportExtension(`${entryPath}?v=${thisVersion}`));
306
+ // Skip if a newer render was triggered
307
+ if (thisVersion !== version)
308
+ return;
309
+ const App = mod.default;
310
+ if (!App) {
311
+ const err = new Error(`No default export found in ${entryPath}`);
312
+ options?.onError?.(err);
313
+ console.error("[devRender]", err.message);
314
+ return;
315
+ }
316
+ // Render the component wrapped in DevWrapper for console panel
317
+ const appElement = typeof App === "function" ? React.createElement(App) : App;
318
+ const wrapped = React.createElement(DevWrapper, {
319
+ showStats: options?.showStats,
320
+ statsSampleMs: options?.statsSampleMs,
321
+ statsTitle: options?.statsTitle,
322
+ mode: options?.mode,
323
+ }, appElement);
324
+ root.render(wrapped);
325
+ }
326
+ catch (err) {
327
+ const error = err instanceof Error ? err : new Error(String(err));
328
+ options?.onError?.(error);
329
+ console.error("[devRender] Error loading module:", error.message);
330
+ }
331
+ };
332
+ // Initial render
333
+ await render();
334
+ // Watch for changes using @parcel/watcher
335
+ const watchDir = options?.watchDirs?.[0] ?? dirname(entryPath);
336
+ try {
337
+ subscription = await watcher.subscribe(watchDir, async (err, events) => {
338
+ if (err) {
339
+ options?.onError?.(err);
340
+ console.error("[devRender] Watcher error:", err);
341
+ return;
342
+ }
343
+ // Filter to relevant file extensions
344
+ const relevantEvents = events.filter((event) => watchExtensions.some((ext) => event.path.endsWith(ext)));
345
+ if (relevantEvents.length === 0)
346
+ return;
347
+ // Debounce rapid changes
348
+ if (debounceTimer)
349
+ clearTimeout(debounceTimer);
350
+ debounceTimer = setTimeout(async () => {
351
+ // Wait for file writes to stabilize
352
+ const changedPath = relevantEvents[0].path;
353
+ await awaitWriteFinish(changedPath, stabilityMs);
354
+ options?.onReload?.();
355
+ await render();
356
+ }, debounceMs);
357
+ });
358
+ }
359
+ catch (err) {
360
+ console.error(`[devRender] Failed to watch ${watchDir}:`, err);
361
+ }
362
+ const stop = async () => {
363
+ if (debounceTimer)
364
+ clearTimeout(debounceTimer);
365
+ if (subscription) {
366
+ await subscription.unsubscribe();
367
+ }
368
+ stopRemote();
369
+ renderer.stop();
370
+ };
371
+ return { renderer, root, rerender: render, stop };
372
+ }
373
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/dev.tsx"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { type BundledLanguage, type BundledTheme } from "shiki";
2
- import type { ColorLike } from "@effect-tui/core";
2
+ import type { Color } from "@effect-tui/core";
3
3
  export interface HighlightTokenStyle {
4
- fg?: ColorLike;
5
- bg?: ColorLike;
4
+ fg?: Color;
5
+ bg?: Color;
6
6
  bold?: boolean;
7
7
  italic?: boolean;
8
8
  underline?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../src/highlight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAA;AACpG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,MAAM,WAAW,mBAAmB;IAClC,EAAE,CAAC,EAAE,SAAS,CAAA;IACd,EAAE,CAAC,EAAE,SAAS,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,mBAAmB,CAAA;CAC5B;AAED,MAAM,MAAM,aAAa,GAAG,cAAc,EAAE,CAAA;AAoB5C,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,eAAe,CAAC;IAAC,KAAK,CAAC,EAAE,YAAY,CAAA;CAAE,GACtD,OAAO,CAAC,aAAa,EAAE,CAAC,CA+B1B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAG1D"}
1
+ {"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../src/highlight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAA;AACpG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAE7C,MAAM,WAAW,mBAAmB;IACnC,EAAE,CAAC,EAAE,KAAK,CAAA;IACV,EAAE,CAAC,EAAE,KAAK,CAAA;IACV,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,mBAAmB,CAAA;CAC3B;AAED,MAAM,MAAM,aAAa,GAAG,cAAc,EAAE,CAAA;AAoB5C,wBAAsB,aAAa,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,eAAe,CAAC;IAAC,KAAK,CAAC,EAAE,YAAY,CAAA;CAAE,GACrD,OAAO,CAAC,aAAa,EAAE,CAAC,CA+B1B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAG1D"}
@@ -1 +1 @@
1
- {"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../src/highlight.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../src/highlight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA6D,MAAM,OAAO,CAAA;AAkBpG,MAAM,aAAa,GAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;AAC3E,MAAM,aAAa,GAAiB,MAAM,CAAA;AAE1C,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAgC,CAAA;AAEhE,KAAK,UAAU,oBAAoB,CAAC,KAAmB;IACtD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IACzB,IAAI,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,GAAG,iBAAiB,CAAC;YAC1B,MAAM,EAAE,CAAC,KAAK,CAAC;YACf,KAAK,EAAE,aAAa;SACpB,CAAC,CAAA;QACF,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAClC,CAAC;IACD,OAAO,MAAM,CAAA;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,IAAY,EACZ,IAAuD;IAEvD,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAK,IAA+B,CAAA;IAC3D,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,aAAa,CAAA;IAE1C,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAA;IAErD,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,MAAM,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAC1E,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;QAC7C,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,qCAAqC;YACrC,YAAoB,CAAC,MAAM,CAAA;IAE9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;QAAE,OAAO,YAAY,CAAC,IAAI,CAAC,CAAA;IAEzD,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,IAAW,EAAE,EAAE,CACrC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAClB,MAAM,KAAK,GAAwB,EAAE,CAAA;QACrC,IAAI,KAAK,CAAC,KAAK;YAAE,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAA;QACvC,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,CAAA;QAC/B,4DAA4D;QAC5D,IAAI,EAAE,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAA;QAC7B,IAAI,EAAE,GAAG,CAAC;YAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAA;QAC/B,IAAI,EAAE,GAAG,CAAC;YAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAA;QAElC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAA;IAChG,CAAC,CAAC,CACF,CAAA;AACF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACxC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IAClC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;AAC3D,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hmr-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hmr-plugin.d.ts","sourceRoot":"","sources":["../../src/hmr-plugin.ts"],"names":[],"mappings":""}
@@ -0,0 +1,53 @@
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
+ // Only enable in development
18
+ if (process.env.NODE_ENV !== "production") {
19
+ plugin({
20
+ name: "auto-hmr",
21
+ setup(build) {
22
+ build.onLoad({ filter: /\.[tj]sx?$/ }, async (args) => {
23
+ const source = await Bun.file(args.path).text();
24
+ // Skip files that don't use autoHmr
25
+ if (!source.includes("autoHmr")) {
26
+ return undefined;
27
+ }
28
+ // Get relative path for cleaner keys
29
+ const relativePath = relative(process.cwd(), args.path);
30
+ // Transform: const varName = ...pipe(autoHmr) → ...pipe(hmr("path:varName"))
31
+ // This regex handles the common case of variable declarations
32
+ const transformed = source.replace(/(?:export\s+)?(?:const|let|var)\s+(\w+)\s*=\s*([^;]+)\.pipe\(\s*autoHmr\s*\)/g, (match, varName, expr) => {
33
+ const key = `${relativePath}:${varName}`;
34
+ // Preserve export if present
35
+ const exportPrefix = match.startsWith("export") ? "export " : "";
36
+ return `${exportPrefix}const ${varName} = ${expr}.pipe(hmr("${key}"))`;
37
+ });
38
+ // Also handle: someAtom.pipe(autoHmr) without assignment (less common)
39
+ // For these, we use a counter-based key as fallback
40
+ let counter = 0;
41
+ const finalTransformed = transformed.replace(/\.pipe\(\s*autoHmr\s*\)/g, () => {
42
+ counter++;
43
+ return `.pipe(hmr("${relativePath}:anon${counter}"))`;
44
+ });
45
+ return {
46
+ contents: finalTransformed,
47
+ loader: args.path.endsWith("x") ? "tsx" : "ts",
48
+ };
49
+ });
50
+ },
51
+ });
52
+ }
53
+ //# sourceMappingURL=hmr-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hmr-plugin.js","sourceRoot":"","sources":["../../src/hmr-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAE/B,6BAA6B;AAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;IAC3C,MAAM,CAAC;QACN,IAAI,EAAE,UAAU;QAChB,KAAK,CAAC,KAAK;YACV,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACrD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAA;gBAE/C,oCAAoC;gBACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBACjC,OAAO,SAAS,CAAA;gBACjB,CAAC;gBAED,qCAAqC;gBACrC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;gBAEvD,6EAA6E;gBAC7E,8DAA8D;gBAC9D,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CACjC,+EAA+E,EAC/E,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;oBACxB,MAAM,GAAG,GAAG,GAAG,YAAY,IAAI,OAAO,EAAE,CAAA;oBACxC,6BAA6B;oBAC7B,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAA;oBAChE,OAAO,GAAG,YAAY,SAAS,OAAO,MAAM,IAAI,cAAc,GAAG,KAAK,CAAA;gBACvE,CAAC,CACD,CAAA;gBAED,uEAAuE;gBACvE,oDAAoD;gBACpD,IAAI,OAAO,GAAG,CAAC,CAAA;gBACf,MAAM,gBAAgB,GAAG,WAAW,CAAC,OAAO,CAAC,0BAA0B,EAAE,GAAG,EAAE;oBAC7E,OAAO,EAAE,CAAA;oBACT,OAAO,cAAc,YAAY,QAAQ,OAAO,KAAK,CAAA;gBACtD,CAAC,CAAC,CAAA;gBAEF,OAAO;oBACN,QAAQ,EAAE,gBAAgB;oBAC1B,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;iBAC9C,CAAA;YACF,CAAC,CAAC,CAAA;QACH,CAAC;KACD,CAAC,CAAA;AACH,CAAC"}
@@ -1,4 +1,8 @@
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";
4
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA"}