@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,16 @@
1
+ import Reconciler from "react-reconciler";
2
+ import type { HostInstance, HostContext } from "./types.js";
3
+ /** Container is the root of our host tree */
4
+ export interface Container {
5
+ root: HostInstance | null;
6
+ ctx: HostContext;
7
+ }
8
+ export declare const reconciler: Reconciler.Reconciler<unknown, unknown, unknown, unknown, unknown, unknown>;
9
+ export declare const flushPassiveEffects: (() => boolean) & (() => void);
10
+ export declare const flushSync: {
11
+ (): void;
12
+ <R>(fn: () => R): R;
13
+ } & (<T>(fn?: () => T) => T);
14
+ export declare const batchedUpdates: (<A, R>(fn: (a: A) => R, a: A) => R) & (<T>(fn: () => T) => T);
15
+ export declare const discreteUpdates: (<A, B, C, D, R>(fn: (arg0: A, arg1: B, arg2: C, arg3: D) => R, a: A, b: B, c: C, d: D) => R) & (<T>(fn: () => T) => T);
16
+ //# sourceMappingURL=host-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-config.d.ts","sourceRoot":"","sources":["../../../src/reconciler/host-config.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,kBAAkB,CAAA;AAEzC,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAO3D,6CAA6C;AAC7C,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,YAAY,GAAG,IAAI,CAAA;IACzB,GAAG,EAAE,WAAW,CAAA;CAChB;AAoPD,eAAO,MAAM,UAAU,6EAAgC,CAAA;AAgBvD,eAAO,MAAM,mBAAmB,2BARH,IAAI,CAQ8C,CAAA;AAC/E,eAAO,MAAM,SAAS;;;MARR,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,CAQ2C,CAAA;AAC9E,eAAO,MAAM,cAAc,2CARR,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,CAQ8C,CAAA;AACrF,eAAO,MAAM,eAAe,oGARR,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,CAQ+C,CAAA"}
@@ -0,0 +1,174 @@
1
+ import Reconciler from "react-reconciler";
2
+ import { createContext } from "react";
3
+ import { createHostInstance, createTextInstance } from "../hosts/index.js";
4
+ // ============================================================================
5
+ // Priority Management
6
+ // ============================================================================
7
+ const NoEventPriority = 0;
8
+ const DefaultEventPriority = 16;
9
+ let currentUpdatePriority = NoEventPriority;
10
+ // ============================================================================
11
+ // Host Config
12
+ // ============================================================================
13
+ // Note: We define methods with proper types but cast the final config to any
14
+ // because react-reconciler's HostConfig type has ~80 required methods and
15
+ // changes frequently between versions. This gives us type safety within
16
+ // each method while avoiding type compatibility issues with the reconciler.
17
+ const hostConfig = {
18
+ supportsMutation: true,
19
+ supportsPersistence: false,
20
+ supportsHydration: false,
21
+ createInstance(type, props, rootContainer) {
22
+ return createHostInstance(type, props, rootContainer.ctx);
23
+ },
24
+ appendChild(parent, child) {
25
+ parent.appendChild(child);
26
+ },
27
+ removeChild(parent, child) {
28
+ parent.removeChild(child);
29
+ child.destroy();
30
+ },
31
+ insertBefore(parent, child, beforeChild) {
32
+ parent.insertBefore(child, beforeChild);
33
+ },
34
+ insertInContainerBefore(container, child, beforeChild) {
35
+ if (container.root) {
36
+ container.root.insertBefore(child, beforeChild);
37
+ }
38
+ },
39
+ removeChildFromContainer(container, child) {
40
+ if (container.root) {
41
+ container.root.removeChild(child);
42
+ child.destroy();
43
+ }
44
+ },
45
+ prepareForCommit() {
46
+ return null;
47
+ },
48
+ resetAfterCommit(container) {
49
+ container.ctx.requestRender();
50
+ },
51
+ getRootHostContext() {
52
+ return { isInsideText: false };
53
+ },
54
+ getChildHostContext(parentHostContext, type) {
55
+ const isInsideText = type === "text" || parentHostContext.isInsideText;
56
+ return { ...parentHostContext, isInsideText };
57
+ },
58
+ shouldSetTextContent() {
59
+ return false;
60
+ },
61
+ createTextInstance(text, rootContainer, hostContext) {
62
+ // Raw text nodes are only valid inside <text> elements
63
+ if (!hostContext.isInsideText) {
64
+ console.warn("Text nodes should be inside <text> elements");
65
+ }
66
+ return createTextInstance(text, rootContainer.ctx);
67
+ },
68
+ scheduleTimeout: setTimeout,
69
+ cancelTimeout: clearTimeout,
70
+ noTimeout: -1,
71
+ shouldAttemptEagerTransition() {
72
+ return false;
73
+ },
74
+ finalizeInitialChildren(instance, _type, props) {
75
+ instance.updateProps(props);
76
+ return false;
77
+ },
78
+ commitMount() {
79
+ // Could handle focus here
80
+ },
81
+ commitUpdate(instance, _updatePayload, _type, _oldProps, newProps) {
82
+ // Handle case where newProps might be a Fiber node (react-reconciler API varies)
83
+ const props = newProps.pendingProps ??
84
+ newProps.memoizedProps ??
85
+ newProps;
86
+ instance.updateProps(props);
87
+ },
88
+ commitTextUpdate(textInstance, _oldText, newText) {
89
+ textInstance.updateText(newText);
90
+ },
91
+ appendChildToContainer(container, child) {
92
+ // The first child becomes the root
93
+ container.root = child;
94
+ child.parent = null;
95
+ },
96
+ appendInitialChild(parent, child) {
97
+ parent.appendChild(child);
98
+ },
99
+ hideInstance() {
100
+ // Could implement visibility
101
+ },
102
+ unhideInstance() {
103
+ // Could implement visibility
104
+ },
105
+ hideTextInstance() { },
106
+ unhideTextInstance() { },
107
+ clearContainer(container) {
108
+ container.root = null;
109
+ },
110
+ setCurrentUpdatePriority(newPriority) {
111
+ currentUpdatePriority = newPriority;
112
+ },
113
+ getCurrentUpdatePriority: () => currentUpdatePriority,
114
+ resolveUpdatePriority() {
115
+ if (currentUpdatePriority !== NoEventPriority) {
116
+ return currentUpdatePriority;
117
+ }
118
+ return DefaultEventPriority;
119
+ },
120
+ maySuspendCommit() {
121
+ return false;
122
+ },
123
+ NotPendingTransition: null,
124
+ HostTransitionContext: createContext(null),
125
+ resetFormInstance() { },
126
+ requestPostPaintCallback() { },
127
+ trackSchedulerEvent() { },
128
+ resolveEventType() {
129
+ return null;
130
+ },
131
+ resolveEventTimeStamp() {
132
+ return -1.1;
133
+ },
134
+ preloadInstance() {
135
+ return true;
136
+ },
137
+ startSuspendingCommit() { },
138
+ suspendInstance() { },
139
+ waitForCommitToBeReady() {
140
+ return null;
141
+ },
142
+ detachDeletedInstance(instance) {
143
+ if (!instance.parent) {
144
+ instance.destroy();
145
+ }
146
+ },
147
+ getPublicInstance(instance) {
148
+ return instance;
149
+ },
150
+ preparePortalMount() { },
151
+ isPrimaryRenderer: true,
152
+ getInstanceFromNode() {
153
+ return null;
154
+ },
155
+ beforeActiveInstanceBlur() { },
156
+ afterActiveInstanceBlur() { },
157
+ prepareScopeUpdate() { },
158
+ getInstanceFromScope() {
159
+ return null;
160
+ },
161
+ prepareUpdate() {
162
+ return true;
163
+ },
164
+ };
165
+ // Cast to any at the boundary - the config is internally typed but
166
+ // react-reconciler's generic constraints are too strict for real-world usage
167
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
168
+ export const reconciler = Reconciler(hostConfig);
169
+ const r = reconciler;
170
+ export const flushPassiveEffects = r.flushPassiveEffects?.bind(r) ?? (() => { });
171
+ export const flushSync = r.flushSync?.bind(r) ?? ((fn) => fn?.());
172
+ export const batchedUpdates = r.batchedUpdates?.bind(r) ?? ((fn) => fn());
173
+ export const discreteUpdates = r.discreteUpdates?.bind(r) ?? ((fn) => fn());
174
+ //# sourceMappingURL=host-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-config.js","sourceRoot":"","sources":["../../../src/reconciler/host-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { CellBuffer, Palette } from "@effect-tui/core";
2
+ export interface Rect {
3
+ x: number;
4
+ y: number;
5
+ w: number;
6
+ h: number;
7
+ }
8
+ export interface Size {
9
+ w: number;
10
+ h: number;
11
+ }
12
+ export interface HostInstance {
13
+ /** Unique identifier */
14
+ id: string;
15
+ /** Component type name */
16
+ type: string;
17
+ /** Parent in tree */
18
+ parent: HostInstance | null;
19
+ /** Children in tree */
20
+ children: HostInstance[];
21
+ /** Computed layout rect (set during layout phase) */
22
+ rect: Rect | null;
23
+ /** Measure natural size given constraints */
24
+ measure(maxW: number, maxH: number): Size;
25
+ /** Assign final rect and layout children */
26
+ layout(rect: Rect): void;
27
+ /** Render to buffer */
28
+ render(buffer: CellBuffer, palette: Palette): void;
29
+ /** Update props from React */
30
+ updateProps(props: Record<string, unknown>): void;
31
+ /** Cleanup on unmount */
32
+ destroy(): void;
33
+ /** Add child */
34
+ appendChild(child: HostInstance): void;
35
+ /** Remove child */
36
+ removeChild(child: HostInstance): void;
37
+ /** Insert child before another */
38
+ insertBefore(child: HostInstance, before: HostInstance): void;
39
+ }
40
+ export interface HostContext {
41
+ requestRender(): void;
42
+ }
43
+ /** Props common to all host components */
44
+ export interface CommonProps {
45
+ /** Flex grow factor */
46
+ flexGrow?: number;
47
+ /** Flex shrink factor */
48
+ flexShrink?: number;
49
+ /** Index signature for Record<string, unknown> compatibility */
50
+ [key: string]: unknown;
51
+ }
52
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/reconciler/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAE3D,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAED,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAED,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAA;IAEZ,qBAAqB;IACrB,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;IAC3B,uBAAuB;IACvB,QAAQ,EAAE,YAAY,EAAE,CAAA;IAExB,qDAAqD;IACrD,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;IAEjB,6CAA6C;IAC7C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAEzC,4CAA4C;IAC5C,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;IAExB,uBAAuB;IACvB,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IAElD,8BAA8B;IAC9B,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IAEjD,yBAAyB;IACzB,OAAO,IAAI,IAAI,CAAA;IAEf,gBAAgB;IAChB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAA;IAEtC,mBAAmB;IACnB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAA;IAEtC,kCAAkC;IAClC,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;CAC9D;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,IAAI,IAAI,CAAA;CACtB;AAED,0CAA0C;AAC1C,MAAM,WAAW,WAAW;IAC1B,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gEAAgE;IAChE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/reconciler/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,101 @@
1
+ import React, { type ReactNode } from "react";
2
+ import { type KeyMsg } from "@effect-tui/core";
3
+ /** Minimal write stream interface for renderer output */
4
+ export interface TuiWriteStream {
5
+ write(s: string): void;
6
+ columns: number;
7
+ rows: number;
8
+ on(event: string, cb: () => void): void;
9
+ }
10
+ /** Minimal read stream interface for renderer input */
11
+ export interface TuiReadStream {
12
+ isTTY?: boolean;
13
+ setRawMode?(mode: boolean): void;
14
+ resume?(): void;
15
+ on(event: string, cb: (data: Buffer) => void): void;
16
+ }
17
+ export interface TuiRenderer {
18
+ /** Terminal width */
19
+ width: number;
20
+ /** Terminal height */
21
+ height: number;
22
+ /** Request a re-render */
23
+ requestRender(): void;
24
+ /** Subscribe to per-frame stats (if enabled). */
25
+ onFrameStats?(handler: (stats: FrameStats) => void): () => void;
26
+ /** Subscribe to keyboard events */
27
+ onKey(handler: (key: KeyMsg) => void): () => void;
28
+ /** Subscribe to paste events (bracketed paste mode). */
29
+ onPaste?(handler: (text: string) => void): () => void;
30
+ /** Subscribe to resize events */
31
+ onResize(handler: (width: number, height: number) => void): () => void;
32
+ /** Stop the renderer */
33
+ stop(): void;
34
+ /** Manually trigger one render frame (only in manualMode) */
35
+ flush(): void;
36
+ }
37
+ export declare const RendererContext: React.Context<TuiRenderer | null>;
38
+ export declare function useRenderer(): TuiRenderer;
39
+ /** Hook that returns terminal size and re-renders on resize */
40
+ export declare function useTerminalSize(): {
41
+ width: number;
42
+ height: number;
43
+ };
44
+ export interface RendererOptions {
45
+ fps?: number;
46
+ stdout?: NodeJS.WriteStream | TuiWriteStream;
47
+ stdin?: NodeJS.ReadStream | TuiReadStream;
48
+ /** Render mode: "fullscreen" uses alternate buffer, "inline" renders in-place */
49
+ mode?: "fullscreen" | "inline";
50
+ /** Exit the process on Ctrl+C unless preventDefault was called. Defaults to true. */
51
+ exitOnCtrlC?: boolean;
52
+ /** Enable diffed rendering (per-line). Defaults to true in runtime, false in manualMode (tests). */
53
+ diff?: boolean;
54
+ /** Enable diffed rendering for inline mode (off by default; eraseLines baseline). */
55
+ diffInline?: boolean;
56
+ /** Skip automatic render loop. Call flush() manually to render frames. */
57
+ manualMode?: boolean;
58
+ /** Skip fullscreen/raw mode setup (for testing) */
59
+ skipTerminalSetup?: boolean;
60
+ /** Enable bracketed paste (default true). */
61
+ enablePaste?: boolean;
62
+ /** Optional per-frame diagnostics hook. Called after each frame is written. */
63
+ debug?: {
64
+ onFrame?: (stats: FrameStats) => void;
65
+ };
66
+ }
67
+ export interface FrameStats {
68
+ mode: "fullscreen" | "inline";
69
+ width: number;
70
+ height: number;
71
+ contentHeight: number;
72
+ bytes: number;
73
+ frameMs: number;
74
+ phases: {
75
+ clear: number;
76
+ layout: number;
77
+ render: number;
78
+ diffAnsi: number;
79
+ write: number;
80
+ };
81
+ timestamp: number;
82
+ }
83
+ export declare function createRenderer(options?: RendererOptions): TuiRenderer;
84
+ export interface Root {
85
+ render(element: ReactNode, sync?: boolean): void;
86
+ unmount(): void;
87
+ }
88
+ export declare function createRoot(renderer: TuiRenderer): Root;
89
+ export interface RenderInstance {
90
+ renderer: TuiRenderer;
91
+ root: Root;
92
+ rerender(element: ReactNode): void;
93
+ unmount(): void;
94
+ waitUntilExit(): Promise<void>;
95
+ }
96
+ /**
97
+ * Render a React tree to the terminal in one call.
98
+ * Returns helpers similar to Ink: rerender, unmount, waitUntilExit.
99
+ */
100
+ export declare function render(element: ReactNode, options?: RendererOptions): RenderInstance;
101
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/renderer.ts"],"names":[],"mappings":"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"}