@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,53 @@
|
|
|
1
|
+
let idCounter = 0;
|
|
2
|
+
export class BaseHost {
|
|
3
|
+
id;
|
|
4
|
+
type;
|
|
5
|
+
parent = null;
|
|
6
|
+
children = [];
|
|
7
|
+
rect = null;
|
|
8
|
+
// Common flex props
|
|
9
|
+
flexGrow = 0;
|
|
10
|
+
flexShrink = 1;
|
|
11
|
+
ctx;
|
|
12
|
+
constructor(type, props, ctx) {
|
|
13
|
+
this.id = `${type}-${idCounter++}`;
|
|
14
|
+
this.type = type;
|
|
15
|
+
this.ctx = ctx;
|
|
16
|
+
this.updateProps(props);
|
|
17
|
+
}
|
|
18
|
+
layout(rect) {
|
|
19
|
+
this.rect = rect;
|
|
20
|
+
}
|
|
21
|
+
updateProps(props) {
|
|
22
|
+
if (props.flexGrow !== undefined)
|
|
23
|
+
this.flexGrow = props.flexGrow;
|
|
24
|
+
if (props.flexShrink !== undefined)
|
|
25
|
+
this.flexShrink = props.flexShrink;
|
|
26
|
+
}
|
|
27
|
+
destroy() {
|
|
28
|
+
// Override in subclasses if cleanup needed
|
|
29
|
+
}
|
|
30
|
+
// Child management helpers
|
|
31
|
+
appendChild(child) {
|
|
32
|
+
this.children.push(child);
|
|
33
|
+
child.parent = this;
|
|
34
|
+
}
|
|
35
|
+
removeChild(child) {
|
|
36
|
+
const idx = this.children.indexOf(child);
|
|
37
|
+
if (idx >= 0) {
|
|
38
|
+
this.children.splice(idx, 1);
|
|
39
|
+
child.parent = null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
insertBefore(child, before) {
|
|
43
|
+
const idx = this.children.indexOf(before);
|
|
44
|
+
if (idx >= 0) {
|
|
45
|
+
this.children.splice(idx, 0, child);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
this.children.push(child);
|
|
49
|
+
}
|
|
50
|
+
child.parent = this;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/hosts/base.ts"],"names":[],"mappings":"AAGA,IAAI,SAAS,GAAG,CAAC,CAAA;AAEjB,MAAM,OAAgB,QAAQ;IAC5B,EAAE,CAAQ;IACV,IAAI,CAAQ;IACZ,MAAM,GAAwB,IAAI,CAAA;IAClC,QAAQ,GAAmB,EAAE,CAAA;IAC7B,IAAI,GAAgB,IAAI,CAAA;IAExB,oBAAoB;IACpB,QAAQ,GAAG,CAAC,CAAA;IACZ,UAAU,GAAG,CAAC,CAAA;IAEJ,GAAG,CAAa;IAE1B,YAAY,IAAY,EAAE,KAAkB,EAAE,GAAgB;QAC5D,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,IAAI,SAAS,EAAE,EAAE,CAAA;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IACzB,CAAC;IAKD,MAAM,CAAC,IAAU;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAED,WAAW,CAAC,KAA8B;QACxC,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;YAAE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAkB,CAAA;QAC1E,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS;YAAE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAoB,CAAA;IAClF,CAAC;IAED,OAAO;QACL,2CAA2C;IAC7C,CAAC;IAED,2BAA2B;IAC3B,WAAW,CAAC,KAAmB;QAC7B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACzB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAA;IACrB,CAAC;IAED,WAAW,CAAC,KAAmB;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACxC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;YAC5B,KAAK,CAAC,MAAM,GAAG,IAAI,CAAA;QACrB,CAAC;IACH,CAAC;IAED,YAAY,CAAC,KAAmB,EAAE,MAAoB;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACzC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAA;QACrC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC3B,CAAC;QACD,KAAK,CAAC,MAAM,GAAG,IAAI,CAAA;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { CellBuffer, Palette, ColorValue } from "@effect-tui/core";
|
|
2
|
+
import type { HostContext, Rect, Size, CommonProps } from "../reconciler/types.js";
|
|
3
|
+
import { BaseHost } from "./base.js";
|
|
4
|
+
import { type BorderKind, type Padding, type PaddingInput } from "../utils/index.js";
|
|
5
|
+
export type { BorderKind };
|
|
6
|
+
export interface BoxProps extends CommonProps {
|
|
7
|
+
padding?: PaddingInput;
|
|
8
|
+
border?: BorderKind;
|
|
9
|
+
borderColor?: ColorValue;
|
|
10
|
+
bg?: ColorValue;
|
|
11
|
+
}
|
|
12
|
+
export declare class BoxHost extends BaseHost {
|
|
13
|
+
padding: Padding;
|
|
14
|
+
border: BorderKind;
|
|
15
|
+
borderColor?: ColorValue;
|
|
16
|
+
bg?: ColorValue;
|
|
17
|
+
constructor(props: BoxProps, ctx: HostContext);
|
|
18
|
+
private get borderThickness();
|
|
19
|
+
private get insetX();
|
|
20
|
+
private get insetY();
|
|
21
|
+
measure(maxW: number, maxH: number): Size;
|
|
22
|
+
layout(rect: Rect): void;
|
|
23
|
+
render(buffer: CellBuffer, palette: Palette): void;
|
|
24
|
+
updateProps(props: Record<string, unknown>): void;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=box.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../../../src/hosts/box.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAEvE,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,KAAK,UAAU,EAA2B,KAAK,OAAO,EAAE,KAAK,YAAY,EAAkB,MAAM,mBAAmB,CAAA;AAE7H,YAAY,EAAE,UAAU,EAAE,CAAA;AAE1B,MAAM,WAAW,QAAS,SAAQ,WAAW;IAC3C,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,WAAW,CAAC,EAAE,UAAU,CAAA;IACxB,EAAE,CAAC,EAAE,UAAU,CAAA;CAChB;AAED,qBAAa,OAAQ,SAAQ,QAAQ;IACnC,OAAO,EAAE,OAAO,CAA2C;IAC3D,MAAM,EAAE,UAAU,CAAS;IAC3B,WAAW,CAAC,EAAE,UAAU,CAAA;IACxB,EAAE,CAAC,EAAE,UAAU,CAAA;gBAEH,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW;IAK7C,OAAO,KAAK,eAAe,GAE1B;IAED,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAmBhC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAiBjC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAuBzC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAO3D"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { Colors } from "@effect-tui/core";
|
|
2
|
+
import { BaseHost } from "./base.js";
|
|
3
|
+
import { borderChars, drawBorder, resolvePadding } from "../utils/index.js";
|
|
4
|
+
export class BoxHost extends BaseHost {
|
|
5
|
+
padding = { top: 0, right: 0, bottom: 0, left: 0 };
|
|
6
|
+
border = "none";
|
|
7
|
+
borderColor;
|
|
8
|
+
bg;
|
|
9
|
+
constructor(props, ctx) {
|
|
10
|
+
super("box", props, ctx);
|
|
11
|
+
this.updateProps(props);
|
|
12
|
+
}
|
|
13
|
+
get borderThickness() {
|
|
14
|
+
return this.border === "none" ? 0 : 1;
|
|
15
|
+
}
|
|
16
|
+
get insetX() {
|
|
17
|
+
return this.borderThickness + this.padding.left + this.padding.right + this.borderThickness;
|
|
18
|
+
}
|
|
19
|
+
get insetY() {
|
|
20
|
+
return this.borderThickness + this.padding.top + this.padding.bottom + this.borderThickness;
|
|
21
|
+
}
|
|
22
|
+
measure(maxW, maxH) {
|
|
23
|
+
const innerMaxW = Math.max(0, maxW - this.insetX);
|
|
24
|
+
const innerMaxH = Math.max(0, maxH - this.insetY);
|
|
25
|
+
// Measure single child (box should have at most one child)
|
|
26
|
+
let childW = 0;
|
|
27
|
+
let childH = 0;
|
|
28
|
+
if (this.children.length > 0) {
|
|
29
|
+
const childSize = this.children[0].measure(innerMaxW, innerMaxH);
|
|
30
|
+
childW = childSize.w;
|
|
31
|
+
childH = childSize.h;
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
w: childW + this.insetX,
|
|
35
|
+
h: childH + this.insetY,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
layout(rect) {
|
|
39
|
+
super.layout(rect);
|
|
40
|
+
const t = this.borderThickness;
|
|
41
|
+
const innerRect = {
|
|
42
|
+
x: rect.x + t + this.padding.left,
|
|
43
|
+
y: rect.y + t + this.padding.top,
|
|
44
|
+
w: Math.max(0, rect.w - this.insetX),
|
|
45
|
+
h: Math.max(0, rect.h - this.insetY),
|
|
46
|
+
};
|
|
47
|
+
// Layout single child
|
|
48
|
+
if (this.children.length > 0) {
|
|
49
|
+
this.children[0].layout(innerRect);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
render(buffer, palette) {
|
|
53
|
+
if (!this.rect)
|
|
54
|
+
return;
|
|
55
|
+
const { x, y, w, h } = this.rect;
|
|
56
|
+
// Draw background if set
|
|
57
|
+
if (this.bg !== undefined) {
|
|
58
|
+
const bgStyle = palette.id({ bg: this.bg });
|
|
59
|
+
buffer.fillRect(x, y, w, h, " ".codePointAt(0), bgStyle);
|
|
60
|
+
}
|
|
61
|
+
// Draw border
|
|
62
|
+
if (this.border !== "none" && w >= 2 && h >= 2) {
|
|
63
|
+
const chars = borderChars(this.border);
|
|
64
|
+
const borderStyle = palette.id({ fg: this.borderColor ?? Colors.gray(8) });
|
|
65
|
+
drawBorder(buffer, x, y, w, h, chars, borderStyle);
|
|
66
|
+
}
|
|
67
|
+
// Render children
|
|
68
|
+
for (const child of this.children) {
|
|
69
|
+
child.render(buffer, palette);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
updateProps(props) {
|
|
73
|
+
super.updateProps(props);
|
|
74
|
+
if (props.padding !== undefined)
|
|
75
|
+
this.padding = resolvePadding(props.padding);
|
|
76
|
+
if (props.border !== undefined)
|
|
77
|
+
this.border = props.border;
|
|
78
|
+
if (props.borderColor !== undefined)
|
|
79
|
+
this.borderColor = props.borderColor;
|
|
80
|
+
if (props.bg !== undefined)
|
|
81
|
+
this.bg = props.bg;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=box.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"box.js","sourceRoot":"","sources":["../../../src/hosts/box.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { CellBuffer, Palette, ColorValue } from "@effect-tui/core";
|
|
2
|
+
import type { HostContext, Size, CommonProps } from "../reconciler/types.js";
|
|
3
|
+
import { BaseHost } from "./base.js";
|
|
4
|
+
import { type BorderKind } from "../utils/index.js";
|
|
5
|
+
export type { BorderKind };
|
|
6
|
+
export interface DrawContext {
|
|
7
|
+
/** Canvas width in cells */
|
|
8
|
+
width: number;
|
|
9
|
+
/** Canvas height in cells */
|
|
10
|
+
height: number;
|
|
11
|
+
/** Draw text at position */
|
|
12
|
+
text(x: number, y: number, str: string, opts?: {
|
|
13
|
+
fg?: ColorValue;
|
|
14
|
+
bg?: ColorValue;
|
|
15
|
+
}): void;
|
|
16
|
+
/** Fill rectangle with character */
|
|
17
|
+
fill(x: number, y: number, w: number, h: number, char?: string, opts?: {
|
|
18
|
+
fg?: ColorValue;
|
|
19
|
+
bg?: ColorValue;
|
|
20
|
+
}): void;
|
|
21
|
+
/** Draw box with optional border */
|
|
22
|
+
box(x: number, y: number, w: number, h: number, opts?: {
|
|
23
|
+
border?: BorderKind;
|
|
24
|
+
borderColor?: ColorValue;
|
|
25
|
+
bg?: ColorValue;
|
|
26
|
+
fg?: ColorValue;
|
|
27
|
+
}): void;
|
|
28
|
+
/** Clear entire canvas */
|
|
29
|
+
clear(): void;
|
|
30
|
+
}
|
|
31
|
+
export interface CanvasProps extends CommonProps {
|
|
32
|
+
/** Draw function called each render */
|
|
33
|
+
draw: (ctx: DrawContext) => void;
|
|
34
|
+
/** Fixed width (default: fill available) */
|
|
35
|
+
width?: number;
|
|
36
|
+
/** Fixed height (default: fill available) */
|
|
37
|
+
height?: number;
|
|
38
|
+
}
|
|
39
|
+
export declare class CanvasHost extends BaseHost {
|
|
40
|
+
draw: CanvasProps["draw"];
|
|
41
|
+
fixedWidth?: number;
|
|
42
|
+
fixedHeight?: number;
|
|
43
|
+
constructor(props: CanvasProps, ctx: HostContext);
|
|
44
|
+
measure(maxW: number, maxH: number): Size;
|
|
45
|
+
render(buffer: CellBuffer, palette: Palette): void;
|
|
46
|
+
updateProps(props: Record<string, unknown>): void;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=canvas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../../../src/hosts/canvas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAEvE,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,KAAK,UAAU,EAA2B,MAAM,mBAAmB,CAAA;AAE5E,YAAY,EAAE,UAAU,EAAE,CAAA;AAE1B,MAAM,WAAW,WAAW;IAC1B,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAA;IAEd,4BAA4B;IAC5B,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,UAAU,CAAC;QAAC,EAAE,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,CAAA;IAE1F,oCAAoC;IACpC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,UAAU,CAAC;QAAC,EAAE,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,CAAA;IAElH,oCAAoC;IACpC,GAAG,CACD,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,IAAI,CAAC,EAAE;QACL,MAAM,CAAC,EAAE,UAAU,CAAA;QACnB,WAAW,CAAC,EAAE,UAAU,CAAA;QACxB,EAAE,CAAC,EAAE,UAAU,CAAA;QACf,EAAE,CAAC,EAAE,UAAU,CAAA;KAChB,GACA,IAAI,CAAA;IAEP,0BAA0B;IAC1B,KAAK,IAAI,IAAI,CAAA;CACd;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,uCAAuC;IACvC,IAAI,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAA;IAChC,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,qBAAa,UAAW,SAAQ,QAAQ;IACtC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAW;IACpC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;gBAER,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW;IAKhD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAOzC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAiFzC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAS3D"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { Colors } from "@effect-tui/core";
|
|
2
|
+
import { BaseHost } from "./base.js";
|
|
3
|
+
import { borderChars, drawBorder } from "../utils/index.js";
|
|
4
|
+
export class CanvasHost extends BaseHost {
|
|
5
|
+
draw = () => { };
|
|
6
|
+
fixedWidth;
|
|
7
|
+
fixedHeight;
|
|
8
|
+
constructor(props, ctx) {
|
|
9
|
+
super("canvas", props, ctx);
|
|
10
|
+
this.updateProps(props);
|
|
11
|
+
}
|
|
12
|
+
measure(maxW, maxH) {
|
|
13
|
+
return {
|
|
14
|
+
w: this.fixedWidth ?? maxW,
|
|
15
|
+
h: this.fixedHeight ?? maxH,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
render(buffer, palette) {
|
|
19
|
+
if (!this.rect)
|
|
20
|
+
return;
|
|
21
|
+
const { x: ox, y: oy, w, h } = this.rect;
|
|
22
|
+
// Create draw context
|
|
23
|
+
const ctx = {
|
|
24
|
+
width: w,
|
|
25
|
+
height: h,
|
|
26
|
+
text: (x, y, str, opts) => {
|
|
27
|
+
const px = Math.round(ox + x);
|
|
28
|
+
const py = Math.round(oy + y);
|
|
29
|
+
if (py < oy || py >= oy + h)
|
|
30
|
+
return;
|
|
31
|
+
const style = palette.id({ fg: opts?.fg, bg: opts?.bg });
|
|
32
|
+
let col = px;
|
|
33
|
+
for (const char of str) {
|
|
34
|
+
if (col >= ox + w)
|
|
35
|
+
break;
|
|
36
|
+
if (col >= ox) {
|
|
37
|
+
buffer.drawCP(col, py, char.codePointAt(0), style);
|
|
38
|
+
}
|
|
39
|
+
col++;
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
fill: (x, y, fw, fh, char = " ", opts) => {
|
|
43
|
+
const px = Math.round(ox + x);
|
|
44
|
+
const py = Math.round(oy + y);
|
|
45
|
+
const cp = char.codePointAt(0);
|
|
46
|
+
const style = palette.id({ fg: opts?.fg, bg: opts?.bg });
|
|
47
|
+
for (let row = 0; row < fh; row++) {
|
|
48
|
+
const yy = py + row;
|
|
49
|
+
if (yy < oy || yy >= oy + h)
|
|
50
|
+
continue;
|
|
51
|
+
for (let col = 0; col < fw; col++) {
|
|
52
|
+
const xx = px + col;
|
|
53
|
+
if (xx < ox || xx >= ox + w)
|
|
54
|
+
continue;
|
|
55
|
+
buffer.drawCP(xx, yy, cp, style);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
box: (x, y, bw, bh, opts) => {
|
|
60
|
+
const px = Math.round(ox + x);
|
|
61
|
+
const py = Math.round(oy + y);
|
|
62
|
+
const border = opts?.border ?? "none";
|
|
63
|
+
const bgStyle = opts?.bg !== undefined ? palette.id({ bg: opts.bg }) : undefined;
|
|
64
|
+
// Fill background (with clipping)
|
|
65
|
+
if (bgStyle !== undefined) {
|
|
66
|
+
for (let row = 0; row < bh; row++) {
|
|
67
|
+
const yy = py + row;
|
|
68
|
+
if (yy < oy || yy >= oy + h)
|
|
69
|
+
continue;
|
|
70
|
+
for (let col = 0; col < bw; col++) {
|
|
71
|
+
const xx = px + col;
|
|
72
|
+
if (xx < ox || xx >= ox + w)
|
|
73
|
+
continue;
|
|
74
|
+
buffer.drawCP(xx, yy, " ".codePointAt(0), bgStyle);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Draw border (with clipping)
|
|
79
|
+
if (border !== "none" && bw >= 2 && bh >= 2) {
|
|
80
|
+
const chars = borderChars(border);
|
|
81
|
+
const borderStyle = palette.id({ fg: opts?.borderColor ?? opts?.fg ?? Colors.gray(8) });
|
|
82
|
+
drawBorder(buffer, px, py, bw, bh, chars, borderStyle, { ox, oy, w, h });
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
clear: () => {
|
|
86
|
+
const style = palette.id({});
|
|
87
|
+
for (let row = 0; row < h; row++) {
|
|
88
|
+
for (let col = 0; col < w; col++) {
|
|
89
|
+
buffer.drawCP(ox + col, oy + row, " ".codePointAt(0), style);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
// Call user's draw function
|
|
95
|
+
this.draw(ctx);
|
|
96
|
+
}
|
|
97
|
+
updateProps(props) {
|
|
98
|
+
super.updateProps(props);
|
|
99
|
+
if (props.draw !== undefined) {
|
|
100
|
+
this.draw = props.draw;
|
|
101
|
+
this.ctx.requestRender(); // trigger repaint when draw function changes
|
|
102
|
+
}
|
|
103
|
+
if (props.width !== undefined)
|
|
104
|
+
this.fixedWidth = props.width;
|
|
105
|
+
if (props.height !== undefined)
|
|
106
|
+
this.fixedHeight = props.height;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=canvas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../../src/hosts/canvas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type CellBuffer, type ColorLike, type Palette } from "@effect-tui/core";
|
|
2
|
+
import type { HighlightLine } from "../highlight.js";
|
|
3
|
+
import type { HostContext, Rect, Size, CommonProps } from "../reconciler/types.js";
|
|
4
|
+
import { BaseHost } from "./base.js";
|
|
5
|
+
import { type Padding, type PaddingInput } from "../utils/index.js";
|
|
6
|
+
export interface CodeBlockProps extends CommonProps {
|
|
7
|
+
lines: HighlightLine[];
|
|
8
|
+
lineNumbers?: boolean;
|
|
9
|
+
padding?: PaddingInput;
|
|
10
|
+
background?: ColorLike;
|
|
11
|
+
lineNumberColor?: ColorLike;
|
|
12
|
+
lineNumberBackground?: ColorLike;
|
|
13
|
+
}
|
|
14
|
+
export declare class CodeBlockHost extends BaseHost {
|
|
15
|
+
lines: HighlightLine[];
|
|
16
|
+
lineNumbers: boolean;
|
|
17
|
+
padding: Padding;
|
|
18
|
+
background?: ColorLike;
|
|
19
|
+
lineNumberColor?: ColorLike;
|
|
20
|
+
lineNumberBackground?: ColorLike;
|
|
21
|
+
private cachedLineWidths;
|
|
22
|
+
private gutterWidth;
|
|
23
|
+
constructor(props: CodeBlockProps, ctx: HostContext);
|
|
24
|
+
private computeGutterWidth;
|
|
25
|
+
private get insetX();
|
|
26
|
+
private get insetY();
|
|
27
|
+
measure(maxW: number, maxH: number): Size;
|
|
28
|
+
layout(rect: Rect): void;
|
|
29
|
+
render(buffer: CellBuffer, palette: Palette): void;
|
|
30
|
+
updateProps(props: Record<string, unknown>): void;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=codeblock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codeblock.d.ts","sourceRoot":"","sources":["../../../src/hosts/codeblock.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,OAAO,EAEb,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,YAAY,EAAkB,MAAM,mBAAmB,CAAA;AAEnF,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB,eAAe,CAAC,EAAE,SAAS,CAAA;IAC3B,oBAAoB,CAAC,EAAE,SAAS,CAAA;CACjC;AAYD,qBAAa,aAAc,SAAQ,QAAQ;IACzC,KAAK,EAAE,aAAa,EAAE,CAAO;IAC7B,WAAW,UAAQ;IACnB,OAAO,EAAE,OAAO,CAA2C;IAC3D,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB,eAAe,CAAC,EAAE,SAAS,CAAA;IAC3B,oBAAoB,CAAC,EAAE,SAAS,CAAA;IAEhC,OAAO,CAAC,gBAAgB,CAAe;IACvC,OAAO,CAAC,WAAW,CAAI;gBAEX,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,WAAW;IAKnD,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAehC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIjC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAmDzC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAS3D"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { Colors, displayWidth, parseColor, } from "@effect-tui/core";
|
|
2
|
+
import { BaseHost } from "./base.js";
|
|
3
|
+
import { resolvePadding } from "../utils/index.js";
|
|
4
|
+
function normalizeColor(c) {
|
|
5
|
+
if (c === undefined || c === null)
|
|
6
|
+
return undefined;
|
|
7
|
+
if (typeof c === "number" || typeof c === "object")
|
|
8
|
+
return c;
|
|
9
|
+
return parseColor(c);
|
|
10
|
+
}
|
|
11
|
+
function lineDisplayWidth(line) {
|
|
12
|
+
return line.reduce((w, token) => w + displayWidth(token.text), 0);
|
|
13
|
+
}
|
|
14
|
+
export class CodeBlockHost extends BaseHost {
|
|
15
|
+
lines = [[]];
|
|
16
|
+
lineNumbers = false;
|
|
17
|
+
padding = { top: 0, right: 0, bottom: 0, left: 0 };
|
|
18
|
+
background;
|
|
19
|
+
lineNumberColor;
|
|
20
|
+
lineNumberBackground;
|
|
21
|
+
cachedLineWidths = [];
|
|
22
|
+
gutterWidth = 0;
|
|
23
|
+
constructor(props, ctx) {
|
|
24
|
+
super("codeblock", props, ctx);
|
|
25
|
+
this.updateProps(props);
|
|
26
|
+
}
|
|
27
|
+
computeGutterWidth() {
|
|
28
|
+
if (!this.lineNumbers)
|
|
29
|
+
return 0;
|
|
30
|
+
// Fix width so layout doesn't shift when moving from 1→2 digits.
|
|
31
|
+
const digits = Math.max(2, String(Math.max(1, this.lines.length)).length);
|
|
32
|
+
// digits plus a trailing space
|
|
33
|
+
return digits + 1;
|
|
34
|
+
}
|
|
35
|
+
get insetX() {
|
|
36
|
+
return this.padding.left + this.padding.right + this.gutterWidth;
|
|
37
|
+
}
|
|
38
|
+
get insetY() {
|
|
39
|
+
return this.padding.top + this.padding.bottom;
|
|
40
|
+
}
|
|
41
|
+
measure(maxW, maxH) {
|
|
42
|
+
this.cachedLineWidths = this.lines.map((l) => lineDisplayWidth(l));
|
|
43
|
+
this.gutterWidth = this.computeGutterWidth();
|
|
44
|
+
const maxLineW = this.cachedLineWidths.reduce((max, w) => (w > max ? w : max), 0);
|
|
45
|
+
const contentW = maxLineW + this.insetX;
|
|
46
|
+
const innerHeight = Math.max(1, this.lines.length) + this.insetY;
|
|
47
|
+
return {
|
|
48
|
+
w: Math.min(maxW, contentW),
|
|
49
|
+
h: Math.min(maxH, innerHeight),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
layout(rect) {
|
|
53
|
+
super.layout(rect);
|
|
54
|
+
}
|
|
55
|
+
render(buffer, palette) {
|
|
56
|
+
if (!this.rect)
|
|
57
|
+
return;
|
|
58
|
+
const { x, y, w, h } = this.rect;
|
|
59
|
+
const contentWidth = Math.max(0, w - this.insetX);
|
|
60
|
+
const maxLines = Math.max(0, Math.min(this.lines.length, h - this.insetY));
|
|
61
|
+
const startX = x + this.padding.left + this.gutterWidth;
|
|
62
|
+
const startY = y + this.padding.top;
|
|
63
|
+
if (this.background !== undefined && w > 0 && h > 0) {
|
|
64
|
+
const bgStyle = palette.id({ bg: normalizeColor(this.background) });
|
|
65
|
+
buffer.fillRect(x, y, w, h, " ".codePointAt(0), bgStyle);
|
|
66
|
+
}
|
|
67
|
+
for (let i = 0; i < maxLines; i++) {
|
|
68
|
+
const lineY = startY + i;
|
|
69
|
+
let drawX = startX;
|
|
70
|
+
if (this.lineNumbers) {
|
|
71
|
+
const gutterStyle = palette.id({
|
|
72
|
+
fg: normalizeColor(this.lineNumberColor) ?? Colors.gray(11),
|
|
73
|
+
bg: normalizeColor(this.lineNumberBackground ?? this.background),
|
|
74
|
+
});
|
|
75
|
+
const digits = String(i + 1).padStart(this.gutterWidth - 1, " ");
|
|
76
|
+
buffer.drawText(x + this.padding.left, lineY, `${digits} `, gutterStyle, this.gutterWidth);
|
|
77
|
+
}
|
|
78
|
+
const line = this.lines[i] ?? [];
|
|
79
|
+
for (const token of line) {
|
|
80
|
+
if (contentWidth <= 0)
|
|
81
|
+
break;
|
|
82
|
+
const remaining = x + w - drawX;
|
|
83
|
+
if (remaining <= 0)
|
|
84
|
+
break;
|
|
85
|
+
const style = token.style ?? {};
|
|
86
|
+
const fg = normalizeColor(style.fg);
|
|
87
|
+
const bg = normalizeColor(style.bg ?? this.background);
|
|
88
|
+
const styleId = palette.id({
|
|
89
|
+
fg,
|
|
90
|
+
bg,
|
|
91
|
+
bold: style.bold,
|
|
92
|
+
italic: style.italic,
|
|
93
|
+
underline: style.underline,
|
|
94
|
+
});
|
|
95
|
+
buffer.drawText(drawX, lineY, token.text, styleId, remaining);
|
|
96
|
+
drawX += displayWidth(token.text);
|
|
97
|
+
if (drawX >= x + w)
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
updateProps(props) {
|
|
103
|
+
super.updateProps(props);
|
|
104
|
+
if (props.lines !== undefined)
|
|
105
|
+
this.lines = props.lines;
|
|
106
|
+
if (props.lineNumbers !== undefined)
|
|
107
|
+
this.lineNumbers = !!props.lineNumbers;
|
|
108
|
+
if (props.padding !== undefined)
|
|
109
|
+
this.padding = resolvePadding(props.padding);
|
|
110
|
+
if (props.background !== undefined)
|
|
111
|
+
this.background = props.background;
|
|
112
|
+
if (props.lineNumberColor !== undefined)
|
|
113
|
+
this.lineNumberColor = props.lineNumberColor;
|
|
114
|
+
if (props.lineNumberBackground !== undefined)
|
|
115
|
+
this.lineNumberBackground = props.lineNumberBackground;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=codeblock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codeblock.js","sourceRoot":"","sources":["../../../src/hosts/codeblock.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 HStackProps extends CommonProps {
|
|
5
|
+
spacing?: number;
|
|
6
|
+
alignment?: "top" | "center" | "bottom";
|
|
7
|
+
}
|
|
8
|
+
export declare class HStackHost extends BaseHost {
|
|
9
|
+
spacing: number;
|
|
10
|
+
alignment: "top" | "center" | "bottom";
|
|
11
|
+
private cachedSizes;
|
|
12
|
+
constructor(props: HStackProps, 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=hstack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hstack.d.ts","sourceRoot":"","sources":["../../../src/hosts/hstack.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,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAA;CACxC;AAcD,qBAAa,UAAW,SAAQ,QAAQ;IACtC,OAAO,SAAI;IACX,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAQ;IAC9C,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 HStack alignment names to generic flex alignment
|
|
4
|
+
function toFlexAlignment(alignment) {
|
|
5
|
+
switch (alignment) {
|
|
6
|
+
case "top":
|
|
7
|
+
return "start";
|
|
8
|
+
case "center":
|
|
9
|
+
return "center";
|
|
10
|
+
case "bottom":
|
|
11
|
+
return "end";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export class HStackHost extends BaseHost {
|
|
15
|
+
spacing = 0;
|
|
16
|
+
alignment = "top";
|
|
17
|
+
cachedSizes = [];
|
|
18
|
+
constructor(props, ctx) {
|
|
19
|
+
super("hstack", props, ctx);
|
|
20
|
+
this.updateProps(props);
|
|
21
|
+
}
|
|
22
|
+
measure(maxW, maxH) {
|
|
23
|
+
const result = measureFlex("horizontal", this.children, this.spacing, maxW, maxH);
|
|
24
|
+
this.cachedSizes = result.sizes;
|
|
25
|
+
return result.totalSize;
|
|
26
|
+
}
|
|
27
|
+
layout(rect) {
|
|
28
|
+
super.layout(rect);
|
|
29
|
+
const stretchCross = this.alignment === "top";
|
|
30
|
+
layoutFlex("horizontal", 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=hstack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hstack.js","sourceRoot":"","sources":["../../../src/hosts/hstack.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,SAAsC;IAC7D,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,KAAK;YACR,OAAO,OAAO,CAAA;QAChB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAA;QACjB,KAAK,QAAQ;YACX,OAAO,KAAK,CAAA;IAChB,CAAC;AACH,CAAC;AAED,MAAM,OAAO,UAAW,SAAQ,QAAQ;IACtC,OAAO,GAAG,CAAC,CAAA;IACX,SAAS,GAAgC,KAAK,CAAA;IACtC,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,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;QACjF,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,KAAK,CAAA;QAC7C,UAAU,CACR,YAAY,EACZ,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,SAAwC,CAAA;IACpG,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { HostContext, CommonProps } from "../reconciler/types.js";
|
|
2
|
+
import type { BaseHost } from "./base.js";
|
|
3
|
+
import { RawTextHost } from "./text.js";
|
|
4
|
+
export { BaseHost } from "./base.js";
|
|
5
|
+
export { TextHost, RawTextHost, type TextProps } from "./text.js";
|
|
6
|
+
export { SpacerHost, type SpacerProps } from "./spacer.js";
|
|
7
|
+
export { VStackHost, type VStackProps } from "./vstack.js";
|
|
8
|
+
export { HStackHost, type HStackProps } from "./hstack.js";
|
|
9
|
+
export { ZStackHost, type ZStackProps } from "./zstack.js";
|
|
10
|
+
export { BoxHost, type BoxProps } from "./box.js";
|
|
11
|
+
export { CanvasHost, type CanvasProps, type DrawContext } from "./canvas.js";
|
|
12
|
+
export { CodeBlockHost, type CodeBlockProps } from "./codeblock.js";
|
|
13
|
+
export declare const hostRegistry: Record<string, new (props: any, ctx: HostContext) => BaseHost>;
|
|
14
|
+
export declare function createHostInstance(type: string, props: CommonProps, ctx: HostContext): BaseHost;
|
|
15
|
+
export declare function createTextInstance(text: string, ctx: HostContext): RawTextHost;
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hosts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAY,WAAW,EAAE,MAAM,WAAW,CAAA;AASjD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAInE,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,KAAK,QAAQ,CASvF,CAAA;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,GAAG,QAAQ,CAM/F;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,WAAW,CAE9E"}
|