@effect-tui/react 0.15.2 → 2.0.0
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/README.md +11 -2
- package/dist/src/codeblock.d.ts +1 -1
- package/dist/src/codeblock.d.ts.map +1 -1
- package/dist/src/codeblock.js +2 -2
- package/dist/src/codeblock.js.map +1 -1
- package/dist/src/components/ListView.d.ts +4 -4
- package/dist/src/components/ListView.d.ts.map +1 -1
- package/dist/src/components/ListView.js +16 -17
- package/dist/src/components/ListView.js.map +1 -1
- package/dist/src/components/Markdown.js +3 -3
- package/dist/src/components/Markdown.js.map +1 -1
- package/dist/src/components/MultilineTextInput.d.ts.map +1 -1
- package/dist/src/components/MultilineTextInput.js +133 -305
- package/dist/src/components/MultilineTextInput.js.map +1 -1
- package/dist/src/components/TextInput.d.ts.map +1 -1
- package/dist/src/components/TextInput.js +51 -98
- package/dist/src/components/TextInput.js.map +1 -1
- package/dist/src/components/text-editing.d.ts +61 -0
- package/dist/src/components/text-editing.d.ts.map +1 -1
- package/dist/src/components/text-editing.js +131 -0
- package/dist/src/components/text-editing.js.map +1 -1
- package/dist/src/console/ConsolePopover.d.ts +7 -1
- package/dist/src/console/ConsolePopover.d.ts.map +1 -1
- package/dist/src/console/ConsolePopover.js +55 -74
- package/dist/src/console/ConsolePopover.js.map +1 -1
- package/dist/src/debug/DebugOverlay.d.ts.map +1 -1
- package/dist/src/debug/DebugOverlay.js +3 -57
- package/dist/src/debug/DebugOverlay.js.map +1 -1
- package/dist/src/debug/DiagnosticsPanel.js +1 -1
- package/dist/src/debug/DiagnosticsPanel.js.map +1 -1
- package/dist/src/dev.d.ts +5 -117
- package/dist/src/dev.d.ts.map +1 -1
- package/dist/src/dev.js +3 -333
- package/dist/src/dev.js.map +1 -1
- package/dist/src/hooks/use-scroll.d.ts +31 -35
- package/dist/src/hooks/use-scroll.d.ts.map +1 -1
- package/dist/src/hooks/use-scroll.js +51 -90
- package/dist/src/hooks/use-scroll.js.map +1 -1
- package/dist/src/hosts/base.d.ts +13 -2
- package/dist/src/hosts/base.d.ts.map +1 -1
- package/dist/src/hosts/base.js +74 -2
- package/dist/src/hosts/base.js.map +1 -1
- package/dist/src/hosts/box.d.ts +2 -2
- package/dist/src/hosts/box.d.ts.map +1 -1
- package/dist/src/hosts/box.js +29 -2
- package/dist/src/hosts/box.js.map +1 -1
- package/dist/src/hosts/canvas.d.ts +24 -4
- package/dist/src/hosts/canvas.d.ts.map +1 -1
- package/dist/src/hosts/canvas.js +107 -41
- package/dist/src/hosts/canvas.js.map +1 -1
- package/dist/src/hosts/codeblock.d.ts +10 -12
- package/dist/src/hosts/codeblock.d.ts.map +1 -1
- package/dist/src/hosts/codeblock.js +38 -35
- package/dist/src/hosts/codeblock.js.map +1 -1
- package/dist/src/hosts/flex-container.d.ts +3 -3
- package/dist/src/hosts/flex-container.d.ts.map +1 -1
- package/dist/src/hosts/flex-container.js +20 -5
- package/dist/src/hosts/flex-container.js.map +1 -1
- package/dist/src/hosts/index.d.ts +3 -2
- package/dist/src/hosts/index.d.ts.map +1 -1
- package/dist/src/hosts/index.js +2 -1
- package/dist/src/hosts/index.js.map +1 -1
- package/dist/src/hosts/layout-helpers.d.ts +10 -0
- package/dist/src/hosts/layout-helpers.d.ts.map +1 -0
- package/dist/src/hosts/layout-helpers.js +10 -0
- package/dist/src/hosts/layout-helpers.js.map +1 -0
- package/dist/src/hosts/leaf.d.ts +14 -0
- package/dist/src/hosts/leaf.d.ts.map +1 -0
- package/dist/src/hosts/leaf.js +31 -0
- package/dist/src/hosts/leaf.js.map +1 -0
- package/dist/src/hosts/overlay-item.d.ts +2 -2
- package/dist/src/hosts/overlay-item.d.ts.map +1 -1
- package/dist/src/hosts/overlay-item.js +7 -2
- package/dist/src/hosts/overlay-item.js.map +1 -1
- package/dist/src/hosts/overlay.d.ts +2 -2
- package/dist/src/hosts/overlay.d.ts.map +1 -1
- package/dist/src/hosts/overlay.js +6 -9
- package/dist/src/hosts/overlay.js.map +1 -1
- package/dist/src/hosts/scroll.d.ts +54 -26
- package/dist/src/hosts/scroll.d.ts.map +1 -1
- package/dist/src/hosts/scroll.js +185 -87
- package/dist/src/hosts/scroll.js.map +1 -1
- package/dist/src/hosts/single-child.d.ts.map +1 -1
- package/dist/src/hosts/single-child.js +2 -0
- package/dist/src/hosts/single-child.js.map +1 -1
- package/dist/src/hosts/spacer.d.ts +3 -3
- package/dist/src/hosts/spacer.d.ts.map +1 -1
- package/dist/src/hosts/spacer.js +8 -3
- package/dist/src/hosts/spacer.js.map +1 -1
- package/dist/src/hosts/text.d.ts +22 -18
- package/dist/src/hosts/text.d.ts.map +1 -1
- package/dist/src/hosts/text.js +108 -131
- package/dist/src/hosts/text.js.map +1 -1
- package/dist/src/hosts/vstack.js +1 -1
- package/dist/src/hosts/vstack.js.map +1 -1
- package/dist/src/hosts/zstack.d.ts +3 -3
- package/dist/src/hosts/zstack.d.ts.map +1 -1
- package/dist/src/hosts/zstack.js +13 -8
- package/dist/src/hosts/zstack.js.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/internal/dev/hmr.d.ts +20 -0
- package/dist/src/internal/dev/hmr.d.ts.map +1 -0
- package/dist/src/internal/dev/hmr.js +93 -0
- package/dist/src/internal/dev/hmr.js.map +1 -0
- package/dist/src/internal/dev/runtime.d.ts +24 -0
- package/dist/src/internal/dev/runtime.d.ts.map +1 -0
- package/dist/src/internal/dev/runtime.js +135 -0
- package/dist/src/internal/dev/runtime.js.map +1 -0
- package/dist/src/internal/dev/ui.d.ts +13 -0
- package/dist/src/internal/dev/ui.d.ts.map +1 -0
- package/dist/src/internal/dev/ui.js +51 -0
- package/dist/src/internal/dev/ui.js.map +1 -0
- package/dist/src/internal/renderer/context.d.ts +9 -0
- package/dist/src/internal/renderer/context.d.ts.map +1 -0
- package/dist/src/internal/renderer/context.js +22 -0
- package/dist/src/internal/renderer/context.js.map +1 -0
- package/dist/src/internal/renderer/core/FrameBuilder.d.ts +18 -0
- package/dist/src/internal/renderer/core/FrameBuilder.d.ts.map +1 -0
- package/dist/src/internal/renderer/core/FrameBuilder.js +40 -0
- package/dist/src/internal/renderer/core/FrameBuilder.js.map +1 -0
- package/dist/src/internal/renderer/core/RendererState.d.ts +41 -0
- package/dist/src/internal/renderer/core/RendererState.d.ts.map +1 -0
- package/dist/src/internal/renderer/core/RendererState.js +70 -0
- package/dist/src/internal/renderer/core/RendererState.js.map +1 -0
- package/dist/src/internal/renderer/core/index.d.ts +3 -0
- package/dist/src/internal/renderer/core/index.d.ts.map +1 -0
- package/dist/src/internal/renderer/core/index.js +3 -0
- package/dist/src/internal/renderer/core/index.js.map +1 -0
- package/dist/src/internal/renderer/index.d.ts +40 -0
- package/dist/src/internal/renderer/index.d.ts.map +1 -0
- package/dist/src/internal/renderer/index.js +543 -0
- package/dist/src/internal/renderer/index.js.map +1 -0
- package/dist/src/internal/renderer/input/InputProcessor.d.ts +30 -0
- package/dist/src/internal/renderer/input/InputProcessor.d.ts.map +1 -0
- package/dist/src/internal/renderer/input/InputProcessor.js +122 -0
- package/dist/src/internal/renderer/input/InputProcessor.js.map +1 -0
- package/dist/src/internal/renderer/input/index.d.ts +2 -0
- package/dist/src/internal/renderer/input/index.d.ts.map +1 -0
- package/dist/src/internal/renderer/input/index.js +2 -0
- package/dist/src/internal/renderer/input/index.js.map +1 -0
- package/dist/src/internal/renderer/lifecycle/EventBus.d.ts +42 -0
- package/dist/src/internal/renderer/lifecycle/EventBus.d.ts.map +1 -0
- package/dist/src/internal/renderer/lifecycle/EventBus.js +97 -0
- package/dist/src/internal/renderer/lifecycle/EventBus.js.map +1 -0
- package/dist/src/internal/renderer/lifecycle/ProcessLifecycle.d.ts +13 -0
- package/dist/src/internal/renderer/lifecycle/ProcessLifecycle.d.ts.map +1 -0
- package/dist/src/internal/renderer/lifecycle/ProcessLifecycle.js +111 -0
- package/dist/src/internal/renderer/lifecycle/ProcessLifecycle.js.map +1 -0
- package/dist/src/internal/renderer/lifecycle/RenderCache.d.ts +3 -0
- package/dist/src/internal/renderer/lifecycle/RenderCache.d.ts.map +1 -0
- package/dist/src/internal/renderer/lifecycle/RenderCache.js +9 -0
- package/dist/src/internal/renderer/lifecycle/RenderCache.js.map +1 -0
- package/dist/src/internal/renderer/lifecycle/index.d.ts +4 -0
- package/dist/src/internal/renderer/lifecycle/index.d.ts.map +1 -0
- package/dist/src/internal/renderer/lifecycle/index.js +4 -0
- package/dist/src/internal/renderer/lifecycle/index.js.map +1 -0
- package/dist/src/internal/renderer/modes/FullscreenRenderer.d.ts +12 -0
- package/dist/src/internal/renderer/modes/FullscreenRenderer.d.ts.map +1 -0
- package/dist/src/internal/renderer/modes/FullscreenRenderer.js +54 -0
- package/dist/src/internal/renderer/modes/FullscreenRenderer.js.map +1 -0
- package/dist/src/internal/renderer/modes/InlineRenderer.d.ts +25 -0
- package/dist/src/internal/renderer/modes/InlineRenderer.d.ts.map +1 -0
- package/dist/src/internal/renderer/modes/InlineRenderer.js +166 -0
- package/dist/src/internal/renderer/modes/InlineRenderer.js.map +1 -0
- package/dist/src/internal/renderer/modes/RendererMode.d.ts +42 -0
- package/dist/src/internal/renderer/modes/RendererMode.d.ts.map +1 -0
- package/dist/src/internal/renderer/modes/RendererMode.js +2 -0
- package/dist/src/internal/renderer/modes/RendererMode.js.map +1 -0
- package/dist/src/internal/renderer/modes/StaticContentRenderer.d.ts +25 -0
- package/dist/src/internal/renderer/modes/StaticContentRenderer.d.ts.map +1 -0
- package/dist/src/internal/renderer/modes/StaticContentRenderer.js +49 -0
- package/dist/src/internal/renderer/modes/StaticContentRenderer.js.map +1 -0
- package/dist/src/internal/renderer/modes/index.d.ts +5 -0
- package/dist/src/internal/renderer/modes/index.d.ts.map +1 -0
- package/dist/src/internal/renderer/modes/index.js +4 -0
- package/dist/src/internal/renderer/modes/index.js.map +1 -0
- package/dist/src/internal/renderer/terminal/KeyboardCapabilityProbe.d.ts +13 -0
- package/dist/src/internal/renderer/terminal/KeyboardCapabilityProbe.d.ts.map +1 -0
- package/dist/src/internal/renderer/terminal/KeyboardCapabilityProbe.js +75 -0
- package/dist/src/internal/renderer/terminal/KeyboardCapabilityProbe.js.map +1 -0
- package/dist/src/internal/renderer/terminal/TerminalSetup.d.ts +29 -0
- package/dist/src/internal/renderer/terminal/TerminalSetup.d.ts.map +1 -0
- package/dist/src/internal/renderer/terminal/TerminalSetup.js +82 -0
- package/dist/src/internal/renderer/terminal/TerminalSetup.js.map +1 -0
- package/dist/src/internal/renderer/terminal/index.d.ts +3 -0
- package/dist/src/internal/renderer/terminal/index.d.ts.map +1 -0
- package/dist/src/internal/renderer/terminal/index.js +3 -0
- package/dist/src/internal/renderer/terminal/index.js.map +1 -0
- package/dist/src/internal/renderer/types.d.ts +122 -0
- package/dist/src/internal/renderer/types.d.ts.map +1 -0
- package/dist/src/internal/renderer/types.js +2 -0
- package/dist/src/internal/renderer/types.js.map +1 -0
- package/dist/src/motion/hooks.d.ts +1 -1
- package/dist/src/motion/hooks.js +1 -1
- package/dist/src/reconciler/host-config.js +2 -2
- package/dist/src/reconciler/host-config.js.map +1 -1
- package/dist/src/reconciler/types.d.ts +5 -1
- package/dist/src/reconciler/types.d.ts.map +1 -1
- package/dist/src/renderer-context.d.ts +1 -8
- package/dist/src/renderer-context.d.ts.map +1 -1
- package/dist/src/renderer-context.js +1 -21
- package/dist/src/renderer-context.js.map +1 -1
- package/dist/src/renderer-types.d.ts +1 -115
- package/dist/src/renderer-types.d.ts.map +1 -1
- package/dist/src/renderer.d.ts +1 -31
- package/dist/src/renderer.d.ts.map +1 -1
- package/dist/src/renderer.js +1 -495
- package/dist/src/renderer.js.map +1 -1
- package/dist/src/test/render-tui.d.ts +3 -3
- package/dist/src/test/render-tui.d.ts.map +1 -1
- package/dist/src/test/render-tui.js +16 -9
- package/dist/src/test/render-tui.js.map +1 -1
- package/dist/src/utils/alignment.d.ts +1 -1
- package/dist/src/utils/alignment.d.ts.map +1 -1
- package/dist/src/utils/alignment.js +0 -2
- package/dist/src/utils/alignment.js.map +1 -1
- package/dist/src/utils/border.d.ts +1 -1
- package/dist/src/utils/border.d.ts.map +1 -1
- package/dist/src/utils/border.js +2 -0
- package/dist/src/utils/border.js.map +1 -1
- package/dist/src/utils/console-helpers.d.ts +19 -0
- package/dist/src/utils/console-helpers.d.ts.map +1 -0
- package/dist/src/utils/console-helpers.js +61 -0
- package/dist/src/utils/console-helpers.js.map +1 -0
- package/dist/src/utils/index.d.ts +2 -1
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.js +2 -1
- package/dist/src/utils/index.js.map +1 -1
- package/dist/src/utils/styles.d.ts +8 -1
- package/dist/src/utils/styles.d.ts.map +1 -1
- package/dist/src/utils/styles.js +10 -8
- package/dist/src/utils/styles.js.map +1 -1
- package/dist/src/utils/text-layout.d.ts +22 -0
- package/dist/src/utils/text-layout.d.ts.map +1 -0
- package/dist/src/utils/text-layout.js +37 -0
- package/dist/src/utils/text-layout.js.map +1 -0
- package/dist/src/utils/text-wrap.d.ts +31 -1
- package/dist/src/utils/text-wrap.d.ts.map +1 -1
- package/dist/src/utils/text-wrap.js +205 -48
- package/dist/src/utils/text-wrap.js.map +1 -1
- package/dist/src/visualize/index.js +1 -1
- package/dist/src/visualize/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/codeblock.tsx +2 -2
- package/src/components/ListView.tsx +21 -23
- package/src/components/Markdown.tsx +3 -3
- package/src/components/MultilineTextInput.tsx +138 -344
- package/src/components/TextInput.tsx +54 -99
- package/src/components/text-editing.ts +180 -0
- package/src/console/ConsolePopover.tsx +124 -107
- package/src/debug/DebugOverlay.ts +15 -74
- package/src/debug/DiagnosticsPanel.tsx +1 -1
- package/src/dev.tsx +5 -458
- package/src/hooks/use-scroll.ts +85 -145
- package/src/hosts/base.ts +86 -3
- package/src/hosts/box.ts +37 -2
- package/src/hosts/canvas.ts +128 -42
- package/src/hosts/codeblock.ts +48 -35
- package/src/hosts/flex-container.ts +25 -6
- package/src/hosts/index.ts +11 -2
- package/src/hosts/layout-helpers.ts +20 -0
- package/src/hosts/leaf.ts +36 -0
- package/src/hosts/overlay-item.ts +8 -2
- package/src/hosts/overlay.ts +13 -11
- package/src/hosts/scroll.ts +228 -106
- package/src/hosts/single-child.ts +2 -0
- package/src/hosts/spacer.ts +8 -3
- package/src/hosts/text.ts +126 -132
- package/src/hosts/vstack.ts +1 -1
- package/src/hosts/zstack.ts +14 -9
- package/src/index.ts +2 -2
- package/src/internal/dev/hmr.ts +101 -0
- package/src/internal/dev/runtime.ts +170 -0
- package/src/internal/dev/ui.tsx +87 -0
- package/src/internal/renderer/context.ts +27 -0
- package/src/{renderer → internal/renderer}/core/FrameBuilder.ts +2 -2
- package/src/internal/renderer/index.ts +689 -0
- package/src/{renderer → internal/renderer}/input/InputProcessor.ts +10 -1
- package/src/{renderer → internal/renderer}/lifecycle/EventBus.ts +9 -1
- package/src/internal/renderer/lifecycle/ProcessLifecycle.ts +125 -0
- package/src/internal/renderer/lifecycle/index.ts +3 -0
- package/src/{renderer → internal/renderer}/modes/InlineRenderer.ts +5 -2
- package/src/{renderer → internal/renderer}/modes/RendererMode.ts +1 -1
- package/src/{renderer → internal/renderer}/modes/StaticContentRenderer.ts +5 -2
- package/src/internal/renderer/terminal/KeyboardCapabilityProbe.ts +91 -0
- package/src/{renderer/lifecycle → internal/renderer/terminal}/TerminalSetup.ts +4 -22
- package/src/internal/renderer/terminal/index.ts +2 -0
- package/src/internal/renderer/types.ts +129 -0
- package/src/motion/hooks.ts +1 -1
- package/src/reconciler/host-config.ts +2 -2
- package/src/reconciler/types.ts +7 -1
- package/src/renderer-context.ts +1 -27
- package/src/renderer-types.ts +10 -123
- package/src/renderer.ts +1 -619
- package/src/test/render-tui.ts +16 -10
- package/src/utils/alignment.ts +1 -3
- package/src/utils/border.ts +11 -1
- package/src/utils/console-helpers.ts +86 -0
- package/src/utils/index.ts +15 -1
- package/src/utils/styles.ts +16 -4
- package/src/utils/text-layout.ts +65 -0
- package/src/utils/text-wrap.ts +261 -48
- package/src/visualize/index.tsx +1 -1
- package/src/renderer/lifecycle/ResizeManager.ts +0 -65
- package/src/renderer/lifecycle/index.ts +0 -4
- /package/src/{renderer → internal/renderer}/core/RendererState.ts +0 -0
- /package/src/{renderer → internal/renderer}/core/index.ts +0 -0
- /package/src/{renderer → internal/renderer}/input/index.ts +0 -0
- /package/src/{renderer → internal/renderer}/lifecycle/RenderCache.ts +0 -0
- /package/src/{renderer → internal/renderer}/modes/FullscreenRenderer.ts +0 -0
- /package/src/{renderer → internal/renderer}/modes/index.ts +0 -0
package/dist/src/hosts/box.js
CHANGED
|
@@ -26,7 +26,7 @@ export class BoxHost extends SingleChildHost {
|
|
|
26
26
|
const titleHeight = this.titleDivider && this.title && this.border !== "none" ? 2 : 0; // title row + divider
|
|
27
27
|
return this.borderThickness + titleHeight + this.padding.top + this.padding.bottom + this.borderThickness;
|
|
28
28
|
}
|
|
29
|
-
|
|
29
|
+
measureSelf(maxW, maxH) {
|
|
30
30
|
// Apply frame constraints first
|
|
31
31
|
const constrained = this.constrainProposal(maxW, maxH);
|
|
32
32
|
const innerMaxW = Math.max(0, constrained.w - this.insetX);
|
|
@@ -47,7 +47,7 @@ export class BoxHost extends SingleChildHost {
|
|
|
47
47
|
// Apply frame constraints to result
|
|
48
48
|
return this.constrainResult(naturalSize);
|
|
49
49
|
}
|
|
50
|
-
|
|
50
|
+
layoutSelf(rect) {
|
|
51
51
|
const layoutRect = this.layoutWithConstraints(rect);
|
|
52
52
|
const t = this.borderThickness;
|
|
53
53
|
// When titleDivider: title row (1) + divider line (1) = 2
|
|
@@ -120,6 +120,14 @@ export class BoxHost extends SingleChildHost {
|
|
|
120
120
|
}
|
|
121
121
|
updateProps(props) {
|
|
122
122
|
super.updateProps(props);
|
|
123
|
+
const prevPadding = this.padding;
|
|
124
|
+
const prevBorder = this.border;
|
|
125
|
+
const prevBorderColor = this.borderColor;
|
|
126
|
+
const prevBg = this.bg;
|
|
127
|
+
const prevTitle = this.title;
|
|
128
|
+
const prevTitleColor = this.titleColor;
|
|
129
|
+
const prevTitleBold = this.titleBold;
|
|
130
|
+
const prevTitleDivider = this.titleDivider;
|
|
123
131
|
this.padding = resolvePadding(props.padding);
|
|
124
132
|
this.border = props.border ?? "none";
|
|
125
133
|
// Color props support MotionValue/ColorMotionValue - auto-subscribe and animate
|
|
@@ -135,6 +143,25 @@ export class BoxHost extends SingleChildHost {
|
|
|
135
143
|
});
|
|
136
144
|
this.titleBold = Boolean(props.titleBold);
|
|
137
145
|
this.titleDivider = Boolean(props.titleDivider);
|
|
146
|
+
const paddingChanged = prevPadding.top !== this.padding.top ||
|
|
147
|
+
prevPadding.right !== this.padding.right ||
|
|
148
|
+
prevPadding.bottom !== this.padding.bottom ||
|
|
149
|
+
prevPadding.left !== this.padding.left;
|
|
150
|
+
const layoutChanged = paddingChanged ||
|
|
151
|
+
prevBorder !== this.border ||
|
|
152
|
+
prevTitle !== this.title ||
|
|
153
|
+
prevTitleDivider !== this.titleDivider;
|
|
154
|
+
if (layoutChanged) {
|
|
155
|
+
this.invalidateLayout();
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const renderChanged = prevBorderColor !== this.borderColor ||
|
|
159
|
+
prevBg !== this.bg ||
|
|
160
|
+
prevTitleColor !== this.titleColor ||
|
|
161
|
+
prevTitleBold !== this.titleBold;
|
|
162
|
+
if (renderChanged) {
|
|
163
|
+
this.invalidateRender();
|
|
164
|
+
}
|
|
138
165
|
}
|
|
139
166
|
}
|
|
140
167
|
//# sourceMappingURL=box.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"box.js","sourceRoot":"","sources":["../../../src/hosts/box.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAGzC,OAAO,EAEN,WAAW,EACX,UAAU,EACV,uBAAuB,EAGvB,cAAc,EACd,gBAAgB,EAChB,YAAY,GACZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAsBnD,MAAM,OAAO,OAAQ,SAAQ,eAAe;IAC3C,OAAO,GAAY,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAA;IAC3D,MAAM,GAAe,MAAM,CAAA;IAC3B,WAAW,CAAQ;IACnB,EAAE,CAAQ;IACV,KAAK,CAAS;IACd,UAAU,CAAQ;IAClB,SAAS,GAAG,KAAK,CAAA;IACjB,YAAY,GAAG,KAAK,CAAA;IAEpB,YAAY,KAAe,EAAE,GAAgB;QAC5C,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;QACxB,IAAI,CAAC,WAAW,CAAC,KAA2C,CAAC,CAAA;IAC9D,CAAC;IAED,IAAY,eAAe;QAC1B,OAAO,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACtC,CAAC;IAED,IAAY,MAAM;QACjB,OAAO,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAA;IAC5F,CAAC;IAED,IAAY,MAAM;QACjB,0EAA0E;QAC1E,8DAA8D;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,sBAAsB;QAC5G,OAAO,IAAI,CAAC,eAAe,GAAG,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAA;IAC1G,CAAC;
|
|
1
|
+
{"version":3,"file":"box.js","sourceRoot":"","sources":["../../../src/hosts/box.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
import type { CellBuffer, Color, Palette } from "@effect-tui/core";
|
|
2
2
|
import type { CommonProps, HostContext, Size } from "../reconciler/types.js";
|
|
3
3
|
import { type BorderKind } from "../utils/index.js";
|
|
4
|
-
import {
|
|
4
|
+
import { LeafHost } from "./leaf.js";
|
|
5
5
|
export type { BorderKind };
|
|
6
6
|
export interface DrawContext {
|
|
7
7
|
/** Canvas width in cells */
|
|
8
8
|
width: number;
|
|
9
9
|
/** Canvas height in cells */
|
|
10
10
|
height: number;
|
|
11
|
+
/** Resolve a style id for reuse across many draw calls */
|
|
12
|
+
style(opts?: {
|
|
13
|
+
fg?: Color;
|
|
14
|
+
bg?: Color;
|
|
15
|
+
bold?: boolean;
|
|
16
|
+
italic?: boolean;
|
|
17
|
+
underline?: boolean;
|
|
18
|
+
inverse?: boolean;
|
|
19
|
+
}): number;
|
|
11
20
|
/** Draw text at position */
|
|
12
21
|
text(x: number, y: number, str: string, opts?: {
|
|
13
22
|
fg?: Color;
|
|
@@ -18,7 +27,7 @@ export interface DrawContext {
|
|
|
18
27
|
inverse?: boolean;
|
|
19
28
|
}): void;
|
|
20
29
|
/** Fill rectangle with character */
|
|
21
|
-
|
|
30
|
+
fillRect(x: number, y: number, w: number, h: number, char?: string, opts?: {
|
|
22
31
|
fg?: Color;
|
|
23
32
|
bg?: Color;
|
|
24
33
|
bold?: boolean;
|
|
@@ -35,6 +44,17 @@ export interface DrawContext {
|
|
|
35
44
|
}): void;
|
|
36
45
|
/** Clear entire canvas */
|
|
37
46
|
clear(): void;
|
|
47
|
+
/** Draw a single cell with a codepoint */
|
|
48
|
+
cell(x: number, y: number, cp: number, style?: number, width?: number): void;
|
|
49
|
+
/** Draw many single-cell codepoints efficiently */
|
|
50
|
+
cells(cells: Array<CanvasCell>): void;
|
|
51
|
+
}
|
|
52
|
+
export interface CanvasCell {
|
|
53
|
+
x: number;
|
|
54
|
+
y: number;
|
|
55
|
+
cp: number;
|
|
56
|
+
style?: number;
|
|
57
|
+
width?: number;
|
|
38
58
|
}
|
|
39
59
|
export interface CanvasProps extends CommonProps {
|
|
40
60
|
/** Draw function called each render */
|
|
@@ -46,13 +66,13 @@ export interface CanvasProps extends CommonProps {
|
|
|
46
66
|
/** Inherit background color from parent and pre-fill canvas (default: false) */
|
|
47
67
|
inheritBg?: boolean;
|
|
48
68
|
}
|
|
49
|
-
export declare class CanvasHost extends
|
|
69
|
+
export declare class CanvasHost extends LeafHost {
|
|
50
70
|
draw: CanvasProps["draw"];
|
|
51
71
|
fixedWidth?: number;
|
|
52
72
|
fixedHeight?: number;
|
|
53
73
|
inheritBg: boolean;
|
|
54
74
|
constructor(props: CanvasProps, ctx: HostContext);
|
|
55
|
-
|
|
75
|
+
protected measureSelf(maxW: number, maxH: number): Size;
|
|
56
76
|
render(buffer: CellBuffer, palette: Palette): void;
|
|
57
77
|
updateProps(props: Record<string, unknown>): void;
|
|
58
78
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../../../src/hosts/canvas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAElE,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../../../src/hosts/canvas.ts"],"names":[],"mappings":"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"}
|
package/dist/src/hosts/canvas.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { Colors } from "@effect-tui/core";
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
|
|
1
|
+
import { Colors, displayWidth } from "@effect-tui/core";
|
|
2
|
+
import * as Prof from "../profiler.js";
|
|
3
|
+
import { borderChars, drawBorder, fillRectWithInheritedBg, resolveBgStyle, styleIdFromProps, toColorValue, } from "../utils/index.js";
|
|
4
|
+
import { LeafHost } from "./leaf.js";
|
|
5
|
+
export class CanvasHost extends LeafHost {
|
|
5
6
|
draw = () => { };
|
|
6
7
|
fixedWidth;
|
|
7
8
|
fixedHeight;
|
|
@@ -10,7 +11,7 @@ export class CanvasHost extends BaseHost {
|
|
|
10
11
|
super("canvas", props, ctx);
|
|
11
12
|
this.updateProps(props);
|
|
12
13
|
}
|
|
13
|
-
|
|
14
|
+
measureSelf(maxW, maxH) {
|
|
14
15
|
const constrained = this.constrainProposal(maxW, maxH);
|
|
15
16
|
const size = {
|
|
16
17
|
w: this.fixedWidth ?? constrained.w,
|
|
@@ -22,23 +23,33 @@ export class CanvasHost extends BaseHost {
|
|
|
22
23
|
if (!this.rect)
|
|
23
24
|
return;
|
|
24
25
|
const { x: ox, y: oy, w, h } = this.rect;
|
|
25
|
-
// Get inherited background for use in drawing functions
|
|
26
|
-
const { value: inheritedBgValue, styleId: inheritedBgStyleId } = this.inheritBg
|
|
27
|
-
? resolveInheritedBgStyle(palette, undefined, this.parent)
|
|
28
|
-
: { value: undefined, styleId: 0 };
|
|
29
26
|
// Pre-fill with inherited background if requested
|
|
30
|
-
|
|
31
|
-
buffer
|
|
32
|
-
|
|
27
|
+
const inheritedBgValue = this.inheritBg
|
|
28
|
+
? fillRectWithInheritedBg(buffer, palette, { x: ox, y: oy, w, h }, undefined, this.parent, {
|
|
29
|
+
skipWhenUndefined: true,
|
|
30
|
+
}).value
|
|
31
|
+
: undefined;
|
|
33
32
|
// Create draw context
|
|
34
33
|
const ctx = {
|
|
35
34
|
width: w,
|
|
36
35
|
height: h,
|
|
36
|
+
style: (opts) => {
|
|
37
|
+
const effectiveBg = opts?.bg ?? (this.inheritBg ? inheritedBgValue : undefined);
|
|
38
|
+
return styleIdFromProps(palette, {
|
|
39
|
+
fg: opts?.fg,
|
|
40
|
+
bg: effectiveBg,
|
|
41
|
+
bold: opts?.bold,
|
|
42
|
+
italic: opts?.italic,
|
|
43
|
+
underline: opts?.underline,
|
|
44
|
+
inverse: opts?.inverse,
|
|
45
|
+
});
|
|
46
|
+
},
|
|
37
47
|
text: (x, y, str, opts) => {
|
|
38
48
|
const px = Math.round(ox + x);
|
|
39
49
|
const py = Math.round(oy + y);
|
|
40
50
|
// Use inherited bg when inheritBg is enabled and no explicit bg provided
|
|
41
51
|
const effectiveBg = opts?.bg ?? (this.inheritBg ? inheritedBgValue : undefined);
|
|
52
|
+
const styleT = Prof.startPhase();
|
|
42
53
|
const style = styleIdFromProps(palette, {
|
|
43
54
|
fg: opts?.fg,
|
|
44
55
|
bg: effectiveBg,
|
|
@@ -47,20 +58,42 @@ export class CanvasHost extends BaseHost {
|
|
|
47
58
|
underline: opts?.underline,
|
|
48
59
|
inverse: opts?.inverse,
|
|
49
60
|
});
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
61
|
+
Prof.endPhase("canvas.text.style", styleT);
|
|
62
|
+
const widthT = Prof.startPhase();
|
|
63
|
+
let textWidth = 0;
|
|
64
|
+
let asciiCp = null;
|
|
65
|
+
if (str.length === 1) {
|
|
66
|
+
const code = str.charCodeAt(0);
|
|
67
|
+
if (code >= 0x20 && code <= 0x7e) {
|
|
68
|
+
textWidth = 1;
|
|
69
|
+
asciiCp = code;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
textWidth = displayWidth(str);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
textWidth = displayWidth(str);
|
|
77
|
+
}
|
|
78
|
+
Prof.endPhase("canvas.text.width", widthT);
|
|
79
|
+
if (textWidth > 0) {
|
|
80
|
+
const drawT = Prof.startPhase();
|
|
81
|
+
if (asciiCp !== null) {
|
|
82
|
+
buffer.drawCP(px, py, asciiCp, style, 1);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
buffer.drawText(px, py, str, style, textWidth);
|
|
86
|
+
}
|
|
87
|
+
Prof.endPhase("canvas.text.draw", drawT);
|
|
56
88
|
}
|
|
57
89
|
},
|
|
58
|
-
|
|
90
|
+
fillRect: (x, y, fw, fh, char = " ", opts) => {
|
|
59
91
|
const px = Math.round(ox + x);
|
|
60
92
|
const py = Math.round(oy + y);
|
|
61
|
-
const cp = char.codePointAt(0);
|
|
93
|
+
const cp = char.length > 0 ? char.codePointAt(0) : " ".codePointAt(0);
|
|
62
94
|
// Use inherited bg when inheritBg is enabled and no explicit bg provided
|
|
63
95
|
const effectiveBg = opts?.bg ?? (this.inheritBg ? inheritedBgValue : undefined);
|
|
96
|
+
const styleT = Prof.startPhase();
|
|
64
97
|
const style = styleIdFromProps(palette, {
|
|
65
98
|
fg: opts?.fg,
|
|
66
99
|
bg: effectiveBg,
|
|
@@ -69,56 +102,80 @@ export class CanvasHost extends BaseHost {
|
|
|
69
102
|
underline: opts?.underline,
|
|
70
103
|
inverse: opts?.inverse,
|
|
71
104
|
});
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
105
|
+
Prof.endPhase("canvas.fillRect.style", styleT);
|
|
106
|
+
const fillW = Math.ceil(fw);
|
|
107
|
+
const fillH = Math.ceil(fh);
|
|
108
|
+
const drawT = Prof.startPhase();
|
|
109
|
+
buffer.fillRect(px, py, fillW, fillH, cp, style);
|
|
110
|
+
Prof.endPhase("canvas.fillRect.draw", drawT);
|
|
79
111
|
},
|
|
80
112
|
box: (x, y, bw, bh, opts) => {
|
|
81
113
|
const px = Math.round(ox + x);
|
|
82
114
|
const py = Math.round(oy + y);
|
|
115
|
+
const boxW = Math.ceil(bw);
|
|
116
|
+
const boxH = Math.ceil(bh);
|
|
83
117
|
const border = opts?.border ?? "none";
|
|
118
|
+
const bgStyleT = Prof.startPhase();
|
|
84
119
|
const { value: bgValue, styleId: bgStyleId } = resolveBgStyle(palette, opts?.bg);
|
|
120
|
+
Prof.endPhase("canvas.box.bg.style", bgStyleT);
|
|
85
121
|
// Fill background (with clipping)
|
|
86
122
|
if (bgValue !== undefined) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
const xx = px + col;
|
|
91
|
-
buffer.drawCP(xx, yy, " ".codePointAt(0), bgStyleId);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
123
|
+
const bgDrawT = Prof.startPhase();
|
|
124
|
+
buffer.fillRect(px, py, boxW, boxH, " ".codePointAt(0), bgStyleId);
|
|
125
|
+
Prof.endPhase("canvas.box.bg.draw", bgDrawT);
|
|
94
126
|
}
|
|
95
127
|
// Draw border (with clipping)
|
|
96
|
-
if (border !== "none" &&
|
|
128
|
+
if (border !== "none" && boxW >= 2 && boxH >= 2) {
|
|
129
|
+
const borderStyleT = Prof.startPhase();
|
|
97
130
|
const chars = borderChars(border);
|
|
98
131
|
const borderFg = toColorValue(opts?.borderColor) ?? toColorValue(opts?.fg) ?? Colors.ansi.gray(8);
|
|
99
132
|
const borderStyle = palette.id({ fg: borderFg });
|
|
100
|
-
|
|
133
|
+
Prof.endPhase("canvas.box.border.style", borderStyleT);
|
|
134
|
+
const borderDrawT = Prof.startPhase();
|
|
135
|
+
drawBorder(buffer, px, py, boxW, boxH, chars, borderStyle, { ox, oy, w, h });
|
|
136
|
+
Prof.endPhase("canvas.box.border.draw", borderDrawT);
|
|
101
137
|
}
|
|
102
138
|
},
|
|
103
139
|
clear: () => {
|
|
140
|
+
const clearT = Prof.startPhase();
|
|
104
141
|
const style = palette.id({});
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
142
|
+
buffer.fillRect(ox, oy, w, h, " ".codePointAt(0), style);
|
|
143
|
+
Prof.endPhase("canvas.clear", clearT);
|
|
144
|
+
},
|
|
145
|
+
cell: (x, y, cp, style = 0, width) => {
|
|
146
|
+
const px = Math.round(ox + x);
|
|
147
|
+
const py = Math.round(oy + y);
|
|
148
|
+
const drawT = Prof.startPhase();
|
|
149
|
+
buffer.drawCP(px, py, cp, style, width);
|
|
150
|
+
Prof.endPhase("canvas.cell.draw", drawT);
|
|
151
|
+
},
|
|
152
|
+
cells: (cells) => {
|
|
153
|
+
const drawT = Prof.startPhase();
|
|
154
|
+
const baseX = ox;
|
|
155
|
+
const baseY = oy;
|
|
156
|
+
for (const cell of cells) {
|
|
157
|
+
const px = Math.round(baseX + cell.x);
|
|
158
|
+
const py = Math.round(baseY + cell.y);
|
|
159
|
+
buffer.drawCP(px, py, cell.cp, cell.style ?? 0, cell.width);
|
|
109
160
|
}
|
|
161
|
+
Prof.endPhase("canvas.cells.draw", drawT);
|
|
110
162
|
},
|
|
111
163
|
};
|
|
112
164
|
buffer.withClip(ox, oy, w, h, () => {
|
|
113
165
|
// Call user's draw function within the canvas clip region
|
|
166
|
+
const drawT = Prof.startPhase();
|
|
114
167
|
this.draw(ctx);
|
|
168
|
+
Prof.endPhase("canvas.draw", drawT);
|
|
115
169
|
});
|
|
116
170
|
}
|
|
117
171
|
updateProps(props) {
|
|
118
172
|
super.updateProps(props);
|
|
173
|
+
const prevDraw = this.draw;
|
|
174
|
+
const prevWidth = this.fixedWidth;
|
|
175
|
+
const prevHeight = this.fixedHeight;
|
|
176
|
+
const prevInheritBg = this.inheritBg;
|
|
119
177
|
if (props.draw !== undefined) {
|
|
120
178
|
this.draw = props.draw;
|
|
121
|
-
this.ctx.requestRender(); // trigger repaint when draw function changes
|
|
122
179
|
}
|
|
123
180
|
if (props.width !== undefined)
|
|
124
181
|
this.fixedWidth = props.width;
|
|
@@ -126,6 +183,15 @@ export class CanvasHost extends BaseHost {
|
|
|
126
183
|
this.fixedHeight = props.height;
|
|
127
184
|
if (props.inheritBg !== undefined)
|
|
128
185
|
this.inheritBg = props.inheritBg;
|
|
186
|
+
const layoutChanged = prevWidth !== this.fixedWidth || prevHeight !== this.fixedHeight;
|
|
187
|
+
if (layoutChanged) {
|
|
188
|
+
this.invalidateLayout();
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
const renderChanged = prevDraw !== this.draw || prevInheritBg !== this.inheritBg;
|
|
192
|
+
if (renderChanged) {
|
|
193
|
+
this.invalidateRender();
|
|
194
|
+
}
|
|
129
195
|
}
|
|
130
196
|
}
|
|
131
197
|
//# sourceMappingURL=canvas.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../../src/hosts/canvas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../../src/hosts/canvas.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,33 +2,31 @@ import { type CellBuffer, type Color, type Palette } from "@effect-tui/core";
|
|
|
2
2
|
import type { HighlightLine } from "../highlight.js";
|
|
3
3
|
import type { CommonProps, HostContext, Size } from "../reconciler/types.js";
|
|
4
4
|
import { type Padding, type PaddingInput } from "../utils/index.js";
|
|
5
|
-
import {
|
|
5
|
+
import { LeafHost } from "./leaf.js";
|
|
6
6
|
export interface CodeBlockProps extends CommonProps {
|
|
7
7
|
lines: HighlightLine[];
|
|
8
8
|
lineNumbers?: boolean;
|
|
9
9
|
padding?: PaddingInput;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
bg?: Color;
|
|
11
|
+
lineNumberFg?: Color;
|
|
12
|
+
lineNumberBg?: Color;
|
|
13
13
|
}
|
|
14
|
-
export declare class CodeBlockHost extends
|
|
14
|
+
export declare class CodeBlockHost extends LeafHost {
|
|
15
15
|
lines: HighlightLine[];
|
|
16
16
|
lineNumbers: boolean;
|
|
17
17
|
padding: Padding;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
bg?: Color;
|
|
19
|
+
lineNumberFg?: Color;
|
|
20
|
+
lineNumberBg?: Color;
|
|
21
21
|
private cachedLineWidths;
|
|
22
22
|
private gutterWidth;
|
|
23
|
-
private prepared;
|
|
24
23
|
constructor(props: CodeBlockProps, ctx: HostContext);
|
|
25
24
|
private computeGutterWidth;
|
|
26
25
|
private get insetX();
|
|
27
26
|
private get insetY();
|
|
28
27
|
private prepareMetrics;
|
|
29
|
-
|
|
30
|
-
protected
|
|
31
|
-
measure(maxW: number, maxH: number): Size;
|
|
28
|
+
protected prepareSelf(_layoutDirty: boolean, _renderDirty: boolean): void;
|
|
29
|
+
protected measureSelf(maxW: number, maxH: number): Size;
|
|
32
30
|
render(buffer: CellBuffer, palette: Palette): void;
|
|
33
31
|
updateProps(props: Record<string, unknown>): void;
|
|
34
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codeblock.d.ts","sourceRoot":"","sources":["../../../src/hosts/codeblock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,KAAK,EAAwB,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAClG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,
|
|
1
|
+
{"version":3,"file":"codeblock.d.ts","sourceRoot":"","sources":["../../../src/hosts/codeblock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,KAAK,EAAwB,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAClG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,EACN,KAAK,OAAO,EACZ,KAAK,YAAY,EAKjB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,WAAW,cAAe,SAAQ,WAAW;IAClD,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,EAAE,CAAC,EAAE,KAAK,CAAA;IACV,YAAY,CAAC,EAAE,KAAK,CAAA;IACpB,YAAY,CAAC,EAAE,KAAK,CAAA;CACpB;AAED,qBAAa,aAAc,SAAQ,QAAQ;IAC1C,KAAK,EAAE,aAAa,EAAE,CAAO;IAC7B,WAAW,UAAQ;IACnB,OAAO,EAAE,OAAO,CAA2C;IAC3D,EAAE,CAAC,EAAE,KAAK,CAAA;IACV,YAAY,CAAC,EAAE,KAAK,CAAA;IACpB,YAAY,CAAC,EAAE,KAAK,CAAA;IAEpB,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,cAAc;cAKH,WAAW,CAAC,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,GAAG,IAAI;IAIlF,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAevD,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAiDzC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAkC1D"}
|
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
import { Colors, displayWidth } from "@effect-tui/core";
|
|
2
|
-
import { resolveBgStyle, resolvePadding, styleIdFromProps } from "../utils/index.js";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
return line.reduce((w, token) => w + displayWidth(token.text), 0);
|
|
6
|
-
}
|
|
7
|
-
export class CodeBlockHost extends BaseHost {
|
|
2
|
+
import { resolveBgStyle, resolvePadding, spansDisplayWidth, styleIdFromProps, } from "../utils/index.js";
|
|
3
|
+
import { LeafHost } from "./leaf.js";
|
|
4
|
+
export class CodeBlockHost extends LeafHost {
|
|
8
5
|
lines = [[]];
|
|
9
6
|
lineNumbers = false;
|
|
10
7
|
padding = { top: 0, right: 0, bottom: 0, left: 0 };
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
bg;
|
|
9
|
+
lineNumberFg;
|
|
10
|
+
lineNumberBg;
|
|
14
11
|
cachedLineWidths = [];
|
|
15
12
|
gutterWidth = 0;
|
|
16
|
-
prepared = false;
|
|
17
13
|
constructor(props, ctx) {
|
|
18
14
|
super("codeblock", props, ctx);
|
|
19
15
|
this.updateProps(props);
|
|
@@ -33,19 +29,13 @@ export class CodeBlockHost extends BaseHost {
|
|
|
33
29
|
return this.padding.top + this.padding.bottom;
|
|
34
30
|
}
|
|
35
31
|
prepareMetrics() {
|
|
36
|
-
this.cachedLineWidths = this.lines.map((line) =>
|
|
32
|
+
this.cachedLineWidths = this.lines.map((line) => spansDisplayWidth(line));
|
|
37
33
|
this.gutterWidth = this.computeGutterWidth();
|
|
38
|
-
this.prepared = true;
|
|
39
34
|
}
|
|
40
|
-
|
|
41
|
-
if (this.prepared)
|
|
42
|
-
return;
|
|
35
|
+
prepareSelf(_layoutDirty, _renderDirty) {
|
|
43
36
|
this.prepareMetrics();
|
|
44
37
|
}
|
|
45
|
-
|
|
46
|
-
this.ensurePrepared();
|
|
47
|
-
}
|
|
48
|
-
measure(maxW, maxH) {
|
|
38
|
+
measureSelf(maxW, maxH) {
|
|
49
39
|
const constrained = this.constrainProposal(maxW, maxH);
|
|
50
40
|
this.ensurePrepared();
|
|
51
41
|
const maxLineW = this.cachedLineWidths.reduce((max, w) => (w > max ? w : max), 0);
|
|
@@ -64,7 +54,7 @@ export class CodeBlockHost extends BaseHost {
|
|
|
64
54
|
const maxLines = Math.max(0, Math.min(this.lines.length, h - this.insetY));
|
|
65
55
|
const startX = x + this.padding.left + this.gutterWidth;
|
|
66
56
|
const startY = y + this.padding.top;
|
|
67
|
-
const { value: bgValue, styleId: bgStyleId } = resolveBgStyle(palette, this.
|
|
57
|
+
const { value: bgValue, styleId: bgStyleId } = resolveBgStyle(palette, this.bg);
|
|
68
58
|
if (bgValue !== undefined && w > 0 && h > 0) {
|
|
69
59
|
buffer.fillRect(x, y, w, h, " ".codePointAt(0), bgStyleId);
|
|
70
60
|
}
|
|
@@ -73,8 +63,8 @@ export class CodeBlockHost extends BaseHost {
|
|
|
73
63
|
let drawX = startX;
|
|
74
64
|
if (this.lineNumbers) {
|
|
75
65
|
const gutterStyle = styleIdFromProps(palette, {
|
|
76
|
-
fg: this.
|
|
77
|
-
bg: this.
|
|
66
|
+
fg: this.lineNumberFg ?? Colors.ansi.gray(11),
|
|
67
|
+
bg: this.lineNumberBg ?? this.bg,
|
|
78
68
|
});
|
|
79
69
|
const digits = String(i + 1).padStart(this.gutterWidth - 1, " ");
|
|
80
70
|
buffer.drawText(x + this.padding.left, lineY, `${digits} `, gutterStyle, this.gutterWidth);
|
|
@@ -89,7 +79,7 @@ export class CodeBlockHost extends BaseHost {
|
|
|
89
79
|
const style = token.style ?? {};
|
|
90
80
|
const styleId = styleIdFromProps(palette, {
|
|
91
81
|
fg: style.fg,
|
|
92
|
-
bg: style.bg ?? this.
|
|
82
|
+
bg: style.bg ?? this.bg,
|
|
93
83
|
bold: style.bold,
|
|
94
84
|
italic: style.italic,
|
|
95
85
|
underline: style.underline,
|
|
@@ -103,25 +93,38 @@ export class CodeBlockHost extends BaseHost {
|
|
|
103
93
|
}
|
|
104
94
|
updateProps(props) {
|
|
105
95
|
super.updateProps(props);
|
|
106
|
-
let
|
|
96
|
+
let layoutChanged = false;
|
|
97
|
+
let renderChanged = false;
|
|
107
98
|
if (props.lines !== undefined) {
|
|
108
99
|
this.lines = props.lines;
|
|
109
|
-
|
|
100
|
+
layoutChanged = true;
|
|
110
101
|
}
|
|
111
102
|
if (props.lineNumbers !== undefined) {
|
|
112
103
|
this.lineNumbers = !!props.lineNumbers;
|
|
113
|
-
|
|
104
|
+
layoutChanged = true;
|
|
114
105
|
}
|
|
115
|
-
if (props.padding !== undefined)
|
|
106
|
+
if (props.padding !== undefined) {
|
|
116
107
|
this.padding = resolvePadding(props.padding);
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
if (props.
|
|
120
|
-
this.
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
if (
|
|
124
|
-
this.
|
|
108
|
+
layoutChanged = true;
|
|
109
|
+
}
|
|
110
|
+
if (props.bg !== undefined) {
|
|
111
|
+
this.bg = props.bg;
|
|
112
|
+
renderChanged = true;
|
|
113
|
+
}
|
|
114
|
+
if (props.lineNumberFg !== undefined) {
|
|
115
|
+
this.lineNumberFg = props.lineNumberFg;
|
|
116
|
+
renderChanged = true;
|
|
117
|
+
}
|
|
118
|
+
if (props.lineNumberBg !== undefined) {
|
|
119
|
+
this.lineNumberBg = props.lineNumberBg;
|
|
120
|
+
renderChanged = true;
|
|
121
|
+
}
|
|
122
|
+
if (layoutChanged) {
|
|
123
|
+
this.invalidateLayout();
|
|
124
|
+
}
|
|
125
|
+
else if (renderChanged) {
|
|
126
|
+
this.invalidateRender();
|
|
127
|
+
}
|
|
125
128
|
}
|
|
126
129
|
}
|
|
127
130
|
//# sourceMappingURL=codeblock.js.map
|