@effect-tui/react 0.1.0-alpha.1

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 (277) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +138 -0
  3. package/dist/jsx-dev-runtime.d.ts +3 -0
  4. package/dist/jsx-dev-runtime.d.ts.map +1 -0
  5. package/dist/jsx-dev-runtime.js +3 -0
  6. package/dist/jsx-dev-runtime.js.map +1 -0
  7. package/dist/jsx-runtime.d.ts +47 -0
  8. package/dist/jsx-runtime.d.ts.map +1 -0
  9. package/dist/jsx-runtime.js +6 -0
  10. package/dist/jsx-runtime.js.map +1 -0
  11. package/dist/src/codeblock.d.ts +9 -0
  12. package/dist/src/codeblock.d.ts.map +1 -0
  13. package/dist/src/codeblock.js +24 -0
  14. package/dist/src/codeblock.js.map +1 -0
  15. package/dist/src/constants.d.ts +3 -0
  16. package/dist/src/constants.d.ts.map +1 -0
  17. package/dist/src/constants.js +3 -0
  18. package/dist/src/constants.js.map +1 -0
  19. package/dist/src/debug/DiagnosticsPanel.d.ts +7 -0
  20. package/dist/src/debug/DiagnosticsPanel.d.ts.map +1 -0
  21. package/dist/src/debug/DiagnosticsPanel.js +13 -0
  22. package/dist/src/debug/DiagnosticsPanel.js.map +1 -0
  23. package/dist/src/highlight.d.ts +20 -0
  24. package/dist/src/highlight.d.ts.map +1 -0
  25. package/dist/src/highlight.js +51 -0
  26. package/dist/src/highlight.js.map +1 -0
  27. package/dist/src/hooks/index.d.ts +4 -0
  28. package/dist/src/hooks/index.d.ts.map +1 -0
  29. package/dist/src/hooks/index.js +3 -0
  30. package/dist/src/hooks/index.js.map +1 -0
  31. package/dist/src/hooks/use-keyboard.d.ts +18 -0
  32. package/dist/src/hooks/use-keyboard.d.ts.map +1 -0
  33. package/dist/src/hooks/use-keyboard.js +26 -0
  34. package/dist/src/hooks/use-keyboard.js.map +1 -0
  35. package/dist/src/hooks/use-paste.d.ts +5 -0
  36. package/dist/src/hooks/use-paste.d.ts.map +1 -0
  37. package/dist/src/hooks/use-paste.js +14 -0
  38. package/dist/src/hooks/use-paste.js.map +1 -0
  39. package/dist/src/hooks/useFrameStats.d.ts +7 -0
  40. package/dist/src/hooks/useFrameStats.d.ts.map +1 -0
  41. package/dist/src/hooks/useFrameStats.js +28 -0
  42. package/dist/src/hooks/useFrameStats.js.map +1 -0
  43. package/dist/src/hosts/base.d.ts +22 -0
  44. package/dist/src/hosts/base.d.ts.map +1 -0
  45. package/dist/src/hosts/base.js +53 -0
  46. package/dist/src/hosts/base.js.map +1 -0
  47. package/dist/src/hosts/box.d.ts +26 -0
  48. package/dist/src/hosts/box.d.ts.map +1 -0
  49. package/dist/src/hosts/box.js +84 -0
  50. package/dist/src/hosts/box.js.map +1 -0
  51. package/dist/src/hosts/canvas.d.ts +48 -0
  52. package/dist/src/hosts/canvas.d.ts.map +1 -0
  53. package/dist/src/hosts/canvas.js +109 -0
  54. package/dist/src/hosts/canvas.js.map +1 -0
  55. package/dist/src/hosts/codeblock.d.ts +32 -0
  56. package/dist/src/hosts/codeblock.d.ts.map +1 -0
  57. package/dist/src/hosts/codeblock.js +118 -0
  58. package/dist/src/hosts/codeblock.js.map +1 -0
  59. package/dist/src/hosts/hstack.d.ts +18 -0
  60. package/dist/src/hosts/hstack.d.ts.map +1 -0
  61. package/dist/src/hosts/hstack.js +45 -0
  62. package/dist/src/hosts/hstack.js.map +1 -0
  63. package/dist/src/hosts/index.d.ts +16 -0
  64. package/dist/src/hosts/index.d.ts.map +1 -0
  65. package/dist/src/hosts/index.js +40 -0
  66. package/dist/src/hosts/index.js.map +1 -0
  67. package/dist/src/hosts/spacer.d.ts +19 -0
  68. package/dist/src/hosts/spacer.d.ts.map +1 -0
  69. package/dist/src/hosts/spacer.js +28 -0
  70. package/dist/src/hosts/spacer.js.map +1 -0
  71. package/dist/src/hosts/text.d.ts +43 -0
  72. package/dist/src/hosts/text.d.ts.map +1 -0
  73. package/dist/src/hosts/text.js +148 -0
  74. package/dist/src/hosts/text.js.map +1 -0
  75. package/dist/src/hosts/vstack.d.ts +18 -0
  76. package/dist/src/hosts/vstack.d.ts.map +1 -0
  77. package/dist/src/hosts/vstack.js +45 -0
  78. package/dist/src/hosts/vstack.js.map +1 -0
  79. package/dist/src/hosts/zstack.d.ts +20 -0
  80. package/dist/src/hosts/zstack.d.ts.map +1 -0
  81. package/dist/src/hosts/zstack.js +65 -0
  82. package/dist/src/hosts/zstack.js.map +1 -0
  83. package/dist/src/index.d.ts +20 -0
  84. package/dist/src/index.d.ts.map +1 -0
  85. package/dist/src/index.js +20 -0
  86. package/dist/src/index.js.map +1 -0
  87. package/dist/src/inline/index.d.ts +32 -0
  88. package/dist/src/inline/index.d.ts.map +1 -0
  89. package/dist/src/inline/index.js +111 -0
  90. package/dist/src/inline/index.js.map +1 -0
  91. package/dist/src/jsx.d.ts +2 -0
  92. package/dist/src/jsx.d.ts.map +1 -0
  93. package/dist/src/jsx.js +4 -0
  94. package/dist/src/jsx.js.map +1 -0
  95. package/dist/src/motion/color-motion-value.d.ts +32 -0
  96. package/dist/src/motion/color-motion-value.d.ts.map +1 -0
  97. package/dist/src/motion/color-motion-value.js +80 -0
  98. package/dist/src/motion/color-motion-value.js.map +1 -0
  99. package/dist/src/motion/color.d.ts +30 -0
  100. package/dist/src/motion/color.d.ts.map +1 -0
  101. package/dist/src/motion/color.js +172 -0
  102. package/dist/src/motion/color.js.map +1 -0
  103. package/dist/src/motion/color.test.d.ts +2 -0
  104. package/dist/src/motion/color.test.d.ts.map +1 -0
  105. package/dist/src/motion/color.test.js +97 -0
  106. package/dist/src/motion/color.test.js.map +1 -0
  107. package/dist/src/motion/event-emitter.d.ts +18 -0
  108. package/dist/src/motion/event-emitter.d.ts.map +1 -0
  109. package/dist/src/motion/event-emitter.js +30 -0
  110. package/dist/src/motion/event-emitter.js.map +1 -0
  111. package/dist/src/motion/frame.d.ts +9 -0
  112. package/dist/src/motion/frame.d.ts.map +1 -0
  113. package/dist/src/motion/frame.js +51 -0
  114. package/dist/src/motion/frame.js.map +1 -0
  115. package/dist/src/motion/hooks.d.ts +75 -0
  116. package/dist/src/motion/hooks.d.ts.map +1 -0
  117. package/dist/src/motion/hooks.js +190 -0
  118. package/dist/src/motion/hooks.js.map +1 -0
  119. package/dist/src/motion/index.d.ts +4 -0
  120. package/dist/src/motion/index.d.ts.map +1 -0
  121. package/dist/src/motion/index.js +7 -0
  122. package/dist/src/motion/index.js.map +1 -0
  123. package/dist/src/motion/motion-value.d.ts +40 -0
  124. package/dist/src/motion/motion-value.d.ts.map +1 -0
  125. package/dist/src/motion/motion-value.js +109 -0
  126. package/dist/src/motion/motion-value.js.map +1 -0
  127. package/dist/src/motion/motion-value.test.d.ts +2 -0
  128. package/dist/src/motion/motion-value.test.d.ts.map +1 -0
  129. package/dist/src/motion/motion-value.test.js +177 -0
  130. package/dist/src/motion/motion-value.test.js.map +1 -0
  131. package/dist/src/motion/spring-math.d.ts +28 -0
  132. package/dist/src/motion/spring-math.d.ts.map +1 -0
  133. package/dist/src/motion/spring-math.js +81 -0
  134. package/dist/src/motion/spring-math.js.map +1 -0
  135. package/dist/src/motion/types.d.ts +25 -0
  136. package/dist/src/motion/types.d.ts.map +1 -0
  137. package/dist/src/motion/types.js +13 -0
  138. package/dist/src/motion/types.js.map +1 -0
  139. package/dist/src/output.d.ts +47 -0
  140. package/dist/src/output.d.ts.map +1 -0
  141. package/dist/src/output.js +125 -0
  142. package/dist/src/output.js.map +1 -0
  143. package/dist/src/profiler.d.ts +6 -0
  144. package/dist/src/profiler.d.ts.map +1 -0
  145. package/dist/src/profiler.js +73 -0
  146. package/dist/src/profiler.js.map +1 -0
  147. package/dist/src/reconciler/host-config.d.ts +16 -0
  148. package/dist/src/reconciler/host-config.d.ts.map +1 -0
  149. package/dist/src/reconciler/host-config.js +174 -0
  150. package/dist/src/reconciler/host-config.js.map +1 -0
  151. package/dist/src/reconciler/types.d.ts +52 -0
  152. package/dist/src/reconciler/types.d.ts.map +1 -0
  153. package/dist/src/reconciler/types.js +2 -0
  154. package/dist/src/reconciler/types.js.map +1 -0
  155. package/dist/src/renderer.d.ts +101 -0
  156. package/dist/src/renderer.d.ts.map +1 -0
  157. package/dist/src/renderer.js +509 -0
  158. package/dist/src/renderer.js.map +1 -0
  159. package/dist/src/terminal.d.ts +37 -0
  160. package/dist/src/terminal.d.ts.map +1 -0
  161. package/dist/src/terminal.js +65 -0
  162. package/dist/src/terminal.js.map +1 -0
  163. package/dist/src/test/index.d.ts +3 -0
  164. package/dist/src/test/index.d.ts.map +1 -0
  165. package/dist/src/test/index.js +3 -0
  166. package/dist/src/test/index.js.map +1 -0
  167. package/dist/src/test/mock-streams.d.ts +44 -0
  168. package/dist/src/test/mock-streams.d.ts.map +1 -0
  169. package/dist/src/test/mock-streams.js +136 -0
  170. package/dist/src/test/mock-streams.js.map +1 -0
  171. package/dist/src/test/render-tui.d.ts +47 -0
  172. package/dist/src/test/render-tui.d.ts.map +1 -0
  173. package/dist/src/test/render-tui.js +76 -0
  174. package/dist/src/test/render-tui.js.map +1 -0
  175. package/dist/src/trace/SpanTree.d.ts +10 -0
  176. package/dist/src/trace/SpanTree.d.ts.map +1 -0
  177. package/dist/src/trace/SpanTree.js +104 -0
  178. package/dist/src/trace/SpanTree.js.map +1 -0
  179. package/dist/src/trace/index.d.ts +30 -0
  180. package/dist/src/trace/index.d.ts.map +1 -0
  181. package/dist/src/trace/index.js +142 -0
  182. package/dist/src/trace/index.js.map +1 -0
  183. package/dist/src/trace/location.d.ts +9 -0
  184. package/dist/src/trace/location.d.ts.map +1 -0
  185. package/dist/src/trace/location.js +88 -0
  186. package/dist/src/trace/location.js.map +1 -0
  187. package/dist/src/trace/span-processor.d.ts +16 -0
  188. package/dist/src/trace/span-processor.d.ts.map +1 -0
  189. package/dist/src/trace/span-processor.js +54 -0
  190. package/dist/src/trace/span-processor.js.map +1 -0
  191. package/dist/src/trace/span-state.d.ts +79 -0
  192. package/dist/src/trace/span-state.d.ts.map +1 -0
  193. package/dist/src/trace/span-state.js +229 -0
  194. package/dist/src/trace/span-state.js.map +1 -0
  195. package/dist/src/trace/tui-logger.d.ts +8 -0
  196. package/dist/src/trace/tui-logger.d.ts.map +1 -0
  197. package/dist/src/trace/tui-logger.js +70 -0
  198. package/dist/src/trace/tui-logger.js.map +1 -0
  199. package/dist/src/utils/border.d.ts +31 -0
  200. package/dist/src/utils/border.d.ts.map +1 -0
  201. package/dist/src/utils/border.js +81 -0
  202. package/dist/src/utils/border.js.map +1 -0
  203. package/dist/src/utils/flex-layout.d.ts +20 -0
  204. package/dist/src/utils/flex-layout.d.ts.map +1 -0
  205. package/dist/src/utils/flex-layout.js +85 -0
  206. package/dist/src/utils/flex-layout.js.map +1 -0
  207. package/dist/src/utils/index.d.ts +5 -0
  208. package/dist/src/utils/index.d.ts.map +1 -0
  209. package/dist/src/utils/index.js +5 -0
  210. package/dist/src/utils/index.js.map +1 -0
  211. package/dist/src/utils/padding.d.ts +26 -0
  212. package/dist/src/utils/padding.d.ts.map +1 -0
  213. package/dist/src/utils/padding.js +34 -0
  214. package/dist/src/utils/padding.js.map +1 -0
  215. package/dist/src/utils/styles.d.ts +13 -0
  216. package/dist/src/utils/styles.d.ts.map +1 -0
  217. package/dist/src/utils/styles.js +5 -0
  218. package/dist/src/utils/styles.js.map +1 -0
  219. package/dist/src/visualize/index.d.ts +50 -0
  220. package/dist/src/visualize/index.d.ts.map +1 -0
  221. package/dist/src/visualize/index.js +194 -0
  222. package/dist/src/visualize/index.js.map +1 -0
  223. package/dist/tsconfig.tsbuildinfo +1 -0
  224. package/package.json +94 -0
  225. package/src/codeblock.tsx +47 -0
  226. package/src/constants.ts +2 -0
  227. package/src/debug/DiagnosticsPanel.tsx +38 -0
  228. package/src/highlight.ts +76 -0
  229. package/src/hooks/index.ts +3 -0
  230. package/src/hooks/use-keyboard.ts +37 -0
  231. package/src/hooks/use-paste.ts +14 -0
  232. package/src/hooks/useFrameStats.ts +32 -0
  233. package/src/hosts/base.ts +65 -0
  234. package/src/hosts/box.ts +105 -0
  235. package/src/hosts/canvas.ts +155 -0
  236. package/src/hosts/codeblock.ts +145 -0
  237. package/src/hosts/hstack.ts +64 -0
  238. package/src/hosts/index.ts +45 -0
  239. package/src/hosts/spacer.ts +40 -0
  240. package/src/hosts/text.ts +175 -0
  241. package/src/hosts/vstack.ts +64 -0
  242. package/src/hosts/zstack.ts +77 -0
  243. package/src/index.ts +62 -0
  244. package/src/inline/index.tsx +181 -0
  245. package/src/jsx.ts +3 -0
  246. package/src/motion/color-motion-value.ts +90 -0
  247. package/src/motion/color.test.ts +115 -0
  248. package/src/motion/color.ts +191 -0
  249. package/src/motion/event-emitter.ts +35 -0
  250. package/src/motion/frame.ts +59 -0
  251. package/src/motion/hooks.ts +237 -0
  252. package/src/motion/index.ts +17 -0
  253. package/src/motion/motion-value.test.ts +222 -0
  254. package/src/motion/motion-value.ts +140 -0
  255. package/src/motion/spring-math.ts +114 -0
  256. package/src/motion/types.ts +34 -0
  257. package/src/output.ts +156 -0
  258. package/src/profiler.ts +88 -0
  259. package/src/reconciler/host-config.ts +277 -0
  260. package/src/reconciler/types.ts +66 -0
  261. package/src/renderer.ts +661 -0
  262. package/src/terminal.ts +67 -0
  263. package/src/test/index.ts +8 -0
  264. package/src/test/mock-streams.ts +149 -0
  265. package/src/test/render-tui.ts +118 -0
  266. package/src/trace/SpanTree.tsx +195 -0
  267. package/src/trace/index.tsx +205 -0
  268. package/src/trace/location.ts +90 -0
  269. package/src/trace/span-processor.ts +65 -0
  270. package/src/trace/span-state.ts +286 -0
  271. package/src/trace/tui-logger.ts +72 -0
  272. package/src/utils/border.ts +108 -0
  273. package/src/utils/flex-layout.ts +125 -0
  274. package/src/utils/index.ts +4 -0
  275. package/src/utils/padding.ts +45 -0
  276. package/src/utils/styles.ts +14 -0
  277. package/src/visualize/index.tsx +305 -0
@@ -0,0 +1,40 @@
1
+ import { TextHost, RawTextHost } from "./text.js";
2
+ import { SpacerHost } from "./spacer.js";
3
+ import { VStackHost } from "./vstack.js";
4
+ import { HStackHost } from "./hstack.js";
5
+ import { ZStackHost } from "./zstack.js";
6
+ import { BoxHost } from "./box.js";
7
+ import { CanvasHost } from "./canvas.js";
8
+ import { CodeBlockHost } from "./codeblock.js";
9
+ export { BaseHost } from "./base.js";
10
+ export { TextHost, RawTextHost } from "./text.js";
11
+ export { SpacerHost } from "./spacer.js";
12
+ export { VStackHost } from "./vstack.js";
13
+ export { HStackHost } from "./hstack.js";
14
+ export { ZStackHost } from "./zstack.js";
15
+ export { BoxHost } from "./box.js";
16
+ export { CanvasHost } from "./canvas.js";
17
+ export { CodeBlockHost } from "./codeblock.js";
18
+ // Use any to allow specialized props on each host type
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ export const hostRegistry = {
21
+ text: TextHost,
22
+ spacer: SpacerHost,
23
+ vstack: VStackHost,
24
+ hstack: HStackHost,
25
+ zstack: ZStackHost,
26
+ box: BoxHost,
27
+ canvas: CanvasHost,
28
+ codeblock: CodeBlockHost,
29
+ };
30
+ export function createHostInstance(type, props, ctx) {
31
+ const Host = hostRegistry[type];
32
+ if (!Host) {
33
+ throw new Error(`Unknown host component type: ${type}`);
34
+ }
35
+ return new Host(props, ctx);
36
+ }
37
+ export function createTextInstance(text, ctx) {
38
+ return new RawTextHost(text, ctx);
39
+ }
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hosts/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAkB,MAAM,WAAW,CAAA;AACjE,OAAO,EAAE,UAAU,EAAoB,MAAM,aAAa,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAoB,MAAM,aAAa,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAoB,MAAM,aAAa,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAoB,MAAM,aAAa,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAiB,MAAM,UAAU,CAAA;AACjD,OAAO,EAAE,UAAU,EAAsC,MAAM,aAAa,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAuB,MAAM,gBAAgB,CAAA;AAEnE,uDAAuD;AACvD,8DAA8D;AAC9D,MAAM,CAAC,MAAM,YAAY,GAAmE;IAC1F,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,UAAU;IAClB,GAAG,EAAE,OAAO;IACZ,MAAM,EAAE,UAAU;IAClB,SAAS,EAAE,aAAa;CACzB,CAAA;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,KAAkB,EAAE,GAAgB;IACnF,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAA;IACzD,CAAC;IACD,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;AAC7B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,GAAgB;IAC/D,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;AACnC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { CellBuffer, Palette } from "@effect-tui/core";
2
+ import type { HostContext, Rect, Size, CommonProps } from "../reconciler/types.js";
3
+ import { BaseHost } from "./base.js";
4
+ export interface SpacerProps extends CommonProps {
5
+ /** Minimum width (default 0) */
6
+ minWidth?: number;
7
+ /** Minimum height (default 0) */
8
+ minHeight?: number;
9
+ }
10
+ export declare class SpacerHost extends BaseHost {
11
+ minWidth: number;
12
+ minHeight: number;
13
+ constructor(props: SpacerProps, ctx: HostContext);
14
+ measure(_maxW: number, _maxH: number): Size;
15
+ layout(rect: Rect): void;
16
+ render(_buffer: CellBuffer, _palette: Palette): void;
17
+ updateProps(props: Record<string, unknown>): void;
18
+ }
19
+ //# sourceMappingURL=spacer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spacer.d.ts","sourceRoot":"","sources":["../../../src/hosts/spacer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,qBAAa,UAAW,SAAQ,QAAQ;IACtC,QAAQ,SAAI;IACZ,SAAS,SAAI;gBAED,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW;IAMhD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKlC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIjC,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAI3C,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAK3D"}
@@ -0,0 +1,28 @@
1
+ import { BaseHost } from "./base.js";
2
+ export class SpacerHost extends BaseHost {
3
+ minWidth = 0;
4
+ minHeight = 0;
5
+ constructor(props, ctx) {
6
+ // Spacers have flexGrow=1 by default
7
+ super("spacer", { flexGrow: 1, ...props }, ctx);
8
+ this.updateProps(props);
9
+ }
10
+ measure(_maxW, _maxH) {
11
+ // Spacers have no natural size, they expand via flexGrow
12
+ return { w: this.minWidth, h: this.minHeight };
13
+ }
14
+ layout(rect) {
15
+ super.layout(rect);
16
+ }
17
+ render(_buffer, _palette) {
18
+ // Spacers render nothing
19
+ }
20
+ updateProps(props) {
21
+ super.updateProps(props);
22
+ if (props.minWidth !== undefined)
23
+ this.minWidth = props.minWidth;
24
+ if (props.minHeight !== undefined)
25
+ this.minHeight = props.minHeight;
26
+ }
27
+ }
28
+ //# sourceMappingURL=spacer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spacer.js","sourceRoot":"","sources":["../../../src/hosts/spacer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AASpC,MAAM,OAAO,UAAW,SAAQ,QAAQ;IACtC,QAAQ,GAAG,CAAC,CAAA;IACZ,SAAS,GAAG,CAAC,CAAA;IAEb,YAAY,KAAkB,EAAE,GAAgB;QAC9C,qCAAqC;QACrC,KAAK,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,CAAC,CAAA;QAC/C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IACzB,CAAC;IAED,OAAO,CAAC,KAAa,EAAE,KAAa;QAClC,yDAAyD;QACzD,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,CAAA;IAChD,CAAC;IAEQ,MAAM,CAAC,IAAU;QACxB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACpB,CAAC;IAED,MAAM,CAAC,OAAmB,EAAE,QAAiB;QAC3C,yBAAyB;IAC3B,CAAC;IAEQ,WAAW,CAAC,KAA8B;QACjD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QACxB,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;YAAE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAkB,CAAA;QAC1E,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAmB,CAAA;IAC/E,CAAC;CACF"}
@@ -0,0 +1,43 @@
1
+ import { type CellBuffer, type Palette, type ColorLike } from "@effect-tui/core";
2
+ import type { HostContext, Rect, Size, CommonProps } from "../reconciler/types.js";
3
+ import { BaseHost } from "./base.js";
4
+ export interface TextProps extends CommonProps {
5
+ fg?: ColorLike;
6
+ bg?: ColorLike;
7
+ bold?: boolean;
8
+ italic?: boolean;
9
+ underline?: boolean;
10
+ inverse?: boolean;
11
+ /** If true, wrap text to multiple lines (default: false, text is truncated) */
12
+ wrap?: boolean;
13
+ }
14
+ export declare class TextHost extends BaseHost {
15
+ fg?: ColorLike;
16
+ bg?: ColorLike;
17
+ bold: boolean;
18
+ italic: boolean;
19
+ underline: boolean;
20
+ inverse: boolean;
21
+ wrap: boolean;
22
+ private cachedLines;
23
+ private cachedWidth;
24
+ constructor(props: TextProps, ctx: HostContext);
25
+ /** Get text content from RawTextHost children */
26
+ private getContent;
27
+ measure(maxW: number, maxH: number): Size;
28
+ /** Wrap text to fit within maxWidth */
29
+ private wrapText;
30
+ layout(rect: Rect): void;
31
+ render(buffer: CellBuffer, palette: Palette): void;
32
+ updateProps(props: Record<string, unknown>): void;
33
+ }
34
+ /** Special host for raw text nodes (React text children) */
35
+ export declare class RawTextHost extends BaseHost {
36
+ content: string;
37
+ constructor(text: string, ctx: HostContext);
38
+ measure(maxW: number, _maxH: number): Size;
39
+ render(buffer: CellBuffer, palette: Palette): void;
40
+ updateText(text: string): void;
41
+ updateProps(_props: Record<string, unknown>): void;
42
+ }
43
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/hosts/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,UAAU,EAAE,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC1G,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,WAAW,SAAU,SAAQ,WAAW;IAC5C,EAAE,CAAC,EAAE,SAAS,CAAA;IACd,EAAE,CAAC,EAAE,SAAS,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED,qBAAa,QAAS,SAAQ,QAAQ;IACpC,EAAE,CAAC,EAAE,SAAS,CAAA;IACd,EAAE,CAAC,EAAE,SAAS,CAAA;IACd,IAAI,UAAQ;IACZ,MAAM,UAAQ;IACd,SAAS,UAAQ;IACjB,OAAO,UAAQ;IACf,IAAI,UAAQ;IAGZ,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,WAAW,CAAI;gBAEX,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW;IAK9C,iDAAiD;IACjD,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAsBzC,uCAAuC;IACvC,OAAO,CAAC,QAAQ;IAyBP,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAQjC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAqCzC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAW3D;AAED,4DAA4D;AAC5D,qBAAa,WAAY,SAAQ,QAAQ;IACvC,OAAO,SAAK;gBAEA,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW;IAK1C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1C,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAMlD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIrB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAG5D"}
@@ -0,0 +1,148 @@
1
+ import { displayWidth, parseColor } from "@effect-tui/core";
2
+ import { BaseHost } from "./base.js";
3
+ export class TextHost extends BaseHost {
4
+ fg;
5
+ bg;
6
+ bold = false;
7
+ italic = false;
8
+ underline = false;
9
+ inverse = false;
10
+ wrap = false; // Default: truncate (no wrap)
11
+ // Cache wrapped lines between measure() and render()
12
+ cachedLines = null;
13
+ cachedWidth = 0;
14
+ constructor(props, ctx) {
15
+ super("text", props, ctx);
16
+ this.updateProps(props);
17
+ }
18
+ /** Get text content from RawTextHost children */
19
+ getContent() {
20
+ return this.children
21
+ .filter((c) => c instanceof RawTextHost)
22
+ .map((c) => c.content)
23
+ .join("");
24
+ }
25
+ measure(maxW, maxH) {
26
+ const content = this.getContent();
27
+ const rawLines = content.split("\n");
28
+ if (this.wrap) {
29
+ // Wrap mode: may span multiple lines. Cache result for render()
30
+ this.cachedLines = rawLines.flatMap((line, idx) => idx < rawLines.length - 1 ? [...this.wrapText(line, maxW), ""] : this.wrapText(line, maxW));
31
+ this.cachedWidth = maxW;
32
+ const w = this.cachedLines.reduce((max, line) => Math.max(max, displayWidth(line)), 0);
33
+ return { w, h: Math.min(this.cachedLines.length, maxH) };
34
+ }
35
+ // Default: respect explicit newlines but do not wrap long words
36
+ this.cachedLines = null;
37
+ const widths = rawLines.map((line) => Math.min(displayWidth(line), maxW));
38
+ const w = widths.reduce((max, val) => Math.max(max, val), 0);
39
+ const h = Math.min(rawLines.length, maxH);
40
+ return { w, h };
41
+ }
42
+ /** Wrap text to fit within maxWidth */
43
+ wrapText(text, maxWidth) {
44
+ const result = [];
45
+ for (const rawLine of text.split("\n")) {
46
+ if (rawLine === "") {
47
+ result.push("");
48
+ continue;
49
+ }
50
+ let line = "";
51
+ let lineW = 0;
52
+ for (const ch of rawLine) {
53
+ const w = displayWidth(ch);
54
+ if (lineW + w > maxWidth && line.length > 0) {
55
+ result.push(line);
56
+ line = ch;
57
+ lineW = w;
58
+ }
59
+ else {
60
+ line += ch;
61
+ lineW += w;
62
+ }
63
+ }
64
+ if (line.length > 0)
65
+ result.push(line);
66
+ }
67
+ return result.length > 0 ? result : [""];
68
+ }
69
+ layout(rect) {
70
+ super.layout(rect);
71
+ // Layout children (RawTextHost nodes) at same position
72
+ for (const child of this.children) {
73
+ child.layout(rect);
74
+ }
75
+ }
76
+ render(buffer, palette) {
77
+ if (!this.rect)
78
+ return;
79
+ const style = {};
80
+ if (this.fg !== undefined)
81
+ style.fg = typeof this.fg === "string" ? parseColor(this.fg) : this.fg;
82
+ if (this.bg !== undefined)
83
+ style.bg = typeof this.bg === "string" ? parseColor(this.bg) : this.bg;
84
+ if (this.bold)
85
+ style.bold = true;
86
+ if (this.italic)
87
+ style.italic = true;
88
+ if (this.underline)
89
+ style.underline = true;
90
+ if (this.inverse)
91
+ style.inverse = true;
92
+ const styleId = palette.id(style);
93
+ const content = this.getContent();
94
+ const rawLines = content.split("\n");
95
+ if (this.wrap) {
96
+ // Wrap mode: use cached lines if width matches, otherwise rewrap
97
+ const rectW = this.rect.w;
98
+ const lines = this.cachedLines && this.cachedWidth === rectW
99
+ ? this.cachedLines
100
+ : rawLines.flatMap((line, idx) => idx < rawLines.length - 1 ? [...this.wrapText(line, rectW), ""] : this.wrapText(line, rectW));
101
+ for (let i = 0; i < lines.length && i < this.rect.h; i++) {
102
+ buffer.drawText(this.rect.x, this.rect.y + i, lines[i], styleId, this.rect.w);
103
+ }
104
+ return;
105
+ }
106
+ // Default: render explicit newlines, clip to width/height
107
+ const maxLines = Math.min(this.rect.h, rawLines.length);
108
+ for (let i = 0; i < maxLines; i++) {
109
+ buffer.drawText(this.rect.x, this.rect.y + i, rawLines[i], styleId, this.rect.w);
110
+ }
111
+ }
112
+ updateProps(props) {
113
+ super.updateProps(props);
114
+ // Always assign; props may be undefined when attribute is removed
115
+ this.fg = props.fg;
116
+ this.bg = props.bg;
117
+ this.bold = Boolean(props.bold);
118
+ this.italic = Boolean(props.italic);
119
+ this.underline = Boolean(props.underline);
120
+ this.inverse = Boolean(props.inverse);
121
+ this.wrap = Boolean(props.wrap);
122
+ }
123
+ }
124
+ /** Special host for raw text nodes (React text children) */
125
+ export class RawTextHost extends BaseHost {
126
+ content = "";
127
+ constructor(text, ctx) {
128
+ super("rawtext", {}, ctx);
129
+ this.content = text;
130
+ }
131
+ measure(maxW, _maxH) {
132
+ const w = Math.min(displayWidth(this.content), maxW);
133
+ return { w, h: 1 };
134
+ }
135
+ render(buffer, palette) {
136
+ if (!this.rect)
137
+ return;
138
+ const styleId = palette.id({});
139
+ buffer.drawText(this.rect.x, this.rect.y, this.content, styleId, this.rect.w);
140
+ }
141
+ updateText(text) {
142
+ this.content = text;
143
+ }
144
+ updateProps(_props) {
145
+ // Raw text has no props
146
+ }
147
+ }
148
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/hosts/text.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { CellBuffer, Palette } from "@effect-tui/core";
2
+ import type { HostContext, Rect, Size, CommonProps } from "../reconciler/types.js";
3
+ import { BaseHost } from "./base.js";
4
+ export interface VStackProps extends CommonProps {
5
+ spacing?: number;
6
+ alignment?: "leading" | "center" | "trailing";
7
+ }
8
+ export declare class VStackHost extends BaseHost {
9
+ spacing: number;
10
+ alignment: "leading" | "center" | "trailing";
11
+ private cachedSizes;
12
+ constructor(props: VStackProps, ctx: HostContext);
13
+ measure(maxW: number, maxH: number): Size;
14
+ layout(rect: Rect): void;
15
+ render(buffer: CellBuffer, palette: Palette): void;
16
+ updateProps(props: Record<string, unknown>): void;
17
+ }
18
+ //# sourceMappingURL=vstack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vstack.d.ts","sourceRoot":"","sources":["../../../src/hosts/vstack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAGpC,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAA;CAC9C;AAcD,qBAAa,UAAW,SAAQ,QAAQ;IACtC,OAAO,SAAI;IACX,SAAS,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAY;IACxD,OAAO,CAAC,WAAW,CAAa;gBAEpB,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW;IAKhD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAMhC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAcjC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAMzC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAK3D"}
@@ -0,0 +1,45 @@
1
+ import { BaseHost } from "./base.js";
2
+ import { measureFlex, layoutFlex } from "../utils/index.js";
3
+ // Map VStack alignment names to generic flex alignment
4
+ function toFlexAlignment(alignment) {
5
+ switch (alignment) {
6
+ case "leading":
7
+ return "start";
8
+ case "center":
9
+ return "center";
10
+ case "trailing":
11
+ return "end";
12
+ }
13
+ }
14
+ export class VStackHost extends BaseHost {
15
+ spacing = 0;
16
+ alignment = "leading";
17
+ cachedSizes = [];
18
+ constructor(props, ctx) {
19
+ super("vstack", props, ctx);
20
+ this.updateProps(props);
21
+ }
22
+ measure(maxW, maxH) {
23
+ const result = measureFlex("vertical", this.children, this.spacing, maxH, maxW);
24
+ this.cachedSizes = result.sizes;
25
+ return result.totalSize;
26
+ }
27
+ layout(rect) {
28
+ super.layout(rect);
29
+ const stretchCross = this.alignment === "leading";
30
+ layoutFlex("vertical", this.children, this.cachedSizes, rect, this.spacing, toFlexAlignment(this.alignment), stretchCross);
31
+ }
32
+ render(buffer, palette) {
33
+ for (const child of this.children) {
34
+ child.render(buffer, palette);
35
+ }
36
+ }
37
+ updateProps(props) {
38
+ super.updateProps(props);
39
+ if (props.spacing !== undefined)
40
+ this.spacing = props.spacing;
41
+ if (props.alignment !== undefined)
42
+ this.alignment = props.alignment;
43
+ }
44
+ }
45
+ //# sourceMappingURL=vstack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vstack.js","sourceRoot":"","sources":["../../../src/hosts/vstack.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAsB,MAAM,mBAAmB,CAAA;AAO/E,uDAAuD;AACvD,SAAS,eAAe,CAAC,SAA4C;IACnE,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,OAAO,CAAA;QAChB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAA;QACjB,KAAK,UAAU;YACb,OAAO,KAAK,CAAA;IAChB,CAAC;AACH,CAAC;AAED,MAAM,OAAO,UAAW,SAAQ,QAAQ;IACtC,OAAO,GAAG,CAAC,CAAA;IACX,SAAS,GAAsC,SAAS,CAAA;IAChD,WAAW,GAAW,EAAE,CAAA;IAEhC,YAAY,KAAkB,EAAE,GAAgB;QAC9C,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;QAC3B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IACzB,CAAC;IAED,OAAO,CAAC,IAAY,EAAE,IAAY;QAChC,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;QAC/E,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAA;QAC/B,OAAO,MAAM,CAAC,SAAS,CAAA;IACzB,CAAC;IAEQ,MAAM,CAAC,IAAU;QACxB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAClB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAA;QACjD,UAAU,CACR,UAAU,EACV,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,WAAW,EAChB,IAAI,EACJ,IAAI,CAAC,OAAO,EACZ,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,EAC/B,YAAY,CACb,CAAA;IACH,CAAC;IAED,MAAM,CAAC,MAAkB,EAAE,OAAgB;QACzC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC;IAEQ,WAAW,CAAC,KAA8B;QACjD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QACxB,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAiB,CAAA;QACvE,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAA8C,CAAA;IAC1G,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ import type { CellBuffer, Palette } from "@effect-tui/core";
2
+ import type { HostContext, Rect, Size, CommonProps } from "../reconciler/types.js";
3
+ import { BaseHost } from "./base.js";
4
+ export interface ZStackProps extends CommonProps {
5
+ alignment?: {
6
+ h?: "leading" | "center" | "trailing";
7
+ v?: "top" | "center" | "bottom";
8
+ };
9
+ }
10
+ export declare class ZStackHost extends BaseHost {
11
+ alignmentH: "leading" | "center" | "trailing";
12
+ alignmentV: "top" | "center" | "bottom";
13
+ private cachedSizes;
14
+ constructor(props: ZStackProps, ctx: HostContext);
15
+ measure(maxW: number, maxH: number): Size;
16
+ layout(rect: Rect): void;
17
+ render(buffer: CellBuffer, palette: Palette): void;
18
+ updateProps(props: Record<string, unknown>): void;
19
+ }
20
+ //# sourceMappingURL=zstack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zstack.d.ts","sourceRoot":"","sources":["../../../src/hosts/zstack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,SAAS,CAAC,EAAE;QAAE,CAAC,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;QAAC,CAAC,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAA;KAAE,CAAA;CACvF;AAGD,qBAAa,UAAW,SAAQ,QAAQ;IACtC,UAAU,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAW;IACxD,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAW;IAClD,OAAO,CAAC,WAAW,CAAa;gBAEpB,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW;IAKhD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAkBhC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAyBjC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAMzC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAQ3D"}
@@ -0,0 +1,65 @@
1
+ import { BaseHost } from "./base.js";
2
+ // Overlay children in the same rect, honoring alignment for each child.
3
+ export class ZStackHost extends BaseHost {
4
+ alignmentH = "center";
5
+ alignmentV = "center";
6
+ cachedSizes = [];
7
+ constructor(props, ctx) {
8
+ super("zstack", props, ctx);
9
+ this.updateProps(props);
10
+ }
11
+ measure(maxW, maxH) {
12
+ let maxChildW = 0;
13
+ let maxChildH = 0;
14
+ this.cachedSizes = [];
15
+ for (const child of this.children) {
16
+ const size = child.measure(maxW, maxH);
17
+ this.cachedSizes.push(size);
18
+ maxChildW = Math.max(maxChildW, size.w);
19
+ maxChildH = Math.max(maxChildH, size.h);
20
+ }
21
+ return {
22
+ w: Math.min(maxW, maxChildW),
23
+ h: Math.min(maxH, maxChildH),
24
+ };
25
+ }
26
+ layout(rect) {
27
+ super.layout(rect);
28
+ for (let i = 0; i < this.children.length; i++) {
29
+ const child = this.children[i];
30
+ const size = this.cachedSizes[i] ?? child.measure(rect.w, rect.h);
31
+ let x = rect.x;
32
+ let y = rect.y;
33
+ if (this.alignmentH === "center")
34
+ x += Math.floor((rect.w - size.w) / 2);
35
+ else if (this.alignmentH === "trailing")
36
+ x += Math.max(0, rect.w - size.w);
37
+ if (this.alignmentV === "center")
38
+ y += Math.floor((rect.h - size.h) / 2);
39
+ else if (this.alignmentV === "bottom")
40
+ y += Math.max(0, rect.h - size.h);
41
+ child.layout({
42
+ x,
43
+ y,
44
+ w: Math.min(rect.w, size.w),
45
+ h: Math.min(rect.h, size.h),
46
+ });
47
+ }
48
+ }
49
+ render(buffer, palette) {
50
+ for (const child of this.children) {
51
+ child.render(buffer, palette);
52
+ }
53
+ }
54
+ updateProps(props) {
55
+ super.updateProps(props);
56
+ if (props.alignment !== undefined) {
57
+ const a = props.alignment;
58
+ if (a?.h)
59
+ this.alignmentH = a.h;
60
+ if (a?.v)
61
+ this.alignmentV = a.v;
62
+ }
63
+ }
64
+ }
65
+ //# sourceMappingURL=zstack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zstack.js","sourceRoot":"","sources":["../../../src/hosts/zstack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export * from "@effect-tui/core";
2
+ export { createRenderer, createRoot, render, useRenderer, useTerminalSize, RendererContext, } from "./renderer.js";
3
+ export type { TuiRenderer, RendererOptions, Root, FrameStats, RenderInstance } from "./renderer.js";
4
+ export { CodeBlock } from "./codeblock.js";
5
+ export type { CodeBlockProps } from "./codeblock.js";
6
+ export { highlightCode, toPlainLines, type HighlightLine, type HighlightToken, type HighlightTokenStyle, } from "./highlight.js";
7
+ export { useKeyboard, usePaste } from "./hooks/index.js";
8
+ export { useFrameStats } from "./hooks/useFrameStats.js";
9
+ export type { UseKeyboardOptions } from "./hooks/index.js";
10
+ export { useMotionValue, useSpring, useSprings, useSpringRenderer, useMotionValueEvent, useAnimationFrame, motionValue, ColorMotionValue, useColorMotionValue, useColorSpring, } from "./motion/index.js";
11
+ export type { SpringOptions, MotionValue, RGBA, ColorInput } from "./motion/index.js";
12
+ export type { HostInstance, HostContext, Rect, Size, CommonProps } from "./reconciler/types.js";
13
+ export type { TextProps } from "./hosts/text.js";
14
+ export type { SpacerProps } from "./hosts/spacer.js";
15
+ export type { VStackProps } from "./hosts/vstack.js";
16
+ export type { HStackProps } from "./hosts/hstack.js";
17
+ export type { BoxProps, BorderKind } from "./hosts/box.js";
18
+ export type { CanvasProps, DrawContext } from "./hosts/canvas.js";
19
+ export { DiagnosticsPanel } from "./debug/DiagnosticsPanel.js";
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAA;AAGhC,OAAO,EACN,cAAc,EACd,UAAU,EACV,MAAM,EACN,WAAW,EACX,eAAe,EACf,eAAe,GACf,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAGnG,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAGpD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAG1D,OAAO,EACL,cAAc,EACd,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EAEX,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,GACf,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAGrF,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAC/F,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC1D,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAGjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA"}
@@ -0,0 +1,20 @@
1
+ // Convenience: re-export core theming/types so apps can import from one place
2
+ export * from "@effect-tui/core";
3
+ // Renderer
4
+ export { createRenderer, createRoot, render, useRenderer, useTerminalSize, RendererContext, } from "./renderer.js";
5
+ // Components
6
+ export { CodeBlock } from "./codeblock.js";
7
+ // Highlight utilities
8
+ export { highlightCode, toPlainLines, } from "./highlight.js";
9
+ // Hooks
10
+ export { useKeyboard, usePaste } from "./hooks/index.js";
11
+ export { useFrameStats } from "./hooks/useFrameStats.js";
12
+ // Motion (spring animations)
13
+ export { useMotionValue, useSpring, useSprings, useSpringRenderer, useMotionValueEvent, useAnimationFrame, motionValue,
14
+ // Color springs
15
+ ColorMotionValue, useColorMotionValue, useColorSpring, } from "./motion/index.js";
16
+ // Debug
17
+ export { DiagnosticsPanel } from "./debug/DiagnosticsPanel.js";
18
+ // JSX types are provided via jsxImportSource: "@effect-tui/react"
19
+ // See jsx-runtime.ts at package root for the JSX namespace
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,cAAc,kBAAkB,CAAA;AAEhC,WAAW;AACX,OAAO,EACN,cAAc,EACd,UAAU,EACV,MAAM,EACN,WAAW,EACX,eAAe,EACf,eAAe,GACf,MAAM,eAAe,CAAA;AAGtB,aAAa;AACb,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAG1C,sBAAsB;AACtB,OAAO,EACL,aAAa,EACb,YAAY,GAIb,MAAM,gBAAgB,CAAA;AAEvB,QAAQ;AACR,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAGxD,6BAA6B;AAC7B,OAAO,EACL,cAAc,EACd,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,WAAW;AACX,gBAAgB;AAChB,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,GACf,MAAM,mBAAmB,CAAA;AAY1B,QAAQ;AACR,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAE9D,kEAAkE;AAClE,2DAA2D"}
@@ -0,0 +1,32 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ export interface TaskOptions<A> {
3
+ /** Format the result to append to the label on success */
4
+ formatResult?: (result: A) => string;
5
+ }
6
+ export interface InlineRenderer {
7
+ /**
8
+ * Wrap an effect with inline progress visualization.
9
+ * Shows a spinner while running, checkmark on success, X on failure.
10
+ */
11
+ readonly task: <A, E, R>(label: string, effect: Effect.Effect<A, E, R>, options?: TaskOptions<A>) => Effect.Effect<A, E, R>;
12
+ }
13
+ export declare const InlineRenderer: Context.Tag<InlineRenderer, InlineRenderer>;
14
+ export declare const InlineRendererLive: Layer.Layer<InlineRenderer>;
15
+ /**
16
+ * Wrap an effect with inline progress visualization.
17
+ * Requires InlineRendererLive layer to be provided.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * const program = Effect.gen(function* () {
22
+ * const user = yield* task("Fetch user", fetchUser, {
23
+ * formatResult: (u) => u.name
24
+ * })
25
+ * yield* task("Send email", sendEmail(user))
26
+ * }).pipe(Effect.provide(InlineRendererLive))
27
+ *
28
+ * Effect.runPromise(program)
29
+ * ```
30
+ */
31
+ export declare const task: <A, E, R>(label: string, effect: Effect.Effect<A, E, R>, options?: TaskOptions<A>) => Effect.Effect<A, E, R | InlineRenderer>;
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/inline/index.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAA;AAsDvD,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,0DAA0D;IAC1D,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,CAAA;CACrC;AAGD,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACrB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,KACrB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;CAC5B;AAED,eAAO,MAAM,cAAc,6CAAyE,CAAA;AAGpG,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,KAAK,CAAC,cAAc,CA0E1D,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAC1B,OAAO,MAAM,EACb,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,UAAU,WAAW,CAAC,CAAC,CAAC,KACvB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,cAAc,CAA0E,CAAA"}