@effect-tui/react 0.1.7 → 0.2.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 (295) hide show
  1. package/dist/jsx-runtime.d.ts +6 -6
  2. package/dist/jsx-runtime.d.ts.map +1 -1
  3. package/dist/src/codeblock.js.map +1 -1
  4. package/dist/src/components/Divider.d.ts.map +1 -1
  5. package/dist/src/components/Divider.js +1 -1
  6. package/dist/src/components/Divider.js.map +1 -1
  7. package/dist/src/components/Markdown.d.ts.map +1 -1
  8. package/dist/src/components/Markdown.js +1 -1
  9. package/dist/src/components/Markdown.js.map +1 -1
  10. package/dist/src/components/MultilineTextInput.d.ts.map +1 -1
  11. package/dist/src/components/MultilineTextInput.js +2 -2
  12. package/dist/src/components/MultilineTextInput.js.map +1 -1
  13. package/dist/src/components/Static.d.ts.map +1 -1
  14. package/dist/src/components/Static.js +1 -1
  15. package/dist/src/components/Static.js.map +1 -1
  16. package/dist/src/components/TextInput.d.ts.map +1 -1
  17. package/dist/src/components/TextInput.js +2 -2
  18. package/dist/src/components/TextInput.js.map +1 -1
  19. package/dist/src/components/index.d.ts +4 -4
  20. package/dist/src/components/index.d.ts.map +1 -1
  21. package/dist/src/components/index.js +4 -4
  22. package/dist/src/components/index.js.map +1 -1
  23. package/dist/src/console/ConsoleCapture.d.ts.map +1 -1
  24. package/dist/src/console/ConsoleCapture.js +1 -1
  25. package/dist/src/console/ConsoleCapture.js.map +1 -1
  26. package/dist/src/console/ConsolePopover.d.ts.map +1 -1
  27. package/dist/src/console/ConsolePopover.js +5 -7
  28. package/dist/src/console/ConsolePopover.js.map +1 -1
  29. package/dist/src/console/index.d.ts +1 -1
  30. package/dist/src/console/index.d.ts.map +1 -1
  31. package/dist/src/console/index.js +1 -1
  32. package/dist/src/console/index.js.map +1 -1
  33. package/dist/src/console/useConsole.d.ts.map +1 -1
  34. package/dist/src/console/useConsole.js +2 -2
  35. package/dist/src/console/useConsole.js.map +1 -1
  36. package/dist/src/debug/DebugOverlay.d.ts +1 -1
  37. package/dist/src/debug/DebugOverlay.d.ts.map +1 -1
  38. package/dist/src/debug/DebugOverlay.js +1 -1
  39. package/dist/src/debug/DebugOverlay.js.map +1 -1
  40. package/dist/src/dev/Toast.d.ts.map +1 -1
  41. package/dist/src/dev/Toast.js +2 -2
  42. package/dist/src/dev/Toast.js.map +1 -1
  43. package/dist/src/dev/index.d.ts +1 -1
  44. package/dist/src/dev/index.d.ts.map +1 -1
  45. package/dist/src/dev/index.js +1 -1
  46. package/dist/src/dev/index.js.map +1 -1
  47. package/dist/src/dev.d.ts +1 -2
  48. package/dist/src/dev.d.ts.map +1 -1
  49. package/dist/src/dev.js +10 -10
  50. package/dist/src/dev.js.map +1 -1
  51. package/dist/src/highlight.d.ts +1 -1
  52. package/dist/src/highlight.d.ts.map +1 -1
  53. package/dist/src/highlight.js.map +1 -1
  54. package/dist/src/hooks/index.d.ts +4 -3
  55. package/dist/src/hooks/index.d.ts.map +1 -1
  56. package/dist/src/hooks/index.js +1 -0
  57. package/dist/src/hooks/index.js.map +1 -1
  58. package/dist/src/hooks/use-keyboard.d.ts.map +1 -1
  59. package/dist/src/hooks/use-keyboard.js.map +1 -1
  60. package/dist/src/hooks/use-mouse.d.ts +1 -1
  61. package/dist/src/hooks/use-mouse.d.ts.map +1 -1
  62. package/dist/src/hooks/use-mouse.js.map +1 -1
  63. package/dist/src/hooks/use-quit.d.ts +21 -0
  64. package/dist/src/hooks/use-quit.d.ts.map +1 -0
  65. package/dist/src/hooks/use-quit.js +29 -0
  66. package/dist/src/hooks/use-quit.js.map +1 -0
  67. package/dist/src/hooks/use-scroll.d.ts.map +1 -1
  68. package/dist/src/hooks/use-scroll.js +2 -2
  69. package/dist/src/hooks/use-scroll.js.map +1 -1
  70. package/dist/src/hooks/useFrameStats.d.ts.map +1 -1
  71. package/dist/src/hooks/useFrameStats.js.map +1 -1
  72. package/dist/src/hosts/base.d.ts +3 -4
  73. package/dist/src/hosts/base.d.ts.map +1 -1
  74. package/dist/src/hosts/base.js +42 -6
  75. package/dist/src/hosts/base.js.map +1 -1
  76. package/dist/src/hosts/box.d.ts +3 -3
  77. package/dist/src/hosts/box.d.ts.map +1 -1
  78. package/dist/src/hosts/box.js +1 -1
  79. package/dist/src/hosts/box.js.map +1 -1
  80. package/dist/src/hosts/canvas.d.ts +3 -3
  81. package/dist/src/hosts/canvas.d.ts.map +1 -1
  82. package/dist/src/hosts/canvas.js +1 -1
  83. package/dist/src/hosts/canvas.js.map +1 -1
  84. package/dist/src/hosts/codeblock.d.ts +2 -2
  85. package/dist/src/hosts/codeblock.d.ts.map +1 -1
  86. package/dist/src/hosts/codeblock.js +1 -1
  87. package/dist/src/hosts/codeblock.js.map +1 -1
  88. package/dist/src/hosts/flex-container.d.ts +3 -3
  89. package/dist/src/hosts/flex-container.d.ts.map +1 -1
  90. package/dist/src/hosts/flex-container.js +5 -2
  91. package/dist/src/hosts/flex-container.js.map +1 -1
  92. package/dist/src/hosts/hstack.d.ts +1 -1
  93. package/dist/src/hosts/index.d.ts +8 -8
  94. package/dist/src/hosts/index.d.ts.map +1 -1
  95. package/dist/src/hosts/index.js +13 -13
  96. package/dist/src/hosts/index.js.map +1 -1
  97. package/dist/src/hosts/overlay-item.d.ts +1 -1
  98. package/dist/src/hosts/overlay.d.ts +1 -1
  99. package/dist/src/hosts/overlay.d.ts.map +1 -1
  100. package/dist/src/hosts/overlay.js +1 -1
  101. package/dist/src/hosts/overlay.js.map +1 -1
  102. package/dist/src/hosts/scroll.d.ts +3 -2
  103. package/dist/src/hosts/scroll.d.ts.map +1 -1
  104. package/dist/src/hosts/scroll.js +12 -3
  105. package/dist/src/hosts/scroll.js.map +1 -1
  106. package/dist/src/hosts/single-child.d.ts +1 -1
  107. package/dist/src/hosts/single-child.d.ts.map +1 -1
  108. package/dist/src/hosts/spacer.d.ts +2 -1
  109. package/dist/src/hosts/spacer.d.ts.map +1 -1
  110. package/dist/src/hosts/spacer.js +10 -9
  111. package/dist/src/hosts/spacer.js.map +1 -1
  112. package/dist/src/hosts/text.d.ts +2 -2
  113. package/dist/src/hosts/text.d.ts.map +1 -1
  114. package/dist/src/hosts/text.js +1 -1
  115. package/dist/src/hosts/text.js.map +1 -1
  116. package/dist/src/hosts/vstack.d.ts +1 -1
  117. package/dist/src/hosts/zstack.d.ts +2 -2
  118. package/dist/src/hosts/zstack.d.ts.map +1 -1
  119. package/dist/src/hosts/zstack.js +1 -1
  120. package/dist/src/hosts/zstack.js.map +1 -1
  121. package/dist/src/index.d.ts +17 -21
  122. package/dist/src/index.d.ts.map +1 -1
  123. package/dist/src/index.js +11 -15
  124. package/dist/src/index.js.map +1 -1
  125. package/dist/src/inline/index.d.ts.map +1 -1
  126. package/dist/src/inline/index.js +1 -1
  127. package/dist/src/inline/index.js.map +1 -1
  128. package/dist/src/motion/color-motion-value.d.ts +1 -1
  129. package/dist/src/motion/color-motion-value.d.ts.map +1 -1
  130. package/dist/src/motion/color-motion-value.js.map +1 -1
  131. package/dist/src/motion/color.d.ts +1 -1
  132. package/dist/src/motion/color.d.ts.map +1 -1
  133. package/dist/src/motion/color.js +1 -1
  134. package/dist/src/motion/color.js.map +1 -1
  135. package/dist/src/motion/color.test.js +2 -2
  136. package/dist/src/motion/color.test.js.map +1 -1
  137. package/dist/src/motion/hooks.d.ts +3 -3
  138. package/dist/src/motion/hooks.d.ts.map +1 -1
  139. package/dist/src/motion/hooks.js +1 -1
  140. package/dist/src/motion/hooks.js.map +1 -1
  141. package/dist/src/motion/index.d.ts +2 -2
  142. package/dist/src/motion/index.d.ts.map +1 -1
  143. package/dist/src/motion/index.js +3 -3
  144. package/dist/src/motion/index.js.map +1 -1
  145. package/dist/src/motion/motion-value.d.ts +5 -5
  146. package/dist/src/motion/motion-value.d.ts.map +1 -1
  147. package/dist/src/motion/motion-value.js +4 -4
  148. package/dist/src/motion/motion-value.js.map +1 -1
  149. package/dist/src/motion/motion-value.test.js +1 -1
  150. package/dist/src/motion/motion-value.test.js.map +1 -1
  151. package/dist/src/reconciler/host-config.d.ts +1 -1
  152. package/dist/src/reconciler/host-config.d.ts.map +1 -1
  153. package/dist/src/reconciler/host-config.js +1 -1
  154. package/dist/src/reconciler/host-config.js.map +1 -1
  155. package/dist/src/reconciler/types.d.ts +10 -5
  156. package/dist/src/reconciler/types.d.ts.map +1 -1
  157. package/dist/src/remote/Procedures.d.ts.map +1 -1
  158. package/dist/src/remote/Procedures.js.map +1 -1
  159. package/dist/src/remote/Router.d.ts +1 -1
  160. package/dist/src/remote/Router.d.ts.map +1 -1
  161. package/dist/src/remote/Router.js +1 -1
  162. package/dist/src/remote/Router.js.map +1 -1
  163. package/dist/src/remote/Server.d.ts +1 -1
  164. package/dist/src/remote/Server.d.ts.map +1 -1
  165. package/dist/src/remote/Server.js +3 -3
  166. package/dist/src/remote/Server.js.map +1 -1
  167. package/dist/src/remote/index.d.ts +2 -2
  168. package/dist/src/remote/index.d.ts.map +1 -1
  169. package/dist/src/remote/index.js +5 -5
  170. package/dist/src/remote/index.js.map +1 -1
  171. package/dist/src/renderer/core/FrameBuilder.d.ts.map +1 -1
  172. package/dist/src/renderer/core/FrameBuilder.js.map +1 -1
  173. package/dist/src/renderer/input/InputProcessor.d.ts +1 -0
  174. package/dist/src/renderer/input/InputProcessor.d.ts.map +1 -1
  175. package/dist/src/renderer/input/InputProcessor.js +7 -2
  176. package/dist/src/renderer/input/InputProcessor.js.map +1 -1
  177. package/dist/src/renderer/lifecycle/TerminalSetup.d.ts +2 -1
  178. package/dist/src/renderer/lifecycle/TerminalSetup.d.ts.map +1 -1
  179. package/dist/src/renderer/lifecycle/TerminalSetup.js +26 -17
  180. package/dist/src/renderer/lifecycle/TerminalSetup.js.map +1 -1
  181. package/dist/src/renderer/lifecycle/index.d.ts +1 -1
  182. package/dist/src/renderer/lifecycle/index.d.ts.map +1 -1
  183. package/dist/src/renderer/lifecycle/index.js +1 -1
  184. package/dist/src/renderer/lifecycle/index.js.map +1 -1
  185. package/dist/src/renderer/modes/FullscreenRenderer.d.ts +1 -1
  186. package/dist/src/renderer/modes/FullscreenRenderer.d.ts.map +1 -1
  187. package/dist/src/renderer/modes/InlineRenderer.d.ts +1 -1
  188. package/dist/src/renderer/modes/InlineRenderer.d.ts.map +1 -1
  189. package/dist/src/renderer/modes/InlineRenderer.js +1 -1
  190. package/dist/src/renderer/modes/InlineRenderer.js.map +1 -1
  191. package/dist/src/renderer/modes/StaticContentRenderer.d.ts.map +1 -1
  192. package/dist/src/renderer/modes/StaticContentRenderer.js.map +1 -1
  193. package/dist/src/renderer/modes/index.d.ts +1 -1
  194. package/dist/src/renderer/modes/index.d.ts.map +1 -1
  195. package/dist/src/renderer/modes/index.js.map +1 -1
  196. package/dist/src/renderer-context.js +1 -1
  197. package/dist/src/renderer-context.js.map +1 -1
  198. package/dist/src/renderer-types.d.ts +1 -1
  199. package/dist/src/renderer-types.d.ts.map +1 -1
  200. package/dist/src/renderer.d.ts +4 -2
  201. package/dist/src/renderer.d.ts.map +1 -1
  202. package/dist/src/renderer.js +45 -13
  203. package/dist/src/renderer.js.map +1 -1
  204. package/dist/src/test/index.d.ts +2 -2
  205. package/dist/src/test/index.d.ts.map +1 -1
  206. package/dist/src/test/index.js +1 -1
  207. package/dist/src/test/index.js.map +1 -1
  208. package/dist/src/test/render-tui.d.ts +7 -2
  209. package/dist/src/test/render-tui.d.ts.map +1 -1
  210. package/dist/src/test/render-tui.js +5 -2
  211. package/dist/src/test/render-tui.js.map +1 -1
  212. package/dist/src/utils/flex-layout.d.ts +1 -1
  213. package/dist/src/utils/flex-layout.d.ts.map +1 -1
  214. package/dist/src/utils/flex-layout.js +21 -7
  215. package/dist/src/utils/flex-layout.js.map +1 -1
  216. package/dist/src/utils/index.d.ts +4 -4
  217. package/dist/src/utils/index.d.ts.map +1 -1
  218. package/dist/src/utils/index.js +2 -2
  219. package/dist/src/utils/index.js.map +1 -1
  220. package/dist/src/utils/styles.d.ts.map +1 -1
  221. package/dist/src/utils/styles.js.map +1 -1
  222. package/dist/src/visualize/index.js +2 -2
  223. package/dist/src/visualize/index.js.map +1 -1
  224. package/dist/tsconfig.tsbuildinfo +1 -1
  225. package/jsx-runtime.ts +6 -6
  226. package/package.json +3 -2
  227. package/src/codeblock.tsx +1 -1
  228. package/src/components/Divider.tsx +1 -1
  229. package/src/components/Markdown.tsx +2 -2
  230. package/src/components/MultilineTextInput.tsx +9 -9
  231. package/src/components/Static.tsx +1 -1
  232. package/src/components/TextInput.tsx +8 -8
  233. package/src/components/index.ts +4 -4
  234. package/src/console/ConsoleCapture.ts +1 -1
  235. package/src/console/ConsolePopover.tsx +27 -26
  236. package/src/console/index.ts +1 -3
  237. package/src/console/useConsole.ts +2 -2
  238. package/src/debug/DebugOverlay.ts +3 -6
  239. package/src/dev/Toast.tsx +12 -10
  240. package/src/dev/index.ts +1 -1
  241. package/src/dev.tsx +11 -12
  242. package/src/highlight.ts +1 -1
  243. package/src/hooks/index.ts +4 -3
  244. package/src/hooks/use-keyboard.ts +1 -1
  245. package/src/hooks/use-mouse.ts +1 -1
  246. package/src/hooks/use-quit.ts +33 -0
  247. package/src/hooks/use-scroll.ts +9 -11
  248. package/src/hooks/useFrameStats.ts +1 -1
  249. package/src/hosts/base.ts +38 -8
  250. package/src/hosts/box.ts +4 -4
  251. package/src/hosts/canvas.ts +3 -3
  252. package/src/hosts/codeblock.ts +3 -3
  253. package/src/hosts/flex-container.ts +6 -4
  254. package/src/hosts/hstack.ts +1 -1
  255. package/src/hosts/index.ts +14 -14
  256. package/src/hosts/overlay-item.ts +1 -1
  257. package/src/hosts/overlay.ts +2 -2
  258. package/src/hosts/scroll.ts +16 -5
  259. package/src/hosts/single-child.ts +1 -1
  260. package/src/hosts/spacer.ts +12 -10
  261. package/src/hosts/text.ts +3 -3
  262. package/src/hosts/vstack.ts +1 -1
  263. package/src/hosts/zstack.ts +2 -2
  264. package/src/index.ts +60 -60
  265. package/src/inline/index.tsx +1 -1
  266. package/src/motion/color-motion-value.ts +1 -1
  267. package/src/motion/color.test.ts +2 -2
  268. package/src/motion/color.ts +2 -2
  269. package/src/motion/hooks.ts +3 -3
  270. package/src/motion/index.ts +8 -8
  271. package/src/motion/motion-value.test.ts +1 -1
  272. package/src/motion/motion-value.ts +11 -11
  273. package/src/reconciler/host-config.ts +3 -3
  274. package/src/reconciler/types.ts +10 -5
  275. package/src/remote/Procedures.ts +1 -7
  276. package/src/remote/Router.ts +3 -7
  277. package/src/remote/Server.ts +7 -12
  278. package/src/remote/index.ts +6 -10
  279. package/src/renderer/core/FrameBuilder.ts +1 -1
  280. package/src/renderer/input/InputProcessor.ts +7 -2
  281. package/src/renderer/lifecycle/TerminalSetup.ts +29 -18
  282. package/src/renderer/lifecycle/index.ts +1 -1
  283. package/src/renderer/modes/FullscreenRenderer.ts +1 -1
  284. package/src/renderer/modes/InlineRenderer.ts +2 -2
  285. package/src/renderer/modes/StaticContentRenderer.ts +1 -1
  286. package/src/renderer/modes/index.ts +1 -1
  287. package/src/renderer-context.ts +1 -1
  288. package/src/renderer-types.ts +1 -1
  289. package/src/renderer.ts +62 -25
  290. package/src/test/index.ts +4 -4
  291. package/src/test/render-tui.ts +10 -3
  292. package/src/utils/flex-layout.ts +21 -8
  293. package/src/utils/index.ts +8 -8
  294. package/src/utils/styles.ts +2 -2
  295. package/src/visualize/index.tsx +2 -2
@@ -1,9 +1,9 @@
1
1
  // flex-container.ts — Unified base class for VStackHost and HStackHost
2
- import type { CellBuffer, Palette, Color } from "@effect-tui/core"
2
+ import type { CellBuffer, Color, Palette } from "@effect-tui/core"
3
3
  import { splitConstraints } from "@effect-tui/core"
4
- import type { HostContext, Rect, Size, CommonProps } from "../reconciler/types.js"
4
+ import type { CommonProps, HostContext, Rect, Size } from "../reconciler/types.js"
5
+ import { type FlexAlignment, type FlexAxis, layoutFlex, measureFlex, resolveBgStyle } from "../utils/index.js"
5
6
  import { BaseHost } from "./base.js"
6
- import { measureFlex, layoutFlex, type FlexAxis, type FlexAlignment, resolveBgStyle } from "../utils/index.js"
7
7
 
8
8
  export type CrossAlignment<A extends FlexAxis> = A extends "vertical"
9
9
  ? "leading" | "center" | "trailing"
@@ -84,12 +84,14 @@ export class FlexContainerHost<A extends FlexAxis> extends BaseHost {
84
84
 
85
85
  override layout(rect: Rect): void {
86
86
  super.layout(rect)
87
+ // Use this.rect (constrained) not rect (raw input)
88
+ if (!this.rect) return
87
89
  const stretchCross = this.axis === "vertical" ? this.alignment === "leading" : this.alignment === "top"
88
90
  layoutFlex(
89
91
  this.axis,
90
92
  this.layoutChildren,
91
93
  this.cachedSizes,
92
- rect,
94
+ this.rect,
93
95
  this.spacing,
94
96
  toFlexAlignment(this.axis, this.alignment),
95
97
  stretchCross,
@@ -1,4 +1,4 @@
1
- import type { HostContext, CommonProps } from "../reconciler/types.js"
1
+ import type { CommonProps, HostContext } from "../reconciler/types.js"
2
2
  import { FlexContainerHost, type FlexContainerProps } from "./flex-container.js"
3
3
 
4
4
  export interface HStackProps extends CommonProps {
@@ -1,30 +1,30 @@
1
- import type { HostContext, CommonProps } from "../reconciler/types.js"
1
+ import type { CommonProps, HostContext } from "../reconciler/types.js"
2
2
  import type { BaseHost } from "./base.js"
3
- import { TextHost, RawTextHost } from "./text.js"
4
- import { SpacerHost } from "./spacer.js"
5
- import { VStackHost } from "./vstack.js"
6
- import { HStackHost } from "./hstack.js"
7
- import { ZStackHost } from "./zstack.js"
8
3
  import { BoxHost } from "./box.js"
9
4
  import { CanvasHost } from "./canvas.js"
10
5
  import { CodeBlockHost } from "./codeblock.js"
11
- import { ScrollHost } from "./scroll.js"
6
+ import { HStackHost } from "./hstack.js"
12
7
  import { OverlayHost } from "./overlay.js"
13
8
  import { OverlayItemHost } from "./overlay-item.js"
14
- export { SingleChildHost } from "./single-child.js"
9
+ import { ScrollHost } from "./scroll.js"
10
+ import { SpacerHost } from "./spacer.js"
11
+ import { RawTextHost, TextHost } from "./text.js"
12
+ import { VStackHost } from "./vstack.js"
13
+ import { ZStackHost } from "./zstack.js"
15
14
 
16
15
  export { BaseHost } from "./base.js"
17
- export { TextHost, RawTextHost, type TextProps } from "./text.js"
18
- export { SpacerHost, type SpacerProps } from "./spacer.js"
19
- export { VStackHost, type VStackProps } from "./vstack.js"
20
- export { HStackHost, type HStackProps } from "./hstack.js"
21
- export { ZStackHost, type ZStackProps } from "./zstack.js"
22
16
  export { BoxHost, type BoxProps } from "./box.js"
23
17
  export { CanvasHost, type CanvasProps, type DrawContext } from "./canvas.js"
24
18
  export { CodeBlockHost, type CodeBlockProps } from "./codeblock.js"
25
- export { ScrollHost, type ScrollProps } from "./scroll.js"
19
+ export { HStackHost, type HStackProps } from "./hstack.js"
26
20
  export { OverlayHost, type OverlayProps } from "./overlay.js"
27
21
  export { OverlayItemHost, type OverlayItemProps } from "./overlay-item.js"
22
+ export { ScrollHost, type ScrollProps } from "./scroll.js"
23
+ export { SingleChildHost } from "./single-child.js"
24
+ export { SpacerHost, type SpacerProps } from "./spacer.js"
25
+ export { RawTextHost, TextHost, type TextProps } from "./text.js"
26
+ export { VStackHost, type VStackProps } from "./vstack.js"
27
+ export { ZStackHost, type ZStackProps } from "./zstack.js"
28
28
 
29
29
  // Use any to allow specialized props on each host type
30
30
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import type { CellBuffer, Palette, Rect, Size } from "@effect-tui/core"
9
- import type { HostContext, CommonProps } from "../reconciler/types.js"
9
+ import type { CommonProps, HostContext } from "../reconciler/types.js"
10
10
  import { SingleChildHost } from "./single-child.js"
11
11
 
12
12
  type HAlign = "left" | "center" | "right"
@@ -17,9 +17,9 @@
17
17
  */
18
18
 
19
19
  import type { CellBuffer, Palette, Rect, Size } from "@effect-tui/core"
20
- import type { HostContext, CommonProps } from "../reconciler/types.js"
21
- import { BaseHost } from "./base.js"
20
+ import type { CommonProps, HostContext } from "../reconciler/types.js"
22
21
  import { alignInRect } from "../utils/index.js"
22
+ import { BaseHost } from "./base.js"
23
23
  import type { OverlayItemHost } from "./overlay-item.js"
24
24
 
25
25
  export interface OverlayProps extends CommonProps {}
@@ -1,8 +1,8 @@
1
1
  // scroll.ts — Scrollable container host
2
- import type { CellBuffer, Palette, Color } from "@effect-tui/core"
3
- import type { HostContext, Rect, Size, CommonProps } from "../reconciler/types.js"
4
- import { SingleChildHost } from "./single-child.js"
2
+ import type { CellBuffer, Color, Palette } from "@effect-tui/core"
3
+ import type { CommonProps, HostContext, Rect, Size } from "../reconciler/types.js"
5
4
  import { resolveInheritedBgStyle } from "../utils/index.js"
5
+ import { SingleChildHost } from "./single-child.js"
6
6
 
7
7
  export interface ScrollProps extends CommonProps {
8
8
  /** Scroll axis: "vertical" (default), "horizontal", or "both" */
@@ -38,6 +38,9 @@ export class ScrollHost extends SingleChildHost {
38
38
  bg?: Color
39
39
  showScrollbar = true
40
40
  sticky = false
41
+
42
+ // Scroll is greedy by default - expands to fill available space
43
+ override greedy: boolean | number | undefined = 1
41
44
  onContentSize?: (width: number, height: number) => void
42
45
  onViewportSize?: (width: number, height: number) => void
43
46
  onEffectiveOffset?: (offset: number) => void
@@ -85,8 +88,12 @@ export class ScrollHost extends SingleChildHost {
85
88
  // Note: onContentSize callback is deferred to layout() to keep measure() pure
86
89
  }
87
90
 
88
- // Scroll container is greedy - takes all available space (after constraints)
89
- return this.constrainResult({ w: constrained.w, h: constrained.h })
91
+ // Report natural content size (clamped to constrained bounds)
92
+ // Greedy expansion happens in layout phase via layoutFlex
93
+ const naturalW = Math.min(this.contentWidth, constrained.w)
94
+ const naturalH = Math.min(this.contentHeight, constrained.h)
95
+
96
+ return this.constrainResult({ w: naturalW, h: naturalH })
90
97
  }
91
98
 
92
99
  override layout(rect: Rect): void {
@@ -239,6 +246,10 @@ export class ScrollHost extends SingleChildHost {
239
246
 
240
247
  override updateProps(props: Record<string, unknown>): void {
241
248
  super.updateProps(props)
249
+ // Scroll is greedy by default unless explicitly set to false
250
+ if (!("greedy" in props)) {
251
+ this.greedy = 1
252
+ }
242
253
  if (props.axis !== undefined) this.axis = (props.axis as ScrollProps["axis"]) ?? "vertical"
243
254
  if (props.offset !== undefined) this.offset = props.offset as number
244
255
  if (props.offsetX !== undefined) this.offsetX = props.offsetX as number
@@ -1,4 +1,4 @@
1
- import type { HostInstance, CommonProps, HostContext } from "../reconciler/types.js"
1
+ import type { CommonProps, HostContext, HostInstance } from "../reconciler/types.js"
2
2
  import { BaseHost } from "./base.js"
3
3
 
4
4
  /**
@@ -1,5 +1,5 @@
1
1
  import type { CellBuffer, Palette } from "@effect-tui/core"
2
- import type { HostContext, Rect, Size, CommonProps } from "../reconciler/types.js"
2
+ import type { CommonProps, HostContext, Rect, Size } from "../reconciler/types.js"
3
3
  import { BaseHost } from "./base.js"
4
4
 
5
5
  export interface SpacerProps extends CommonProps {
@@ -13,15 +13,16 @@ export class SpacerHost extends BaseHost {
13
13
  minWidth = 0
14
14
  minHeight = 0
15
15
 
16
+ // Spacers are greedy by default
17
+ override greedy: boolean | number | undefined = 1
18
+
16
19
  constructor(props: SpacerProps, ctx: HostContext) {
17
- // Spacers have flexGrow=1 by default
18
- const propsWithDefaults = { flexGrow: 1, ...props }
19
- super("spacer", propsWithDefaults, ctx)
20
- this.updateProps(propsWithDefaults)
20
+ super("spacer", props, ctx)
21
+ this.updateProps(props)
21
22
  }
22
23
 
23
24
  measure(_maxW: number, _maxH: number): Size {
24
- // Spacers have no natural size, they expand via flexGrow
25
+ // Spacers have no natural size, they expand via greedy
25
26
  return { w: this.minWidth, h: this.minHeight }
26
27
  }
27
28
 
@@ -34,10 +35,11 @@ export class SpacerHost extends BaseHost {
34
35
  }
35
36
 
36
37
  override updateProps(props: Record<string, unknown>): void {
37
- // Keep spacer default flexGrow=1 unless explicitly provided
38
- const flexGrow = props.flexGrow as number | undefined
39
- const propsWithDefaults = flexGrow === undefined ? { ...props, flexGrow: 1 } : props
40
- super.updateProps(propsWithDefaults)
38
+ super.updateProps(props)
39
+ // Spacer is greedy by default unless explicitly set to false
40
+ if (!("greedy" in props)) {
41
+ this.greedy = 1
42
+ }
41
43
  if (props.minWidth !== undefined) this.minWidth = props.minWidth as number
42
44
  if (props.minHeight !== undefined) this.minHeight = props.minHeight as number
43
45
  }
package/src/hosts/text.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { displayWidth, type CellBuffer, type Palette, type Color } from "@effect-tui/core"
2
- import type { HostContext, Rect, Size, CommonProps } from "../reconciler/types.js"
3
- import { BaseHost, getInheritedBg } from "./base.js"
1
+ import { type CellBuffer, type Color, displayWidth, type Palette } from "@effect-tui/core"
2
+ import type { CommonProps, HostContext, Rect, Size } from "../reconciler/types.js"
4
3
  import { resolveInheritedBgStyle, styleIdFromProps } from "../utils/index.js"
4
+ import { BaseHost, getInheritedBg } from "./base.js"
5
5
 
6
6
  export interface TextProps extends CommonProps {
7
7
  fg?: Color
@@ -1,4 +1,4 @@
1
- import type { HostContext, CommonProps } from "../reconciler/types.js"
1
+ import type { CommonProps, HostContext } from "../reconciler/types.js"
2
2
  import { FlexContainerHost, type FlexContainerProps } from "./flex-container.js"
3
3
 
4
4
  export interface VStackProps extends CommonProps {
@@ -1,7 +1,7 @@
1
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"
2
+ import type { CommonProps, HostContext, Rect, Size } from "../reconciler/types.js"
4
3
  import { alignInRect, type HAlign, type VAlign } from "../utils/index.js"
4
+ import { BaseHost } from "./base.js"
5
5
 
6
6
  export interface ZStackProps extends CommonProps {
7
7
  alignment?: { h?: "leading" | "center" | "trailing"; v?: "top" | "center" | "bottom" }
package/src/index.ts CHANGED
@@ -1,88 +1,88 @@
1
1
  // Convenience: re-export core theming/types so apps can import from one place
2
2
  export * from "@effect-tui/core"
3
-
4
- // Renderer
5
- export {
6
- createRenderer,
7
- createRoot,
8
- render,
9
- useRenderer,
10
- useTerminalSize,
11
- RendererContext,
12
- } from "./renderer.js"
13
- export type { TuiRenderer, RendererOptions, Root, FrameStats, RenderInstance } from "./renderer.js"
14
-
3
+ export type { CodeBlockProps } from "./codeblock.js"
15
4
  // CodeBlock (syntax highlighting)
16
5
  export { CodeBlock } from "./codeblock.js"
17
- export type { CodeBlockProps } from "./codeblock.js"
18
-
6
+ // Input components
7
+ export {
8
+ Markdown,
9
+ type MarkdownProps,
10
+ type MarkdownTheme,
11
+ MultilineTextInput,
12
+ type MultilineTextInputProps,
13
+ Overlay,
14
+ type OverlayItemProps,
15
+ type OverlayProps,
16
+ Static,
17
+ type StaticProps,
18
+ TextInput,
19
+ type TextInputProps,
20
+ } from "./components/index.js"
21
+ // Debug
22
+ export { DiagnosticsPanel } from "./debug/DiagnosticsPanel.js"
23
+ // Development utilities (HMR)
24
+ export {
25
+ autoHmr,
26
+ type DevRenderOptions,
27
+ type DevRenderResult,
28
+ devMain,
29
+ devRender,
30
+ hmr,
31
+ hmrState,
32
+ } from "./dev.js"
19
33
  // Highlight utilities
20
34
  export {
21
- highlightCode,
22
- toPlainLines,
23
35
  type HighlightLine,
24
36
  type HighlightToken,
25
37
  type HighlightTokenStyle,
38
+ highlightCode,
39
+ toPlainLines,
26
40
  } from "./highlight.js"
27
-
28
- // Hooks
29
- export { useKeyboard, useMouse, usePaste, useScroll } from "./hooks/index.js"
30
- export { useFrameStats } from "./hooks/useFrameStats.js"
31
41
  export type {
42
+ ScrollState,
32
43
  UseKeyboardOptions,
33
44
  UseMouseOptions,
34
45
  UseScrollOptions,
35
46
  UseScrollReturn,
36
- ScrollState,
37
47
  } from "./hooks/index.js"
38
-
48
+ // Hooks
49
+ export { useKeyboard, useMouse, usePaste, useQuit, useScroll } from "./hooks/index.js"
50
+ export { useFrameStats } from "./hooks/useFrameStats.js"
51
+ export type { BorderKind, BoxProps } from "./hosts/box.js"
52
+ export type { CanvasProps, DrawContext } from "./hosts/canvas.js"
53
+ export type { HStackProps } from "./hosts/hstack.js"
54
+ export type { ScrollProps } from "./hosts/scroll.js"
55
+ export type { SpacerProps } from "./hosts/spacer.js"
56
+ export type { TextProps } from "./hosts/text.js"
57
+ export type { VStackProps } from "./hosts/vstack.js"
58
+ export type { ZStackProps } from "./hosts/zstack.js"
59
+ export type { ColorInput, MotionValue, RGBA, SpringOptions } from "./motion/index.js"
39
60
  // Motion (spring animations)
40
61
  export {
41
- useMotionValue,
42
- useSpring,
43
- useSprings,
44
- useSpringRenderer,
45
- useMotionValueEvent,
46
- useAnimationFrame,
47
- motionValue,
48
62
  // Color springs
49
63
  ColorMotionValue,
64
+ motionValue,
65
+ useAnimationFrame,
50
66
  useColorMotionValue,
51
67
  useColorSpring,
68
+ useMotionValue,
69
+ useMotionValueEvent,
70
+ useSpring,
71
+ useSpringRenderer,
72
+ useSprings,
52
73
  } from "./motion/index.js"
53
- export type { SpringOptions, MotionValue, RGBA, ColorInput } from "./motion/index.js"
54
-
55
74
  // Types
56
- export type { HostInstance, HostContext, Rect, Size, CommonProps } from "./reconciler/types.js"
57
- export type { TextProps } from "./hosts/text.js"
58
- export type { SpacerProps } from "./hosts/spacer.js"
59
- export type { VStackProps } from "./hosts/vstack.js"
60
- export type { HStackProps } from "./hosts/hstack.js"
61
- export type { ZStackProps } from "./hosts/zstack.js"
62
- export type { BoxProps, BorderKind } from "./hosts/box.js"
63
- export type { CanvasProps, DrawContext } from "./hosts/canvas.js"
64
- export type { ScrollProps } from "./hosts/scroll.js"
65
-
66
- // Debug
67
- export { DiagnosticsPanel } from "./debug/DiagnosticsPanel.js"
68
-
69
- // Input components
70
- export { TextInput, type TextInputProps } from "./components/index.js"
71
- export { MultilineTextInput, type MultilineTextInputProps } from "./components/index.js"
72
- export { Markdown, type MarkdownProps, type MarkdownTheme } from "./components/index.js"
73
- export { Static, type StaticProps } from "./components/index.js"
74
- export { Overlay, type OverlayProps, type OverlayItemProps } from "./components/index.js"
75
-
76
- // Development utilities (HMR)
75
+ export type { CommonProps, HostContext, HostInstance, Rect, Size } from "./reconciler/types.js"
76
+ export type { FrameStats, RendererOptions, RenderInstance, Root, TuiRenderer } from "./renderer.js"
77
+ // Renderer
77
78
  export {
78
- devRender,
79
- devMain,
80
- hmr,
81
- hmrState,
82
- autoHmr,
83
- type DevRenderOptions,
84
- type DevRenderResult,
85
- } from "./dev.js"
79
+ createRenderer,
80
+ createRoot,
81
+ RendererContext,
82
+ render,
83
+ useRenderer,
84
+ useTerminalSize,
85
+ } from "./renderer.js"
86
86
 
87
87
  // JSX types are provided via jsxImportSource: "@effect-tui/react"
88
88
  // See jsx-runtime.ts at package root for the JSX namespace
@@ -7,8 +7,8 @@
7
7
  // }).pipe(Effect.provide(InlineRendererLive))
8
8
  // Effect.runPromise(program)
9
9
 
10
- import { Context, Effect, Either, Layer } from "effect"
11
10
  import { Colors } from "@effect-tui/core"
11
+ import { Context, Effect, Either, Layer } from "effect"
12
12
  import { createRenderer, createRoot } from "../renderer.js"
13
13
 
14
14
  // Spinner frames
@@ -2,7 +2,7 @@
2
2
  * ColorMotionValue - animates RGBA colors using 4 internal numeric springs.
3
3
  */
4
4
 
5
- import { parseColor, type RGBA, type ColorInput } from "./color.js"
5
+ import { type ColorInput, parseColor, type RGBA } from "./color.js"
6
6
  import { EventEmitter } from "./event-emitter.js"
7
7
  import { MotionValue } from "./motion-value.js"
8
8
  import type { SpringOptions } from "./types.js"
@@ -1,5 +1,5 @@
1
- import { describe, it, expect } from "vitest"
2
- import { parseColor, isColorInput } from "./color.js"
1
+ import { describe, expect, it } from "vitest"
2
+ import { isColorInput, parseColor } from "./color.js"
3
3
 
4
4
  describe("parseColor", () => {
5
5
  describe("hex", () => {
@@ -2,9 +2,9 @@
2
2
  // Re-exports from @effect-tui/core with local aliases
3
3
 
4
4
  export {
5
- parseColorRGBA as parseColor,
5
+ type ColorInput,
6
6
  hslToRgba as hslToRgb,
7
7
  isColorInput,
8
+ parseColorRGBA as parseColor,
8
9
  type RGBA,
9
- type ColorInput,
10
10
  } from "@effect-tui/core"
@@ -4,11 +4,11 @@
4
4
 
5
5
  import { useCallback, useEffect, useRef } from "react"
6
6
  import { useRenderer } from "../renderer.js"
7
- import { MotionValue } from "./motion-value.js"
7
+ import type { ColorInput } from "./color.js"
8
8
  import { ColorMotionValue } from "./color-motion-value.js"
9
- import type { SpringOptions } from "./types.js"
10
9
  import type { EventName, Subscriber } from "./event-emitter.js"
11
- import type { ColorInput } from "./color.js"
10
+ import { MotionValue } from "./motion-value.js"
11
+ import type { SpringOptions } from "./types.js"
12
12
 
13
13
  // Global requestRender callback - set by useSpringRenderer hook
14
14
  let globalRequestRender: (() => void) | null = null
@@ -1,17 +1,17 @@
1
1
  // Motion-inspired animation system for TUI
2
2
  // Analytical spring physics (not Euler integration) + setTimeout-based frame loop
3
3
 
4
- export type { SpringOptions, MotionValue, RGBA, ColorInput } from "./motion-value.js"
4
+ export { useAnimationFrame } from "./frame.js"
5
+ export type { ColorInput, MotionValue, RGBA, SpringOptions } from "./motion-value.js"
5
6
  export {
6
- motionValue,
7
- useMotionValue,
8
- useSpring,
9
- useSprings,
10
- useSpringRenderer,
11
- useMotionValueEvent,
12
7
  // Color springs
13
8
  ColorMotionValue,
9
+ motionValue,
14
10
  useColorMotionValue,
15
11
  useColorSpring,
12
+ useMotionValue,
13
+ useMotionValueEvent,
14
+ useSpring,
15
+ useSpringRenderer,
16
+ useSprings,
16
17
  } from "./motion-value.js"
17
- export { useAnimationFrame } from "./frame.js"
@@ -1,4 +1,4 @@
1
- import { describe, it, expect } from "vitest"
1
+ import { describe, expect, it } from "vitest"
2
2
  import { motionValue } from "./motion-value.js"
3
3
 
4
4
  describe("MotionValue", () => {
@@ -3,10 +3,10 @@
3
3
  * Inspired by framer-motion's MotionValue.
4
4
  */
5
5
 
6
- import { subscribeFrame } from "./frame.js"
7
6
  import { EventEmitter } from "./event-emitter.js"
7
+ import { subscribeFrame } from "./frame.js"
8
8
  import { createSpringResolver, springFromVisualDuration } from "./spring-math.js"
9
- import { type SpringOptions, DEFAULT_SPRING_OPTIONS } from "./types.js"
9
+ import { DEFAULT_SPRING_OPTIONS, type SpringOptions } from "./types.js"
10
10
 
11
11
  /** Create a MotionValue. Factory function like Motion's motionValue(). */
12
12
  export function motionValue<T>(initial: T): MotionValue<T> {
@@ -123,18 +123,18 @@ export class MotionValue<T = number> extends EventEmitter<T> {
123
123
  }
124
124
  }
125
125
 
126
- // Re-export everything for backwards compatibility
127
- export { type SpringOptions, DEFAULT_SPRING_OPTIONS } from "./types.js"
128
- export type { EventName, Subscriber } from "./event-emitter.js"
129
- export { createSpringResolver, springFromVisualDuration, isSpringSettled } from "./spring-math.js"
126
+ export type { ColorInput, RGBA } from "./color.js"
130
127
  export { ColorMotionValue } from "./color-motion-value.js"
128
+ export type { EventName, Subscriber } from "./event-emitter.js"
131
129
  export {
130
+ useColorMotionValue,
131
+ useColorSpring,
132
132
  useMotionValue,
133
+ useMotionValueEvent,
133
134
  useSpring,
134
- useSprings,
135
135
  useSpringRenderer,
136
- useMotionValueEvent,
137
- useColorMotionValue,
138
- useColorSpring,
136
+ useSprings,
139
137
  } from "./hooks.js"
140
- export type { RGBA, ColorInput } from "./color.js"
138
+ export { createSpringResolver, isSpringSettled, springFromVisualDuration } from "./spring-math.js"
139
+ // Re-export everything for backwards compatibility
140
+ export { DEFAULT_SPRING_OPTIONS, type SpringOptions } from "./types.js"
@@ -1,8 +1,8 @@
1
- import Reconciler from "react-reconciler"
2
1
  import { createContext } from "react"
3
- import type { HostInstance, HostContext } from "./types.js"
4
- import { createHostInstance, createTextInstance, type RawTextHost, type BaseHost } from "../hosts/index.js"
2
+ import Reconciler from "react-reconciler"
3
+ import { type BaseHost, createHostInstance, createTextInstance, type RawTextHost } from "../hosts/index.js"
5
4
  import { noopMethods } from "./noop-methods.js"
5
+ import type { HostContext, HostInstance } from "./types.js"
6
6
 
7
7
  // ============================================================================
8
8
  // Type Definitions
@@ -1,4 +1,4 @@
1
- import type { CellBuffer, Palette, Size, Rect } from "@effect-tui/core"
1
+ import type { CellBuffer, Palette, Rect, Size } from "@effect-tui/core"
2
2
 
3
3
  // Re-export for backwards compatibility
4
4
  export type { Size, Rect }
@@ -92,10 +92,15 @@ export interface HostContext {
92
92
  * With the constraint, it reports exactly 10, so spacer gets the rest.
93
93
  */
94
94
  export interface CommonProps {
95
- /** Flex grow factor - how much extra space this view takes (default: 0) */
96
- flexGrow?: number
97
- /** Flex shrink factor - how much this view shrinks when space is tight (default: 1) */
98
- flexShrink?: number
95
+ /**
96
+ * Greedy layout - element expands to fill remaining space.
97
+ * - `true` or `1`: takes 1 share of remaining space
98
+ * - number > 1: takes proportionally more (e.g., `greedy={2}` gets 2x space)
99
+ * - `false` or undefined: hugs content (default)
100
+ *
101
+ * Scroll and Spacer are greedy by default.
102
+ */
103
+ greedy?: boolean | number
99
104
 
100
105
  // ─────────────────────────────────────────────────────────────
101
106
  // Frame constraints (like SwiftUI's .frame modifier)
@@ -47,10 +47,4 @@ const Info = Rpc.make("Info", {
47
47
  })
48
48
 
49
49
  // Group all RPCs together
50
- export class TuiRpcs extends RpcGroup.make(
51
- Screenshot,
52
- SendKey,
53
- Paste,
54
- Resize,
55
- Info,
56
- ) {}
50
+ export class TuiRpcs extends RpcGroup.make(Screenshot, SendKey, Paste, Resize, Info) {}
@@ -1,7 +1,7 @@
1
1
  // RPC handlers for remote session control
2
2
  import type { Rpc } from "@effect/rpc"
3
- import { Effect, Layer, Context } from "effect"
4
3
  import type { KeyMsg } from "@effect-tui/core"
4
+ import { Context, Effect, type Layer } from "effect"
5
5
  import { TuiRpcs } from "./Procedures.js"
6
6
 
7
7
  // Service interface for the TUI session
@@ -19,10 +19,7 @@ export interface TuiSessionImpl {
19
19
  }
20
20
  }
21
21
 
22
- export class TuiSession extends Context.Tag("TuiSession")<
23
- TuiSession,
24
- TuiSessionImpl
25
- >() {}
22
+ export class TuiSession extends Context.Tag("TuiSession")<TuiSession, TuiSessionImpl>() {}
26
23
 
27
24
  // Create the RPC handlers layer
28
25
  export const HandlersLive: Layer.Layer<
@@ -55,8 +52,7 @@ export const HandlersLive: Layer.Layer<
55
52
 
56
53
  Paste: ({ text }) => Effect.sync(() => session.dispatchPaste(text)),
57
54
 
58
- Resize: ({ width, height }) =>
59
- Effect.sync(() => session.dispatchResize(width, height)),
55
+ Resize: ({ width, height }) => Effect.sync(() => session.dispatchResize(width, height)),
60
56
 
61
57
  Info: () => Effect.sync(() => session.getInfo()),
62
58
  }
@@ -1,9 +1,10 @@
1
1
  // Remote server that exposes TUI session via Unix socket
2
- import { Effect, Layer } from "effect"
3
- import { RpcSerialization, RpcServer } from "@effect/rpc"
4
- import { BunSocketServer } from "@effect/platform-bun"
2
+
5
3
  import * as fs from "node:fs"
6
4
  import * as path from "node:path"
5
+ import { BunSocketServer } from "@effect/platform-bun"
6
+ import { RpcSerialization, RpcServer } from "@effect/rpc"
7
+ import { Effect, Layer } from "effect"
7
8
  import { TuiRpcs } from "./Procedures.js"
8
9
  import { HandlersLive, TuiSession, type TuiSessionImpl } from "./Router.js"
9
10
 
@@ -18,8 +19,7 @@ const ensureSocketDir = Effect.sync(() => {
18
19
  })
19
20
 
20
21
  // Get socket path for current process
21
- export const getSocketPath = (pid?: number) =>
22
- path.join(SOCKET_DIR, `${pid ?? process.pid}.sock`)
22
+ export const getSocketPath = (pid?: number) => path.join(SOCKET_DIR, `${pid ?? process.pid}.sock`)
23
23
 
24
24
  // Clean up socket file
25
25
  const cleanupSocket = (socketPath: string) =>
@@ -34,10 +34,7 @@ const cleanupSocket = (socketPath: string) =>
34
34
  })
35
35
 
36
36
  // Create the server layer
37
- export const makeServerLayer = (
38
- sessionImpl: TuiSessionImpl,
39
- socketPath?: string,
40
- ) => {
37
+ export const makeServerLayer = (sessionImpl: TuiSessionImpl, socketPath?: string) => {
41
38
  const actualPath = socketPath ?? getSocketPath()
42
39
 
43
40
  // Setup layer - creates directory, cleans stale socket
@@ -52,9 +49,7 @@ export const makeServerLayer = (
52
49
  )
53
50
 
54
51
  // RPC handlers layer (needs TuiSession)
55
- const HandlersLayer = HandlersLive.pipe(
56
- Layer.provide(Layer.succeed(TuiSession, sessionImpl)),
57
- )
52
+ const HandlersLayer = HandlersLive.pipe(Layer.provide(Layer.succeed(TuiSession, sessionImpl)))
58
53
 
59
54
  // Full RPC server stack:
60
55
  // 1. RpcServer.layer creates the RPC server, needs handlers