@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,46 @@
1
+ /**
2
+ * Overlay compound component - SwiftUI-style overlay layout
3
+ *
4
+ * Unlike ZStack (which sizes to MAX of all children), Overlay:
5
+ * 1. First child is the "base" - determines the container size
6
+ * 2. Overlay.Item children are overlaid without affecting measurement
7
+ * 3. Each Overlay.Item specifies its own alignment
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * <Overlay>
12
+ * <MainContent />
13
+ * <Overlay.Item alignment={{ v: "top" }}>
14
+ * <Toast />
15
+ * </Overlay.Item>
16
+ * <Overlay.Item alignment={{ v: "bottom" }}>
17
+ * <Console />
18
+ * </Overlay.Item>
19
+ * </Overlay>
20
+ * ```
21
+ */
22
+ import type { ReactNode } from "react";
23
+ type HAlign = "left" | "center" | "right";
24
+ type VAlign = "top" | "center" | "bottom";
25
+ export interface OverlayProps {
26
+ children?: ReactNode;
27
+ /** Fixed width */
28
+ width?: number;
29
+ /** Fixed height */
30
+ height?: number;
31
+ }
32
+ export interface OverlayItemProps {
33
+ /** Alignment within the overlay container */
34
+ alignment?: {
35
+ h?: HAlign;
36
+ v?: VAlign;
37
+ };
38
+ children?: ReactNode;
39
+ }
40
+ declare function OverlayRoot({ children, ...props }: OverlayProps): ReactNode;
41
+ declare function OverlayItem({ children, alignment, ...props }: OverlayItemProps): ReactNode;
42
+ export declare const Overlay: typeof OverlayRoot & {
43
+ Item: typeof OverlayItem;
44
+ };
45
+ export {};
46
+ //# sourceMappingURL=Overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Overlay.d.ts","sourceRoot":"","sources":["../../../src/components/Overlay.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,KAAK,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;AACzC,KAAK,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEzC,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,gBAAgB;IAChC,6CAA6C;IAC7C,SAAS,CAAC,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACtC,QAAQ,CAAC,EAAE,SAAS,CAAA;CACpB;AAED,iBAAS,WAAW,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,YAAY,aAExD;AAED,iBAAS,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,aAMvE;AAED,eAAO,MAAM,OAAO;;CAElB,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "@effect-tui/react/jsx-runtime";
2
+ function OverlayRoot({ children, ...props }) {
3
+ return _jsx("overlay", { ...props, children: children });
4
+ }
5
+ function OverlayItem({ children, alignment, ...props }) {
6
+ return (_jsx("overlayItem", { alignment: alignment, ...props, children: children }));
7
+ }
8
+ export const Overlay = Object.assign(OverlayRoot, {
9
+ Item: OverlayItem,
10
+ });
11
+ //# sourceMappingURL=Overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Overlay.js","sourceRoot":"","sources":["../../../src/components/Overlay.tsx"],"names":[],"mappings":";AAyCA,SAAS,WAAW,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAgB;IACxD,OAAO,qBAAa,KAAK,YAAG,QAAQ,GAAW,CAAA;AAChD,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAoB;IACvE,OAAO,CACN,sBAAa,SAAS,EAAE,SAAS,KAAM,KAAK,YAC1C,QAAQ,GACI,CACd,CAAA;AACF,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE;IACjD,IAAI,EAAE,WAAW;CACjB,CAAC,CAAA"}
@@ -0,0 +1,44 @@
1
+ import { type ReactNode } from "react";
2
+ export interface StaticProps<T> {
3
+ /**
4
+ * Array of items to render. Items should only be appended, not removed or modified.
5
+ * Each new item is rendered once and then "printed" to scrollback.
6
+ */
7
+ items: T[];
8
+ /**
9
+ * Render function for each item. Must return a keyed element.
10
+ */
11
+ children: (item: T, index: number) => ReactNode;
12
+ }
13
+ /**
14
+ * Renders items to terminal scrollback (inline mode only).
15
+ *
16
+ * Static content is printed once and scrolls up as new items are added,
17
+ * while dynamic content below it re-renders in place. Great for:
18
+ * - Build tools (completed steps scroll up, spinner at bottom)
19
+ * - Test runners (passed tests scroll up, current test at bottom)
20
+ * - Log viewers (history accumulates, live tail at bottom)
21
+ *
22
+ * **Important:** Static must be used at the root level of your component tree,
23
+ * as a direct child of a Fragment or the root element. Do not nest it inside
24
+ * other containers like `<box>`, `<scroll>`, or `<zstack>`.
25
+ *
26
+ * Items are append-only: removing or modifying items won't update printed output.
27
+ *
28
+ * @example
29
+ * ```tsx
30
+ * const [logs, setLogs] = useState<string[]>([])
31
+ *
32
+ * // Correct: Static at root level
33
+ * return (
34
+ * <>
35
+ * <Static items={logs}>
36
+ * {(log, i) => <text key={i}>{log}</text>}
37
+ * </Static>
38
+ * <text>Live status: {status}</text>
39
+ * </>
40
+ * )
41
+ * ```
42
+ */
43
+ export declare function Static<T>({ items, children }: StaticProps<T>): ReactNode;
44
+ //# sourceMappingURL=Static.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Static.d.ts","sourceRoot":"","sources":["../../../src/components/Static.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAE1E,MAAM,WAAW,WAAW,CAAC,CAAC;IAC7B;;;OAGG;IACH,KAAK,EAAE,CAAC,EAAE,CAAA;IACV;;OAEG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAA;CAC/C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,aAuB5D"}
@@ -0,0 +1,53 @@
1
+ import { jsx as _jsx } from "@effect-tui/react/jsx-runtime";
2
+ import { useState, useMemo, useLayoutEffect } from "react";
3
+ /**
4
+ * Renders items to terminal scrollback (inline mode only).
5
+ *
6
+ * Static content is printed once and scrolls up as new items are added,
7
+ * while dynamic content below it re-renders in place. Great for:
8
+ * - Build tools (completed steps scroll up, spinner at bottom)
9
+ * - Test runners (passed tests scroll up, current test at bottom)
10
+ * - Log viewers (history accumulates, live tail at bottom)
11
+ *
12
+ * **Important:** Static must be used at the root level of your component tree,
13
+ * as a direct child of a Fragment or the root element. Do not nest it inside
14
+ * other containers like `<box>`, `<scroll>`, or `<zstack>`.
15
+ *
16
+ * Items are append-only: removing or modifying items won't update printed output.
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * const [logs, setLogs] = useState<string[]>([])
21
+ *
22
+ * // Correct: Static at root level
23
+ * return (
24
+ * <>
25
+ * <Static items={logs}>
26
+ * {(log, i) => <text key={i}>{log}</text>}
27
+ * </Static>
28
+ * <text>Live status: {status}</text>
29
+ * </>
30
+ * )
31
+ * ```
32
+ */
33
+ export function Static({ items, children }) {
34
+ // Track how many items we've already "printed"
35
+ const [printedIndex, setPrintedIndex] = useState(0);
36
+ // Only render new items (items we haven't printed yet)
37
+ const newItems = useMemo(() => items.slice(printedIndex), [items, printedIndex]);
38
+ // After rendering, mark all items as printed
39
+ // useLayoutEffect ensures this happens before paint, so items unmount quickly
40
+ useLayoutEffect(() => {
41
+ if (items.length > printedIndex) {
42
+ setPrintedIndex(items.length);
43
+ }
44
+ }, [items.length, printedIndex]);
45
+ // If no new items, render nothing
46
+ if (newItems.length === 0) {
47
+ return null;
48
+ }
49
+ // Render new items in a vstack with the __static marker
50
+ // The reconciler will detect this and handle it specially
51
+ return _jsx("vstack", { __static: true, children: newItems.map((item, i) => children(item, printedIndex + i)) });
52
+ }
53
+ //# sourceMappingURL=Static.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Static.js","sourceRoot":"","sources":["../../../src/components/Static.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAkB,MAAM,OAAO,CAAA;AAc1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,MAAM,CAAI,EAAE,KAAK,EAAE,QAAQ,EAAkB;IAC5D,+CAA+C;IAC/C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAEnD,uDAAuD;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAA;IAEhF,6CAA6C;IAC7C,8EAA8E;IAC9E,eAAe,CAAC,GAAG,EAAE;QACpB,IAAI,KAAK,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;YACjC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC9B,CAAC;IACF,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAA;IAEhC,kCAAkC;IAClC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,wDAAwD;IACxD,0DAA0D;IAC1D,OAAO,iBAAQ,QAAQ,kBAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC,GAAU,CAAA;AAC/F,CAAC"}
@@ -0,0 +1,55 @@
1
+ import { type Color } from "@effect-tui/core";
2
+ export interface TextInputProps {
3
+ /** Current input value (controlled) */
4
+ value: string;
5
+ /** Called when value changes */
6
+ onChange: (value: string) => void;
7
+ /** Placeholder text shown when value is empty */
8
+ placeholder?: string;
9
+ /** Width of the input (default: fill available) */
10
+ width?: number;
11
+ /** Foreground color for text */
12
+ fg?: Color;
13
+ /** Background color */
14
+ bg?: Color;
15
+ /** Cursor foreground color (for block style) */
16
+ cursorFg?: Color;
17
+ /** Cursor background color (for block style) or underline color (for underline style) */
18
+ cursorBg?: Color;
19
+ /** Placeholder foreground color */
20
+ placeholderFg?: Color;
21
+ /** Called when Enter is pressed */
22
+ onSubmit?: (value: string) => void;
23
+ /** Called when Escape is pressed */
24
+ onCancel?: () => void;
25
+ /** Whether the input is focused and accepts input */
26
+ focused?: boolean;
27
+ /** Show cursor even when not focused */
28
+ showCursor?: boolean;
29
+ /** Cursor style: block (inverted colors) or underline */
30
+ cursorStyle?: "block" | "underline";
31
+ }
32
+ /**
33
+ * A controlled text input component for terminal UIs.
34
+ *
35
+ * Features:
36
+ * - Arrow key navigation (Home/End for line start/end)
37
+ * - Word-by-word navigation with Option/Alt+Arrow
38
+ * - Backspace/Delete with word variants (Option+Backspace, Ctrl+W)
39
+ * - Emacs keybindings: Ctrl+A/E (start/end), Ctrl+B/F (back/forward char),
40
+ * Ctrl+H/D (delete back/forward char), Ctrl+K/U (kill to end/start),
41
+ * Ctrl+W (delete word back), Ctrl+T (transpose), Ctrl+Y (yank)
42
+ * - Kill ring for Ctrl+Y (yank last killed text)
43
+ *
44
+ * @example
45
+ * ```tsx
46
+ * const [text, setText] = useState("")
47
+ * <TextInput
48
+ * value={text}
49
+ * onChange={setText}
50
+ * placeholder="Type here..."
51
+ * />
52
+ * ```
53
+ */
54
+ export declare function TextInput({ value, onChange, placeholder, width, fg, bg, cursorFg, cursorBg, placeholderFg, onSubmit, onCancel, focused, showCursor, cursorStyle, }: TextInputProps): import("react").ReactNode;
55
+ //# sourceMappingURL=TextInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextInput.d.ts","sourceRoot":"","sources":["../../../src/components/TextInput.tsx"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,KAAK,EAAgB,MAAM,kBAAkB,CAAA;AAgBnE,MAAM,WAAW,cAAc;IAC9B,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAA;IACb,gCAAgC;IAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gCAAgC;IAChC,EAAE,CAAC,EAAE,KAAK,CAAA;IACV,uBAAuB;IACvB,EAAE,CAAC,EAAE,KAAK,CAAA;IACV,gDAAgD;IAChD,QAAQ,CAAC,EAAE,KAAK,CAAA;IAChB,yFAAyF;IACzF,QAAQ,CAAC,EAAE,KAAK,CAAA;IAChB,mCAAmC;IACnC,aAAa,CAAC,EAAE,KAAK,CAAA;IACrB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,wCAAwC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,yDAAyD;IACzD,WAAW,CAAC,EAAE,OAAO,GAAG,WAAW,CAAA;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,SAAS,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,WAAgB,EAChB,KAAK,EACL,EAAuB,EACvB,EAAE,EACF,QAAuB,EACvB,QAA6B,EAC7B,aAA+B,EAC/B,QAAQ,EACR,QAAQ,EACR,OAAc,EACd,UAAiB,EACjB,WAAqB,GACrB,EAAE,cAAc,6BA8QhB"}
@@ -0,0 +1,277 @@
1
+ import { jsx as _jsx } from "@effect-tui/react/jsx-runtime";
2
+ import { useState, useCallback, useEffect } from "react";
3
+ import { Colors, displayWidth } from "@effect-tui/core";
4
+ import { useKeyboard } from "../hooks/use-keyboard.js";
5
+ import { deleteWordBackward, killToEnd, killToStart, deleteCharForward, deleteCharBackward, transposeChars, insertText, matchPrevWord, matchNextWord, } from "./text-editing.js";
6
+ /**
7
+ * A controlled text input component for terminal UIs.
8
+ *
9
+ * Features:
10
+ * - Arrow key navigation (Home/End for line start/end)
11
+ * - Word-by-word navigation with Option/Alt+Arrow
12
+ * - Backspace/Delete with word variants (Option+Backspace, Ctrl+W)
13
+ * - Emacs keybindings: Ctrl+A/E (start/end), Ctrl+B/F (back/forward char),
14
+ * Ctrl+H/D (delete back/forward char), Ctrl+K/U (kill to end/start),
15
+ * Ctrl+W (delete word back), Ctrl+T (transpose), Ctrl+Y (yank)
16
+ * - Kill ring for Ctrl+Y (yank last killed text)
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * const [text, setText] = useState("")
21
+ * <TextInput
22
+ * value={text}
23
+ * onChange={setText}
24
+ * placeholder="Type here..."
25
+ * />
26
+ * ```
27
+ */
28
+ export function TextInput({ value, onChange, placeholder = "", width, fg = Colors.brightWhite, bg, cursorFg = Colors.black, cursorBg = Colors.brightWhite, placeholderFg = Colors.gray(10), onSubmit, onCancel, focused = true, showCursor = true, cursorStyle = "block", }) {
29
+ const [cursorPos, setCursorPos] = useState(value.length);
30
+ const [killRing, setKillRing] = useState("");
31
+ const [scrollOffset, setScrollOffset] = useState(0);
32
+ // Keep cursor in bounds when value changes externally
33
+ useEffect(() => {
34
+ if (cursorPos > value.length) {
35
+ setCursorPos(value.length);
36
+ }
37
+ }, [value, cursorPos]);
38
+ const handleKey = useCallback((key) => {
39
+ if (!focused)
40
+ return;
41
+ const state = { text: value, cursor: cursorPos, killRing };
42
+ // Helper to apply an edit result
43
+ const applyEdit = (result) => {
44
+ if (result.changed) {
45
+ onChange(result.state.text);
46
+ setCursorPos(result.state.cursor);
47
+ if (result.state.killRing !== killRing) {
48
+ setKillRing(result.state.killRing);
49
+ }
50
+ }
51
+ };
52
+ // Helper for word boundary movement
53
+ const moveToPrevWord = () => {
54
+ const beforeCursor = value.slice(0, cursorPos);
55
+ const match = matchPrevWord(beforeCursor);
56
+ setCursorPos(match ? cursorPos - match.length : 0);
57
+ };
58
+ const moveToNextWord = () => {
59
+ const afterCursor = value.slice(cursorPos);
60
+ const match = matchNextWord(afterCursor);
61
+ setCursorPos(match ? cursorPos + match.length : value.length);
62
+ };
63
+ switch (key.name) {
64
+ case "left":
65
+ if (key.meta) {
66
+ moveToPrevWord();
67
+ }
68
+ else {
69
+ setCursorPos(Math.max(0, cursorPos - 1));
70
+ }
71
+ break;
72
+ case "right":
73
+ if (key.meta) {
74
+ moveToNextWord();
75
+ }
76
+ else {
77
+ setCursorPos(Math.min(value.length, cursorPos + 1));
78
+ }
79
+ break;
80
+ case "home":
81
+ setCursorPos(0);
82
+ break;
83
+ case "end":
84
+ setCursorPos(value.length);
85
+ break;
86
+ case "backspace":
87
+ if (key.meta) {
88
+ // Option+Backspace: Delete to previous word boundary
89
+ const beforeCursor = value.slice(0, cursorPos);
90
+ const match = matchPrevWord(beforeCursor);
91
+ if (match) {
92
+ const newPos = cursorPos - match.length;
93
+ onChange(value.slice(0, newPos) + value.slice(cursorPos));
94
+ setCursorPos(newPos);
95
+ }
96
+ else if (cursorPos > 0) {
97
+ onChange(value.slice(cursorPos));
98
+ setCursorPos(0);
99
+ }
100
+ }
101
+ else {
102
+ applyEdit(deleteCharBackward(state));
103
+ }
104
+ break;
105
+ case "delete":
106
+ if (key.meta) {
107
+ // Option+Delete: Delete to next word boundary
108
+ const afterCursor = value.slice(cursorPos);
109
+ const match = matchNextWord(afterCursor);
110
+ if (match) {
111
+ onChange(value.slice(0, cursorPos) + value.slice(cursorPos + match.length));
112
+ }
113
+ else if (cursorPos < value.length) {
114
+ onChange(value.slice(0, cursorPos));
115
+ }
116
+ }
117
+ else {
118
+ applyEdit(deleteCharForward(state));
119
+ }
120
+ break;
121
+ case "enter":
122
+ onSubmit?.(value);
123
+ break;
124
+ case "escape":
125
+ onCancel?.();
126
+ break;
127
+ case "char":
128
+ case "space":
129
+ if (key.ctrl && key.text) {
130
+ // Emacs-style keybindings
131
+ switch (key.text) {
132
+ case "a":
133
+ setCursorPos(0);
134
+ break;
135
+ case "e":
136
+ setCursorPos(value.length);
137
+ break;
138
+ case "b":
139
+ setCursorPos(Math.max(0, cursorPos - 1));
140
+ break;
141
+ case "f":
142
+ setCursorPos(Math.min(value.length, cursorPos + 1));
143
+ break;
144
+ case "d":
145
+ applyEdit(deleteCharForward(state));
146
+ break;
147
+ case "h":
148
+ applyEdit(deleteCharBackward(state));
149
+ break;
150
+ case "k":
151
+ applyEdit(killToEnd(state));
152
+ break;
153
+ case "u":
154
+ applyEdit(killToStart(state));
155
+ break;
156
+ case "w":
157
+ applyEdit(deleteWordBackward(state));
158
+ break;
159
+ case "t":
160
+ applyEdit(transposeChars(state));
161
+ break;
162
+ case "y":
163
+ applyEdit(insertText(state, killRing));
164
+ break;
165
+ }
166
+ }
167
+ else if (key.text && !key.meta) {
168
+ applyEdit(insertText(state, key.text));
169
+ }
170
+ break;
171
+ }
172
+ }, [value, cursorPos, focused, onChange, onSubmit, onCancel, killRing]);
173
+ useKeyboard(handleKey, { phase: "any" });
174
+ const draw = useCallback((ctx) => {
175
+ const displayText = value || placeholder;
176
+ const isPlaceholder = !value;
177
+ const textColor = isPlaceholder ? placeholderFg : fg;
178
+ const maxLen = width ?? ctx.width;
179
+ // Clear the line with background color
180
+ if (bg !== undefined) {
181
+ ctx.fill(0, 0, ctx.width, 1, " ", { bg });
182
+ }
183
+ // Calculate scroll offset to keep cursor visible
184
+ let effectiveScrollOffset = scrollOffset;
185
+ // Compute character positions (for variable-width chars)
186
+ const charPositions = [];
187
+ let totalWidth = 0;
188
+ for (let i = 0; i < value.length; i++) {
189
+ charPositions.push(totalWidth);
190
+ totalWidth += displayWidth(value[i]);
191
+ }
192
+ charPositions.push(totalWidth); // Position after last char (for cursor at end)
193
+ if (!isPlaceholder) {
194
+ const cursorX = charPositions[cursorPos] ?? totalWidth;
195
+ // Scroll right if cursor is past visible area
196
+ if (cursorX >= effectiveScrollOffset + maxLen) {
197
+ effectiveScrollOffset = cursorX - maxLen + 1;
198
+ }
199
+ // Scroll left if cursor is before visible area
200
+ if (cursorX < effectiveScrollOffset) {
201
+ effectiveScrollOffset = cursorX;
202
+ }
203
+ // Update scroll state if changed
204
+ if (effectiveScrollOffset !== scrollOffset) {
205
+ setScrollOffset(effectiveScrollOffset);
206
+ }
207
+ }
208
+ else {
209
+ effectiveScrollOffset = 0;
210
+ }
211
+ // Draw text starting from scroll offset
212
+ let x = 0;
213
+ for (let i = 0; i < displayText.length && x < maxLen; i++) {
214
+ const ch = displayText[i];
215
+ const charWidth = displayWidth(ch);
216
+ const charX = isPlaceholder ? x : charPositions[i] - effectiveScrollOffset;
217
+ // Skip characters before visible area
218
+ if (!isPlaceholder && charPositions[i] + charWidth <= effectiveScrollOffset) {
219
+ continue;
220
+ }
221
+ // Stop if we're past the visible area
222
+ if (charX >= maxLen)
223
+ break;
224
+ // Draw cursor at cursor position when focused
225
+ const isCursor = !isPlaceholder && i === cursorPos && focused && showCursor;
226
+ if (isCursor) {
227
+ if (cursorStyle === "underline") {
228
+ ctx.text(charX, 0, ch, { fg: cursorBg, bg, underline: true });
229
+ }
230
+ else {
231
+ ctx.text(charX, 0, ch, { fg: cursorFg, bg: cursorBg });
232
+ }
233
+ }
234
+ else {
235
+ ctx.text(charX, 0, ch, { fg: textColor, bg });
236
+ }
237
+ x = charX + charWidth;
238
+ }
239
+ // Draw cursor at end if cursor is at end of text
240
+ if (!isPlaceholder && cursorPos >= value.length && focused && showCursor) {
241
+ const cursorX = (charPositions[cursorPos] ?? totalWidth) - effectiveScrollOffset;
242
+ if (cursorX >= 0 && cursorX < maxLen) {
243
+ if (cursorStyle === "underline") {
244
+ ctx.text(cursorX, 0, "_", { fg: cursorBg, bg });
245
+ }
246
+ else {
247
+ ctx.text(cursorX, 0, " ", { fg: cursorFg, bg: cursorBg });
248
+ }
249
+ }
250
+ }
251
+ // If placeholder and focused, show cursor at start
252
+ if (isPlaceholder && focused && showCursor) {
253
+ if (cursorStyle === "underline") {
254
+ ctx.text(0, 0, placeholder[0] || "_", { fg: cursorBg, bg, underline: placeholder.length > 0 });
255
+ }
256
+ else {
257
+ ctx.text(0, 0, placeholder[0] || " ", { fg: cursorFg, bg: cursorBg });
258
+ }
259
+ }
260
+ }, [
261
+ value,
262
+ placeholder,
263
+ cursorPos,
264
+ focused,
265
+ showCursor,
266
+ fg,
267
+ bg,
268
+ cursorFg,
269
+ cursorBg,
270
+ placeholderFg,
271
+ width,
272
+ cursorStyle,
273
+ scrollOffset,
274
+ ]);
275
+ return _jsx("canvas", { draw: draw, width: width, height: 1 });
276
+ }
277
+ //# sourceMappingURL=TextInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextInput.js","sourceRoot":"","sources":["../../../src/components/TextInput.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { TextInput, type TextInputProps } from "./TextInput.js";
2
+ export { MultilineTextInput, type MultilineTextInputProps } from "./MultilineTextInput.js";
3
+ export { Markdown, type MarkdownProps, type MarkdownTheme } from "./Markdown.js";
4
+ export { Static, type StaticProps } from "./Static.js";
5
+ export { Divider, type DividerProps } from "./Divider.js";
6
+ export { Overlay, type OverlayProps, type OverlayItemProps } from "./Overlay.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AAC1F,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAChF,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,7 @@
1
+ export { TextInput } from "./TextInput.js";
2
+ export { MultilineTextInput } from "./MultilineTextInput.js";
3
+ export { Markdown } from "./Markdown.js";
4
+ export { Static } from "./Static.js";
5
+ export { Divider } from "./Divider.js";
6
+ export { Overlay } from "./Overlay.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,kBAAkB,EAAgC,MAAM,yBAAyB,CAAA;AAC1F,OAAO,EAAE,QAAQ,EAA0C,MAAM,eAAe,CAAA;AAChF,OAAO,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAA;AACtD,OAAO,EAAE,OAAO,EAAqB,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,OAAO,EAA4C,MAAM,cAAc,CAAA"}
@@ -0,0 +1,62 @@
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
+ /** Single-line text state */
7
+ export interface TextState {
8
+ text: string;
9
+ cursor: number;
10
+ killRing: string;
11
+ }
12
+ /** Multi-line text state */
13
+ export interface MultilineState {
14
+ lines: string[];
15
+ cursor: {
16
+ row: number;
17
+ col: number;
18
+ };
19
+ killRing: string;
20
+ }
21
+ /** Result of an edit operation */
22
+ export interface EditResult<T> {
23
+ state: T;
24
+ changed: boolean;
25
+ }
26
+ /** Match the previous word (and trailing whitespace) or whitespace-only chunk. */
27
+ export declare function matchPrevWord(beforeCursor: string): string | null;
28
+ /** Match the next word (including leading whitespace). */
29
+ export declare function matchNextWord(afterCursor: string): string | null;
30
+ /** Delete word backward */
31
+ export declare function deleteWordBackward(state: TextState): EditResult<TextState>;
32
+ /** Kill to end of line */
33
+ export declare function killToEnd(state: TextState): EditResult<TextState>;
34
+ /** Kill to start of line */
35
+ export declare function killToStart(state: TextState): EditResult<TextState>;
36
+ /** Delete character at cursor */
37
+ export declare function deleteCharForward(state: TextState): EditResult<TextState>;
38
+ /** Delete character before cursor */
39
+ export declare function deleteCharBackward(state: TextState): EditResult<TextState>;
40
+ /** Transpose characters before cursor */
41
+ export declare function transposeChars(state: TextState): EditResult<TextState>;
42
+ /** Insert text at cursor (yank) */
43
+ export declare function insertText(state: TextState, toInsert: string): EditResult<TextState>;
44
+ /** Convert grapheme column to character index in a line */
45
+ export declare function graphemeColToCharIdx(line: string, col: number): number;
46
+ /** Convert character index to grapheme column */
47
+ export declare function charIdxToGraphemeCol(line: string, charIdx: number): number;
48
+ /** Delete word backward in multiline (crosses line boundaries) */
49
+ export declare function deleteWordBackwardMultiline(state: MultilineState): EditResult<MultilineState>;
50
+ /** Kill to end of line in multiline */
51
+ export declare function killToEndMultiline(state: MultilineState): EditResult<MultilineState>;
52
+ /** Kill to start of line in multiline */
53
+ export declare function killToStartMultiline(state: MultilineState): EditResult<MultilineState>;
54
+ /** Transpose characters in multiline */
55
+ export declare function transposeCharsMultiline(state: MultilineState): EditResult<MultilineState>;
56
+ /** Delete character at cursor in multiline (joins lines if at end) */
57
+ export declare function deleteCharForwardMultiline(state: MultilineState): EditResult<MultilineState>;
58
+ /** Delete character before cursor in multiline (joins with previous line if at start) */
59
+ export declare function deleteCharBackwardMultiline(state: MultilineState): EditResult<MultilineState>;
60
+ /** Insert text at cursor in multiline (handles newlines) */
61
+ export declare function insertTextMultiline(state: MultilineState, toInsert: string): EditResult<MultilineState>;
62
+ //# sourceMappingURL=text-editing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-editing.d.ts","sourceRoot":"","sources":["../../../src/components/text-editing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,6BAA6B;AAC7B,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;CAChB;AAED,4BAA4B;AAC5B,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC,QAAQ,EAAE,MAAM,CAAA;CAChB;AAED,kCAAkC;AAClC,MAAM,WAAW,UAAU,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAA;IACR,OAAO,EAAE,OAAO,CAAA;CAChB;AAMD,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEjE;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEhE;AAMD,2BAA2B;AAC3B,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAoB1E;AAED,0BAA0B;AAC1B,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAYjE;AAED,4BAA4B;AAC5B,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAYnE;AAED,iCAAiC;AACjC,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAWzE;AAED,qCAAqC;AACrC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAW1E;AAED,yCAAyC;AACzC,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAsBtE;AAED,mCAAmC;AACnC,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAWpF;AAMD,2DAA2D;AAC3D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGtE;AAED,iDAAiD;AACjD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,kEAAkE;AAClE,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC,CAoE7F;AAED,uCAAuC;AACvC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC,CA0BpF;AAED,yCAAyC;AACzC,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC,CAsBtF;AAED,wCAAwC;AACxC,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC,CAgCzF;AAED,sEAAsE;AACtE,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC,CA4B5F;AAED,yFAAyF;AACzF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC,CAqC7F;AAED,4DAA4D;AAC5D,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,CA8CvG"}