@effect-tui/react 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (442) hide show
  1. package/dist/jsx-runtime.d.ts +13 -0
  2. package/dist/jsx-runtime.d.ts.map +1 -1
  3. package/dist/jsx-runtime.js.map +1 -1
  4. package/dist/src/codeblock.d.ts.map +1 -1
  5. package/dist/src/codeblock.js.map +1 -1
  6. package/dist/src/components/Divider.d.ts +18 -0
  7. package/dist/src/components/Divider.d.ts.map +1 -0
  8. package/dist/src/components/Divider.js +17 -0
  9. package/dist/src/components/Divider.js.map +1 -0
  10. package/dist/src/components/Markdown.d.ts +66 -0
  11. package/dist/src/components/Markdown.d.ts.map +1 -0
  12. package/dist/src/components/Markdown.js +226 -0
  13. package/dist/src/components/Markdown.js.map +1 -0
  14. package/dist/src/components/MultilineTextInput.d.ts +65 -0
  15. package/dist/src/components/MultilineTextInput.d.ts.map +1 -0
  16. package/dist/src/components/MultilineTextInput.js +607 -0
  17. package/dist/src/components/MultilineTextInput.js.map +1 -0
  18. package/dist/src/components/Overlay.d.ts +46 -0
  19. package/dist/src/components/Overlay.d.ts.map +1 -0
  20. package/dist/src/components/Overlay.js +11 -0
  21. package/dist/src/components/Overlay.js.map +1 -0
  22. package/dist/src/components/Static.d.ts +44 -0
  23. package/dist/src/components/Static.d.ts.map +1 -0
  24. package/dist/src/components/Static.js +53 -0
  25. package/dist/src/components/Static.js.map +1 -0
  26. package/dist/src/components/TextInput.d.ts +55 -0
  27. package/dist/src/components/TextInput.d.ts.map +1 -0
  28. package/dist/src/components/TextInput.js +277 -0
  29. package/dist/src/components/TextInput.js.map +1 -0
  30. package/dist/src/components/index.d.ts +7 -0
  31. package/dist/src/components/index.d.ts.map +1 -0
  32. package/dist/src/components/index.js +7 -0
  33. package/dist/src/components/index.js.map +1 -0
  34. package/dist/src/components/text-editing.d.ts +62 -0
  35. package/dist/src/components/text-editing.d.ts.map +1 -0
  36. package/dist/src/components/text-editing.js +385 -0
  37. package/dist/src/components/text-editing.js.map +1 -0
  38. package/dist/src/console/ConsoleCapture.d.ts +36 -0
  39. package/dist/src/console/ConsoleCapture.d.ts.map +1 -0
  40. package/dist/src/console/ConsoleCapture.js +210 -0
  41. package/dist/src/console/ConsoleCapture.js.map +1 -0
  42. package/dist/src/console/ConsolePopover.d.ts +18 -0
  43. package/dist/src/console/ConsolePopover.d.ts.map +1 -0
  44. package/dist/src/console/ConsolePopover.js +324 -0
  45. package/dist/src/console/ConsolePopover.js.map +1 -0
  46. package/dist/src/console/clipboard.d.ts +10 -0
  47. package/dist/src/console/clipboard.d.ts.map +1 -0
  48. package/dist/src/console/clipboard.js +74 -0
  49. package/dist/src/console/clipboard.js.map +1 -0
  50. package/dist/src/console/index.d.ts +5 -0
  51. package/dist/src/console/index.d.ts.map +1 -0
  52. package/dist/src/console/index.js +33 -0
  53. package/dist/src/console/index.js.map +1 -0
  54. package/dist/src/console/useConsole.d.ts +44 -0
  55. package/dist/src/console/useConsole.d.ts.map +1 -0
  56. package/dist/src/console/useConsole.js +91 -0
  57. package/dist/src/console/useConsole.js.map +1 -0
  58. package/dist/src/debug/DebugOverlay.d.ts +49 -0
  59. package/dist/src/debug/DebugOverlay.d.ts.map +1 -0
  60. package/dist/src/debug/DebugOverlay.js +438 -0
  61. package/dist/src/debug/DebugOverlay.js.map +1 -0
  62. package/dist/src/debug/DiagnosticsPanel.d.ts.map +1 -1
  63. package/dist/src/debug/DiagnosticsPanel.js.map +1 -1
  64. package/dist/src/dev/Toast.d.ts +19 -0
  65. package/dist/src/dev/Toast.d.ts.map +1 -0
  66. package/dist/src/dev/Toast.js +72 -0
  67. package/dist/src/dev/Toast.js.map +1 -0
  68. package/dist/src/dev/index.d.ts +2 -0
  69. package/dist/src/dev/index.d.ts.map +1 -0
  70. package/dist/src/dev/index.js +3 -0
  71. package/dist/src/dev/index.js.map +1 -0
  72. package/dist/src/dev.d.ts +114 -0
  73. package/dist/src/dev.d.ts.map +1 -0
  74. package/dist/src/dev.js +373 -0
  75. package/dist/src/dev.js.map +1 -0
  76. package/dist/src/highlight.d.ts +3 -3
  77. package/dist/src/highlight.d.ts.map +1 -1
  78. package/dist/src/highlight.js.map +1 -1
  79. package/dist/src/hmr-plugin.d.ts +2 -0
  80. package/dist/src/hmr-plugin.d.ts.map +1 -0
  81. package/dist/src/hmr-plugin.js +53 -0
  82. package/dist/src/hmr-plugin.js.map +1 -0
  83. package/dist/src/hooks/index.d.ts +4 -0
  84. package/dist/src/hooks/index.d.ts.map +1 -1
  85. package/dist/src/hooks/index.js +2 -0
  86. package/dist/src/hooks/index.js.map +1 -1
  87. package/dist/src/hooks/use-keyboard.d.ts +11 -0
  88. package/dist/src/hooks/use-keyboard.d.ts.map +1 -1
  89. package/dist/src/hooks/use-keyboard.js +22 -4
  90. package/dist/src/hooks/use-keyboard.js.map +1 -1
  91. package/dist/src/hooks/use-mouse.d.ts +24 -0
  92. package/dist/src/hooks/use-mouse.d.ts.map +1 -0
  93. package/dist/src/hooks/use-mouse.js +41 -0
  94. package/dist/src/hooks/use-mouse.js.map +1 -0
  95. package/dist/src/hooks/use-paste.d.ts +11 -0
  96. package/dist/src/hooks/use-paste.d.ts.map +1 -1
  97. package/dist/src/hooks/use-paste.js +17 -3
  98. package/dist/src/hooks/use-paste.js.map +1 -1
  99. package/dist/src/hooks/use-scroll.d.ts +79 -0
  100. package/dist/src/hooks/use-scroll.d.ts.map +1 -0
  101. package/dist/src/hooks/use-scroll.js +239 -0
  102. package/dist/src/hooks/use-scroll.js.map +1 -0
  103. package/dist/src/hooks/useFrameStats.js.map +1 -1
  104. package/dist/src/hosts/base.d.ts +62 -1
  105. package/dist/src/hosts/base.d.ts.map +1 -1
  106. package/dist/src/hosts/base.js +118 -5
  107. package/dist/src/hosts/base.js.map +1 -1
  108. package/dist/src/hosts/box.d.ts +7 -7
  109. package/dist/src/hosts/box.d.ts.map +1 -1
  110. package/dist/src/hosts/box.js +30 -23
  111. package/dist/src/hosts/box.js.map +1 -1
  112. package/dist/src/hosts/canvas.d.ts +16 -8
  113. package/dist/src/hosts/canvas.d.ts.map +1 -1
  114. package/dist/src/hosts/canvas.js +27 -22
  115. package/dist/src/hosts/canvas.js.map +1 -1
  116. package/dist/src/hosts/codeblock.d.ts +7 -7
  117. package/dist/src/hosts/codeblock.d.ts.map +1 -1
  118. package/dist/src/hosts/codeblock.js +11 -20
  119. package/dist/src/hosts/codeblock.js.map +1 -1
  120. package/dist/src/hosts/flex-container.d.ts +45 -0
  121. package/dist/src/hosts/flex-container.d.ts.map +1 -0
  122. package/dist/src/hosts/flex-container.js +90 -0
  123. package/dist/src/hosts/flex-container.js.map +1 -0
  124. package/dist/src/hosts/hstack.d.ts +6 -11
  125. package/dist/src/hosts/hstack.d.ts.map +1 -1
  126. package/dist/src/hosts/hstack.js +6 -41
  127. package/dist/src/hosts/hstack.js.map +1 -1
  128. package/dist/src/hosts/index.d.ts +4 -0
  129. package/dist/src/hosts/index.d.ts.map +1 -1
  130. package/dist/src/hosts/index.js +10 -0
  131. package/dist/src/hosts/index.js.map +1 -1
  132. package/dist/src/hosts/overlay-item.d.ts +32 -0
  133. package/dist/src/hosts/overlay-item.d.ts.map +1 -0
  134. package/dist/src/hosts/overlay-item.js +54 -0
  135. package/dist/src/hosts/overlay-item.js.map +1 -0
  136. package/dist/src/hosts/overlay.d.ts +30 -0
  137. package/dist/src/hosts/overlay.d.ts.map +1 -0
  138. package/dist/src/hosts/overlay.js +105 -0
  139. package/dist/src/hosts/overlay.js.map +1 -0
  140. package/dist/src/hosts/scroll.d.ts +56 -0
  141. package/dist/src/hosts/scroll.d.ts.map +1 -0
  142. package/dist/src/hosts/scroll.js +204 -0
  143. package/dist/src/hosts/scroll.js.map +1 -0
  144. package/dist/src/hosts/single-child.d.ts +16 -0
  145. package/dist/src/hosts/single-child.d.ts.map +1 -0
  146. package/dist/src/hosts/single-child.js +45 -0
  147. package/dist/src/hosts/single-child.js.map +1 -0
  148. package/dist/src/hosts/spacer.d.ts.map +1 -1
  149. package/dist/src/hosts/spacer.js +7 -3
  150. package/dist/src/hosts/spacer.js.map +1 -1
  151. package/dist/src/hosts/text.d.ts +9 -6
  152. package/dist/src/hosts/text.d.ts.map +1 -1
  153. package/dist/src/hosts/text.js +49 -22
  154. package/dist/src/hosts/text.js.map +1 -1
  155. package/dist/src/hosts/vstack.d.ts +6 -11
  156. package/dist/src/hosts/vstack.d.ts.map +1 -1
  157. package/dist/src/hosts/vstack.js +6 -41
  158. package/dist/src/hosts/vstack.js.map +1 -1
  159. package/dist/src/hosts/zstack.d.ts.map +1 -1
  160. package/dist/src/hosts/zstack.js +16 -5
  161. package/dist/src/hosts/zstack.js.map +1 -1
  162. package/dist/src/index.d.ts +9 -2
  163. package/dist/src/index.d.ts.map +1 -1
  164. package/dist/src/index.js +10 -2
  165. package/dist/src/index.js.map +1 -1
  166. package/dist/src/inline/index.d.ts.map +1 -1
  167. package/dist/src/inline/index.js.map +1 -1
  168. package/dist/src/motion/color-motion-value.d.ts.map +1 -1
  169. package/dist/src/motion/color-motion-value.js.map +1 -1
  170. package/dist/src/motion/color.d.ts +1 -29
  171. package/dist/src/motion/color.d.ts.map +1 -1
  172. package/dist/src/motion/color.js +2 -170
  173. package/dist/src/motion/color.js.map +1 -1
  174. package/dist/src/motion/color.test.js.map +1 -1
  175. package/dist/src/motion/event-emitter.d.ts.map +1 -1
  176. package/dist/src/motion/event-emitter.js.map +1 -1
  177. package/dist/src/motion/frame.js.map +1 -1
  178. package/dist/src/motion/hooks.d.ts.map +1 -1
  179. package/dist/src/motion/hooks.js +8 -3
  180. package/dist/src/motion/hooks.js.map +1 -1
  181. package/dist/src/motion/index.d.ts.map +1 -1
  182. package/dist/src/motion/index.js.map +1 -1
  183. package/dist/src/motion/motion-value.d.ts.map +1 -1
  184. package/dist/src/motion/motion-value.js.map +1 -1
  185. package/dist/src/motion/motion-value.test.js.map +1 -1
  186. package/dist/src/motion/spring-math.d.ts +6 -1
  187. package/dist/src/motion/spring-math.d.ts.map +1 -1
  188. package/dist/src/motion/spring-math.js +6 -1
  189. package/dist/src/motion/spring-math.js.map +1 -1
  190. package/dist/src/motion/types.d.ts.map +1 -1
  191. package/dist/src/motion/types.js.map +1 -1
  192. package/dist/src/profiler.js.map +1 -1
  193. package/dist/src/reconciler/host-config.d.ts +5 -5
  194. package/dist/src/reconciler/host-config.d.ts.map +1 -1
  195. package/dist/src/reconciler/host-config.js +43 -51
  196. package/dist/src/reconciler/host-config.js.map +1 -1
  197. package/dist/src/reconciler/noop-methods.d.ts +29 -0
  198. package/dist/src/reconciler/noop-methods.d.ts.map +1 -0
  199. package/dist/src/reconciler/noop-methods.js +43 -0
  200. package/dist/src/reconciler/noop-methods.js.map +1 -0
  201. package/dist/src/reconciler/types.d.ts +68 -14
  202. package/dist/src/reconciler/types.d.ts.map +1 -1
  203. package/dist/src/remote/Procedures.d.ts +22 -0
  204. package/dist/src/remote/Procedures.d.ts.map +1 -0
  205. package/dist/src/remote/Procedures.js +42 -0
  206. package/dist/src/remote/Procedures.js.map +1 -0
  207. package/dist/src/remote/Router.d.ts +20 -0
  208. package/dist/src/remote/Router.d.ts.map +1 -0
  209. package/dist/src/remote/Router.js +26 -0
  210. package/dist/src/remote/Router.js.map +1 -0
  211. package/dist/src/remote/Server.d.ts +6 -0
  212. package/dist/src/remote/Server.d.ts.map +1 -0
  213. package/dist/src/remote/Server.js +53 -0
  214. package/dist/src/remote/Server.js.map +1 -0
  215. package/dist/src/remote/index.d.ts +18 -0
  216. package/dist/src/remote/index.d.ts.map +1 -0
  217. package/dist/src/remote/index.js +74 -0
  218. package/dist/src/remote/index.js.map +1 -0
  219. package/dist/src/renderer/core/FrameBuilder.d.ts +18 -0
  220. package/dist/src/renderer/core/FrameBuilder.d.ts.map +1 -0
  221. package/dist/src/renderer/core/FrameBuilder.js +38 -0
  222. package/dist/src/renderer/core/FrameBuilder.js.map +1 -0
  223. package/dist/src/renderer/core/RendererState.d.ts +41 -0
  224. package/dist/src/renderer/core/RendererState.d.ts.map +1 -0
  225. package/dist/src/renderer/core/RendererState.js +70 -0
  226. package/dist/src/renderer/core/RendererState.js.map +1 -0
  227. package/dist/src/renderer/core/index.d.ts +3 -0
  228. package/dist/src/renderer/core/index.d.ts.map +1 -0
  229. package/dist/src/renderer/core/index.js +3 -0
  230. package/dist/src/renderer/core/index.js.map +1 -0
  231. package/dist/src/renderer/input/InputProcessor.d.ts +25 -0
  232. package/dist/src/renderer/input/InputProcessor.d.ts.map +1 -0
  233. package/dist/src/renderer/input/InputProcessor.js +81 -0
  234. package/dist/src/renderer/input/InputProcessor.js.map +1 -0
  235. package/dist/src/renderer/input/index.d.ts +2 -0
  236. package/dist/src/renderer/input/index.d.ts.map +1 -0
  237. package/dist/src/renderer/input/index.js +2 -0
  238. package/dist/src/renderer/input/index.js.map +1 -0
  239. package/dist/src/renderer/lifecycle/EventBus.d.ts +41 -0
  240. package/dist/src/renderer/lifecycle/EventBus.d.ts.map +1 -0
  241. package/dist/src/renderer/lifecycle/EventBus.js +78 -0
  242. package/dist/src/renderer/lifecycle/EventBus.js.map +1 -0
  243. package/dist/src/renderer/lifecycle/ResizeManager.d.ts +34 -0
  244. package/dist/src/renderer/lifecycle/ResizeManager.d.ts.map +1 -0
  245. package/dist/src/renderer/lifecycle/ResizeManager.js +47 -0
  246. package/dist/src/renderer/lifecycle/ResizeManager.js.map +1 -0
  247. package/dist/src/renderer/lifecycle/TerminalSetup.d.ts +36 -0
  248. package/dist/src/renderer/lifecycle/TerminalSetup.d.ts.map +1 -0
  249. package/dist/src/renderer/lifecycle/TerminalSetup.js +82 -0
  250. package/dist/src/renderer/lifecycle/TerminalSetup.js.map +1 -0
  251. package/dist/src/renderer/lifecycle/index.d.ts +4 -0
  252. package/dist/src/renderer/lifecycle/index.d.ts.map +1 -0
  253. package/dist/src/renderer/lifecycle/index.js +4 -0
  254. package/dist/src/renderer/lifecycle/index.js.map +1 -0
  255. package/dist/src/renderer/modes/FullscreenRenderer.d.ts +12 -0
  256. package/dist/src/renderer/modes/FullscreenRenderer.d.ts.map +1 -0
  257. package/dist/src/renderer/modes/FullscreenRenderer.js +52 -0
  258. package/dist/src/renderer/modes/FullscreenRenderer.js.map +1 -0
  259. package/dist/src/renderer/modes/InlineRenderer.d.ts +25 -0
  260. package/dist/src/renderer/modes/InlineRenderer.d.ts.map +1 -0
  261. package/dist/src/renderer/modes/InlineRenderer.js +161 -0
  262. package/dist/src/renderer/modes/InlineRenderer.js.map +1 -0
  263. package/dist/src/renderer/modes/RendererMode.d.ts +42 -0
  264. package/dist/src/renderer/modes/RendererMode.d.ts.map +1 -0
  265. package/dist/src/renderer/modes/RendererMode.js +2 -0
  266. package/dist/src/renderer/modes/RendererMode.js.map +1 -0
  267. package/dist/src/renderer/modes/StaticContentRenderer.d.ts +25 -0
  268. package/dist/src/renderer/modes/StaticContentRenderer.d.ts.map +1 -0
  269. package/dist/src/renderer/modes/StaticContentRenderer.js +47 -0
  270. package/dist/src/renderer/modes/StaticContentRenderer.js.map +1 -0
  271. package/dist/src/renderer/modes/index.d.ts +5 -0
  272. package/dist/src/renderer/modes/index.d.ts.map +1 -0
  273. package/dist/src/renderer/modes/index.js +4 -0
  274. package/dist/src/renderer/modes/index.js.map +1 -0
  275. package/dist/src/renderer-context.d.ts +9 -0
  276. package/dist/src/renderer-context.d.ts.map +1 -0
  277. package/dist/src/renderer-context.js +22 -0
  278. package/dist/src/renderer-context.js.map +1 -0
  279. package/dist/src/renderer-types.d.ts +103 -0
  280. package/dist/src/renderer-types.d.ts.map +1 -0
  281. package/dist/src/renderer-types.js +2 -0
  282. package/dist/src/renderer-types.js.map +1 -0
  283. package/dist/src/renderer.d.ts +4 -86
  284. package/dist/src/renderer.d.ts.map +1 -1
  285. package/dist/src/renderer.js +214 -384
  286. package/dist/src/renderer.js.map +1 -1
  287. package/dist/src/test/index.d.ts.map +1 -1
  288. package/dist/src/test/index.js.map +1 -1
  289. package/dist/src/test/mock-streams.d.ts.map +1 -1
  290. package/dist/src/test/mock-streams.js.map +1 -1
  291. package/dist/src/test/render-tui.d.ts.map +1 -1
  292. package/dist/src/test/render-tui.js +2 -5
  293. package/dist/src/test/render-tui.js.map +1 -1
  294. package/dist/src/trace/SpanTree.d.ts.map +1 -1
  295. package/dist/src/trace/SpanTree.js +21 -11
  296. package/dist/src/trace/SpanTree.js.map +1 -1
  297. package/dist/src/trace/format-value.d.ts +15 -0
  298. package/dist/src/trace/format-value.d.ts.map +1 -0
  299. package/dist/src/trace/format-value.js +77 -0
  300. package/dist/src/trace/format-value.js.map +1 -0
  301. package/dist/src/trace/index.d.ts.map +1 -1
  302. package/dist/src/trace/index.js.map +1 -1
  303. package/dist/src/trace/location.js +1 -1
  304. package/dist/src/trace/location.js.map +1 -1
  305. package/dist/src/trace/span-processor.d.ts.map +1 -1
  306. package/dist/src/trace/span-processor.js.map +1 -1
  307. package/dist/src/trace/span-state.d.ts +19 -2
  308. package/dist/src/trace/span-state.d.ts.map +1 -1
  309. package/dist/src/trace/span-state.js +62 -31
  310. package/dist/src/trace/span-state.js.map +1 -1
  311. package/dist/src/trace/tui-logger.js.map +1 -1
  312. package/dist/src/utils/border.d.ts +1 -1
  313. package/dist/src/utils/border.d.ts.map +1 -1
  314. package/dist/src/utils/border.js +6 -0
  315. package/dist/src/utils/border.js.map +1 -1
  316. package/dist/src/utils/flex-layout.d.ts +2 -1
  317. package/dist/src/utils/flex-layout.d.ts.map +1 -1
  318. package/dist/src/utils/flex-layout.js +22 -33
  319. package/dist/src/utils/flex-layout.js.map +1 -1
  320. package/dist/src/utils/index.d.ts +1 -1
  321. package/dist/src/utils/index.d.ts.map +1 -1
  322. package/dist/src/utils/index.js +1 -1
  323. package/dist/src/utils/index.js.map +1 -1
  324. package/dist/src/utils/padding.d.ts.map +1 -1
  325. package/dist/src/utils/padding.js.map +1 -1
  326. package/dist/src/utils/styles.d.ts +20 -1
  327. package/dist/src/utils/styles.d.ts.map +1 -1
  328. package/dist/src/utils/styles.js +36 -1
  329. package/dist/src/utils/styles.js.map +1 -1
  330. package/dist/src/visualize/index.d.ts +8 -19
  331. package/dist/src/visualize/index.d.ts.map +1 -1
  332. package/dist/src/visualize/index.js +11 -25
  333. package/dist/src/visualize/index.js.map +1 -1
  334. package/dist/tsconfig.tsbuildinfo +1 -1
  335. package/jsx-dev-runtime.ts +5 -0
  336. package/jsx-runtime.ts +54 -0
  337. package/package.json +124 -92
  338. package/src/codeblock.tsx +34 -34
  339. package/src/components/Divider.tsx +23 -0
  340. package/src/components/Markdown.tsx +380 -0
  341. package/src/components/MultilineTextInput.tsx +749 -0
  342. package/src/components/Overlay.tsx +56 -0
  343. package/src/components/Static.tsx +68 -0
  344. package/src/components/TextInput.tsx +356 -0
  345. package/src/components/index.ts +6 -0
  346. package/src/components/text-editing.ts +464 -0
  347. package/src/console/ConsoleCapture.ts +272 -0
  348. package/src/console/ConsolePopover.tsx +487 -0
  349. package/src/console/clipboard.ts +81 -0
  350. package/src/console/index.ts +42 -0
  351. package/src/console/useConsole.ts +129 -0
  352. package/src/debug/DebugOverlay.ts +557 -0
  353. package/src/debug/DiagnosticsPanel.tsx +27 -27
  354. package/src/dev/Toast.tsx +117 -0
  355. package/src/dev/index.ts +2 -0
  356. package/src/dev.tsx +489 -0
  357. package/src/highlight.ts +46 -46
  358. package/src/hmr-plugin.ts +61 -0
  359. package/src/hooks/index.ts +4 -0
  360. package/src/hooks/use-keyboard.ts +44 -24
  361. package/src/hooks/use-mouse.ts +51 -0
  362. package/src/hooks/use-paste.ts +21 -6
  363. package/src/hooks/use-scroll.ts +386 -0
  364. package/src/hooks/useFrameStats.ts +17 -17
  365. package/src/hosts/base.ts +180 -59
  366. package/src/hosts/box.ts +117 -94
  367. package/src/hosts/canvas.ts +170 -141
  368. package/src/hosts/codeblock.ts +117 -133
  369. package/src/hosts/flex-container.ts +124 -0
  370. package/src/hosts/hstack.ts +11 -59
  371. package/src/hosts/index.ts +24 -14
  372. package/src/hosts/overlay-item.ts +72 -0
  373. package/src/hosts/overlay.ts +125 -0
  374. package/src/hosts/scroll.ts +255 -0
  375. package/src/hosts/single-child.ts +52 -0
  376. package/src/hosts/spacer.ts +30 -26
  377. package/src/hosts/text.ts +198 -164
  378. package/src/hosts/vstack.ts +11 -59
  379. package/src/hosts/zstack.ts +79 -67
  380. package/src/index.ts +44 -19
  381. package/src/inline/index.tsx +123 -123
  382. package/src/motion/color-motion-value.ts +67 -67
  383. package/src/motion/color.test.ts +107 -107
  384. package/src/motion/color.ts +9 -190
  385. package/src/motion/event-emitter.ts +20 -20
  386. package/src/motion/frame.ts +35 -35
  387. package/src/motion/hooks.ts +144 -139
  388. package/src/motion/index.ts +10 -10
  389. package/src/motion/motion-value.test.ts +207 -207
  390. package/src/motion/motion-value.ts +112 -112
  391. package/src/motion/spring-math.ts +88 -83
  392. package/src/motion/types.ts +25 -25
  393. package/src/profiler.ts +50 -50
  394. package/src/reconciler/host-config.ts +152 -174
  395. package/src/reconciler/noop-methods.ts +55 -0
  396. package/src/reconciler/types.ts +112 -46
  397. package/src/remote/Procedures.ts +52 -0
  398. package/src/remote/Router.ts +58 -0
  399. package/src/remote/Server.ts +76 -0
  400. package/src/remote/index.ts +90 -0
  401. package/src/renderer/core/FrameBuilder.ts +49 -0
  402. package/src/renderer/core/RendererState.ts +80 -0
  403. package/src/renderer/core/index.ts +2 -0
  404. package/src/renderer/input/InputProcessor.ts +94 -0
  405. package/src/renderer/input/index.ts +1 -0
  406. package/src/renderer/lifecycle/EventBus.ts +90 -0
  407. package/src/renderer/lifecycle/ResizeManager.ts +65 -0
  408. package/src/renderer/lifecycle/TerminalSetup.ts +105 -0
  409. package/src/renderer/lifecycle/index.ts +3 -0
  410. package/src/renderer/modes/FullscreenRenderer.ts +53 -0
  411. package/src/renderer/modes/InlineRenderer.ts +186 -0
  412. package/src/renderer/modes/RendererMode.ts +46 -0
  413. package/src/renderer/modes/StaticContentRenderer.ts +56 -0
  414. package/src/renderer/modes/index.ts +4 -0
  415. package/src/renderer-context.ts +27 -0
  416. package/src/renderer-types.ts +109 -0
  417. package/src/renderer.ts +392 -642
  418. package/src/test/index.ts +5 -5
  419. package/src/test/mock-streams.ts +115 -115
  420. package/src/test/render-tui.ts +84 -87
  421. package/src/utils/border.ts +79 -73
  422. package/src/utils/flex-layout.ts +80 -93
  423. package/src/utils/index.ts +1 -1
  424. package/src/utils/padding.ts +27 -27
  425. package/src/utils/styles.ts +50 -7
  426. package/src/visualize/index.tsx +225 -240
  427. package/dist/src/output.d.ts +0 -47
  428. package/dist/src/output.d.ts.map +0 -1
  429. package/dist/src/output.js +0 -125
  430. package/dist/src/output.js.map +0 -1
  431. package/dist/src/terminal.d.ts +0 -37
  432. package/dist/src/terminal.d.ts.map +0 -1
  433. package/dist/src/terminal.js +0 -65
  434. package/dist/src/terminal.js.map +0 -1
  435. package/src/output.ts +0 -156
  436. package/src/terminal.ts +0 -67
  437. package/src/trace/SpanTree.tsx +0 -195
  438. package/src/trace/index.tsx +0 -205
  439. package/src/trace/location.ts +0 -90
  440. package/src/trace/span-processor.ts +0 -65
  441. package/src/trace/span-state.ts +0 -286
  442. package/src/trace/tui-logger.ts +0 -72
@@ -0,0 +1,385 @@
1
+ /**
2
+ * Pure functions for text editing operations.
3
+ * These are used by TextInput and MultilineTextInput components.
4
+ * Being pure functions makes them easy to test.
5
+ */
6
+ import { graphemes } from "@effect-tui/core";
7
+ // ============================================================================
8
+ // Word boundary helpers (shared by TextInput and MultilineTextInput)
9
+ // ============================================================================
10
+ /** Match the previous word (and trailing whitespace) or whitespace-only chunk. */
11
+ export function matchPrevWord(beforeCursor) {
12
+ return beforeCursor.match(/(\S+\s*|\s+)$/)?.[0] ?? null;
13
+ }
14
+ /** Match the next word (including leading whitespace). */
15
+ export function matchNextWord(afterCursor) {
16
+ return afterCursor.match(/^\s*\S+/)?.[0] ?? null;
17
+ }
18
+ // ============================================================================
19
+ // Single-line operations (for TextInput)
20
+ // ============================================================================
21
+ /** Delete word backward */
22
+ export function deleteWordBackward(state) {
23
+ const { text, cursor } = state;
24
+ if (cursor <= 0) {
25
+ return { state, changed: false };
26
+ }
27
+ const beforeCursor = text.slice(0, cursor);
28
+ const match = matchPrevWord(beforeCursor);
29
+ if (!match) {
30
+ return { state, changed: false };
31
+ }
32
+ const newCursor = cursor - match.length;
33
+ const newText = text.slice(0, newCursor) + text.slice(cursor);
34
+ return {
35
+ state: { text: newText, cursor: newCursor, killRing: match },
36
+ changed: true,
37
+ };
38
+ }
39
+ /** Kill to end of line */
40
+ export function killToEnd(state) {
41
+ const { text, cursor } = state;
42
+ const killed = text.slice(cursor);
43
+ if (!killed) {
44
+ return { state, changed: false };
45
+ }
46
+ return {
47
+ state: { text: text.slice(0, cursor), cursor, killRing: killed },
48
+ changed: true,
49
+ };
50
+ }
51
+ /** Kill to start of line */
52
+ export function killToStart(state) {
53
+ const { text, cursor } = state;
54
+ const killed = text.slice(0, cursor);
55
+ if (!killed) {
56
+ return { state, changed: false };
57
+ }
58
+ return {
59
+ state: { text: text.slice(cursor), cursor: 0, killRing: killed },
60
+ changed: true,
61
+ };
62
+ }
63
+ /** Delete character at cursor */
64
+ export function deleteCharForward(state) {
65
+ const { text, cursor, killRing } = state;
66
+ if (cursor >= text.length) {
67
+ return { state, changed: false };
68
+ }
69
+ const newText = text.slice(0, cursor) + text.slice(cursor + 1);
70
+ return {
71
+ state: { text: newText, cursor, killRing },
72
+ changed: true,
73
+ };
74
+ }
75
+ /** Delete character before cursor */
76
+ export function deleteCharBackward(state) {
77
+ const { text, cursor, killRing } = state;
78
+ if (cursor <= 0) {
79
+ return { state, changed: false };
80
+ }
81
+ const newText = text.slice(0, cursor - 1) + text.slice(cursor);
82
+ return {
83
+ state: { text: newText, cursor: cursor - 1, killRing },
84
+ changed: true,
85
+ };
86
+ }
87
+ /** Transpose characters before cursor */
88
+ export function transposeChars(state) {
89
+ const { text, cursor, killRing } = state;
90
+ if (cursor <= 0 || text.length < 2) {
91
+ return { state, changed: false };
92
+ }
93
+ let newText;
94
+ let newCursor = cursor;
95
+ if (cursor === text.length) {
96
+ // At end: swap last two chars
97
+ newText = text.slice(0, cursor - 2) + text[cursor - 1] + text[cursor - 2];
98
+ }
99
+ else {
100
+ // Swap char before cursor with char at cursor
101
+ newText = text.slice(0, cursor - 1) + text[cursor] + text[cursor - 1] + text.slice(cursor + 1);
102
+ newCursor = cursor + 1;
103
+ }
104
+ return {
105
+ state: { text: newText, cursor: newCursor, killRing },
106
+ changed: true,
107
+ };
108
+ }
109
+ /** Insert text at cursor (yank) */
110
+ export function insertText(state, toInsert) {
111
+ const { text, cursor, killRing } = state;
112
+ if (!toInsert) {
113
+ return { state, changed: false };
114
+ }
115
+ const newText = text.slice(0, cursor) + toInsert + text.slice(cursor);
116
+ return {
117
+ state: { text: newText, cursor: cursor + toInsert.length, killRing },
118
+ changed: true,
119
+ };
120
+ }
121
+ // ============================================================================
122
+ // Multi-line operations (for MultilineTextInput)
123
+ // ============================================================================
124
+ /** Convert grapheme column to character index in a line */
125
+ export function graphemeColToCharIdx(line, col) {
126
+ const gs = graphemes(line);
127
+ return gs.slice(0, col).join("").length;
128
+ }
129
+ /** Convert character index to grapheme column */
130
+ export function charIdxToGraphemeCol(line, charIdx) {
131
+ return graphemes(line.slice(0, charIdx)).length;
132
+ }
133
+ /** Delete word backward in multiline (crosses line boundaries) */
134
+ export function deleteWordBackwardMultiline(state) {
135
+ const { lines, cursor } = state;
136
+ if (cursor.col > 0) {
137
+ // Delete on current line
138
+ const line = lines[cursor.row];
139
+ const charIdx = graphemeColToCharIdx(line, cursor.col);
140
+ const beforeCursor = line.slice(0, charIdx);
141
+ const match = matchPrevWord(beforeCursor);
142
+ if (!match) {
143
+ return { state, changed: false };
144
+ }
145
+ const newCharIdx = charIdx - match.length;
146
+ const newCol = charIdxToGraphemeCol(line, newCharIdx);
147
+ const newLine = line.slice(0, newCharIdx) + line.slice(charIdx);
148
+ const newLines = [...lines];
149
+ newLines[cursor.row] = newLine;
150
+ return {
151
+ state: {
152
+ lines: newLines,
153
+ cursor: { row: cursor.row, col: newCol },
154
+ killRing: match,
155
+ },
156
+ changed: true,
157
+ };
158
+ }
159
+ else if (cursor.row > 0) {
160
+ // At start of line - delete last word of previous line + newline
161
+ const prevLine = lines[cursor.row - 1];
162
+ const currentLine = lines[cursor.row];
163
+ const match = matchPrevWord(prevLine);
164
+ if (match) {
165
+ const killed = match + "\n";
166
+ const newPrevLine = prevLine.slice(0, prevLine.length - match.length);
167
+ const newLines = [...lines];
168
+ newLines[cursor.row - 1] = newPrevLine + currentLine;
169
+ newLines.splice(cursor.row, 1);
170
+ const newCol = graphemes(newPrevLine).length;
171
+ return {
172
+ state: {
173
+ lines: newLines,
174
+ cursor: { row: cursor.row - 1, col: newCol },
175
+ killRing: killed,
176
+ },
177
+ changed: true,
178
+ };
179
+ }
180
+ else {
181
+ // Previous line is empty - just kill the newline
182
+ const newLines = [...lines];
183
+ newLines[cursor.row - 1] = prevLine + currentLine;
184
+ newLines.splice(cursor.row, 1);
185
+ return {
186
+ state: {
187
+ lines: newLines,
188
+ cursor: { row: cursor.row - 1, col: graphemes(prevLine).length },
189
+ killRing: "\n",
190
+ },
191
+ changed: true,
192
+ };
193
+ }
194
+ }
195
+ return { state, changed: false };
196
+ }
197
+ /** Kill to end of line in multiline */
198
+ export function killToEndMultiline(state) {
199
+ const { lines, cursor } = state;
200
+ const line = lines[cursor.row];
201
+ const charIdx = graphemeColToCharIdx(line, cursor.col);
202
+ const killed = line.slice(charIdx);
203
+ if (killed) {
204
+ const newLine = line.slice(0, charIdx);
205
+ const newLines = [...lines];
206
+ newLines[cursor.row] = newLine;
207
+ return {
208
+ state: { lines: newLines, cursor, killRing: killed },
209
+ changed: true,
210
+ };
211
+ }
212
+ else if (cursor.row < lines.length - 1) {
213
+ // At end of line - kill the newline (join with next)
214
+ const newLines = [...lines];
215
+ newLines[cursor.row] = line + lines[cursor.row + 1];
216
+ newLines.splice(cursor.row + 1, 1);
217
+ return {
218
+ state: { lines: newLines, cursor, killRing: "\n" },
219
+ changed: true,
220
+ };
221
+ }
222
+ return { state, changed: false };
223
+ }
224
+ /** Kill to start of line in multiline */
225
+ export function killToStartMultiline(state) {
226
+ const { lines, cursor } = state;
227
+ const line = lines[cursor.row];
228
+ const charIdx = graphemeColToCharIdx(line, cursor.col);
229
+ const killed = line.slice(0, charIdx);
230
+ if (!killed) {
231
+ return { state, changed: false };
232
+ }
233
+ const newLine = line.slice(charIdx);
234
+ const newLines = [...lines];
235
+ newLines[cursor.row] = newLine;
236
+ return {
237
+ state: {
238
+ lines: newLines,
239
+ cursor: { row: cursor.row, col: 0 },
240
+ killRing: killed,
241
+ },
242
+ changed: true,
243
+ };
244
+ }
245
+ /** Transpose characters in multiline */
246
+ export function transposeCharsMultiline(state) {
247
+ const { lines, cursor, killRing } = state;
248
+ const line = lines[cursor.row];
249
+ const gs = graphemes(line);
250
+ if (cursor.col <= 0 || gs.length < 2) {
251
+ return { state, changed: false };
252
+ }
253
+ let newGs;
254
+ let newCol = cursor.col;
255
+ if (cursor.col === gs.length) {
256
+ // At end: swap last two chars
257
+ newGs = [...gs.slice(0, cursor.col - 2), gs[cursor.col - 1], gs[cursor.col - 2]];
258
+ }
259
+ else {
260
+ // Swap char before cursor with char at cursor
261
+ newGs = [...gs.slice(0, cursor.col - 1), gs[cursor.col], gs[cursor.col - 1], ...gs.slice(cursor.col + 1)];
262
+ newCol = cursor.col + 1;
263
+ }
264
+ const newLines = [...lines];
265
+ newLines[cursor.row] = newGs.join("");
266
+ return {
267
+ state: {
268
+ lines: newLines,
269
+ cursor: { row: cursor.row, col: newCol },
270
+ killRing,
271
+ },
272
+ changed: true,
273
+ };
274
+ }
275
+ /** Delete character at cursor in multiline (joins lines if at end) */
276
+ export function deleteCharForwardMultiline(state) {
277
+ const { lines, cursor, killRing } = state;
278
+ const line = lines[cursor.row];
279
+ const gs = graphemes(line);
280
+ if (cursor.col < gs.length) {
281
+ // Delete char at cursor
282
+ const charIdx = graphemeColToCharIdx(line, cursor.col);
283
+ const nextCharIdx = graphemeColToCharIdx(line, cursor.col + 1);
284
+ const newLine = line.slice(0, charIdx) + line.slice(nextCharIdx);
285
+ const newLines = [...lines];
286
+ newLines[cursor.row] = newLine;
287
+ return {
288
+ state: { lines: newLines, cursor, killRing },
289
+ changed: true,
290
+ };
291
+ }
292
+ else if (cursor.row < lines.length - 1) {
293
+ // Join with next line
294
+ const newLines = [...lines];
295
+ newLines[cursor.row] = line + lines[cursor.row + 1];
296
+ newLines.splice(cursor.row + 1, 1);
297
+ return {
298
+ state: { lines: newLines, cursor, killRing },
299
+ changed: true,
300
+ };
301
+ }
302
+ return { state, changed: false };
303
+ }
304
+ /** Delete character before cursor in multiline (joins with previous line if at start) */
305
+ export function deleteCharBackwardMultiline(state) {
306
+ const { lines, cursor, killRing } = state;
307
+ const line = lines[cursor.row];
308
+ if (cursor.col > 0) {
309
+ // Delete char before cursor
310
+ const charIdx = graphemeColToCharIdx(line, cursor.col);
311
+ const prevCharIdx = graphemeColToCharIdx(line, cursor.col - 1);
312
+ const newLine = line.slice(0, prevCharIdx) + line.slice(charIdx);
313
+ const newLines = [...lines];
314
+ newLines[cursor.row] = newLine;
315
+ return {
316
+ state: {
317
+ lines: newLines,
318
+ cursor: { row: cursor.row, col: cursor.col - 1 },
319
+ killRing,
320
+ },
321
+ changed: true,
322
+ };
323
+ }
324
+ else if (cursor.row > 0) {
325
+ // Join with previous line
326
+ const prevLine = lines[cursor.row - 1];
327
+ const prevCol = graphemes(prevLine).length;
328
+ const newLines = [...lines];
329
+ newLines[cursor.row - 1] = prevLine + line;
330
+ newLines.splice(cursor.row, 1);
331
+ return {
332
+ state: {
333
+ lines: newLines,
334
+ cursor: { row: cursor.row - 1, col: prevCol },
335
+ killRing,
336
+ },
337
+ changed: true,
338
+ };
339
+ }
340
+ return { state, changed: false };
341
+ }
342
+ /** Insert text at cursor in multiline (handles newlines) */
343
+ export function insertTextMultiline(state, toInsert) {
344
+ const { lines, cursor, killRing } = state;
345
+ if (!toInsert) {
346
+ return { state, changed: false };
347
+ }
348
+ const line = lines[cursor.row];
349
+ const charIdx = graphemeColToCharIdx(line, cursor.col);
350
+ const beforeCursor = line.slice(0, charIdx);
351
+ const afterCursor = line.slice(charIdx);
352
+ const insertLines = toInsert.split("\n");
353
+ if (insertLines.length === 1) {
354
+ // No newlines - simple insert
355
+ const newLine = beforeCursor + toInsert + afterCursor;
356
+ const newLines = [...lines];
357
+ newLines[cursor.row] = newLine;
358
+ return {
359
+ state: {
360
+ lines: newLines,
361
+ cursor: { row: cursor.row, col: cursor.col + graphemes(toInsert).length },
362
+ killRing,
363
+ },
364
+ changed: true,
365
+ };
366
+ }
367
+ // Has newlines - split into multiple lines
368
+ const newLines = [...lines];
369
+ newLines[cursor.row] = beforeCursor + insertLines[0];
370
+ const middleLines = insertLines.slice(1, -1);
371
+ const lastInsertLine = insertLines[insertLines.length - 1];
372
+ newLines.splice(cursor.row + 1, 0, ...middleLines, lastInsertLine + afterCursor);
373
+ return {
374
+ state: {
375
+ lines: newLines,
376
+ cursor: {
377
+ row: cursor.row + insertLines.length - 1,
378
+ col: graphemes(lastInsertLine).length,
379
+ },
380
+ killRing,
381
+ },
382
+ changed: true,
383
+ };
384
+ }
385
+ //# sourceMappingURL=text-editing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-editing.js","sourceRoot":"","sources":["../../../src/components/text-editing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { EventEmitter } from "events";
2
+ export type LogLevel = "LOG" | "INFO" | "WARN" | "ERROR" | "DEBUG";
3
+ export interface SourceLocation {
4
+ file: string;
5
+ line: number;
6
+ column?: number;
7
+ }
8
+ export interface LogEntry {
9
+ timestamp: Date;
10
+ level: LogLevel;
11
+ message: string;
12
+ args: unknown[];
13
+ location?: SourceLocation;
14
+ }
15
+ export interface ConsoleCaptureEvents {
16
+ entry: (entry: LogEntry) => void;
17
+ error: (entry: LogEntry) => void;
18
+ }
19
+ export declare class ConsoleCapture extends EventEmitter {
20
+ private entries;
21
+ private originalConsole;
22
+ private active;
23
+ private maxEntries;
24
+ constructor(options?: {
25
+ maxEntries?: number;
26
+ });
27
+ get isActive(): boolean;
28
+ getEntries(): LogEntry[];
29
+ clear(): void;
30
+ activate(): void;
31
+ deactivate(): void;
32
+ private appendToConsole;
33
+ writeToOriginal(level: LogLevel, ...args: unknown[]): void;
34
+ }
35
+ export declare function getConsoleCapture(): ConsoleCapture;
36
+ //# sourceMappingURL=ConsoleCapture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConsoleCapture.d.ts","sourceRoot":"","sources":["../../../src/console/ConsoleCapture.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AASrC,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAA;AAElE,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,QAAQ;IACxB,SAAS,EAAE,IAAI,CAAA;IACf,KAAK,EAAE,QAAQ,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,OAAO,EAAE,CAAA;IACf,QAAQ,CAAC,EAAE,cAAc,CAAA;CACzB;AA4ED,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAA;IAChC,KAAK,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAA;CAChC;AAED,qBAAa,cAAe,SAAQ,YAAY;IAC/C,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,UAAU,CAAQ;gBAEd,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAK7C,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,UAAU,IAAI,QAAQ,EAAE;IAIxB,KAAK,IAAI,IAAI;IAIb,QAAQ,IAAI,IAAI;IAkEhB,UAAU,IAAI,IAAI;IAQlB,OAAO,CAAC,eAAe;IA2BvB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;CAoB1D;AAQD,wBAAgB,iBAAiB,IAAI,cAAc,CAKlD"}
@@ -0,0 +1,210 @@
1
+ // Console capture singleton for TUI debugging
2
+ // Intercepts console.log/info/warn/error/debug and stores entries for display
3
+ import { EventEmitter } from "events";
4
+ import { Console } from "node:console";
5
+ import { Writable } from "node:stream";
6
+ import * as util from "node:util";
7
+ // ─────────────────────────────────────────────────────────────
8
+ // Location capture utilities
9
+ // ─────────────────────────────────────────────────────────────
10
+ const cwd = process.cwd();
11
+ function isAppPath(file) {
12
+ if (file.includes("/node_modules/"))
13
+ return false;
14
+ if (file.includes("/.bun/"))
15
+ return false;
16
+ if (file.includes("/ConsoleCapture"))
17
+ return false;
18
+ return file.startsWith(cwd);
19
+ }
20
+ function captureCallerLocation() {
21
+ const err = new Error();
22
+ const stack = err.stack;
23
+ if (!stack)
24
+ return;
25
+ const lines = stack.split("\n").slice(1);
26
+ // Skip internal frames
27
+ const skipPatterns = [/ConsoleCapture/, /captureCallerLocation/, /appendToConsole/, /node:console/, /node:internal/];
28
+ for (const line of lines) {
29
+ const trimmed = line.trim();
30
+ // Check if line should be skipped
31
+ if (skipPatterns.some((p) => p.test(trimmed)))
32
+ continue;
33
+ // Parse stack frame: "at functionName (file:line:column)" or "at file:line:column"
34
+ const re = /at\s+(?:.+?\s+\()?((?:file:\/\/)?[^):]+):(\d+):(\d+)\)?$/;
35
+ const match = re.exec(trimmed);
36
+ if (match) {
37
+ let file = match[1];
38
+ if (file.startsWith("file://")) {
39
+ file = file.slice(7);
40
+ }
41
+ // Only return app paths (not node_modules)
42
+ if (isAppPath(file)) {
43
+ return {
44
+ file,
45
+ line: Number(match[2]),
46
+ column: Number(match[3]),
47
+ };
48
+ }
49
+ }
50
+ }
51
+ }
52
+ // ─────────────────────────────────────────────────────────────
53
+ // Mock writable stream for console capture
54
+ // ─────────────────────────────────────────────────────────────
55
+ class CapturedWritableStream extends Writable {
56
+ isTTY = true;
57
+ columns = process.stdout.columns || 80;
58
+ rows = process.stdout.rows || 24;
59
+ _write(_chunk, _encoding, callback) {
60
+ // We capture through console method overrides instead
61
+ callback();
62
+ }
63
+ getColorDepth() {
64
+ return process.stdout.getColorDepth?.() || 8;
65
+ }
66
+ }
67
+ export class ConsoleCapture extends EventEmitter {
68
+ entries = [];
69
+ originalConsole = null;
70
+ active = false;
71
+ maxEntries;
72
+ constructor(options) {
73
+ super();
74
+ this.maxEntries = options?.maxEntries ?? 1000;
75
+ }
76
+ get isActive() {
77
+ return this.active;
78
+ }
79
+ getEntries() {
80
+ return [...this.entries];
81
+ }
82
+ clear() {
83
+ this.entries = [];
84
+ }
85
+ activate() {
86
+ if (this.active)
87
+ return;
88
+ // Store original console
89
+ this.originalConsole = globalThis.console;
90
+ // Create mock streams for the new console
91
+ const mockStdout = new CapturedWritableStream();
92
+ const mockStderr = new CapturedWritableStream();
93
+ // Create a new Console with mock streams
94
+ // This properly handles util.format for objects, etc.
95
+ const mockConsole = new Console({
96
+ stdout: mockStdout,
97
+ stderr: mockStderr,
98
+ colorMode: true,
99
+ inspectOptions: {
100
+ compact: false,
101
+ breakLength: 80,
102
+ depth: 4,
103
+ },
104
+ });
105
+ // Copy over all methods from original console that we don't override
106
+ // This ensures things like timeStamp, time, timeEnd, trace, etc. still work
107
+ const methodsToCopy = [
108
+ "assert",
109
+ "clear",
110
+ "count",
111
+ "countReset",
112
+ "dir",
113
+ "dirxml",
114
+ "group",
115
+ "groupCollapsed",
116
+ "groupEnd",
117
+ "table",
118
+ "time",
119
+ "timeEnd",
120
+ "timeLog",
121
+ "timeStamp",
122
+ "trace",
123
+ "profile",
124
+ "profileEnd",
125
+ ];
126
+ for (const method of methodsToCopy) {
127
+ if (method in this.originalConsole) {
128
+ ;
129
+ mockConsole[method] = this.originalConsole[method];
130
+ }
131
+ }
132
+ // Override console methods to capture output
133
+ globalThis.console = mockConsole;
134
+ // Attach our capture handlers
135
+ console.log = (...args) => this.appendToConsole("LOG", args);
136
+ console.info = (...args) => this.appendToConsole("INFO", args);
137
+ console.warn = (...args) => this.appendToConsole("WARN", args);
138
+ console.error = (...args) => this.appendToConsole("ERROR", args);
139
+ console.debug = (...args) => this.appendToConsole("DEBUG", args);
140
+ this.active = true;
141
+ }
142
+ deactivate() {
143
+ if (!this.active || !this.originalConsole)
144
+ return;
145
+ globalThis.console = this.originalConsole;
146
+ this.originalConsole = null;
147
+ this.active = false;
148
+ }
149
+ appendToConsole(level, args) {
150
+ const location = captureCallerLocation();
151
+ const message = util.format(...args);
152
+ const entry = {
153
+ timestamp: new Date(),
154
+ level,
155
+ message,
156
+ args,
157
+ location,
158
+ };
159
+ // Enforce max entries
160
+ if (this.entries.length >= this.maxEntries) {
161
+ this.entries.shift();
162
+ }
163
+ this.entries.push(entry);
164
+ // Emit events
165
+ this.emit("entry", entry);
166
+ // Only emit error event if there are listeners (avoid unhandled error exception)
167
+ if (level === "ERROR" && this.listenerCount("error") > 0) {
168
+ this.emit("error", entry);
169
+ }
170
+ }
171
+ // Also expose write to original console for debugging the capture itself
172
+ writeToOriginal(level, ...args) {
173
+ if (!this.originalConsole)
174
+ return;
175
+ switch (level) {
176
+ case "LOG":
177
+ this.originalConsole.log(...args);
178
+ break;
179
+ case "INFO":
180
+ this.originalConsole.info(...args);
181
+ break;
182
+ case "WARN":
183
+ this.originalConsole.warn(...args);
184
+ break;
185
+ case "ERROR":
186
+ this.originalConsole.error(...args);
187
+ break;
188
+ case "DEBUG":
189
+ this.originalConsole.debug(...args);
190
+ break;
191
+ }
192
+ }
193
+ }
194
+ // ─────────────────────────────────────────────────────────────
195
+ // Singleton instance
196
+ // ─────────────────────────────────────────────────────────────
197
+ let instance = null;
198
+ export function getConsoleCapture() {
199
+ if (!instance) {
200
+ instance = new ConsoleCapture();
201
+ }
202
+ return instance;
203
+ }
204
+ // Clean up on process exit
205
+ process.on("exit", () => {
206
+ if (instance?.isActive) {
207
+ instance.deactivate();
208
+ }
209
+ });
210
+ //# sourceMappingURL=ConsoleCapture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConsoleCapture.js","sourceRoot":"","sources":["../../../src/console/ConsoleCapture.ts"],"names":[],"mappings":"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"}