@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.
- package/LICENSE +21 -0
- package/README.md +138 -0
- package/dist/jsx-dev-runtime.d.ts +3 -0
- package/dist/jsx-dev-runtime.d.ts.map +1 -0
- package/dist/jsx-dev-runtime.js +3 -0
- package/dist/jsx-dev-runtime.js.map +1 -0
- package/dist/jsx-runtime.d.ts +47 -0
- package/dist/jsx-runtime.d.ts.map +1 -0
- package/dist/jsx-runtime.js +6 -0
- package/dist/jsx-runtime.js.map +1 -0
- package/dist/src/codeblock.d.ts +9 -0
- package/dist/src/codeblock.d.ts.map +1 -0
- package/dist/src/codeblock.js +24 -0
- package/dist/src/codeblock.js.map +1 -0
- package/dist/src/constants.d.ts +3 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +3 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/debug/DiagnosticsPanel.d.ts +7 -0
- package/dist/src/debug/DiagnosticsPanel.d.ts.map +1 -0
- package/dist/src/debug/DiagnosticsPanel.js +13 -0
- package/dist/src/debug/DiagnosticsPanel.js.map +1 -0
- package/dist/src/highlight.d.ts +20 -0
- package/dist/src/highlight.d.ts.map +1 -0
- package/dist/src/highlight.js +51 -0
- package/dist/src/highlight.js.map +1 -0
- package/dist/src/hooks/index.d.ts +4 -0
- package/dist/src/hooks/index.d.ts.map +1 -0
- package/dist/src/hooks/index.js +3 -0
- package/dist/src/hooks/index.js.map +1 -0
- package/dist/src/hooks/use-keyboard.d.ts +18 -0
- package/dist/src/hooks/use-keyboard.d.ts.map +1 -0
- package/dist/src/hooks/use-keyboard.js +26 -0
- package/dist/src/hooks/use-keyboard.js.map +1 -0
- package/dist/src/hooks/use-paste.d.ts +5 -0
- package/dist/src/hooks/use-paste.d.ts.map +1 -0
- package/dist/src/hooks/use-paste.js +14 -0
- package/dist/src/hooks/use-paste.js.map +1 -0
- package/dist/src/hooks/useFrameStats.d.ts +7 -0
- package/dist/src/hooks/useFrameStats.d.ts.map +1 -0
- package/dist/src/hooks/useFrameStats.js +28 -0
- package/dist/src/hooks/useFrameStats.js.map +1 -0
- package/dist/src/hosts/base.d.ts +22 -0
- package/dist/src/hosts/base.d.ts.map +1 -0
- package/dist/src/hosts/base.js +53 -0
- package/dist/src/hosts/base.js.map +1 -0
- package/dist/src/hosts/box.d.ts +26 -0
- package/dist/src/hosts/box.d.ts.map +1 -0
- package/dist/src/hosts/box.js +84 -0
- package/dist/src/hosts/box.js.map +1 -0
- package/dist/src/hosts/canvas.d.ts +48 -0
- package/dist/src/hosts/canvas.d.ts.map +1 -0
- package/dist/src/hosts/canvas.js +109 -0
- package/dist/src/hosts/canvas.js.map +1 -0
- package/dist/src/hosts/codeblock.d.ts +32 -0
- package/dist/src/hosts/codeblock.d.ts.map +1 -0
- package/dist/src/hosts/codeblock.js +118 -0
- package/dist/src/hosts/codeblock.js.map +1 -0
- package/dist/src/hosts/hstack.d.ts +18 -0
- package/dist/src/hosts/hstack.d.ts.map +1 -0
- package/dist/src/hosts/hstack.js +45 -0
- package/dist/src/hosts/hstack.js.map +1 -0
- package/dist/src/hosts/index.d.ts +16 -0
- package/dist/src/hosts/index.d.ts.map +1 -0
- package/dist/src/hosts/index.js +40 -0
- package/dist/src/hosts/index.js.map +1 -0
- package/dist/src/hosts/spacer.d.ts +19 -0
- package/dist/src/hosts/spacer.d.ts.map +1 -0
- package/dist/src/hosts/spacer.js +28 -0
- package/dist/src/hosts/spacer.js.map +1 -0
- package/dist/src/hosts/text.d.ts +43 -0
- package/dist/src/hosts/text.d.ts.map +1 -0
- package/dist/src/hosts/text.js +148 -0
- package/dist/src/hosts/text.js.map +1 -0
- package/dist/src/hosts/vstack.d.ts +18 -0
- package/dist/src/hosts/vstack.d.ts.map +1 -0
- package/dist/src/hosts/vstack.js +45 -0
- package/dist/src/hosts/vstack.js.map +1 -0
- package/dist/src/hosts/zstack.d.ts +20 -0
- package/dist/src/hosts/zstack.d.ts.map +1 -0
- package/dist/src/hosts/zstack.js +65 -0
- package/dist/src/hosts/zstack.js.map +1 -0
- package/dist/src/index.d.ts +20 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +20 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/inline/index.d.ts +32 -0
- package/dist/src/inline/index.d.ts.map +1 -0
- package/dist/src/inline/index.js +111 -0
- package/dist/src/inline/index.js.map +1 -0
- package/dist/src/jsx.d.ts +2 -0
- package/dist/src/jsx.d.ts.map +1 -0
- package/dist/src/jsx.js +4 -0
- package/dist/src/jsx.js.map +1 -0
- package/dist/src/motion/color-motion-value.d.ts +32 -0
- package/dist/src/motion/color-motion-value.d.ts.map +1 -0
- package/dist/src/motion/color-motion-value.js +80 -0
- package/dist/src/motion/color-motion-value.js.map +1 -0
- package/dist/src/motion/color.d.ts +30 -0
- package/dist/src/motion/color.d.ts.map +1 -0
- package/dist/src/motion/color.js +172 -0
- package/dist/src/motion/color.js.map +1 -0
- package/dist/src/motion/color.test.d.ts +2 -0
- package/dist/src/motion/color.test.d.ts.map +1 -0
- package/dist/src/motion/color.test.js +97 -0
- package/dist/src/motion/color.test.js.map +1 -0
- package/dist/src/motion/event-emitter.d.ts +18 -0
- package/dist/src/motion/event-emitter.d.ts.map +1 -0
- package/dist/src/motion/event-emitter.js +30 -0
- package/dist/src/motion/event-emitter.js.map +1 -0
- package/dist/src/motion/frame.d.ts +9 -0
- package/dist/src/motion/frame.d.ts.map +1 -0
- package/dist/src/motion/frame.js +51 -0
- package/dist/src/motion/frame.js.map +1 -0
- package/dist/src/motion/hooks.d.ts +75 -0
- package/dist/src/motion/hooks.d.ts.map +1 -0
- package/dist/src/motion/hooks.js +190 -0
- package/dist/src/motion/hooks.js.map +1 -0
- package/dist/src/motion/index.d.ts +4 -0
- package/dist/src/motion/index.d.ts.map +1 -0
- package/dist/src/motion/index.js +7 -0
- package/dist/src/motion/index.js.map +1 -0
- package/dist/src/motion/motion-value.d.ts +40 -0
- package/dist/src/motion/motion-value.d.ts.map +1 -0
- package/dist/src/motion/motion-value.js +109 -0
- package/dist/src/motion/motion-value.js.map +1 -0
- package/dist/src/motion/motion-value.test.d.ts +2 -0
- package/dist/src/motion/motion-value.test.d.ts.map +1 -0
- package/dist/src/motion/motion-value.test.js +177 -0
- package/dist/src/motion/motion-value.test.js.map +1 -0
- package/dist/src/motion/spring-math.d.ts +28 -0
- package/dist/src/motion/spring-math.d.ts.map +1 -0
- package/dist/src/motion/spring-math.js +81 -0
- package/dist/src/motion/spring-math.js.map +1 -0
- package/dist/src/motion/types.d.ts +25 -0
- package/dist/src/motion/types.d.ts.map +1 -0
- package/dist/src/motion/types.js +13 -0
- package/dist/src/motion/types.js.map +1 -0
- package/dist/src/output.d.ts +47 -0
- package/dist/src/output.d.ts.map +1 -0
- package/dist/src/output.js +125 -0
- package/dist/src/output.js.map +1 -0
- package/dist/src/profiler.d.ts +6 -0
- package/dist/src/profiler.d.ts.map +1 -0
- package/dist/src/profiler.js +73 -0
- package/dist/src/profiler.js.map +1 -0
- package/dist/src/reconciler/host-config.d.ts +16 -0
- package/dist/src/reconciler/host-config.d.ts.map +1 -0
- package/dist/src/reconciler/host-config.js +174 -0
- package/dist/src/reconciler/host-config.js.map +1 -0
- package/dist/src/reconciler/types.d.ts +52 -0
- package/dist/src/reconciler/types.d.ts.map +1 -0
- package/dist/src/reconciler/types.js +2 -0
- package/dist/src/reconciler/types.js.map +1 -0
- package/dist/src/renderer.d.ts +101 -0
- package/dist/src/renderer.d.ts.map +1 -0
- package/dist/src/renderer.js +509 -0
- package/dist/src/renderer.js.map +1 -0
- package/dist/src/terminal.d.ts +37 -0
- package/dist/src/terminal.d.ts.map +1 -0
- package/dist/src/terminal.js +65 -0
- package/dist/src/terminal.js.map +1 -0
- package/dist/src/test/index.d.ts +3 -0
- package/dist/src/test/index.d.ts.map +1 -0
- package/dist/src/test/index.js +3 -0
- package/dist/src/test/index.js.map +1 -0
- package/dist/src/test/mock-streams.d.ts +44 -0
- package/dist/src/test/mock-streams.d.ts.map +1 -0
- package/dist/src/test/mock-streams.js +136 -0
- package/dist/src/test/mock-streams.js.map +1 -0
- package/dist/src/test/render-tui.d.ts +47 -0
- package/dist/src/test/render-tui.d.ts.map +1 -0
- package/dist/src/test/render-tui.js +76 -0
- package/dist/src/test/render-tui.js.map +1 -0
- package/dist/src/trace/SpanTree.d.ts +10 -0
- package/dist/src/trace/SpanTree.d.ts.map +1 -0
- package/dist/src/trace/SpanTree.js +104 -0
- package/dist/src/trace/SpanTree.js.map +1 -0
- package/dist/src/trace/index.d.ts +30 -0
- package/dist/src/trace/index.d.ts.map +1 -0
- package/dist/src/trace/index.js +142 -0
- package/dist/src/trace/index.js.map +1 -0
- package/dist/src/trace/location.d.ts +9 -0
- package/dist/src/trace/location.d.ts.map +1 -0
- package/dist/src/trace/location.js +88 -0
- package/dist/src/trace/location.js.map +1 -0
- package/dist/src/trace/span-processor.d.ts +16 -0
- package/dist/src/trace/span-processor.d.ts.map +1 -0
- package/dist/src/trace/span-processor.js +54 -0
- package/dist/src/trace/span-processor.js.map +1 -0
- package/dist/src/trace/span-state.d.ts +79 -0
- package/dist/src/trace/span-state.d.ts.map +1 -0
- package/dist/src/trace/span-state.js +229 -0
- package/dist/src/trace/span-state.js.map +1 -0
- package/dist/src/trace/tui-logger.d.ts +8 -0
- package/dist/src/trace/tui-logger.d.ts.map +1 -0
- package/dist/src/trace/tui-logger.js +70 -0
- package/dist/src/trace/tui-logger.js.map +1 -0
- package/dist/src/utils/border.d.ts +31 -0
- package/dist/src/utils/border.d.ts.map +1 -0
- package/dist/src/utils/border.js +81 -0
- package/dist/src/utils/border.js.map +1 -0
- package/dist/src/utils/flex-layout.d.ts +20 -0
- package/dist/src/utils/flex-layout.d.ts.map +1 -0
- package/dist/src/utils/flex-layout.js +85 -0
- package/dist/src/utils/flex-layout.js.map +1 -0
- package/dist/src/utils/index.d.ts +5 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +5 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/padding.d.ts +26 -0
- package/dist/src/utils/padding.d.ts.map +1 -0
- package/dist/src/utils/padding.js +34 -0
- package/dist/src/utils/padding.js.map +1 -0
- package/dist/src/utils/styles.d.ts +13 -0
- package/dist/src/utils/styles.d.ts.map +1 -0
- package/dist/src/utils/styles.js +5 -0
- package/dist/src/utils/styles.js.map +1 -0
- package/dist/src/visualize/index.d.ts +50 -0
- package/dist/src/visualize/index.d.ts.map +1 -0
- package/dist/src/visualize/index.js +194 -0
- package/dist/src/visualize/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +94 -0
- package/src/codeblock.tsx +47 -0
- package/src/constants.ts +2 -0
- package/src/debug/DiagnosticsPanel.tsx +38 -0
- package/src/highlight.ts +76 -0
- package/src/hooks/index.ts +3 -0
- package/src/hooks/use-keyboard.ts +37 -0
- package/src/hooks/use-paste.ts +14 -0
- package/src/hooks/useFrameStats.ts +32 -0
- package/src/hosts/base.ts +65 -0
- package/src/hosts/box.ts +105 -0
- package/src/hosts/canvas.ts +155 -0
- package/src/hosts/codeblock.ts +145 -0
- package/src/hosts/hstack.ts +64 -0
- package/src/hosts/index.ts +45 -0
- package/src/hosts/spacer.ts +40 -0
- package/src/hosts/text.ts +175 -0
- package/src/hosts/vstack.ts +64 -0
- package/src/hosts/zstack.ts +77 -0
- package/src/index.ts +62 -0
- package/src/inline/index.tsx +181 -0
- package/src/jsx.ts +3 -0
- package/src/motion/color-motion-value.ts +90 -0
- package/src/motion/color.test.ts +115 -0
- package/src/motion/color.ts +191 -0
- package/src/motion/event-emitter.ts +35 -0
- package/src/motion/frame.ts +59 -0
- package/src/motion/hooks.ts +237 -0
- package/src/motion/index.ts +17 -0
- package/src/motion/motion-value.test.ts +222 -0
- package/src/motion/motion-value.ts +140 -0
- package/src/motion/spring-math.ts +114 -0
- package/src/motion/types.ts +34 -0
- package/src/output.ts +156 -0
- package/src/profiler.ts +88 -0
- package/src/reconciler/host-config.ts +277 -0
- package/src/reconciler/types.ts +66 -0
- package/src/renderer.ts +661 -0
- package/src/terminal.ts +67 -0
- package/src/test/index.ts +8 -0
- package/src/test/mock-streams.ts +149 -0
- package/src/test/render-tui.ts +118 -0
- package/src/trace/SpanTree.tsx +195 -0
- package/src/trace/index.tsx +205 -0
- package/src/trace/location.ts +90 -0
- package/src/trace/span-processor.ts +65 -0
- package/src/trace/span-state.ts +286 -0
- package/src/trace/tui-logger.ts +72 -0
- package/src/utils/border.ts +108 -0
- package/src/utils/flex-layout.ts +125 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/padding.ts +45 -0
- package/src/utils/styles.ts +14 -0
- 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"}
|