@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
@@ -3,9 +3,8 @@
3
3
 
4
4
  import { useState, useEffect } from "react"
5
5
  import { Cause, Context, Duration, Effect, Exit, Fiber, Layer, Option } from "effect"
6
- import { Colors } from "@effect-tui/core"
6
+ import { Colors, ANSI } from "@effect-tui/core"
7
7
  import { createRenderer, createRoot } from "../renderer.js"
8
- import { ANSI } from "../terminal.js"
9
8
 
10
9
  const SPINNER_FRAMES = ["⠋", "⠙", "⠸", "⠴", "⠦", "⠇"] as const
11
10
  const SPIN_INTERVAL_MS = 80
@@ -15,180 +14,187 @@ const COMPLETION_DELAY_MS = 360
15
14
  type VisualizerStatus = "pending" | "success" | "failure"
16
15
 
17
16
  interface VisualizeOptions {
18
- /** Show the result value below completion status */
19
- showResult?: boolean
17
+ /** Show the result value below completion status */
18
+ showResult?: boolean
20
19
  }
21
20
 
22
21
  // Bridges Effect execution with React rendering
23
22
  class VisualizerState {
24
- status: VisualizerStatus = "pending"
25
- spinnerIndex = 0
26
- elapsedMs = 0
27
- errorSummary?: string
28
- result?: unknown
29
- showResult = false
30
- private listeners = new Set<() => void>()
31
-
32
- update(
33
- patch: Partial<
34
- Pick<VisualizerState, "status" | "spinnerIndex" | "elapsedMs" | "errorSummary" | "result" | "showResult">
35
- >,
36
- ) {
37
- Object.assign(this, patch)
38
- this.listeners.forEach((l) => l())
39
- }
40
-
41
- subscribe(listener: () => void): () => void {
42
- this.listeners.add(listener)
43
- return () => this.listeners.delete(listener)
44
- }
23
+ status: VisualizerStatus = "pending"
24
+ spinnerIndex = 0
25
+ elapsedMs = 0
26
+ errorSummary?: string
27
+ result?: unknown
28
+ showResult = false
29
+ private listeners = new Set<() => void>()
30
+
31
+ update(
32
+ patch: Partial<
33
+ Pick<VisualizerState, "status" | "spinnerIndex" | "elapsedMs" | "errorSummary" | "result" | "showResult">
34
+ >,
35
+ ) {
36
+ Object.assign(this, patch)
37
+ this.listeners.forEach((l) => l())
38
+ }
39
+
40
+ subscribe(listener: () => void): () => void {
41
+ this.listeners.add(listener)
42
+ return () => this.listeners.delete(listener)
43
+ }
45
44
  }
46
45
 
47
46
  const formatDuration = (ms: number): string => Duration.format(Duration.millis(Math.max(0, Math.round(ms))))
48
47
 
49
48
  const formatResult = (value: unknown): string => {
50
- if (value === undefined) return "undefined"
51
- if (value === null) return "null"
52
- if (typeof value === "string") return JSON.stringify(value)
53
- if (typeof value === "number" || typeof value === "boolean") return String(value)
54
- try {
55
- return JSON.stringify(value)
56
- } catch {
57
- return String(value)
58
- }
49
+ if (value === undefined) return "undefined"
50
+ if (value === null) return "null"
51
+ if (typeof value === "string") return JSON.stringify(value)
52
+ if (typeof value === "number" || typeof value === "boolean") return String(value)
53
+ try {
54
+ return JSON.stringify(value)
55
+ } catch {
56
+ return String(value)
57
+ }
58
+ }
59
+
60
+ /** Type for Effect-style tagged errors */
61
+ interface TaggedError {
62
+ readonly _tag: string
63
+ readonly message?: string
59
64
  }
60
65
 
61
66
  const summarizeCause = (cause: Cause.Cause<unknown>): string => {
62
- const failure = Cause.failureOption(cause)
63
- if (Option.isSome(failure)) {
64
- const error = failure.value
65
- if (error && typeof error === "object" && "_tag" in error && "message" in error) {
66
- const message = String((error as any).message).trim()
67
- return message ? `${(error as any)._tag}: ${message}` : String((error as any)._tag)
68
- }
69
- if (error && typeof error === "object" && "message" in error) {
70
- return String((error as any).message)
71
- }
72
- return String(error)
73
- }
74
- const pretty = Cause.pretty(cause, { renderErrorCause: false })
75
- const firstLine = pretty.split("\n").find((line: string) => line.trim().length > 0)
76
- return firstLine ?? "Unknown failure"
67
+ const failure = Cause.failureOption(cause)
68
+ if (Option.isSome(failure)) {
69
+ const error = failure.value
70
+ if (error && typeof error === "object" && "_tag" in error && "message" in error) {
71
+ const tagged = error as TaggedError
72
+ const message = String(tagged.message ?? "").trim()
73
+ return message ? `${tagged._tag}: ${message}` : String(tagged._tag)
74
+ }
75
+ if (error && typeof error === "object" && "message" in error) {
76
+ return String((error as { message: unknown }).message)
77
+ }
78
+ return String(error)
79
+ }
80
+ const pretty = Cause.pretty(cause, { renderErrorCause: false })
81
+ const firstLine = pretty.split("\n").find((line: string) => line.trim().length > 0)
82
+ return firstLine ?? "Unknown failure"
77
83
  }
78
84
 
79
85
  function Visualizer({ state, label }: { state: VisualizerState; label: string }) {
80
- const [, forceUpdate] = useState(0)
81
-
82
- useEffect(() => {
83
- return state.subscribe(() => forceUpdate((n) => n + 1))
84
- }, [state])
85
-
86
- const elapsed = formatDuration(state.elapsedMs)
87
-
88
- if (state.status === "pending") {
89
- return (
90
- <vstack>
91
- <hstack spacing={1}>
92
- <text fg={Colors.brightCyan}>{SPINNER_FRAMES[state.spinnerIndex]}</text>
93
- <text bold fg={Colors.brightWhite}>
94
- {label}
95
- </text>
96
- </hstack>
97
- <text fg={Colors.gray(10)}>└ Running… {elapsed}</text>
98
- </vstack>
99
- )
100
- }
101
-
102
- if (state.status === "success") {
103
- const showingResult = state.showResult && state.result !== undefined
104
- return (
105
- <vstack>
106
- <hstack spacing={1}>
107
- <text bold fg={Colors.brightGreen}>
108
-
109
- </text>
110
- <text bold fg={Colors.brightGreen}>
111
- {label}
112
- </text>
113
- </hstack>
114
- {showingResult && <text fg={Colors.gray(20)}>├ {formatResult(state.result)}</text>}
115
- <text fg={Colors.green}>
116
- {showingResult ? "└" : "└"} Completed in {elapsed}
117
- </text>
118
- </vstack>
119
- )
120
- }
121
-
122
- // failure
123
- return (
124
- <vstack>
125
- <hstack spacing={1}>
126
- <text bold fg={Colors.brightRed}>
127
-
128
- </text>
129
- <text bold fg={Colors.brightRed}>
130
- {label}
131
- </text>
132
- </hstack>
133
- <text fg={Colors.red}>├ {state.errorSummary ?? "Failed"}</text>
134
- <text fg={Colors.red}>└ Failed after {elapsed}</text>
135
- </vstack>
136
- )
86
+ const [, forceUpdate] = useState(0)
87
+
88
+ useEffect(() => {
89
+ return state.subscribe(() => forceUpdate((n) => n + 1))
90
+ }, [state])
91
+
92
+ const elapsed = formatDuration(state.elapsedMs)
93
+
94
+ if (state.status === "pending") {
95
+ return (
96
+ <vstack>
97
+ <hstack spacing={1}>
98
+ <text fg={Colors.brightCyan}>{SPINNER_FRAMES[state.spinnerIndex]}</text>
99
+ <text bold fg={Colors.brightWhite}>
100
+ {label}
101
+ </text>
102
+ </hstack>
103
+ <text fg={Colors.gray(10)}>└ Running… {elapsed}</text>
104
+ </vstack>
105
+ )
106
+ }
107
+
108
+ if (state.status === "success") {
109
+ const showingResult = state.showResult && state.result !== undefined
110
+ return (
111
+ <vstack>
112
+ <hstack spacing={1}>
113
+ <text bold fg={Colors.brightGreen}>
114
+
115
+ </text>
116
+ <text bold fg={Colors.brightGreen}>
117
+ {label}
118
+ </text>
119
+ </hstack>
120
+ {showingResult && <text fg={Colors.gray(20)}>├ {formatResult(state.result)}</text>}
121
+ <text fg={Colors.green}>
122
+ {showingResult ? "└" : "└"} Completed in {elapsed}
123
+ </text>
124
+ </vstack>
125
+ )
126
+ }
127
+
128
+ // failure
129
+ return (
130
+ <vstack>
131
+ <hstack spacing={1}>
132
+ <text bold fg={Colors.brightRed}>
133
+
134
+ </text>
135
+ <text bold fg={Colors.brightRed}>
136
+ {label}
137
+ </text>
138
+ </hstack>
139
+ <text fg={Colors.red}>├ {state.errorSummary ?? "Failed"}</text>
140
+ <text fg={Colors.red}>└ Failed after {elapsed}</text>
141
+ </vstack>
142
+ )
137
143
  }
138
144
 
139
145
  // ============================================================================
140
- // InlineRenderer Service - manages terminal state across multiple visualize()
146
+ // TerminalState Service - manages terminal state across multiple visualize()
141
147
  // ============================================================================
142
148
 
143
- interface InlineRendererService {
144
- readonly stdout: NodeJS.WriteStream
145
- readonly stdin: NodeJS.ReadStream
149
+ interface TerminalStateService {
150
+ readonly stdout: NodeJS.WriteStream
151
+ readonly stdin: NodeJS.ReadStream
146
152
  }
147
153
 
148
154
  /**
149
155
  * Service that manages terminal state for inline rendering.
150
156
  * Hides cursor on acquire, shows cursor on release.
151
157
  */
152
- export class InlineRenderer extends Context.Tag("@effect-tui/react/InlineRenderer")<
153
- InlineRenderer,
154
- InlineRendererService
158
+ export class TerminalState extends Context.Tag("@effect-tui/react/TerminalState")<
159
+ TerminalState,
160
+ TerminalStateService
155
161
  >() {}
156
162
 
157
163
  /**
158
- * Layer that provides InlineRenderer service.
164
+ * Layer that provides TerminalState service.
159
165
  * Manages terminal state: hides cursor on start, restores on finalize.
160
166
  */
161
- export const InlineRendererLive: Layer.Layer<InlineRenderer> = Layer.scoped(
162
- InlineRenderer,
163
- Effect.gen(function* () {
164
- const stdout = process.stdout
165
- const stdin = process.stdin
166
-
167
- // Setup: hide cursor, enable raw mode
168
- stdout.write(ANSI.cursor.hide)
169
- if (stdin.isTTY && stdin.setRawMode) {
170
- stdin.setRawMode(true)
171
- stdin.resume()
172
- }
173
-
174
- // Teardown on scope close: show cursor, disable raw mode, pause stdin
175
- yield* Effect.addFinalizer(() =>
176
- Effect.sync(() => {
177
- stdout.write(ANSI.cursor.show)
178
- if (stdin.isTTY && stdin.setRawMode) {
179
- stdin.setRawMode(false)
180
- }
181
- // Pause stdin so Node can exit
182
- stdin.pause()
183
- }),
184
- )
185
-
186
- return { stdout, stdin }
187
- }),
167
+ export const TerminalStateLive: Layer.Layer<TerminalState> = Layer.scoped(
168
+ TerminalState,
169
+ Effect.gen(function* () {
170
+ const stdout = process.stdout
171
+ const stdin = process.stdin
172
+
173
+ // Setup: hide cursor, enable raw mode
174
+ stdout.write(ANSI.cursor.hide)
175
+ if (stdin.isTTY && stdin.setRawMode) {
176
+ stdin.setRawMode(true)
177
+ stdin.resume()
178
+ }
179
+
180
+ // Teardown on scope close: show cursor, disable raw mode, pause stdin
181
+ yield* Effect.addFinalizer(() =>
182
+ Effect.sync(() => {
183
+ stdout.write(ANSI.cursor.show)
184
+ if (stdin.isTTY && stdin.setRawMode) {
185
+ stdin.setRawMode(false)
186
+ }
187
+ // Pause stdin so Node can exit
188
+ stdin.pause()
189
+ }),
190
+ )
191
+
192
+ return { stdout, stdin }
193
+ }),
188
194
  )
189
195
 
190
196
  // ============================================================================
191
- // visualize() - uses InlineRenderer service
197
+ // visualize() - uses TerminalState service
192
198
  // ============================================================================
193
199
 
194
200
  /**
@@ -196,110 +202,89 @@ export const InlineRendererLive: Layer.Layer<InlineRenderer> = Layer.scoped(
196
202
  * Shows a spinner while running, then success/failure status.
197
203
  * Returns the effect's result or propagates its error.
198
204
  *
199
- * Requires InlineRenderer service (use InlineRendererLive layer).
205
+ * Requires TerminalState service (use TerminalStateLive layer).
200
206
  *
201
207
  * @example
202
208
  * ```ts
203
209
  * const program = Effect.gen(function* () {
204
210
  * const result = yield* visualize("Fetching data", fetchData)
205
211
  * yield* visualize("Processing", processData(result))
206
- * }).pipe(Effect.provide(InlineRendererLive))
212
+ * }).pipe(Effect.provide(TerminalStateLive))
207
213
  * ```
208
214
  */
209
215
  export const visualize = <A, E, R>(
210
- label: string,
211
- effect: Effect.Effect<A, E, R>,
212
- options?: VisualizeOptions,
213
- ): Effect.Effect<A, E, R | InlineRenderer> =>
214
- Effect.gen(function* () {
215
- const { stdout, stdin } = yield* InlineRenderer
216
-
217
- // Create renderer with skipTerminalSetup (Layer manages terminal state)
218
- const renderer = createRenderer({
219
- mode: "inline",
220
- stdout,
221
- stdin,
222
- skipTerminalSetup: true,
223
- })
224
- const root = createRoot(renderer)
225
-
226
- const state = new VisualizerState()
227
- state.showResult = options?.showResult ?? false
228
-
229
- // Mount React component
230
- root.render(<Visualizer state={state} label={label} />)
231
-
232
- // Spinner tick fiber
233
- const startTime = Date.now()
234
- const spinnerFiber = yield* Effect.fork(
235
- Effect.forever(
236
- Effect.gen(function* () {
237
- yield* Effect.sleep(SPIN_INTERVAL_MS)
238
- state.update({
239
- spinnerIndex: (state.spinnerIndex + 1) % SPINNER_FRAMES.length,
240
- })
241
- renderer.requestRender()
242
- }),
243
- ),
244
- )
245
-
246
- // High-frequency elapsed timer so duration display stays smooth
247
- const elapsedFiber = yield* Effect.fork(
248
- Effect.forever(
249
- Effect.gen(function* () {
250
- yield* Effect.sleep(ELAPSED_INTERVAL_MS)
251
- state.update({ elapsedMs: Date.now() - startTime })
252
- renderer.requestRender()
253
- }),
254
- ),
255
- )
256
-
257
- // Run the actual effect
258
- const exit = yield* Effect.exit(effect)
259
-
260
- // Stop spinner, update state to final
261
- yield* Fiber.interrupt(spinnerFiber)
262
- yield* Fiber.interrupt(elapsedFiber)
263
- const isSuccess = Exit.isSuccess(exit)
264
- state.update(
265
- isSuccess
266
- ? { status: "success", elapsedMs: Date.now() - startTime, result: exit.value }
267
- : { status: "failure", elapsedMs: Date.now() - startTime, errorSummary: summarizeCause(exit.cause) },
268
- )
269
- renderer.requestRender()
270
- renderer.flush() // Ensure final state is rendered
271
-
272
- // Wait for completion animation
273
- yield* Effect.sleep(COMPLETION_DELAY_MS)
274
-
275
- // Stop renderer (doesn't touch terminal state since skipTerminalSetup)
276
- renderer.stop()
277
-
278
- // Write newline to advance cursor past the output
279
- stdout.write("\n")
280
-
281
- // Return result or propagate failure
282
- if (Exit.isSuccess(exit)) return exit.value
283
- return yield* Effect.failCause(exit.cause)
284
- })
285
-
286
- // ============================================================================
287
- // Convenience: self-contained visualize that provides its own layer
288
- // ============================================================================
289
-
290
- /**
291
- * Self-contained visualize that manages its own terminal state.
292
- * Use this for single visualize() calls. For multiple sequential calls,
293
- * use visualize() with InlineRendererLive layer for better cursor handling.
294
- *
295
- * @example
296
- * ```ts
297
- * const result = yield* visualizeSingle("Fetching data", fetchData)
298
- * ```
299
- */
300
- export const visualizeSingle = <A, E, R>(
301
- label: string,
302
- effect: Effect.Effect<A, E, R>,
303
- options?: VisualizeOptions,
304
- ): Effect.Effect<A, E, R> =>
305
- Effect.scoped(visualize(label, effect, options).pipe(Effect.provide(InlineRendererLive))) as Effect.Effect<A, E, R>
216
+ label: string,
217
+ effect: Effect.Effect<A, E, R>,
218
+ options?: VisualizeOptions,
219
+ ): Effect.Effect<A, E, R | TerminalState> =>
220
+ Effect.gen(function* () {
221
+ const { stdout, stdin } = yield* TerminalState
222
+
223
+ // Create renderer with skipTerminalSetup (Layer manages terminal state)
224
+ const renderer = createRenderer({
225
+ mode: "inline",
226
+ stdout,
227
+ stdin,
228
+ skipTerminalSetup: true,
229
+ })
230
+ const root = createRoot(renderer)
231
+
232
+ const state = new VisualizerState()
233
+ state.showResult = options?.showResult ?? false
234
+
235
+ // Mount React component
236
+ root.render(<Visualizer state={state} label={label} />)
237
+
238
+ // Spinner tick fiber
239
+ const startTime = Date.now()
240
+ const spinnerFiber = yield* Effect.fork(
241
+ Effect.forever(
242
+ Effect.gen(function* () {
243
+ yield* Effect.sleep(SPIN_INTERVAL_MS)
244
+ state.update({
245
+ spinnerIndex: (state.spinnerIndex + 1) % SPINNER_FRAMES.length,
246
+ })
247
+ renderer.requestRender()
248
+ }),
249
+ ),
250
+ )
251
+
252
+ // High-frequency elapsed timer so duration display stays smooth
253
+ const elapsedFiber = yield* Effect.fork(
254
+ Effect.forever(
255
+ Effect.gen(function* () {
256
+ yield* Effect.sleep(ELAPSED_INTERVAL_MS)
257
+ state.update({ elapsedMs: Date.now() - startTime })
258
+ renderer.requestRender()
259
+ }),
260
+ ),
261
+ )
262
+
263
+ // Run the actual effect
264
+ const exit = yield* Effect.exit(effect)
265
+
266
+ // Stop spinner, update state to final
267
+ yield* Fiber.interrupt(spinnerFiber)
268
+ yield* Fiber.interrupt(elapsedFiber)
269
+ const isSuccess = Exit.isSuccess(exit)
270
+ state.update(
271
+ isSuccess
272
+ ? { status: "success", elapsedMs: Date.now() - startTime, result: exit.value }
273
+ : { status: "failure", elapsedMs: Date.now() - startTime, errorSummary: summarizeCause(exit.cause) },
274
+ )
275
+ renderer.requestRender()
276
+ renderer.flush() // Ensure final state is rendered
277
+
278
+ // Wait for completion animation
279
+ yield* Effect.sleep(COMPLETION_DELAY_MS)
280
+
281
+ // Stop renderer (doesn't touch terminal state since skipTerminalSetup)
282
+ renderer.stop()
283
+
284
+ // Write newline to advance cursor past the output
285
+ stdout.write("\n")
286
+
287
+ // Return result or propagate failure
288
+ if (Exit.isSuccess(exit)) return exit.value
289
+ return yield* Effect.failCause(exit.cause)
290
+ })
@@ -1,47 +0,0 @@
1
- /**
2
- * Output helpers for rendering CellBuffer to ANSI strings.
3
- * Extracts common logic from renderer.ts rendering paths.
4
- */
5
- import type { CellBuffer, Palette } from "@effect-tui/core";
6
- /**
7
- * Emit a row of cells as an ANSI string with run-length SGR encoding.
8
- * Handles wide characters (cellWidth=0 continuations) and style changes.
9
- *
10
- * @param buffer - The cell buffer to read from
11
- * @param palette - Palette for SGR code generation
12
- * @param y - Row index
13
- * @param width - Terminal width
14
- * @param startX - Start column (default 0)
15
- * @param endX - End column exclusive (default width)
16
- * @returns ANSI string for the row (no cursor positioning, no trailing reset)
17
- */
18
- export declare function emitRow(buffer: CellBuffer, palette: Palette, y: number, width: number, startX?: number, endX?: number): {
19
- output: string;
20
- lastStyle: number;
21
- };
22
- /**
23
- * Emit a row and reset style if needed.
24
- */
25
- export declare function emitRowWithReset(buffer: CellBuffer, palette: Palette, y: number, width: number, startX?: number, endX?: number): string;
26
- /**
27
- * Check if a row changed between two buffers.
28
- */
29
- export declare function rowChanged(prev: CellBuffer, next: CellBuffer, y: number, width: number): boolean;
30
- /**
31
- * Find the rightmost column with content (non-space or styled).
32
- * Returns 0 if row is empty.
33
- */
34
- export declare function rowContentWidth(buffer: CellBuffer, y: number, width: number): number;
35
- /**
36
- * Find the change window between two buffers for a row.
37
- * Returns the leftmost and rightmost changed columns, or null if no changes.
38
- */
39
- export declare function findChangeWindow(prev: CellBuffer, next: CellBuffer, y: number, width: number): {
40
- left: number;
41
- right: number;
42
- } | null;
43
- /**
44
- * Find the last row with content in a buffer.
45
- */
46
- export declare function contentHeight(buffer: CellBuffer, width: number, height: number): number;
47
- //# sourceMappingURL=output.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/output.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAE3D;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,CACtB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,OAAO,EAChB,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,SAAI,EACV,IAAI,SAAQ,GACV;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CA6BvC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC/B,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,OAAO,EAChB,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,SAAI,EACV,IAAI,SAAQ,GACV,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAShG;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAYpF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,UAAU,EAChB,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA2BxC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAUvF"}